Skip to content
Snippets Groups Projects
Commit edc95ef2 authored by Antoine Cyril David Hoffmann's avatar Antoine Cyril David Hoffmann :seedling:
Browse files

background ZF shearing method is added

parent c59e270c
No related branches found
No related tags found
No related merge requests found
...@@ -28,7 +28,8 @@ MODULE model ...@@ -28,7 +28,8 @@ MODULE model
REAL(xp), PUBLIC, PROTECTED :: beta = 0._xp ! electron plasma Beta (8piNT_e/B0^2) 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) REAL(xp), PUBLIC, PROTECTED :: ExBrate = 0._xp ! ExB background shearing rate (radially constant shear flow)
INTEGER, PUBLIC, PROTECTED :: ikxZF = 0 ! Background zonal mode wavenumber (acts in the nonlinear term) INTEGER, PUBLIC, PROTECTED :: ikxZF = 0 ! Background zonal mode wavenumber (acts in the nonlinear term)
REAL(xp), PUBLIC, PROTECTED :: ZFamp = 0._xp ! Amplitude of the background zonal mode REAL(xp), PUBLIC, PROTECTED :: ZFrate = 0._xp ! Shearing rate of the background zonal mode
LOGICAL, PUBLIC, PROTECTED :: ZF_ONLY = .false. ! Cancels the nonlinear term excepts the background ZF contribution
! Auxiliary variable ! Auxiliary variable
LOGICAL, PUBLIC, PROTECTED :: EM = .true. ! Electromagnetic effects flag LOGICAL, PUBLIC, PROTECTED :: EM = .true. ! Electromagnetic effects flag
LOGICAL, PUBLIC, PROTECTED :: MHD_PD = .true. ! MHD pressure drift LOGICAL, PUBLIC, PROTECTED :: MHD_PD = .true. ! MHD pressure drift
...@@ -55,7 +56,7 @@ CONTAINS ...@@ -55,7 +56,7 @@ CONTAINS
Na, ADIAB_E, ADIAB_I, q_i, tau_i, & 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, & 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, lambdaD, beta, ExBrate, ExB_NL_CORRECTION,&
ikxZF, ZFamp ikxZF, ZFrate, ZF_ONLY
READ(lu_in,model) READ(lu_in,model)
...@@ -114,6 +115,8 @@ CONTAINS ...@@ -114,6 +115,8 @@ CONTAINS
CALL attach(fid, TRIM(str), "MHD_PD", MHD_PD) CALL attach(fid, TRIM(str), "MHD_PD", MHD_PD)
CALL attach(fid, TRIM(str), "beta", beta) CALL attach(fid, TRIM(str), "beta", beta)
CALL attach(fid, TRIM(str), "ExBrate", ExBrate) CALL attach(fid, TRIM(str), "ExBrate", ExBrate)
CALL attach(fid, TRIM(str), "ikxZF", ikxZF)
CALL attach(fid, TRIM(str), "ZFrate", ZFrate)
CALL attach(fid, TRIM(str), "ADIAB_E", ADIAB_E) CALL attach(fid, TRIM(str), "ADIAB_E", ADIAB_E)
CALL attach(fid, TRIM(str), "ADIAB_I", ADIAB_I) CALL attach(fid, TRIM(str), "ADIAB_I", ADIAB_I)
CALL attach(fid, TRIM(str), "tau_i", tau_i) CALL attach(fid, TRIM(str), "tau_i", tau_i)
......
...@@ -8,10 +8,10 @@ MODULE nonlinear ...@@ -8,10 +8,10 @@ MODULE nonlinear
local_nj,ngj,jarray,jmax, local_nj_offset, dmax,& local_nj,ngj,jarray,jmax, local_nj_offset, dmax,&
kyarray, AA_y, local_nky, inv_Ny,& kyarray, AA_y, local_nky, inv_Ny,&
total_nkx,kxarray, AA_x, inv_Nx,local_nx, Ny, & total_nkx,kxarray, AA_x, inv_Nx,local_nx, Ny, &
local_nz,ngz,zarray,nzgrid, deltakx, iky0, contains_kx0, contains_ky0 local_nz,ngz,zarray,nzgrid, deltakx, deltaky, iky0, contains_kx0, contains_ky0
USE model, ONLY : LINEARITY, EM, ikxZF, ZFamp, ExB_NL_CORRECTION USE model, ONLY : LINEARITY, EM, ikxZF, ZFrate, ZF_ONLY, ExB_NL_CORRECTION
USE closure, ONLY : evolve_mom, nmaxarray USE closure, ONLY : evolve_mom, nmaxarray
USE prec_const, ONLY : xp USE prec_const, ONLY : xp, imagu
USE species, ONLY : sqrt_tau_o_sigma USE species, ONLY : sqrt_tau_o_sigma
USE time_integration, ONLY : updatetlevel USE time_integration, ONLY : updatetlevel
USE ExB_shear_flow, ONLY : ExB_NL_factor, inv_ExB_NL_factor USE ExB_shear_flow, ONLY : ExB_NL_factor, inv_ExB_NL_factor
...@@ -24,7 +24,7 @@ MODULE nonlinear ...@@ -24,7 +24,7 @@ MODULE nonlinear
COMPLEX(xp), DIMENSION(:,:), ALLOCATABLE :: F_cmpx, G_cmpx COMPLEX(xp), DIMENSION(:,:), ALLOCATABLE :: F_cmpx, G_cmpx
INTEGER :: in, is, p_int, j_int, n_int INTEGER :: in, is, p_int, j_int, n_int
INTEGER :: smax INTEGER :: smax
REAL(xp):: sqrt_p, sqrt_pp1 REAL(xp):: sqrt_p, sqrt_pp1, inv_kx_ZF
PUBLIC :: compute_Sapj, nonlinear_init PUBLIC :: compute_Sapj, nonlinear_init
CONTAINS CONTAINS
...@@ -33,6 +33,7 @@ SUBROUTINE nonlinear_init ...@@ -33,6 +33,7 @@ SUBROUTINE nonlinear_init
IMPLICIT NONE IMPLICIT NONE
ALLOCATE( F_cmpx(local_nky,total_nkx)) ALLOCATE( F_cmpx(local_nky,total_nkx))
ALLOCATE( G_cmpx(local_nky,total_nkx)) ALLOCATE( G_cmpx(local_nky,total_nkx))
inv_kx_ZF = ikxZF/deltakx
END SUBROUTINE nonlinear_init END SUBROUTINE nonlinear_init
SUBROUTINE compute_Sapj SUBROUTINE compute_Sapj
...@@ -81,13 +82,14 @@ SUBROUTINE compute_nonlinear ...@@ -81,13 +82,14 @@ SUBROUTINE compute_nonlinear
F_cmpx(iky,ikx) = phi(iky,ikx,izi) * kernel(ia,ini,iky,ikx,izi,eo) F_cmpx(iky,ikx) = phi(iky,ikx,izi) * kernel(ia,ini,iky,ikx,izi,eo)
ENDDO ENDDO
ENDDO ENDDO
! Test to implement the ExB shearing as a additional zonal mode in the ES potential ! ExB shearing as a additional zonal mode in the ES potential
IF(ikxZF .GT. 1) THEN IF(abs(ZFrate) .GT. 0) THEN
ikxExBp = ikxZF ikxExBp = ikxZF + 1
ikxExBn = total_nkx - (ikxExBp-2) ikxExBn = total_nkx - (ikxExBp - 2)
IF(ZF_ONLY) F_cmpx = 0._xp
IF(contains_kx0 .AND. contains_ky0) THEN IF(contains_kx0 .AND. contains_ky0) THEN
F_cmpx(iky0,ikxExBp) = F_cmpx(iky0,ikxExBp) + ZFamp * kernel(ia,ini,iky0,ikxExBp,izi,eo) F_cmpx(iky0,ikxExBp) = F_cmpx(iky0,ikxExBp) + 8._xp*ZFrate*inv_kx_ZF * kernel(ia,ini,iky0,ikxExBp,izi,eo)
F_cmpx(iky0,ikxExBn) = F_cmpx(iky0,ikxExBn) + ZFamp * kernel(ia,ini,iky0,ikxExBn,izi,eo) F_cmpx(iky0,ikxExBn) = F_cmpx(iky0,ikxExBn) + 8._xp*ZFrate*inv_kx_ZF * kernel(ia,ini,iky0,ikxExBn,izi,eo)
ENDIF ENDIF
ENDIF ENDIF
! Second convolution terms ! Second convolution terms
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment