From 67e0741659c6da9fb9f1b95672b09d73cd05b861 Mon Sep 17 00:00:00 2001
From: Antoine Hoffmann <antoine.hoffmann@epfl.ch>
Date: Wed, 21 Sep 2022 17:44:25 +0200
Subject: [PATCH] flags for EM

---
 src/grid_mod.F90 | 55 ++++++++++++++++++++++--------------------------
 1 file changed, 25 insertions(+), 30 deletions(-)

diff --git a/src/grid_mod.F90 b/src/grid_mod.F90
index 9145c054..d1936925 100644
--- a/src/grid_mod.F90
+++ b/src/grid_mod.F90
@@ -95,13 +95,15 @@ MODULE grid
   INTEGER,  PUBLIC, PROTECTED ::  ips_i,ipe_i, ijs_i,ije_i
   INTEGER,  PUBLIC, PROTECTED ::  ipgs_e,ipge_e, ijgs_e,ijge_e ! Ghosts start and end indices
   INTEGER,  PUBLIC, PROTECTED ::  ipgs_i,ipge_i, ijgs_i,ijge_i
-  INTEGER,  PUBLIC, PROTECTED ::  deltape, ip0_e, ip1_e, ip2_e ! Pgrid spacing and moment 0,1,2 index
-  INTEGER,  PUBLIC, PROTECTED ::  deltapi, ip0_i, ip1_i, ip2_i
+  INTEGER,  PUBLIC, PROTECTED ::  deltape, ip0_e, ip1_e, ip2_e, ip3_e ! Pgrid spacing and moment 0,1,2 index
+  INTEGER,  PUBLIC, PROTECTED ::  deltapi, ip0_i, ip1_i, ip2_i, ip3_i
   LOGICAL,  PUBLIC, PROTECTED ::  CONTAINS_ip0_e, CONTAINS_ip0_i
   LOGICAL,  PUBLIC, PROTECTED ::  CONTAINS_ip1_e, CONTAINS_ip1_i
   LOGICAL,  PUBLIC, PROTECTED ::  CONTAINS_ip2_e, CONTAINS_ip2_i
+  LOGICAL,  PUBLIC, PROTECTED ::  CONTAINS_ip3_e, CONTAINS_ip3_i
   LOGICAL,  PUBLIC, PROTECTED ::  SOLVE_POISSON, SOLVE_AMPERE
-  ! Usefull inverse numbers
+  INTEGER,  PUBLIC, PROTECTED ::  ij0_i, ij0_e
+! Usefull inverse numbers
   REAL(dp), PUBLIC, PROTECTED :: inv_Nx, inv_Ny, inv_Nz
 
   ! Public Functions
@@ -205,42 +207,32 @@ CONTAINS
 
     !! local grid computations
     ! Flag to avoid unnecessary logical operations
-    CONTAINS_ip0_e = .FALSE.; CONTAINS_ip1_e = .FALSE.; CONTAINS_ip2_e = .FALSE.
-    CONTAINS_ip0_i = .FALSE.; CONTAINS_ip1_i = .FALSE.; CONTAINS_ip2_i = .FALSE.
+    CONTAINS_ip0_e = .FALSE.; CONTAINS_ip1_e = .FALSE.
+    CONTAINS_ip2_e = .FALSE.; CONTAINS_ip3_e = .FALSE.
+    CONTAINS_ip0_i = .FALSE.; CONTAINS_ip1_i = .FALSE.
+    CONTAINS_ip2_i = .FALSE.; CONTAINS_ip3_i = .FALSE.
     SOLVE_POISSON  = .FALSE.; SOLVE_AMPERE   = .FALSE.
     ALLOCATE(parray_e(ipgs_e:ipge_e))
     ALLOCATE(parray_i(ipgs_i:ipge_i))
     DO ip = ipgs_e,ipge_e
       parray_e(ip) = (ip-1)*deltape
       ! Storing indices of particular degrees for fluid moments computations
-      IF(parray_e(ip) .EQ. 0) THEN
-        ip0_e          = ip
-        CONTAINS_ip0_e = .TRUE.
-      ENDIF
-      IF(parray_e(ip) .EQ. 1) THEN
-        ip1_e          = ip
-        CONTAINS_ip1_e = .TRUE.
-      ENDIF
-      IF(parray_e(ip) .EQ. 2) THEN
-        ip2_e          = ip
-        CONTAINS_ip2_e = .TRUE.
-      ENDIF
+      SELECT CASE (parray_e(ip))
+      CASE(0); ip0_e = ip; CONTAINS_ip0_e = .TRUE.
+      CASE(1); ip1_e = ip; CONTAINS_ip1_e = .TRUE.
+      CASE(2); ip2_e = ip; CONTAINS_ip2_e = .TRUE.
+      CASE(3); ip3_e = ip; CONTAINS_ip3_e = .TRUE.
+      END SELECT
     END DO
     DO ip = ipgs_i,ipge_i
       parray_i(ip) = (ip-1)*deltapi
       ! Storing indices of particular degrees for fluid moments computations
-      IF(parray_i(ip) .EQ. 0) THEN
-        ip0_i          = ip
-        CONTAINS_ip0_i = .TRUE.
-    ENDIF
-      IF(parray_i(ip) .EQ. 1) THEN
-        ip1_i          = ip
-        CONTAINS_ip1_i = .TRUE.
-      ENDIF
-      IF(parray_i(ip) .EQ. 2) THEN
-        ip2_i          = ip
-        CONTAINS_ip2_i = .TRUE.
-      ENDIF
+      SELECT CASE (parray_i(ip))
+      CASE(0); ip0_i = ip; CONTAINS_ip0_i = .TRUE.
+      CASE(1); ip1_i = ip; CONTAINS_ip1_i = .TRUE.
+      CASE(2); ip2_i = ip; CONTAINS_ip2_i = .TRUE.
+      CASE(3); ip3_i = ip; CONTAINS_ip3_i = .TRUE.
+      END SELECT
     END DO
     IF(CONTAINS_ip0_e .AND. CONTAINS_ip0_i) SOLVE_POISSON = .TRUE.
     IF(CONTAINS_ip1_e .AND. CONTAINS_ip1_i) SOLVE_AMPERE  = .TRUE.
@@ -285,9 +277,12 @@ CONTAINS
     DO ij = ijgs_e,ijge_e; jarray_e(ij) = ij-1; END DO
     DO ij = ijgs_i,ijge_i; jarray_i(ij) = ij-1; END DO
     ! Precomputations
-    maxj  = MAX(jmaxi, jmaxe)
+    maxj       = MAX(jmaxi, jmaxe)
     jmaxe_dp   = real(jmaxe,dp)
     jmaxi_dp   = real(jmaxi,dp)
+    ! j=0 indices
+    DO ij = ijs_e,ij0_e; IF(jarray_e(ij) .EQ. 0) ij0_e = ij; END DO
+    DO ij = ijs_i,ij0_i; IF(jarray_i(ij) .EQ. 0) ij0_i = ij; END DO
   END SUBROUTINE set_jgrid
 
 
-- 
GitLab