Loading src/CoulombCollisions.f90 +24 −0 Original line number Diff line number Diff line ! ======================================================================================================= SUBROUTINE ApplyCollisionOperator(plasma,mesh,params) ! ======================================================================================================= USE LOCAL USE PhysicalConstants USE dataTYP USE OMP_LIB IMPLICIT NONE ! Define interface variables: TYPE(plasmaTYP), INTENT(INOUT) :: plasma TYPE(meshTYP) , INTENT(IN) :: mesh TYPE(paramsTYP), INTENT(IN) :: params ! Define local variables: INTEGER(i4) :: i, ix ! Interpolate n and U to particle positions: END SUBROUTINE ApplyCollisionOperator ! ======================================================================================================= SUBROUTINE collisionOperator(i,plasma,params) ! ======================================================================================================= Loading src/Modules.f90 +25 −8 Original line number Diff line number Diff line Loading @@ -260,6 +260,7 @@ END TYPE paramsTYP TYPE plasmaTYP REAL(r8) , DIMENSION(:), ALLOCATABLE :: zp, kep,xip, a REAL(r8) , DIMENSION(:), ALLOCATABLE :: wL, wC, wR REAL(r8) , DIMENSION(:), ALLOCATABLE :: n, U, Tpar, Tper, B, E, dB, ddB INTEGER(i4), DIMENSION(:), ALLOCATABLE :: m, f1, f2, f3, f4 REAL(r8) , DIMENSION(:), ALLOCATABLE :: dE1, dE2, dE3, dE4, dE5 REAL(r8) , DIMENSION(:), ALLOCATABLE :: udE3, udErf, doppler Loading Loading @@ -337,11 +338,12 @@ SUBROUTINE AllocateMesh(mesh,params) END SUBROUTINE AllocateMesh ! ---------------------------------------------------------------------------- SUBROUTINE InitializeMesh(mesh,params) SUBROUTINE InitializeMesh(mesh,params,fieldspline) IMPLICIT NONE ! Declare interface variables: TYPE(meshTYP) , INTENT(INOUT) :: mesh TYPE(paramsTYP) , INTENT(IN) :: params TYPE(fieldSplineTYP), INTENT(IN) :: fieldspline ! Declare local variables: INTEGER(i4), DIMENSION(params%NZmesh) :: m Loading @@ -361,16 +363,16 @@ SUBROUTINE InitializeMesh(mesh,params) mesh%zm = (m-1)*mesh%dzm + 0.5*mesh%dzm + mesh%zmin ! Initialize all mesh-defined quantities: mesh%n = 0. mesh%n = 0. ! interpolation? mesh%nU = 0. mesh%unU = 0. mesh%nUE = 0. mesh%P11 = 0. mesh%P22 = 0. mesh%B = 0. mesh%B = 0. ! Interpolation? mesh%E = 0. mesh%dB = 0. mesh%ddB = 0. mesh%dB = 0. ! Interpolation? mesh%ddB = 0. ! Interpolation? mesh%U = 0. mesh%Ppar = 0. mesh%Pper = 0. Loading @@ -395,6 +397,8 @@ SUBROUTINE AllocatePlasma(plasma,params) ! Allocate memory: for all computational particles ALLOCATE(plasma%zp(NC) ,plasma%kep(NC) ,plasma%xip(NC) ,plasma%a(NC)) ALLOCATE(plasma%m(NC) ,plasma%wL(NC) ,plasma%wC(NC) ,plasma%wR(NC)) ALLOCATE(plasma%n(NC) ,plasma%U(NC) ,plasma%Tpar(NC),plasma%Tper(NC)) ALLOCATE(plasma%B(NC) ,plasma%E(NC) ,plasma%dB(NC) ,plasma%ddB(NC)) ALLOCATE(plasma%f1(NC) ,plasma%f2(NC) ,plasma%f3(NC) ,plasma%f4(NC)) ALLOCATE(plasma%dE1(NC) ,plasma%dE2(NC) ,plasma%dE3(NC) ,plasma%dE4(NC), plasma%dE5(NC)) ALLOCATE(plasma%udErf(NC)) Loading Loading @@ -452,6 +456,19 @@ SUBROUTINE InitializePlasma(plasma,params) END DO !$OMP END PARALLEL DO !$OMP PARALLEL DO DO i = 1,params%NC plasma%n(i) = params%ne0 plasma%U(i) = 0. plasma%Tpar(i) = params%Ti0 plasma%Tper(i) = params%Ti0 plasma%B(i) = 0. plasma%E(i) = 0. plasma%dB(i) = 0. plasma%ddB(i) = 0. END DO !$OMP END PARALLEL DO END SUBROUTINE InitializePlasma ! -------------------------------------------------------------------------- Loading src/linFP.f90 +4 −1 Original line number Diff line number Diff line Loading @@ -93,7 +93,7 @@ CALL ComputeFieldSpline(fieldspline) ! Initialize simulation variables: ! ============================================================================== CALL InitializeMesh(mesh,params) CALL InitializeMesh(mesh,params,fieldspline) CALL InitializePlasma(plasma,params) !$OMP PARALLEL Loading Loading @@ -138,6 +138,9 @@ NS_loop: DO j = 1,params%NS ! Calculate moments and extrapolate to mesh: CALL ExtrapolateMomentsToMesh(plasma,mesh,params) ! Apply collision operator: CALL ApplyCollisionOperator(plasma,mesh,params) !$OMP PARALLEL DO REDUCTION(+:uN1,uN2,N1,N2,N3,N4,E1,E2,uE3,E4) ! Calculate particle and energy rates: NC_loop2: DO i = 1,params%NC Loading Loading
src/CoulombCollisions.f90 +24 −0 Original line number Diff line number Diff line ! ======================================================================================================= SUBROUTINE ApplyCollisionOperator(plasma,mesh,params) ! ======================================================================================================= USE LOCAL USE PhysicalConstants USE dataTYP USE OMP_LIB IMPLICIT NONE ! Define interface variables: TYPE(plasmaTYP), INTENT(INOUT) :: plasma TYPE(meshTYP) , INTENT(IN) :: mesh TYPE(paramsTYP), INTENT(IN) :: params ! Define local variables: INTEGER(i4) :: i, ix ! Interpolate n and U to particle positions: END SUBROUTINE ApplyCollisionOperator ! ======================================================================================================= SUBROUTINE collisionOperator(i,plasma,params) ! ======================================================================================================= Loading
src/Modules.f90 +25 −8 Original line number Diff line number Diff line Loading @@ -260,6 +260,7 @@ END TYPE paramsTYP TYPE plasmaTYP REAL(r8) , DIMENSION(:), ALLOCATABLE :: zp, kep,xip, a REAL(r8) , DIMENSION(:), ALLOCATABLE :: wL, wC, wR REAL(r8) , DIMENSION(:), ALLOCATABLE :: n, U, Tpar, Tper, B, E, dB, ddB INTEGER(i4), DIMENSION(:), ALLOCATABLE :: m, f1, f2, f3, f4 REAL(r8) , DIMENSION(:), ALLOCATABLE :: dE1, dE2, dE3, dE4, dE5 REAL(r8) , DIMENSION(:), ALLOCATABLE :: udE3, udErf, doppler Loading Loading @@ -337,11 +338,12 @@ SUBROUTINE AllocateMesh(mesh,params) END SUBROUTINE AllocateMesh ! ---------------------------------------------------------------------------- SUBROUTINE InitializeMesh(mesh,params) SUBROUTINE InitializeMesh(mesh,params,fieldspline) IMPLICIT NONE ! Declare interface variables: TYPE(meshTYP) , INTENT(INOUT) :: mesh TYPE(paramsTYP) , INTENT(IN) :: params TYPE(fieldSplineTYP), INTENT(IN) :: fieldspline ! Declare local variables: INTEGER(i4), DIMENSION(params%NZmesh) :: m Loading @@ -361,16 +363,16 @@ SUBROUTINE InitializeMesh(mesh,params) mesh%zm = (m-1)*mesh%dzm + 0.5*mesh%dzm + mesh%zmin ! Initialize all mesh-defined quantities: mesh%n = 0. mesh%n = 0. ! interpolation? mesh%nU = 0. mesh%unU = 0. mesh%nUE = 0. mesh%P11 = 0. mesh%P22 = 0. mesh%B = 0. mesh%B = 0. ! Interpolation? mesh%E = 0. mesh%dB = 0. mesh%ddB = 0. mesh%dB = 0. ! Interpolation? mesh%ddB = 0. ! Interpolation? mesh%U = 0. mesh%Ppar = 0. mesh%Pper = 0. Loading @@ -395,6 +397,8 @@ SUBROUTINE AllocatePlasma(plasma,params) ! Allocate memory: for all computational particles ALLOCATE(plasma%zp(NC) ,plasma%kep(NC) ,plasma%xip(NC) ,plasma%a(NC)) ALLOCATE(plasma%m(NC) ,plasma%wL(NC) ,plasma%wC(NC) ,plasma%wR(NC)) ALLOCATE(plasma%n(NC) ,plasma%U(NC) ,plasma%Tpar(NC),plasma%Tper(NC)) ALLOCATE(plasma%B(NC) ,plasma%E(NC) ,plasma%dB(NC) ,plasma%ddB(NC)) ALLOCATE(plasma%f1(NC) ,plasma%f2(NC) ,plasma%f3(NC) ,plasma%f4(NC)) ALLOCATE(plasma%dE1(NC) ,plasma%dE2(NC) ,plasma%dE3(NC) ,plasma%dE4(NC), plasma%dE5(NC)) ALLOCATE(plasma%udErf(NC)) Loading Loading @@ -452,6 +456,19 @@ SUBROUTINE InitializePlasma(plasma,params) END DO !$OMP END PARALLEL DO !$OMP PARALLEL DO DO i = 1,params%NC plasma%n(i) = params%ne0 plasma%U(i) = 0. plasma%Tpar(i) = params%Ti0 plasma%Tper(i) = params%Ti0 plasma%B(i) = 0. plasma%E(i) = 0. plasma%dB(i) = 0. plasma%ddB(i) = 0. END DO !$OMP END PARALLEL DO END SUBROUTINE InitializePlasma ! -------------------------------------------------------------------------- Loading
src/linFP.f90 +4 −1 Original line number Diff line number Diff line Loading @@ -93,7 +93,7 @@ CALL ComputeFieldSpline(fieldspline) ! Initialize simulation variables: ! ============================================================================== CALL InitializeMesh(mesh,params) CALL InitializeMesh(mesh,params,fieldspline) CALL InitializePlasma(plasma,params) !$OMP PARALLEL Loading Loading @@ -138,6 +138,9 @@ NS_loop: DO j = 1,params%NS ! Calculate moments and extrapolate to mesh: CALL ExtrapolateMomentsToMesh(plasma,mesh,params) ! Apply collision operator: CALL ApplyCollisionOperator(plasma,mesh,params) !$OMP PARALLEL DO REDUCTION(+:uN1,uN2,N1,N2,N3,N4,E1,E2,uE3,E4) ! Calculate particle and energy rates: NC_loop2: DO i = 1,params%NC Loading