ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/trunk/src/math/Wigner3jm.F90
(Generate patch)

Comparing trunk/src/math/Wigner3jm.F90 (file contents):
Revision 991 by chuckv, Mon Jun 19 17:55:26 2006 UTC vs.
Revision 1000 by chuckv, Mon Jul 3 19:40:52 2006 UTC

# Line 1 | Line 1 | subroutine WIGNER3JM (L1, L2, L3, M1, M2MIN, M2MAX, TH
1   subroutine WIGNER3JM (L1, L2, L3, M1, M2MIN, M2MAX, THRCOF, NDIM, &
2       IER)
3 <  use status
3 > ! use status
4   !
5   !! DRC3JM evaluates the 3j symbol g(M2) for all allowed values of M2.
6   !
# Line 158 | Line 158 | subroutine WIGNER3JM (L1, L2, L3, M1, M2MIN, M2MAX, TH
158    if ( (L1-ABS(M1)+EPS < ZERO).OR. &
159       (MOD(L1+ABS(M1)+EPS,ONE) >= EPS+EPS))THEN
160       IER=1
161 <     call handleError('Wigner3jm','L1-ABS(M1) less than zero or '// &
162 <        'L1+ABS(M1) not integer.')
161 > !     call handleError('Wigner3jm','L1-ABS(M1) less than zero or '// &
162 > !        'L1+ABS(M1) not integer.')
163       return
164    ELSEIF((L1+L2-L3 < -EPS).OR.(L1-L2+L3 < -EPS).OR. &
165       (-L1+L2+L3 < -EPS))THEN
166       IER=2
167 <     call handleError('Wigner3jm','L1, L2, L3 do not satisfy '// &
168 <        'triangular condition.')
167 >     write(*,*) eps
168 >     write(*,*) L1,L2,L3
169 >     write(*,*) "L1,L2,L3 do not satisfy triangular condition"
170 > !     call handleError('Wigner3jm','L1, L2, L3 do not satisfy '// &
171 > !        'triangular condition.')
172       return
173    ELSEIF(MOD(L1+L2+L3+EPS,ONE) >= EPS+EPS)THEN
174       IER=3
175 <     call handleError('Wigner3jm','L1+L2+L3 not integer.')
175 > !     call handleError('Wigner3jm','L1+L2+L3 not integer.')
176       return
177    end if
178   !
# Line 181 | Line 184 | subroutine WIGNER3JM (L1, L2, L3, M1, M2MIN, M2MAX, TH
184   !  Check error condition 4.
185    if ( MOD(M2MAX-M2MIN+EPS,ONE) >= EPS+EPS)THEN
186       IER=4
187 <     call handleError('Wigner3jm','M2MAX-M2MIN not integer.')
187 > !     call handleError('Wigner3jm','M2MAX-M2MIN not integer.')
188       return
189    end if
190    if ( M2MIN < M2MAX-EPS)   go to 20
# Line 189 | Line 192 | subroutine WIGNER3JM (L1, L2, L3, M1, M2MIN, M2MAX, TH
192   !
193   !  Check error condition 5.
194    IER=5
195 <  call handleError('Wigner3jm','M2MIN greater than M2MAX.')
195 > !  call handleError('Wigner3jm','M2MIN greater than M2MAX.')
196    return
197   !
198   !
# Line 208 | Line 211 | subroutine WIGNER3JM (L1, L2, L3, M1, M2MIN, M2MAX, TH
211   !
212   !  Check error condition 6.
213     21 IER = 6
214 <  call handleError('Wigner3jm','Dimension of result array for '// &
215 <              '3j coefficients too small.')
214 > !  call handleError('Wigner3jm','Dimension of result array for '// &
215 > !              '3j coefficients too small.')
216    return
217   !
218   !
# Line 424 | Line 427 | end
427   !
428    return
429   end
430 +
431 +
432 + !DECK D1MACH
433 +      DOUBLE PRECISION FUNCTION D1MACH (I)
434 +      IMPLICIT NONE
435 +      INTEGER :: I
436 +      DOUBLE PRECISION :: B, X
437 + !***BEGIN PROLOGUE  D1MACH
438 + !***PURPOSE  Return floating point machine dependent constants.
439 + !***LIBRARY   SLATEC
440 + !***CATEGORY  R1
441 + !***TYPE      SINGLE PRECISION (D1MACH-S, D1MACH-D)
442 + !***KEYWORDS  MACHINE CONSTANTS
443 + !***AUTHOR  Fox, P. A., (Bell Labs)
444 + !           Hall, A. D., (Bell Labs)
445 + !           Schryer, N. L., (Bell Labs)
446 + !***DESCRIPTION
447 + !
448 + !   D1MACH can be used to obtain machine-dependent parameters for the
449 + !   local machine environment.  It is a function subprogram with one
450 + !   (input) argument, and can be referenced as follows:
451 + !
452 + !        A = D1MACH(I)
453 + !
454 + !   where I=1,...,5.  The (output) value of A above is determined by
455 + !   the (input) value of I.  The results for various values of I are
456 + !   discussed below.
457 + !
458 + !   D1MACH(1) = B**(EMIN-1), the smallest positive magnitude.
459 + !   D1MACH(2) = B**EMAX*(1 - B**(-T)), the largest magnitude.
460 + !   D1MACH(3) = B**(-T), the smallest relative spacing.
461 + !   D1MACH(4) = B**(1-T), the largest relative spacing.
462 + !   D1MACH(5) = LOG10(B)
463 + !
464 + !   Assume single precision numbers are represented in the T-digit,
465 + !   base-B form
466 + !
467 + !              sign (B**E)*( (X(1)/B) + ... + (X(T)/B**T) )
468 + !
469 + !   where 0 .LE. X(I) .LT. B for I=1,...,T, 0 .LT. X(1), and
470 + !   EMIN .LE. E .LE. EMAX.
471 + !
472 + !   The values of B, T, EMIN and EMAX are provided in I1MACH as
473 + !   follows:
474 + !   I1MACH(10) = B, the base.
475 + !   I1MACH(11) = T, the number of base-B digits.
476 + !   I1MACH(12) = EMIN, the smallest exponent E.
477 + !   I1MACH(13) = EMAX, the largest exponent E.
478 + !
479 + !
480 + !***REFERENCES  P. A. Fox, A. D. Hall and N. L. Schryer, Framework for
481 + !                 a portable library, ACM Transactions on Mathematical
482 + !                 Software 4, 2 (June 1978), pp. 177-188.
483 + !***ROUTINES CALLED  XERMSG
484 + !***REVISION HISTORY  (YYMMDD)
485 + !   790101  DATE WRITTEN
486 + !   960329  Modified for Fortran 90 (BE after suggestions by EHG)      
487 + !***END PROLOGUE  D1MACH
488 + !      
489 +      X = 1.0D0
490 +      B = RADIX(X)
491 +      SELECT CASE (I)
492 +        CASE (1)
493 +          D1MACH = B**(MINEXPONENT(X)-1) ! the smallest positive magnitude.
494 +        CASE (2)
495 +          D1MACH = HUGE(X)               ! the largest magnitude.
496 +        CASE (3)
497 +          D1MACH = B**(-DIGITS(X))       ! the smallest relative spacing.
498 +        CASE (4)
499 +          D1MACH = B**(1-DIGITS(X))      ! the largest relative spacing.
500 +        CASE (5)
501 +          D1MACH = LOG10(B)
502 +        CASE DEFAULT
503 +          WRITE (*, FMT = 9000)
504 + 9000     FORMAT ('1ERROR    1 IN D1MACH - I OUT OF BOUNDS')
505 +          STOP
506 +      END SELECT
507 +      RETURN
508 +      END

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines