From ca643c9bac9269ba7d34535ff7f1e29c8723e387 Mon Sep 17 00:00:00 2001
From: Antoine Cyril David Hoffmann <ahoffman@spcpc606.epfl.ch>
Date: Fri, 15 Jan 2021 14:33:33 +0100
Subject: [PATCH] One can continue simulation with different PJ now

---
 src/inital.F90 | 84 ++++++++++++++++++++++++++++++++++----------------
 1 file changed, 57 insertions(+), 27 deletions(-)

diff --git a/src/inital.F90 b/src/inital.F90
index 3d915952..08da3d52 100644
--- a/src/inital.F90
+++ b/src/inital.F90
@@ -10,6 +10,7 @@ SUBROUTINE inital
   USE time_integration
   USE array, ONLY : Sepj,Sipj
   USE collision
+  USE closure
 
   implicit none
 
@@ -45,6 +46,10 @@ SUBROUTINE inital
     IF (my_id .EQ. 0) WRITE(*,*) '..done'
   ENDIF
 
+  IF (my_id .EQ. 0) WRITE(*,*) 'Set closure model..'
+  CALL apply_closure_model
+  IF (my_id .EQ. 0) WRITE(*,*) '..done'
+
 END SUBROUTINE inital
 !******************************************************************************!
 
@@ -146,8 +151,11 @@ SUBROUTINE load_cp
   IMPLICIT NONE
 
   INTEGER :: rank, sz_, n_
-  INTEGER ::  dims(1) = (/0/)
+  INTEGER :: dims(1) = (/0/)
   CHARACTER(LEN=50) :: dset_name
+  INTEGER :: pmaxe_cp, jmaxe_cp, pmaxi_cp, jmaxi_cp
+  COMPLEX(dp), DIMENSION(:,:,:,:), ALLOCATABLE :: moments_e_cp
+  COMPLEX(dp), DIMENSION(:,:,:,:), ALLOCATABLE :: moments_i_cp
 
   WRITE(rstfile,'(a,a1,i2.2,a3)') TRIM(rstfile0),'_',job2load,'.h5'
 
@@ -155,32 +163,54 @@ SUBROUTINE load_cp
 
   CALL openf(rstfile, fidrst,mpicomm=MPI_COMM_WORLD)
 
-    n_ = 0
-    WRITE(dset_name, "(A, '/', i6.6)") "/Basic/moments_e", n_
-    DO WHILE (isdataset(fidrst, dset_name))
-      n_ = n_ + 1
-      WRITE(dset_name, "(A, '/', i6.6)") "/Basic/moments_e", n_
-    ENDDO
-    n_ = n_ - 1
-    WRITE(dset_name, "(A, '/', i6.6)") "/Basic/moments_e", n_
-    WRITE(dset_name, "(A, '/', i6.6)") "/Basic/moments_i", n_
-
-    ! Read state of system from restart file
-    WRITE(dset_name, "(A, '/', i6.6)") "/Basic/moments_i", n_
-    CALL getarr(fidrst, dset_name, moments_i(ips_i:ipe_i,ijs_i:ije_i,ikrs:ikre,ikzs:ikze,1),pardim=3)
+  CALL getatt(fidrst,"/Basic/moments_e/" , "pmaxe", pmaxe_cp)
+  CALL getatt(fidrst,"/Basic/moments_e/" , "jmaxe", jmaxe_cp)
+  CALL getatt(fidrst,"/Basic/moments_i/" , "pmaxi", pmaxi_cp)
+  CALL getatt(fidrst,"/Basic/moments_i/" , "jmaxi", jmaxi_cp)
+  ! pmaxe_cp = 3
+  ! jmaxe_cp = 2
+  ! pmaxi_cp = 3
+  ! jmaxi_cp = 2
+  CALL allocate_array(moments_e_cp, 1,pmaxe_cp+1, 1,jmaxe_cp+1, ikrs,ikre, ikzs,ikze)
+  CALL allocate_array(moments_i_cp, 1,pmaxi_cp+1, 1,jmaxi_cp+1, ikrs,ikre, ikzs,ikze)
+
+  n_ = 0
+  WRITE(dset_name, "(A, '/', i6.6)") "/Basic/moments_e", n_
+  DO WHILE (isdataset(fidrst, dset_name))
+    n_ = n_ + 1
     WRITE(dset_name, "(A, '/', i6.6)") "/Basic/moments_e", n_
-    CALL getarr(fidrst, dset_name, moments_e(ips_e:ipe_e,ijs_e:ije_e,ikrs:ikre,ikzs:ikze,1),pardim=3)
-    WRITE(dset_name, "(A, '/', i6.6)") "/Basic/phi", n_
-    CALL getarr(fidrst, dset_name, phi(ikrs:ikre,ikzs:ikze),pardim=1)
-
-    ! Read time dependent attributes
-    CALL getatt(fidrst, dset_name, 'cstep', cstep)
-    CALL getatt(fidrst, dset_name, 'time', time)
-    CALL getatt(fidrst, dset_name, 'jobnum', jobnum)
-    jobnum = jobnum+1
-    CALL getatt(fidrst, dset_name, 'iframe2d',iframe2d)
-    CALL getatt(fidrst, dset_name, 'iframe5d',iframe5d)
-    iframe2d = iframe2d-1; iframe5d = iframe5d-1
+  ENDDO
+  n_ = n_ - 1
+  WRITE(dset_name, "(A, '/', i6.6)") "/Basic/moments_e", n_
+  WRITE(dset_name, "(A, '/', i6.6)") "/Basic/moments_i", n_
+
+  ! Read state of system from restart file
+  WRITE(dset_name, "(A, '/', i6.6)") "/Basic/moments_e", n_
+  CALL getarr(fidrst, dset_name, moments_e_cp(1:pmaxe_cp+1, 1:jmaxe_cp+1, ikrs:ikre, ikzs:ikze),pardim=3)
+  WRITE(dset_name, "(A, '/', i6.6)") "/Basic/moments_i", n_
+  CALL getarr(fidrst, dset_name, moments_i_cp(1:pmaxi_cp+1, 1:jmaxi_cp+1, ikrs:ikre, ikzs:ikze),pardim=3)
+  WRITE(dset_name, "(A, '/', i6.6)") "/Basic/phi", n_
+  CALL getarr(fidrst, dset_name, phi(ikrs:ikre,ikzs:ikze),pardim=1)
+  ! Initialize moments array with checkpoints ones
+  moments_e = 0._dp; moments_i = 0._dp
+  DO ip=1,pmaxe_cp+1; DO ij=1,jmaxe_cp+1; DO ikr=ikrs,ikre; DO ikz=ikzs,ikze
+    moments_e(ip,ij,ikr,ikz,1) = moments_e_cp(ip,ij,ikr,ikz)
+  ENDDO; ENDDO; ENDDO; ENDDO
+  DO ip=1,pmaxi_cp+1; DO ij=1,jmaxi_cp+1; DO ikr=ikrs,ikre; DO ikz=ikzs,ikze
+    moments_i(ip,ij,ikr,ikz,1) = moments_i_cp(ip,ij,ikr,ikz)
+  ENDDO; ENDDO; ENDDO; ENDDO
+  ! Deallocate checkpoint arrays
+  DEALLOCATE(moments_e_cp)
+  DEALLOCATE(moments_i_cp)
+
+  ! Read time dependent attributes
+  CALL getatt(fidrst, dset_name, 'cstep', cstep)
+  CALL getatt(fidrst, dset_name, 'time', time)
+  CALL getatt(fidrst, dset_name, 'jobnum', jobnum)
+  jobnum = jobnum+1
+  CALL getatt(fidrst, dset_name, 'iframe2d',iframe2d)
+  CALL getatt(fidrst, dset_name, 'iframe5d',iframe5d)
+  iframe2d = iframe2d-1; iframe5d = iframe5d-1
 
   CALL closef(fidrst)
 
@@ -231,7 +261,7 @@ SUBROUTINE evaluate_kernels
   USE basic
   USE array, Only : kernel_e, kernel_i
   USE grid
-  use model, ONLY : tau_e, tau_i, sigma_e, sigma_i, q_e, q_i, lambdaD, DK
+  use model, ONLY : tau_e, tau_i, sigma_e, sigma_i, q_e, q_i, lambdaD, CLOS
   IMPLICIT NONE
 
   REAL(dp)    :: factj, j_dp, j_int
-- 
GitLab