📄 code72.f90
字号:
!!!!!!!!!!!!!!!!!!!!!!!!!!! Program 7.2 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! Please Note: !! !! (1) This computer program is written by Tao Pang in conjunction with !! his book, "An Introduction to Computational Physics," published !! by Cambridge University Press in 1997. !! !! (2) No warranties, express or implied, are made for this program. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!MODULE CSEED INTEGER :: ISEEDEND MODULE CSEED!SUBROUTINE MXWL (N,M,T,V)!! This subroutine assigns velocities according to the Maxwell distribution.! N is the total number of velocity components and M is the total number of! degrees of freedom. T is the system temperature in the reduced units.! Copyright (c) Tao Pang 1997.! IMPLICIT NONE INTEGER, INTENT (IN) :: N,M INTEGER :: I REAL, INTENT (IN) :: T REAL :: V1,V2,EK,VS REAL, INTENT (OUT), DIMENSION (N) :: V!! Assign a Gaussian distribution to each velocity component! DO I = 1, N-1, 2 CALL GRNF (V1,V2) V(I) = V1 V(I+1) = V2 END DO!! Scale the velocity to satisfy the partition theorem! EK = 0.0 DO I = 1, N EK = EK+V(I)*V(I) END DO VS = SQRT(EK/(M*T)) DO I = 1, N V(I) = V(I)/VS END DOEND SUBROUTINE MXWL!SUBROUTINE GRNF (X,Y)!! Two Gaussian random numbers generated from two uniform random! numbers. Copyright (c) Tao Pang 1997.! IMPLICIT NONE REAL, INTENT (OUT) :: X,Y REAL :: PI,R1,R2,R,RANF! PI = 4.0*ATAN(1.0) R1 = -ALOG(1.0-RANF()) R2 = 2.0*PI*RANF() R1 = SQRT(2.0*R1) X = R1*COS(R2) Y = R1*SIN(R2)END SUBROUTINE GRNF!FUNCTION RANF() RESULT (R)!! Uniform random number generator x(n+1) = a*x(n) mod c with! a=7**5 and c = 2**(31)-1. Copyright (c) Tao Pang 1997.! USE CSEED IMPLICIT NONE INTEGER :: IH,IL,IT,IA,IC,IQ,IR DATA IA/16807/,IC/2147483647/,IQ/127773/,IR/2836/ REAL :: R! IH = ISEED/IQ IL = MOD(ISEED,IQ) IT = IA*IL-IR*IH IF(IT.GT.0) THEN ISEED = IT ELSE ISEED = IC+IT END IF R = ISEED/FLOAT(IC)END FUNCTION RANF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -