Commit e201619c authored by Juan Caneses Marin (nfc)'s avatar Juan Caneses Marin (nfc)
Browse files

Starting development of Coulomb collisions and interpolation to particles

parent 548748f5
Loading
Loading
Loading
Loading
+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)
! =======================================================================================================
+25 −8
Original line number Diff line number Diff line
@@ -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
@@ -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
@@ -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.
@@ -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))
@@ -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

! --------------------------------------------------------------------------
+4 −1
Original line number Diff line number Diff line
@@ -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
@@ -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