From d157cc1c43fc4db952da207dcccdea056df7551e Mon Sep 17 00:00:00 2001
From: Antoine Hoffmann <antoine.hoffmann@epfl.ch>
Date: Tue, 4 Apr 2023 10:56:35 +0200
Subject: [PATCH] minor changes

---
 src/array_mod.F90                   |  2 +-
 src/inital.F90                      | 16 +++++++++++----
 src/memory.F90                      |  2 +-
 src/processing_mod.F90              |  8 ++++----
 src/restarts_mod.F90                | 31 +++++++++++++++++++----------
 testcases/zpinch_example/fort.90    |  0
 testcases/zpinch_example/fort_00.90 | 13 ++++++------
 7 files changed, 45 insertions(+), 27 deletions(-)
 delete mode 100644 testcases/zpinch_example/fort.90

diff --git a/src/array_mod.F90 b/src/array_mod.F90
index 74916783..12f7b152 100644
--- a/src/array_mod.F90
+++ b/src/array_mod.F90
@@ -51,7 +51,7 @@ MODULE array
   ! REAL(xp), DIMENSION(:,:,:), ALLOCATABLE :: HF_phi_correction_operator
 
   ! Kinetic spectrum sum_kx,ky(|Napj(z)|^2), (ia,ip,ij,iz) (should be real)
-  REAL(xp), DIMENSION(:,:,:,:), ALLOCATABLE :: Napjz
+  COMPLEX(xp), DIMENSION(:,:,:,:), ALLOCATABLE :: Napjz
 
   ! particle density for electron and ions (iky,ikx,iz)
   COMPLEX(xp), DIMENSION(:,:,:,:), ALLOCATABLE :: dens
diff --git a/src/inital.F90 b/src/inital.F90
index cfc88cb4..6a1eca0e 100644
--- a/src/inital.F90
+++ b/src/inital.F90
@@ -20,8 +20,9 @@ SUBROUTINE inital
   !!!!!! Set the moments arrays Nepj, Nipj and phi!!!!!!
   ! through loading a previous state
   IF ( job2load .GE. 0 ) THEN
-   CALL speak('Load moments')
+    CALL speak('Load moments')
     CALL load_moments ! get N_0
+    CALL apply_closure_model
     CALL update_ghosts_moments
     CALL solve_EM_fields ! compute phi_0=phi(N_0)
     CALL update_ghosts_EM
@@ -324,7 +325,7 @@ END SUBROUTINE init_phi_ppj
 !!!!!!! Initialize an ionic Gaussian blob on top of the preexisting modes
 !******************************************************************************!
 SUBROUTINE initialize_blob
-  USE grid,       ONLY: local_na, local_np, local_nj, total_nkx, local_nky, local_nz,&
+  USE grid,       ONLY: local_na, local_np, local_nj, total_nkx, local_nky, local_nz, total_nz,&
                         AA_x, AA_y, parray, jarray,&
                         ngp,ngj,ngz, iky0, ieven, kxarray, kyarray, zarray
   USE fields,     ONLY: moments
@@ -335,9 +336,16 @@ SUBROUTINE initialize_blob
   IMPLICIT NONE
   REAL(xp) ::kx, ky, z, sigma_x, sigma_y, gain
   INTEGER :: ia,iky,ikx,iz,ip,ij, p, j
-  sigma_y = 1.0
+  sigma_y = 0.5
   sigma_x = sigma_y
-  gain  = 10.0
+  gain  = 1.0
+  ! One can increase the gain if we run 3D sim
+  IF(total_nz .GT. 1) THEN
+    sigma_y = 1.0
+    sigma_x = sigma_y
+    gain = 10.0
+  ENDIF
+
   DO ia=1,local_na
     DO iky=1,local_nky
       ky = kyarray(iky)
diff --git a/src/memory.F90 b/src/memory.F90
index d32069b6..d6729c8c 100644
--- a/src/memory.F90
+++ b/src/memory.F90
@@ -35,7 +35,7 @@ SUBROUTINE memory
   CALL allocate_array(          Sapj, 1,local_na, 1,local_np,  1,local_nj, 1,local_nky, 1,local_nkx, 1,local_nz)
   
   ! 4D+ arrays
-  CALL allocate_array(         napjz, 1,local_na,  1,local_np,  1,local_nj, 1,local_nz)
+  CALL allocate_array(         Napjz, 1,local_na,  1,local_np,  1,local_nj, 1,local_nz)
   CALL allocate_array(          dens, 1,local_na, 1,local_nky, 1,local_nkx, 1,local_nz)
   CALL allocate_array(          upar, 1,local_na, 1,local_nky, 1,local_nkx, 1,local_nz)
   CALL allocate_array(          uper, 1,local_na, 1,local_nky, 1,local_nkx, 1,local_nz)
diff --git a/src/processing_mod.F90 b/src/processing_mod.F90
index be8ed50b..911f2871 100644
--- a/src/processing_mod.F90
+++ b/src/processing_mod.F90
@@ -377,18 +377,18 @@ CONTAINS
       USE array,  ONLY : Napjz
       USE time_integration, ONLY : updatetlevel
       IMPLICIT NONE
-      REAL(xp), DIMENSION(local_np,local_nj,local_nz) :: local_sum,global_sum, buffer
+      REAL(xp), DIMENSION(local_np,local_nj,local_nz) :: local_sum, global_sum, buffer
       INTEGER  :: i_, root, count, ia, ip, ij, iky, ikx, iz
       root = 0
       DO ia=1,local_na
          ! z-moment spectrum
          ! build local sum
          local_sum = 0._xp
-         DO iz = 1,local_nz
+         DO iz  = 1,local_nz
          DO ikx = 1,local_nkx
          DO iky = 1,local_nky
-         DO ij = 1,local_nj
-         DO ip = 1,local_np
+         DO ij  = 1,local_nj
+         DO ip  = 1,local_np
             local_sum(ip,ij,iz)  = local_sum(ip,ij,iz)  + &
                (moments(ia,ip+Ngp/2,ij+Ngj/2,iky,ikx,iz+Ngz/2,updatetlevel) &
                * CONJG(moments(ia,ip+Ngp/2,ij+Ngj/2,iky,ikx,iz+Ngz/2,updatetlevel)))
diff --git a/src/restarts_mod.F90 b/src/restarts_mod.F90
index 142231aa..8dc162fa 100644
--- a/src/restarts_mod.F90
+++ b/src/restarts_mod.F90
@@ -2,7 +2,9 @@ MODULE restarts
 USE basic
 USE futils,          ONLY: openf, closef, getarr, getatt, isgroup,&
                            isdataset, getarrnd, putarrnd
-USE grid
+USE grid, ONLY: local_Na,local_Na_offset,local_np,local_np_offset,&
+local_nj,local_nj_offset,local_nky,local_nky_offset,local_nkx,local_nkx_offset,&
+local_nz,local_nz_offset,ngp,ngj,ngz, total_nz, deltap
 USE fields
 USE diagnostics_par
 USE time_integration
@@ -23,8 +25,8 @@ CONTAINS
     INTEGER :: cstep_cp, jobnum_cp
     INTEGER :: n_
     INTEGER :: deltap_cp
-    INTEGER :: pmax_cp, jmax_cp, n0, Nkx_cp, Nky_cp, Nz_cp, Na_cp, Np_cp, Nj_cp
-    INTEGER :: ia,ip,ij,iky,ikx,iz, iacp,ipcp,ijcp,iycp,ixcp,izcp, ierr
+    INTEGER :: n0, Np_cp, Nj_cp, Nkx_cp, Nky_cp, Nz_cp, Na_cp
+    INTEGER :: ia,ip,ij,iky,ikx,iz,it, iacp,ipcp,ijcp,iycp,ixcp,izcp, ierr
     INTEGER :: ipi,iji,izi
     REAL(xp):: timer_tot_1,timer_tot_2
     COMPLEX(xp), DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: moments_cp
@@ -38,15 +40,13 @@ CONTAINS
     CALL getatt(fidrst,"/data/input/grid" ,   "Nkx",   Nkx_cp)
     CALL getatt(fidrst,"/data/input/grid" ,   "Nky",   Nky_cp)
     CALL getatt(fidrst,"/data/input/grid" ,    "Nz",    Nz_cp)
-    IF(Nz_cp .NE. Nz) &
+    IF(Nz_cp .NE. total_nz) &
       ERROR STOP "!! cannot change Nz in a restart, interp or reduction not implemented !!"
     CALL getatt(fidrst,"/data/input/grid" ,"deltap",deltap_cp)
     IF(deltap_cp .NE. deltap) &
       ERROR STOP "!! cannot change deltap in a restart, not implemented !!"
-    CALL getatt(fidrst,"/data/input/grid" , "pmax", pmax_cp)
-    Np_cp = pmax_cp/deltap_cp+1
-    CALL getatt(fidrst,"/data/input/grid" , "jmax", jmax_cp)
-    Nj_cp = jmax_cp+1
+    CALL getatt(fidrst,"/data/input/grid" , "Np", Np_cp)
+    CALL getatt(fidrst,"/data/input/grid" , "Nj", Nj_cp)
     CALL getatt(fidrst,"/data/input/model",   "Na",   Na_cp)
     CALL getatt(fidrst,"/data/input/basic" , "start_iframe5d", n0)
     ! Find the last results of the checkpoint file by iteration
@@ -67,10 +67,10 @@ CONTAINS
     CALL speak('.. restart from t = '//str(time))
     ! Read state of system from checkpoint file
     ! Brute force loading: load the full moments and take what is needed (RAM dangerous...)
-    ! other possibility is to loop over slices
+    ! (other possibility would be to loop over slices)
     CALL allocate_array(moments_cp, 1,Na_cp, 1,Np_cp, 1,Nj_cp, 1,Nky_cp, 1,Nkx_cp, 1,Nz_cp)
     WRITE(dset_name, "(A, '/', i6.6)") "/data/var5d/moments", n_
-    CALL getarr(fidrst, dset_name, moments_cp(:,:,:,:,:,:))
+    CALL getarr(fidrst, dset_name, moments_cp)
 
     moments     = 0._xp;
     z: DO iz = 1,local_nz
@@ -86,7 +86,7 @@ CONTAINS
             p: DO ip=1,local_np
               ipcp = ip + local_np_offset
               ipi  = ip + ngp/2
-              a: DO ia=1,Na_cp
+              a: DO ia=1,local_na
                 iacp = ia + local_na_offset
                 ! IF((iacp.LE.Na_cp).AND.(ipcp.LE.Np_cp).AND.(ijcp.LE.Nj_cp).AND.(iycp.LE.Nky_cp).AND.(ixcp.LE.Nkx_cp).AND.(izcp.LE.Nz_cp)) &
                   moments(ia,ipi,iji,iky,ikx,izi,1) = moments_cp(iacp,ipcp,ijcp,iycp,ixcp,izcp)
@@ -96,6 +96,15 @@ CONTAINS
         ENDDO y
       ENDDO x
     ENDDO z
+    ! DO it = 1,4
+    ! moments(1:local_Na,(1+ngp/2):(local_np+ngp/2),(1+ngj/2):(local_nj+ngj/2),1:local_nky,1:local_nkx,(1+ngz/2):(local_nz+ngz/2),it) =&
+    ! moments_cp((1+local_Na_offset):(local_Na+local_Na_offset),&
+    !            (1+local_np_offset):(local_np+local_np_offset),&
+    !            (1+local_nj_offset):(local_nj+local_nj_offset),&
+    !            (1+local_nky_offset):(local_nky+local_nky_offset),&
+    !            (1+local_nkx_offset):(local_nkx+local_nkx_offset),&
+    !            (1+local_nz_offset):(local_nz+local_nz_offset))
+    ! ENDDO
     !! deallocate the full moment variable
     DEALLOCATE(moments_cp)
     CALL closef(fidrst)
diff --git a/testcases/zpinch_example/fort.90 b/testcases/zpinch_example/fort.90
deleted file mode 100644
index e69de29b..00000000
diff --git a/testcases/zpinch_example/fort_00.90 b/testcases/zpinch_example/fort_00.90
index fb603223..2f9ce8c3 100644
--- a/testcases/zpinch_example/fort_00.90
+++ b/testcases/zpinch_example/fort_00.90
@@ -1,14 +1,14 @@
 &BASIC
   nrun       = 99999999
   dt         = 0.01
-  tmax       = 50
+  tmax       = 25
   maxruntime = 72000
   job2load   = -1
 /
 &GRID
-  pmax   = 4
-  jmax   = 2
-  Nx     = 128
+  pmax   = 2
+  jmax   = 1
+  Nx     = 64
   Lx     = 200
   Ny     = 48
   Ly     = 60
@@ -63,7 +63,8 @@
 /
 &CLOSURE_PAR
   hierarchy_closure='truncation'
-  dmax = -1
+  !hierarchy_closure='max_degree'
+  dmax = 2
   nonlinear_closure='anti_laguerre_aliasing' !(truncation,full_sum,anti_laguerre_aliasing)
   nmax = 0
 /
@@ -92,7 +93,7 @@
   mat_file       = 'gk_sugama_P_20_J_10_N_150_kpm_8.0.h5'
 /
 &INITIAL_CON
-  INIT_OPT         = 'phi' !(phi,blob)
+  INIT_OPT         = 'blob' !(phi,blob)
   ACT_ON_MODES     = 'donothing'
   init_background  = 0.0
   init_noiselvl    = 0.005
-- 
GitLab