For multiple-species collisions J. R. Martin-Solis et al. PoP 22, 092512 (2015) if (params%collisions .AND. (TRIM(params%collisions_model) .EQ. 'MULTIPLE_SPECIES')) then call collision_force(spp(ii),U_os,Fcoll) U_RC = U_RC + a*Fcoll/spp(ii)%q end if
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(SPECIES), | intent(in) | :: | spp | |||
real(kind=rp), | intent(in), | DIMENSION(3) | :: | U | ||
real(kind=rp), | intent(out), | DIMENSION(3) | :: | Fcoll |
subroutine collision_force(spp,U,Fcoll)
!! For multiple-species collisions
!! J. R. Martin-Solis et al. PoP 22, 092512 (2015)
!! if (params%collisions .AND. (TRIM(params%collisions_model) .EQ.
!! 'MULTIPLE_SPECIES')) then call collision_force(spp(ii),U_os,Fcoll)
!! U_RC = U_RC + a*Fcoll/spp(ii)%q end if
TYPE(SPECIES), INTENT(IN) :: spp
REAL(rp), DIMENSION(3), INTENT(IN) :: U
REAL(rp), DIMENSION(3), INTENT(OUT) :: Fcoll
REAL(rp), DIMENSION(3) :: V
REAL(rp), DIMENSION(3) :: Fcolle
REAL(rp), DIMENSION(3) :: Fcolli
REAL(rp) :: gamma
REAL(rp) :: tmp
REAL(rp) :: ae
REAL(rp) :: ai
REAL(rp) :: Clog_ef
REAL(rp) :: Clog_eb
REAL(rp) :: Clog_eH
REAL(rp) :: Clog_eZj
REAL(rp) :: Clog_eZo
INTEGER :: ppi
gamma = SQRT(1.0_rp + DOT_PRODUCT(U,U))
V = U/gamma
tmp = (gamma - 1.0_rp)*SQRT(gamma + 1.0_rp)
Clog_ef = log(0.5_rp*tmp*(cparams_ms%rD/cparams_ms%re)/gamma)
ae = cparams_ms%nef*Clog_ef
do ppi=1_idef,cparams_ms%num_impurity_species
Clog_eb = log(tmp*cparams_ms%Ee_IZj(ppi))
ae = ae + cparams_ms%neb(ppi)*Clog_eb
end do
tmp = (gamma**2 - 1.0_rp)/gamma
Clog_eH = log( tmp*(cparams_ms%rD/cparams_ms%re) )
ai = cparams_ms%nH*Clog_eH
do ppi=1_idef,cparams_ms%num_impurity_species
Clog_eZj = log( cparams_ms%rD/(cparams_ms%Zj(ppi)* &
cparams_ms%re*cparams_ms%Ee_IZj(ppi)) )
Clog_eZo = log(tmp*cparams_ms%Ee_IZj(ppi))
ai = ai + &
cparams_ms%nz(ppi)*(Clog_eZj*cparams_ms%Zj(ppi)**2 + &
Clog_eZo*cparams_ms%Zo(ppi)**2)
end do
tmp = gamma*(gamma + 1.0_rp)/(SQRT(DOT_PRODUCT(U,U))**3)
Fcolle = -4.0_rp*C_PI*ae*spp%m*(cparams_ms%re**2)*tmp*U
tmp = gamma/(SQRT(DOT_PRODUCT(U,U))**3)
Fcolli = -4.0_rp*C_PI*ai*spp%m*(cparams_ms%re**2)*tmp*U
Fcoll = Fcolle + Fcolli
end subroutine collision_force