From 7398d80ef1f5cc39e152814fbfd37bfb5e6295d3 Mon Sep 17 00:00:00 2001
From: Antoine Cyril David Hoffmann <ahoffman@spcpc606.epfl.ch>
Date: Tue, 20 Apr 2021 10:19:42 +0200
Subject: [PATCH] implicit, lighter writing of loops

---
 src/advance_field.F90 | 43 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 43 insertions(+)

diff --git a/src/advance_field.F90 b/src/advance_field.F90
index ef7d2e46..f8ee34c8 100644
--- a/src/advance_field.F90
+++ b/src/advance_field.F90
@@ -14,6 +14,49 @@ CONTAINS
     CALL set_updatetlevel(mod(updatetlevel,ntimelevel)+1)
   END SUBROUTINE advance_time_level
 
+  SUBROUTINE advance_moments_explicit
+
+    USE basic
+    USE time_integration
+    USE grid
+    use prec_const
+    use fields, ONLY: moments_e,     moments_i
+    use array,  ONLY: moments_rhs_e, moments_rhs_i
+    IMPLICIT NONE
+
+    INTEGER :: istage
+    ! Execution time start
+    CALL cpu_time(t0_adv_field)
+    SELECT CASE (updatetlevel)
+    CASE(1)
+      DO istage=1,ntimelevel
+        moments_e(ips_e:ipe_e,ijs_e:ije_e,:,:,1) = moments_e(ips_e:ipe_e,ijs_e:ije_e,:,:,1) &
+                    + dt*b_E(istage)*moments_rhs_e(ips_e:ipe_e,ijs_e:ije_e,:,:,istage)
+      END DO
+      ! Advance ions
+      DO istage=1,ntimelevel
+        moments_i(ips_i:ipe_i,ijs_i:ije_i,:,:,1) = moments_i(ips_i:ipe_i,ijs_i:ije_i,:,:,1) &
+                    + dt*b_E(istage)*moments_rhs_i(ips_i:ipe_i,ijs_i:ije_i,:,:,istage)
+      END DO
+
+    CASE DEFAULT
+      ! Advance electrons
+      moments_e(ips_e:ipe_e,ijs_e:ije_e,:,:,updatetlevel) = moments_e(ips_e:ipe_e,ijs_e:ije_e,:,:,1);
+      DO istage=1,updatetlevel-1
+        moments_e(ips_e:ipe_e,ijs_e:ije_e,:,:,updatetlevel) = moments_e(ips_e:ipe_e,ijs_e:ije_e,:,:,updatetlevel) &
+              + dt*A_E(updatetlevel,istage)*moments_rhs_e(ips_e:ipe_e,ijs_e:ije_e,:,:,istage)
+      END DO
+      ! Advance ions
+      moments_i(ips_i:ipe_i,ijs_i:ije_i,:,:,updatetlevel) = moments_i(ips_i:ipe_i,ijs_i:ije_i,:,:,1);
+      DO istage=1,updatetlevel-1
+        moments_i(ips_i:ipe_i,ijs_i:ije_i,:,:,updatetlevel) = moments_i(ips_i:ipe_i,ijs_i:ije_i,:,:,updatetlevel) &
+              + dt*A_E(updatetlevel,istage)*moments_rhs_i(ips_i:ipe_i,ijs_i:ije_i,:,:,istage)
+      END DO
+    END SELECT
+    ! Execution time end
+    CALL cpu_time(t1_adv_field)
+    tc_adv_field = tc_adv_field + (t1_adv_field - t0_adv_field)
+  END SUBROUTINE advance_moments_explicit
 
 
   SUBROUTINE advance_field( f, f_rhs )
-- 
GitLab