├── originalbird ├── DSMC0.RES ├── DSMC1.RES ├── DSMC0S.RES ├── DSMC0S.OUT ├── DSMC0S.FOR ├── DSMC0.OUT ├── DSMC0F.FOR ├── DSMC0.FOR ├── DSMC0R.FOR └── DSMC0V.FOR └── README.md /originalbird/DSMC0.RES: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/schuberm/dsmc/HEAD/originalbird/DSMC0.RES -------------------------------------------------------------------------------- /originalbird/DSMC1.RES: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/schuberm/dsmc/HEAD/originalbird/DSMC1.RES -------------------------------------------------------------------------------- /originalbird/DSMC0S.RES: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/schuberm/dsmc/HEAD/originalbird/DSMC0S.RES -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | #DSMC 4 | 5 | ============ 6 | 7 | This work was recently accepted to the [International Journal of Heat and Mass Transfer.] (http://dx.doi.org/10.1016/j.ijheatmasstransfer.2012.07.076) 8 | -------------------------------------------------------------------------------- /originalbird/DSMC0S.OUT: -------------------------------------------------------------------------------- 1 | FROM ZERO TIME TO TIME 2.0008986 2 | COLLISIONS = 24497823.000000000 3 | TOTAL NUMBER OF SAMPLES 20000 4 | 1000 MOLECULES 5 | 80000000.000000000 TOTAL MOLECULAR MOVES 6 | 46065683 SELECTIONS 24497823 COLLISIONS, RATIO 0.53180200 7 | MEAN COLLISION SEPARATION 9.75326344E-04 8 | FLOWFIELD PROPERTIES 9 | CELL X COORD SAMPLE N DENS. U V WTEMP 10 | 1 0.0100 400408 1.0010E+20 0.1563 -4.6133 2.2195 303.5422 11 | 2 0.0300 401675 1.0042E+20 -0.3899 -3.3079 2.4715 303.8603 12 | 3 0.0500 400451 1.0011E+20 0.7132 -3.6313 2.8969 302.7992 13 | 4 0.0700 401312 1.0033E+20 0.0737 -3.8950 2.8523 303.1267 14 | 5 0.0900 400451 1.0011E+20 -0.2705 -3.4478 3.0743 303.4372 15 | 6 0.1100 401729 1.0043E+20 -0.2973 -3.4754 2.4631 302.3945 16 | 7 0.1300 401149 1.0029E+20 0.0493 -3.6360 2.2120 303.4794 17 | 8 0.1500 401033 1.0026E+20 0.3239 -4.8017 2.0626 302.9150 18 | 9 0.1700 402842 1.0071E+20 -0.3842 -4.2497 2.2708 303.0223 19 | 10 0.1900 401478 1.0037E+20 0.1846 -3.7999 3.7126 302.6918 20 | 11 0.2100 400933 1.0023E+20 0.4006 -3.7676 2.2803 302.7745 21 | 12 0.2300 399792 9.9948E+19 -0.6548 -4.3876 2.4862 303.0274 22 | 13 0.2500 399823 9.9956E+19 0.2259 -3.8121 3.2592 304.6136 23 | 14 0.2700 399857 9.9964E+19 0.3130 -4.1357 2.6046 304.2249 24 | 15 0.2900 399370 9.9842E+19 -0.1678 -3.2084 2.1837 303.3720 25 | 16 0.3100 400357 1.0009E+20 -0.1818 -3.4842 2.6615 303.7932 26 | 17 0.3300 399943 9.9986E+19 -0.0872 -3.8719 1.9628 303.5473 27 | 18 0.3500 398976 9.9744E+19 0.2794 -4.7894 2.7264 303.7217 28 | 19 0.3700 400102 1.0003E+20 -0.1700 -4.6313 4.0640 303.6638 29 | 20 0.3900 399928 9.9982E+19 -0.1128 -2.8469 4.4356 303.3659 30 | 21 0.4100 400458 1.0011E+20 -0.0822 -2.1595 5.0124 303.8621 31 | 22 0.4300 400371 1.0009E+20 0.2310 -3.4139 5.5667 303.2343 32 | 23 0.4500 400169 1.0004E+20 0.1345 -3.3134 5.3213 303.5071 33 | 24 0.4700 401067 1.0027E+20 -0.3760 -3.3405 5.1999 303.6508 34 | 25 0.4900 398990 9.9748E+19 0.3662 -2.6906 5.4911 303.5912 35 | 26 0.5100 399234 9.9809E+19 0.0439 -2.4720 5.3113 303.8419 36 | 27 0.5300 399292 9.9823E+19 -0.3029 -3.3915 5.0673 304.8233 37 | 28 0.5500 399331 9.9833E+19 -0.1930 -4.2142 5.3814 304.9038 38 | 29 0.5700 399266 9.9816E+19 0.2356 -4.4478 5.8343 303.6498 39 | 30 0.5900 397996 9.9499E+19 0.1042 -3.9755 5.7807 304.7641 40 | 31 0.6100 401219 1.0030E+20 -0.5055 -3.7893 6.3258 303.5344 41 | 32 0.6300 401102 1.0028E+20 0.5416 -4.3766 6.2273 303.1391 42 | 33 0.6500 401693 1.0042E+20 -0.4867 -6.0904 6.2186 303.2029 43 | 34 0.6700 400030 1.0001E+20 0.7077 -6.2146 5.8132 304.5744 44 | 35 0.6900 400398 1.0010E+20 -0.3846 -6.0651 5.2776 304.2175 45 | 36 0.7100 401329 1.0033E+20 -0.2623 -5.4642 5.0726 303.4722 46 | 37 0.7300 401725 1.0043E+20 0.7250 -4.1836 4.1789 302.9063 47 | 38 0.7500 399572 9.9893E+19 -0.7426 -4.8642 4.5303 303.6352 48 | 39 0.7700 400091 1.0002E+20 0.0776 -4.0079 5.1060 303.6663 49 | 40 0.7900 399740 9.9935E+19 0.0980 -3.7255 5.3458 304.1928 50 | 41 0.8100 399358 9.9839E+19 -0.0868 -4.3026 5.5389 304.4496 51 | 42 0.8300 397987 9.9497E+19 0.1129 -4.2247 5.6129 304.6409 52 | 43 0.8500 398487 9.9622E+19 0.0283 -3.8938 5.4556 304.1579 53 | 44 0.8700 399151 9.9788E+19 0.0158 -3.9253 3.4939 304.4732 54 | 45 0.8900 398247 9.9562E+19 -0.0605 -4.0592 4.7003 304.8397 55 | 46 0.9100 398556 9.9639E+19 -0.0124 -3.2542 5.1340 304.3966 56 | 47 0.9300 399337 9.9834E+19 0.0716 -3.6003 5.6354 304.4927 57 | 48 0.9500 398965 9.9741E+19 0.3593 -4.0032 5.4251 305.1253 58 | 49 0.9700 397461 9.9365E+19 -0.2790 -4.9452 5.0715 305.4688 59 | 50 0.9900 397769 9.9442E+19 -0.7974 -3.9239 5.4997 305.5220 60 | AVERAGE TEMPERATURE 303.82614 61 | 62 | RATIO OF COLLISION NUMBER TO THEORETICAL VALUE 63 | 64 | 0.99980536753009641 65 | -------------------------------------------------------------------------------- /originalbird/DSMC0S.FOR: -------------------------------------------------------------------------------- 1 | * DSMC0S.FOR 2 | * 3 | PROGRAM DSMC0S 4 | * 5 | *--test of collision procedures in a uniform simple gas 6 | * 7 | *--SI units are used throughout 8 | * 9 | PARAMETER (MNM=1000,MNC=50,MNSC=400) 10 | * 11 | *--MNM is the maximum number of molecules 12 | *--MNC is the maximum number of sub-cells 13 | *--MNSC is the maximum number of sub-cells 14 | * 15 | DOUBLE PRECISION MOVT,NCOL,SELT,SEPT 16 | * 17 | *--NCOL is the total number of collisions 18 | *--MOVT the total number of molecular moves 19 | *--SELT the total number of pair selections 20 | *--SEPT the sum of collision pair separations 21 | * 22 | COMMON /MOLSS / NM,PP(MNM),PV(3,MNM),IP(MNM),IR(MNM) 23 | * 24 | *--NM is the number of molecules 25 | *--PP(M) is the x coordinate molecule M 26 | *--PV(1 to 3,M) u,v,w velocity components of molecule M 27 | *--IP(M) sub-cell number of molecule M 28 | *--IR(M) cross-reference array (molecule numbers in order of sub-cells) 29 | * 30 | COMMON /CELLSS/ CC(MNC),CG(3,MNC),IC(2,MNC),ISC(MNSC),CCG(2,MNC), 31 | & ISCG(2,MNSC) 32 | * 33 | *--CC(M) is the cell volume 34 | *--CCG(N,M) is for collisions in cell M 35 | *----N=1 is the maximum value of (relative speed)*(coll. cross-section) 36 | *----N=2 is the remainder when the selection number is rounded 37 | *--CG(N,M) is the geometry related information on cell M 38 | *----N=1 the minimum x coordinate 39 | *----N=2 the maximum x coordinate 40 | *----N=3 the cell width 41 | *--IC(N,M) information on the molecules in cell M 42 | *----N=1 (start address -1) of the molecule numbers in the array IR 43 | *----N=2 the number of molecules in the cell 44 | *--ISC(M) the cell in which the sub-cell lies 45 | *--ISCG(N,M) is the indexing information on sub-cell M 46 | *----N=1 (start address -1) of the molecule numbers in the array IR 47 | *----N=2 the number of molecules in the sub-cell 48 | * 49 | COMMON /GASS / SP(2),SPM(5) 50 | * 51 | *--SP(N) information on species 52 | *----N=1 the molecular mass 53 | *----N=2 the reference diameter of the molecule 54 | *--SPM(N) information on the interaction 55 | *----N=1 the reference value of the collision cross-section 56 | *----N=2 the reference temperature 57 | *----N=3 the viscosity-temperature power law 58 | *----N=4 the reciprocal of the VSS scattering parameter 59 | *----N=5 the Gamma function of (5/2 - viscosity-temperature power law) 60 | * 61 | COMMON /SAMPS / NCOL,MOVT,SELT,SEPT,CS(5,MNC),TIME,NPR,NSMP,FND, 62 | & FTMP 63 | * 64 | *--CS(N,M) sampled information on cell M 65 | *----N=1 the number in the sample 66 | *----N=2,3,4 the sum of u,v,w 67 | *----N=5 the sum of u*u+v*v+w*w 68 | *--TIME time 69 | *--NPR the number of output/restart file update cycles 70 | *--NSMP the total number of samples 71 | *--FND the stream number density 72 | *--FTMP the stream temperature 73 | * 74 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPT 75 | * 76 | *--FNUM is the number of real molecules represented by a simulated mol. 77 | *--DTM is the time step 78 | *--NIS is the number of time steps between samples 79 | *--NSP is the number of samples between restart and output file updates 80 | *--NPS is the estimated number of samples to steady flow 81 | *--NPT is the number of file updates to STOP 82 | * 83 | COMMON /GEOM / CW,NSC,XF,XR 84 | * 85 | *--CW is the cell width 86 | *--NSC is the number of sub-cells per cell 87 | *--XF is the minimum x coordinate 88 | *--XR is the maximum x coordinate 89 | * 90 | COMMON /CONST / PI,SPI,BOLTZ 91 | * 92 | *--PI is pi and SPI is the square root of pi 93 | *--BOLTZ is the Boltzmann constant 94 | * 95 | WRITE (*,*) ' INPUT 0,1 FOR CONTINUING,NEW CALCULATION:- ' 96 | READ (*,*) NQL 97 | * 98 | IF (NQL.EQ.1) THEN 99 | * 100 | CALL INIT0S 101 | * 102 | ELSE 103 | * 104 | WRITE (*,*) ' READ THE RESTART FILE' 105 | OPEN (4,FILE='DSMC0S.RES',STATUS='OLD',FORM='UNFORMATTED') 106 | READ (4) BOLTZ,CC,CCG,CG,COL,CS,CW,DTM,FND,FNUM,FTMP,IC,IP,IR, 107 | & ISC,ISCG,MOVT,NCOL,NIS,NM,NSC,NSMP,NPR,NPT,NSP,PI,PP, 108 | & PV,SELT,SEPT,SP,SPI,SPM,TIME,XF,XR 109 | CLOSE (4) 110 | * 111 | END IF 112 | * 113 | IF (NQL.EQ.1) CALL SAMPI0S 114 | * 115 | 100 NPR=NPR+1 116 | * 117 | DO 200 JJJ=1,NSP 118 | DO 150 III=1,NIS 119 | TIME=TIME+DTM 120 | * 121 | WRITE (*,99001) III,JJJ,NIS,NSP,NCOL 122 | 99001 FORMAT (' DSMC0S:- Move ',2I5,' of ',2I5,F14.0,' Collisions') 123 | * 124 | CALL MOVE0S 125 | * 126 | CALL INDEXS 127 | * 128 | CALL COLLS 129 | * 130 | 150 CONTINUE 131 | * 132 | CALL SAMPLE0S 133 | * 134 | 200 CONTINUE 135 | * 136 | WRITE (*,*) ' WRITING RESTART AND OUTPUT FILES',NPR,' OF ',NPT 137 | OPEN (4,FILE='DSMC0S.RES',FORM='UNFORMATTED') 138 | WRITE (4) BOLTZ,CC,CCG,CG,COL,CS,CW,DTM,FND,FNUM,FTMP,IC,IP,IR, 139 | & ISC,ISCG,MOVT,NCOL,NIS,NM,NSC,NSMP,NPR,NPT,NSP,PI,PP,PV, 140 | & SELT,SEPT,SP,SPI,SPM,TIME,XF,XR 141 | CLOSE (4) 142 | * 143 | CALL OUT0S 144 | * 145 | IF (NPR.LT.NPT) GO TO 100 146 | STOP 147 | END 148 | * INIT0S.FOR 149 | * 150 | *--initialize the variables and the flow at zero time 151 | * 152 | SUBROUTINE INIT0S 153 | * 154 | PARAMETER (MNM=1000,MNC=50,MNSC=400) 155 | * 156 | DOUBLE PRECISION MOVT,NCOL,SELT,SEPT 157 | * 158 | COMMON /MOLSS / NM,PP(MNM),PV(3,MNM),IP(MNM),IR(MNM) 159 | COMMON /CELLSS/ CC(MNC),CG(3,MNC),IC(2,MNC),ISC(MNSC),CCG(2,MNC), 160 | & ISCG(2,MNSC) 161 | COMMON /GASS / SP(2),SPM(5) 162 | COMMON /SAMPS / NCOL,MOVT,SELT,SEPT,CS(5,MNC),TIME,NPR,NSMP,FND, 163 | & FTMP 164 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPT 165 | COMMON /GEOM / CW,NSC,XF,XR 166 | COMMON /CONST / PI,SPI,BOLTZ 167 | * 168 | *--set constants 169 | * 170 | PI=3.141592654 171 | SPI=SQRT(PI) 172 | BOLTZ=1.3806E-23 173 | * 174 | CALL DATA0S 175 | * 176 | *--set additional data on the gas 177 | * 178 | SPM(1)=PI*SP(2)**2 179 | *--the collision cross section is given by eqn (1.8) 180 | SPM(5)=GAM(2.5-SPM(3)) 181 | * 182 | *--initialise variables 183 | * 184 | TIME=0. 185 | NM=0 186 | * 187 | CG(1,1)=XF 188 | CW=(XR-XF)/MNC 189 | DO 100 M=1,MNC 190 | IF (M.GT.1) CG(1,M)=CG(2,M-1) 191 | CG(2,M)=CG(1,M)+CW 192 | CG(3,M)=CW 193 | CC(M)=CW 194 | CCG(2,M)=RF(0) 195 | CCG(1,M)=SPM(1)*300.*SQRT(FTMP/300.) 196 | *--the maximum value of the (rel. speed)*(cross-section) is set to a 197 | *--reasonable, but low, initial value and will be increased as necessary 198 | 100 CONTINUE 199 | * 200 | *--set sub-cells 201 | * 202 | DO 200 N=1,MNC 203 | DO 150 M=1,NSC 204 | L=(N-1)*NSC+M 205 | ISC(L)=N 206 | 150 CONTINUE 207 | 200 CONTINUE 208 | * 209 | *--generate initial gas in equilibrium at temperature FTMP 210 | * 211 | REM=0 212 | VMP=SQRT(2.*BOLTZ*FTMP/SP(1)) 213 | *--VMP is the most probable molecular speed, see eqns (4.1) and (4.7) 214 | DO 300 N=1,MNC 215 | A=FND*CG(3,N)/FNUM+REM 216 | *--A is the number of simulated molecules in cell N 217 | IF (N.LT.MNC) THEN 218 | MM=A 219 | REM=(A-MM) 220 | *--the remainder REM is carried forward to the next cell 221 | ELSE 222 | MM=NINT(A) 223 | END IF 224 | DO 250 M=1,MM 225 | IF (NM.LE.MNM) THEN 226 | *--round-off error could have taken NM to MNM+1 227 | NM=NM+1 228 | PP(NM)=CG(1,N)+RF(0)*(CG(2,N)-CG(1,N)) 229 | IP(NM)=(PP(NM)-CG(1,N))*(NSC-.001)/CG(3,N)+1+NSC*(N-1) 230 | *--species, position, and sub-cell number have been set 231 | DO 210 K=1,3 232 | CALL RVELC(PV(K,NM),A,VMP) 233 | 210 CONTINUE 234 | *--velocity components have been set 235 | END IF 236 | 250 CONTINUE 237 | 300 CONTINUE 238 | WRITE (*,99001) NM 239 | 99001 FORMAT (' ',I6,' MOLECULES') 240 | * 241 | RETURN 242 | END 243 | * SAMPI0S.FOR 244 | * 245 | SUBROUTINE SAMPI0S 246 | * 247 | *--initialises all the sampling variables 248 | * 249 | PARAMETER (MNM=1000,MNC=50,MNSC=400) 250 | * 251 | DOUBLE PRECISION MOVT,NCOL,SELT,SEPT 252 | * 253 | COMMON /SAMPS / NCOL,MOVT,SELT,SEPT,CS(5,MNC),TIME,NPR,NSMP,FND, 254 | & FTMP 255 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPT 256 | * 257 | NPR=0 258 | NCOL=0 259 | NSMP=0 260 | MOVT=0. 261 | SELT=0. 262 | SEPT=0. 263 | DO 100 N=1,MNC 264 | CS(1,N)=1.E-6 265 | DO 50 M=2,5 266 | CS(M,N)=0. 267 | 50 CONTINUE 268 | 100 CONTINUE 269 | RETURN 270 | END 271 | * MOVE0S.FOR 272 | * 273 | SUBROUTINE MOVE0S 274 | * 275 | *--the NM molecules are moved over the time interval DTM 276 | * 277 | PARAMETER (MNM=1000,MNC=50,MNSC=400) 278 | * 279 | DOUBLE PRECISION MOVT,NCOL,SELT,SEPT 280 | * 281 | COMMON /MOLSS / NM,PP(MNM),PV(3,MNM),IP(MNM),IR(MNM) 282 | COMMON /CELLSS/ CC(MNC),CG(3,MNC),IC(2,MNC),ISC(MNSC),CCG(2,MNC), 283 | & ISCG(2,MNSC) 284 | COMMON /SAMPS / NCOL,MOVT,SELT,SEPT,CS(5,MNC),TIME,NPR,NSMP,FND, 285 | & FTMP 286 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPT 287 | COMMON /GEOM / CW,NSC,XF,XR 288 | * 289 | DO 100 N=1,NM 290 | MOVT=MOVT+1 291 | MSC=IP(N) 292 | MC=ISC(MSC) 293 | *--MC is the initial cell number 294 | XI=PP(N) 295 | DX=PV(1,N)*DTM 296 | X=XI+DX 297 | *--molecule N at XI is moved by DX to X 298 | IF (X.LT.XF) THEN 299 | *--specular reflection from the minimum x boundary at x=XF (eqn (11.7)) 300 | X=2.*XF-X 301 | PV(1,N)=-PV(1,N) 302 | END IF 303 | IF (X.GT.XR) THEN 304 | *--specular reflection from the maximum x boundary at x=XR (eqn (11.7)) 305 | X=2.*XR-X 306 | PV(1,N)=-PV(1,N) 307 | END IF 308 | IF (X.LT.CG(1,MC).OR.X.GT.CG(2,MC)) THEN 309 | *--the molecule has moved from the initial cell 310 | MC=(X-XF)/CW+0.99999 311 | IF (MC.EQ.0) MC=1 312 | *--MC is the new cell number (note avoidance of round-off error) 313 | END IF 314 | MSC=((X-CG(1,MC))/CG(3,MC))*(NSC-.001)+1+NSC*(MC-1) 315 | *--MSC is the new sub-cell number 316 | IP(N)=MSC 317 | PP(N)=X 318 | 100 CONTINUE 319 | RETURN 320 | END 321 | * INDEXS.FOR 322 | * 323 | SUBROUTINE INDEXS 324 | * 325 | *--the NM molecule numbers are arranged in order of the cells and, 326 | *--within the cells, in order of the sub-cells 327 | * 328 | PARAMETER (MNM=1000,MNC=50,MNSC=400) 329 | * 330 | COMMON /MOLSS / NM,PP(MNM),PV(3,MNM),IP(MNM),IR(MNM) 331 | COMMON /CELLSS/ CC(MNC),CG(3,MNC),IC(2,MNC),ISC(MNSC),CCG(2,MNC), 332 | & ISCG(2,MNSC) 333 | COMMON /GASS / SP(2),SPM(5) 334 | * 335 | DO 100 NN=1,MNC 336 | IC(2,NN)=0 337 | 100 CONTINUE 338 | DO 200 NN=1,MNSC 339 | ISCG(2,NN)=0 340 | 200 CONTINUE 341 | DO 300 N=1,NM 342 | MSC=IP(N) 343 | ISCG(2,MSC)=ISCG(2,MSC)+1 344 | MC=ISC(MSC) 345 | IC(2,MC)=IC(2,MC)+1 346 | 300 CONTINUE 347 | *--numbers in the cells and sub-cells have been counted 348 | M=0 349 | DO 400 N=1,MNC 350 | IC(1,N)=M 351 | M=M+IC(2,N) 352 | 400 CONTINUE 353 | *--the (start address -1) has been set for the cells 354 | M=0 355 | DO 500 N=1,MNSC 356 | ISCG(1,N)=M 357 | M=M+ISCG(2,N) 358 | ISCG(2,N)=0 359 | 500 CONTINUE 360 | *--the (start address -1) has been set for the sub-cells 361 | DO 600 N=1,NM 362 | MSC=IP(N) 363 | ISCG(2,MSC)=ISCG(2,MSC)+1 364 | K=ISCG(1,MSC)+ISCG(2,MSC) 365 | IR(K)=N 366 | *--the molecule number N has been set in the cross-reference array 367 | 600 CONTINUE 368 | RETURN 369 | END 370 | * COLLS.FOR 371 | * 372 | SUBROUTINE COLLS 373 | * 374 | *--calculates collisions appropriate to DTM in a monatomic gas 375 | * 376 | PARAMETER (MNM=1000,MNC=50,MNSC=400) 377 | * 378 | DOUBLE PRECISION MOVT,NCOL,SELT,SEPT 379 | * 380 | COMMON /MOLSS / NM,PP(MNM),PV(3,MNM),IP(MNM),IR(MNM) 381 | COMMON /CELLSS/ CC(MNC),CG(3,MNC),IC(2,MNC),ISC(MNSC),CCG(2,MNC), 382 | & ISCG(2,MNSC) 383 | COMMON /GASS / SP(2),SPM(5) 384 | COMMON /SAMPS / NCOL,MOVT,SELT,SEPT,CS(5,MNC),TIME,NPR,NSMP,FND, 385 | & FTMP 386 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPT 387 | COMMON /GEOM / CW,NSC,XF,XR 388 | COMMON /CONST / PI,SPI,BOLTZ 389 | * 390 | DIMENSION VRC(3),VRCP(3),VCCM(3) 391 | *--VRC(3) are the pre-collision components of the relative velocity 392 | *--VRP(3) are the post-collision components of the relative velocity 393 | *--VCCM(3) are the components of the centre of mass velocity 394 | * 395 | DO 100 N=1,MNC 396 | *--consider collisions in cell N 397 | SN=CS(1,N) 398 | IF (SN.GT.1.) THEN 399 | AVN=SN/FLOAT(NSMP) 400 | ELSE 401 | AVN=IC(2,N) 402 | END IF 403 | *--AVN is the average number of group MM molecules in the cell 404 | ASEL=0.5*IC(2,N)*AVN*FNUM*CCG(1,N)*DTM/CC(N)+CCG(2,N) 405 | *--ASEL is the number of pairs to be selected, see eqn (11.3) 406 | NSEL=ASEL 407 | CCG(2,N)=ASEL-NSEL 408 | IF (NSEL.GT.0) THEN 409 | IF (IC(2,N).LT.2) THEN 410 | CCG(2,N)=CCG(2,N)+NSEL 411 | *--if there are insufficient molecules to calculate collisions, 412 | *--the number NSEL is added to the remainer CCG(2,N) 413 | ELSE 414 | CVM=CCG(1,N) 415 | SELT=SELT+NSEL 416 | DO 20 ISEL=1,NSEL 417 | K=INT(RF(0)*(IC(2,N)-0.0001))+IC(1,N)+1 418 | L=IR(K) 419 | *--the first mol. L has been chosen at random from group NN in cell N 420 | 5 MSC=IP(L) 421 | IF (ISCG(2,MSC).EQ.1) THEN 422 | *--if MSC has only the chosen mol., find the nearest sub-cell with one 423 | NST=1 424 | NSG=1 425 | 6 INC=NSG*NST 426 | NSG=-NSG 427 | NST=NST+1 428 | MSC=MSC+INC 429 | IF (MSC.LT.1.OR.MSC.GT.MNSC) GO TO 6 430 | IF (ISC(MSC).NE.N.OR.ISCG(2,MSC).LT.1) GO TO 6 431 | END IF 432 | *--the second molecule M is now chosen at random from the 433 | *--molecules that are in the sub-cell MSC 434 | K=INT(RF(0)*(ISCG(2,MSC)-0.0001))+ISCG(1,MSC)+1 435 | M=IR(K) 436 | IF (L.EQ.M) GO TO 5 437 | *--choose a new second molecule if the first is again chosen 438 | * 439 | DO 10 K=1,3 440 | VRC(K)=PV(K,L)-PV(K,M) 441 | 10 CONTINUE 442 | *--VRC(1 to 3) are the components of the relative velocity 443 | VRR=VRC(1)**2+VRC(2)**2+VRC(3)**2 444 | VR=SQRT(VRR) 445 | *--VR is the relative speed 446 | CVR=VR*SPM(1) 447 | & *((2.*BOLTZ*SPM(2)/(0.5*SP(1)*VRR))**(SPM(3)-0.5)) 448 | & /SPM(5) 449 | *--the collision cross-section is based on eqn (4.63) 450 | IF (CVR.GT.CVM) CVM=CVR 451 | *--if necessary, the maximum product in CVM is upgraded 452 | IF (RF(0).LT.CVR/CCG(1,N)) THEN 453 | *--the collision is accepted with the probability of eqn (11.4) 454 | DO 12 K=1,3 455 | VCCM(K)=0.5*(PV(K,L)+PV(K,M)) 456 | 12 CONTINUE 457 | *--VCCM defines the components of the centre-of-mass velocity (eqn 2.1) 458 | NCOL=NCOL+1 459 | SEPT=SEPT+ABS(PP(L)-PP(M)) 460 | IF (ABS(SPM(4)-1.).LT.1.E-3) THEN 461 | *--use the VHS logic 462 | B=2.*RF(0)-1. 463 | *--B is the cosine of a random elevation angle 464 | A=SQRT(1.-B*B) 465 | VRCP(1)=B*VR 466 | C=2.*PI*RF(0) 467 | *--C is a random azimuth angle 468 | VRCP(2)=A*COS(C)*VR 469 | VRCP(3)=A*SIN(C)*VR 470 | ELSE 471 | *--use the VSS logic 472 | B=2.*(RF(0)**SPM(4))-1. 473 | *--B is the cosine of the deflection angle for the VSS model (eqn (11.8) 474 | A=SQRT(1.-B*B) 475 | C=2.*PI*RF(0) 476 | OC=COS(C) 477 | SC=SIN(C) 478 | D=SQRT(VRC(2)**2+VRC(3)**2) 479 | IF (D.GT.1.E-6) THEN 480 | VRCP(1)=B*VRC(1)+A*SC*D 481 | VRCP(2)=B*VRC(2)+A*(VR*VRC(3)*OC-VRC(1)*VRC(2)*SC)/D 482 | VRCP(3)=B*VRC(3)-A*(VR*VRC(2)*OC+VRC(1)*VRC(3)*SC)/D 483 | ELSE 484 | VRCP(1)=B*VRC(1) 485 | VRCP(2)=A*OC*VRC(1) 486 | VRCP(3)=A*SC*VRC(1) 487 | END IF 488 | *--the post-collision rel. velocity components are based on eqn (2.22) 489 | END IF 490 | *--VRCP(1 to 3) are the components of the post-collision relative vel. 491 | DO 14 K=1,3 492 | PV(K,L)=VCCM(K)+0.5*VRCP(K) 493 | PV(K,M)=VCCM(K)-0.5*VRCP(K) 494 | 14 CONTINUE 495 | END IF 496 | 20 CONTINUE 497 | CCG(1,N)=CVM 498 | END IF 499 | END IF 500 | 100 CONTINUE 501 | RETURN 502 | END 503 | * SAMPLE0S.FOR 504 | * 505 | * 506 | SUBROUTINE SAMPLE0S 507 | * 508 | *--sample the molecules in the flow. 509 | * 510 | PARAMETER (MNM=1000,MNC=50,MNSC=400) 511 | * 512 | DOUBLE PRECISION MOVT,NCOL,SELT,SEPT 513 | * 514 | COMMON /MOLSS / NM,PP(MNM),PV(3,MNM),IP(MNM),IR(MNM) 515 | COMMON /CELLSS/ CC(MNC),CG(3,MNC),IC(2,MNC),ISC(MNSC),CCG(2,MNC), 516 | & ISCG(2,MNSC) 517 | COMMON /SAMPS / NCOL,MOVT,SELT,SEPT,CS(5,MNC),TIME,NPR,NSMP,FND, 518 | & FTMP 519 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPT 520 | * 521 | NSMP=NSMP+1 522 | DO 100 N=1,MNC 523 | L=IC(2,N) 524 | IF (L.GT.0) THEN 525 | DO 20 J=1,L 526 | K=IC(1,N)+J 527 | M=IR(K) 528 | CS(1,N)=CS(1,N)+1 529 | DO 10 LL=1,3 530 | CS(LL+1,N)=CS(LL+1,N)+PV(LL,M) 531 | CS(5,N)=CS(5,N)+PV(LL,M)**2 532 | 10 CONTINUE 533 | 20 CONTINUE 534 | END IF 535 | 100 CONTINUE 536 | RETURN 537 | END 538 | * OUT0S.FOR 539 | * 540 | SUBROUTINE OUT0S 541 | * 542 | *--output a progressive set of results to file DSMC0S.OUT. 543 | * 544 | PARAMETER (MNM=1000,MNC=50,MNSC=400) 545 | * 546 | DOUBLE PRECISION MOVT,NCOL,SELT,SEPT,FND2 547 | * 548 | COMMON /MOLSS / NM,PP(MNM),PV(3,MNM),IP(MNM),IR(MNM) 549 | COMMON /CELLSS/ CC(MNC),CG(3,MNC),IC(2,MNC),ISC(MNSC),CCG(2,MNC), 550 | & ISCG(2,MNSC) 551 | COMMON /GASS / SP(2),SPM(5) 552 | COMMON /SAMPS / NCOL,MOVT,SELT,SEPT,CS(5,MNC),TIME,NPR,NSMP,FND, 553 | & FTMP 554 | COMMON /GEOM / CW,NSC,XF,XR 555 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPT 556 | COMMON /CONST / PI,SPI,BOLTZ 557 | DIMENSION VEL(3) 558 | * 559 | OPEN (4,FILE='DSMC0S.OUT',FORM='FORMATTED') 560 | * 561 | WRITE (4,*) ' FROM ZERO TIME TO TIME',TIME 562 | WRITE (4,*) ' COLLISIONS =',NCOL 563 | WRITE (4,*) ' TOTAL NUMBER OF SAMPLES ',NSMP 564 | WRITE (4,*) NM,' MOLECULES' 565 | WRITE (4,*) MOVT,' TOTAL MOLECULAR MOVES' 566 | WRITE (4,*) INT(SELT),' SELECTIONS ',INT(NCOL), 567 | & ' COLLISIONS, RATIO ',REAL(NCOL/SELT) 568 | IF (NCOL.GT.0) WRITE (4,*) ' MEAN COLLISION SEPARATION ', 569 | & REAL(SEPT/NCOL) 570 | * 571 | WRITE (4,*) ' FLOWFIELD PROPERTIES' 572 | WRITE (4,*) 573 | & ' CELL X COORD SAMPLE N DENS. U V WTEMP' 574 | TOT=0. 575 | DO 100 N=1,MNC 576 | A=FNUM/(CG(3,N)*NSMP) 577 | DENN=CS(1,N)*A 578 | *--DENN is the number density 579 | IF (CS(1,N).GT.0.5) THEN 580 | DO 20 K=1,3 581 | VEL(K)=CS(K+1,N)/CS(1,N) 582 | 20 CONTINUE 583 | *--VEL is the stream velocity components, see eqn (1.21) 584 | UU=VEL(1)**2+VEL(2)**2+VEL(3)**2 585 | TT=SP(1)*(CS(5,N)/CS(1,N)-UU)/(3.*BOLTZ) 586 | *--TT is the temperature, see eqn (1.29a) 587 | TOT=TOT+TT 588 | XC=0.5*(CG(1,N)+CG(2,N)) 589 | *--XC is the x coordinate of the midpoint of the cell 590 | WRITE (4,99001) N,XC,INT(CS(1,N)),DENN,VEL(1),VEL(2),VEL(3),TT 591 | END IF 592 | 99001 FORMAT (' ',I5,F10.4,I9,1P,E12.4,0P,4F10.4) 593 | 100 CONTINUE 594 | * 595 | * 596 | C--compare with theoretical collision number (actual temperarure) 597 | AVTMP=TOT/MNC 598 | WRITE (4,*) ' AVERAGE TEMPERATURE ',AVTMP 599 | WRITE (4,*) 600 | WRITE (4,*) ' RATIO OF COLLISION NUMBER TO THEORETICAL VALUE' 601 | WRITE (4,*) 602 | FND2=FND 603 | TCOL=2.*TIME*FND2*FND2*(XR-XF)*SPM(1) 604 | & *((AVTMP/SPM(2))**(1.-SPM(3)))*SQRT(BOLTZ*SPM(2)/(PI*SP(1))) 605 | & /FNUM 606 | *--TCOL is the equilibrium collision rate, see eqn (4.64) 607 | WRITE (4,*) NCOL/TCOL 608 | * 609 | CLOSE (4) 610 | * 611 | RETURN 612 | END 613 | * RVELC.FOR 614 | * 615 | SUBROUTINE RVELC(U,V,VMP) 616 | * 617 | *--generates two random velocity components U an V in an equilibrium 618 | *--gas with most probable speed VMP (based on eqns (C10) and (C12)) 619 | * 620 | A=SQRT(-LOG(RF(0))) 621 | B=6.283185308*RF(0) 622 | U=A*SIN(B)*VMP 623 | V=A*COS(B)*VMP 624 | RETURN 625 | END 626 | * GAM.FOR 627 | * 628 | FUNCTION GAM(X) 629 | * 630 | *--calculates the Gamma function of X. 631 | * 632 | A=1. 633 | Y=X 634 | IF (Y.LT.1.) THEN 635 | A=A/Y 636 | ELSE 637 | 50 Y=Y-1 638 | IF (Y.GE.1.) THEN 639 | A=A*Y 640 | GO TO 50 641 | END IF 642 | END IF 643 | GAM=A*(1.-0.5748646*Y+0.9512363*Y**2-0.6998588*Y**3+ 644 | & 0.4245549*Y**4-0.1010678*Y**5) 645 | RETURN 646 | END 647 | * RF.FOR 648 | * 649 | FUNCTION RF(IDUM) 650 | *--generates a uniformly distributed random fraction between 0 and 1 651 | *----IDUM will generally be 0, but negative values may be used to 652 | *------re-initialize the seed 653 | SAVE MA,INEXT,INEXTP 654 | PARAMETER (MBIG=1000000000,MSEED=161803398,MZ=0,FAC=1.E-9) 655 | DIMENSION MA(55) 656 | DATA IFF/0/ 657 | IF (IDUM.LT.0.OR.IFF.EQ.0) THEN 658 | IFF=1 659 | MJ=MSEED-IABS(IDUM) 660 | MJ=MOD(MJ,MBIG) 661 | MA(55)=MJ 662 | MK=1 663 | DO 50 I=1,54 664 | II=MOD(21*I,55) 665 | MA(II)=MK 666 | MK=MJ-MK 667 | IF (MK.LT.MZ) MK=MK+MBIG 668 | MJ=MA(II) 669 | 50 CONTINUE 670 | DO 100 K=1,4 671 | DO 60 I=1,55 672 | MA(I)=MA(I)-MA(1+MOD(I+30,55)) 673 | IF (MA(I).LT.MZ) MA(I)=MA(I)+MBIG 674 | 60 CONTINUE 675 | 100 CONTINUE 676 | INEXT=0 677 | INEXTP=31 678 | END IF 679 | 200 INEXT=INEXT+1 680 | IF (INEXT.EQ.56) INEXT=1 681 | INEXTP=INEXTP+1 682 | IF (INEXTP.EQ.56) INEXTP=1 683 | MJ=MA(INEXT)-MA(INEXTP) 684 | IF (MJ.LT.MZ) MJ=MJ+MBIG 685 | MA(INEXT)=MJ 686 | RF=MJ*FAC 687 | IF (RF.GT.1.E-8.AND.RF.LT.0.99999999) RETURN 688 | GO TO 200 689 | END 690 | * DATA0S.FOR 691 | * 692 | SUBROUTINE DATA0S 693 | * 694 | *--defines the data for a particular run of DSMC0S.FOR 695 | * 696 | PARAMETER (MNM=1000,MNC=50,MNSC=400) 697 | * 698 | DOUBLE PRECISION MOVT,NCOL,SELT,SEPT 699 | * 700 | COMMON /GASS / SP(2),SPM(5) 701 | COMMON /SAMPS / NCOL,MOVT,SELT,SEPT,CS(5,MNC),TIME,NPR,NSMP,FND, 702 | & FTMP 703 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPT 704 | COMMON /GEOM / CW,NSC,XF,XR 705 | * 706 | *--set data (must be consistent with PARAMETER variables) 707 | * 708 | FND=1.E20 709 | *--FND is the number densty 710 | FTMP=300. 711 | *--FTMP is the temperature 712 | FNUM=1.0E17 713 | *--FNUM is the number of real molecules represented by a simulated mol. 714 | DTM=.25E-4 715 | *--DTM is the time step 716 | NSC=8 717 | *--NSC is the number of sub-cells in each cell 718 | XF=0. 719 | XR=1. 720 | *--the simulated region is from x=XF to x=XR 721 | SP(1)=5.E-26 722 | SP(2)=3.5E-10 723 | *--SP(1) is the molecular mass 724 | *--SP(2) is the molecular diameter 725 | SPM(2)=273. 726 | SPM(3)=0.75 727 | SPM(4)=1. 728 | *--SPM(2) is the reference temperature 729 | *--SPM(3) is the viscosity-temperature power law 730 | *--SPM(4) is the recoprocal of the VSS scattering parameter 731 | NIS=4 732 | *--NIS is the number of time steps between samples 733 | NSP=40 734 | *--NSP is the number of samples between restart and output file updates 735 | NPT=500 736 | *--NPT is the number of file updates to STOP 737 | * 738 | RETURN 739 | END 740 | -------------------------------------------------------------------------------- /originalbird/DSMC0.OUT: -------------------------------------------------------------------------------- 1 | FROM ZERO TIME TO TIME 2.0008986 2 | COLLISIONS:- 3 | 17627348. 6942336. 3107895. 2686098. 716152. 4 | 6942336. 2689322. 1223341. 1051418. 279042. 5 | 3107895. 1223341. 501486. 430719. 124783. 6 | 2686098. 1051418. 430719. 360922. 107131. 7 | 716152. 279042. 124783. 107131. 27194. 8 | TOTAL NUMBER OF SAMPLES 20000 9 | 1000 MOLECULES 10 | 80000000.000000000 TOTAL MOLECULAR MOVES 11 | 60914028 SELECTIONS 27272051 COLLISION EVENTS, RATIO 0.44771379 12 | MEAN COLLISION SEPARATION 9.75698989E-04 13 | SAMPLES 14 | CELL N SP 1 N SP 2 ETC 15 | 1 241023. 79024. 41167. 31633. 7516. 16 | 2 240695. 79323. 40958. 31833. 7601. 17 | 3 240339. 80194. 40966. 31944. 7612. 18 | 4 239584. 80467. 40917. 32217. 7739. 19 | 5 239117. 80240. 41022. 32171. 7960. 20 | 6 239129. 80482. 40603. 32657. 8014. 21 | 7 238307. 78961. 40975. 32801. 8129. 22 | 8 238742. 79454. 40811. 32885. 8090. 23 | 9 238782. 79945. 41049. 32434. 8074. 24 | 10 240395. 80417. 40686. 32102. 8047. 25 | 11 239074. 80328. 40835. 32396. 8074. 26 | 12 239192. 80138. 40771. 31877. 7851. 27 | 13 238328. 80261. 40997. 31831. 8011. 28 | 14 238442. 80388. 40851. 32261. 7996. 29 | 15 239192. 80126. 40960. 32152. 8072. 30 | 16 240099. 80324. 40871. 31491. 7977. 31 | 17 238809. 80165. 40408. 31839. 8124. 32 | 18 239049. 80636. 40481. 31609. 8134. 33 | 19 239404. 79874. 40280. 31689. 8079. 34 | 20 239558. 80328. 40543. 31554. 8220. 35 | 21 239529. 80149. 40281. 31437. 8113. 36 | 22 239243. 80002. 40069. 31243. 7963. 37 | 23 239621. 80243. 40493. 31619. 7798. 38 | 24 240507. 80336. 40472. 31669. 7967. 39 | 25 239540. 80569. 40786. 31666. 8047. 40 | 26 240095. 80321. 40390. 31439. 8071. 41 | 27 239756. 80125. 40208. 31553. 7984. 42 | 28 241341. 79780. 40198. 31787. 7985. 43 | 29 240770. 80360. 40220. 31592. 8023. 44 | 30 241516. 79886. 39848. 31602. 7930. 45 | 31 240954. 79479. 39624. 32145. 7974. 46 | 32 241439. 79647. 39497. 32044. 7964. 47 | 33 239485. 80393. 39167. 32072. 8003. 48 | 34 239291. 80872. 39067. 32371. 7993. 49 | 35 239015. 81014. 39237. 32246. 8027. 50 | 36 239529. 80196. 39309. 32186. 7774. 51 | 37 239901. 79675. 38849. 32283. 7917. 52 | 38 240766. 79474. 38657. 32170. 7962. 53 | 39 240515. 78854. 38848. 32566. 7977. 54 | 40 239697. 79422. 38694. 32693. 7950. 55 | 41 240679. 79648. 38693. 32364. 7933. 56 | 42 239993. 79751. 38890. 32168. 7981. 57 | 43 240196. 79362. 38696. 32337. 8220. 58 | 44 239452. 79854. 39391. 32260. 8040. 59 | 45 241061. 79633. 39471. 31903. 8006. 60 | 46 241027. 79604. 39315. 32189. 8295. 61 | 47 241831. 79850. 38892. 31897. 8121. 62 | 48 242005. 80309. 39025. 31643. 8163. 63 | 49 241872. 80513. 38817. 31653. 8207. 64 | 50 242114. 79604. 38745. 31827. 8292. 65 | FLOWFIELD PROPERTIES 66 | CELL X COORD DENSITY U V W TEMP 67 | 1 0.0100 4.3924E-06 -0.5357 -0.3073 4.8753 303.3790 68 | 2 0.0300 4.3922E-06 0.0837 -1.1610 4.7491 302.8565 69 | 3 0.0500 4.3983E-06 0.2544 -1.1507 3.2088 303.1117 70 | 4 0.0700 4.3943E-06 -0.0105 0.1955 3.7908 303.2594 71 | 5 0.0900 4.3885E-06 -0.0185 -1.1224 3.1586 303.0621 72 | 6 0.1100 4.3917E-06 0.1405 -0.5453 2.6747 302.8878 73 | 7 0.1300 4.3685E-06 -0.1621 -1.4279 4.0193 303.4418 74 | 8 0.1500 4.3785E-06 -0.1126 0.1756 2.4704 304.0193 75 | 9 0.1700 4.3836E-06 0.0479 1.2885 2.6415 302.8633 76 | 10 0.1900 4.4049E-06 0.0212 1.6369 2.4225 302.9471 77 | 11 0.2100 4.3901E-06 -0.0142 0.2771 2.4601 303.2533 78 | 12 0.2300 4.3842E-06 0.2323 0.1300 1.9818 302.4719 79 | 13 0.2500 4.3775E-06 -0.2595 -0.9968 1.9721 303.6209 80 | 14 0.2700 4.3815E-06 -0.0464 -0.4745 1.4574 303.9169 81 | 15 0.2900 4.3888E-06 0.2557 -0.9202 2.4074 302.7472 82 | 16 0.3100 4.3976E-06 -0.1796 -0.9485 2.2335 302.9542 83 | 17 0.3300 4.3800E-06 -0.2734 -2.8698 2.0318 304.1992 84 | 18 0.3500 4.3877E-06 0.3564 -2.2471 2.0943 303.8870 85 | 19 0.3700 4.3821E-06 -0.2712 -2.8387 3.0651 303.6106 86 | 20 0.3900 4.3915E-06 0.2498 -3.0074 1.8154 304.3802 87 | 21 0.4100 4.3859E-06 -0.2682 -2.7496 1.4471 304.9893 88 | 22 0.4300 4.3768E-06 -0.1988 -2.5419 1.5562 304.1717 89 | 23 0.4500 4.3872E-06 0.3802 -2.6829 1.4818 303.9438 90 | 24 0.4700 4.4011E-06 -0.0552 -1.8714 2.5117 303.2264 91 | 25 0.4900 4.3944E-06 -0.1908 -1.5715 1.0196 302.8098 92 | 26 0.5100 4.3951E-06 -0.1937 -2.3545 0.5026 302.9487 93 | 27 0.5300 4.3873E-06 0.5751 -1.9329 1.8751 303.3788 94 | 28 0.5500 4.4043E-06 -0.8306 -2.9512 1.1030 303.3925 95 | 29 0.5700 4.4032E-06 0.3958 -2.4308 2.1245 303.5358 96 | 30 0.5900 4.4040E-06 0.5827 -3.1534 3.2115 302.7720 97 | 31 0.6100 4.3942E-06 -0.6178 -2.4146 3.3070 302.9031 98 | 32 0.6300 4.4007E-06 -0.1113 -1.8213 4.1592 303.0798 99 | 33 0.6500 4.3832E-06 0.0730 -2.5946 4.7389 304.5284 100 | 34 0.6700 4.3869E-06 -0.0668 -2.3166 4.8844 303.7157 101 | 35 0.6900 4.3858E-06 0.3380 -2.8569 4.7518 304.2297 102 | 36 0.7100 4.3807E-06 -0.3456 -3.3345 4.9647 304.3391 103 | 37 0.7300 4.3785E-06 0.1756 -2.5132 4.8118 304.4834 104 | 38 0.7500 4.3857E-06 0.2165 -2.2972 4.5121 304.9423 105 | 39 0.7700 4.3789E-06 -0.1531 -1.8252 4.1372 304.8144 106 | 40 0.7900 4.3745E-06 -0.6599 -2.9064 2.2425 304.1606 107 | 41 0.8100 4.3875E-06 0.4595 -2.0631 3.6573 304.3214 108 | 42 0.8300 4.3808E-06 0.2210 -2.1658 3.2726 305.3826 109 | 43 0.8500 4.3810E-06 0.1019 -2.3144 4.3829 304.4679 110 | 44 0.8700 4.3794E-06 -0.6072 -1.7418 4.0634 304.2131 111 | 45 0.8900 4.3954E-06 0.5437 -2.6792 4.2967 303.6460 112 | 46 0.9100 4.3980E-06 -0.0805 -2.0924 3.1720 303.6579 113 | 47 0.9300 4.4050E-06 -0.2971 -1.3426 4.0787 303.0963 114 | 48 0.9500 4.4123E-06 -0.0121 -2.2770 4.3842 303.4309 115 | 49 0.9700 4.4121E-06 0.5124 -2.3489 5.4935 303.2800 116 | 50 0.9900 4.4062E-06 -0.6684 -2.4329 5.3236 303.9187 117 | 118 | 119 | SPECIES 1 120 | CELL X COORD N DENS DENSITY U DIF VEL V DIF VEL W DIF VEL TEMP 121 | 1 0.0100 6.0256E+19 3.0128E-06 0.4359 0.0909 0.0687 303.3699 122 | 2 0.0300 6.0174E+19 3.0087E-06 -0.1606 0.0671 -0.7521 303.4256 123 | 3 0.0500 6.0085E+19 3.0042E-06 -0.1369 -0.0263 -0.2525 302.9644 124 | 4 0.0700 5.9896E+19 2.9948E-06 0.1388 -0.1079 0.1224 304.1662 125 | 5 0.0900 5.9779E+19 2.9890E-06 -0.1823 -0.4204 0.1195 303.5322 126 | 6 0.1100 5.9782E+19 2.9891E-06 -0.0272 -0.3919 -0.5149 303.3174 127 | 7 0.1300 5.9577E+19 2.9788E-06 -0.0777 -0.6910 -0.0713 304.4320 128 | 8 0.1500 5.9685E+19 2.9843E-06 -0.0124 0.1438 0.0437 304.2770 129 | 9 0.1700 5.9695E+19 2.9848E-06 0.1278 0.1351 -0.0660 303.0853 130 | 10 0.1900 6.0099E+19 3.0049E-06 0.1144 0.2715 -0.1683 303.0589 131 | 11 0.2100 5.9768E+19 2.9884E-06 -0.1000 0.2916 0.1893 303.6079 132 | 12 0.2300 5.9798E+19 2.9899E-06 0.3344 0.2814 -0.4538 302.8127 133 | 13 0.2500 5.9582E+19 2.9791E-06 0.4119 -0.1617 -1.0445 303.8614 134 | 14 0.2700 5.9610E+19 2.9805E-06 0.2332 -0.5450 -0.2243 304.4325 135 | 15 0.2900 5.9798E+19 2.9899E-06 -0.0020 -0.2006 -0.2335 303.1786 136 | 16 0.3100 6.0025E+19 3.0012E-06 -0.2810 -0.2527 -0.3657 302.8135 137 | 17 0.3300 5.9702E+19 2.9851E-06 0.0686 0.2084 -0.3709 303.4036 138 | 18 0.3500 5.9762E+19 2.9881E-06 0.1720 0.4782 -0.8538 304.2462 139 | 19 0.3700 5.9851E+19 2.9925E-06 -0.0789 0.1364 -0.3230 303.9330 140 | 20 0.3900 5.9890E+19 2.9945E-06 0.5280 -0.1775 -0.0945 304.1972 141 | 21 0.4100 5.9882E+19 2.9941E-06 -0.4296 -0.0772 -0.1795 305.1838 142 | 22 0.4300 5.9811E+19 2.9905E-06 0.2605 -0.0295 -0.3857 303.8911 143 | 23 0.4500 5.9905E+19 2.9953E-06 0.1424 -0.4372 -0.3709 303.9034 144 | 24 0.4700 6.0127E+19 3.0063E-06 -0.7806 1.0836 0.1759 303.3150 145 | 25 0.4900 5.9885E+19 2.9942E-06 0.4559 0.1896 -0.2913 302.7569 146 | 26 0.5100 6.0024E+19 3.0012E-06 0.0002 0.1111 0.3485 302.9378 147 | 27 0.5300 5.9939E+19 2.9970E-06 0.1687 0.1822 0.0980 303.5590 148 | 28 0.5500 6.0335E+19 3.0168E-06 -0.1066 0.2750 0.1094 303.5583 149 | 29 0.5700 6.0193E+19 3.0096E-06 -0.1225 0.5728 0.0940 303.5167 150 | 30 0.5900 6.0379E+19 3.0190E-06 0.5165 -0.0173 -0.1399 303.0779 151 | 31 0.6100 6.0238E+19 3.0119E-06 -0.0767 -0.1630 -0.1771 303.3976 152 | 32 0.6300 6.0360E+19 3.0180E-06 0.3142 0.5082 0.3756 303.3049 153 | 33 0.6500 5.9871E+19 2.9936E-06 -0.0283 -0.2727 0.1299 304.7686 154 | 34 0.6700 5.9823E+19 2.9911E-06 0.0490 0.1156 0.6451 303.9876 155 | 35 0.6900 5.9754E+19 2.9877E-06 -0.1250 0.3129 0.5239 303.9530 156 | 36 0.7100 5.9882E+19 2.9941E-06 0.4292 0.4104 0.1458 304.9081 157 | 37 0.7300 5.9975E+19 2.9988E-06 -0.2095 -0.1334 0.4276 304.2151 158 | 38 0.7500 6.0191E+19 3.0096E-06 -0.0560 -0.0207 0.1077 304.3408 159 | 39 0.7700 6.0129E+19 3.0064E-06 0.4576 0.5516 -0.4430 304.5981 160 | 40 0.7900 5.9924E+19 2.9962E-06 -0.0641 0.1185 0.7407 304.0179 161 | 41 0.8100 6.0170E+19 3.0085E-06 -0.0902 -0.2907 0.1429 304.0017 162 | 42 0.8300 5.9998E+19 2.9999E-06 -0.0149 -0.3801 0.0363 305.2816 163 | 43 0.8500 6.0049E+19 3.0025E-06 -0.2176 -0.1494 0.2749 304.3941 164 | 44 0.8700 5.9863E+19 2.9932E-06 0.3132 0.2032 0.3317 304.4477 165 | 45 0.8900 6.0265E+19 3.0133E-06 0.1093 -0.2438 0.0051 303.3493 166 | 46 0.9100 6.0257E+19 3.0128E-06 -0.1123 0.0073 -0.2513 303.8523 167 | 47 0.9300 6.0458E+19 3.0229E-06 0.1021 -0.1299 -0.4192 303.0667 168 | 48 0.9500 6.0501E+19 3.0251E-06 0.3205 -0.1688 0.2986 303.0982 169 | 49 0.9700 6.0468E+19 3.0234E-06 -0.0048 -0.1142 -0.0594 303.2586 170 | 50 0.9900 6.0528E+19 3.0264E-06 -0.4765 0.0837 -0.3512 303.5905 171 | 172 | SPECIES 2 173 | CELL X COORD N DENS DENSITY U DIF VEL V DIF VEL W DIF VEL TEMP 174 | 1 0.0100 1.9756E+19 8.8902E-07 -0.5863 -0.3447 0.2969 303.1552 175 | 2 0.0300 1.9831E+19 8.9238E-07 -0.2230 -0.2267 1.2823 301.9067 176 | 3 0.0500 2.0048E+19 9.0218E-07 0.7140 0.9697 0.5977 302.8214 177 | 4 0.0700 2.0117E+19 9.0525E-07 -0.9263 0.6107 -0.6870 301.7152 178 | 5 0.0900 2.0060E+19 9.0270E-07 0.4168 0.8312 -1.3320 302.1045 179 | 6 0.1100 2.0120E+19 9.0542E-07 0.1929 0.2411 1.5962 302.1400 180 | 7 0.1300 1.9740E+19 8.8831E-07 -0.3109 1.7581 1.2530 302.8153 181 | 8 0.1500 1.9863E+19 8.9386E-07 -0.3958 0.0520 -0.4420 304.4551 182 | 9 0.1700 1.9986E+19 8.9938E-07 -0.3887 0.8063 0.0853 302.6484 183 | 10 0.1900 2.0104E+19 9.0469E-07 0.1382 -0.7002 0.2613 302.7378 184 | 11 0.2100 2.0082E+19 9.0369E-07 0.2138 0.1142 0.0232 302.4388 185 | 12 0.2300 2.0035E+19 9.0155E-07 -0.8566 -0.8793 0.0464 300.9484 186 | 13 0.2500 2.0065E+19 9.0294E-07 -0.4811 -0.0838 0.9700 303.3954 187 | 14 0.2700 2.0097E+19 9.0436E-07 -0.7025 1.3388 -0.5803 304.0825 188 | 15 0.2900 2.0031E+19 9.0142E-07 0.2060 1.1897 1.4655 302.2023 189 | 16 0.3100 2.0081E+19 9.0364E-07 1.6135 0.1281 -0.3733 304.5066 190 | 17 0.3300 2.0041E+19 9.0186E-07 -0.2616 -1.3941 1.5585 305.6788 191 | 18 0.3500 2.0159E+19 9.0716E-07 -1.2213 -0.3039 1.9479 302.7143 192 | 19 0.3700 1.9968E+19 8.9858E-07 -0.1045 -0.5664 0.9261 304.6519 193 | 20 0.3900 2.0082E+19 9.0369E-07 -0.3008 0.8649 0.7823 305.4001 194 | 21 0.4100 2.0037E+19 9.0168E-07 -0.1213 1.1527 0.7121 305.0507 195 | 22 0.4300 2.0000E+19 9.0002E-07 -1.1888 -0.8890 1.0196 305.1926 196 | 23 0.4500 2.0061E+19 9.0273E-07 -0.3193 0.8802 -0.0541 302.1402 197 | 24 0.4700 2.0084E+19 9.0378E-07 1.5330 -2.0118 -0.4563 302.8755 198 | 25 0.4900 2.0142E+19 9.0640E-07 -0.4180 -1.3894 0.6151 303.5307 199 | 26 0.5100 2.0080E+19 9.0361E-07 -0.1033 -1.1636 -0.6031 302.5196 200 | 27 0.5300 2.0031E+19 9.0141E-07 -0.7153 -0.7898 -0.5545 302.7505 201 | 28 0.5500 1.9945E+19 8.9753E-07 0.3954 0.6518 0.5285 303.8379 202 | 29 0.5700 2.0090E+19 9.0405E-07 -1.3140 -1.4620 0.8971 303.9308 203 | 30 0.5900 1.9972E+19 8.9872E-07 -1.1844 0.8535 0.9723 302.5819 204 | 31 0.6100 1.9870E+19 8.9414E-07 0.5092 1.5448 0.8966 301.0076 205 | 32 0.6300 1.9912E+19 8.9603E-07 -0.5372 -0.6299 -0.5079 302.6190 206 | 33 0.6500 2.0098E+19 9.0442E-07 -0.0024 0.5782 -0.1747 303.3347 207 | 34 0.6700 2.0218E+19 9.0981E-07 -0.0634 0.7156 0.0000 303.2027 208 | 35 0.6900 2.0253E+19 9.1141E-07 -0.2807 -1.3211 -1.3647 305.6131 209 | 36 0.7100 2.0049E+19 9.0221E-07 -1.1484 -0.5709 -0.5021 303.2577 210 | 37 0.7300 1.9919E+19 8.9634E-07 0.9296 -1.4148 -0.6341 305.8182 211 | 38 0.7500 1.9869E+19 8.9408E-07 0.6829 0.1185 -0.9600 305.3571 212 | 39 0.7700 1.9714E+19 8.8711E-07 -1.2835 -2.1547 0.1605 304.8528 213 | 40 0.7900 1.9855E+19 8.9350E-07 0.3700 0.2121 -1.2658 302.7770 214 | 41 0.8100 1.9912E+19 8.9604E-07 0.0500 0.2029 -0.5325 304.2312 215 | 42 0.8300 1.9938E+19 8.9720E-07 -1.0387 0.9603 -0.7817 305.2868 216 | 43 0.8500 1.9841E+19 8.9282E-07 1.1262 0.6536 -0.0061 304.8584 217 | 44 0.8700 1.9964E+19 8.9836E-07 -0.0359 0.5033 -0.9933 304.1967 218 | 45 0.8900 1.9908E+19 8.9587E-07 -0.8811 0.2176 0.0996 304.4084 219 | 46 0.9100 1.9901E+19 8.9554E-07 0.4248 -0.5252 0.4396 302.6170 220 | 47 0.9300 1.9963E+19 8.9831E-07 0.1478 0.5218 0.7954 301.7138 221 | 48 0.9500 2.0077E+19 9.0348E-07 -0.3698 -0.1858 -0.8437 303.1223 222 | 49 0.9700 2.0128E+19 9.0577E-07 0.7163 0.5407 0.7154 302.7312 223 | 50 0.9900 1.9901E+19 8.9554E-07 1.3599 -0.8374 1.6434 303.8396 224 | 225 | SPECIES 3 226 | CELL X COORD N DENS DENSITY U DIF VEL V DIF VEL W DIF VEL TEMP 227 | 1 0.0100 1.0292E+19 2.5729E-07 -1.8772 -0.8496 -2.0589 304.8272 228 | 2 0.0300 1.0240E+19 2.5599E-07 3.1250 0.7142 2.6179 301.9043 229 | 3 0.0500 1.0242E+19 2.5604E-07 -1.6890 -2.7869 1.9835 301.9733 230 | 4 0.0700 1.0229E+19 2.5573E-07 0.0293 -2.0588 1.8010 302.3476 231 | 5 0.0900 1.0256E+19 2.5639E-07 0.8869 -0.2079 2.4896 304.6194 232 | 6 0.1100 1.0151E+19 2.5377E-07 -1.8296 -2.1342 0.6573 302.1208 233 | 7 0.1300 1.0244E+19 2.5609E-07 3.6569 1.1072 -2.9704 301.4090 234 | 8 0.1500 1.0203E+19 2.5507E-07 0.6571 0.3383 1.2048 303.7512 235 | 9 0.1700 1.0262E+19 2.5656E-07 0.2558 -3.4868 -2.7163 303.0025 236 | 10 0.1900 1.0171E+19 2.5429E-07 0.5063 -0.5962 0.3659 302.3521 237 | 11 0.2100 1.0209E+19 2.5522E-07 -2.0426 -3.4311 -0.5523 303.0415 238 | 12 0.2300 1.0193E+19 2.5482E-07 0.1418 -0.2474 2.9841 302.4665 239 | 13 0.2500 1.0249E+19 2.5623E-07 -2.8220 2.4925 5.0767 302.0863 240 | 14 0.2700 1.0213E+19 2.5532E-07 -0.2886 3.1401 2.9703 303.0868 241 | 15 0.2900 1.0240E+19 2.5600E-07 2.2513 -1.0858 -1.1450 302.6856 242 | 16 0.3100 1.0218E+19 2.5544E-07 -2.4133 2.5041 3.0413 300.8228 243 | 17 0.3300 1.0102E+19 2.5255E-07 -2.7118 1.0702 -1.4029 304.0951 244 | 18 0.3500 1.0120E+19 2.5301E-07 -0.4259 -2.4136 -0.4397 303.2705 245 | 19 0.3700 1.0070E+19 2.5175E-07 2.9157 1.3339 2.0622 300.1203 246 | 20 0.3900 1.0136E+19 2.5339E-07 -2.9595 1.7187 -0.0040 303.7798 247 | 21 0.4100 1.0070E+19 2.5176E-07 2.8026 -1.1114 2.3973 303.9274 248 | 22 0.4300 1.0017E+19 2.5043E-07 0.0459 2.6883 1.8166 303.2605 249 | 23 0.4500 1.0123E+19 2.5308E-07 -1.4289 -0.2865 2.6064 307.5097 250 | 24 0.4700 1.0118E+19 2.5295E-07 2.8502 -2.9695 -1.8120 301.9084 251 | 25 0.4900 1.0197E+19 2.5491E-07 -2.4205 1.9247 0.0703 302.1721 252 | 26 0.5100 1.0098E+19 2.5244E-07 1.6102 3.6323 -2.4829 304.8406 253 | 27 0.5300 1.0052E+19 2.5130E-07 -0.2715 0.9214 2.4665 305.2952 254 | 28 0.5500 1.0049E+19 2.5124E-07 0.7728 -1.4127 -3.7392 300.7733 255 | 29 0.5700 1.0055E+19 2.5137E-07 2.8030 -1.0979 -2.1285 303.0438 256 | 30 0.5900 9.9620E+18 2.4905E-07 -1.6497 -2.5581 -0.7460 302.0998 257 | 31 0.6100 9.9060E+18 2.4765E-07 0.3551 -2.7702 -2.7054 302.7785 258 | 32 0.6300 9.8742E+18 2.4686E-07 -2.7579 -1.7501 -2.4744 302.4289 259 | 33 0.6500 9.7918E+18 2.4479E-07 -0.5372 -0.2053 1.3787 304.7755 260 | 34 0.6700 9.7667E+18 2.4417E-07 -1.9701 -3.5571 -5.3795 305.2487 261 | 35 0.6900 9.8093E+18 2.4523E-07 0.6836 1.6553 -1.5927 303.9182 262 | 36 0.7100 9.8273E+18 2.4568E-07 0.3318 -4.0108 1.5773 303.1518 263 | 37 0.7300 9.7123E+18 2.4281E-07 -1.3557 2.1385 -3.6304 304.6565 264 | 38 0.7500 9.6642E+18 2.4161E-07 -3.0392 -0.9284 4.1901 307.4481 265 | 39 0.7700 9.7120E+18 2.4280E-07 -0.9478 3.0796 1.9070 308.3922 266 | 40 0.7900 9.6735E+18 2.4184E-07 0.7348 -0.5480 -1.2072 306.5387 267 | 41 0.8100 9.6733E+18 2.4183E-07 1.7807 1.3894 -1.3908 305.5806 268 | 42 0.8300 9.7225E+18 2.4306E-07 1.8265 -1.7368 -0.7671 305.7101 269 | 43 0.8500 9.6740E+18 2.4185E-07 -2.9776 -4.6923 -2.6326 304.6436 270 | 44 0.8700 9.8477E+18 2.4619E-07 -0.4617 -0.3011 -1.1355 303.0822 271 | 45 0.8900 9.8677E+18 2.4669E-07 2.6710 0.4271 0.9989 302.7841 272 | 46 0.9100 9.8287E+18 2.4572E-07 -0.6547 -1.2400 0.5317 300.9906 273 | 47 0.9300 9.7230E+18 2.4307E-07 -0.3890 -1.0347 1.5644 305.9837 274 | 48 0.9500 9.7563E+18 2.4391E-07 -0.2463 0.1149 0.9959 306.8011 275 | 49 0.9700 9.7043E+18 2.4261E-07 -2.0024 0.7293 1.7636 303.9136 276 | 50 0.9900 9.6862E+18 2.4216E-07 0.5127 -0.8231 0.4339 305.4012 277 | 278 | SPECIES 4 279 | CELL X COORD N DENS DENSITY U DIF VEL V DIF VEL W DIF VEL TEMP 280 | 1 0.0100 7.9083E+18 1.5816E-07 -1.2059 2.7453 1.8562 301.7607 281 | 2 0.0300 7.9582E+18 1.5916E-07 -0.4156 0.8113 3.7521 303.0190 282 | 3 0.0500 7.9860E+18 1.5972E-07 2.5962 -0.6763 0.8006 305.9687 283 | 4 0.0700 8.0542E+18 1.6108E-07 1.5782 1.8661 0.4581 301.9858 284 | 5 0.0900 8.0427E+18 1.6085E-07 0.7876 0.9333 1.2180 300.3337 285 | 6 0.1100 8.1642E+18 1.6328E-07 1.7713 5.5528 -0.1102 302.7319 286 | 7 0.1300 8.2003E+18 1.6401E-07 -3.3637 0.0595 -0.3678 300.2026 287 | 8 0.1500 8.2212E+18 1.6442E-07 0.9831 -1.6826 -1.3280 300.1627 288 | 9 0.1700 8.1085E+18 1.6217E-07 -0.5029 0.6505 4.4329 301.7554 289 | 10 0.1900 8.0255E+18 1.6051E-07 -1.1926 0.5644 1.2720 304.8109 290 | 11 0.2100 8.0990E+18 1.6198E-07 -0.9070 -2.9369 -0.6745 302.5457 291 | 12 0.2300 7.9692E+18 1.5938E-07 0.3170 1.0225 2.9555 303.9344 292 | 13 0.2500 7.9578E+18 1.5915E-07 0.4469 1.0571 3.3186 304.5012 293 | 14 0.2700 8.0652E+18 1.6130E-07 -0.8087 0.6390 2.5135 300.6469 294 | 15 0.2900 8.0380E+18 1.6076E-07 -5.9851 0.9245 -1.8698 301.2154 295 | 16 0.3100 7.8728E+18 1.5746E-07 2.3814 0.7711 0.0168 302.9132 296 | 17 0.3300 7.9598E+18 1.5919E-07 6.4953 2.4484 1.1373 305.3044 297 | 18 0.3500 7.9022E+18 1.5804E-07 1.4860 -1.3592 6.9990 303.7910 298 | 19 0.3700 7.9223E+18 1.5845E-07 -2.2769 -4.4651 -0.2285 302.6594 299 | 20 0.3900 7.8885E+18 1.5777E-07 -1.1993 0.0261 -2.2178 303.5164 300 | 21 0.4100 7.8592E+18 1.5718E-07 1.4297 -4.8367 -3.3114 305.8338 301 | 22 0.4300 7.8107E+18 1.5621E-07 3.8123 1.0305 0.1458 304.0935 302 | 23 0.4500 7.9047E+18 1.5809E-07 2.0108 2.2454 1.6186 304.7377 303 | 24 0.4700 7.9173E+18 1.5835E-07 -0.4341 -2.1273 1.8872 304.2868 304 | 25 0.4900 7.9165E+18 1.5833E-07 -1.9733 1.8273 2.8673 302.8946 305 | 26 0.5100 7.8598E+18 1.5720E-07 -1.7816 -2.0019 0.7492 302.5934 306 | 27 0.5300 7.8882E+18 1.5777E-07 0.6954 -2.7198 -0.1698 301.1241 307 | 28 0.5500 7.9467E+18 1.5893E-07 0.1283 -3.8606 2.3336 303.8906 308 | 29 0.5700 7.8980E+18 1.5796E-07 0.8901 -2.2268 0.2131 304.0319 309 | 30 0.5900 7.9005E+18 1.5801E-07 -0.4029 -3.6354 -0.2263 302.2065 310 | 31 0.6100 8.0362E+18 1.6072E-07 -0.5313 -2.0974 1.2178 302.6473 311 | 32 0.6300 8.0110E+18 1.6022E-07 1.9608 -1.5389 -0.4628 303.3613 312 | 33 0.6500 8.0180E+18 1.6036E-07 0.4414 0.1270 -5.5562 305.0496 313 | 34 0.6700 8.0927E+18 1.6185E-07 0.2740 0.1450 -2.9320 302.4948 314 | 35 0.6900 8.0615E+18 1.6123E-07 2.3155 0.4862 -0.1320 302.8152 315 | 36 0.7100 8.0465E+18 1.6093E-07 -1.3868 0.5635 1.2058 303.6531 316 | 37 0.7300 8.0708E+18 1.6142E-07 1.9316 7.3009 1.4479 304.1251 317 | 38 0.7500 8.0425E+18 1.6085E-07 0.5897 2.6192 -1.4475 304.3738 318 | 39 0.7700 8.1415E+18 1.6283E-07 0.8045 -4.3400 5.4239 302.8615 319 | 40 0.7900 8.1732E+18 1.6347E-07 -2.2849 -2.3485 -0.1420 304.2788 320 | 41 0.8100 8.0910E+18 1.6182E-07 -1.2465 -0.4065 2.1008 304.5987 321 | 42 0.8300 8.0420E+18 1.6084E-07 3.5012 2.6384 5.1492 306.4926 322 | 43 0.8500 8.0842E+18 1.6168E-07 0.7824 4.0402 -1.8615 303.6783 323 | 44 0.8700 8.0650E+18 1.6130E-07 -3.1048 -5.5536 0.1552 304.3356 324 | 45 0.8900 7.9758E+18 1.5951E-07 0.8683 0.7446 -1.4551 304.6006 325 | 46 0.9100 8.0472E+18 1.6094E-07 -0.4650 4.2239 1.2407 308.0771 326 | 47 0.9300 7.9742E+18 1.5948E-07 -0.9548 -0.7023 4.5483 304.1450 327 | 48 0.9500 7.9107E+18 1.5821E-07 -3.6041 4.5664 1.0714 302.1111 328 | 49 0.9700 7.9133E+18 1.5826E-07 0.6907 -1.9953 -4.0874 303.1449 329 | 50 0.9900 7.9568E+18 1.5913E-07 -1.5547 3.1366 -2.3723 304.7162 330 | 331 | SPECIES 5 332 | CELL X COORD N DENS DENSITY U DIF VEL V DIF VEL W DIF VEL TEMP 333 | 1 0.0100 1.8790E+18 7.5160E-08 -1.5743 -2.4348 -3.1255 304.8175 334 | 2 0.0300 1.9002E+18 7.6010E-08 -0.6777 -4.0973 -1.9587 299.0506 335 | 3 0.0500 1.9030E+18 7.6120E-08 -2.8268 0.3389 -5.4712 304.8331 336 | 4 0.0700 1.9348E+18 7.7390E-08 2.0844 -0.0485 -3.6065 301.2915 337 | 5 0.0900 1.9900E+18 7.9600E-08 -2.3312 5.1429 0.1394 301.5013 338 | 6 0.1100 2.0035E+18 8.0140E-08 1.0185 7.3382 -0.6874 301.9106 339 | 7 0.1300 2.0323E+18 8.1290E-08 1.5120 2.5027 -0.9807 303.6462 340 | 8 0.1500 2.0225E+18 8.0900E-08 0.7616 -3.5249 2.1735 309.1269 341 | 9 0.1700 2.0185E+18 8.0740E-08 -0.1988 -4.2020 1.2158 302.0436 342 | 10 0.1900 2.0118E+18 8.0470E-08 -5.0447 -1.5090 -0.3476 297.2269 343 | 11 0.2100 2.0185E+18 8.0740E-08 9.5842 4.6654 -4.1691 304.5675 344 | 12 0.2300 1.9628E+18 7.8510E-08 -4.0015 -1.8925 1.0633 301.6354 345 | 13 0.2500 2.0027E+18 8.0110E-08 -1.7586 -3.1155 5.0779 302.8396 346 | 14 0.2700 1.9990E+18 7.9960E-08 1.8070 -6.1438 0.3690 304.1563 347 | 15 0.2900 2.0180E+18 8.0720E-08 2.5519 -4.2521 -0.3628 301.6226 348 | 16 0.3100 1.9942E+18 7.9770E-08 -4.6780 -1.4828 8.2157 302.4327 349 | 17 0.3300 2.0310E+18 8.1240E-08 -3.9132 -0.3056 -1.5389 308.9768 350 | 18 0.3500 2.0335E+18 8.1340E-08 5.7393 -4.0272 -2.5909 308.1360 351 | 19 0.3700 2.0197E+18 8.0790E-08 -0.5343 5.8489 -4.3125 304.7334 352 | 20 0.3900 2.0550E+18 8.2200E-08 -4.5024 -8.3911 -0.8894 305.8616 353 | 21 0.4100 2.0282E+18 8.1130E-08 5.7376 2.8588 -2.3141 300.4549 354 | 22 0.4300 1.9907E+18 7.9630E-08 -3.9712 0.6782 -3.0392 307.1049 355 | 23 0.4500 1.9495E+18 7.7980E-08 -1.2113 2.9834 3.1315 301.9178 356 | 24 0.4700 1.9917E+18 7.9670E-08 3.8783 -4.4130 0.5404 306.3217 357 | 25 0.4900 2.0118E+18 8.0470E-08 -0.7058 -1.0974 -1.9541 299.9639 358 | 26 0.5100 2.0177E+18 8.0710E-08 -0.4172 1.4344 0.0986 299.3569 359 | 27 0.5300 1.9960E+18 7.9840E-08 1.2238 4.5522 -4.8466 303.4333 360 | 28 0.5500 1.9962E+18 7.9850E-08 -3.1021 -5.5881 -2.9542 304.9892 361 | 29 0.5700 2.0058E+18 8.0230E-08 8.8654 2.8125 -7.3836 300.4161 362 | 30 0.5900 1.9825E+18 7.9300E-08 -0.2564 6.2631 -2.9009 300.8555 363 | 31 0.6100 1.9935E+18 7.9740E-08 -2.8441 1.6657 2.5817 308.3892 364 | 32 0.6300 1.9910E+18 7.9640E-08 -1.2598 -3.6497 0.0832 302.8522 365 | 33 0.6500 2.0007E+18 8.0030E-08 1.8432 4.0392 4.0294 305.9238 366 | 34 0.6700 1.9982E+18 7.9930E-08 4.3491 -1.8965 -1.7707 298.0188 367 | 35 0.6900 2.0068E+18 8.0270E-08 1.1001 -2.6802 1.1240 305.6203 368 | 36 0.7100 1.9435E+18 7.7740E-08 -1.3821 2.3274 -7.2677 306.6509 369 | 37 0.7300 1.9792E+18 7.9170E-08 -2.3692 -0.3705 -0.8336 299.5692 370 | 38 0.7500 1.9905E+18 7.9620E-08 2.4800 -3.0235 -3.0825 308.9840 371 | 39 0.7700 1.9942E+18 7.9770E-08 -1.7320 2.6587 -1.9634 301.2621 372 | 40 0.7900 1.9875E+18 7.9500E-08 0.7216 -0.3538 -9.7242 310.0665 373 | 41 0.8100 1.9833E+18 7.9330E-08 -0.0300 5.3260 0.5497 307.5805 374 | 42 0.8300 1.9952E+18 7.9810E-08 -0.3826 3.4647 -0.6166 303.1544 375 | 43 0.8500 2.0550E+18 8.2200E-08 2.9373 4.2146 1.4335 304.9377 376 | 44 0.8700 2.0100E+18 8.0400E-08 -3.6156 -1.1240 1.9164 302.3153 377 | 45 0.8900 2.0015E+18 8.0060E-08 -4.2135 3.9397 -1.4846 305.3636 378 | 46 0.9100 2.0737E+18 8.2950E-08 2.3334 0.8825 0.4006 303.4346 379 | 47 0.9300 2.0303E+18 8.1210E-08 -2.3937 3.5403 -6.8093 299.4958 380 | 48 0.9500 2.0407E+18 8.1630E-08 -0.0609 -0.8835 -6.7785 305.2057 381 | 49 0.9700 2.0517E+18 8.2070E-08 -3.1408 -0.0680 -3.0375 306.7245 382 | 50 0.9900 2.0730E+18 8.2920E-08 4.1893 2.3721 -1.6457 304.1447 383 | 384 | AVERAGE TEMPERATURE 303.65302 385 | 386 | COLLISIONS:- 387 | 17627348. 6942336. 3107895. 2686098. 716152. 388 | 6942336. 2689322. 1223341. 1051418. 279042. 389 | 3107895. 1223341. 501486. 430719. 124783. 390 | 2686098. 1051418. 430719. 360922. 107131. 391 | 716152. 279042. 124783. 107131. 27194. 392 | 393 | RATIO OF COLLISION NUMBER TO THEORETICAL VALUE 394 | 395 | 0.999319 1.001099 1.001056 1.001269 1.000325 396 | 1.001099 0.996644 1.000909 0.998090 1.003234 397 | 1.001056 1.000909 0.985047 0.997071 0.998892 398 | 1.001269 0.998090 0.997071 0.990779 0.997963 399 | 1.000325 1.003234 0.998892 0.997963 0.950154 400 | -------------------------------------------------------------------------------- /originalbird/DSMC0F.FOR: -------------------------------------------------------------------------------- 1 | * DSMC0F.FOR 2 | * 3 | PROGRAM DSMC0F 4 | * 5 | *--for the study of the fluctuations in a uniform simple gas 6 | * 7 | *--SI units are used throughout 8 | * 9 | PARAMETER (MNM=4100,MNC=41,MNSC=328,MTC=20,MXC=20,MAXD=50) 10 | * 11 | *--MNM is the maximum number of molecules 12 | *--MNC is the maximum number of cells 13 | *--MNSC is the maximum number of sub-cells 14 | *--MTC the number of forward and backward steps in the temporal correl. 15 | *--MXC the number of forward and backward steps in the temporal correl. 16 | *--MAXD is the maximum possible (say 4 standard deviations) departure 17 | *----of the number of molecules in a cell from the mean number per cell 18 | *----(FNUM should be chosen such that the mean per cell is an integer) 19 | * 20 | DOUBLE PRECISION MOVT,NCOL,SELT,SEPT 21 | * 22 | *--variables as in DSMC0S.FOR 23 | * 24 | COMMON /MOLSS / NM,PP(MNM),PV(3,MNM),IP(MNM),IR(MNM) 25 | * 26 | *--variables as in DSMC0S.FOR 27 | * 28 | COMMON /CELLSS/ CC(MNC),CG(3,MNC),IC(2,MNC),ISC(MNSC),CCG(2,MNC), 29 | & ISCG(2,MNSC) 30 | * 31 | *--variables as in DSMC0S.FOR 32 | * 33 | COMMON /GASS / SP(2),SPM(5) 34 | * 35 | *--variables as in DSMC0S.FOR 36 | * 37 | COMMON /SAMPS / NCOL,MOVT,SELT,SEPT,CS(5,MNC),TIME,NPR,NSMP,FND, 38 | & FTMP,VMP 39 | * 40 | *--variables as in DSMC0S.FOR 41 | * 42 | COMMON /SAMPF / CVT(5,-MTC:MTC),CSX(5,-MXC:MXC),CST(6,-MTC:MTC), 43 | & NSMPX,NSMPT,CNN(-MAXD:MAXD),NSMPN,AVM,AVT,AVU,AVV, 44 | & AVW,CSF(4,-MXC:MXC),NCO 45 | * 46 | *--CVT(N,-MTC:MTC) cell NCO values at 2*MTC+1 successive time steps 47 | *----the current value in this cell is in MTC+1 48 | *----N=1 the number 49 | *----N=2 the x velocity component 50 | *----N=3 the y velocity component 51 | *----N=4 the z velocity component 52 | *----N=5 the temperature 53 | *--CSX(N,M) the sum of q1(NCO)*q2(M) where M is the cell number 54 | *----N=1 q1=q2=dN for the spatial correlation 55 | *----N=2 q1=q2=du for the spatial correlation 56 | *----N=3 q1=q2=dv for the spatial correlation 57 | *----N=4 q1=du, q2=dv for the spatial correlation 58 | *----N=5 q1=q2=dT for the
spatial correlation 59 | *--CST(N,M) the sum of q1(NCO)*q2(M) where M is the time step 60 | *----N=1 q1=q2=dN for the temporal correlation 61 | *----N=2 q1=q2=du for the temporal correlation 62 | *----N=3 q1=q2=dv for the temporal correlation 63 | *----N=4 q1=q2=dw for the temporal correlation 64 | *----N=5 q1=q2=dT for the
temporal correlation 65 | *----N=6 q1=du, q2=dv for the temporal correlation 66 | *--NSMPX the number of samples for the spatial correlation and dist. 67 | *--NSMPT the number of samples for the temporal correlations 68 | *--CNN the number in the density fluctuation interval 69 | *--CSF(N,M) sum of the squares of the macroscopic quantities 70 | *----N=1 density 71 | *----N=2 u velocity component 72 | *----N=3 v velocity component 73 | *----N=4 w velocity component 74 | *--NCO the cell on which the fluctuation sample is centred 75 | * 76 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPT 77 | * 78 | *--variables as defined in DSMC0.FOR 79 | * 80 | COMMON /GEOM / CW,NSC,XF,XR 81 | * 82 | *--variables as defined in DSMC0.FOR 83 | * 84 | COMMON /CONST / PI,SPI,BOLTZ 85 | * 86 | *--variables as defined in DSMC0.FOR 87 | * 88 | WRITE (*,*) ' INPUT 0,1 FOR CONTINUING,NEW CALCULATION:- ' 89 | READ (*,*) NQL 90 | * 91 | IF (NQL.EQ.1) THEN 92 | * 93 | CALL INIT0F 94 | * 95 | ELSE 96 | * 97 | WRITE (*,*) ' READ THE RESTART FILE' 98 | OPEN (4,FILE='DSMC0F.RES',STATUS='OLD',FORM='UNFORMATTED') 99 | READ (4) AVM,AVT,AVU,AVV,AVW,BOLTZ,CC,CCG,CG,CNN,COL,CS,CSF,CST, 100 | & CSX,CVT,CW,DTM,FND,FNUM,FTMP,IC,IP,IR,ISC,ISCG,MOVT, 101 | & NCO,NCOL,NIS,NM,NSC,NSMP,NSMPN,NSMPT,NSMPX,NPR,NPT,NSP, 102 | & PI,PP,PV,SELT,SEPT,SP,SPI,SPM,TIME,VMP,XF,XR 103 | CLOSE (4) 104 | * 105 | END IF 106 | * 107 | IF (NQL.EQ.1) CALL SAMPI0F 108 | * 109 | IF (NQL.EQ.1) CALL SAMPIF 110 | * 111 | 100 NPR=NPR+1 112 | * 113 | DO 200 JJJ=1,NSP 114 | DO 150 III=1,NIS 115 | TIME=TIME+DTM 116 | * 117 | WRITE (*,99001) III,JJJ,NIS,NSP,NCOL 118 | 99001 FORMAT (' DSMC0F:- Move ',2I5,' of ',2I5,F14.0,' Collisions') 119 | * 120 | CALL MOVE0F 121 | * 122 | CALL INDEXS 123 | * 124 | CALL COLLS 125 | * 126 | CALL SAMPFC 127 | * 128 | 150 CONTINUE 129 | * 130 | CALL SAMPLE0F 131 | * 132 | 200 CONTINUE 133 | * 134 | WRITE (*,*) ' WRITING RESTART AND OUTPUT FILES',NPR,' OF ',NPT 135 | OPEN (4,FILE='DSMC0F.RES',FORM='UNFORMATTED') 136 | WRITE (4) AVM,AVT,AVU,AVV,AVW,BOLTZ,CC,CCG,CG,CNN,COL,CS,CSF,CST, 137 | & CSX,CVT,CW,DTM,FND,FNUM,FTMP,IC,IP,IR,ISC,ISCG,MOVT,NCO, 138 | & NCOL,NIS,NM,NSC,NSMP,NSMPN,NSMPT,NSMPX,NPR,NPT,NSP,PI, 139 | & PP,PV,SELT,SEPT,SP,SPI,SPM,TIME,VMP,XF,XR 140 | CLOSE (4) 141 | * 142 | CALL OUT0F 143 | * 144 | IF (NPR.LT.NPT) GO TO 100 145 | STOP 146 | END 147 | * INIT0F.FOR 148 | * 149 | SUBROUTINE INIT0F 150 | * 151 | PARAMETER (MNM=4100,MNC=41,MNSC=328,MTC=20,MXC=20,MAXD=50) 152 | * 153 | DOUBLE PRECISION MOVT,NCOL,SELT,SEPT 154 | * 155 | COMMON /MOLSS / NM,PP(MNM),PV(3,MNM),IP(MNM),IR(MNM) 156 | COMMON /CELLSS/ CC(MNC),CG(3,MNC),IC(2,MNC),ISC(MNSC),CCG(2,MNC), 157 | & ISCG(2,MNSC) 158 | COMMON /GASS / SP(2),SPM(5) 159 | COMMON /SAMPS / NCOL,MOVT,SELT,SEPT,CS(5,MNC),TIME,NPR,NSMP,FND, 160 | & FTMP,VMP 161 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPT 162 | COMMON /GEOM / CW,NSC,XF,XR 163 | COMMON /CONST / PI,SPI,BOLTZ 164 | COMMON /SAMPF / CVT(5,-MTC:MTC),CSX(5,-20:MXC),CST(6,-MTC:MTC), 165 | & NSMPX,NSMPT,CNN(-MAXD:MAXD),NSMPN,AVM,AVT,AVU,AVV, 166 | & AVW,CSF(4,-MXC:MXC),NCO 167 | * 168 | *--set constants 169 | * 170 | PI=3.141592654 171 | SPI=SQRT(PI) 172 | BOLTZ=1.3806E-23 173 | * 174 | CALL DATA0F 175 | * 176 | *--set additional data on the gas 177 | * 178 | SPM(1)=PI*SP(2)**2 179 | *--the collision cross section is given by eqn (1.8) 180 | SPM(5)=GAM(2.5-SPM(3)) 181 | * 182 | *--Initialise variables 183 | * 184 | TIME=0. 185 | NM=0 186 | * 187 | CG(1,1)=XF 188 | CW=(XR-XF)/MNC 189 | DO 100 M=1,MNC 190 | IF (M.GT.1) CG(1,M)=CG(2,M-1) 191 | CG(2,M)=CG(1,M)+CW 192 | CG(3,M)=CW 193 | CC(M)=CW 194 | CCG(2,M)=RF(0) 195 | CCG(1,M)=SPM(1)*300.*SQRT(FTMP/300.) 196 | *--the maximum value of the (rel. speed)*(cross-section) is set to a 197 | *--reasonable, but low, initial value and will be increased as necessary 198 | 100 CONTINUE 199 | * 200 | *--set sub-cells 201 | * 202 | DO 200 N=1,MNC 203 | DO 150 M=1,NSC 204 | L=(N-1)*NSC+M 205 | ISC(L)=N 206 | 150 CONTINUE 207 | 200 CONTINUE 208 | * 209 | *--generate initial gas in equilibrium at temperature FTMP 210 | * 211 | SU=0. 212 | SV=0. 213 | SW=0. 214 | SQ=0. 215 | REM=0 216 | VMP=SQRT(2.*BOLTZ*FTMP/SP(1)) 217 | *--VMP is the most probable molecular speed, see eqns (4.1) and (4.7) 218 | DO 300 N=1,MNC 219 | A=FND*CG(3,N)/FNUM+REM 220 | *--A is the number of simulated molecules in cell N 221 | IF (N.LT.MNC) THEN 222 | MM=A 223 | REM=(A-MM) 224 | *--the remainder REM is carried forward to the next cell 225 | ELSE 226 | MM=NINT(A) 227 | END IF 228 | DO 250 M=1,MM 229 | IF (NM.LE.MNM) THEN 230 | *--round-off error could have taken NM to MNM+1 231 | NM=NM+1 232 | PP(NM)=CG(1,N)+RF(0)*(CG(2,N)-CG(1,N)) 233 | IP(NM)=(PP(NM)-CG(1,N))*(NSC-.001)/CG(3,N)+1+NSC*(N-1) 234 | *--species, position, and sub-cell number have been set 235 | DO 210 K=1,3 236 | CALL RVELC(PV(K,NM),A,VMP) 237 | 210 CONTINUE 238 | SU=SU+PV(1,NM) 239 | SV=SV+PV(2,NM) 240 | SW=SW+PV(3,NM) 241 | SQ=SQ+PV(1,NM)**2+PV(2,NM)**2+PV(3,NM)**2 242 | *--velocity components have been set 243 | END IF 244 | 250 CONTINUE 245 | 300 CONTINUE 246 | WRITE (*,99001) NM 247 | 99001 FORMAT (' ',I6,' MOLECULES') 248 | AVM=FLOAT(NM)/FLOAT(MNC) 249 | AVU=SU/FLOAT(NM) 250 | AVV=SV/FLOAT(NM) 251 | AVW=SW/FLOAT(NM) 252 | AVT=(0.33333*SP(1)/BOLTZ)*(SQ/FLOAT(NM)-AVU**2-AVV**2-AVW**2) 253 | WRITE (*,*) 'AV N,U,V,W,T',AVM,AVU,AVV,AVW,AVT 254 | * 255 | RETURN 256 | END 257 | * SAMPI0F.FOR 258 | * 259 | SUBROUTINE SAMPI0F 260 | * 261 | *--initialises all the sampling variables 262 | * 263 | PARAMETER (MNM=4100,MNC=41,MNSC=328,MTC=20,MXC=20,MAXD=50) 264 | * 265 | DOUBLE PRECISION MOVT,NCOL,SELT,SEPT 266 | * 267 | COMMON /SAMPS / NCOL,MOVT,SELT,SEPT,CS(5,MNC),TIME,NPR,NSMP,FND, 268 | & FTMP,VMP 269 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPT 270 | * 271 | NPR=0 272 | NCOL=0 273 | NSMP=0 274 | MOVT=0. 275 | SELT=0. 276 | SEPT=0. 277 | DO 100 N=1,MNC 278 | CS(1,N)=1.E-6 279 | DO 50 M=2,5 280 | CS(M,N)=0. 281 | 50 CONTINUE 282 | 100 CONTINUE 283 | RETURN 284 | END 285 | * SAMPIF.FOR 286 | * 287 | SUBROUTINE SAMPIF 288 | * 289 | *--initialise the fluctuation and correlation sampling variables 290 | * 291 | PARAMETER (MNM=4100,MNC=41,MNSC=328,MTC=20,MXC=20,MAXD=50) 292 | * 293 | COMMON /SAMPF / CVT(5,-MTC:MTC),CSX(5,-MXC:MXC),CST(6,-MTC:MTC), 294 | & NSMPX,NSMPT,CNN(-MAXD:MAXD),NSMPN,AVM,AVT,AVU,AVV, 295 | & AVW,CSF(4,-MXC:MXC),NCO 296 | NSMPX=0 297 | NSMPT=0 298 | DO 100 N=1,5 299 | DO 50 M=-MTC,MTC 300 | CVT(N,M)=0. 301 | 50 CONTINUE 302 | 100 CONTINUE 303 | DO 300 N=1,5 304 | DO 150 M=-MTC,MTC 305 | CST(N,M)=0. 306 | 150 CONTINUE 307 | DO 200 M=-MXC,MXC 308 | CSX(N,M)=0. 309 | 200 CONTINUE 310 | 300 CONTINUE 311 | DO 400 N=-MAXD,MAXD 312 | CNN(N)=0. 313 | 400 CONTINUE 314 | DO 500 N=-MXC,MXC 315 | DO 450 M=1,4 316 | CSF(M,N)=0. 317 | 450 CONTINUE 318 | 500 CONTINUE 319 | RETURN 320 | END 321 | * SAMPFC.FOR 322 | * 323 | SUBROUTINE SAMPFC 324 | * 325 | *--sample the fluctuation and correlation information 326 | * 327 | PARAMETER (MNM=4100,MNC=41,MNSC=328,MTC=20,MXC=20,MAXD=50) 328 | * 329 | DOUBLE PRECISION MOVT,NCOL,SELT,SEPT 330 | * 331 | COMMON /MOLSS / NM,PP(MNM),PV(3,MNM),IP(MNM),IR(MNM) 332 | COMMON /CELLSS/ CC(MNC),CG(3,MNC),IC(2,MNC),ISC(MNSC),CCG(2,MNC), 333 | & ISCG(2,MNSC) 334 | COMMON /SAMPS / NCOL,MOVT,SELT,SEPT,CS(5,MNC),TIME,NPR,NSMP,FND, 335 | & FTMP,VMP 336 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPT 337 | COMMON /GASS / SP(2),SPM(5) 338 | COMMON /CONST / PI,SPI,BOLTZ 339 | * 340 | COMMON /SAMPF / CVT(5,-MTC:MTC),CSX(5,-MXC:MXC),CST(6,-MTC:MTC), 341 | & NSMPX,NSMPT,CNN(-MAXD:MAXD),NSMPN,AVM,AVT,AVU,AVV, 342 | & AVW,CSF(4,-MXC:MXC),NCO 343 | * 344 | DIMENSION CVX(5,-MXC:MXC) 345 | * 346 | *--sample the distribution of number density 347 | NAVM=NINT(AVM) 348 | DO 100 M=1,MNC 349 | NMC=IC(2,M) 350 | N=NMC-NAVM 351 | IF (ABS(N).LE.MAXD) CNN(N)=CNN(N)+1 352 | 100 CONTINUE 353 | NSMPN=NSMPN+1 354 | *--push time samples down the array 355 | DO 200 N=1,5 356 | DO 150 M=-MTC,MTC-1 357 | CVT(N,M)=CVT(N,M+1) 358 | 150 CONTINUE 359 | 200 CONTINUE 360 | * 361 | *--sample the current properties in cell NCO 362 | SU=0. 363 | SV=0. 364 | SW=0. 365 | SQ=0. 366 | NMC=IC(2,NCO) 367 | DO 300 N=1,NMC 368 | L=IC(1,NCO)+N 369 | M=IR(L) 370 | SU=SU+PV(1,M)/FLOAT(NMC) 371 | SV=SV+PV(2,M)/FLOAT(NMC) 372 | SW=SW+PV(3,M)/FLOAT(NMC) 373 | SQ=SQ+(PV(1,M)**2+PV(2,M)**2+PV(3,M)**2)/FLOAT(NMC) 374 | 300 CONTINUE 375 | CVT(1,MTC)=NMC 376 | CVT(2,MTC)=SU 377 | CVT(3,MTC)=SV 378 | CVT(4,MTC)=SW 379 | CVT(5,MTC)=(0.33333*SP(1)/BOLTZ)*(SQ-SU**2-SV**2-SW**2) 380 | IF (CVT(1,-MTC).GT.0.1) THEN 381 | NSMPT=NSMPT+1 382 | DO 350 N=-MTC,MTC 383 | CST(1,N)=CST(1,N)+(CVT(1,0)-AVM)*(CVT(1,N)-AVM) 384 | CST(2,N)=CST(2,N)+(CVT(2,0)-AVU)*(CVT(2,N)-AVU) 385 | CST(3,N)=CST(3,N)+(CVT(3,0)-AVV)*(CVT(3,N)-AVV) 386 | CST(4,N)=CST(4,N)+(CVT(4,0)-AVW)*(CVT(4,N)-AVW) 387 | CST(5,N)=CST(5,N)+(CVT(5,0)-AVT)*(CVT(5,N)-AVT) 388 | CST(6,N)=CST(6,N)+(CVT(2,0)-AVU)*(CVT(3,N)-AVV) 389 | 350 CONTINUE 390 | END IF 391 | DO 500 K=-MXC,MXC 392 | KC=NCO+K 393 | NMC=IC(2,KC) 394 | CVX(1,K)=NMC 395 | CVX(2,K)=0. 396 | CVX(3,K)=0. 397 | CVX(4,K)=0. 398 | CVX(5,K)=0. 399 | DO 400 N=1,NMC 400 | L=IC(1,KC)+N 401 | M=IR(L) 402 | CVX(2,K)=CVX(2,K)+PV(1,M)/FLOAT(NMC) 403 | CVX(3,K)=CVX(3,K)+PV(2,M)/FLOAT(NMC) 404 | CVX(4,K)=CVX(4,K)+PV(3,M)/FLOAT(NMC) 405 | 400 CONTINUE 406 | DO 450 N=1,NMC 407 | L=IC(1,KC)+N 408 | M=IR(L) 409 | CVX(5,K)=CVX(5,K)+((PV(1,M)-CVX(2,K))**2+(PV(2,M)-CVX(3,K)) 410 | & **2+(PV(3,M)-CVX(4,K))**2)/FLOAT(NMC) 411 | 450 CONTINUE 412 | 500 CONTINUE 413 | DO 600 K=-MXC,MXC 414 | CVX(5,K)=(0.33333*SP(1)/BOLTZ)*CVX(5,K) 415 | DO 550 N=1,4 416 | CSF(N,K)=CSF(N,K)+CVX(N,K)**2 417 | 550 CONTINUE 418 | 600 CONTINUE 419 | NSMPX=NSMPX+1 420 | DO 700 N=-MXC,MXC 421 | CSX(1,N)=CSX(1,N)+(CVX(1,0)-AVM)*(CVX(1,N)-AVM) 422 | CSX(2,N)=CSX(2,N)+(CVX(2,0)-AVU)*(CVX(2,N)-AVU) 423 | CSX(3,N)=CSX(3,N)+(CVX(3,0)-AVV)*(CVX(3,N)-AVV) 424 | CSX(4,N)=CSX(4,N)+(CVX(2,0)-AVU)*(CVX(3,N)-AVV) 425 | CSX(5,N)=CSX(5,N)+(CVX(5,0)-AVT)*(CVX(5,N)-AVT) 426 | 700 CONTINUE 427 | RETURN 428 | END 429 | * MOVE0F.FOR 430 | * 431 | * 432 | SUBROUTINE MOVE0F 433 | * 434 | *--the NM molecules are moved over the time interval DTM 435 | * 436 | PARAMETER (MNM=4100,MNC=41,MNSC=328,MTC=20,MXC=20,MAXD=50) 437 | * 438 | DOUBLE PRECISION MOVT,NCOL,SELT,SEPT 439 | * 440 | COMMON /MOLSS / NM,PP(MNM),PV(3,MNM),IP(MNM),IR(MNM) 441 | COMMON /CELLSS/ CC(MNC),CG(3,MNC),IC(2,MNC),ISC(MNSC),CCG(2,MNC), 442 | & ISCG(2,MNSC) 443 | COMMON /SAMPS / NCOL,MOVT,SELT,SEPT,CS(5,MNC),TIME,NPR,NSMP,FND, 444 | & FTMP,VMP 445 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPT 446 | COMMON /GEOM / CW,NSC,XF,XR 447 | * 448 | DO 100 N=1,NM 449 | MOVT=MOVT+1 450 | MSC=IP(N) 451 | MC=ISC(MSC) 452 | *--MC is the initial cell number 453 | XI=PP(N) 454 | DX=PV(1,N)*DTM 455 | X=XI+DX 456 | *--molecule N at XI is moved by DX to X 457 | IF (X.LT.XF) THEN 458 | *--specular reflection from the minimum x boundary at x=XF (eqn (11.7)) 459 | X=2.*XF-X 460 | PV(1,N)=-PV(1,N) 461 | END IF 462 | IF (X.GT.XR) THEN 463 | *--specular reflection from the maximum x boundary at x=XR (eqn (11.7)) 464 | X=2.*XR-X 465 | PV(1,N)=-PV(1,N) 466 | END IF 467 | IF (X.LT.CG(1,MC).OR.X.GT.CG(2,MC)) THEN 468 | *--the molecule has moved from the initial cell 469 | MC=(X-XF)/CW+0.99999 470 | IF (MC.EQ.0) MC=1 471 | *--MC is the new cell number (note avoidance of round-off error) 472 | END IF 473 | MSC=((X-CG(1,MC))/CG(3,MC))*(NSC-.001)+1+NSC*(MC-1) 474 | *--MSC is the new sub-cell number 475 | IP(N)=MSC 476 | PP(N)=X 477 | 100 CONTINUE 478 | RETURN 479 | END 480 | * INDEXS.FOR 481 | * 482 | SUBROUTINE INDEXS 483 | * 484 | *--the NM molecule numbers are arranged in order of the cells and, 485 | *--within the cells, in order of the sub-cells 486 | * 487 | PARAMETER (MNM=4100,MNC=41,MNSC=328,MTC=20,MXC=20,MAXD=50) 488 | * 489 | COMMON /MOLSS / NM,PP(MNM),PV(3,MNM),IP(MNM),IR(MNM) 490 | COMMON /CELLSS/ CC(MNC),CG(3,MNC),IC(2,MNC),ISC(MNSC),CCG(2,MNC), 491 | & ISCG(2,MNSC) 492 | COMMON /GASS / SP(2),SPM(5) 493 | * 494 | DO 100 NN=1,MNC 495 | IC(2,NN)=0 496 | 100 CONTINUE 497 | DO 200 NN=1,MNSC 498 | ISCG(2,NN)=0 499 | 200 CONTINUE 500 | DO 300 N=1,NM 501 | MSC=IP(N) 502 | ISCG(2,MSC)=ISCG(2,MSC)+1 503 | MC=ISC(MSC) 504 | IC(2,MC)=IC(2,MC)+1 505 | 300 CONTINUE 506 | *--numbers in the cells and sub-cells have been counted 507 | M=0 508 | DO 400 N=1,MNC 509 | IC(1,N)=M 510 | M=M+IC(2,N) 511 | 400 CONTINUE 512 | *--the (start address -1) has been set for the cells 513 | M=0 514 | DO 500 N=1,MNSC 515 | ISCG(1,N)=M 516 | M=M+ISCG(2,N) 517 | ISCG(2,N)=0 518 | 500 CONTINUE 519 | *--the (start address -1) has been set for the sub-cells 520 | DO 600 N=1,NM 521 | MSC=IP(N) 522 | ISCG(2,MSC)=ISCG(2,MSC)+1 523 | K=ISCG(1,MSC)+ISCG(2,MSC) 524 | IR(K)=N 525 | *--the molecule number N has been set in the cross-reference array 526 | 600 CONTINUE 527 | RETURN 528 | END 529 | * COLLS.FOR 530 | * 531 | SUBROUTINE COLLS 532 | * 533 | *--calculates collisions appropriate to DTM in a monatomic gas 534 | * 535 | PARAMETER (MNM=4100,MNC=41,MNSC=328,MTC=20,MXC=20,MAXD=50) 536 | * 537 | DOUBLE PRECISION MOVT,NCOL,SELT,SEPT 538 | * 539 | COMMON /MOLSS / NM,PP(MNM),PV(3,MNM),IP(MNM),IR(MNM) 540 | COMMON /CELLSS/ CC(MNC),CG(3,MNC),IC(2,MNC),ISC(MNSC),CCG(2,MNC), 541 | & ISCG(2,MNSC) 542 | COMMON /GASS / SP(2),SPM(5) 543 | COMMON /SAMPS / NCOL,MOVT,SELT,SEPT,CS(5,MNC),TIME,NPR,NSMP,FND, 544 | & FTMP,VMP 545 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPT 546 | COMMON /GEOM / CW,NSC,XF,XR 547 | COMMON /CONST / PI,SPI,BOLTZ 548 | * 549 | DIMENSION VRC(3),VRCP(3),VCCM(3) 550 | *--VRC(3) are the pre-collision components of the relative velocity 551 | *--VRP(3) are the post-collision components of the relative velocity 552 | *--VCCM(3) are the components of the centre of mass velocity 553 | * 554 | DO 100 N=1,MNC 555 | *--consider collisions in cell N 556 | SN=CS(1,N) 557 | IF (SN.GT.1.) THEN 558 | AVN=SN/FLOAT(NSMP) 559 | ELSE 560 | AVN=IC(2,N) 561 | END IF 562 | *--AVN is the average number of group MM molecules in the cell 563 | ASEL=0.5*IC(2,N)*AVN*FNUM*CCG(1,N)*DTM/CC(N)+CCG(2,N) 564 | *--ASEL is the number of pairs to be selected, see eqn (11.3) 565 | NSEL=ASEL 566 | CCG(2,N)=ASEL-NSEL 567 | IF (NSEL.GT.0) THEN 568 | IF (IC(2,N).LT.2) THEN 569 | CCG(2,N)=CCG(2,N)+NSEL 570 | *--if there are insufficient molecules to calculate collisions, 571 | *--the number NSEL is added to the remainer CCG(2,N) 572 | ELSE 573 | CVM=CCG(1,N) 574 | SELT=SELT+NSEL 575 | DO 20 ISEL=1,NSEL 576 | K=INT(RF(0)*(IC(2,N)-0.0001))+IC(1,N)+1 577 | L=IR(K) 578 | *--the first mol. L has been chosen at random from group NN in cell N 579 | 5 MSC=IP(L) 580 | IF (ISCG(2,MSC).EQ.1) THEN 581 | *--if MSC has only the chosen mol., find the nearest sub-cell with one 582 | NST=1 583 | NSG=1 584 | 6 INC=NSG*NST 585 | NSG=-NSG 586 | NST=NST+1 587 | MSC=MSC+INC 588 | IF (MSC.LT.1.OR.MSC.GT.MNSC) GO TO 6 589 | IF (ISC(MSC).NE.N.OR.ISCG(2,MSC).LT.1) GO TO 6 590 | END IF 591 | *--the second molecule M is now chosen at random from the 592 | *--molecules that are in the sub-cell MSC 593 | K=INT(RF(0)*(ISCG(2,MSC)-0.0001))+ISCG(1,MSC)+1 594 | M=IR(K) 595 | IF (L.EQ.M) GO TO 5 596 | *--choose a new second molecule if the first is again chosen 597 | * 598 | DO 10 K=1,3 599 | VRC(K)=PV(K,L)-PV(K,M) 600 | 10 CONTINUE 601 | *--VRC(1 to 3) are the components of the relative velocity 602 | VRR=VRC(1)**2+VRC(2)**2+VRC(3)**2 603 | VR=SQRT(VRR) 604 | *--VR is the relative speed 605 | CVR=VR*SPM(1) 606 | & *((2.*BOLTZ*SPM(2)/(0.5*SP(1)*VRR))**(SPM(3)-0.5)) 607 | & /SPM(5) 608 | *--the collision cross-section is based on eqn (4.63) 609 | IF (CVR.GT.CVM) CVM=CVR 610 | *--if necessary, the maximum product in CVM is upgraded 611 | IF (RF(0).LT.CVR/CCG(1,N)) THEN 612 | *--the collision is accepted with the probability of eqn (11.4) 613 | DO 12 K=1,3 614 | VCCM(K)=0.5*(PV(K,L)+PV(K,M)) 615 | 12 CONTINUE 616 | *--VCCM defines the components of the centre-of-mass velocity (eqn 2.1) 617 | NCOL=NCOL+1 618 | SEPT=SEPT+ABS(PP(L)-PP(M)) 619 | IF (ABS(SPM(4)-1.).LT.1.E-3) THEN 620 | *--use the VHS logic 621 | B=2.*RF(0)-1. 622 | *--B is the cosine of a random elevation angle 623 | A=SQRT(1.-B*B) 624 | VRCP(1)=B*VR 625 | C=2.*PI*RF(0) 626 | *--C is a random azimuth angle 627 | VRCP(2)=A*COS(C)*VR 628 | VRCP(3)=A*SIN(C)*VR 629 | ELSE 630 | *--use the VSS logic 631 | B=2.*(RF(0)**SPM(4))-1. 632 | *--B is the cosine of the deflection angle for the VSS model (eqn (11.8) 633 | A=SQRT(1.-B*B) 634 | C=2.*PI*RF(0) 635 | OC=COS(C) 636 | SC=SIN(C) 637 | D=SQRT(VRC(2)**2+VRC(3)**2) 638 | IF (D.GT.1.E-6) THEN 639 | VRCP(1)=B*VRC(1)+A*SC*D 640 | VRCP(2)=B*VRC(2)+A*(VR*VRC(3)*OC-VRC(1)*VRC(2)*SC)/D 641 | VRCP(3)=B*VRC(3)-A*(VR*VRC(2)*OC+VRC(1)*VRC(3)*SC)/D 642 | ELSE 643 | VRCP(1)=B*VRC(1) 644 | VRCP(2)=A*OC*VRC(1) 645 | VRCP(3)=A*SC*VRC(1) 646 | END IF 647 | *--the post-collision rel. velocity components are based on eqn (2.22) 648 | END IF 649 | *--VRCP(1 to 3) are the components of the post-collision relative vel. 650 | DO 14 K=1,3 651 | PV(K,L)=VCCM(K)+0.5*VRCP(K) 652 | PV(K,M)=VCCM(K)-0.5*VRCP(K) 653 | 14 CONTINUE 654 | END IF 655 | 20 CONTINUE 656 | CCG(1,N)=CVM 657 | END IF 658 | END IF 659 | 100 CONTINUE 660 | RETURN 661 | END 662 | * SAMPLE0F.FOR 663 | * 664 | * 665 | SUBROUTINE SAMPLE0F 666 | * 667 | *--sample the molecules in the flow. 668 | * 669 | PARAMETER (MNM=4100,MNC=41,MNSC=328,MTC=20,MXC=20,MAXD=50) 670 | * 671 | DOUBLE PRECISION MOVT,NCOL,SELT,SEPT 672 | * 673 | COMMON /MOLSS / NM,PP(MNM),PV(3,MNM),IP(MNM),IR(MNM) 674 | COMMON /CELLSS/ CC(MNC),CG(3,MNC),IC(2,MNC),ISC(MNSC),CCG(2,MNC), 675 | & ISCG(2,MNSC) 676 | COMMON /SAMPS / NCOL,MOVT,SELT,SEPT,CS(5,MNC),TIME,NPR,NSMP,FND, 677 | & FTMP,VMP 678 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPT 679 | * 680 | NSMP=NSMP+1 681 | DO 100 N=1,MNC 682 | L=IC(2,N) 683 | IF (L.GT.0) THEN 684 | DO 20 J=1,L 685 | K=IC(1,N)+J 686 | M=IR(K) 687 | CS(1,N)=CS(1,N)+1 688 | DO 10 LL=1,3 689 | CS(LL+1,N)=CS(LL+1,N)+PV(LL,M) 690 | CS(5,N)=CS(5,N)+PV(LL,M)**2 691 | 10 CONTINUE 692 | 20 CONTINUE 693 | END IF 694 | 100 CONTINUE 695 | RETURN 696 | END 697 | * OUT0F.FOR 698 | * 699 | SUBROUTINE OUT0F 700 | * 701 | *--output a progressive set of results to file DSMC0F.OUT. 702 | * 703 | PARAMETER (MNM=4100,MNC=41,MNSC=328,MTC=20,MXC=20,MAXD=50) 704 | * 705 | DOUBLE PRECISION MOVT,NCOL,SELT,SEPT,FND2 706 | * 707 | COMMON /MOLSS / NM,PP(MNM),PV(3,MNM),IP(MNM),IR(MNM) 708 | COMMON /CELLSS/ CC(MNC),CG(3,MNC),IC(2,MNC),ISC(MNSC),CCG(2,MNC), 709 | & ISCG(2,MNSC) 710 | COMMON /GEOM / CW,NSC,XF,XR 711 | COMMON /GASS / SP(2),SPM(5) 712 | COMMON /SAMPS / NCOL,MOVT,SELT,SEPT,CS(5,MNC),TIME,NPR,NSMP,FND, 713 | & FTMP,VMP 714 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPT 715 | COMMON /CONST / PI,SPI,BOLTZ 716 | COMMON /SAMPF / CVT(5,-MTC:MTC),CSX(5,-MXC:MXC),CST(6,-MTC:MTC), 717 | & NSMPX,NSMPT,CNN(-MAXD:MAXD),NSMPN,AVM,AVT,AVU,AVV, 718 | & AVW,CSF(4,-MXC:MXC),NCO 719 | * 720 | DIMENSION VEL(3) 721 | * 722 | OPEN (4,FILE='DSMC0F.OUT',FORM='FORMATTED') 723 | * 724 | WRITE (4,*) ' FROM ZERO TIME TO TIME',TIME 725 | WRITE (4,*) ' COLLISIONS =',NCOL 726 | WRITE (4,*) ' TOTAL NUMBER OF SAMPLES ',NSMP 727 | WRITE (4,*) NM,' MOLECULES' 728 | WRITE (4,*) MOVT,' TOTAL MOLECULAR MOVES' 729 | IF (SELT.GT.0.1) WRITE (4,*) INT(SELT),' SELECTIONS ',INT(NCOL), 730 | & ' COLLISIONS, RATIO ', 731 | & REAL(NCOL/SELT) 732 | IF (NCOL.GT.0) WRITE (4,*) ' MEAN COLLISION SEPARATION ', 733 | & REAL(SEPT/NCOL) 734 | * 735 | WRITE (4,*) ' FLOWFIELD PROPERTIES' 736 | WRITE (4,*) 737 | & ' CELL X COORD SAMPLE N DENS. U V 738 | & W TEMP' 739 | TOT=0. 740 | DO 100 N=1,MNC 741 | A=FNUM/(CG(3,N)*NSMP) 742 | DENN=CS(1,N)*A 743 | *--DENN is the number density 744 | IF (CS(1,N).GT.0.5) THEN 745 | DO 20 K=1,3 746 | VEL(K)=CS(K+1,N)/CS(1,N) 747 | 20 CONTINUE 748 | *--VEL is the stream velocity components, see eqn (1.21) 749 | UU=VEL(1)**2+VEL(2)**2+VEL(3)**2 750 | TT=SP(1)*(CS(5,N)/CS(1,N)-UU)/(3.*BOLTZ) 751 | *--TT is the temperature, see eqn (1.29a) 752 | TOT=TOT+TT 753 | XC=0.5*(CG(1,N)+CG(2,N)) 754 | *--XC is the x coordinate of the midpoint of the cell 755 | WRITE (4,99001) N,XC,INT(CS(1,N)),DENN,VEL(1),VEL(2),VEL(3),TT 756 | END IF 757 | 99001 FORMAT (' ',I5,F10.4,I9,1P,E12.4,0P,4F10.4) 758 | 100 CONTINUE 759 | * 760 | * 761 | *--compare with theoretical collision number (actual temperarure) 762 | AVTMP=TOT/MNC 763 | WRITE (4,*) ' AVERAGE TEMPERATURE ',AVTMP 764 | WRITE (4,*) 765 | WRITE (4,*) ' RATIO OF COLLISION NUMBER TO THEORETICAL VALUE' 766 | WRITE (4,*) 767 | FND2=FND 768 | TCOL=2.*TIME*FND2*FND2*(XR-XF)*SPM(1) 769 | & *((AVTMP/SPM(2))**(1.-SPM(3)))*SQRT(BOLTZ*SPM(2)/(PI*SP(1))) 770 | & /FNUM 771 | *--TCOL is the equilibrium collision rate, see eqn (4.64) 772 | WRITE (4,*) NCOL/TCOL 773 | * 774 | WRITE (4,*) ' MEAN SQUARE FLUCTUATIONS ' 775 | WRITE (4,*) ' CELL ' 776 | DO 200 N=-MXC,MXC 777 | NC=N+NCO 778 | A=CS(1,NC)/FLOAT(NSMP) 779 | ANNC=(CSF(1,N)/FLOAT(NSMPX)-A*A)/A 780 | DO 150 K=1,3 781 | VEL(K)=CS(K+1,NC)/CS(1,NC) 782 | 150 CONTINUE 783 | AUUC=(CSF(2,N)/FLOAT(NSMPX)-VEL(1)**2)*A/VMP**2 784 | AVVC=(CSF(3,N)/FLOAT(NSMPX)-VEL(2)**2)*A/VMP**2 785 | AWWC=(CSF(4,N)/FLOAT(NSMPX)-VEL(3)**2)*A/VMP**2 786 | WRITE (4,99002) N,ANNC,AUUC,AVVC,AWWC 787 | 99002 FORMAT (I6,4E13.5) 788 | 200 CONTINUE 789 | * 790 | WRITE (4,*) ' NUMBER DISTRIBUTION IN CELLS ' 791 | DO 300 N=-MAXD,MAXD 792 | WRITE (4,*) AVM+N,CNN(N)/(NSMPN*MNC) 793 | 300 CONTINUE 794 | * 795 | WRITE (4,*) ' TEMPORAL CORRELATION FUNCTION IN CELL ',NCO 796 | 797 | DO 400 N=-MTC,MTC 798 | WRITE (4,99003) N,CST(1,N)/(AVM*NSMPT),CST(2,N) 799 | & *AVM/(NSMPT*VMP**2),CST(3,N)*AVM/(NSMPT*VMP**2), 800 | & CST(4,N)*AVM/(NSMPT*VMP**2),CST(5,N) 801 | & *AVM/(NSMPT*AVT**2),CST(6,N)*AVM/(NSMPT*VMP**2) 802 | 400 CONTINUE 803 | * 804 | WRITE (4,*) ' SPATIAL CORRELATION FUNCTION IN CELL ',NCO 805 | DO 500 N=-MXC,MXC 806 | WRITE (4,99003) N,CSX(1,N)/(AVM*NSMPX),CSX(2,N) 807 | & *AVM/(NSMPX*VMP**2),CSX(3,N)*AVM/(NSMPX*VMP**2), 808 | & CSX(4,N)*AVM/(NSMPX*VMP**2),CSX(5,N) 809 | & *AVM/(NSMPX*AVT**2) 810 | 500 CONTINUE 811 | * 812 | 99003 FORMAT (I8,6E13.5) 813 | CLOSE (4) 814 | * 815 | SU=0. 816 | SV=0. 817 | SW=0. 818 | SQ=0. 819 | DO 600 N=1,NM 820 | SU=SU+PV(1,N) 821 | SV=SV+PV(2,N) 822 | SW=SW+PV(3,N) 823 | SQ=SQ+PV(1,N)**2+PV(2,N)**2+PV(3,N)**2 824 | 600 CONTINUE 825 | AVU=SU/FLOAT(NM) 826 | AVV=SV/FLOAT(NM) 827 | AVW=SW/FLOAT(NM) 828 | AVT=(0.33333*SP(1)/BOLTZ)*(SQ/FLOAT(NM)-AVU**2-AVV**2-AVW**2) 829 | WRITE (*,*) 'AV N,U,V,W,T',AVM,AVU,AVV,AVW,AVT 830 | RETURN 831 | END 832 | * RVELC.FOR 833 | * 834 | *--end of listing 835 | * 836 | * 837 | SUBROUTINE RVELC(U,V,VMP) 838 | * 839 | *--generates two random velocity components U an V in an equilibrium 840 | *--gas with most probable speed VMP (based on eqns (C10) and (C12)) 841 | * 842 | A=SQRT(-LOG(RF(0))) 843 | B=6.283185308*RF(0) 844 | U=A*SIN(B)*VMP 845 | V=A*COS(B)*VMP 846 | RETURN 847 | END 848 | * GAM.FOR 849 | * 850 | FUNCTION GAM(X) 851 | * 852 | *--calculates the Gamma function of X. 853 | * 854 | A=1. 855 | Y=X 856 | IF (Y.LT.1.) THEN 857 | A=A/Y 858 | ELSE 859 | 50 Y=Y-1 860 | IF (Y.GE.1.) THEN 861 | A=A*Y 862 | GO TO 50 863 | END IF 864 | END IF 865 | GAM=A*(1.-0.5748646*Y+0.9512363*Y**2-0.6998588*Y**3+ 866 | & 0.4245549*Y**4-0.1010678*Y**5) 867 | RETURN 868 | END 869 | * RF.FOR 870 | * 871 | FUNCTION RF(IDUM) 872 | *--generates a uniformly distributed random fraction between 0 and 1 873 | *----IDUM will generally be 0, but negative values may be used to 874 | *------re-initialize the seed 875 | SAVE MA,INEXT,INEXTP 876 | PARAMETER (MBIG=1000000000,MSEED=161803398,MZ=0,FAC=1.E-9) 877 | DIMENSION MA(55) 878 | DATA IFF/0/ 879 | IF (IDUM.LT.0.OR.IFF.EQ.0) THEN 880 | IFF=1 881 | MJ=MSEED-IABS(IDUM) 882 | MJ=MOD(MJ,MBIG) 883 | MA(55)=MJ 884 | MK=1 885 | DO 50 I=1,54 886 | II=MOD(21*I,55) 887 | MA(II)=MK 888 | MK=MJ-MK 889 | IF (MK.LT.MZ) MK=MK+MBIG 890 | MJ=MA(II) 891 | 50 CONTINUE 892 | DO 100 K=1,4 893 | DO 60 I=1,55 894 | MA(I)=MA(I)-MA(1+MOD(I+30,55)) 895 | IF (MA(I).LT.MZ) MA(I)=MA(I)+MBIG 896 | 60 CONTINUE 897 | 100 CONTINUE 898 | INEXT=0 899 | INEXTP=31 900 | END IF 901 | 200 INEXT=INEXT+1 902 | IF (INEXT.EQ.56) INEXT=1 903 | INEXTP=INEXTP+1 904 | IF (INEXTP.EQ.56) INEXTP=1 905 | MJ=MA(INEXT)-MA(INEXTP) 906 | IF (MJ.LT.MZ) MJ=MJ+MBIG 907 | MA(INEXT)=MJ 908 | RF=MJ*FAC 909 | IF (RF.GT.1.E-8.AND.RF.LT.0.99999999) RETURN 910 | GO TO 200 911 | END 912 | * DATA0F.FOR 913 | * 914 | SUBROUTINE DATA0F 915 | * 916 | *--defines the data for a particular run of DSMC0F.FOR 917 | * 918 | PARAMETER (MNM=4100,MNC=41,MNSC=328,MTC=20,MXC=20,MAXD=50) 919 | * 920 | DOUBLE PRECISION MOVT,NCOL,SELT,SEPT 921 | * 922 | COMMON /GASS / SP(2),SPM(5) 923 | COMMON /SAMPS / NCOL,MOVT,SELT,SEPT,CS(5,MNC),TIME,NPR,NSMP,FND, 924 | & FTMP,VMP 925 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPT 926 | COMMON /GEOM / CW,NSC,XF,XR 927 | COMMON /SAMPF / CVT(5,-MTC:MTC),CSX(5,-MXC:MXC),CST(6,-MTC:MTC), 928 | & NSMPX,NSMPT,CNN(-MAXD:MAXD),NSMPN,AVM,AVT,AVU,AVV, 929 | & AVW,CSF(4,-MXC:MXC),NCO 930 | * 931 | *--set data (must be consistent with PARAMETER variables) 932 | * 933 | NCO=21 934 | *--NCO is the central cell for the fluctuatuion sampling 935 | FND=1.E20 936 | *--FND is the number densty 937 | FTMP=300. 938 | *--FTMP is the temperature 939 | FNUM=1.83738E15 940 | *--FNUM is the number of real molecules represented by a simulated mol. 941 | DTM=2.0E-6 942 | *--DTM is the time step 943 | NSC=8 944 | *--NSC is the number of sub-cells in each cell 945 | XF=0. 946 | XR=0.07533258 947 | *--the simulated region is from x=XF to x=XR 948 | SP(1)=5.E-26 949 | SP(2)=3.5E-10 950 | *--SP(1) is the molecular mass 951 | *--SP(2) is the molecular diameter 952 | SPM(2)=273. 953 | SPM(3)=0.5 954 | SPM(4)=1. 955 | *--SPM(2) is the reference temperature 956 | *--SPM(3) is the viscosity-temperature power law 957 | *--SPM(4) is the reciprocal of the VSS scattering parameter 958 | NIS=4 959 | *--NIS is the number of time steps between samples 960 | NSP=40 961 | *--NSP is the number of samples between restart and output file updates 962 | NPT=1000 963 | *--NPT is the number of file updates to STOP 964 | * 965 | RETURN 966 | END 967 | -------------------------------------------------------------------------------- /originalbird/DSMC0.FOR: -------------------------------------------------------------------------------- 1 | * DSMC0.FOR 2 | * 3 | PROGRAM DSMC0 4 | * 5 | *--test of collision procedures in a uniform gas 6 | * 7 | *--SI units are used throughout 8 | * 9 | PARAMETER (MNM=1000,MNC=50,MNSC=400,MNSP=5,MNSG=1) 10 | * 11 | *--MNM is the maximum number of molecules 12 | *--MNC is the maximum number of sub 13 | *--MNSC is the maximum number of sub-cells 14 | *--MNSP is the maximum number of molecular species 15 | *--MNSG is the number of species groups for collision sampling 16 | * 17 | DOUBLE PRECISION COL(MNSP,MNSP),MOVT,NCOL,SELT,SEPT,CS(7,MNC,MNSP) 18 | * 19 | *--COL(M,N) is the number of collisions between species N-M molecules 20 | *--NCOL is the total number of collisions 21 | *--MOVT the total number of molecular moves 22 | *--SELT the total number of pair selections 23 | *--SEPT the sum of collision pair separations 24 | *--CS(N,M,L) sampled information on species L in cell M 25 | *----N=1 number sum 26 | *----N=2,3,4 sum of u,v,w 27 | *----N=5,6,7 sum of u*u,v*v,w*w 28 | * 29 | COMMON /MOLS / NM,PP(MNM),PV(3,MNM),IPL(MNM),IPS(MNM),IR(MNM) 30 | * 31 | *--NM is the number of molecules 32 | *--PP(M) is the x coordinate molecule M 33 | *--PV(1 to 3,M) u,v,w velocity components of molecule M 34 | *--IPL(M) sub-cell number for molecule M 35 | *--IPS(M) species code number 36 | *--IR(M) cross-reference array (molecule numbers in order of sub-cells) 37 | * 38 | COMMON /CELLS / CC(MNC),CG(3,MNC),IC(2,MNC,MNSG),ISC(MNSC), 39 | & CCG(2,MNC,MNSG,MNSG),ISCG(2,MNSC,MNSG),IG(2,MNSG) 40 | * 41 | *--CC(M) is the cell volume 42 | *--CCG(N,M,L,K) is for collisions between species groups L-K in cell M 43 | *----N=1 is the maximum value of (relative speed)*(coll. cross-section) 44 | *----N=2 is the remainder when the selection number is rounded 45 | *--CG(N,M) is the geometry related information on cell M 46 | *----N=1 the minimum x coordinate 47 | *----N=2 the maximum x coordinate 48 | *----N=3 the cell width 49 | *--IC(N,M,L) information on the molecules of species group L in cell M 50 | *----N=1 (start address -1) of the molecule numbers in the array IR 51 | *----N=2 the number of molecules in the cell 52 | *--ISC(M) the cell in which the sub-cell lies 53 | *--ISCG(N,M,L) is the information on species group L in sub-cell M 54 | *----N=1 (start address -1) of the molecule numbers in the array IR 55 | *----N=2 the number of molecules in the sub-cell 56 | *--IG(2,M) information on group L molecules 57 | *----N=1 (start address -1) of the molecule numbers in the array IR 58 | *----N=2 the number of molecules in the cell 59 | * 60 | COMMON /GAS / SP(5,MNSP),SPM(6,MNSP,MNSP),ISP(MNSP) 61 | * 62 | *--SP(N,M) information on species M 63 | *----N=1 the reference cross-section (diameter in the data) 64 | *----N=2 the reference temperature 65 | *----N=3 the viscosity-temperature power law 66 | *----N=4 the reciprocal of the VSS scattering parameter 67 | *----N=5 the molecular mass 68 | *--SPM(N,M,L) information on the interaction between L-M molecules 69 | *----N=1 the reference cross-section (diameter in the data) 70 | *----N=2 the reference temperature 71 | *----N=3 the viscosity-temperature power law 72 | *----N=4 the reciprocal of the VSS scattering parameter 73 | *----N=5 the reduced mass 74 | *----N=6 the Gamma function of (5/2 - viscosity-temperature power law) 75 | *--ISP(M) the colision sampling group in which species M lies 76 | * 77 | COMMON /SAMP / COL,NCOL,MOVT,SELT,SEPT,CS,TIME,NPR,NSMP,FND,FTMP, 78 | & FSP(MNSP),ISPD 79 | * 80 | *--TIME time 81 | *--NPR the number of output/restart file update cycles 82 | *--NSMP the total number of samples 83 | *--FND the stream number density 84 | *--FTMP the stream temperature 85 | *--FSP(M) the fraction of species M in the stream 86 | *--ISPD relates to the setting of data for colls. between unlike mols. 87 | *----set to 0 if data is set automatically to the mean values 88 | *----set to 1 if the values are set explicitly in the data 89 | * 90 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPS,NPT 91 | * 92 | *--FNUM is the number of real molecules represented by a simulated mol. 93 | *--DTM is the time step 94 | *--NIS is the number of time steps between samples 95 | *--NSP is the number of samples between restart and output file updates 96 | *--NPS is the estimated number of samples to steady flow 97 | *--NPT is the number of file updates to STOP 98 | * 99 | COMMON /GEOM / CW,NSC,XF,XR 100 | * 101 | *--CW is the cell width 102 | *--NSC is the number of sub-cells per cell 103 | *--XF is the minimum x coordinate 104 | *--XR is the maximum x coordinate 105 | * 106 | COMMON /CONST / PI,SPI,BOLTZ 107 | * 108 | *--PI is pi and SPI is the square root of pi 109 | *--BOLTZ is the Boltzmann constant 110 | * 111 | WRITE (*,*) ' INPUT 0,1 FOR CONTINUING,NEW CALCULATION:- ' 112 | READ (*,*) NQL 113 | * 114 | IF (NQL.EQ.1) THEN 115 | * 116 | CALL INIT0 117 | * 118 | ELSE 119 | * 120 | WRITE (*,*) ' READ THE RESTART FILE' 121 | OPEN (4,FILE='DSMC0.RES',STATUS='OLD',FORM='UNFORMATTED') 122 | READ (4) BOLTZ,CC,CCG,CG,COL,CS,CW,DTM,FNUM,FTMP,IC,IPL,IPS,IR, 123 | & ISC,ISCG,ISP,MOVT,NCOL,NIS,NM,NSC,NSMP,NPR,NPT,NSP,PI, 124 | & PP,PV,SELT,SEPT,SP,SPI,SPM,TIME,XF,XR 125 | CLOSE (4) 126 | * 127 | END IF 128 | * 129 | IF (NQL.EQ.1) CALL SAMPI0 130 | * 131 | 100 NPR=NPR+1 132 | * 133 | DO 200 JJJ=1,NSP 134 | DO 150 III=1,NIS 135 | TIME=TIME+DTM 136 | * 137 | WRITE (*,99001) III,JJJ,NIS,NSP,NCOL 138 | 99001 FORMAT (' DSMC0:- Move ',2I5,' of ',2I5,F14.0,' Collisions') 139 | * 140 | CALL MOVE0 141 | * 142 | CALL INDEXM 143 | * 144 | CALL COLLM 145 | * 146 | 150 CONTINUE 147 | * 148 | CALL SAMPLE0 149 | * 150 | 200 CONTINUE 151 | * 152 | WRITE (*,*) ' WRITING RESTART AND OUTPUT FILES',NPR,' OF ',NPT 153 | OPEN (4,FILE='DSMC0.RES',FORM='UNFORMATTED') 154 | WRITE (4) BOLTZ,CC,CCG,CG,COL,CS,CW,DTM,FNUM,FTMP,IC,IPL,IPS,IR, 155 | & ISC,ISCG,ISP,MOVT,NCOL,NIS,NM,NSC,NSMP,NPR,NPT,NSP,PI, 156 | & PP,PV,SELT,SEPT,SP,SPI,SPM,TIME,XF,XR 157 | CLOSE (4) 158 | * 159 | CALL OUT0 160 | * 161 | IF (NPR.LT.NPT) GO TO 100 162 | STOP 163 | END 164 | * INIT0.FOR 165 | * 166 | SUBROUTINE INIT0 167 | * 168 | PARAMETER (MNM=1000,MNC=50,MNSC=400,MNSP=5,MNSG=1) 169 | * 170 | DOUBLE PRECISION COL(MNSP,MNSP),MOVT,NCOL,SELT,SEPT,CS(7,MNC,MNSP) 171 | * 172 | COMMON /MOLS / NM,PP(MNM),PV(3,MNM),IPL(MNM),IPS(MNM),IR(MNM) 173 | COMMON /CELLS / CC(MNC),CG(3,MNC),IC(2,MNC,MNSG),ISC(MNSC), 174 | & CCG(2,MNC,MNSG,MNSG),ISCG(2,MNSC,MNSG),IG(2,MNSG) 175 | COMMON /GAS / SP(5,MNSP),SPM(6,MNSP,MNSP),ISP(MNSP) 176 | COMMON /SAMP / COL,NCOL,MOVT,SELT,SEPT,CS,TIME,NPR,NSMP,FND,FTMP, 177 | & FSP(MNSP),ISPD 178 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPS,NPT 179 | COMMON /GEOM / CW,NSC,XF,XR 180 | COMMON /CONST / PI,SPI,BOLTZ 181 | * 182 | *--set constants 183 | * 184 | PI=3.141592654 185 | SPI=SQRT(PI) 186 | BOLTZ=1.3806E-23 187 | * 188 | CALL DATA0 189 | * 190 | *--set information on the cross-species collisions 191 | * 192 | IF (MNSP.EQ.1) ISPD=0 193 | DO 100 N=1,MNSP 194 | DO 50 M=1,MNSP 195 | IF ((ISPD.EQ.0).OR.(N.EQ.M)) THEN 196 | SPM(1,N,M)=0.25*PI*(SP(1,N)+SP(1,M))**2 197 | *--the collision cross section is assumed to be given by eqn (1.35) 198 | SPM(2,N,M)=0.5*(SP(2,N)+SP(2,M)) 199 | SPM(3,N,M)=0.5*(SP(3,N)+SP(3,M)) 200 | SPM(4,N,M)=0.5*(SP(4,N)+SP(4,M)) 201 | *--mean values are used for ISPD=0 202 | ELSE 203 | SPM(1,N,M)=PI*SPM(1,N,M)**2 204 | *--the cross-collision diameter is converted to the cross-section 205 | END IF 206 | SPM(5,N,M)=(SP(5,N)/(SP(5,N)+SP(5,M)))*SP(5,M) 207 | *--the reduced mass is defined in eqn (2.7) 208 | SPM(6,N,M)=GAM(2.5-SPM(3,N,M)) 209 | 50 CONTINUE 210 | 100 CONTINUE 211 | * 212 | *--initialise variables 213 | * 214 | TIME=0. 215 | NM=0 216 | * 217 | CG(1,1)=XF 218 | CW=(XR-XF)/MNC 219 | DO 200 M=1,MNC 220 | IF (M.GT.1) CG(1,M)=CG(2,M-1) 221 | CG(2,M)=CG(1,M)+CW 222 | CG(3,M)=CW 223 | CC(M)=CW 224 | DO 150 L=1,MNSG 225 | DO 120 K=1,MNSG 226 | CCG(2,M,L,K)=RF(0) 227 | CCG(1,M,L,K)=SPM(1,1,1)*300.*SQRT(FTMP/300.) 228 | 120 CONTINUE 229 | 150 CONTINUE 230 | *--the maximum value of the (rel. speed)*(cross-section) is set to a 231 | *--reasonable, but low, initial value and will be increased as necessary 232 | 200 CONTINUE 233 | * 234 | *--set sub-cells 235 | * 236 | DO 300 N=1,MNC 237 | DO 250 M=1,NSC 238 | L=(N-1)*NSC+M 239 | ISC(L)=N 240 | 250 CONTINUE 241 | 300 CONTINUE 242 | * 243 | *--generate initial gas in equilibrium at temperature FTMP 244 | * 245 | DO 400 L=1,MNSP 246 | REM=0 247 | VMP=SQRT(2.*BOLTZ*FTMP/SP(5,L)) 248 | *--VMP is the most probable speed in species L, see eqns (4.1) and (4.7) 249 | DO 350 N=1,MNC 250 | A=FND*CG(3,N)*FSP(L)/FNUM+REM 251 | *--A is the number of simulated molecules of species L in cell N to 252 | *--simulate the required concentrations at a total number density of FND 253 | IF (N.LT.MNC) THEN 254 | MM=A 255 | REM=(A-MM) 256 | *--the remainder REM is carried forward to the next cell 257 | ELSE 258 | MM=NINT(A) 259 | END IF 260 | DO 320 M=1,MM 261 | IF (NM.LE.MNM) THEN 262 | *--round-off error could have taken NM to MNM+1 263 | NM=NM+1 264 | IPS(NM)=L 265 | PP(NM)=CG(1,N)+RF(0)*(CG(2,N)-CG(1,N)) 266 | IPL(NM)=(PP(NM)-CG(1,N))*(NSC-.001)/CG(3,N)+1+NSC*(N-1) 267 | *--species, position, and sub-cell number have been set 268 | DO 305 K=1,3 269 | CALL RVELC(PV(K,NM),A,VMP) 270 | 305 CONTINUE 271 | *--velocity components have been set 272 | END IF 273 | 320 CONTINUE 274 | 350 CONTINUE 275 | 400 CONTINUE 276 | WRITE (*,99001) NM 277 | 99001 FORMAT (' ',I6,' MOLECULES') 278 | * 279 | RETURN 280 | END 281 | * SAMPI0.FOR 282 | * 283 | SUBROUTINE SAMPI0 284 | * 285 | *--initialises all the sampling variables 286 | * 287 | PARAMETER (MNM=1000,MNC=50,MNSC=400,MNSP=5,MNSG=1) 288 | * 289 | DOUBLE PRECISION COL(MNSP,MNSP),MOVT,NCOL,SELT,SEPT,CS(7,MNC,MNSP) 290 | * 291 | COMMON /SAMP / COL,NCOL,MOVT,SELT,SEPT,CS,TIME,NPR,NSMP,FND,FTMP, 292 | & FSP(MNSP),ISPD 293 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPS,NPT 294 | * 295 | NPR=0 296 | NCOL=0 297 | NSMP=0 298 | MOVT=0. 299 | SELT=0. 300 | SEPT=0. 301 | DO 100 L=1,MNSP 302 | DO 50 N=1,MNC 303 | CS(1,N,L)=1.E-6 304 | DO 20 M=2,7 305 | CS(M,N,L)=0. 306 | 20 CONTINUE 307 | 50 CONTINUE 308 | 100 CONTINUE 309 | DO 200 M=1,MNSP 310 | DO 150 N=1,MNSP 311 | COL(M,N)=0. 312 | 150 CONTINUE 313 | 200 CONTINUE 314 | RETURN 315 | END 316 | * MOVE0.FOR 317 | * 318 | SUBROUTINE MOVE0 319 | * 320 | *--the NM molecules are moved over the time interval DTM 321 | * 322 | PARAMETER (MNM=1000,MNC=50,MNSC=400,MNSP=5,MNSG=1) 323 | * 324 | DOUBLE PRECISION COL(MNSP,MNSP),MOVT,NCOL,SELT,SEPT,CS(7,MNC,MNSP) 325 | * 326 | COMMON /MOLS / NM,PP(MNM),PV(3,MNM),IPL(MNM),IPS(MNM),IR(MNM) 327 | COMMON /CELLS / CC(MNC),CG(3,MNC),IC(2,MNC,MNSG),ISC(MNSC), 328 | & CCG(2,MNC,MNSG,MNSG),ISCG(2,MNSC,MNSG),IG(2,MNSG) 329 | COMMON /SAMP / COL,NCOL,MOVT,SELT,SEPT,CS,TIME,NPR,NSMP,FND,FTMP, 330 | & FSP(MNSP),ISPD 331 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPS,NPT 332 | COMMON /GEOM / CW,NSC,XF,XR 333 | * 334 | DO 100 N=1,NM 335 | MOVT=MOVT+1 336 | MSC=IPL(N) 337 | MC=ISC(MSC) 338 | *--MC is the initial cell number 339 | XI=PP(N) 340 | DX=PV(1,N)*DTM 341 | X=XI+DX 342 | *--molecule N at XI is moved by DX to X 343 | IF (X.LT.XF) THEN 344 | *--specular reflection from the minimum x boundary at x=XF (eqn (11.7)) 345 | X=2.*XF-X 346 | PV(1,N)=-PV(1,N) 347 | END IF 348 | IF (X.GT.XR) THEN 349 | *--specular reflection from the maximum x boundary at x=XR (eqn (11.7)) 350 | X=2.*XR-X 351 | PV(1,N)=-PV(1,N) 352 | END IF 353 | IF (X.LT.CG(1,MC).OR.X.GT.CG(2,MC)) THEN 354 | *--the molecule has moved from the initial cell 355 | MC=(X-XF)/CW+0.99999 356 | IF (MC.EQ.0) MC=1 357 | *--MC is the new cell number (note avoidance of round-off error) 358 | END IF 359 | MSC=((X-CG(1,MC))/CG(3,MC))*(NSC-.001)+1+NSC*(MC-1) 360 | *--MSC is the new sub-cell number 361 | IPL(N)=MSC 362 | PP(N)=X 363 | 100 CONTINUE 364 | RETURN 365 | END 366 | * INDEXM.FOR 367 | * 368 | SUBROUTINE INDEXM 369 | * 370 | *--the NM molecule numbers are arranged in order of the molecule groups 371 | *--and, within the groups, in order of the cells and, within the cells, 372 | *--in order of the sub-cells 373 | * 374 | PARAMETER (MNM=1000,MNC=50,MNSC=400,MNSP=5,MNSG=1) 375 | * 376 | COMMON /MOLS / NM,PP(MNM),PV(3,MNM),IPL(MNM),IPS(MNM),IR(MNM) 377 | COMMON /CELLS / CC(MNC),CG(3,MNC),IC(2,MNC,MNSG),ISC(MNSC), 378 | & CCG(2,MNC,MNSG,MNSG),ISCG(2,MNSC,MNSG),IG(2,MNSG) 379 | COMMON /GAS / SP(5,MNSP),SPM(6,MNSP,MNSP),ISP(MNSP) 380 | * 381 | DO 200 MM=1,MNSG 382 | IG(2,MM)=0 383 | DO 50 NN=1,MNC 384 | IC(2,NN,MM)=0 385 | 50 CONTINUE 386 | DO 100 NN=1,MNSC 387 | ISCG(2,NN,MM)=0 388 | 100 CONTINUE 389 | 200 CONTINUE 390 | DO 300 N=1,NM 391 | LS=IPS(N) 392 | MG=ISP(LS) 393 | IG(2,MG)=IG(2,MG)+1 394 | MSC=IPL(N) 395 | ISCG(2,MSC,MG)=ISCG(2,MSC,MG)+1 396 | MC=ISC(MSC) 397 | IC(2,MC,MG)=IC(2,MC,MG)+1 398 | 300 CONTINUE 399 | *--number in molecule groups in the cells and sub-cells have been counte 400 | M=0 401 | DO 400 L=1,MNSG 402 | IG(1,L)=M 403 | *--the (start address -1) has been set for the groups 404 | M=M+IG(2,L) 405 | 400 CONTINUE 406 | DO 600 L=1,MNSG 407 | M=IG(1,L) 408 | DO 450 N=1,MNC 409 | IC(1,N,L)=M 410 | M=M+IC(2,N,L) 411 | 450 CONTINUE 412 | *--the (start address -1) has been set for the cells 413 | M=IG(1,L) 414 | DO 500 N=1,MNSC 415 | ISCG(1,N,L)=M 416 | M=M+ISCG(2,N,L) 417 | ISCG(2,N,L)=0 418 | 500 CONTINUE 419 | 600 CONTINUE 420 | *--the (start address -1) has been set for the sub-cells 421 | 422 | DO 700 N=1,NM 423 | LS=IPS(N) 424 | MG=ISP(LS) 425 | MSC=IPL(N) 426 | ISCG(2,MSC,MG)=ISCG(2,MSC,MG)+1 427 | K=ISCG(1,MSC,MG)+ISCG(2,MSC,MG) 428 | IR(K)=N 429 | *--the molecule number N has been set in the cross-reference array 430 | 700 CONTINUE 431 | RETURN 432 | END 433 | * COLLM.FOR 434 | * 435 | SUBROUTINE COLLM 436 | * 437 | *--calculates collisions appropriate to DTM in a monatomic gas mixture 438 | * 439 | PARAMETER (MNM=1000,MNC=50,MNSC=400,MNSP=5,MNSG=1) 440 | * 441 | DOUBLE PRECISION COL(MNSP,MNSP),MOVT,NCOL,SELT,SEPT,CS(7,MNC,MNSP) 442 | * 443 | COMMON /MOLS / NM,PP(MNM),PV(3,MNM),IPL(MNM),IPS(MNM),IR(MNM) 444 | COMMON /CELLS / CC(MNC),CG(3,MNC),IC(2,MNC,MNSG),ISC(MNSC), 445 | & CCG(2,MNC,MNSG,MNSG),ISCG(2,MNSC,MNSG),IG(2,MNSG) 446 | COMMON /GAS / SP(5,MNSP),SPM(6,MNSP,MNSP),ISP(MNSP) 447 | COMMON /SAMP / COL,NCOL,MOVT,SELT,SEPT,CS,TIME,NPR,NSMP,FND,FTMP, 448 | & FSP(MNSP),ISPD 449 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPS,NPT 450 | COMMON /GEOM / CW,NSC,XF,XR 451 | COMMON /CONST / PI,SPI,BOLTZ 452 | COMMON /ELAST / VRC(3),VRR,VR,L,M,LS,MS,CVR,MM,NN,N 453 | * 454 | *--VRC(3) are the pre-collision components of the relative velocity 455 | * 456 | DO 100 N=1,MNC 457 | *--consider collisions in cell N 458 | DO 50 NN=1,MNSG 459 | DO 20 MM=1,MNSG 460 | SN=0. 461 | DO 10 K=1,MNSP 462 | IF (ISP(K).EQ.MM) SN=SN+CS(1,N,K) 463 | 10 CONTINUE 464 | IF (SN.GT.1.) THEN 465 | AVN=SN/FLOAT(NSMP) 466 | ELSE 467 | AVN=IC(2,N,MM) 468 | END IF 469 | *--AVN is the average number of group MM molecules in the cell 470 | ASEL=0.5*IC(2,N,NN)*AVN*FNUM*CCG(1,N,NN,MM)*DTM/CC(N) 471 | & +CCG(2,N,NN,MM) 472 | *--ASEL is the number of pairs to be selected, see eqn (11.5) 473 | NSEL=ASEL 474 | CCG(2,N,NN,MM)=ASEL-NSEL 475 | IF (NSEL.GT.0) THEN 476 | IF (((NN.NE.MM).AND.(IC(2,N,NN).LT.1.OR.IC(2,N,MM).LT.1)) 477 | & .OR.((NN.EQ.MM).AND.(IC(2,N,NN).LT.2))) THEN 478 | CCG(2,N,NN,MM)=CCG(2,N,NN,MM)+NSEL 479 | *--if there are insufficient molecules to calculate collisions, 480 | *--the number NSEL is added to the remainer CCG(2,N,NN,MM) 481 | ELSE 482 | CVM=CCG(1,N,NN,MM) 483 | SELT=SELT+NSEL 484 | DO 12 ISEL=1,NSEL 485 | * 486 | CALL SELECT 487 | * 488 | IF (CVR.GT.CVM) CVM=CVR 489 | *--if necessary, the maximum product in CVM is upgraded 490 | IF (RF(0).LT.CVR/CCG(1,N,NN,MM)) THEN 491 | *--the collision is accepted with the probability of eqn (11.6) 492 | NCOL=NCOL+1 493 | SEPT=SEPT+ABS(PP(L)-PP(M)) 494 | COL(LS,MS)=COL(LS,MS)+1.D00 495 | COL(MS,LS)=COL(MS,LS)+1.D00 496 | * 497 | CALL ELASTIC 498 | * 499 | END IF 500 | 12 CONTINUE 501 | CCG(1,N,NN,MM)=CVM 502 | END IF 503 | END IF 504 | 20 CONTINUE 505 | 50 CONTINUE 506 | 100 CONTINUE 507 | RETURN 508 | END 509 | * SELECT.FOR 510 | * 511 | SUBROUTINE SELECT 512 | *--selects a potential collision pair and calculates the product of the 513 | *--collision cross-section and relative speed 514 | * 515 | PARAMETER (MNM=1000,MNC=50,MNSC=400,MNSP=5,MNSG=1) 516 | * 517 | COMMON /MOLS / NM,PP(MNM),PV(3,MNM),IPL(MNM),IPS(MNM),IR(MNM) 518 | COMMON /CELLS / CC(MNC),CG(3,MNC),IC(2,MNC,MNSG),ISC(MNSC), 519 | & CCG(2,MNC,MNSG,MNSG),ISCG(2,MNSC,MNSG),IG(2,MNSG) 520 | COMMON /GAS / SP(5,MNSP),SPM(6,MNSP,MNSP),ISP(MNSP) 521 | COMMON /CONST / PI,SPI,BOLTZ 522 | COMMON /ELAST / VRC(3),VRR,VR,L,M,LS,MS,CVR,MM,NN,N 523 | * 524 | K=INT(RF(0)*(IC(2,N,NN)-0.0001))+IC(1,N,NN)+1 525 | L=IR(K) 526 | *--the first molecule L has been chosen at random from group NN in cell 527 | 100 MSC=IPL(L) 528 | IF ((NN.EQ.MM.AND.ISCG(2,MSC,MM).EQ.1).OR. 529 | & (NN.NE.MM.AND.ISCG(2,MSC,MM).EQ.0)) THEN 530 | *--if MSC has no type MM molecule find the nearest sub-cell with one 531 | NST=1 532 | NSG=1 533 | 150 INC=NSG*NST 534 | NSG=-NSG 535 | NST=NST+1 536 | MSC=MSC+INC 537 | IF (MSC.LT.1.OR.MSC.GT.MNSC) GO TO 150 538 | IF (ISC(MSC).NE.N.OR.ISCG(2,MSC,MM).LT.1) GO TO 150 539 | END IF 540 | *--the second molecule M is now chosen at random from the group MM 541 | *--molecules that are in the sub-cell MSC 542 | K=INT(RF(0)*(ISCG(2,MSC,MM)-0.0001))+ISCG(1,MSC,MM)+1 543 | M=IR(K) 544 | IF (L.EQ.M) GO TO 100 545 | *--choose a new second molecule if the first is again chosen 546 | DO 200 K=1,3 547 | VRC(K)=PV(K,L)-PV(K,M) 548 | 200 CONTINUE 549 | *--VRC(1 to 3) are the components of the relative velocity 550 | VRR=VRC(1)**2+VRC(2)**2+VRC(3)**2 551 | VR=SQRT(VRR) 552 | *--VR is the relative speed 553 | LS=IPS(L) 554 | MS=IPS(M) 555 | CVR=VR*SPM(1,LS,MS)*((2.*BOLTZ*SPM(2,LS,MS)/(SPM(5,LS,MS)*VRR)) 556 | & **(SPM(3,LS,MS)-0.5))/SPM(6,LS,MS) 557 | *--the collision cross-section is based on eqn (4.63) 558 | RETURN 559 | END 560 | * ELASTIC.FOR 561 | * 562 | SUBROUTINE ELASTIC 563 | * 564 | *--generates the post-collision velocity components 565 | * 566 | PARAMETER (MNM=1000,MNC=50,MNSC=400,MNSP=5,MNSG=1) 567 | * 568 | COMMON /MOLS / NM,PP(MNM),PV(3,MNM),IPL(MNM),IPS(MNM),IR(MNM) 569 | COMMON /GAS / SP(5,MNSP),SPM(6,MNSP,MNSP),ISP(MNSP) 570 | COMMON /CONST / PI,SPI,BOLTZ 571 | COMMON /ELAST / VRC(3),VRR,VR,L,M,LS,MS,CVR,MM,NN,N 572 | * 573 | DIMENSION VRCP(3),VCCM(3) 574 | *--VRCP(3) are the post-collision components of the relative velocity 575 | *--VCCM(3) are the components of the centre of mass velocity 576 | * 577 | RML=SPM(5,LS,MS)/SP(5,MS) 578 | RMM=SPM(5,LS,MS)/SP(5,LS) 579 | DO 100 K=1,3 580 | VCCM(K)=RML*PV(K,L)+RMM*PV(K,M) 581 | 100 CONTINUE 582 | *--VCCM defines the components of the centre of mass velocity (eqn 2.1) 583 | IF (ABS(SPM(4,LS,MS)-1.).LT.1.E-3) THEN 584 | *--use the VHS logic 585 | B=2.*RF(0)-1. 586 | *--B is the cosine of a random elevation angle 587 | A=SQRT(1.-B*B) 588 | VRCP(1)=B*VR 589 | C=2.*PI*RF(0) 590 | *--C is a random azimuth angle 591 | VRCP(2)=A*COS(C)*VR 592 | VRCP(3)=A*SIN(C)*VR 593 | ELSE 594 | *--use the VSS logic 595 | B=2.*(RF(0)**SPM(4,LS,MS))-1. 596 | *--B is the cosine of the deflection angle for the VSS model (eqn (11.8) 597 | A=SQRT(1.-B*B) 598 | C=2.*PI*RF(0) 599 | OC=COS(C) 600 | SC=SIN(C) 601 | D=SQRT(VRC(2)**2+VRC(3)**2) 602 | IF (D.GT.1.E-6) THEN 603 | VRCP(1)=B*VRC(1)+A*SC*D 604 | VRCP(2)=B*VRC(2)+A*(VR*VRC(3)*OC-VRC(1)*VRC(2)*SC)/D 605 | VRCP(3)=B*VRC(3)-A*(VR*VRC(2)*OC+VRC(1)*VRC(3)*SC)/D 606 | ELSE 607 | VRCP(1)=B*VRC(1) 608 | VRCP(2)=A*OC*VRC(1) 609 | VRCP(3)=A*SC*VRC(1) 610 | END IF 611 | *--the post-collision rel. velocity components are based on eqn (2.22) 612 | END IF 613 | *--VRCP(1 to 3) are the components of the post-collision relative vel. 614 | DO 200 K=1,3 615 | PV(K,L)=VCCM(K)+VRCP(K)*RMM 616 | PV(K,M)=VCCM(K)-VRCP(K)*RML 617 | 200 CONTINUE 618 | RETURN 619 | END 620 | * SAMPLE0.FOR 621 | * 622 | SUBROUTINE SAMPLE0 623 | * 624 | *--samples the molecules in the flow 625 | * 626 | PARAMETER (MNM=1000,MNC=50,MNSC=400,MNSP=5,MNSG=1) 627 | * 628 | DOUBLE PRECISION COL(MNSP,MNSP),MOVT,NCOL,SELT,SEPT,CS(7,MNC,MNSP) 629 | * 630 | COMMON /MOLS / NM,PP(MNM),PV(3,MNM),IPL(MNM),IPS(MNM),IR(MNM) 631 | COMMON /CELLS / CC(MNC),CG(3,MNC),IC(2,MNC,MNSG),ISC(MNSC), 632 | & CCG(2,MNC,MNSG,MNSG),ISCG(2,MNSC,MNSG),IG(2,MNSG) 633 | COMMON /SAMP / COL,NCOL,MOVT,SELT,SEPT,CS,TIME,NPR,NSMP,FND,FTMP, 634 | & FSP(MNSP),ISPD 635 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPS,NPT 636 | * 637 | NSMP=NSMP+1 638 | DO 100 NN=1,MNSG 639 | DO 50 N=1,MNC 640 | L=IC(2,N,NN) 641 | IF (L.GT.0) THEN 642 | DO 10 J=1,L 643 | K=IC(1,N,NN)+J 644 | M=IR(K) 645 | I=IPS(M) 646 | CS(1,N,I)=CS(1,N,I)+1 647 | DO 5 LL=1,3 648 | CS(LL+1,N,I)=CS(LL+1,N,I)+PV(LL,M) 649 | CS(LL+4,N,I)=CS(LL+4,N,I)+PV(LL,M)**2 650 | 5 CONTINUE 651 | 10 CONTINUE 652 | END IF 653 | 50 CONTINUE 654 | 100 CONTINUE 655 | RETURN 656 | END 657 | * OUT0.FOR 658 | * 659 | SUBROUTINE OUT0 660 | * 661 | *--output a progressive set of results to file DSMC0.OUT 662 | * 663 | PARAMETER (MNM=1000,MNC=50,MNSC=400,MNSP=5,MNSG=1) 664 | * 665 | DOUBLE PRECISION COL(MNSP,MNSP),MOVT,NCOL,SELT,SEPT,CS(7,MNC,MNSP) 666 | * 667 | COMMON /MOLS / NM,PP(MNM),PV(3,MNM),IPL(MNM),IPS(MNM),IR(MNM) 668 | COMMON /CELLS / CC(MNC),CG(3,MNC),IC(2,MNC,MNSG),ISC(MNSC), 669 | & CCG(2,MNC,MNSG,MNSG),ISCG(2,MNSC,MNSG),IG(2,MNSG) 670 | COMMON /GAS / SP(5,MNSP),SPM(6,MNSP,MNSP),ISP(MNSP) 671 | COMMON /SAMP / COL,NCOL,MOVT,SELT,SEPT,CS,TIME,NPR,NSMP,FND,FTMP, 672 | & FSP(MNSP),ISPD 673 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPS,NPT 674 | COMMON /CONST / PI,SPI,BOLTZ 675 | * 676 | DIMENSION VEL(3),SMU(3),TCOL(MNSP,MNSP),SVEL(3,MNC) 677 | * 678 | OPEN (4,FILE='DSMC0.OUT',FORM='FORMATTED') 679 | * 680 | WRITE (4,*) ' FROM ZERO TIME TO TIME',TIME 681 | WRITE (4,*) ' COLLISIONS:-' 682 | WRITE (4,99001) ((COL(M,L),M=1,MNSP),L=1,MNSP) 683 | 99001 FORMAT (5F12.0) 684 | WRITE (4,*) ' TOTAL NUMBER OF SAMPLES ',NSMP 685 | WRITE (4,*) NM,' MOLECULES' 686 | WRITE (4,*) MOVT,' TOTAL MOLECULAR MOVES' 687 | WRITE (4,*) INT(SELT),' SELECTIONS ',INT(NCOL), 688 | & ' COLLISION EVENTS, RATIO ',REAL(NCOL/SELT) 689 | IF (NCOL.GT.0) WRITE (4,*) ' MEAN COLLISION SEPARATION ', 690 | & REAL(SEPT/NCOL) 691 | WRITE (4,*) 'SAMPLES' 692 | WRITE (4,*) ' CELL N SP 1 N SP 2 ETC ' 693 | DO 100 N=1,MNC 694 | WRITE (4,99002) N,(CS(1,N,L),L=1,MNSP) 695 | 100 CONTINUE 696 | 99002 FORMAT (' ',I6,5F9.0) 697 | * 698 | WRITE (4,*) ' FLOWFIELD PROPERTIES' 699 | WRITE (4,*) 700 | &' CELL X COORD DENSITY U V W T 701 | &EMP' 702 | TOT=0. 703 | *--first the mixture properties 704 | DO 300 N=1,MNC 705 | A=FNUM/(CG(3,N)*NSMP) 706 | SN=0. 707 | SM=0. 708 | DO 150 K=1,3 709 | SMU(K)=0. 710 | 150 CONTINUE 711 | SMCC=0. 712 | DO 200 L=1,MNSP 713 | SN=SN+CS(1,N,L) 714 | *--SN is the number sum 715 | SM=SM+SP(5,L)*CS(1,N,L) 716 | *--SM is the sum of molecular masses 717 | DO 160 K=1,3 718 | SMU(K)=SMU(K)+SP(5,L)*CS(K+1,N,L) 719 | *--SMU(1 to 3) are the sum of mu, mv, mw 720 | 160 CONTINUE 721 | SMCC=SMCC+(CS(5,N,L)+CS(6,N,L)+CS(7,N,L))*SP(5,L) 722 | *--SMCC is the sum of m(u**2+v**2+w**2) 723 | 200 CONTINUE 724 | DENN=SN*A 725 | *--DENN is the number density, see eqn (1.34) 726 | DEN=DENN*SM/SN 727 | *--DEN is the density, see eqn (1.42) 728 | DO 250 K=1,3 729 | VEL(K)=SMU(K)/SM 730 | SVEL(K,N)=VEL(K) 731 | 250 CONTINUE 732 | *--VEL and SVEL are the stream velocity components, see eqn (1.43) 733 | UU=VEL(1)**2+VEL(2)**2+VEL(3)**2 734 | TT=(SMCC-SM*UU)/(3.*BOLTZ*SN) 735 | *--TT is the temperature, see eqn (1.51) 736 | TOT=TOT+TT 737 | XC=0.5*(CG(1,N)+CG(2,N)) 738 | *--XC is the x coordinate of the midpoint of the cell 739 | WRITE (4,99003) N,XC,DEN,VEL(1),VEL(2),VEL(3),TT 740 | 99003 FORMAT (' ',I5,F10.4,1P,E12.4,0P,4F10.4) 741 | 300 CONTINUE 742 | * 743 | WRITE (4,*) 744 | DO 400 L=1,MNSP 745 | *--now the properties of the separate species 746 | WRITE (4,*) 747 | WRITE (4,*) ' SPECIES ',L 748 | WRITE (4,*) 749 | &' CELL X COORD N DENS DENSITY U DIF VEL V DIF VEL W DIF 750 | & VEL TEMP ' 751 | DO 350 N=1,MNC 752 | A=FNUM/(CG(3,N)*NSMP) 753 | DENN=CS(1,N,L)*A 754 | *--DENN is the partial number density 755 | DEN=SP(5,L)*DENN 756 | *--DEN is the partial density, see eqn (1.13) 757 | DO 320 K=1,3 758 | VEL(K)=CS(K+1,N,L)/CS(1,N,L) 759 | *--VEL defines the average velocity of the species L molecules 760 | 320 CONTINUE 761 | UU=VEL(1)**2+VEL(2)**2+VEL(3)**2 762 | TT=(SP(5,L)/(3.*BOLTZ)) 763 | & *((CS(5,N,L)+CS(6,N,L)+CS(7,N,L))/CS(1,N,L)-UU) 764 | *--TT is the temperature, see eqn (1.29) 765 | DO 340 K=1,3 766 | VEL(K)=VEL(K)-SVEL(K,N) 767 | *--VEL now defines the diffusion velocity of species L, see eqn (1,45) 768 | 340 CONTINUE 769 | XC=0.5*(CG(1,N)+CG(2,N)) 770 | WRITE (4,99004) N,XC,DENN,DEN,VEL(1),VEL(2),VEL(3),TT 771 | 99004 FORMAT (' ',I5,F9.4,1P,2E12.4,0P,4F10.4) 772 | 350 CONTINUE 773 | 400 CONTINUE 774 | * 775 | *--compare with the theoretical collision number for actual temperarure 776 | AVTMP=TOT/MNC 777 | WRITE (4,*) 778 | WRITE (4,*) ' AVERAGE TEMPERATURE ',AVTMP 779 | WRITE (4,*) 780 | WRITE (4,*) ' COLLISIONS:-' 781 | WRITE (4,99001) ((COL(M,L),M=1,MNSP),L=1,MNSP) 782 | WRITE (4,*) 783 | WRITE (4,*) ' RATIO OF COLLISION NUMBER TO THEORETICAL VALUE' 784 | WRITE (4,*) 785 | DO 600 M=1,MNSP 786 | SML=0 787 | DO 450 K=1,MNC 788 | SML=SML+CS(1,K,M)/NSMP 789 | 450 CONTINUE 790 | DO 500 L=1,MNSP 791 | SLL=0 792 | DO 460 K=1,MNC 793 | SLL=SLL+CS(1,K,L)/NSMP 794 | 460 CONTINUE 795 | TCOL(M,L)=2.*TIME*FNUM*SML*SLL*(1./(CG(2,MNC)-CG(1,1))) 796 | & *SPM(1,M,L)*(AVTMP/SPM(2,M,L))**(1.-SPM(3,M,L)) 797 | & *SQRT(2.*BOLTZ*SPM(2,L,M)/(PI*SPM(5,L,M))) 798 | * TCOL is the equilibrium collision rate, see eqn (4.78) 799 | 500 CONTINUE 800 | 600 CONTINUE 801 | WRITE (4,99005) ((COL(M,L)/TCOL(M,L),M=1,MNSP),L=1,MNSP) 802 | 99005 FORMAT (5F10.6) 803 | * 804 | CLOSE (4) 805 | * 806 | RETURN 807 | END 808 | * RVELC.FOR 809 | * 810 | SUBROUTINE RVELC(U,V,VMP) 811 | * 812 | *--generates two random velocity components U an V in an equilibrium 813 | *--gas with most probable speed VMP (based on eqns (C10) and (C12)) 814 | * 815 | A=SQRT(-LOG(RF(0))) 816 | B=6.283185308*RF(0) 817 | U=A*SIN(B)*VMP 818 | V=A*COS(B)*VMP 819 | RETURN 820 | END 821 | * GAM.FOR 822 | * 823 | FUNCTION GAM(X) 824 | * 825 | *--calculates the Gamma function of X 826 | * 827 | A=1. 828 | Y=X 829 | IF (Y.LT.1.) THEN 830 | A=A/Y 831 | ELSE 832 | 50 Y=Y-1 833 | IF (Y.GE.1.) THEN 834 | A=A*Y 835 | GO TO 50 836 | END IF 837 | END IF 838 | GAM=A*(1.-0.5748646*Y+0.9512363*Y**2-0.6998588*Y**3+ 839 | & 0.4245549*Y**4-0.1010678*Y**5) 840 | RETURN 841 | END 842 | * RF.FOR 843 | * 844 | FUNCTION RF(IDUM) 845 | *--generates a uniformly distributed random fraction between 0 and 1 846 | *----IDUM will generally be 0, but negative values may be used to 847 | *------re-initialize the seed 848 | SAVE MA,INEXT,INEXTP 849 | PARAMETER (MBIG=1000000000,MSEED=161803398,MZ=0,FAC=1.E-9) 850 | DIMENSION MA(55) 851 | DATA IFF/0/ 852 | IF (IDUM.LT.0.OR.IFF.EQ.0) THEN 853 | IFF=1 854 | MJ=MSEED-IABS(IDUM) 855 | MJ=MOD(MJ,MBIG) 856 | MA(55)=MJ 857 | MK=1 858 | DO 50 I=1,54 859 | II=MOD(21*I,55) 860 | MA(II)=MK 861 | MK=MJ-MK 862 | IF (MK.LT.MZ) MK=MK+MBIG 863 | MJ=MA(II) 864 | 50 CONTINUE 865 | DO 100 K=1,4 866 | DO 60 I=1,55 867 | MA(I)=MA(I)-MA(1+MOD(I+30,55)) 868 | IF (MA(I).LT.MZ) MA(I)=MA(I)+MBIG 869 | 60 CONTINUE 870 | 100 CONTINUE 871 | INEXT=0 872 | INEXTP=31 873 | END IF 874 | 200 INEXT=INEXT+1 875 | IF (INEXT.EQ.56) INEXT=1 876 | INEXTP=INEXTP+1 877 | IF (INEXTP.EQ.56) INEXTP=1 878 | MJ=MA(INEXT)-MA(INEXTP) 879 | IF (MJ.LT.MZ) MJ=MJ+MBIG 880 | MA(INEXT)=MJ 881 | RF=MJ*FAC 882 | IF (RF.GT.1.E-8.AND.RF.LT.0.99999999) RETURN 883 | GO TO 200 884 | END 885 | * DATA0.FOR 886 | * 887 | SUBROUTINE DATA0 888 | * 889 | *--defines the data for a particular run of DSMC0.FOR 890 | * 891 | PARAMETER (MNM=1000,MNC=50,MNSC=400,MNSP=5,MNSG=1) 892 | * 893 | DOUBLE PRECISION COL(MNSP,MNSP),MOVT,NCOL,SELT,SEPT,CS(7,MNC,MNSP) 894 | * 895 | COMMON /GAS / SP(5,MNSP),SPM(6,MNSP,MNSP),ISP(MNSP) 896 | COMMON /SAMP / COL,NCOL,MOVT,SELT,SEPT,CS,TIME,NPR,NSMP,FND,FTMP, 897 | & FSP(MNSP),ISPD 898 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPS,NPT 899 | COMMON /GEOM / CW,NSC,XF,XR 900 | * 901 | *--set data (must be consistent with PARAMETER variables) 902 | * 903 | FND=1.E20 904 | *--FND is the number densty 905 | FTMP=300. 906 | *--FTMP is the temperature 907 | FSP(1)=.6 908 | FSP(2)=.2 909 | FSP(3)=.1 910 | FSP(4)=.08 911 | FSP(5)=.02 912 | *--FSP(N) is the number fraction of species N 913 | FNUM=1.0E17 914 | *--FNUM is the number of real molecules represented by a simulated mol. 915 | DTM=.25E-4 916 | *--DTM is the time step 917 | NSC=8 918 | *--NSC is the number of sub-cells in each cell 919 | XF=0. 920 | XR=1. 921 | *--the simulated region is from x=XF to x=XR 922 | ISPD=0 923 | *--the cross-collision data is set to the mean values 924 | SP(1,1)=3.5E-10 925 | SP(2,1)=273. 926 | SP(3,1)=0.75 927 | SP(4,1)=1. 928 | SP(5,1)=5.E-26 929 | ISP(1)=1 930 | SP(1,2)=4.E-10 931 | SP(2,2)=273. 932 | SP(3,2)=0.75 933 | SP(4,2)=1. 934 | SP(5,2)=4.5E-26 935 | ISP(2)=1 936 | SP(1,3)=3.E-10 937 | SP(2,3)=273. 938 | SP(3,3)=0.75 939 | SP(4,3)=1. 940 | SP(5,3)=2.5E-26 941 | ISP(3)=1 942 | SP(1,4)=3.E-10 943 | SP(2,4)=273. 944 | SP(3,4)=0.75 945 | SP(4,4)=1. 946 | SP(5,4)=2.E-26 947 | ISP(4)=1 948 | SP(1,5)=4.E-10 949 | SP(2,5)=273. 950 | SP(3,5)=0.75 951 | SP(4,5)=1. 952 | SP(5,5)=4.E-26 953 | ISP(5)=1 954 | *--SP(1,N) is the molecular diameter of species N 955 | *--SP(2,N) is the reference temperature 956 | *--SP(3,N) is the viscosity-temperatire index 957 | *--SP(4,N) is the reciprocal of the VSS scattering parameter 958 | *--SP(5,N) is the molecular mass of species N 959 | *--ISP(N) is the group for species N 960 | NIS=4 961 | *--NIS is the number of time steps between samples 962 | NSP=40 963 | *--NSP is the number of samples between restart and output file updates 964 | NPT=500 965 | *--NPT is the number of file updates to STOP 966 | * 967 | RETURN 968 | END 969 | -------------------------------------------------------------------------------- /originalbird/DSMC0R.FOR: -------------------------------------------------------------------------------- 1 | * DSMC0R.FOR 2 | * 3 | PROGRAM DSMC0R 4 | * 5 | *--test of rotational relaxation in a uniform gas. 6 | * 7 | *--SI units are used throughout 8 | * 9 | PARAMETER (MNM=100000,MNC=1,MNSC=1,MNSP=1,MNSG=1) 10 | * 11 | *--variables as defined in DSMC0.FOR 12 | * 13 | DOUBLE PRECISION COL(MNSP,MNSP),MOVT,NCOL,SELT,SEPT,CS(7,MNC,MNSP) 14 | * 15 | *--variables as defined in DSMC0.FOR 16 | * 17 | DOUBLE PRECISION CSR(MNC,MNSP) 18 | * 19 | * CSR(M,L) the sum of the rotational energy of species L in cell M 20 | * 21 | COMMON /MOLS / NM,PP(MNM),PV(3,MNM),IPL(MNM),IPS(MNM),IR(MNM) 22 | * 23 | *--variables as defined in DSMC0.FOR 24 | * 25 | COMMON /MOLSR / PR(MNM) 26 | * 27 | *--PR(M) is the rotational energy of molecule M 28 | * 29 | COMMON /CELLS / CC(MNC),CG(3,MNC),IC(2,MNC,MNSG),ISC(MNSC), 30 | & CCG(2,MNC,MNSG,MNSG),ISCG(2,MNSC,MNSG),IG(2,MNSG) 31 | * 32 | *--variables as defined in DSMC0.FOR 33 | * 34 | COMMON /GAS / SP(5,MNSP),SPM(6,MNSP,MNSP),ISP(MNSP) 35 | * 36 | *--variables as defined in DSMC0.FOR 37 | * 38 | COMMON /GASR / SPR(3,MNSP,MNSP),ISPR(3,MNSP),CT(MNC) 39 | * 40 | *--SPR(N,M,L) information on rotational relaxation properties of a 41 | *----species M molecule in a collision with a species L molecule 42 | *----N=1 the const. in the temperature polynomial for the collision numb 43 | *----N=2 the coefficient of T in this polynomial 44 | *----N=3 the coefficient of T**2 in this polynomial 45 | *--ISPR(N,M) integer information on rotational properties of species M 46 | *----N=1 the number of rotational degrees of freedom 47 | *----N=2 0, 1 for constant, polynomial for relaxation collision number 48 | *----N=3 0, 1 for a common, collision partner species dependent rate 49 | *--CT(M) the macroscopic temperature in cell M 50 | * 51 | COMMON /SAMP / COL,NCOL,MOVT,SELT,SEPT,CS,TIME,NPR,NSMP,FND,FTMP, 52 | & TIMI,FSP(MNSP),ISPD 53 | * 54 | *--variables as defined in DSMC0.FOR 55 | * 56 | COMMON /SAMPR / CSR 57 | * 58 | COMMON /SAMPD / CSDV(MNSP,400),CSDE(MNSP,400) 59 | *--CSDV samples the velocity distribution in 400 divisions 60 | *--CSDE samples the rotational energy distribution in 400 divisions 61 | * 62 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPS,NPT 63 | * 64 | *--variables as defined in DSMC0.FOR 65 | * 66 | COMMON /GEOM / CW,NSC,XF,XR 67 | * 68 | *--variables as defined in DSMC0.FOR 69 | * 70 | COMMON /CONST / PI,SPI,BOLTZ 71 | * 72 | *--variables as defined in DSMC0.FOR 73 | * 74 | WRITE (*,*) ' INPUT 0,1 FOR CONTINUING,NEW CALCULATION:- ' 75 | READ (*,*) NQL 76 | WRITE (*,*) ' INPUT 0,1 FOR CONTINUING,NEW SAMPLE:- ' 77 | READ (*,*) NQLS 78 | * 79 | IF (NQL.EQ.1) THEN 80 | * 81 | CALL INIT0R 82 | * 83 | ELSE 84 | * 85 | WRITE (*,*) ' READ THE RESTART FILE' 86 | OPEN (4,FILE='DSMC0R.RES',STATUS='OLD',FORM='UNFORMATTED') 87 | READ (4) BOLTZ,CC,CCG,CG,COL,CS,CSDV,CSDE,CSR,CT,CW,DTM,FNUM, 88 | & FTMP,IC,IPL,IPS,IR,ISC,ISCG,ISP,ISPR,MOVT,NCOL,NIS,NM, 89 | & NPS,NSC,NSMP,NPR,NPT,NSP,PI,PP,PR,PV,SELT,SEPT,SP,SPI, 90 | & SPM,SPR,TIME,TIMI,XF,XR 91 | CLOSE (4) 92 | * 93 | END IF 94 | * 95 | IF (NQLS.EQ.1) CALL SAMPI0R 96 | * 97 | 100 NPR=NPR+1 98 | * 99 | IF (NPR.LE.NPS) CALL SAMPI0R 100 | * 101 | DO 200 JJJ=1,NSP 102 | DO 150 III=1,NIS 103 | TIME=TIME+DTM 104 | * 105 | WRITE (*,99001) III,JJJ,NIS,NSP,NCOL 106 | 99001 FORMAT (' DSMC0R:- Move ',2I5,' of ',2I5,F14.0,' Collisions') 107 | * 108 | CALL MOVE0 109 | * 110 | CALL INDEXM 111 | * 112 | CALL COLLMR 113 | * 114 | 150 CONTINUE 115 | * 116 | CALL SAMPLE0R 117 | * 118 | 200 CONTINUE 119 | * 120 | WRITE (*,*) ' WRITING RESTART AND OUTPUT FILES',NPR,' OF ',NPT 121 | OPEN (4,FILE='DSMC0R.RES',FORM='UNFORMATTED') 122 | WRITE (4) BOLTZ,CC,CCG,CG,COL,CS,CSDV,CSDE,CSR,CT,CW,DTM,FNUM, 123 | & FTMP,IC,IPL,IPS,IR,ISC,ISCG,ISP,ISPR,MOVT,NCOL,NIS,NM, 124 | & NPS,NSC,NSMP,NPR,NPT,NSP,PI,PP,PR,PV,SELT,SEPT,SP,SPI, 125 | & SPM,SPR,TIME,TIMI,XF,XR 126 | CLOSE (4) 127 | * 128 | CALL OUT0R 129 | * 130 | IF (NPR.LT.NPT) GO TO 100 131 | STOP 132 | END 133 | * INIT0R.FOR 134 | * 135 | SUBROUTINE INIT0R 136 | * 137 | PARAMETER (MNM=100000,MNC=1,MNSC=1,MNSP=1,MNSG=1) 138 | * 139 | DOUBLE PRECISION COL(MNSP,MNSP),MOVT,NCOL,SELT,SEPT,CS(7,MNC,MNSP) 140 | DOUBLE PRECISION CSR(MNC,MNSP) 141 | 142 | * 143 | COMMON /MOLS / NM,PP(MNM),PV(3,MNM),IPL(MNM),IPS(MNM),IR(MNM) 144 | COMMON /MOLSR / PR(MNM) 145 | COMMON /CELLS / CC(MNC),CG(3,MNC),IC(2,MNC,MNSG),ISC(MNSC), 146 | & CCG(2,MNC,MNSG,MNSG),ISCG(2,MNSC,MNSG),IG(2,MNSG) 147 | COMMON /GAS / SP(5,MNSP),SPM(6,MNSP,MNSP),ISP(MNSP) 148 | COMMON /GASR / SPR(3,MNSP,MNSP),ISPR(3,MNSP),CT(MNC) 149 | COMMON /SAMP / COL,NCOL,MOVT,SELT,SEPT,CS,TIME,NPR,NSMP,FND,FTMP, 150 | & TIMI,FSP(MNSP),ISPD 151 | COMMON /SAMPR / CSR 152 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPS,NPT 153 | COMMON /GEOM / CW,NSC,XF,XR 154 | COMMON /CONST / PI,SPI,BOLTZ 155 | * 156 | *--set constants 157 | * 158 | PI=3.141592654 159 | SPI=SQRT(PI) 160 | BOLTZ=1.3806E-23 161 | * 162 | CALL DATA0R 163 | * 164 | *--set additional data on the gas 165 | * 166 | IF (MNSP.EQ.1) ISPD=0 167 | DO 100 N=1,MNSP 168 | DO 50 M=1,MNSP 169 | IF ((ISPR(3,N).EQ.0).AND.(M.NE.N)) THEN 170 | SPR(1,N,M)=SPR(1,N,N) 171 | SPR(2,N,M)=SPR(2,N,N) 172 | SPR(3,N,M)=SPR(3,N,N) 173 | END IF 174 | IF ((ISPD.EQ.0).OR.(N.EQ.M)) THEN 175 | SPM(1,N,M)=0.25*PI*(SP(1,N)+SP(1,M))**2 176 | *--the collision cross section is assumed to be given by eqn (1.35) 177 | SPM(2,N,M)=0.5*(SP(2,N)+SP(2,M)) 178 | SPM(3,N,M)=0.5*(SP(3,N)+SP(3,M)) 179 | SPM(4,N,M)=0.5*(SP(4,N)+SP(4,M)) 180 | *--mean values are used for ISPD=0 181 | ELSE 182 | SPM(1,N,M)=PI*SPM(1,N,M)**2 183 | *--the cross-collision diameter is converted to the cross-section 184 | END IF 185 | SPM(5,N,M)=(SP(5,N)/(SP(5,N)+SP(5,M)))*SP(5,M) 186 | *--the reduced mass is defined in eqn (2.7) 187 | SPM(6,N,M)=GAM(2.5-SPM(3,N,M)) 188 | 50 CONTINUE 189 | 100 CONTINUE 190 | * 191 | *--initialise variables 192 | * 193 | TIME=0. 194 | NM=0 195 | NPR=0 196 | NCOL=0 197 | MOVT=0. 198 | SELT=0. 199 | SEPT=0. 200 | * 201 | DO 200 M=1,MNSP 202 | DO 150 N=1,MNSP 203 | COL(M,N)=0. 204 | 150 CONTINUE 205 | 200 CONTINUE 206 | * 207 | CG(1,1)=XF 208 | CW=(XR-XF)/MNC 209 | DO 300 M=1,MNC 210 | CT(M)=FTMP 211 | *--the macroscopic temperature is set to the freestream temperature 212 | IF (M.GT.1) CG(1,M)=CG(2,M-1) 213 | CG(2,M)=CG(1,M)+CW 214 | CG(3,M)=CW 215 | CC(M)=CW 216 | DO 250 L=1,MNSG 217 | DO 220 K=1,MNSG 218 | CCG(2,M,L,K)=RF(0) 219 | CCG(1,M,L,K)=SPM(1,1,1)*300.*SQRT(FTMP/300.) 220 | 220 CONTINUE 221 | 250 CONTINUE 222 | *--the maximum value of the (rel. speed)*(cross-section) is set to a 223 | *--reasonable, but low, initial value and will be increased as necessary 224 | 300 CONTINUE 225 | * 226 | *--set sub-cells 227 | * 228 | DO 400 N=1,MNC 229 | DO 350 M=1,NSC 230 | L=(N-1)*NSC+M 231 | ISC(L)=N 232 | 350 CONTINUE 233 | 400 CONTINUE 234 | * 235 | *--generate initial gas with translational temperature FTMP, 236 | *--but with zero rotational temperature. 237 | * 238 | DO 500 L=1,MNSP 239 | REM=0 240 | VMP=SQRT(2.*BOLTZ*FTMP/SP(5,L)) 241 | *--VMP is the most probable speed in species L, see eqns (4.1) and (4.7) 242 | DO 450 N=1,MNC 243 | A=FND*CG(3,N)*FSP(L)/FNUM+REM 244 | *--A is the number of simulated molecules of species L in cell N to 245 | *--simulate the required concentrations at a total number density of FND 246 | IF (N.LT.MNC) THEN 247 | MM=A 248 | REM=(A-MM) 249 | *--the remainder REM is carried forward to the next cell 250 | ELSE 251 | MM=NINT(A) 252 | END IF 253 | DO 420 M=1,MM 254 | IF (NM.LE.MNM) THEN 255 | *--round-off error could have taken NM to MNM+1 256 | NM=NM+1 257 | IPS(NM)=L 258 | PP(NM)=CG(1,N)+RF(0)*(CG(2,N)-CG(1,N)) 259 | IPL(NM)=(PP(NM)-CG(1,N))*(NSC-.001)/CG(3,N)+1+NSC*(N-1) 260 | *--species, position, and sub-cell number have been set 261 | DO 405 K=1,3 262 | CALL RVELC(PV(K,NM),A,VMP) 263 | 405 CONTINUE 264 | *--velocity components have been set 265 | *--set the rotational energy 266 | *--the initial rotational energy is zero for the relaxation test 267 | IF (ISPR(1,L).GT.0) PR(NM)=0. 268 | END IF 269 | 420 CONTINUE 270 | 450 CONTINUE 271 | 500 CONTINUE 272 | WRITE (*,99001) NM 273 | 99001 FORMAT (' ',I6,' MOLECULES') 274 | * 275 | RETURN 276 | END 277 | * SAMPI0R.FOR 278 | * 279 | SUBROUTINE SAMPI0R 280 | * 281 | *--initialises all the sampling variables 282 | * 283 | PARAMETER (MNM=100000,MNC=1,MNSC=1,MNSP=1,MNSG=1) 284 | * 285 | DOUBLE PRECISION COL(MNSP,MNSP),MOVT,NCOL,SELT,SEPT,CS(7,MNC,MNSP) 286 | DOUBLE PRECISION CSR(MNC,MNSP) 287 | * 288 | COMMON /SAMP / COL,NCOL,MOVT,SELT,SEPT,CS,TIME,NPR,NSMP,FND,FTMP, 289 | & TIMI,FSP(MNSP),ISPD 290 | COMMON /SAMPR / CSR 291 | COMMON /SAMPD / CSDV(MNSP,400),CSDE(MNSP,400) 292 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPS,NPT 293 | * 294 | NSMP=0 295 | TIMI=TIME 296 | DO 100 L=1,MNSP 297 | DO 50 N=1,MNC 298 | CS(1,N,L)=1.E-6 299 | DO 20 M=2,7 300 | CS(M,N,L)=0. 301 | 20 CONTINUE 302 | CSR(N,L)=0. 303 | 50 CONTINUE 304 | IF (MNC.EQ.1) THEN 305 | DO 60 K=1,400 306 | CSDV(L,K)=0. 307 | CSDE(L,K)=0. 308 | 60 CONTINUE 309 | END IF 310 | 100 CONTINUE 311 | RETURN 312 | END 313 | * COLLMR.FOR 314 | * 315 | SUBROUTINE COLLMR 316 | * 317 | *--calculates collisions appropriate to DTM in a gas mixture 318 | * 319 | PARAMETER (MNM=100000,MNC=1,MNSC=1,MNSP=1,MNSG=1) 320 | * 321 | DOUBLE PRECISION COL(MNSP,MNSP),MOVT,NCOL,SELT,SEPT,CS(7,MNC,MNSP) 322 | DOUBLE PRECISION CSR(MNC,MNSP) 323 | * 324 | COMMON /MOLS / NM,PP(MNM),PV(3,MNM),IPL(MNM),IPS(MNM),IR(MNM) 325 | COMMON /MOLSR / PR(MNM) 326 | COMMON /CELLS / CC(MNC),CG(3,MNC),IC(2,MNC,MNSG),ISC(MNSC), 327 | & CCG(2,MNC,MNSG,MNSG),ISCG(2,MNSC,MNSG),IG(2,MNSG) 328 | COMMON /GAS / SP(5,MNSP),SPM(6,MNSP,MNSP),ISP(MNSP) 329 | COMMON /GASR / SPR(3,MNSP,MNSP),ISPR(3,MNSP),CT(MNC) 330 | COMMON /SAMP / COL,NCOL,MOVT,SELT,SEPT,CS,TIME,NPR,NSMP,FND,FTMP, 331 | & TIMI,FSP(MNSP),ISPD 332 | COMMON /SAMPR / CSR 333 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPS,NPT 334 | COMMON /CONST / PI,SPI,BOLTZ 335 | COMMON /ELAST / VRC(3),VRR,VR,L,M,LS,MS,CVR,MM,NN,N 336 | * 337 | *--VRC(3) are the pre-collision components of the relative velocity 338 | * 339 | DO 100 N=1,MNC 340 | *--consider collisions in cell N 341 | DO 50 NN=1,MNSG 342 | DO 20 MM=1,MNSG 343 | SN=0. 344 | DO 10 K=1,MNSP 345 | IF (ISP(K).EQ.MM) SN=SN+CS(1,N,K) 346 | 10 CONTINUE 347 | IF (SN.GT.1.) THEN 348 | AVN=SN/FLOAT(NSMP) 349 | ELSE 350 | AVN=IC(2,N,MM) 351 | END IF 352 | *--AVN is the average number of group MM molecules in the cell 353 | ASEL=0.5*IC(2,N,NN)*AVN*FNUM*CCG(1,N,NN,MM)*DTM/CC(N) 354 | & +CCG(2,N,NN,MM) 355 | *--ASEL is the number of pairs to be selected, see eqn (11.5) 356 | NSEL=ASEL 357 | CCG(2,N,NN,MM)=ASEL-NSEL 358 | IF (NSEL.GT.0) THEN 359 | IF (((NN.NE.MM).AND.(IC(2,N,NN).LT.1.OR.IC(2,N,MM).LT.1)) 360 | & .OR.((NN.EQ.MM).AND.(IC(2,N,NN).LT.2))) THEN 361 | CCG(2,N,NN,MM)=CCG(2,N,NN,MM)+NSEL 362 | *--if there are insufficient molecules to calculate collisions, 363 | *--the number NSEL is added to the remainer CCG(2,N,NN,MM) 364 | ELSE 365 | CVM=CCG(1,N,NN,MM) 366 | SELT=SELT+NSEL 367 | DO 12 ISEL=1,NSEL 368 | * 369 | CALL SELECT 370 | * 371 | IF (CVR.GT.CVM) CVM=CVR 372 | *--if necessary, the maximum product in CVM is upgraded 373 | IF (RF(0).LT.CVR/CCG(1,N,NN,MM)) THEN 374 | *--the collision is accepted with the probability of eqn (11.6) 375 | NCOL=NCOL+1 376 | SEPT=SEPT+ABS(PP(L)-PP(M)) 377 | COL(LS,MS)=COL(LS,MS)+1.D00 378 | COL(MS,LS)=COL(MS,LS)+1.D00 379 | * 380 | IF (ISPR(1,LS).GT.0.OR.ISPR(1,MS).GT.0) CALL INELRS 381 | *--bypass rotational redistribution if both molecules are monatomic 382 | *--note the three options for the selection of rotational energy 383 | *----INELR the hierarchical application of the Larsen-Borgnakke method 384 | *----INELRS the serial application of the Larsen-Borgnakke method 385 | *----INELRA the serial application of the alternative L-B method 386 | * 387 | CALL ELASTIC 388 | * 389 | END IF 390 | 12 CONTINUE 391 | CCG(1,N,NN,MM)=CVM 392 | END IF 393 | END IF 394 | 20 CONTINUE 395 | 50 CONTINUE 396 | 100 CONTINUE 397 | RETURN 398 | END 399 | * INELR.FOR 400 | * 401 | SUBROUTINE INELR 402 | * 403 | *--adjustment of rotational energy in a collision 404 | * 405 | PARAMETER (MNM=100000,MNC=1,MNSC=1,MNSP=1,MNSG=1) 406 | * 407 | COMMON /MOLSR / PR(MNM) 408 | COMMON /GAS / SP(5,MNSP),SPM(6,MNSP,MNSP),ISP(MNSP) 409 | COMMON /GASR / SPR(3,MNSP,MNSP),ISPR(3,MNSP),CT(MNC) 410 | COMMON /ELAST / VRC(3),VRR,VR,L,M,LS,MS,CVR,MM,NN,N 411 | * 412 | DIMENSION IR(2) 413 | *--IR is the indicator for the rotational redistribution 414 | ETI=0.5*SPM(5,LS,MS)*VRR 415 | *--ETI is the initial translational energy 416 | ECI=0. 417 | *--ECI is the initial energy in the active rotational modes 418 | ECF=0. 419 | *--ECF is the final energy in these modes 420 | ECC=ETI 421 | *--ECC is the energy to be divided 422 | XIB=2.5-SPM(3,LS,MS) 423 | *--XIB is th number of modes in the redistribution 424 | IRT=0 425 | *--IRT is 0,1 if no,any redistribution is made 426 | DO 100 NSP=1,2 427 | *--consider the molecules in turn 428 | IF (NSP.EQ.1) THEN 429 | K=L 430 | KS=LS 431 | JS=MS 432 | ELSE 433 | K=M 434 | KS=MS 435 | JS=LS 436 | END IF 437 | IR(NSP)=0 438 | IF (ISPR(1,KS).GT.0) THEN 439 | IF (ISPR(2,KS).EQ.0) THEN 440 | ATK=1./SPR(1,KS,JS) 441 | ELSE 442 | ATK=1./(SPR(1,KS,JS)+SPR(2,KS,JS)*CT(N)+SPR(3,KS,JS)*CT(N) 443 | & **2) 444 | END IF 445 | *--ATK is the probability that rotation is redistributed to molecule L 446 | IF (ATK.GT.RF(0)) THEN 447 | IRT=1 448 | IR(NSP)=1 449 | ECC=ECC+PR(K) 450 | ECI=ECI+PR(K) 451 | XIB=XIB+0.5*ISPR(1,KS) 452 | END IF 453 | END IF 454 | 100 CONTINUE 455 | *--apply the general Larsen-Borgnakke distribution function 456 | IF (IRT.EQ.1) THEN 457 | DO 150 NSP=1,2 458 | IF (IR(NSP).EQ.1) THEN 459 | IF (NSP.EQ.1) THEN 460 | K=L 461 | KS=LS 462 | ELSE 463 | K=M 464 | KS=MS 465 | END IF 466 | XIB=XIB-0.5*ISPR(1,KS) 467 | *--the current molecule is removed from the total modes 468 | IF (ISPR(1,KS).EQ.2) THEN 469 | ERM=1.-RF(0)**(1./XIB) 470 | ELSE 471 | XIA=0.5*ISPR(1,KS) 472 | CALL LBS(XIA-1.,XIB-1.,ERM) 473 | END IF 474 | PR(K)=ERM*ECC 475 | ECC=ECC-PR(K) 476 | *--the available energy is reduced accordingly 477 | ECF=ECF+PR(K) 478 | END IF 479 | 150 CONTINUE 480 | ETF=ETI+ECI-ECF 481 | *--ETF is the post-collision translational energy 482 | *--adjust VR and, for the VSS model, VRC for the change in energy 483 | A=SQRT(2.*ETF/SPM(5,LS,MS)) 484 | IF (ABS(SPM(4,LS,MS)-1.).LT.1.E-3) THEN 485 | VR=A 486 | ELSE 487 | DO 160 K=1,3 488 | VRC(K)=VRC(K)*A/VR 489 | 160 CONTINUE 490 | VR=A 491 | END IF 492 | END IF 493 | RETURN 494 | END 495 | * INELRS.FOR 496 | * 497 | SUBROUTINE INELRS 498 | * 499 | *--adjustment of rotational energy in a collision 500 | *--alternative version with serial application of L-B method 501 | * 502 | PARAMETER (MNM=100000,MNC=1,MNSC=1,MNSP=1,MNSG=1) 503 | * 504 | COMMON /MOLSR / PR(MNM) 505 | COMMON /GAS / SP(5,MNSP),SPM(6,MNSP,MNSP),ISP(MNSP) 506 | COMMON /GASR / SPR(3,MNSP,MNSP),ISPR(3,MNSP),CT(MNC) 507 | COMMON /ELAST / VRC(3),VRR,VR,L,M,LS,MS,CVR,MM,NN,N 508 | * 509 | ETI=0.5*SPM(5,LS,MS)*VRR 510 | *--ETI is the initial translational energy 511 | XIB=2.5-SPM(3,LS,MS) 512 | *--XIB is the number of translational modes in the redistribution 513 | IRT=0 514 | *--IRT remains zero if there is no redistribution 515 | DO 100 NSP=1,2 516 | *--consider the molecules in turn for serial redistribution 517 | IF (NSP.EQ.1) THEN 518 | K=L 519 | KS=LS 520 | JS=MS 521 | ELSE 522 | K=M 523 | KS=MS 524 | JS=LS 525 | END IF 526 | IF (ISPR(1,KS).GT.0) THEN 527 | IF (ISPR(2,KS).EQ.0) THEN 528 | ATK=1./SPR(1,KS,JS) 529 | ELSE 530 | ATK=1./(SPR(1,KS,JS)+SPR(2,KS,JS)*CT(N)+SPR(3,KS,JS)*CT(N) 531 | & **2) 532 | END IF 533 | *--ATK is the probability that rotation is redistributed to molecule L 534 | IF (ATK.GT.RF(0)) THEN 535 | IRT=1 536 | ECC=ETI+PR(K) 537 | ECI=PR(K) 538 | *--apply the general Larsen-Borgnakke distribution function 539 | IF (ISPR(1,KS).EQ.2) THEN 540 | ERM=1.-RF(0)**(1./XIB) 541 | ELSE 542 | XIA=0.5*ISPR(1,KS) 543 | CALL LBS(XIA-1.,XIB-1.,ERM) 544 | END IF 545 | PR(K)=ERM*ECC 546 | ETI=ETI+ECI-PR(K) 547 | END IF 548 | END IF 549 | 100 CONTINUE 550 | IF (IRT.EQ.1) THEN 551 | *--adjust VR and, for the VSS model, VRC for the change in energy 552 | A=SQRT(2.*ETI/SPM(5,LS,MS)) 553 | IF (ABS(SPM(4,LS,MS)-1.).LT.1.E-3) THEN 554 | VR=A 555 | ELSE 556 | DO 120 K=1,3 557 | VRC(K)=VRC(K)*A/VR 558 | 120 CONTINUE 559 | VR=A 560 | END IF 561 | END IF 562 | RETURN 563 | END 564 | * INELRA.FOR 565 | * 566 | SUBROUTINE INELRA 567 | * 568 | *--adjustment of rotational energy in a collision 569 | *--alternative version with serial application of L-B method 570 | *--and with fractional adjustment (Larsen-Borgnakke second option) 571 | *----this option is for demonstration only and it is not recommended 572 | * 573 | PARAMETER (MNM=100000,MNC=1,MNSC=1,MNSP=1,MNSG=1) 574 | * 575 | COMMON /MOLSR / PR(MNM) 576 | COMMON /GAS / SP(5,MNSP),SPM(6,MNSP,MNSP),ISP(MNSP) 577 | COMMON /GASR / SPR(3,MNSP,MNSP),ISPR(3,MNSP),CT(MNC) 578 | COMMON /ELAST / VRC(3),VRR,VR,L,M,LS,MS,CVR,MM,NN,N 579 | * 580 | ETI=0.5*SPM(5,LS,MS)*VRR 581 | *--ETI is the initial translational energy 582 | XIB=2.5-SPM(3,LS,MS) 583 | *--XIB is the number of translational modes in the redistribution 584 | IRT=0 585 | *--IRT remains zero if there is no redistribution 586 | DO 100 NSP=1,2 587 | *--consider the molecules in turn for serial redistribution 588 | IF (NSP.EQ.1) THEN 589 | K=L 590 | KS=LS 591 | JS=MS 592 | ELSE 593 | K=M 594 | KS=MS 595 | JS=LS 596 | END IF 597 | IF (ISPR(1,KS).GT.0) THEN 598 | IF (ISPR(2,KS).EQ.0) THEN 599 | ATK=1./SPR(1,KS,JS) 600 | ELSE 601 | ATK=1./(SPR(1,KS,JS)+SPR(2,KS,JS)*CT(N)+SPR(3,KS,JS)*CT(N) 602 | & **2) 603 | END IF 604 | *--ATK is the fraction of rotation that is redistributed to molecule L 605 | IRT=1 606 | ECC=ETI+PR(K) 607 | ECI=PR(K) 608 | *--apply the general Larsen-Borgnakke distribution function 609 | IF (ISPR(1,KS).EQ.2) THEN 610 | ERM=1.-RF(0)**(1./XIB) 611 | ELSE 612 | XIA=0.5*ISPR(1,KS) 613 | CALL LBS(XIA-1.,XIB-1.,ERM) 614 | END IF 615 | PR(K)=PR(K)+(ERM*ECC-PR(K))*ATK 616 | ETI=ETI+ECI-PR(K) 617 | END IF 618 | 100 CONTINUE 619 | IF (IRT.EQ.1) THEN 620 | *--adjust VR and, for the VSS model, VRC for the change in energy 621 | A=SQRT(2.*ETI/SPM(5,LS,MS)) 622 | IF (ABS(SPM(4,LS,MS)-1.).LT.1.E-3) THEN 623 | VR=A 624 | ELSE 625 | DO 120 K=1,3 626 | VRC(K)=VRC(K)*A/VR 627 | 120 CONTINUE 628 | VR=A 629 | END IF 630 | END IF 631 | RETURN 632 | END 633 | * LBS.FOR 634 | * 635 | SUBROUTINE LBS(XMA,XMB,ERM) 636 | *--selects a Larsen-Borgnakke energy ratio using eqn (11.9) 637 | 100 ERM=RF(0) 638 | IF (XMA.LT.1.E-6.OR.XMB.LT.1.E-6) THEN 639 | IF (XMA.LT.1.E-6.AND.XMB.LT.1.E-6) RETURN 640 | IF (XMA.LT.1.E-6) P=(1.-ERM)**XMB 641 | IF (XMB.LT.1.E-6) P=(1.-ERM)**XMA 642 | ELSE 643 | P=(((XMA+XMB)*ERM/XMA)**XMA)*(((XMA+XMB)*(1.-ERM)/XMB)**XMB) 644 | END IF 645 | IF (P.LT.RF(0)) GO TO 100 646 | RETURN 647 | END 648 | * SAMPLE0R.FOR 649 | * 650 | SUBROUTINE SAMPLE0R 651 | * 652 | *--sample the molecules in the flow. 653 | * 654 | PARAMETER (MNM=100000,MNC=1,MNSC=1,MNSP=1,MNSG=1) 655 | * 656 | DOUBLE PRECISION COL(MNSP,MNSP),MOVT,NCOL,SELT,SEPT,CS(7,MNC,MNSP) 657 | DOUBLE PRECISION CSR(MNC,MNSP) 658 | * 659 | COMMON /MOLS / NM,PP(MNM),PV(3,MNM),IPL(MNM),IPS(MNM),IR(MNM) 660 | COMMON /MOLSR / PR(MNM) 661 | COMMON /CELLS / CC(MNC),CG(3,MNC),IC(2,MNC,MNSG),ISC(MNSC), 662 | & CCG(2,MNC,MNSG,MNSG),ISCG(2,MNSC,MNSG),IG(2,MNSG) 663 | COMMON /SAMP / COL,NCOL,MOVT,SELT,SEPT,CS,TIME,NPR,NSMP,FND,FTMP, 664 | & TIMI,FSP(MNSP),ISPD 665 | COMMON /SAMPR / CSR 666 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPS,NPT 667 | * 668 | NSMP=NSMP+1 669 | DO 100 NN=1,MNSG 670 | DO 50 N=1,MNC 671 | L=IC(2,N,NN) 672 | IF (L.GT.0) THEN 673 | DO 10 J=1,L 674 | K=IC(1,N,NN)+J 675 | M=IR(K) 676 | I=IPS(M) 677 | CS(1,N,I)=CS(1,N,I)+1 678 | DO 5 LL=1,3 679 | CS(LL+1,N,I)=CS(LL+1,N,I)+PV(LL,M) 680 | CS(LL+4,N,I)=CS(LL+4,N,I)+PV(LL,M)**2 681 | 5 CONTINUE 682 | CSR(N,I)=CSR(N,I)+PR(M) 683 | 10 CONTINUE 684 | END IF 685 | 50 CONTINUE 686 | 100 CONTINUE 687 | RETURN 688 | END 689 | * OUT0R.FOR 690 | * 691 | SUBROUTINE OUT0R 692 | * 693 | *--output a progressive set of results to file DSMC0R.OUT. 694 | * 695 | PARAMETER (MNM=100000,MNC=1,MNSC=1,MNSP=1,MNSG=1) 696 | * 697 | DOUBLE PRECISION COL(MNSP,MNSP),MOVT,NCOL,SELT,SEPT,CS(7,MNC,MNSP) 698 | DOUBLE PRECISION CSR(MNC,MNSP) 699 | * 700 | COMMON /MOLS / NM,PP(MNM),PV(3,MNM),IPL(MNM),IPS(MNM),IR(MNM) 701 | COMMON /MOLSR / PR(MNM) 702 | COMMON /CELLS / CC(MNC),CG(3,MNC),IC(2,MNC,MNSG),ISC(MNSC), 703 | & CCG(2,MNC,MNSG,MNSG),ISCG(2,MNSC,MNSG),IG(2,MNSG) 704 | COMMON /GAS / SP(5,MNSP),SPM(6,MNSP,MNSP),ISP(MNSP) 705 | COMMON /GASR / SPR(3,MNSP,MNSP),ISPR(3,MNSP),CT(MNC) 706 | COMMON /SAMP / COL,NCOL,MOVT,SELT,SEPT,CS,TIME,NPR,NSMP,FND,FTMP, 707 | & TIMI,FSP(MNSP),ISPD 708 | COMMON /SAMPR / CSR 709 | COMMON /SAMPD / CSDV(MNSP,400),CSDE(MNSP,400) 710 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPS,NPT 711 | COMMON /CONST / PI,SPI,BOLTZ 712 | * 713 | DOUBLE PRECISION VEL(3),SMU(3),SVEL(3,MNC),SN,SM,SMCC,SRDF,SRE,TT, 714 | & TROT,DBOLTZ 715 | DBOLTZ=BOLTZ 716 | * 717 | OPEN (4,FILE='DSMC0R.OUT',FORM='FORMATTED') 718 | OPEN (3,FILE='RELAX.OUT',FORM='FORMATTED',ACCESS='DIRECT',RECL=80) 719 | * 720 | WRITE (4,*) ' FLOW SAMPLED FROM TIME ',TIMI,' TO TIME ',TIME 721 | WRITE (4,*) ' COLLISIONS:-' 722 | WRITE (4,99001) ((COL(M,L),M=1,MNSP),L=1,MNSP) 723 | 99001 FORMAT (5F12.0) 724 | WRITE (4,*) ' TOTAL NUMBER OF SAMPLES ',NSMP 725 | WRITE (4,*) NM,' MOLECULES' 726 | WRITE (4,*) MOVT,' TOTAL MOLECULAR MOVES' 727 | WRITE (4,*) INT(SELT),' SELECTIONS ',INT(NCOL), 728 | & ' COLLISION EVENTS, RATIO ',REAL(NCOL/SELT) 729 | IF (NCOL.GT.0) WRITE (4,*) ' MEAN COLLISION SEPARATION ', 730 | & REAL(SEPT/NCOL) 731 | WRITE (4,*) 'SAMPLES' 732 | WRITE (4,*) ' CELL N SP 1 N SP 2 ETC ' 733 | DO 100 N=1,MNC 734 | WRITE (4,99002) N,(CS(1,N,L),L=1,MNSP) 735 | 100 CONTINUE 736 | 99002 FORMAT (' ',I6,5F9.0) 737 | * 738 | WRITE (4,*) ' FLOWFIELD PROPERTIES' 739 | WRITE (4,*) 740 | &' CELL X COORD DENSITY TR TEMP ROT TEMP OV TEMP U V 741 | & W ' 742 | *--first the mixture properties 743 | DO 300 N=1,MNC 744 | A=FNUM/(CG(3,N)*NSMP) 745 | SN=0. 746 | SM=0. 747 | DO 150 K=1,3 748 | SMU(K)=0. 749 | 150 CONTINUE 750 | SMCC=0. 751 | SRE=0. 752 | SRDF=0. 753 | DO 200 L=1,MNSP 754 | SN=SN+CS(1,N,L) 755 | *--SN is the number sum 756 | SM=SM+SP(5,L)*CS(1,N,L) 757 | *--SM is the sum of molecular masses 758 | DO 160 K=1,3 759 | SMU(K)=SMU(K)+SP(5,L)*CS(K+1,N,L) 760 | *--SMU(1 to 3) are the sum of mu, mv, mw 761 | 160 CONTINUE 762 | SMCC=SMCC+(CS(5,N,L)+CS(6,N,L)+CS(7,N,L))*SP(5,L) 763 | *--SMCC is the sum of m(u**2+v**2+w**2) 764 | SRE=SRE+CSR(N,L) 765 | *--SRE is the sum of rotational energy 766 | SRDF=SRDF+ISPR(1,L)*CS(1,N,L) 767 | *--SRDF is the sum of the rotational degrees of freedom 768 | 200 CONTINUE 769 | DENN=SN*A 770 | *--DENN is the number density, see eqn (1.34) 771 | DEN=DENN*SM/SN 772 | *--DEN is the density, see eqn (1.42) 773 | DO 250 K=1,3 774 | VEL(K)=SMU(K)/SM 775 | SVEL(K,N)=VEL(K) 776 | 250 CONTINUE 777 | *--VEL and SVEL are the stream velocity components, see eqn (1.43) 778 | UU=VEL(1)**2+VEL(2)**2+VEL(3)**2 779 | TT=(SMCC-SM*UU)/(3.D00*DBOLTZ*SN) 780 | *--TT is the translational temperature, see eqn (1.51) 781 | TROT=(2.D00/DBOLTZ)*SRE/SRDF 782 | *--TROT is the rotational temperature, see eqn (11.11) 783 | TEMP=(3.D00*TT+(SRDF/SN)*TROT)/(3.+SRDF/SN) 784 | *--TEMP is the overall temperature, see eqn (11.12) 785 | CT(N)=TEMP 786 | XC=0.5*(CG(1,N)+CG(2,N)) 787 | *--XC is the x coordinate of the midpoint of the cell 788 | WRITE (4,99003) N,XC,DEN,TT,TROT,TEMP,VEL(1),VEL(2),VEL(3) 789 | 99003 FORMAT (' ',I5,F10.4,1P,E12.4,0P,6F10.4) 790 | 300 CONTINUE 791 | * 792 | WRITE (4,*) 793 | DO 500 L=1,MNSP 794 | *--now the properties of the separate species 795 | WRITE (4,*) ' SPECIES ',L 796 | WRITE (4,*) 797 | &' CELL X COORD N DENS DENSITY TR TEMP ROT TEMP U DIF 798 | & VEL V DIF VEL W DIF VEL ' 799 | DO 400 N=1,MNC 800 | A=FNUM/(CG(3,N)*NSMP) 801 | DENN=CS(1,N,L)*A 802 | *--DENN is the partial number density 803 | DEN=SP(5,L)*DENN 804 | *--DEN is the partial density, see eqn (1.13) 805 | DO 320 K=1,3 806 | VEL(K)=CS(K+1,N,L)/CS(1,N,L) 807 | *--VEL defines the average velocity of the species L molecules 808 | 320 CONTINUE 809 | UU=VEL(1)**2+VEL(2)**2+VEL(3)**2 810 | TT=(SP(5,L)/(3.D00*DBOLTZ)) 811 | & *((CS(5,N,L)+CS(6,N,L)+CS(7,N,L))/CS(1,N,L)-UU) 812 | *--TT is the translational temperature, see eqn (1.29) 813 | IF (ISPR(1,L).GT.0) THEN 814 | TROT=2.D00*CSR(N,L)/(ISPR(1,L)*DBOLTZ*CS(1,N,L)) 815 | ELSE 816 | TROT=0. 817 | END IF 818 | *--TROT is the rotational temperature, see eqn (11.10) 819 | DO 340 K=1,3 820 | VEL(K)=VEL(K)-SVEL(K,N) 821 | *--VEL now defines the diffusion velocity of species L, see eqn (1.45) 822 | 340 CONTINUE 823 | XC=0.5*(CG(1,N)+CG(2,N)) 824 | WRITE (4,99004) N,XC,DENN,DEN,TT,TROT,VEL(1),VEL(2),VEL(3) 825 | 99004 FORMAT (' ',I5,F9.4,1P,2E12.4,0P,5F10.4) 826 | *--output the relaxation information 827 | IF (NPR.LE.NPS) THEN 828 | CRATE=0. 829 | DO 350 M=1,MNSP 830 | CRATE=CRATE+COL(L,M)*NSMP/CS(1,N,L) 831 | 350 CONTINUE 832 | WRITE (3,99005,REC=MNSP*(NPR-1)+L) L,CRATE,TT,TROT 833 | 99005 FORMAT (' REC ',I3,3E14.5) 834 | END IF 835 | 400 CONTINUE 836 | 500 CONTINUE 837 | * 838 | IF (MNC.EQ.1) THEN 839 | *--output the molecular distribution function 840 | WRITE (4,*) 841 | WRITE (4,*) 842 | & ' V/VM f(V/VM) Er/kT f(Er/kT)' 843 | DO 550 K=1,MNSP 844 | DKT=0.025*BOLTZ*CT(1) 845 | DVMP=0.01*SQRT(2.*BOLTZ*CT(1)/SP(5,K)) 846 | *--DKT and DVMP are the steps in kT and most probable speed 847 | DO 520 N=1,NM 848 | KK=IPS(N) 849 | IF (KK.EQ.K) THEN 850 | M=SQRT(PV(1,N)**2+PV(2,N)**2+PV(3,N)**2)/DVMP+1 851 | IF (M.LE.400) CSDV(K,M)=CSDV(K,M)+1. 852 | M=PR(N)/DKT+1 853 | IF (M.LE.400) CSDE(K,M)=CSDE(K,M)+1. 854 | END IF 855 | 520 CONTINUE 856 | DO 540 M=1,400 857 | WRITE (4,99006) M*.01,CSDV(K,M)*NSP/(CS(1,1,K)*.01),M*0.025, 858 | & CSDE(K,M)*NSP/(CS(1,1,K)*0.025) 859 | 540 CONTINUE 860 | 99006 FORMAT (' ',4E13.5) 861 | 550 CONTINUE 862 | END IF 863 | * 864 | CLOSE (3) 865 | CLOSE (4) 866 | * 867 | *--check the total energy 868 | TOTE=0. 869 | DO 600 N=1,NM 870 | L=IPS(N) 871 | TOTE=TOTE+0.5*SP(5,L)*(PV(1,N)**2+PV(2,N)**2+PV(3,N)**2) 872 | TOTE=TOTE+PR(N) 873 | 600 CONTINUE 874 | WRITE (*,*) ' TOTAL ENERGY = ',TOTE 875 | * 876 | RETURN 877 | END 878 | * MOVE0.FOR 879 | * 880 | SUBROUTINE MOVE0 881 | * 882 | *--the NM molecules are moved over the time interval DTM 883 | * 884 | PARAMETER (MNM=100000,MNC=1,MNSC=1,MNSP=1,MNSG=1) 885 | * 886 | DOUBLE PRECISION COL(MNSP,MNSP),MOVT,NCOL,SELT,SEPT,CS(7,MNC,MNSP) 887 | * 888 | COMMON /MOLS / NM,PP(MNM),PV(3,MNM),IPL(MNM),IPS(MNM),IR(MNM) 889 | COMMON /CELLS / CC(MNC),CG(3,MNC),IC(2,MNC,MNSG),ISC(MNSC), 890 | & CCG(2,MNC,MNSG,MNSG),ISCG(2,MNSC,MNSG),IG(2,MNSG) 891 | COMMON /SAMP / COL,NCOL,MOVT,SELT,SEPT,CS,TIME,NPR,NSMP,FND,FTMP, 892 | & TIMI,FSP(MNSP),ISPD 893 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPS,NPT 894 | COMMON /GEOM / CW,NSC,XF,XR 895 | * 896 | DO 100 N=1,NM 897 | MOVT=MOVT+1 898 | MSC=IPL(N) 899 | MC=ISC(MSC) 900 | *--MC is the initial cell number 901 | XI=PP(N) 902 | DX=PV(1,N)*DTM 903 | X=XI+DX 904 | *--molecule N at XI is moved by DX to X 905 | IF (X.LT.XF) THEN 906 | *--specular reflection from the minimum x boundary at x=XF (eqn (11.7)) 907 | X=2.*XF-X 908 | PV(1,N)=-PV(1,N) 909 | END IF 910 | IF (X.GT.XR) THEN 911 | *--specular reflection from the maximum x boundary at x=XR (eqn (11.7)) 912 | X=2.*XR-X 913 | PV(1,N)=-PV(1,N) 914 | END IF 915 | IF (X.LT.CG(1,MC).OR.X.GT.CG(2,MC)) THEN 916 | *--the molecule has moved from the initial cell 917 | MC=(X-XF)/CW+0.99999 918 | IF (MC.EQ.0) MC=1 919 | *--MC is the new cell number (note avoidance of round-off error) 920 | END IF 921 | MSC=((X-CG(1,MC))/CG(3,MC))*(NSC-.001)+1+NSC*(MC-1) 922 | *--MSC is the new sub-cell number 923 | IPL(N)=MSC 924 | PP(N)=X 925 | 100 CONTINUE 926 | RETURN 927 | END 928 | * INDEXM.FOR 929 | * 930 | SUBROUTINE INDEXM 931 | * 932 | *--the NM molecule numbers are arranged in order of the molecule groups 933 | *--and, within the groups, in order of the cells and, within the cells, 934 | *--in order of the sub-cells 935 | * 936 | PARAMETER (MNM=100000,MNC=1,MNSC=1,MNSP=1,MNSG=1) 937 | * 938 | COMMON /MOLS / NM,PP(MNM),PV(3,MNM),IPL(MNM),IPS(MNM),IR(MNM) 939 | COMMON /CELLS / CC(MNC),CG(3,MNC),IC(2,MNC,MNSG),ISC(MNSC), 940 | & CCG(2,MNC,MNSG,MNSG),ISCG(2,MNSC,MNSG),IG(2,MNSG) 941 | COMMON /GAS / SP(5,MNSP),SPM(6,MNSP,MNSP),ISP(MNSP) 942 | * 943 | DO 200 MM=1,MNSG 944 | IG(2,MM)=0 945 | DO 50 NN=1,MNC 946 | IC(2,NN,MM)=0 947 | 50 CONTINUE 948 | DO 100 NN=1,MNSC 949 | ISCG(2,NN,MM)=0 950 | 100 CONTINUE 951 | 200 CONTINUE 952 | DO 300 N=1,NM 953 | LS=IPS(N) 954 | MG=ISP(LS) 955 | IG(2,MG)=IG(2,MG)+1 956 | MSC=IPL(N) 957 | ISCG(2,MSC,MG)=ISCG(2,MSC,MG)+1 958 | MC=ISC(MSC) 959 | IC(2,MC,MG)=IC(2,MC,MG)+1 960 | 300 CONTINUE 961 | *--number in molecule groups in the cells and sub-cells have been counte 962 | M=0 963 | DO 400 L=1,MNSG 964 | IG(1,L)=M 965 | *--the (start address -1) has been set for the groups 966 | M=M+IG(2,L) 967 | 400 CONTINUE 968 | DO 600 L=1,MNSG 969 | M=IG(1,L) 970 | DO 450 N=1,MNC 971 | IC(1,N,L)=M 972 | M=M+IC(2,N,L) 973 | 450 CONTINUE 974 | *--the (start address -1) has been set for the cells 975 | M=IG(1,L) 976 | DO 500 N=1,MNSC 977 | ISCG(1,N,L)=M 978 | M=M+ISCG(2,N,L) 979 | ISCG(2,N,L)=0 980 | 500 CONTINUE 981 | 600 CONTINUE 982 | *--the (start address -1) has been set for the sub-cells 983 | 984 | DO 700 N=1,NM 985 | LS=IPS(N) 986 | MG=ISP(LS) 987 | MSC=IPL(N) 988 | ISCG(2,MSC,MG)=ISCG(2,MSC,MG)+1 989 | K=ISCG(1,MSC,MG)+ISCG(2,MSC,MG) 990 | IR(K)=N 991 | *--the molecule number N has been set in the cross-reference array 992 | 700 CONTINUE 993 | RETURN 994 | END 995 | * SELECT.FOR 996 | * 997 | SUBROUTINE SELECT 998 | *--selects a potential collision pair and calculates the product of the 999 | *--collision cross-section and relative speed 1000 | * 1001 | PARAMETER (MNM=100000,MNC=1,MNSC=1,MNSP=1,MNSG=1) 1002 | * 1003 | COMMON /MOLS / NM,PP(MNM),PV(3,MNM),IPL(MNM),IPS(MNM),IR(MNM) 1004 | COMMON /CELLS / CC(MNC),CG(3,MNC),IC(2,MNC,MNSG),ISC(MNSC), 1005 | & CCG(2,MNC,MNSG,MNSG),ISCG(2,MNSC,MNSG),IG(2,MNSG) 1006 | COMMON /GAS / SP(5,MNSP),SPM(6,MNSP,MNSP),ISP(MNSP) 1007 | COMMON /CONST / PI,SPI,BOLTZ 1008 | COMMON /ELAST / VRC(3),VRR,VR,L,M,LS,MS,CVR,MM,NN,N 1009 | * 1010 | K=INT(RF(0)*(IC(2,N,NN)-0.0001))+IC(1,N,NN)+1 1011 | L=IR(K) 1012 | *--the first molecule L has been chosen at random from group NN in cell 1013 | 100 MSC=IPL(L) 1014 | IF ((NN.EQ.MM.AND.ISCG(2,MSC,MM).EQ.1).OR. 1015 | & (NN.NE.MM.AND.ISCG(2,MSC,MM).EQ.0)) THEN 1016 | *--if MSC has no type MM molecule find the nearest sub-cell with one 1017 | NST=1 1018 | NSG=1 1019 | 150 INC=NSG*NST 1020 | NSG=-NSG 1021 | NST=NST+1 1022 | MSC=MSC+INC 1023 | IF (MSC.LT.1.OR.MSC.GT.MNSC) GO TO 150 1024 | IF (ISC(MSC).NE.N.OR.ISCG(2,MSC,MM).LT.1) GO TO 150 1025 | END IF 1026 | *--the second molecule M is now chosen at random from the group MM 1027 | *--molecules that are in the sub-cell MSC 1028 | K=INT(RF(0)*(ISCG(2,MSC,MM)-0.0001))+ISCG(1,MSC,MM)+1 1029 | M=IR(K) 1030 | IF (L.EQ.M) GO TO 100 1031 | *--choose a new second molecule if the first is again chosen 1032 | * 1033 | DO 200 K=1,3 1034 | VRC(K)=PV(K,L)-PV(K,M) 1035 | 200 CONTINUE 1036 | *--VRC(1 to 3) are the components of the relative velocity 1037 | VRR=VRC(1)**2+VRC(2)**2+VRC(3)**2 1038 | VR=SQRT(VRR) 1039 | *--VR is the relative speed 1040 | LS=IPS(L) 1041 | MS=IPS(M) 1042 | CVR=VR*SPM(1,LS,MS)*((2.*BOLTZ*SPM(2,LS,MS)/(SPM(5,LS,MS)*VRR)) 1043 | & **(SPM(3,LS,MS)-0.5))/SPM(6,LS,MS) 1044 | *--the collision cross-section is based on eqn (4.63) 1045 | RETURN 1046 | END 1047 | * ELASTIC.FOR 1048 | * 1049 | SUBROUTINE ELASTIC 1050 | * 1051 | *--generate the post-collision velocity components. 1052 | * 1053 | PARAMETER (MNM=100000,MNC=1,MNSC=1,MNSP=1,MNSG=1) 1054 | * 1055 | COMMON /MOLS / NM,PP(MNM),PV(3,MNM),IPL(MNM),IPS(MNM),IR(MNM) 1056 | COMMON /GAS / SP(5,MNSP),SPM(6,MNSP,MNSP),ISP(MNSP) 1057 | COMMON /CONST / PI,SPI,BOLTZ 1058 | COMMON /ELAST / VRC(3),VRR,VR,L,M,LS,MS,CVR,MM,NN,N 1059 | * 1060 | DIMENSION VRCP(3),VCCM(3) 1061 | *--VRCP(3) are the post-collision components of the relative velocity 1062 | *--VCCM(3) are the components of the centre of mass velocity 1063 | * 1064 | RML=SPM(5,LS,MS)/SP(5,MS) 1065 | RMM=SPM(5,LS,MS)/SP(5,LS) 1066 | DO 100 K=1,3 1067 | VCCM(K)=RML*PV(K,L)+RMM*PV(K,M) 1068 | 100 CONTINUE 1069 | *--VCCM defines the components of the centre of mass velocity (eqn 2.1) 1070 | IF (ABS(SPM(4,LS,MS)-1.).LT.1.E-3) THEN 1071 | *--use the VHS logic 1072 | B=2.*RF(0)-1. 1073 | *--B is the cosine of a random elevation angle 1074 | A=SQRT(1.-B*B) 1075 | VRCP(1)=B*VR 1076 | C=2.*PI*RF(0) 1077 | *--C is a random azimuth angle 1078 | VRCP(2)=A*COS(C)*VR 1079 | VRCP(3)=A*SIN(C)*VR 1080 | ELSE 1081 | *--use the VSS logic 1082 | B=2.*(RF(0)**SPM(4,LS,MS))-1. 1083 | *--B is the cosine of the deflection angle for the VSS model (eqn (11.8) 1084 | A=SQRT(1.-B*B) 1085 | C=2.*PI*RF(0) 1086 | OC=COS(C) 1087 | SC=SIN(C) 1088 | D=SQRT(VRC(2)**2+VRC(3)**2) 1089 | IF (D.GT.1.E-6) THEN 1090 | VRCP(1)=B*VRC(1)+A*SC*D 1091 | VRCP(2)=B*VRC(2)+A*(VR*VRC(3)*OC-VRC(1)*VRC(2)*SC)/D 1092 | VRCP(3)=B*VRC(3)-A*(VR*VRC(2)*OC+VRC(1)*VRC(3)*SC)/D 1093 | ELSE 1094 | VRCP(1)=B*VRC(1) 1095 | VRCP(2)=A*OC*VRC(1) 1096 | VRCP(3)=A*SC*VRC(1) 1097 | END IF 1098 | *--the post-collision rel. velocity components are based on eqn (2.22) 1099 | END IF 1100 | *--VRCP(1 to 3) are the components of the post-collision relative vel. 1101 | DO 200 K=1,3 1102 | PV(K,L)=VCCM(K)+VRCP(K)*RMM 1103 | PV(K,M)=VCCM(K)-VRCP(K)*RML 1104 | 200 CONTINUE 1105 | RETURN 1106 | END 1107 | * RVELC.FOR 1108 | * 1109 | SUBROUTINE RVELC(U,V,VMP) 1110 | * 1111 | *--generates two random velocity components U an V in an equilibrium 1112 | *--gas with most probable speed VMP (based on eqns (C10) and (C12)) 1113 | * 1114 | A=SQRT(-LOG(RF(0))) 1115 | B=6.283185308*RF(0) 1116 | U=A*SIN(B)*VMP 1117 | V=A*COS(B)*VMP 1118 | RETURN 1119 | END 1120 | * GAM.FOR 1121 | * 1122 | FUNCTION GAM(X) 1123 | * 1124 | *--calculates the Gamma function of X. 1125 | * 1126 | A=1. 1127 | Y=X 1128 | IF (Y.LT.1.) THEN 1129 | A=A/Y 1130 | ELSE 1131 | 50 Y=Y-1 1132 | IF (Y.GE.1.) THEN 1133 | A=A*Y 1134 | GO TO 50 1135 | END IF 1136 | END IF 1137 | GAM=A*(1.-0.5748646*Y+0.9512363*Y**2-0.6998588*Y**3+ 1138 | & 0.4245549*Y**4-0.1010678*Y**5) 1139 | RETURN 1140 | END 1141 | * RF.FOR 1142 | * 1143 | FUNCTION RF(IDUM) 1144 | *--generates a uniformly distributed random fraction between 0 and 1 1145 | *----IDUM will generally be 0, but negative values may be used to 1146 | *------re-initialize the seed 1147 | SAVE MA,INEXT,INEXTP 1148 | PARAMETER (MBIG=1000000000,MSEED=161803398,MZ=0,FAC=1.E-9) 1149 | DIMENSION MA(55) 1150 | DATA IFF/0/ 1151 | IF (IDUM.LT.0.OR.IFF.EQ.0) THEN 1152 | IFF=1 1153 | MJ=MSEED-IABS(IDUM) 1154 | MJ=MOD(MJ,MBIG) 1155 | MA(55)=MJ 1156 | MK=1 1157 | DO 50 I=1,54 1158 | II=MOD(21*I,55) 1159 | MA(II)=MK 1160 | MK=MJ-MK 1161 | IF (MK.LT.MZ) MK=MK+MBIG 1162 | MJ=MA(II) 1163 | 50 CONTINUE 1164 | DO 100 K=1,4 1165 | DO 60 I=1,55 1166 | MA(I)=MA(I)-MA(1+MOD(I+30,55)) 1167 | IF (MA(I).LT.MZ) MA(I)=MA(I)+MBIG 1168 | 60 CONTINUE 1169 | 100 CONTINUE 1170 | INEXT=0 1171 | INEXTP=31 1172 | END IF 1173 | 200 INEXT=INEXT+1 1174 | IF (INEXT.EQ.56) INEXT=1 1175 | INEXTP=INEXTP+1 1176 | IF (INEXTP.EQ.56) INEXTP=1 1177 | MJ=MA(INEXT)-MA(INEXTP) 1178 | IF (MJ.LT.MZ) MJ=MJ+MBIG 1179 | MA(INEXT)=MJ 1180 | RF=MJ*FAC 1181 | IF (RF.GT.1.E-8.AND.RF.LT.0.99999999) RETURN 1182 | GO TO 200 1183 | END 1184 | * DATA0R.FOR 1185 | * 1186 | SUBROUTINE DATA0R 1187 | * 1188 | *--defines the data for a particular run of DSMC0R.FOR. 1189 | * 1190 | PARAMETER (MNM=100000,MNC=1,MNSC=1,MNSP=1,MNSG=1) 1191 | * 1192 | DOUBLE PRECISION COL(MNSP,MNSP),MOVT,NCOL,SELT,SEPT,CS(7,MNC,MNSP) 1193 | * 1194 | COMMON /GAS / SP(5,MNSP),SPM(6,MNSP,MNSP),ISP(MNSP) 1195 | COMMON /GASR / SPR(3,MNSP,MNSP),ISPR(3,MNSP),CT(MNC) 1196 | COMMON /SAMP / COL,NCOL,MOVT,SELT,SEPT,CS,TIME,NPR,NSMP,FND,FTMP, 1197 | & TIMI,FSP(MNSP),ISPD 1198 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPS,NPT 1199 | COMMON /GEOM / CW,NSC,XF,XR 1200 | * 1201 | *--set data (must be consistent with PARAMETER variables) 1202 | * 1203 | FND=1.E20 1204 | *--FND is the number densty 1205 | FTMP=500. 1206 | *--FTMP is the temperature 1207 | FSP(1)=1. 1208 | *--FSP(N) is the number fraction of species N 1209 | FNUM=1.0E15 1210 | *--FNUM is the number of real molecules represented by a simulated mol. 1211 | DTM=2.E-5 1212 | *--DTM is the time step 1213 | NSC=1 1214 | *--NSC is the number of sub-cells in each cell 1215 | XF=0. 1216 | XR=1. 1217 | *--the simulated region is from x=XF to x=XR 1218 | SP(1,1)=3.5E-10 1219 | SP(2,1)=273. 1220 | SP(3,1)=0.75 1221 | SP(4,1)=1. 1222 | SP(5,1)=5.E-26 1223 | *--SP(1,N) is the molecular diameter of species N 1224 | *--SP(2,N) is the reference temperature 1225 | *--SP(3,N) is the viscosity-temperatire index 1226 | *--SP(4,N) is the reciprocal of the VSS scattering parameter 1227 | *--SP(5,N) is the molecular mass of species N 1228 | ISP(1)=1 1229 | *--ISP(N) is the group for species N 1230 | ISPR(1,1)=2. 1231 | SPR(1,1,1)=5. 1232 | ISPR(2,1)=0 1233 | *--ISPR(1,N) is the number of degrees of freedom of species N 1234 | *--SPR(1,N,M) is the constant in the polynomial for the rotational 1235 | *--relaxation collision number of species N with species M 1236 | *--ISPR(2,N) is 0,1 for constant, polynomial for collision number 1237 | NIS=1 1238 | *--NIS is the number of time steps between samples 1239 | NSP=1 1240 | *--NSP is the number of samples between restart and output file updates 1241 | NPS=100 1242 | *--NPS is the number of updates to reach assumed steady flow 1243 | NPT=1000 1244 | *--NPT is the number of file updates to STOP 1245 | * 1246 | RETURN 1247 | END 1248 | -------------------------------------------------------------------------------- /originalbird/DSMC0V.FOR: -------------------------------------------------------------------------------- 1 | * DSMC0V.FOR 2 | * 3 | PROGRAM DSMC0V 4 | * 5 | *--test of vibrational excitation in a uniform gas 6 | * 7 | *--SI units are used throughout 8 | * 9 | PARAMETER (MNM=100000,MNC=1,MNSC=1,MNSP=1,MNSG=1) 10 | * 11 | *--variables as defined in DSMC0.FOR 12 | * 13 | DOUBLE PRECISION COL(MNSP,MNSP),MOVT,NCOL,SELT,SEPT,CS(7,MNC,MNSP) 14 | * 15 | *--variables as defined in DSMC0.FOR 16 | * 17 | DOUBLE PRECISION CSR(MNC,MNSP) 18 | * 19 | *--variable as defined in DSMC0R.FOR 20 | * 21 | DOUBLE PRECISION CSV(MNC,MNSP),CSVS(2,MNC,MNSP) 22 | * 23 | *--CSV(M,L) the sum of the vibrational energies of species L in cell M 24 | *--CSVS(N,M,L) the sum of molecules in ground (N=1) and level 1 (N=2) 25 | * 26 | DOUBLE PRECISION CSDVV(MNSP,100) 27 | * 28 | *--CSDVV samples the numbers in up to 100 divisions 29 | * 30 | COMMON /MOLS / NM,PP(MNM),PV(3,MNM),IPL(MNM),IPS(MNM),IR(MNM) 31 | * 32 | *--variables as defined in DSMC0.FOR 33 | * 34 | COMMON /MOLSR / PR(MNM) 35 | * 36 | *--variable as defined in DSMC0R.FOR 37 | * 38 | COMMON /MOLSV / IPV(MNM) 39 | * 40 | *--IPV(N) vibrational state of molecule N 41 | * 42 | COMMON /CELLS / CC(MNC),CG(3,MNC),IC(2,MNC,MNSG),ISC(MNSC), 43 | & CCG(2,MNC,MNSG,MNSG),ISCG(2,MNSC,MNSG),IG(2,MNSG) 44 | * 45 | *--variables as defined in DSMC0.FOR 46 | * 47 | COMMON /GAS / SP(5,MNSP),SPM(6,MNSP,MNSP),ISP(MNSP) 48 | * 49 | *--variables as defined in DSMC0.FOR 50 | * 51 | COMMON /GASR / SPR(3,MNSP,MNSP),ISPR(3,MNSP),CT(MNC) 52 | * 53 | *--variables as defined in DSMC0R.FOR 54 | * 55 | COMMON /GASV / SPV(MNSP),ISPV(MNSP),SPVM(2,MNSP,MNSP), 56 | & SVIB(MNC,MNSP) 57 | *--SPV(M) the characteristic temperature of species M 58 | *--SPVM(N,L,K) information on species M in a coll. with species K 59 | *--N=1 the constant C1 in eqn (6.53) for the relaxation collision number 60 | *--or, if SPVM(2,M,L,K) is negative, the relaxation collision number 61 | *--N=2 the constant C2 in eqn (6.53), or -1 to indicate a constant Zv 62 | *--ISPV(M) the number of vibrational modes of species M (either 0 or 1) 63 | *--SVIB(N,L) the eff. number of vib. d. of f. of species L in cell N 64 | * 65 | COMMON /SAMP / COL,NCOL,MOVT,SELT,SEPT,CS,TIME,NPR,NSMP,FND,FTMP, 66 | & TIMI,FSP(MNSP),ISPD 67 | * 68 | *--variables as defined in DSMC0.FOR 69 | * 70 | COMMON /SAMPR / CSR 71 | * 72 | *--variables as defined in DSMC0R.FOR 73 | * 74 | COMMON /SAMPV / CSV,CSVS 75 | * 76 | *--double precision variables defined above 77 | * 78 | COMMON /SAMPDV/ CSDVV 79 | * 80 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPS,NPT 81 | * 82 | *--variables as defined in DSMC0.FOR 83 | * 84 | COMMON /GEOM / CW,NSC,XF,XR 85 | * 86 | *--variables as defined in DSMC0.FOR 87 | * 88 | COMMON /CONST / PI,SPI,BOLTZ 89 | * 90 | *--variables as defined in DSMC0.FOR 91 | * 92 | WRITE (*,*) ' INPUT 0,1 FOR CONTINUING,NEW CALCULATION:- ' 93 | READ (*,*) NQL 94 | WRITE (*,*) ' INPUT 0,1 FOR CONTINUING,NEW SAMPLE:- ' 95 | READ (*,*) NQLS 96 | * 97 | IF (NQL.EQ.1) THEN 98 | * 99 | CALL INIT0V 100 | * 101 | ELSE 102 | * 103 | WRITE (*,*) ' READ THE RESTART FILE' 104 | OPEN (4,FILE='DSMC0V.RES',STATUS='OLD',FORM='UNFORMATTED') 105 | READ (4) BOLTZ,CC,CCG,CG,COL,CS,CSDVV,CSR,CSV,CSVS,CT,CW,DTM, 106 | & FNUM,FTMP,IC,IPL,IPS,IPV,IR,ISC,ISCG,ISP,ISPR,ISPV, 107 | & MOVT,NCOL,NIS,NM,NPS,NSC,NSMP,NPR,NPT,NSP,PI,PP,PR,PV, 108 | & SELT,SEPT,SP,SPI,SPM,SPR,SPV,SPVM,TIME,TIMI,XF,XR 109 | CLOSE (4) 110 | * 111 | END IF 112 | * 113 | IF (NQLS.EQ.1) CALL SAMPI0V 114 | * 115 | 100 NPR=NPR+1 116 | * 117 | IF (NPR.LE.NPS) CALL SAMPI0V 118 | * 119 | DO 200 JJJ=1,NSP 120 | DO 150 III=1,NIS 121 | TIME=TIME+DTM 122 | * 123 | WRITE (*,99001) III,JJJ,NIS,NSP,NCOL 124 | 99001 FORMAT (' DSMC0V:- Move ',2I5,' of ',2I5,F14.0,' Collisions') 125 | * 126 | CALL MOVE1 127 | * 128 | CALL INDEXM 129 | * 130 | CALL COLLMV 131 | * 132 | 150 CONTINUE 133 | * 134 | CALL SAMPLE0V 135 | * 136 | 200 CONTINUE 137 | * 138 | WRITE (*,*) ' WRITING RESTART AND OUTPUT FILES',NPR,' OF ',NPT 139 | OPEN (4,FILE='DSMC0V.RES',FORM='UNFORMATTED') 140 | WRITE (4) BOLTZ,CC,CCG,CG,COL,CS,CSDVV,CSR,CSV,CSVS,CT,CW,DTM, 141 | & FNUM,FTMP,IC,IPL,IPS,IPV,IR,ISC,ISCG,ISP,ISPR,ISPV,MOVT, 142 | & NCOL,NIS,NM,NPS,NSC,NSMP,NPR,NPT,NSP,PI,PP,PR,PV,SELT, 143 | & SEPT,SP,SPI,SPM,SPR,SPV,SPVM,TIME,TIMI,XF,XR 144 | CLOSE (4) 145 | * 146 | CALL OUT0V 147 | * 148 | IF (NPR.LT.NPT) GO TO 100 149 | STOP 150 | END 151 | * INIT0V.FOR 152 | * 153 | SUBROUTINE INIT0V 154 | * 155 | PARAMETER (MNM=100000,MNC=1,MNSC=1,MNSP=1,MNSG=1) 156 | * 157 | DOUBLE PRECISION COL(MNSP,MNSP),MOVT,NCOL,SELT,SEPT,CS(7,MNC,MNSP) 158 | DOUBLE PRECISION CSR(MNC,MNSP) 159 | DOUBLE PRECISION CSV(MNC,MNSP),CSVS(2,MNC,MNSP) 160 | * 161 | COMMON /MOLS / NM,PP(MNM),PV(3,MNM),IPL(MNM),IPS(MNM),IR(MNM) 162 | COMMON /MOLSR / PR(MNM) 163 | COMMON /MOLSV / IPV(MNM) 164 | COMMON /CELLS / CC(MNC),CG(3,MNC),IC(2,MNC,MNSG),ISC(MNSC), 165 | & CCG(2,MNC,MNSG,MNSG),ISCG(2,MNSC,MNSG),IG(2,MNSG) 166 | COMMON /GAS / SP(5,MNSP),SPM(6,MNSP,MNSP),ISP(MNSP) 167 | COMMON /GASR / SPR(3,MNSP,MNSP),ISPR(3,MNSP),CT(MNC) 168 | COMMON /GASV / SPV(MNSP),ISPV(MNSP),SPVM(2,MNSP,MNSP), 169 | & SVIB(MNC,MNSP) 170 | COMMON /SAMP / COL,NCOL,MOVT,SELT,SEPT,CS,TIME,NPR,NSMP,FND,FTMP, 171 | & TIMI,FSP(MNSP),ISPD 172 | COMMON /SAMPR / CSR 173 | COMMON /SAMPV / CSV,CSVS 174 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPS,NPT 175 | COMMON /GEOM / CW,NSC,XF,XR 176 | COMMON /CONST / PI,SPI,BOLTZ 177 | * 178 | *--set constants 179 | * 180 | PI=3.141592654 181 | SPI=SQRT(PI) 182 | BOLTZ=1.3806E-23 183 | * 184 | CALL DATA0V 185 | * 186 | *--set additional data on the gas 187 | * 188 | IF (MNSP.EQ.1) ISPD=0 189 | DO 100 N=1,MNSP 190 | DO 50 M=1,MNSP 191 | IF ((ISPR(3,N).EQ.0).AND.(M.NE.N)) THEN 192 | SPR(1,N,M)=SPR(1,N,N) 193 | SPR(2,N,M)=SPR(2,N,N) 194 | SPR(3,N,M)=SPR(3,N,N) 195 | END IF 196 | IF ((ISPD.EQ.0).OR.(N.EQ.M)) THEN 197 | SPM(1,N,M)=0.25*PI*(SP(1,N)+SP(1,M))**2 198 | *--the collision cross section is assumed to be given by eqn (1.35) 199 | SPM(2,N,M)=0.5*(SP(2,N)+SP(2,M)) 200 | SPM(3,N,M)=0.5*(SP(3,N)+SP(3,M)) 201 | SPM(4,N,M)=0.5*(SP(4,N)+SP(4,M)) 202 | *--mean values are used for ISPD=0 203 | ELSE 204 | SPM(1,N,M)=PI*SPM(1,N,M)**2 205 | *--the cross-collision diameter is converted to the cross-section 206 | END IF 207 | SPM(5,N,M)=(SP(5,N)/(SP(5,N)+SP(5,M)))*SP(5,M) 208 | *--the reduced mass is defined in eqn (2.7) 209 | SPM(6,N,M)=GAM(2.5-SPM(3,N,M)) 210 | 50 CONTINUE 211 | 100 CONTINUE 212 | * 213 | *--initialise variables 214 | * 215 | TIME=0. 216 | NM=0 217 | NPR=0 218 | NCOL=0 219 | MOVT=0. 220 | SELT=0. 221 | SEPT=0. 222 | * 223 | DO 200 M=1,MNSP 224 | DO 150 N=1,MNSP 225 | COL(M,N)=0. 226 | 150 CONTINUE 227 | 200 CONTINUE 228 | * 229 | CG(1,1)=XF 230 | CW=(XR-XF)/MNC 231 | DO 300 M=1,MNC 232 | CT(M)=FTMP 233 | *--the macroscopic temperature is set to the freestream temperature 234 | IF (M.GT.1) CG(1,M)=CG(2,M-1) 235 | CG(2,M)=CG(1,M)+CW 236 | CG(3,M)=CW 237 | CC(M)=CW 238 | DO 250 L=1,MNSG 239 | DO 220 K=1,MNSG 240 | CCG(2,M,L,K)=RF(0) 241 | CCG(1,M,L,K)=SPM(1,1,1)*300.*SQRT(FTMP/300.) 242 | 220 CONTINUE 243 | 250 CONTINUE 244 | *--the maximum value of the (rel. speed)*(cross-section) is set to a 245 | *--reasonable, but low, initial value and will be increased as necessary 246 | 300 CONTINUE 247 | * 248 | *--Set sub-cells 249 | * 250 | DO 400 N=1,MNC 251 | DO 350 M=1,NSC 252 | L=(N-1)*NSC+M 253 | ISC(L)=N 254 | 350 CONTINUE 255 | 400 CONTINUE 256 | * 257 | *--generate initial gas with trans. and rotational temperature FTMP 258 | * 259 | WRITE (*,*) 260 | &' INPUT 0,1 TO SET THE INITIAL ROTATIONAL TEMPERATURETO ZERO,FREES 261 | &TREAM:- ' 262 | READ (*,*) NQLR 263 | * 264 | WRITE (*,*) 265 | &' INPUT 0,1 TO SET THE INITIAL VIBRATIONAL TEMPERATURE TO ZERO,FRE 266 | &ESTREAM:- ' 267 | READ (*,*) NQLV 268 | * 269 | DO 500 L=1,MNSP 270 | REM=0 271 | VMP=SQRT(2.*BOLTZ*FTMP/SP(5,L)) 272 | *--VMP is the most probable speed in species L, see eqns (4.1) and (4.7) 273 | DO 450 N=1,MNC 274 | SVIB(N,L)=0. 275 | A=FND*CG(3,N)*FSP(L)/FNUM+REM 276 | *--A is the number of simulated molecules of species L in cell N to 277 | *--simulate the required concentrations at a total number density of FND 278 | IF (N.LT.MNC) THEN 279 | MM=A 280 | REM=(A-MM) 281 | *--the remainder REM is carried forward to the next cell 282 | ELSE 283 | MM=NINT(A) 284 | END IF 285 | DO 420 M=1,MM 286 | IF (NM.LE.MNM) THEN 287 | *--round-off error could have taken NM to MNM+1 288 | NM=NM+1 289 | IPS(NM)=L 290 | PP(NM)=CG(1,N)+RF(0)*(CG(2,N)-CG(1,N)) 291 | IPL(NM)=(PP(NM)-CG(1,N))*(NSC-.001)/CG(3,N)+1+NSC*(N-1) 292 | *--Species, position, and sub-cell number have been set 293 | DO 405 K=1,3 294 | CALL RVELC(PV(K,NM),A,VMP) 295 | 405 CONTINUE 296 | *--velocity components have been set 297 | *--set the rotational energy 298 | IF (ISPR(1,L).GT.0) THEN 299 | IF (NQLR.EQ.0) THEN 300 | PR(NM)=0. 301 | ELSE IF (ISPR(1,L).EQ.2) THEN 302 | PR(NM)=-LOG(RF(0))*BOLTZ*FTMP 303 | *--for 2 degrees of freedom, the sampling is directly from eqn (11.22) 304 | ELSE 305 | CALL SIE(ISPR(1,L),ERM) 306 | *--otherwise apply the acceptance-rejection method to eqn (11.23) 307 | PR(NM)=ERM*BOLTZ*FTMP 308 | END IF 309 | END IF 310 | *--set the vibrational levels 311 | IF (ISPV(L).GT.0) THEN 312 | IF (NQLV.EQ.0) THEN 313 | IPV(NM)=0 314 | ELSE 315 | IPV(NM)=-LOG(RF(0))*FTMP/SPV(L) 316 | *--eqn (11.24) is used to set the vibrational level 317 | END IF 318 | END IF 319 | END IF 320 | 420 CONTINUE 321 | 450 CONTINUE 322 | 500 CONTINUE 323 | WRITE (*,99001) NM 324 | 99001 FORMAT (' ',I6,' MOLECULES') 325 | * 326 | RETURN 327 | END 328 | * SIE.FOR 329 | * 330 | SUBROUTINE SIE(IDF,ERM) 331 | *--selects a typical internal energy ratio for IDF degrees of freedom 332 | *--applies the acceptance-rejection method to eqn (11.23) 333 | *--IDF must be greater than 2 334 | * 335 | A=0.5*IDF-1. 336 | 100 ERM=RF(0)*10. 337 | *--the cut-off internal energy is 10 kT 338 | B=((ERM/A)**A)*EXP(A-ERM) 339 | IF (B.LT.RF(0)) GO TO 100 340 | RETURN 341 | END 342 | * SAMPI0V.FOR 343 | * 344 | * 345 | SUBROUTINE SAMPI0V 346 | * 347 | *--initialises all the sampling variables 348 | * 349 | PARAMETER (MNM=100000,MNC=1,MNSC=1,MNSP=1,MNSG=1) 350 | * 351 | DOUBLE PRECISION COL(MNSP,MNSP),MOVT,NCOL,SELT,SEPT,CS(7,MNC,MNSP) 352 | DOUBLE PRECISION CSR(MNC,MNSP) 353 | DOUBLE PRECISION CSV(MNC,MNSP),CSVS(2,MNC,MNSP) 354 | DOUBLE PRECISION CSDVV(MNSP,100) 355 | * 356 | COMMON /SAMP / COL,NCOL,MOVT,SELT,SEPT,CS,TIME,NPR,NSMP,FND,FTMP, 357 | & TIMI,FSP(MNSP),ISPD 358 | COMMON /SAMPR / CSR 359 | COMMON /SAMPV / CSV,CSVS 360 | COMMON /SAMPDV/ CSDVV 361 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPS,NPT 362 | * 363 | NSMP=0 364 | TIMI=TIME 365 | DO 100 L=1,MNSP 366 | DO 50 N=1,MNC 367 | CS(1,N,L)=1.E-6 368 | DO 20 M=2,7 369 | CS(M,N,L)=0. 370 | 20 CONTINUE 371 | CSR(N,L)=0. 372 | CSV(N,L)=0. 373 | CSVS(1,N,L)=0. 374 | CSVS(2,N,L)=0. 375 | 50 CONTINUE 376 | IF (MNC.EQ.1) THEN 377 | DO 60 K=1,100 378 | CSDVV(L,K)=0. 379 | 60 CONTINUE 380 | END IF 381 | 100 CONTINUE 382 | RETURN 383 | END 384 | * COLLMV.FOR 385 | * 386 | SUBROUTINE COLLMV 387 | * 388 | *--calculates collisions appropriate to DTM in gas mixture 389 | * 390 | PARAMETER (MNM=100000,MNC=1,MNSC=1,MNSP=1,MNSG=1) 391 | * 392 | DOUBLE PRECISION COL(MNSP,MNSP),MOVT,NCOL,SELT,SEPT,CS(7,MNC,MNSP) 393 | DOUBLE PRECISION CSR(MNC,MNSP) 394 | DOUBLE PRECISION CSV(MNC,MNSP),CSVS(2,MNC,MNSP) 395 | * 396 | COMMON /MOLS / NM,PP(MNM),PV(3,MNM),IPL(MNM),IPS(MNM),IR(MNM) 397 | COMMON /MOLSR / PR(MNM) 398 | COMMON /MOLSV / IPV(MNM) 399 | COMMON /CELLS / CC(MNC),CG(3,MNC),IC(2,MNC,MNSG),ISC(MNSC), 400 | & CCG(2,MNC,MNSG,MNSG),ISCG(2,MNSC,MNSG),IG(2,MNSG) 401 | COMMON /GAS / SP(5,MNSP),SPM(6,MNSP,MNSP),ISP(MNSP) 402 | COMMON /GASR / SPR(3,MNSP,MNSP),ISPR(3,MNSP),CT(MNC) 403 | COMMON /GASV / SPV(MNSP),ISPV(MNSP),SPVM(2,MNSP,MNSP), 404 | & SVIB(MNC,MNSP) 405 | COMMON /SAMP / COL,NCOL,MOVT,SELT,SEPT,CS,TIME,NPR,NSMP,FND,FTMP, 406 | & TIMI,FSP(MNSP),ISPD 407 | COMMON /SAMPR / CSR 408 | COMMON /SAMPV / CSV,CSVS 409 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPS,NPT 410 | COMMON /CONST / PI,SPI,BOLTZ 411 | COMMON /ELAST / VRC(3),VRR,VR,L,M,LS,MS,CVR,MM,NN,N 412 | * 413 | *--VRC(3) are the pre-collision components of the relative velocity 414 | * 415 | DO 100 N=1,MNC 416 | *--consider collisions in cell N 417 | DO 50 NN=1,MNSG 418 | DO 20 MM=1,MNSG 419 | SN=0. 420 | DO 10 K=1,MNSP 421 | IF (ISP(K).EQ.MM) SN=SN+CS(1,N,K) 422 | 10 CONTINUE 423 | IF (SN.GT.1.) THEN 424 | AVN=SN/FLOAT(NSMP) 425 | ELSE 426 | AVN=IC(2,N,MM) 427 | END IF 428 | *--AVN is the average number of group MM molecules in the cell 429 | ASEL=0.5*IC(2,N,NN)*AVN*FNUM*CCG(1,N,NN,MM)*DTM/CC(N) 430 | & +CCG(2,N,NN,MM) 431 | *--ASEL is the number of pairs to be selected, see eqn (11.5) 432 | NSEL=ASEL 433 | CCG(2,N,NN,MM)=ASEL-NSEL 434 | IF (NSEL.GT.0) THEN 435 | IF (((NN.NE.MM).AND.(IC(2,N,NN).LT.1.OR.IC(2,N,MM).LT.1)) 436 | & .OR.((NN.EQ.MM).AND.(IC(2,N,NN).LT.2))) THEN 437 | CCG(2,N,NN,MM)=CCG(2,N,NN,MM)+NSEL 438 | *--if there are insufficient molecules to calculate collisions, 439 | *--the number NSEL is added to the remainer CCG(2,N,NN,MM) 440 | ELSE 441 | CVM=CCG(1,N,NN,MM) 442 | SELT=SELT+NSEL 443 | DO 12 ISEL=1,NSEL 444 | * 445 | CALL SELECT 446 | * 447 | IF (CVR.GT.CVM) CVM=CVR 448 | *--if necessary, the maximum product in CVM is upgraded 449 | IF (RF(0).LT.CVR/CCG(1,N,NN,MM)) THEN 450 | *--the collision is accepted with the probability of eqn (11.6) 451 | NCOL=NCOL+1 452 | SEPT=SEPT+ABS(PP(L)-PP(M)) 453 | COL(LS,MS)=COL(LS,MS)+1.D00 454 | COL(MS,LS)=COL(MS,LS)+1.D00 455 | * 456 | IF (ISPR(1,LS).GT.0.OR.ISPR(1,MS).GT.0) CALL INELV 457 | *--bypass inelastic redistribution if both molecules are monatomic 458 | * 459 | CALL ELASTIC 460 | * 461 | END IF 462 | 12 CONTINUE 463 | CCG(1,N,NN,MM)=CVM 464 | END IF 465 | END IF 466 | 20 CONTINUE 467 | 50 CONTINUE 468 | 100 CONTINUE 469 | RETURN 470 | END 471 | * INELV.FOR 472 | * 473 | SUBROUTINE INELV 474 | * 475 | *--adjustment of vibrational and rotational energy in a collision 476 | * 477 | PARAMETER (MNM=100000,MNC=1,MNSC=1,MNSP=1,MNSG=1) 478 | * 479 | COMMON /MOLSR / PR(MNM) 480 | COMMON /MOLSV / IPV(MNM) 481 | COMMON /GAS / SP(5,MNSP),SPM(6,MNSP,MNSP),ISP(MNSP) 482 | COMMON /GASR / SPR(3,MNSP,MNSP),ISPR(3,MNSP),CT(MNC) 483 | COMMON /GASV / SPV(MNSP),ISPV(MNSP),SPVM(2,MNSP,MNSP), 484 | & SVIB(MNC,MNSP) 485 | COMMON /ELAST / VRC(3),VRR,VR,L,M,LS,MS,CVR,MM,NN,N 486 | COMMON /CONST / PI,SPI,BOLTZ 487 | * 488 | ET=0.5*SPM(5,LS,MS)*VRR 489 | *--ET is the initial translational energy 490 | DO 100 KSP=1,2 491 | *--consider the molecules in turn 492 | IF (KSP.EQ.1) THEN 493 | K=L 494 | KS=LS 495 | JS=MS 496 | ELSE 497 | K=M 498 | KS=MS 499 | JS=LS 500 | END IF 501 | IF (ISPV(KS).GT.0) THEN 502 | IF (SPVM(2,KS,JS).GT.0.) THEN 503 | IF (SVIB(N,KS).GT..0001) THEN 504 | COLT=(ET+IPV(K)*BOLTZ*SPV(KS)) 505 | & /((2.5-SPM(3,KS,JS)+0.5*SVIB(N,KS))*BOLTZ) 506 | *--the collision temperature COLT is calculated from eqn (11.29) 507 | ELSE 508 | COLT=CT(N) 509 | END IF 510 | A=SPVM(2,KS,JS)*(COLT**(-0.33333)) 511 | IF (A.LT.50.) THEN 512 | ZV=(SPVM(1,KS,JS)/(COLT**SPM(3,LS,MS)))*EXP(A) 513 | ELSE 514 | ZV=1.E7 515 | END IF 516 | *--the vibrational collision number has been calculated from eqn (6.59) 517 | ELSE 518 | ZV=SPVM(1,KS,JS) 519 | *--the vibrational relaxation collision number is a constant 520 | END IF 521 | IF (1./ZV.GT.RF(0)) THEN 522 | EVIB=IPV(K)*BOLTZ*SPV(KS) 523 | ECC=ET+EVIB 524 | MAXLEV=ECC/(BOLTZ*SPV(KS)) 525 | *--MAXLEV is the maximum level within the available energy 526 | 10 IPV(K)=RF(0)*(MAXLEV+0.99999) 527 | *--the above statement chooses a level uniformly from 0 to MAXLEV 528 | EVIB=IPV(K)*BOLTZ*SPV(KS) 529 | PROB=(1.-EVIB/ECC)**(1.5-SPM(3,KS,JS)) 530 | *--PROB is the probability ratio (eqn (5.61)) 531 | IF (PROB.LT.RF(0)) GO TO 10 532 | ET=ECC-EVIB 533 | END IF 534 | END IF 535 | IF (ISPR(1,KS).GT.0) THEN 536 | IF (ISPR(2,KS).EQ.0) THEN 537 | ATK=1./SPR(1,KS,JS) 538 | ELSE 539 | ATK=1./(SPR(1,KS,JS)+SPR(2,KS,JS)*CT(N)+SPR(3,KS,JS)*CT(N) 540 | & **2) 541 | END IF 542 | *--ATK is the probability that rotation is redistributed to molecule L 543 | IF (ATK.GT.RF(0)) THEN 544 | ECC=ET+PR(K) 545 | IF (ISPR(1,KS).EQ.2) THEN 546 | ERM=1.-RF(0)**(1./(2.5-SPM(3,KS,JS))) 547 | ELSE 548 | XIA=0.5*ISPR(1,KS) 549 | CALL LBS(XIA-1.,1.5-SPM(3,KS,JS),ERM) 550 | END IF 551 | PR(K)=ERM*ECC 552 | ET=ECC-PR(K) 553 | END IF 554 | END IF 555 | 100 CONTINUE 556 | *--ET is now the post-collision translational energy 557 | *--adjust VR and, for the VSS model, VRC for the change in energy 558 | A=SQRT(2.*ET/SPM(5,LS,MS)) 559 | IF (ABS(SPM(4,LS,MS)-1.).LT.1.E-3) THEN 560 | VR=A 561 | ELSE 562 | DO 150 K=1,3 563 | VRC(K)=VRC(K)*A/VR 564 | 150 CONTINUE 565 | VR=A 566 | END IF 567 | RETURN 568 | END 569 | * SAMPLE0V.FOR 570 | * 571 | SUBROUTINE SAMPLE0V 572 | * 573 | *--sample the molecules in the flow. 574 | * 575 | PARAMETER (MNM=100000,MNC=1,MNSC=1,MNSP=1,MNSG=1) 576 | * 577 | DOUBLE PRECISION COL(MNSP,MNSP),MOVT,NCOL,SELT,SEPT,CS(7,MNC,MNSP) 578 | DOUBLE PRECISION CSR(MNC,MNSP) 579 | DOUBLE PRECISION CSV(MNC,MNSP),CSVS(2,MNC,MNSP) 580 | * 581 | COMMON /MOLS / NM,PP(MNM),PV(3,MNM),IPL(MNM),IPS(MNM),IR(MNM) 582 | COMMON /MOLSR / PR(MNM) 583 | COMMON /MOLSV / IPV(MNM) 584 | COMMON /CELLS / CC(MNC),CG(3,MNC),IC(2,MNC,MNSG),ISC(MNSC), 585 | & CCG(2,MNC,MNSG,MNSG),ISCG(2,MNSC,MNSG),IG(2,MNSG) 586 | COMMON /GASR / SPR(3,MNSP,MNSP),ISPR(3,MNSP),CT(MNC) 587 | COMMON /GASV / SPV(MNSP),ISPV(MNSP),SPVM(2,MNSP,MNSP), 588 | & SVIB(MNC,MNSP) 589 | COMMON /SAMP / COL,NCOL,MOVT,SELT,SEPT,CS,TIME,NPR,NSMP,FND,FTMP, 590 | & TIMI,FSP(MNSP),ISPD 591 | COMMON /SAMPR / CSR 592 | COMMON /SAMPV / CSV,CSVS 593 | COMMON /CONST / PI,SPI,BOLTZ 594 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPS,NPT 595 | * 596 | NSMP=NSMP+1 597 | DO 100 M=1,NM 598 | I=IPS(M) 599 | K=IPL(M) 600 | N=ISC(K) 601 | CS(1,N,I)=CS(1,N,I)+1 602 | DO 50 LL=1,3 603 | CS(LL+1,N,I)=CS(LL+1,N,I)+PV(LL,M) 604 | CS(LL+4,N,I)=CS(LL+4,N,I)+PV(LL,M)**2 605 | 50 CONTINUE 606 | IF (ISPR(1,I).GT.0) CSR(N,I)=CSR(N,I)+PR(M) 607 | IF (ISPV(I).GT.0) THEN 608 | CSV(N,I)=CSV(N,I)+IPV(M)*BOLTZ*SPV(I) 609 | IF (IPV(M).EQ.0) CSVS(1,N,I)=CSVS(1,N,I)+1. 610 | IF (IPV(M).EQ.1) CSVS(2,N,I)=CSVS(2,N,I)+1. 611 | END IF 612 | 100 CONTINUE 613 | RETURN 614 | END 615 | * OUT0V.FOR 616 | * 617 | SUBROUTINE OUT0V 618 | * 619 | *--output a progressive set of results to file DSMC0V.OUT. 620 | * 621 | PARAMETER (MNM=100000,MNC=1,MNSC=1,MNSP=1,MNSG=1) 622 | * 623 | DOUBLE PRECISION COL(MNSP,MNSP),MOVT,NCOL,SELT,SEPT,CS(7,MNC,MNSP) 624 | DOUBLE PRECISION CSR(MNC,MNSP) 625 | DOUBLE PRECISION CSV(MNC,MNSP),CSVS(2,MNC,MNSP) 626 | DOUBLE PRECISION CSDVV(MNSP,100) 627 | * 628 | COMMON /MOLS / NM,PP(MNM),PV(3,MNM),IPL(MNM),IPS(MNM),IR(MNM) 629 | COMMON /MOLSR / PR(MNM) 630 | COMMON /MOLSV / IPV(MNM) 631 | COMMON /CELLS / CC(MNC),CG(3,MNC),IC(2,MNC,MNSG),ISC(MNSC), 632 | & CCG(2,MNC,MNSG,MNSG),ISCG(2,MNSC,MNSG),IG(2,MNSG) 633 | COMMON /GAS / SP(5,MNSP),SPM(6,MNSP,MNSP),ISP(MNSP) 634 | COMMON /GASR / SPR(3,MNSP,MNSP),ISPR(3,MNSP),CT(MNC) 635 | COMMON /GASV / SPV(MNSP),ISPV(MNSP),SPVM(2,MNSP,MNSP), 636 | & SVIB(MNC,MNSP) 637 | COMMON /SAMP / COL,NCOL,MOVT,SELT,SEPT,CS,TIME,NPR,NSMP,FND,FTMP, 638 | & TIMI,FSP(MNSP),ISPD 639 | COMMON /SAMPR / CSR 640 | COMMON /SAMPV / CSV,CSVS 641 | COMMON /SAMPDV/ CSDVV 642 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPS,NPT 643 | COMMON /CONST / PI,SPI,BOLTZ 644 | * 645 | DOUBLE PRECISION VEL(3),SMU(3),SVEL(3,MNC),SN,SM,SMCC,SRDF,SRE,TT, 646 | & TROT,DBOLTZ,DTMP 647 | DIMENSION TVIB(MNC,MNSP) 648 | *--TVIB(L,N) is the vibrational temperature of species L in cell N 649 | DBOLTZ=BOLTZ 650 | * 651 | OPEN (4,FILE='DSMC0V.OUT',FORM='FORMATTED') 652 | OPEN (3,FILE='RELAX.OUT',FORM='FORMATTED',ACCESS='DIRECT',RECL=80) 653 | * 654 | WRITE (4,*) ' FLOW SAMPLED FROM TIME ',TIMI,' TO TIME',TIME 655 | WRITE (4,*) ' COLLISIONS:-' 656 | WRITE (4,99001) ((COL(M,L),M=1,MNSP),L=1,MNSP) 657 | 99001 FORMAT (5F12.0) 658 | WRITE (4,*) ' TOTAL NUMBER OF SAMPLES ',NSMP 659 | WRITE (4,*) NM,' MOLECULES' 660 | WRITE (4,*) MOVT,' TOTAL MOLECULAR MOVES' 661 | WRITE (4,*) INT(SELT),' SELECTIONS ',INT(NCOL), 662 | & ' COLLISION EVENTS, RATIO ',REAL(NCOL/SELT) 663 | IF (NCOL.GT.0) WRITE (4,*) ' MEAN COLLISION SEPARATION ', 664 | & REAL(SEPT/NCOL) 665 | WRITE (4,*) 'SAMPLES' 666 | WRITE (4,*) ' CELL N SP 1 N SP 2 ETC ' 667 | DO 100 N=1,MNC 668 | WRITE (4,99002) N,(CS(1,N,L),L=1,MNSP) 669 | 100 CONTINUE 670 | 99002 FORMAT (' ',I6,5F9.0) 671 | * 672 | WRITE (4,*) ' FLOWFIELD PROPERTIES' 673 | WRITE (4,*) 674 | &' CELL X COORD DENSITY TR TEMP ROT TEMP VIB TEMP OV T 675 | &EMP U V W ' 676 | *--first the mixture properties 677 | DO 400 N=1,MNC 678 | A=FNUM/(CG(3,N)*NSMP) 679 | SN=0. 680 | SM=0. 681 | DO 150 K=1,3 682 | SMU(K)=0. 683 | 150 CONTINUE 684 | SMCC=0. 685 | SRE=0. 686 | SRDF=0. 687 | DO 200 L=1,MNSP 688 | SN=SN+CS(1,N,L) 689 | *--SN is the number sum 690 | SM=SM+SP(5,L)*CS(1,N,L) 691 | *--SM is the sum of molecular masses 692 | DO 160 K=1,3 693 | SMU(K)=SMU(K)+SP(5,L)*CS(K+1,N,L) 694 | *--SMU(1 to 3) are the sum of mu, mv, mw 695 | 160 CONTINUE 696 | SMCC=SMCC+(CS(5,N,L)+CS(6,N,L)+CS(7,N,L))*SP(5,L) 697 | *--SMCC is the sum of m(u**2+v**2+w**2) 698 | SRE=SRE+CSR(N,L) 699 | *--SRE is the sum of rotational energy 700 | SRDF=SRDF+ISPR(1,L)*CS(1,N,L) 701 | *--SRDF is the sum of the rotational degrees of freedom 702 | IF (ISPV(L).GT.0) THEN 703 | IF (CSVS(2,N,L).GT.0) THEN 704 | TVIB(N,L)=SPV(L)/LOG(CSVS(1,N,L)/CSVS(2,N,L)) 705 | *--TVIB the vib. temp. of species L is calculated from eqn (11.27) 706 | SVIB(N,L)=2.*CSV(N,L)/(CS(1,N,L)*BOLTZ*TVIB(N,L)) 707 | *--SVIB is the effective number of vibrational degrees of freedom 708 | *----calculated from eqn (11.28) 709 | ELSE 710 | TVIB(N,L)=1.E-6 711 | SVIB(N,L)=0. 712 | END IF 713 | END IF 714 | 200 CONTINUE 715 | DENN=SN*A 716 | *--DENN is the number density, see eqn (1.34) 717 | DEN=DENN*SM/SN 718 | *--DEN is the density, see eqn (1.42) 719 | DO 250 K=1,3 720 | VEL(K)=SMU(K)/SM 721 | SVEL(K,N)=VEL(K) 722 | 250 CONTINUE 723 | *--VEL and SVEL are the stream velocity components, see eqn (1.43) 724 | UU=VEL(1)**2+VEL(2)**2+VEL(3)**2 725 | TT=(SMCC-SM*UU)/(3.D00*DBOLTZ*SN) 726 | *--TT is the translational temperature, see eqn (1.51) 727 | TROT=(2.D00/DBOLTZ)*SRE/SRDF 728 | *--TROT is the rotational temperature, see eqn (11.11) 729 | SN=0. 730 | SVT=0. 731 | SVDF=0. 732 | *--SVT is the sum of vibrational temperatures 733 | *--SVDF is the sum of effective vibrational degrees of freedom 734 | DO 300 L=1,MNSP 735 | SN=SN+CS(1,N,L) 736 | IF (ISPV(L).GT.0) THEN 737 | SVT=SVT+TVIB(N,L)*SVIB(N,L)*CS(1,N,L) 738 | SVDF=SVDF+SVIB(N,L)*CS(1,N,L) 739 | END IF 740 | 300 CONTINUE 741 | IF (SVDF.GT.1.E-6) THEN 742 | TV=SVT/SVDF 743 | *--TV is the vibrational temperature 744 | AVDF=SVDF/SN 745 | *--AVDF is the average number of vibrational degrees of freedom 746 | ELSE 747 | TV=0. 748 | AVDF=0. 749 | END IF 750 | TEMP=(3.D00*TT+(SRDF/SN)*TROT+AVDF*TV)/(3.+SRDF/SN+AVDF) 751 | *--TEMP is the overall temperature, see eqn (11.30) 752 | CT(N)=TEMP 753 | XC=0.5*(CG(1,N)+CG(2,N)) 754 | *--XC is the x coordinate of the midpoint of the cell 755 | WRITE (4,99003) N,XC,DEN,TT,TROT,TV,TEMP,VEL(1),VEL(2),VEL(3) 756 | 99003 FORMAT (' ',I5,F10.4,1P,E12.4,0P,7F10.3) 757 | 400 CONTINUE 758 | * 759 | WRITE (4,*) 760 | DO 600 L=1,MNSP 761 | *--now the properties of the separate species 762 | WRITE (4,*) ' SPECIES ',L 763 | WRITE (4,*) 764 | &' CELL X COORD N DENS DENSITY U DIF VEL V DIF VEL W DIF 765 | & VEL TR TEMP ROT TEMP VIB TEMP, EFF D OF F ' 766 | DO 500 N=1,MNC 767 | A=FNUM/(CG(3,N)*NSMP) 768 | DENN=CS(1,N,L)*A 769 | *--DENN is the partial number density 770 | DEN=SP(5,L)*DENN 771 | *--DEN is the partial density, see eqn (1.13) 772 | DO 420 K=1,3 773 | VEL(K)=CS(K+1,N,L)/CS(1,N,L) 774 | *--VEL defines the average`velocity of the species L molecules 775 | 420 CONTINUE 776 | UU=VEL(1)**2+VEL(2)**2+VEL(3)**2 777 | TT=(SP(5,L)/(3.D00*DBOLTZ)) 778 | & *((CS(5,N,L)+CS(6,N,L)+CS(7,N,L))/CS(1,N,L)-UU) 779 | *--TT is the translational temperature, see eqn (1.29) 780 | IF (ISPR(1,L).GT.0) THEN 781 | TROT=2.D00*CSR(N,L)/(ISPR(1,L)*DBOLTZ*CS(1,N,L)) 782 | ELSE 783 | TROT=0. 784 | END IF 785 | *--TROT is the rotational temperature, see eqn (11.10) 786 | DO 440 K=1,3 787 | VEL(K)=VEL(K)-SVEL(K,N) 788 | *--VEL now defines the diffusion velocity of species L, see eqn (1.45) 789 | 440 CONTINUE 790 | * 791 | XC=0.5*(CG(1,N)+CG(2,N)) 792 | WRITE (4,99004) N,XC,DENN,DEN,VEL(1),VEL(2),VEL(3),TT,TROT, 793 | & TVIB(N,L),SVIB(N,L) 794 | 99004 FORMAT (' ',I5,F9.4,1P,2E12.4,0P,10F10.3) 795 | *--output the relaxation information 796 | IF (NPR.LE.NPS) THEN 797 | CRATE=0. 798 | DO 450 M=1,MNSP 799 | CRATE=CRATE+COL(L,M)*NSMP/CS(1,N,L) 800 | 450 CONTINUE 801 | WRITE (3,99005,REC=MNSP*(NPR-1)+L) L,CRATE,TT,TROT,TV 802 | 99005 FORMAT (' REC ',I3,4E14.5) 803 | END IF 804 | 500 CONTINUE 805 | 600 CONTINUE 806 | * 807 | IF (MNC.EQ.1) THEN 808 | *--output the distribution function for the vibrational levels 809 | WRITE (4,*) 810 | WRITE (4,*) ' LEVEL FRACTION THEORY SAMPLE' 811 | DO 650 N=1,NM 812 | L=IPS(N) 813 | IF (ISPV(L).GT.0) CSDVV(L,IPV(N)+1)=CSDVV(L,IPV(N)+1)+1.D00 814 | 650 CONTINUE 815 | DO 700 L=1,MNSP 816 | IF (ISPV(L).GT.0) THEN 817 | DO 660 M=1,100 818 | DTMP=-(M-1)*SPV(L)/CT(1) 819 | WRITE (4,99006) M-1,CSDVV(L,M)/CSDVV(L,1),DEXP(DTMP), 820 | & CSDVV(L,M) 821 | 660 CONTINUE 822 | 99006 FORMAT (' ',I5,2E13.5,F14.1) 823 | END IF 824 | 700 CONTINUE 825 | END IF 826 | * 827 | CLOSE (3) 828 | CLOSE (4) 829 | * 830 | *--check the total energy 831 | TOTT=0. 832 | TOTR=0. 833 | TOTV=0. 834 | DO 800 N=1,NM 835 | L=IPS(N) 836 | TOTT=TOTT+0.5*SP(5,L)*(PV(1,N)**2+PV(2,N)**2+PV(3,N)**2) 837 | IF (ISPR(1,L).GT.0) TOTR=TOTR+PR(N) 838 | IF (ISPV(L).GT.0) TOTV=TOTV+IPV(N)*BOLTZ*SPV(L) 839 | 800 CONTINUE 840 | TOTE=TOTT+TOTR+TOTV 841 | WRITE (*,*) ' TR, ROT, VIB, TOTAL ENERGY = ',TOTT,TOTR,TOTV,TOTE 842 | * 843 | RETURN 844 | END 845 | * MOVE1.FOR 846 | * 847 | SUBROUTINE MOVE1 848 | * 849 | *--the NM molecules are moved over the time interval DTM 850 | * 851 | PARAMETER (MNM=100000,MNC=1,MNSC=1,MNSP=1,MNSG=1) 852 | * 853 | DOUBLE PRECISION COL(MNSP,MNSP),MOVT,NCOL,SELT,SEPT,CS(7,MNC,MNSP) 854 | * 855 | COMMON /MOLS / NM,PP(MNM),PV(3,MNM),IPL(MNM),IPS(MNM),IR(MNM) 856 | COMMON /CELLS / CC(MNC),CG(3,MNC),IC(2,MNC,MNSG),ISC(MNSC), 857 | & CCG(2,MNC,MNSG,MNSG),ISCG(2,MNSC,MNSG),IG(2,MNSG) 858 | COMMON /SAMP / COL,NCOL,MOVT,SELT,SEPT,CS,TIME,NPR,NSMP,FND,FTMP, 859 | & TIMI,FSP(MNSP),ISPD 860 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPS,NPT 861 | COMMON /GEOM / CW,NSC,XF,XR 862 | * 863 | DO 100 N=1,NM 864 | MOVT=MOVT+1 865 | MSC=IPL(N) 866 | MC=ISC(MSC) 867 | *--MC is the initial cell number 868 | XI=PP(N) 869 | DX=PV(1,N)*DTM 870 | X=XI+DX 871 | *--molecule N at XI is moved by DX to X 872 | IF (X.LT.XF) THEN 873 | *--specular reflection from the minimum x boundary at x=XF (eqn (11.7)) 874 | X=2.*XF-X 875 | PV(1,N)=-PV(1,N) 876 | END IF 877 | IF (X.GT.XR) THEN 878 | *--specular reflection from the maximum x boundary at x=XR (eqn (11.7)) 879 | X=2.*XR-X 880 | PV(1,N)=-PV(1,N) 881 | END IF 882 | IF (X.LT.CG(1,MC).OR.X.GT.CG(2,MC)) THEN 883 | *--the molecule has moved from the initial cell 884 | MC=(X-XF)/CW+0.99999 885 | IF (MC.EQ.0) MC=1 886 | *--MC is the new cell number (note avoidance of round-off error) 887 | END IF 888 | MSC=((X-CG(1,MC))/CG(3,MC))*(NSC-.001)+1+NSC*(MC-1) 889 | *--MSC is the new sub-cell number 890 | IPL(N)=MSC 891 | PP(N)=X 892 | 100 CONTINUE 893 | RETURN 894 | END 895 | * INDEXM.FOR 896 | * 897 | SUBROUTINE INDEXM 898 | * 899 | *--the NM molecule numbers are arranged in order of the molecule groups 900 | *--and, within the groups, in order of the cells and, within the cells, 901 | *--in order of the sub-cells 902 | * 903 | PARAMETER (MNM=100000,MNC=1,MNSC=1,MNSP=1,MNSG=1) 904 | * 905 | COMMON /MOLS / NM,PP(MNM),PV(3,MNM),IPL(MNM),IPS(MNM),IR(MNM) 906 | COMMON /CELLS / CC(MNC),CG(3,MNC),IC(2,MNC,MNSG),ISC(MNSC), 907 | & CCG(2,MNC,MNSG,MNSG),ISCG(2,MNSC,MNSG),IG(2,MNSG) 908 | COMMON /GAS / SP(5,MNSP),SPM(6,MNSP,MNSP),ISP(MNSP) 909 | * 910 | DO 200 MM=1,MNSG 911 | IG(2,MM)=0 912 | DO 50 NN=1,MNC 913 | IC(2,NN,MM)=0 914 | 50 CONTINUE 915 | DO 100 NN=1,MNSC 916 | ISCG(2,NN,MM)=0 917 | 100 CONTINUE 918 | 200 CONTINUE 919 | DO 300 N=1,NM 920 | LS=IPS(N) 921 | MG=ISP(LS) 922 | IG(2,MG)=IG(2,MG)+1 923 | MSC=IPL(N) 924 | ISCG(2,MSC,MG)=ISCG(2,MSC,MG)+1 925 | MC=ISC(MSC) 926 | IC(2,MC,MG)=IC(2,MC,MG)+1 927 | 300 CONTINUE 928 | *--number in molecule groups in the cells and sub-cells have been counte 929 | M=0 930 | DO 400 L=1,MNSG 931 | IG(1,L)=M 932 | *--the (start address -1) has been set for the groups 933 | M=M+IG(2,L) 934 | 400 CONTINUE 935 | DO 600 L=1,MNSG 936 | M=IG(1,L) 937 | DO 450 N=1,MNC 938 | IC(1,N,L)=M 939 | M=M+IC(2,N,L) 940 | 450 CONTINUE 941 | *--the (start address -1) has been set for the cells 942 | M=IG(1,L) 943 | DO 500 N=1,MNSC 944 | ISCG(1,N,L)=M 945 | M=M+ISCG(2,N,L) 946 | ISCG(2,N,L)=0 947 | 500 CONTINUE 948 | 600 CONTINUE 949 | *--the (start address -1) has been set for the sub-cells 950 | 951 | DO 700 N=1,NM 952 | LS=IPS(N) 953 | MG=ISP(LS) 954 | MSC=IPL(N) 955 | ISCG(2,MSC,MG)=ISCG(2,MSC,MG)+1 956 | K=ISCG(1,MSC,MG)+ISCG(2,MSC,MG) 957 | IR(K)=N 958 | *--the molecule number N has been set in the cross-reference array 959 | 700 CONTINUE 960 | RETURN 961 | END 962 | * SELECT.FOR 963 | * 964 | SUBROUTINE SELECT 965 | *--selects a potential collision pair and calculates the product of the 966 | *--collision cross-section and relative speed 967 | * 968 | PARAMETER (MNM=100000,MNC=1,MNSC=1,MNSP=1,MNSG=1) 969 | * 970 | COMMON /MOLS / NM,PP(MNM),PV(3,MNM),IPL(MNM),IPS(MNM),IR(MNM) 971 | COMMON /CELLS / CC(MNC),CG(3,MNC),IC(2,MNC,MNSG),ISC(MNSC), 972 | & CCG(2,MNC,MNSG,MNSG),ISCG(2,MNSC,MNSG),IG(2,MNSG) 973 | COMMON /GAS / SP(5,MNSP),SPM(6,MNSP,MNSP),ISP(MNSP) 974 | COMMON /CONST / PI,SPI,BOLTZ 975 | COMMON /ELAST / VRC(3),VRR,VR,L,M,LS,MS,CVR,MM,NN,N 976 | * 977 | K=INT(RF(0)*(IC(2,N,NN)-0.0001))+IC(1,N,NN)+1 978 | L=IR(K) 979 | *--the first molecule L has been chosen at random from group NN in cell 980 | 100 MSC=IPL(L) 981 | IF ((NN.EQ.MM.AND.ISCG(2,MSC,MM).EQ.1).OR. 982 | & (NN.NE.MM.AND.ISCG(2,MSC,MM).EQ.0)) THEN 983 | *--if MSC has no type MM molecule find the nearest sub-cell with one 984 | NST=1 985 | NSG=1 986 | 150 INC=NSG*NST 987 | NSG=-NSG 988 | NST=NST+1 989 | MSC=MSC+INC 990 | IF (MSC.LT.1.OR.MSC.GT.MNSC) GO TO 150 991 | IF (ISC(MSC).NE.N.OR.ISCG(2,MSC,MM).LT.1) GO TO 150 992 | END IF 993 | *--the second molecule M is now chosen at random from the group MM 994 | *--molecules that are in the sub-cell MSC 995 | K=INT(RF(0)*(ISCG(2,MSC,MM)-0.0001))+ISCG(1,MSC,MM)+1 996 | M=IR(K) 997 | IF (L.EQ.M) GO TO 100 998 | *--choose a new second molecule if the first is again chosen 999 | * 1000 | DO 200 K=1,3 1001 | VRC(K)=PV(K,L)-PV(K,M) 1002 | 200 CONTINUE 1003 | *--VRC(1 to 3) are the components of the relative velocity 1004 | VRR=VRC(1)**2+VRC(2)**2+VRC(3)**2 1005 | VR=SQRT(VRR) 1006 | *--VR is the relative speed 1007 | LS=IPS(L) 1008 | MS=IPS(M) 1009 | CVR=VR*SPM(1,LS,MS)*((2.*BOLTZ*SPM(2,LS,MS)/(SPM(5,LS,MS)*VRR)) 1010 | & **(SPM(3,LS,MS)-0.5))/SPM(6,LS,MS) 1011 | *--the collision cross-section is based on eqn (4.63) 1012 | RETURN 1013 | END 1014 | * ELASTIC.FOR 1015 | * 1016 | SUBROUTINE ELASTIC 1017 | * 1018 | *--generate the post-collision velocity components. 1019 | * 1020 | PARAMETER (MNM=100000,MNC=1,MNSC=1,MNSP=1,MNSG=1) 1021 | * 1022 | COMMON /MOLS / NM,PP(MNM),PV(3,MNM),IPL(MNM),IPS(MNM),IR(MNM) 1023 | COMMON /GAS / SP(5,MNSP),SPM(6,MNSP,MNSP),ISP(MNSP) 1024 | COMMON /CONST / PI,SPI,BOLTZ 1025 | COMMON /ELAST / VRC(3),VRR,VR,L,M,LS,MS,CVR,MM,NN,N 1026 | * 1027 | DIMENSION VRCP(3),VCCM(3) 1028 | *--VRCP(3) are the post-collision components of the relative velocity 1029 | *--VCCM(3) are the components of the centre of mass velocity 1030 | * 1031 | RML=SPM(5,LS,MS)/SP(5,MS) 1032 | RMM=SPM(5,LS,MS)/SP(5,LS) 1033 | DO 100 K=1,3 1034 | VCCM(K)=RML*PV(K,L)+RMM*PV(K,M) 1035 | 100 CONTINUE 1036 | *--VCCM defines the components of the centre-of-mass velocity (eqn 2.1) 1037 | IF (ABS(SPM(4,LS,MS)-1.).LT.1.E-3) THEN 1038 | *--use the VHS logic 1039 | B=2.*RF(0)-1. 1040 | *--B is the cosine of a random elevation angle 1041 | A=SQRT(1.-B*B) 1042 | VRCP(1)=B*VR 1043 | C=2.*PI*RF(0) 1044 | *--C is a random azimuth angle 1045 | VRCP(2)=A*COS(C)*VR 1046 | VRCP(3)=A*SIN(C)*VR 1047 | ELSE 1048 | *--use the VSS logic 1049 | B=2.*(RF(0)**SPM(4,LS,MS))-1. 1050 | *--B is the cosine of the deflection angle for the VSS model (eqn (11.8) 1051 | A=SQRT(1.-B*B) 1052 | C=2.*PI*RF(0) 1053 | OC=COS(C) 1054 | SC=SIN(C) 1055 | D=SQRT(VRC(2)**2+VRC(3)**2) 1056 | IF (D.GT.1.E-6) THEN 1057 | VRCP(1)=B*VRC(1)+A*SC*D 1058 | VRCP(2)=B*VRC(2)+A*(VR*VRC(3)*OC-VRC(1)*VRC(2)*SC)/D 1059 | VRCP(3)=B*VRC(3)-A*(VR*VRC(2)*OC+VRC(1)*VRC(3)*SC)/D 1060 | ELSE 1061 | VRCP(1)=B*VRC(1) 1062 | VRCP(2)=A*OC*VRC(1) 1063 | VRCP(3)=A*SC*VRC(1) 1064 | END IF 1065 | *--the post-collision rel. velocity components are based on eqn (2.22) 1066 | END IF 1067 | *--VRCP(1 to 3) are the components of the post-collision relative vel. 1068 | DO 200 K=1,3 1069 | PV(K,L)=VCCM(K)+VRCP(K)*RMM 1070 | PV(K,M)=VCCM(K)-VRCP(K)*RML 1071 | 200 CONTINUE 1072 | RETURN 1073 | END 1074 | * RVELC.FOR 1075 | * 1076 | SUBROUTINE RVELC(U,V,VMP) 1077 | * 1078 | *--generates two random velocity components U an V in an equilibrium 1079 | *--gas with most probable speed VMP (based on eqns (C10) and (C12)) 1080 | * 1081 | A=SQRT(-LOG(RF(0))) 1082 | B=6.283185308*RF(0) 1083 | U=A*SIN(B)*VMP 1084 | V=A*COS(B)*VMP 1085 | RETURN 1086 | END 1087 | * GAM.FOR 1088 | * 1089 | FUNCTION GAM(X) 1090 | * 1091 | *--calculates the Gamma function of X. 1092 | * 1093 | A=1. 1094 | Y=X 1095 | IF (Y.LT.1.) THEN 1096 | A=A/Y 1097 | ELSE 1098 | 50 Y=Y-1 1099 | IF (Y.GE.1.) THEN 1100 | A=A*Y 1101 | GO TO 50 1102 | END IF 1103 | END IF 1104 | GAM=A*(1.-0.5748646*Y+0.9512363*Y**2-0.6998588*Y**3+ 1105 | & 0.4245549*Y**4-0.1010678*Y**5) 1106 | RETURN 1107 | END 1108 | * LBS.FOR 1109 | * 1110 | SUBROUTINE LBS(XMA,XMB,ERM) 1111 | *--selects a Larsen-Borgnakke energy ratio using eqn (11.9) 1112 | 100 ERM=RF(0) 1113 | IF (XMA.LT.1.E-6.OR.XMB.LT.1.E-6) THEN 1114 | IF (XMA.LT.1.E-6.AND.XMB.LT.1.E-6) RETURN 1115 | IF (XMA.LT.1.E-6) P=(1.-ERM)**XMB 1116 | IF (XMB.LT.1.E-6) P=(1.-ERM)**XMA 1117 | ELSE 1118 | P=(((XMA+XMB)*ERM/XMA)**XMA)*(((XMA+XMB)*(1.-ERM)/XMB)**XMB) 1119 | END IF 1120 | IF (P.LT.RF(0)) GO TO 100 1121 | RETURN 1122 | END 1123 | * RF.FOR 1124 | * 1125 | FUNCTION RF(IDUM) 1126 | *--generates a uniformly distributed random fraction between 0 and 1 1127 | *----IDUM will generally be 0, but negative values may be used to 1128 | *------re-initialize the seed 1129 | SAVE MA,INEXT,INEXTP 1130 | PARAMETER (MBIG=1000000000,MSEED=161803398,MZ=0,FAC=1.E-9) 1131 | DIMENSION MA(55) 1132 | DATA IFF/0/ 1133 | IF (IDUM.LT.0.OR.IFF.EQ.0) THEN 1134 | IFF=1 1135 | MJ=MSEED-IABS(IDUM) 1136 | MJ=MOD(MJ,MBIG) 1137 | MA(55)=MJ 1138 | MK=1 1139 | DO 50 I=1,54 1140 | II=MOD(21*I,55) 1141 | MA(II)=MK 1142 | MK=MJ-MK 1143 | IF (MK.LT.MZ) MK=MK+MBIG 1144 | MJ=MA(II) 1145 | 50 CONTINUE 1146 | DO 100 K=1,4 1147 | DO 60 I=1,55 1148 | MA(I)=MA(I)-MA(1+MOD(I+30,55)) 1149 | IF (MA(I).LT.MZ) MA(I)=MA(I)+MBIG 1150 | 60 CONTINUE 1151 | 100 CONTINUE 1152 | INEXT=0 1153 | INEXTP=31 1154 | END IF 1155 | 200 INEXT=INEXT+1 1156 | IF (INEXT.EQ.56) INEXT=1 1157 | INEXTP=INEXTP+1 1158 | IF (INEXTP.EQ.56) INEXTP=1 1159 | MJ=MA(INEXT)-MA(INEXTP) 1160 | IF (MJ.LT.MZ) MJ=MJ+MBIG 1161 | MA(INEXT)=MJ 1162 | RF=MJ*FAC 1163 | IF (RF.GT.1.E-8.AND.RF.LT.0.99999999) RETURN 1164 | GO TO 200 1165 | END 1166 | * DATA0V.FOR 1167 | * 1168 | * 1169 | SUBROUTINE DATA0V 1170 | * 1171 | *--defines the data for a particular run of DSMC0V.FOR. 1172 | * 1173 | PARAMETER (MNM=100000,MNC=1,MNSC=1,MNSP=1,MNSG=1) 1174 | * 1175 | DOUBLE PRECISION COL(MNSP,MNSP),MOVT,NCOL,SELT,SEPT,CS(7,MNC,MNSP) 1176 | * 1177 | COMMON /GAS / SP(5,MNSP),SPM(6,MNSP,MNSP),ISP(MNSP) 1178 | COMMON /GASR / SPR(3,MNSP,MNSP),ISPR(3,MNSP),CT(MNC) 1179 | COMMON /GASV / SPV(MNSP),ISPV(MNSP),SPVM(2,MNSP,MNSP), 1180 | & SVIB(MNC,MNSP) 1181 | COMMON /SAMP / COL,NCOL,MOVT,SELT,SEPT,CS,TIME,NPR,NSMP,FND,FTMP, 1182 | & TIMI,FSP(MNSP),ISPD 1183 | COMMON /COMP / FNUM,DTM,NIS,NSP,NPS,NPT 1184 | COMMON /GEOM / CW,NSC,XF,XR 1185 | * 1186 | *--Set data (must be consistent with PARAMETER variables) 1187 | * 1188 | FND=1.E20 1189 | *--FND is the number densty 1190 | FTMP=5000. 1191 | *--FTMP is the temperature 1192 | FSP(1)=1. 1193 | *--FSP(N) is the number fraction of species N 1194 | FNUM=1.0E15 1195 | *--FNUM is the number of real molecules represented by a simulated mol. 1196 | DTM=2.E-5 1197 | *--DTM is the time step 1198 | NSC=1 1199 | *--NSC is the number of sub-cells in each cell 1200 | XF=0. 1201 | XR=1. 1202 | *--the simulated region is from x=XF to x=XR 1203 | SP(1,1)=3.5E-10 1204 | SP(2,1)=273. 1205 | SP(3,1)=0.75 1206 | SP(4,1)=1. 1207 | SP(5,1)=5.E-26 1208 | *--SP(1,N) is the molecular diameter of species N 1209 | *--SP(2,N) is the reference temperature 1210 | *--SP(3,N) is the viscosity-temperatire index 1211 | *--SP(4,N) is the reciprocal of the VSS scattering parameter 1212 | *--SP(5,N) is the molecular mass of species N 1213 | ISP(1)=1 1214 | *--ISP(N) is the group for species N 1215 | ISPR(1,1)=2 1216 | SPR(1,1,1)=5. 1217 | ISPR(2,1)=0 1218 | *--ISPR(1,N) is the number of degrees of freedom of species N 1219 | *--SPR(1,N,M) is the constant in the polynomial for the rotational 1220 | *--relaxation collision number of species N 1221 | *--ISPR(2,N) is 0,1 for constant, polynomial for collision number 1222 | ISPV(1)=1 1223 | SPV(1)=2000. 1224 | *--ISPV(N) species N has a vibrational mode 1225 | *--SPV(N) is the characteristic vibrational temp. 1226 | * 1227 | *--one of the following pairs of statements must be commented out 1228 | * 1229 | *--the following two statements are for the constant vib. relax. rate 1230 | *--SPVM(1,N,K) is a constant vib. relax. collision number 1231 | *--SPVM(2,N,K) is negative to indicate the constant collision number 1232 | * 1233 | *--the following two statements specify a collision temperature 1234 | *----dependent vibrational relaxation rate 1235 | SPVM(1,1,1)=10. 1236 | SPVM(2,1,1)=100. 1237 | *--the constants C1 and C2 in eqn (6.53) are 10. and 100., respectively 1238 | NIS=1 1239 | *--NIS is the number of time steps between samples 1240 | NSP=1 1241 | *--NSP is the number of samples between restart and output file updates 1242 | NPS=250 1243 | *--NPS is the number of updates to reach assumed steady flow 1244 | NPT=1000 1245 | *--NPT is the number of file updates to STOP 1246 | * 1247 | RETURN 1248 | END 1249 | --------------------------------------------------------------------------------