Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
Gyacomo
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Antoine Cyril David Hoffmann
Gyacomo
Commits
bf08f879
Commit
bf08f879
authored
2 years ago
by
Antoine Cyril David Hoffmann
Browse files
Options
Downloads
Patches
Plain Diff
add underscore to function only variables
parent
4f1ba051
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/moments_eq_rhs_mod.F90
+79
-75
79 additions, 75 deletions
src/moments_eq_rhs_mod.F90
with
79 additions
and
75 deletions
src/moments_eq_rhs_mod.F90
+
79
−
75
View file @
bf08f879
...
@@ -24,7 +24,7 @@ SUBROUTINE compute_moments_eq_rhs
...
@@ -24,7 +24,7 @@ SUBROUTINE compute_moments_eq_rhs
xphij_i
,
xphijp1_i
,
xphijm1_i
,
xpsij_i
,
xpsijp1_i
,
xpsijm1_i
,&
xphij_i
,
xphijp1_i
,
xphijm1_i
,
xpsij_i
,
xpsijp1_i
,
xpsijm1_i
,&
kernel_i
,
nadiab_moments_i
,
ddz_nipj
,
interp_nipj
,
Sipj
,&
kernel_i
,
nadiab_moments_i
,
ddz_nipj
,
interp_nipj
,
Sipj
,&
moments_i
(
ipgs_i
:
ipge_i
,
ijgs_i
:
ijge_i
,
ikys
:
ikye
,
ikxs
:
ikxe
,
izgs
:
izge
,
updatetlevel
),&
moments_i
(
ipgs_i
:
ipge_i
,
ijgs_i
:
ijge_i
,
ikys
:
ikye
,
ikxs
:
ikxe
,
izgs
:
izge
,
updatetlevel
),&
TColl_i
,
ddzND_nipj
,
&
TColl_i
,
ddzND_nipj
,
diff_pi_coeff
,
diff_ji_coeff
,
&
moments_rhs_i
(
ips_i
:
ipe_i
,
ijs_i
:
ije_i
,
ikys
:
ikye
,
ikxs
:
ikxe
,
izs
:
ize
,
updatetlevel
))
moments_rhs_i
(
ips_i
:
ipe_i
,
ijs_i
:
ije_i
,
ikys
:
ikye
,
ikxs
:
ikxe
,
izs
:
ize
,
updatetlevel
))
!compute ion moments_eq_rhs
!compute ion moments_eq_rhs
...
@@ -36,7 +36,7 @@ SUBROUTINE compute_moments_eq_rhs
...
@@ -36,7 +36,7 @@ SUBROUTINE compute_moments_eq_rhs
xphij_e
,
xphijp1_e
,
xphijm1_e
,
xpsij_e
,
xpsijp1_e
,
xpsijm1_e
,&
xphij_e
,
xphijp1_e
,
xphijm1_e
,
xpsij_e
,
xpsijp1_e
,
xpsijm1_e
,&
kernel_e
,
nadiab_moments_e
,
ddz_nepj
,
interp_nepj
,
Sepj
,&
kernel_e
,
nadiab_moments_e
,
ddz_nepj
,
interp_nepj
,
Sepj
,&
moments_e
(
ipgs_e
:
ipge_e
,
ijgs_e
:
ijge_e
,
ikys
:
ikye
,
ikxs
:
ikxe
,
izgs
:
izge
,
updatetlevel
),&
moments_e
(
ipgs_e
:
ipge_e
,
ijgs_e
:
ijge_e
,
ikys
:
ikye
,
ikxs
:
ikxe
,
izgs
:
izge
,
updatetlevel
),&
TColl_e
,
ddzND_nepj
,&
TColl_e
,
ddzND_nepj
,
diff_pe_coeff
,
diff_je_coeff
,
&
moments_rhs_e
(
ips_e
:
ipe_e
,
ijs_e
:
ije_e
,
ikys
:
ikye
,
ikxs
:
ikxe
,
izs
:
ize
,
updatetlevel
))
moments_rhs_e
(
ips_e
:
ipe_e
,
ijs_e
:
ije_e
,
ikys
:
ikye
,
ikxs
:
ikxe
,
izs
:
ize
,
updatetlevel
))
CONTAINS
CONTAINS
...
@@ -47,45 +47,46 @@ SUBROUTINE compute_moments_eq_rhs
...
@@ -47,45 +47,46 @@ SUBROUTINE compute_moments_eq_rhs
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! This routine assemble the RHS of the moment hierarchy equations. It uses
! This routine assemble the RHS of the moment hierarchy equations. It uses
! linear coefficients that are stored in arrays (xn*, yn* and zn*) computed in
! linear coefficients that are stored in arrays (xn*, yn* and zn*) computed in
! numerics_mod.F90. Otherwise it simply adds the collision term TColl that is
! numerics_mod.F90. Otherwise it simply adds the collision term TColl
_
that is
! computed in collision_mod.F90 and the nonlinear term Sapj computed in
! computed in collision_mod.F90 and the nonlinear term Sapj
_
computed in
! nonlinear_mod.F90.
! nonlinear_mod.F90.
! All arguments of the subroutines are inputs only except the last one,
! All arguments of the subroutines are inputs only except the last one,
! moments_rhs_ that will contain the sum of every terms in the RHS.
! moments_rhs_ that will contain the sum of every terms in the RHS.
!_____________________________________________________________________________!
!_____________________________________________________________________________!
SUBROUTINE
moments_eq_rhs
(
ips
,
ipe
,
ipgs
,
ipge
,
ijs
,
ije
,
ijgs
,
ijge
,
jarray
,
parray
,&
SUBROUTINE
moments_eq_rhs
(
ips
_
,
ipe
_
,
ipgs
_
,
ipge
_
,
ijs
_
,
ije
_
,
ijgs
_
,
ijge
_
,
jarray
_
,
parray
_
,&
xnapj
,
xnapp2j
,
xnapm2j
,
xnapjp1
,
xnapjm1
,
xnapp1j
,
xnapm1j
,&
xnapj
_
,
xnapp2j
_
,
xnapm2j
_
,
xnapjp1
_
,
xnapjm1
_
,
xnapp1j
_
,
xnapm1j
_
,&
ynapp1j
,
ynapp1jm1
,
ynapm1j
,
ynapm1jm1
,
&
ynapp1j
_
,
ynapp1jm1
_
,
ynapm1j
_
,
ynapm1jm1
_
,
&
znapm1j
,
znapm1jp1
,
znapm1jm1
,
&
znapm1j
_
,
znapm1jp1
_
,
znapm1jm1
_
,
&
xphij
,
xphijp1
,
xphijm1
,
xpsij
,
xpsijp1
,
xpsijm1
,&
xphij
_
,
xphijp1
_
,
xphijm1
_
,
xpsij
_
,
xpsijp1
_
,
xpsijm1
_
,&
kernel
,
nadiab_moments
,
ddz_napj
,
interp_napj
,
Sapj
,&
kernel
_
,
nadiab_moments
_
,
ddz_napj
_
,
interp_napj
_
,
Sapj
_
,&
moments
,
TColl
,
ddzND_napj
,
moments_rhs
)
moments
_
,
TColl
_
,
ddzND_napj
_
,
diff_p_coeff_
,
diff_j_coeff_
,
moments_rhs
_
)
IMPLICIT
NONE
IMPLICIT
NONE
!! INPUTS
!! INPUTS
INTEGER
,
INTENT
(
IN
)
::
ips
,
ipe
,
ipgs
,
ipge
,
ijs
,
ije
,
ijgs
,
ijge
INTEGER
,
INTENT
(
IN
)
::
ips
_
,
ipe
_
,
ipgs
_
,
ipge
_
,
ijs
_
,
ije
_
,
ijgs
_
,
ijge
_
INTEGER
,
DIMENSION
(
ips
:
ipe
),
INTENT
(
IN
)
::
parray
INTEGER
,
DIMENSION
(
ips
_
:
ipe
_
),
INTENT
(
IN
)
::
parray
_
INTEGER
,
DIMENSION
(
ijs
:
ije
),
INTENT
(
IN
)
::
jarray
INTEGER
,
DIMENSION
(
ijs
_
:
ije
_
),
INTENT
(
IN
)
::
jarray
_
REAL
(
dp
),
DIMENSION
(
ips
:
ipe
,
ijs
:
ije
),
INTENT
(
IN
)
::
xnapj
REAL
(
dp
),
DIMENSION
(
ips
_
:
ipe
_
,
ijs
_
:
ije
_
),
INTENT
(
IN
)
::
xnapj
_
REAL
(
dp
),
DIMENSION
(
ips
:
ipe
),
INTENT
(
IN
)
::
xnapp2j
,
xnapm2j
REAL
(
dp
),
DIMENSION
(
ips
_
:
ipe
_
),
INTENT
(
IN
)
::
xnapp2j
_
,
xnapm2j
_
REAL
(
dp
),
DIMENSION
(
ijs
:
ije
),
INTENT
(
IN
)
::
xnapjp1
,
xnapjm1
REAL
(
dp
),
DIMENSION
(
ijs
_
:
ije
_
),
INTENT
(
IN
)
::
xnapjp1
_
,
xnapjm1
_
REAL
(
dp
),
DIMENSION
(
ips
:
ipe
),
INTENT
(
IN
)
::
xnapp1j
,
xnapm1j
REAL
(
dp
),
DIMENSION
(
ips
_
:
ipe
_
),
INTENT
(
IN
)
::
xnapp1j
_
,
xnapm1j
_
REAL
(
dp
),
DIMENSION
(
ips
:
ipe
,
ijs
:
ije
),
INTENT
(
IN
)
::
ynapp1j
,
ynapp1jm1
,
ynapm1j
,
ynapm1jm1
REAL
(
dp
),
DIMENSION
(
ips
_
:
ipe
_
,
ijs
_
:
ije
_
),
INTENT
(
IN
)
::
ynapp1j
_
,
ynapp1jm1
_
,
ynapm1j
_
,
ynapm1jm1
_
REAL
(
dp
),
DIMENSION
(
ips
:
ipe
,
ijs
:
ije
),
INTENT
(
IN
)
::
znapm1j
,
znapm1jp1
,
znapm1jm1
REAL
(
dp
),
DIMENSION
(
ips
_
:
ipe
_
,
ijs
_
:
ije
_
),
INTENT
(
IN
)
::
znapm1j
_
,
znapm1jp1
_
,
znapm1jm1
_
REAL
(
dp
),
DIMENSION
(
ips
:
ipe
,
ijs
:
ije
),
INTENT
(
IN
)
::
xphij
,
xphijp1
,
xphijm1
REAL
(
dp
),
DIMENSION
(
ips
_
:
ipe
_
,
ijs
_
:
ije
_
),
INTENT
(
IN
)
::
xphij
_
,
xphijp1
_
,
xphijm1
_
REAL
(
dp
),
DIMENSION
(
ips
:
ipe
,
ijs
:
ije
),
INTENT
(
IN
)
::
xpsij
,
xpsijp1
,
xpsijm1
REAL
(
dp
),
DIMENSION
(
ips
_
:
ipe
_
,
ijs
_
:
ije
_
),
INTENT
(
IN
)
::
xpsij
_
,
xpsijp1
_
,
xpsijm1
_
REAL
(
dp
),
DIMENSION
(
ijgs
:
ijge
,
ikys
:
ikye
,
ikxs
:
ikxe
,
izgs
:
izge
,
0
:
1
),
INTENT
(
IN
)
::
kernel
REAL
(
dp
),
DIMENSION
(
ijgs
_
:
ijge
_
,
ikys
:
ikye
,
ikxs
:
ikxe
,
izgs
:
izge
,
0
:
1
),
INTENT
(
IN
)
::
kernel
_
COMPLEX
(
dp
),
DIMENSION
(
ipgs
:
ipge
,
ijgs
:
ijge
,
ikys
:
ikye
,
ikxs
:
ikxe
,
izgs
:
izge
),
INTENT
(
IN
)
::
nadiab_moments
COMPLEX
(
dp
),
DIMENSION
(
ipgs_
:
ipge_
,
ijgs_
:
ijge_
,
ikys
:
ikye
,
ikxs
:
ikxe
,
izgs
:
izge
),
INTENT
(
IN
)
::
nadiab_moments_
COMPLEX
(
dp
),
DIMENSION
(
ipgs
:
ipge
,
ijgs
:
ijge
,
ikys
:
ikye
,
ikxs
:
ikxe
,
izgs
:
izge
),
INTENT
(
IN
)
::
ddz_napj
COMPLEX
(
dp
),
DIMENSION
(
ipgs_
:
ipge_
,
ijgs_
:
ijge_
,
ikys
:
ikye
,
ikxs
:
ikxe
,
izgs
:
izge
),
INTENT
(
IN
)
::
ddz_napj_
COMPLEX
(
dp
),
DIMENSION
(
ipgs
:
ipge
,
ijgs
:
ijge
,
ikys
:
ikye
,
ikxs
:
ikxe
,
izgs
:
izge
),
INTENT
(
IN
)
::
interp_napj
COMPLEX
(
dp
),
DIMENSION
(
ipgs_
:
ipge_
,
ijgs_
:
ijge_
,
ikys
:
ikye
,
ikxs
:
ikxe
,
izgs
:
izge
),
INTENT
(
IN
)
::
interp_napj_
COMPLEX
(
dp
),
DIMENSION
(
ips
:
ipe
,
ijs
:
ije
,
ikys
:
ikye
,
ikxs
:
ikxe
,
izs
:
ize
),
INTENT
(
IN
)
::
Sapj
COMPLEX
(
dp
),
DIMENSION
(
ips_
:
ipe_
,
ijs_
:
ije_
,
ikys
:
ikye
,
ikxs
:
ikxe
,
izs
:
ize
),
INTENT
(
IN
)
::
Sapj_
COMPLEX
(
dp
),
DIMENSION
(
ipgs
:
ipge
,
ijgs
:
ijge
,
ikys
:
ikye
,
ikxs
:
ikxe
,
izgs
:
izge
),
INTENT
(
IN
)
::
moments
COMPLEX
(
dp
),
DIMENSION
(
ipgs_
:
ipge_
,
ijgs_
:
ijge_
,
ikys
:
ikye
,
ikxs
:
ikxe
,
izgs
:
izge
),
INTENT
(
IN
)
::
moments_
COMPLEX
(
dp
),
DIMENSION
(
ips
:
ipe
,
ijs
:
ije
,
ikys
:
ikye
,
ikxs
:
ikxe
,
izs
:
ize
),
INTENT
(
IN
)
::
TColl
COMPLEX
(
dp
),
DIMENSION
(
ips_
:
ipe_
,
ijs_
:
ije_
,
ikys
:
ikye
,
ikxs
:
ikxe
,
izs
:
ize
),
INTENT
(
IN
)
::
TColl_
COMPLEX
(
dp
),
DIMENSION
(
ipgs
:
ipge
,
ijgs
:
ijge
,
ikys
:
ikye
,
ikxs
:
ikxe
,
izgs
:
izge
),
INTENT
(
IN
)
::
ddzND_napj
COMPLEX
(
dp
),
DIMENSION
(
ipgs_
:
ipge_
,
ijgs_
:
ijge_
,
ikys
:
ikye
,
ikxs
:
ikxe
,
izgs
:
izge
),
INTENT
(
IN
)
::
ddzND_napj_
REAL
(
dp
),
INTENT
(
IN
)
::
diff_p_coeff_
,
diff_j_coeff_
!! OUTPUT
!! OUTPUT
COMPLEX
(
dp
),
DIMENSION
(
ips
:
ipe
,
ijs
:
ije
,
ikys
:
ikye
,
ikxs
:
ikxe
,
izs
:
ize
),
INTENT
(
OUT
)
::
moments_rhs
COMPLEX
(
dp
),
DIMENSION
(
ips
_
:
ipe
_
,
ijs
_
:
ije
_
,
ikys
:
ikye
,
ikxs
:
ikxe
,
izs
:
ize
),
INTENT
(
OUT
)
::
moments_rhs
_
INTEGER
::
p_int
,
j_int
! loops indices and polynom. degrees
INTEGER
::
p_int
,
j_int
! loops indices and polynom. degrees
REAL
(
dp
)
::
kx
,
ky
,
kperp2
REAL
(
dp
)
::
kx
,
ky
,
kperp2
...
@@ -111,11 +112,11 @@ SUBROUTINE compute_moments_eq_rhs
...
@@ -111,11 +112,11 @@ SUBROUTINE compute_moments_eq_rhs
psikykxz
=
psi
(
iky
,
ikx
,
iz
)
! tmp psi value
psikykxz
=
psi
(
iky
,
ikx
,
iz
)
! tmp psi value
! Kinetic loops
! Kinetic loops
jloop
:
DO
ij
=
ijs
,
ije
! This loop is from 1 to jmaxi+1
jloop
:
DO
ij
=
ijs
_
,
ije
_
! This loop is from 1 to jmaxi+1
j_int
=
jarray
(
ij
)
j_int
=
jarray
_
(
ij
)
ploop
:
DO
ip
=
ips
,
ipe
! Hermite loop
ploop
:
DO
ip
=
ips
_
,
ipe
_
! Hermite loop
p_int
=
parray
(
ip
)
! Hermite degree
p_int
=
parray
_
(
ip
)
! Hermite degree
eo
=
MODULO
(
p_int
,
2
)
! Indicates if we are on odd or even z grid
eo
=
MODULO
(
p_int
,
2
)
! Indicates if we are on odd or even z grid
kperp2
=
kparray
(
iky
,
ikx
,
iz
,
eo
)
**
2
kperp2
=
kparray
(
iky
,
ikx
,
iz
,
eo
)
**
2
...
@@ -123,31 +124,31 @@ SUBROUTINE compute_moments_eq_rhs
...
@@ -123,31 +124,31 @@ SUBROUTINE compute_moments_eq_rhs
!! Compute moments_ mixing terms
!! Compute moments_ mixing terms
! Perpendicular dynamic
! Perpendicular dynamic
! term propto n^{p,j}
! term propto n^{p,j}
Tnapj
=
xnapj
(
ip
,
ij
)
*
nadiab_moments
(
ip
,
ij
,
iky
,
ikx
,
iz
)
Tnapj
=
xnapj
_
(
ip
,
ij
)
*
nadiab_moments
_
(
ip
,
ij
,
iky
,
ikx
,
iz
)
! term propto n^{p+2,j}
! term propto n^{p+2,j}
Tnapp2j
=
xnapp2j
(
ip
)
*
nadiab_moments
(
ip
+
pp2
,
ij
,
iky
,
ikx
,
iz
)
Tnapp2j
=
xnapp2j
_
(
ip
)
*
nadiab_moments
_
(
ip
+
pp2
,
ij
,
iky
,
ikx
,
iz
)
! term propto n^{p-2,j}
! term propto n^{p-2,j}
Tnapm2j
=
xnapm2j
(
ip
)
*
nadiab_moments
(
ip
-
pp2
,
ij
,
iky
,
ikx
,
iz
)
Tnapm2j
=
xnapm2j
_
(
ip
)
*
nadiab_moments
_
(
ip
-
pp2
,
ij
,
iky
,
ikx
,
iz
)
! term propto n^{p,j+1}
! term propto n^{p,j+1}
Tnapjp1
=
xnapjp1
(
ij
)
*
nadiab_moments
(
ip
,
ij
+1
,
iky
,
ikx
,
iz
)
Tnapjp1
=
xnapjp1
_
(
ij
)
*
nadiab_moments
_
(
ip
,
ij
+1
,
iky
,
ikx
,
iz
)
! term propto n^{p,j-1}
! term propto n^{p,j-1}
Tnapjm1
=
xnapjm1
(
ij
)
*
nadiab_moments
(
ip
,
ij
-1
,
iky
,
ikx
,
iz
)
Tnapjm1
=
xnapjm1
_
(
ij
)
*
nadiab_moments
_
(
ip
,
ij
-1
,
iky
,
ikx
,
iz
)
! Perpendicular magnetic term (curvature and gradient drifts)
! Perpendicular magnetic term (curvature and gradient drifts)
Mperp
=
imagu
*
Ckxky
(
iky
,
ikx
,
iz
,
eo
)
*
(
Tnapj
+
Tnapp2j
+
Tnapm2j
+
Tnapjp1
+
Tnapjm1
)
Mperp
=
imagu
*
Ckxky
(
iky
,
ikx
,
iz
,
eo
)
*
(
Tnapj
+
Tnapp2j
+
Tnapm2j
+
Tnapjp1
+
Tnapjm1
)
! Parallel dynamic
! Parallel dynamic
! ddz derivative for Landau damping term
! ddz derivative for Landau damping term
Tpar
=
xnapp1j
(
ip
)
*
ddz_napj
(
ip
+1
,
ij
,
iky
,
ikx
,
iz
)
&
Tpar
=
xnapp1j
_
(
ip
)
*
ddz_napj
_
(
ip
+1
,
ij
,
iky
,
ikx
,
iz
)
&
+
xnapm1j
(
ip
)
*
ddz_napj
(
ip
-1
,
ij
,
iky
,
ikx
,
iz
)
+
xnapm1j
_
(
ip
)
*
ddz_napj
_
(
ip
-1
,
ij
,
iky
,
ikx
,
iz
)
! Mirror terms
! Mirror terms
Tnapp1j
=
ynapp1j
(
ip
,
ij
)
*
interp_napj
(
ip
+1
,
ij
,
iky
,
ikx
,
iz
)
Tnapp1j
=
ynapp1j
_
(
ip
,
ij
)
*
interp_napj
_
(
ip
+1
,
ij
,
iky
,
ikx
,
iz
)
Tnapp1jm1
=
ynapp1jm1
(
ip
,
ij
)
*
interp_napj
(
ip
+1
,
ij
-1
,
iky
,
ikx
,
iz
)
Tnapp1jm1
=
ynapp1jm1
_
(
ip
,
ij
)
*
interp_napj
_
(
ip
+1
,
ij
-1
,
iky
,
ikx
,
iz
)
Tnapm1j
=
ynapm1j
(
ip
,
ij
)
*
interp_napj
(
ip
-1
,
ij
,
iky
,
ikx
,
iz
)
Tnapm1j
=
ynapm1j
_
(
ip
,
ij
)
*
interp_napj
_
(
ip
-1
,
ij
,
iky
,
ikx
,
iz
)
Tnapm1jm1
=
ynapm1jm1
(
ip
,
ij
)
*
interp_napj
(
ip
-1
,
ij
-1
,
iky
,
ikx
,
iz
)
Tnapm1jm1
=
ynapm1jm1
_
(
ip
,
ij
)
*
interp_napj
_
(
ip
-1
,
ij
-1
,
iky
,
ikx
,
iz
)
! Trapping terms
! Trapping terms
Unapm1j
=
znapm1j
(
ip
,
ij
)
*
interp_napj
(
ip
-1
,
ij
,
iky
,
ikx
,
iz
)
Unapm1j
=
znapm1j
_
(
ip
,
ij
)
*
interp_napj
_
(
ip
-1
,
ij
,
iky
,
ikx
,
iz
)
Unapm1jp1
=
znapm1jp1
(
ip
,
ij
)
*
interp_napj
(
ip
-1
,
ij
+1
,
iky
,
ikx
,
iz
)
Unapm1jp1
=
znapm1jp1
_
(
ip
,
ij
)
*
interp_napj
_
(
ip
-1
,
ij
+1
,
iky
,
ikx
,
iz
)
Unapm1jm1
=
znapm1jm1
(
ip
,
ij
)
*
interp_napj
(
ip
-1
,
ij
-1
,
iky
,
ikx
,
iz
)
Unapm1jm1
=
znapm1jm1
_
(
ip
,
ij
)
*
interp_napj
_
(
ip
-1
,
ij
-1
,
iky
,
ikx
,
iz
)
Tmir
=
dlnBdz
(
iz
,
eo
)
*
(
Tnapp1j
+
Tnapp1jm1
+
Tnapm1j
+
Tnapm1jm1
+
&
Tmir
=
dlnBdz
(
iz
,
eo
)
*
(
Tnapp1j
+
Tnapp1jm1
+
Tnapm1j
+
Tnapm1jm1
+
&
Unapm1j
+
Unapm1jp1
+
Unapm1jm1
)
Unapm1j
+
Unapm1jp1
+
Unapm1jm1
)
...
@@ -155,26 +156,26 @@ SUBROUTINE compute_moments_eq_rhs
...
@@ -155,26 +156,26 @@ SUBROUTINE compute_moments_eq_rhs
Mpara
=
gradz_coeff
(
iz
,
eo
)
*
(
Tpar
+
Tmir
)
Mpara
=
gradz_coeff
(
iz
,
eo
)
*
(
Tpar
+
Tmir
)
!! Electrical potential term
!! Electrical potential term
IF
(
p_int
.LE.
2
)
THEN
! kronecker p0 p1 p2
IF
(
p_int
.LE.
2
)
THEN
! kronecker p0 p1 p2
Dphi
=
i_ky
*
(
xphij
(
ip
,
ij
)
*
kernel
(
ij
,
iky
,
ikx
,
iz
,
eo
)
&
Dphi
=
i_ky
*
(
xphij
_
(
ip
,
ij
)
*
kernel
_
(
ij
,
iky
,
ikx
,
iz
,
eo
)
&
+
xphijp1
(
ip
,
ij
)
*
kernel
(
ij
+1
,
iky
,
ikx
,
iz
,
eo
)
&
+
xphijp1
_
(
ip
,
ij
)
*
kernel
_
(
ij
+1
,
iky
,
ikx
,
iz
,
eo
)
&
+
xphijm1
(
ip
,
ij
)
*
kernel
(
ij
-1
,
iky
,
ikx
,
iz
,
eo
)
)
*
phi
(
iky
,
ikx
,
iz
)
+
xphijm1
_
(
ip
,
ij
)
*
kernel
_
(
ij
-1
,
iky
,
ikx
,
iz
,
eo
)
)
*
phi
(
iky
,
ikx
,
iz
)
ELSE
ELSE
Tphi
=
0._dp
Tphi
=
0._dp
ENDIF
ENDIF
!! Vector potential term
!! Vector potential term
IF
(
(
p_int
.LE.
3
)
.AND.
(
p_int
.GE.
1
)
)
THEN
! Kronecker p1 or p3
IF
(
(
p_int
.LE.
3
)
.AND.
(
p_int
.GE.
1
)
)
THEN
! Kronecker p1 or p3
Dpsi
=-
i_ky
*
(
xpsij
(
ip
,
ij
)
*
kernel
(
ij
,
iky
,
ikx
,
iz
,
eo
)
&
Dpsi
=-
i_ky
*
(
xpsij
_
(
ip
,
ij
)
*
kernel
_
(
ij
,
iky
,
ikx
,
iz
,
eo
)
&
+
xpsijp1
(
ip
,
ij
)
*
kernel
(
ij
+1
,
iky
,
ikx
,
iz
,
eo
)
&
+
xpsijp1
_
(
ip
,
ij
)
*
kernel
_
(
ij
+1
,
iky
,
ikx
,
iz
,
eo
)
&
+
xpsijm1
(
ip
,
ij
)
*
kernel
(
ij
-1
,
iky
,
ikx
,
iz
,
eo
))
*
psi
(
iky
,
ikx
,
iz
)
+
xpsijm1
_
(
ip
,
ij
)
*
kernel
_
(
ij
-1
,
iky
,
ikx
,
iz
,
eo
))
*
psi
(
iky
,
ikx
,
iz
)
ELSE
ELSE
Dpsi
=
0._dp
Dpsi
=
0._dp
ENDIF
ENDIF
!! Sum of all RHS terms
!! Sum of all RHS terms
moments_rhs
(
ip
,
ij
,
iky
,
ikx
,
iz
)
=
&
moments_rhs
_
(
ip
,
ij
,
iky
,
ikx
,
iz
)
=
&
! Nonlinear term Sapj = {phi,f}
! Nonlinear term Sapj
_
= {phi,f}
-
Sapj
(
ip
,
ij
,
iky
,
ikx
,
iz
)
&
-
Sapj
_
(
ip
,
ij
,
iky
,
ikx
,
iz
)
&
! Perpendicular magnetic term
! Perpendicular magnetic term
-
Mperp
&
-
Mperp
&
! Parallel magnetic term
! Parallel magnetic term
...
@@ -182,30 +183,33 @@ SUBROUTINE compute_moments_eq_rhs
...
@@ -182,30 +183,33 @@ SUBROUTINE compute_moments_eq_rhs
! Drives (density + temperature gradients)
! Drives (density + temperature gradients)
-
(
Dphi
+
Dpsi
)
&
-
(
Dphi
+
Dpsi
)
&
! Collision term
! Collision term
+
TColl
(
ip
,
ij
,
iky
,
ikx
,
iz
)
&
+
TColl
_
(
ip
,
ij
,
iky
,
ikx
,
iz
)
&
! Perpendicular pressure effects (electromagnetic term) (TO CHECK)
! Perpendicular pressure effects (electromagnetic term) (TO CHECK)
-
i_ky
*
beta
*
dpdx
*
(
Tnapj
+
Tnapp2j
+
Tnapm2j
+
Tnapjp1
+
Tnapjm1
)&
-
i_ky
*
beta
*
dpdx
*
(
Tnapj
+
Tnapp2j
+
Tnapm2j
+
Tnapjp1
+
Tnapjm1
)&
! Parallel drive term (should be negligible, to test)
! Parallel drive term (should be negligible, to test)
! -Gamma_phipar(iz,eo)*Tphi*ddz_phi(iky,ikx,iz) &
! -Gamma_phipar(iz,eo)*Tphi*ddz_phi(iky,ikx,iz) &
! Numerical Hermite hyperdiffusion (GX version)
-
mu_p
*
diff_pe_coeff
*
p_int
**
4
*
moments
(
ip
,
ij
,
iky
,
ikx
,
iz
)&
! Numerical Laguerre hyperdiffusion (GX version)
-
mu_j
*
diff_je_coeff
*
j_int
**
4
*
moments
(
ip
,
ij
,
iky
,
ikx
,
iz
)&
! Numerical perpendicular hyperdiffusion
! Numerical perpendicular hyperdiffusion
-
mu_x
*
diff_kx_coeff
*
kx
**
N_HD
*
moments
(
ip
,
ij
,
iky
,
ikx
,
iz
)
&
-
mu_x
*
diff_kx_coeff
*
kx
**
N_HD
*
moments
_
(
ip
,
ij
,
iky
,
ikx
,
iz
)
&
-
mu_y
*
diff_ky_coeff
*
ky
**
N_HD
*
moments
(
ip
,
ij
,
iky
,
ikx
,
iz
)
&
-
mu_y
*
diff_ky_coeff
*
ky
**
N_HD
*
moments
_
(
ip
,
ij
,
iky
,
ikx
,
iz
)
&
! Numerical parallel hyperdiffusion "mu_z*ddz**4" see Pueschel 2010 (eq 25)
! Numerical parallel hyperdiffusion "mu_z*ddz**4" see Pueschel 2010 (eq 25)
-
mu_z
*
diff_dz_coeff
*
ddzND_napj
(
ip
,
ij
,
iky
,
ikx
,
iz
)
-
mu_z
*
diff_dz_coeff
*
ddzND_napj_
(
ip
,
ij
,
iky
,
ikx
,
iz
)
! GX like Hermite hypercollisions see Mandell et al. 2023 (eq 3.23), unadvised to use it
! IF( (ip-4 .GT. 0) .AND. (num_procs_p .EQ. 1) ) &
IF
(
p_int
.GT.
2
)
&
! ! Numerical parallel velocity hyperdiffusion "+ dvpar4 g_a" see Pueschel 2010 (eq 33)
moments_rhs_
(
ip
,
ij
,
iky
,
ikx
,
iz
)
=
&
! ! (not used often so not parallelized)
moments_rhs_
(
ip
,
ij
,
iky
,
ikx
,
iz
)
-
mu_p
*
diff_pe_coeff
*
p_int
**
6
*
moments_
(
ip
,
ij
,
iky
,
ikx
,
iz
)
! moments_rhs_(ip,ij,iky,ikx,iz) = &
IF
(
j_int
.GT.
1
)
&
! moments_rhs_(ip,ij,iky,ikx,iz) &
moments_rhs_
(
ip
,
ij
,
iky
,
ikx
,
iz
)
=
&
! + mu_p * moments_(ip-4,ij,iky,ikx,iz)
moments_rhs_
(
ip
,
ij
,
iky
,
ikx
,
iz
)
-
mu_j
*
diff_je_coeff
*
j_int
**
6
*
moments_
(
ip
,
ij
,
iky
,
ikx
,
iz
)
! fourth order numerical diffusion in vpar
! IF( (ip-4 .GT. 0) .AND. (num_procs_p .EQ. 1) ) &
! ! Numerical parallel velocity hyperdiffusion "+ dvpar4 g_a" see Pueschel 2010 (eq 33)
! ! (not used often so not parallelized)
! moments_rhs_(ip,ij,iky,ikx,iz) = &
! moments_rhs_(ip,ij,iky,ikx,iz) &
! + mu_p * moments_(ip-4,ij,iky,ikx,iz)
ELSE
ELSE
moments_rhs
(
ip
,
ij
,
iky
,
ikx
,
iz
)
=
0._dp
moments_rhs
_
(
ip
,
ij
,
iky
,
ikx
,
iz
)
=
0._dp
ENDIF
ENDIF
END
DO
ploop
END
DO
ploop
END
DO
jloop
END
DO
jloop
...
@@ -227,7 +231,7 @@ SUBROUTINE add_Maxwellian_background_terms
...
@@ -227,7 +231,7 @@ SUBROUTINE add_Maxwellian_background_terms
! This routine is meant to add the terms rising from the magnetic operator,
! This routine is meant to add the terms rising from the magnetic operator,
! i.e. (B x k_gB) Grad, applied on the background Maxwellian distribution
! i.e. (B x k_gB) Grad, applied on the background Maxwellian distribution
! (x_a + spar^2)(b x k_gB) GradFaM
! (x_a + spar^2)(b x k_gB) GradFaM
! It gives birth to kx=ky=0 sources terms (averages) that hit moments 00, 20,
! It gives birth to kx=ky=0 sources terms (averages) that hit moments
_
00, 20,
! 40, 01,02, 21 with background gradient dependences.
! 40, 01,02, 21 with background gradient dependences.
USE
prec_const
USE
prec_const
USE
time_integration
,
ONLY
:
updatetlevel
USE
time_integration
,
ONLY
:
updatetlevel
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment