collm.for
来自「给予DSMC的二维CFD模拟FORTRAN代码」· FOR 代码 · 共 65 行
FOR
65 行
* COLLM.FOR
*
SUBROUTINE COLLM
*
*--calculates collisions appropriate to DTM in a monatomic gas mixture
*
INCLUDE 'dsmc0.h'
COMMON /ELAST / VRC(3),VRR,VR,L,M,LS,MS,CVR,MM,NN,N
*
*--VRC(3) are the pre-collision components of the relative velocity
*
DO 100 N=1,MNC
*--consider collisions in cell N
DO 50 NN=1,MNSG
DO 20 MM=1,MNSG
SN=0.
DO 10 K=1,MNSP
IF (ISP(K).EQ.MM) SN=SN+CS(1,N,K)
10 CONTINUE
IF (SN.GT.1.) THEN
AVN=SN/FLOAT(NSMP)
ELSE
AVN=IC(2,N,MM)
END IF
*--AVN is the average number of group MM molecules in the cell
ASEL=0.5*IC(2,N,NN)*AVN*FNUM*CCG(1,N,NN,MM)*DTM/CC(N)
& +CCG(2,N,NN,MM)
*--ASEL is the number of pairs to be selected, see eqn (11.5)
NSEL=ASEL
CCG(2,N,NN,MM)=ASEL-NSEL
IF (NSEL.GT.0) THEN
IF (((NN.NE.MM).AND.(IC(2,N,NN).LT.1.OR.IC(2,N,MM).LT.1))
& .OR.((NN.EQ.MM).AND.(IC(2,N,NN).LT.2))) THEN
CCG(2,N,NN,MM)=CCG(2,N,NN,MM)+NSEL
*--if there are insufficient molecules to calculate collisions,
*--the number NSEL is added to the remainer CCG(2,N,NN,MM)
ELSE
CVM=CCG(1,N,NN,MM)
SELT=SELT+NSEL
DO 12 ISEL=1,NSEL
*
CALL SELECT
*
IF (CVR.GT.CVM) CVM=CVR
*--if necessary, the maximum product in CVM is upgraded
IF (RF(0).LT.CVR/CCG(1,N,NN,MM)) THEN
*--the collision is accepted with the probability of eqn (11.6)
NCOL=NCOL+1
SEPT=SEPT+ABS(PP(1,L)-PP(1,M))
COL(LS,MS)=COL(LS,MS)+1.D00
COL(MS,LS)=COL(MS,LS)+1.D00
*
CALL ELASTIC
*
END IF
12 CONTINUE
CCG(1,N,NN,MM)=CVM
END IF
END IF
20 CONTINUE
50 CONTINUE
100 CONTINUE
RETURN
END
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?