📄 collm.for
字号:
* 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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -