From a042d51948d61a0223a7889a40719f18533172b2 Mon Sep 17 00:00:00 2001
From: Antoine Hoffmann <antoine.hoffmann@epfl.ch>
Date: Thu, 4 Apr 2024 09:17:38 +0200
Subject: [PATCH] Add new parameters tuners for mirror, trapping and Landau
 damping terms

---
 src/model_mod.F90    | 10 +++++++---
 src/numerics_mod.F90 | 28 ++++++++++++++--------------
 2 files changed, 21 insertions(+), 17 deletions(-)

diff --git a/src/model_mod.F90 b/src/model_mod.F90
index 7edf6e8..da0357d 100644
--- a/src/model_mod.F90
+++ b/src/model_mod.F90
@@ -21,8 +21,11 @@ MODULE model
   REAL(xp), PUBLIC, PROTECTED ::   tau_i =  1.0       ! electron-ion temperature ratio for ion adiabatic model
   REAL(xp), PUBLIC, PROTECTED ::     q_i =  1.0       ! ion charge for ion adiabatic model
   REAL(xp), PUBLIC, PROTECTED ::      nu =  0._xp     ! collision frequency parameter
-  REAL(xp), PUBLIC, PROTECTED ::    k_gB =  1._xp     ! Magnetic gradient strength (L_ref/L_gB)
-  REAL(xp), PUBLIC, PROTECTED ::    k_cB =  1._xp     ! Magnetic curvature strength (L_ref/L_cB)
+  REAL(xp), PUBLIC, PROTECTED ::    k_gB =  1._xp     ! artificial magnetic gradient tuner  (L_ref/L_gB)
+  REAL(xp), PUBLIC, PROTECTED ::    k_cB =  1._xp     ! artificial magnetic curvature tuner (L_ref/L_cB)
+  REAL(xp), PUBLIC, PROTECTED ::    k_mB =  1._xp     ! artificial mirror force tuner       (L_ref/L_cB)
+  REAL(xp), PUBLIC, PROTECTED ::    k_tB =  1._xp     ! artificial trapping term tuner      (L_ref/L_cB)
+  REAL(xp), PUBLIC, PROTECTED ::   k_ldB =  1._xp     ! artificial Landau damping tuner     (L_ref/L_cB)
   REAL(xp), PUBLIC, PROTECTED :: lambdaD =  0._xp     ! Debye length
   REAL(xp), PUBLIC, PROTECTED ::    beta =  0._xp     ! electron plasma Beta (8piNT_e/B0^2)
   REAL(xp), PUBLIC, PROTECTED :: ExBrate =  0._xp     ! ExB background shearing rate (radially constant shear flow)
@@ -59,7 +62,8 @@ CONTAINS
     NAMELIST /MODEL/     LINEARITY, RM_LD_T_EQ, FORCE_SYMMETRY, MHD_PD, &
                          Na, ADIAB_E, ADIAB_I, q_i, tau_i, &
                          mu_x, mu_y, N_HD, HDz_h, mu_z, mu_p, mu_j, HYP_V, &
-                         nu, k_gB, k_cB, lambdaD, beta, ExBrate, ExB_NL_CORRECTION,&
+                         nu, k_gB, k_cB, k_mB, k_tB, k_ldB, &
+                         lambdaD, beta, ExBrate, ExB_NL_CORRECTION,&
                          ikxZF, ZFrate, ZF_ONLY, KN_MODEL, ORDER, ORDER_NUM, ORDER_DEN
 
     READ(lu_in,model)
diff --git a/src/numerics_mod.F90 b/src/numerics_mod.F90
index ebab9ba..6101fcb 100644
--- a/src/numerics_mod.F90
+++ b/src/numerics_mod.F90
@@ -287,7 +287,7 @@ SUBROUTINE compute_lin_coeff
                     xphij, xphijp1, xphijm1,&
                     xpsij, xpsijp1, xpsijm1
   USE species, ONLY: k_T, k_N, tau, q, sqrt_tau_o_sigma
-  USE model,   ONLY: k_cB, k_gB
+  USE model,   ONLY: k_cB, k_gB, k_mB, k_tB, k_ldB
   USE prec_const, ONLY: xp, SQRT2, SQRT3
   USE grid,  ONLY: parray, jarray, local_na, local_np, local_nj, ngj, ngp
   INTEGER     :: ia,ip,ij,p_int, j_int ! polynom. dagrees
@@ -305,32 +305,32 @@ SUBROUTINE compute_lin_coeff
         xnapj(ia,ip,ij) = tau(ia)/q(ia)*(k_cB*(2._xp*p_xp + 1._xp) &
                                         +k_gB*(2._xp*j_xp + 1._xp))
         ! Mirror force terms
-        ynapp1j  (ia,ip,ij) = -sqrt_tau_o_sigma(ia) *      (j_xp+1._xp)*SQRT(p_xp+1._xp)
-        ynapm1j  (ia,ip,ij) = -sqrt_tau_o_sigma(ia) *      (j_xp+1._xp)*SQRT(p_xp)
-        ynapp1jm1(ia,ip,ij) = +sqrt_tau_o_sigma(ia) *              j_xp*SQRT(p_xp+1._xp)
-        ynapm1jm1(ia,ip,ij) = +sqrt_tau_o_sigma(ia) *              j_xp*SQRT(p_xp)
+        ynapp1j  (ia,ip,ij) = -sqrt_tau_o_sigma(ia) *      (j_xp+1._xp)*SQRT(p_xp+1._xp) * k_mB
+        ynapm1j  (ia,ip,ij) = -sqrt_tau_o_sigma(ia) *      (j_xp+1._xp)*SQRT(p_xp)       * k_mB
+        ynapp1jm1(ia,ip,ij) = +sqrt_tau_o_sigma(ia) *              j_xp*SQRT(p_xp+1._xp) * k_mB
+        ynapm1jm1(ia,ip,ij) = +sqrt_tau_o_sigma(ia) *              j_xp*SQRT(p_xp)       * k_mB
         ! Trapping terms
-        zNapm1j  (ia,ip,ij) = +sqrt_tau_o_sigma(ia) *(2._xp*j_xp+1._xp)*SQRT(p_xp)
-        zNapm1jp1(ia,ip,ij) = -sqrt_tau_o_sigma(ia) *      (j_xp+1._xp)*SQRT(p_xp)
-        zNapm1jm1(ia,ip,ij) = -sqrt_tau_o_sigma(ia) *              j_xp*SQRT(p_xp)
+        zNapm1j  (ia,ip,ij) = +sqrt_tau_o_sigma(ia) *(2._xp*j_xp+1._xp)*SQRT(p_xp) * k_tB
+        zNapm1jp1(ia,ip,ij) = -sqrt_tau_o_sigma(ia) *      (j_xp+1._xp)*SQRT(p_xp) * k_tB
+        zNapm1jm1(ia,ip,ij) = -sqrt_tau_o_sigma(ia) *              j_xp*SQRT(p_xp) * k_tB
       ENDDO
     ENDDO
     DO ip = 1,local_np
       p_int= parray(ip+ngp/2)   ! Hermite degree
       p_xp = REAL(p_int,xp) ! REAL of Hermite degree
       ! Landau damping coefficients (ddz napj term)
-      xnapp1j(ia,ip) = sqrt_tau_o_sigma(ia) * SQRT(p_xp+1._xp)
-      xnapm1j(ia,ip) = sqrt_tau_o_sigma(ia) * SQRT(p_xp)
+      xnapp1j(ia,ip) = sqrt_tau_o_sigma(ia) * SQRT(p_xp+1._xp) * k_ldB
+      xnapm1j(ia,ip) = sqrt_tau_o_sigma(ia) * SQRT(p_xp)       * k_ldB
       ! Magnetic curvature term
-      xnapp2j(ia,ip) = tau(ia)/q(ia) * k_cB * SQRT((p_xp+1._xp)*(p_xp + 2._xp))
-      xnapm2j(ia,ip) = tau(ia)/q(ia) * k_cB * SQRT( p_xp       *(p_xp - 1._xp))
+      xnapp2j(ia,ip) = tau(ia)/q(ia) * SQRT((p_xp+1._xp)*(p_xp + 2._xp)) * k_cB
+      xnapm2j(ia,ip) = tau(ia)/q(ia) * SQRT( p_xp       *(p_xp - 1._xp)) * k_cB
     ENDDO
     DO ij = 1,local_nj
       j_int= jarray(ij+ngj/2)   ! Laguerre degree
       j_xp = REAL(j_int,xp) ! REAL of Laguerre degree
       ! Magnetic gradient term
-      xnapjp1(ia,ij) = -tau(ia)/q(ia) * k_gB * (j_xp + 1._xp)
-      xnapjm1(ia,ij) = -tau(ia)/q(ia) * k_gB *  j_xp
+      xnapjp1(ia,ij) = -tau(ia)/q(ia) * (j_xp + 1._xp) * k_gB
+      xnapjm1(ia,ij) = -tau(ia)/q(ia) *  j_xp          * k_gB
     ENDDO
     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     !! ES linear coefficients for moment RHS !!!!!!!!!!
-- 
GitLab