From 3f25a0efc43c0c3ff5407d5519ff62f5fb5c9a10 Mon Sep 17 00:00:00 2001 From: Antoine Cyril David Hoffmann <ahoffman@spcpc606.epfl.ch> Date: Tue, 24 May 2022 14:49:34 +0200 Subject: [PATCH] new output start and hyp_z corrections --- src/array_mod.F90 | 4 ++-- src/auxval.F90 | 22 +++++++++++----------- src/calculus_mod.F90 | 3 ++- src/ghosts_mod.F90 | 1 - src/grid_mod.F90 | 4 +++- src/memory.F90 | 4 ++-- src/moments_eq_rhs_mod.F90 | 8 ++++---- src/processing_mod.F90 | 10 +++++----- 8 files changed, 29 insertions(+), 27 deletions(-) diff --git a/src/array_mod.F90 b/src/array_mod.F90 index 96485a88..75527204 100644 --- a/src/array_mod.F90 +++ b/src/array_mod.F90 @@ -14,10 +14,10 @@ MODULE array ! Derivatives and interpolated moments COMPLEX(dp), DIMENSION(:,:,:,:,:), ALLOCATABLE :: ddz_nepj COMPLEX(dp), DIMENSION(:,:,:,:,:), ALLOCATABLE :: interp_nepj - COMPLEX(dp), DIMENSION(:,:,:,:,:), ALLOCATABLE :: ddz2_Nepj + COMPLEX(dp), DIMENSION(:,:,:,:,:), ALLOCATABLE :: ddz4_Nepj COMPLEX(dp), DIMENSION(:,:,:,:,:), ALLOCATABLE :: ddz_nipj COMPLEX(dp), DIMENSION(:,:,:,:,:), ALLOCATABLE :: interp_nipj - COMPLEX(dp), DIMENSION(:,:,:,:,:), ALLOCATABLE :: ddz2_Nipj + COMPLEX(dp), DIMENSION(:,:,:,:,:), ALLOCATABLE :: ddz4_Nipj ! Arrays to store special initial modes (semi linear simulation) ! Zonal ones (ky=0) diff --git a/src/auxval.F90 b/src/auxval.F90 index db695e67..34164c59 100644 --- a/src/auxval.F90 +++ b/src/auxval.F90 @@ -78,16 +78,16 @@ subroutine auxval ENDDO CALL mpi_barrier(MPI_COMM_WORLD, ierr) - IF((my_id.EQ.0) .AND. (CLOS .EQ. 1)) THEN - IF(KIN_E) & - write(*,*) 'Closure = 1 -> Maximal Nepj degree is min(Pmaxe,2*Jmaxe+1): De = ', dmaxi - write(*,*) 'Closure = 1 -> Maximal Nipj degree is min(Pmaxi,2*Jmaxi+1): Di = ', dmaxi - ENDIF - DO ip = ips_i,ipe_i - DO ij = ijs_i,ije_i - IF((parray_i(ip)+2*jarray_i(ij) .LE. dmaxi) .AND. (rank_ky + rank_z .EQ. 0))& - print*, '(',parray_i(ip),',',jarray_i(ij),')' - ENDDO - ENDDO + ! IF((my_id.EQ.0) .AND. (CLOS .EQ. 1)) THEN + ! IF(KIN_E) & + ! write(*,*) 'Closure = 1 -> Maximal Nepj degree is min(Pmaxe,2*Jmaxe+1): De = ', dmaxi + ! write(*,*) 'Closure = 1 -> Maximal Nipj degree is min(Pmaxi,2*Jmaxi+1): Di = ', dmaxi + ! ENDIF + ! DO ip = ips_i,ipe_i + ! DO ij = ijs_i,ije_i + ! IF((parray_i(ip)+2*jarray_i(ij) .LE. dmaxi) .AND. (rank_ky + rank_z .EQ. 0))& + ! print*, '(',parray_i(ip),',',jarray_i(ij),')' + ! ENDDO + ! ENDDO END SUBROUTINE auxval diff --git a/src/calculus_mod.F90 b/src/calculus_mod.F90 index 76e22a86..466df531 100644 --- a/src/calculus_mod.F90 +++ b/src/calculus_mod.F90 @@ -16,7 +16,7 @@ MODULE calculus REAL(dp), dimension(-2:2) :: dz2_usu = & (/-1.0_dp/12.0_dp, 4.0_dp/3.0_dp, -5.0_dp/2.0_dp, 4.0_dp/3.0_dp, -1.0_dp/12.0_dp /)! 2th derivative, 4th order (for parallel hypdiff) REAL(dp), dimension(-2:2) :: dz4_usu = & - (/ 1._dp, -4._dp, 6._dp, -4._dp, 1._dp /)* 0.0625 ! 4th derivative, 2nd order (for parallel hypdiff) + (/ 1._dp, -4._dp, 6._dp, -4._dp, 1._dp /) ! 4th derivative, 2nd order (for parallel hypdiff) PUBLIC :: simpson_rule_z, interp_z, grad_z, grad_z4 CONTAINS @@ -99,6 +99,7 @@ SUBROUTINE grad_z4(f,ddz4f) IF(Nz .GT. 3) THEN ! Cannot apply four points stencil on less than four points grid DO iz = izs,ize ddz4f(iz) = dz4_usu(-2)*f(iz-2) + dz4_usu(-1)*f(iz-1) & + +dz4_usu( 0)*f(iz )& +dz4_usu( 1)*f(iz+1) + dz4_usu( 2)*f(iz+2) ENDDO ELSE diff --git a/src/ghosts_mod.F90 b/src/ghosts_mod.F90 index 59cf8ab7..9dff68f4 100644 --- a/src/ghosts_mod.F90 +++ b/src/ghosts_mod.F90 @@ -154,7 +154,6 @@ SUBROUTINE update_ghosts_z_e ! last+2 gets first+1 moments_e(:,:,:,:,ize+2,updatetlevel) = moments_e(:,:,:,:,izs+1,updatetlevel) ENDIF - END SUBROUTINE update_ghosts_z_e SUBROUTINE update_ghosts_z_i diff --git a/src/grid_mod.F90 b/src/grid_mod.F90 index 36585c36..01d7e1ab 100644 --- a/src/grid_mod.F90 +++ b/src/grid_mod.F90 @@ -405,7 +405,9 @@ CONTAINS ! Z stepping (#interval = #points since periodic) deltaz = Lz/REAL(Nz,dp) inv_deltaz = 1._dp/deltaz - diff_dz_coeff = (deltaz/2._dp)**2 + diff_dz_coeff = -(deltaz/2._dp)**4 ! adaptive fourth derivative + ! non adaptive + ! diff_dz_coeff = -1._dp IF (SG) THEN grid_shift = deltaz/2._dp ELSE diff --git a/src/memory.F90 b/src/memory.F90 index a3837b7c..3b12ca1a 100644 --- a/src/memory.F90 +++ b/src/memory.F90 @@ -33,7 +33,7 @@ SUBROUTINE memory CALL allocate_array( moments_rhs_e, ips_e,ipe_e, ijs_e,ije_e, ikys,ikye, ikxs,ikxe, izs,ize, 1,ntimelevel ) CALL allocate_array( nadiab_moments_e, ipgs_e,ipge_e, ijgs_e,ijge_e, ikys,ikye, ikxs,ikxe, izgs,izge) CALL allocate_array( ddz_nepj, ipgs_e,ipge_e, ijgs_e,ijge_e, ikys,ikye, ikxs,ikxe, izgs,izge) - CALL allocate_array( ddz2_Nepj, ipgs_e,ipge_e, ijgs_e,ijge_e, ikys,ikye, ikxs,ikxe, izgs,izge) + CALL allocate_array( ddz4_Nepj, ipgs_e,ipge_e, ijgs_e,ijge_e, ikys,ikye, ikxs,ikxe, izgs,izge) CALL allocate_array( interp_nepj, ipgs_e,ipge_e, ijgs_e,ijge_e, ikys,ikye, ikxs,ikxe, izgs,izge) CALL allocate_array( moments_e_ZF, ipgs_e,ipge_e, ijgs_e,ijge_e, ikxs,ikxe, izs,ize) CALL allocate_array( moments_e_EM, ipgs_e,ipge_e, ijgs_e,ijge_e, ikys,ikye, izs,ize) @@ -69,7 +69,7 @@ SUBROUTINE memory CALL allocate_array( moments_rhs_i, ips_i,ipe_i, ijs_i,ije_i, ikys,ikye, ikxs,ikxe, izs,ize, 1,ntimelevel ) CALL allocate_array( nadiab_moments_i, ipgs_i,ipge_i, ijgs_i,ijge_i, ikys,ikye, ikxs,ikxe, izgs,izge) CALL allocate_array( ddz_nipj, ipgs_i,ipge_i, ijgs_i,ijge_i, ikys,ikye, ikxs,ikxe, izgs,izge) - CALL allocate_array( ddz2_Nipj, ipgs_i,ipge_i, ijgs_i,ijge_i, ikys,ikye, ikxs,ikxe, izgs,izge) + CALL allocate_array( ddz4_Nipj, ipgs_i,ipge_i, ijgs_i,ijge_i, ikys,ikye, ikxs,ikxe, izgs,izge) CALL allocate_array( interp_nipj, ipgs_i,ipge_i, ijgs_i,ijge_i, ikys,ikye, ikxs,ikxe, izgs,izge) CALL allocate_array( moments_i_ZF, ipgs_i,ipge_i, ijgs_i,ijge_i, ikxs,ikxe, izs,ize) CALL allocate_array( moments_i_EM, ipgs_i,ipge_i, ijgs_i,ijge_i, ikys,ikye, izs,ize) diff --git a/src/moments_eq_rhs_mod.F90 b/src/moments_eq_rhs_mod.F90 index d2e316fe..db861edd 100644 --- a/src/moments_eq_rhs_mod.F90 +++ b/src/moments_eq_rhs_mod.F90 @@ -59,7 +59,7 @@ SUBROUTINE moments_eq_rhs_e eo = MODULO(p_int,2) ! Indicates if we are on odd or even z grid kperp2= kparray(iky,ikx,iz,eo)**2 - IF((CLOS .EQ. 1) .AND. (p_int+2*j_int .LE. dmaxe)) THEN + IF((CLOS .NE. 1) .OR. (p_int+2*j_int .LE. dmaxe)) THEN !! Compute moments mixing terms Tperp = 0._dp; Tpar = 0._dp; Tmir = 0._dp ! Perpendicular dynamic @@ -110,7 +110,7 @@ SUBROUTINE moments_eq_rhs_e ! Numerical perpendicular hyperdiffusion (totally artificial, for stability purpose) - (mu_x*kx**4 + mu_y*ky**4)*moments_e(ip,ij,iky,ikx,iz,updatetlevel) & ! Numerical parallel hyperdiffusion "+ (mu_z*kz**4)" - + mu_z * diff_dz_coeff * ddz2_Nepj(ip,ij,iky,ikx,iz) & + + mu_z * diff_dz_coeff * ddz4_Nepj(ip,ij,iky,ikx,iz) & ! Collision term + TColl_e(ip,ij,iky,ikx,iz) & ! Nonlinear term @@ -179,7 +179,7 @@ SUBROUTINE moments_eq_rhs_i p_int = parray_i(ip) ! Hermite degree eo = MODULO(p_int,2) ! Indicates if we are on odd or even z grid kperp2= kparray(iky,ikx,iz,eo)**2 - IF((CLOS .EQ. 1) .AND. (p_int+2*j_int .LE. dmaxi)) THEN + IF((CLOS .NE. 1) .OR. (p_int+2*j_int .LE. dmaxi)) THEN !! Compute moments mixing terms Tperp = 0._dp; Tpar = 0._dp; Tmir = 0._dp ! Perpendicular dynamic @@ -233,7 +233,7 @@ SUBROUTINE moments_eq_rhs_i ! Numerical hyperdiffusion (totally artificial, for stability purpose) - (mu_x*kx**4 + mu_y*ky**4)*moments_i(ip,ij,iky,ikx,iz,updatetlevel) & ! Numerical parallel hyperdiffusion "+ (mu_z*kz**4)" - + mu_z * diff_dz_coeff * ddz2_Nipj(ip,ij,iky,ikx,iz) & + + mu_z * diff_dz_coeff * ddz4_Nipj(ip,ij,iky,ikx,iz) & ! Collision term + TColl_i(ip,ij,iky,ikx,iz)& ! Nonlinear term diff --git a/src/processing_mod.F90 b/src/processing_mod.F90 index 5a47ed6f..ffa5ac89 100644 --- a/src/processing_mod.F90 +++ b/src/processing_mod.F90 @@ -166,11 +166,11 @@ SUBROUTINE compute_nadiab_moments_z_gradients_and_interp ! USE fields, ONLY : moments_i, moments_e, phi USE array, ONLY : kernel_e, kernel_i, nadiab_moments_e, nadiab_moments_i, & - ddz_nepj, ddz2_Nepj, interp_nepj,& - ddz_nipj, ddz2_Nipj, interp_nipj + ddz_nepj, ddz4_Nepj, interp_nepj,& + ddz_nipj, ddz4_Nipj, interp_nipj USE time_integration, ONLY : updatetlevel USE model, ONLY : qe_taue, qi_taui, KIN_E, CLOS - USE calculus, ONLY : grad_z, grad_z2, interp_z + USE calculus, ONLY : grad_z, grad_z4, interp_z IMPLICIT NONE INTEGER :: eo, p_int, j_int CALL cpu_time(t0_process) @@ -239,7 +239,7 @@ SUBROUTINE compute_nadiab_moments_z_gradients_and_interp ! Compute z derivatives CALL grad_z(eo,nadiab_moments_e(ip,ij,iky,ikx,izgs:izge), ddz_nepj(ip,ij,iky,ikx,izs:ize)) ! Parallel hyperdiffusion - CALL grad_z2(moments_e(ip,ij,iky,ikx,izgs:izge,updatetlevel),ddz2_Nepj(ip,ij,iky,ikx,izs:ize)) + CALL grad_z4(moments_e(ip,ij,iky,ikx,izgs:izge,updatetlevel),ddz4_Nepj(ip,ij,iky,ikx,izs:ize)) ! Compute even odd grids interpolation CALL interp_z(eo,nadiab_moments_e(ip,ij,iky,ikx,izgs:izge), interp_nepj(ip,ij,iky,ikx,izs:ize)) ENDDO @@ -257,7 +257,7 @@ SUBROUTINE compute_nadiab_moments_z_gradients_and_interp ! Compute z first derivative CALL grad_z(eo,nadiab_moments_i(ip,ij,iky,ikx,izgs:izge), ddz_nipj(ip,ij,iky,ikx,izs:ize)) ! Parallel hyperdiffusion - CALL grad_z2(moments_i(ip,ij,iky,ikx,izgs:izge,updatetlevel),ddz2_Nipj(ip,ij,iky,ikx,izs:ize)) + CALL grad_z4(moments_i(ip,ij,iky,ikx,izgs:izge,updatetlevel),ddz4_Nipj(ip,ij,iky,ikx,izs:ize)) ! Compute even odd grids interpolation CALL interp_z(eo,nadiab_moments_i(ip,ij,iky,ikx,izgs:izge), interp_nipj(ip,ij,iky,ikx,izs:ize)) ENDDO -- GitLab