From 5636a3ee077569bedbc4b474c5bb2bab787d1612 Mon Sep 17 00:00:00 2001 From: Antoine Hoffmann <antoine.hoffmann@epfl.ch> Date: Mon, 27 Feb 2023 18:04:09 +0100 Subject: [PATCH] explicit modules requirement writing and bug in checkfield --- src/stepon.F90 | 54 +++++++++++++++++++++++++++++---------------- src/utility_mod.F90 | 31 +++++++++++--------------- 2 files changed, 48 insertions(+), 37 deletions(-) diff --git a/src/stepon.F90 b/src/stepon.F90 index 529a69c9..b2fec775 100644 --- a/src/stepon.F90 +++ b/src/stepon.F90 @@ -1,14 +1,11 @@ SUBROUTINE stepon ! Advance one time step, (num_step=4 for Runge Kutta 4 scheme) - USE advance_field_routine, ONLY: advance_time_level, advance_field, advance_moments - USE basic - USE closure - USE ghosts, ONLY: update_ghosts_moments, update_ghosts_EM - USE grid - USE model, ONLY : LINEARITY, KIN_E - use prec_const - USE time_integration - USE utility, ONLY: checkfield + USE advance_field_routine, ONLY: advance_time_level, advance_moments + USE basic, ONLY: nlend, ierr + USE closure, ONLY: apply_closure_model + USE ghosts, ONLY: update_ghosts_moments, update_ghosts_EM + use mpi, ONLY: MPI_COMM_WORLD + USE time_integration, ONLY: ntimelevel IMPLICIT NONE INTEGER :: num_step @@ -64,8 +61,16 @@ SUBROUTINE stepon END SUBROUTINE assemble_RHS SUBROUTINE checkfield_all ! Check all the fields for inf or nan + USE utility,ONLY: checkfield + USE basic, ONLY: t0_checkfield, t1_checkfield, tc_checkfield USE fields, ONLY: phi, moments_e, moments_i + USE grid, ONLY: ipgs_e,ipge_e,ijgs_e,ijge_e,ipgs_i,ipge_i,ijgs_i,ijge_i,& + ikys,ikye,ikxs,ikxe,izgs,izge,ij,ip + USE MPI + USE time_integration, ONLY: updatetlevel + USE model, ONLY: LINEARITY, KIN_E IMPLICIT NONE + LOGICAL :: checkf_ ! Execution time start CALL cpu_time(t0_checkfield) @@ -74,17 +79,22 @@ SUBROUTINE stepon mlend=.FALSE. IF(.NOT.nlend) THEN - mlend=mlend .or. checkfield(phi,' phi') + checkf_ = checkfield(phi,' phi') + mlend= (mlend .or. checkf_) IF(KIN_E) THEN DO ij=ijgs_e,ijge_e DO ip=ipgs_e,ipge_e - mlend=mlend .or. checkfield(moments_e(ip,ij,:,:,:,updatetlevel),' moments_e') + checkf_ = checkfield(moments_e(ip,ij,ikys:ikye,ikxs:ikxe,izgs:izge,updatetlevel),' moments_e') + mlend = (mlend .or. checkf_) ENDDO ENDDO ENDIF DO ij=ijgs_i,ijge_i DO ip=ipgs_i,ipge_i - mlend=mlend .or. checkfield(moments_i(ip,ij,:,:,:,updatetlevel),' moments_i') + checkf_ = checkfield(moments_i(ip,ij,ikys:ikye,ikxs:ikxe,izgs:izge,updatetlevel),' moments_i') + mlend = (mlend .or. checkf_) + ! print*, 'should be an error' + ! stop ENDDO ENDDO CALL MPI_ALLREDUCE(mlend, nlend, 1, MPI_LOGICAL, MPI_LOR, MPI_COMM_WORLD, ierr) @@ -97,6 +107,9 @@ SUBROUTINE stepon SUBROUTINE anti_aliasing USE fields, ONLY: moments_e, moments_i + USE grid, ONLY: ipgs_i,ipge_i,ijgs_i,ijge_i,ipgs_e,ipge_e,ijgs_e,ijge_e,& + ikys,ikye,ikxs,ikxe,izgs,izge,AA_x,AA_y,iz,ikx,iky,ij,ip + USE model, ONLY: KIN_E IMPLICIT NONE IF(KIN_E)THEN DO iz=izgs,izge @@ -114,7 +127,7 @@ SUBROUTINE stepon DO iz=izgs,izge DO ikx=ikxs,ikxe DO iky=ikys,ikye - DO ij=ijs_i,ije_i + DO ij=ijgs_i,ijge_i DO ip=ipgs_i,ipge_i moments_i( ip,ij,iky,ikx,iz,:) = AA_x(ikx)* AA_y(iky) * moments_i( ip,ij,iky,ikx,iz,:) END DO @@ -126,11 +139,14 @@ SUBROUTINE stepon SUBROUTINE enforce_symmetry ! Force X(k) = X(N-k)* complex conjugate symmetry USE fields, ONLY: phi, psi, moments_e, moments_i + USE grid, ONLY: ipgs_i,ipge_i,ijgs_i,ijge_i,ipgs_e,ipge_e,ijgs_e,ijge_e,& + izgs,izge,iz,ikx,ij,ip,Nkx, iky_0, ikx_0, contains_ky0 + USE model, ONLY: KIN_E IMPLICIT NONE IF ( contains_ky0 ) THEN ! Electron moments IF(KIN_E) THEN - DO iz=izs,ize + DO iz=izgs,izge DO ij=ijgs_e,ijge_e DO ip=ipgs_e,ipge_e DO ikx=2,Nkx/2 !symmetry at ky = 0 @@ -143,7 +159,7 @@ SUBROUTINE stepon END DO ENDIF ! Ion moments - DO iz=izs,ize + DO iz=izgs,izge DO ij=ijgs_i,ijge_i DO ip=ipgs_i,ipge_i DO ikx=2,Nkx/2 !symmetry at ky = 0 @@ -156,16 +172,16 @@ SUBROUTINE stepon END DO ! Phi DO ikx=2,Nkx/2 !symmetry at ky = 0 - phi(iky_0,ikx,izs:ize) = phi(iky_0,Nkx+2-ikx,izs:ize) + phi(iky_0,ikx,izgs:izge) = phi(iky_0,Nkx+2-ikx,izgs:izge) END DO ! must be real at origin - phi(iky_0,ikx_0,izs:ize) = REAL(phi(iky_0,ikx_0,izs:ize)) + phi(iky_0,ikx_0,izgs:izge) = REAL(phi(iky_0,ikx_0,izgs:izge)) ! Psi DO ikx=2,Nkx/2 !symmetry at ky = 0 - psi(iky_0,ikx,izs:ize) = psi(iky_0,Nkx+2-ikx,izs:ize) + psi(iky_0,ikx,izgs:izge) = psi(iky_0,Nkx+2-ikx,izgs:izge) END DO ! must be real at origin - psi(iky_0,ikx_0,izs:ize) = REAL(psi(iky_0,ikx_0,izs:ize)) + psi(iky_0,ikx_0,izgs:izge) = REAL(psi(iky_0,ikx_0,izgs:izge)) ENDIF END SUBROUTINE enforce_symmetry diff --git a/src/utility_mod.F90 b/src/utility_mod.F90 index b962a4c4..2a547d1a 100644 --- a/src/utility_mod.F90 +++ b/src/utility_mod.F90 @@ -1,16 +1,12 @@ MODULE utility - - USE basic - USE grid, ONLY: Nkx,Nky,Nz, ikys,ikye, izs,ize, local_nky, local_nz - use prec_const IMPLICIT NONE + PUBLIC :: checkfield CONTAINS FUNCTION is_nan(x,str) RESULT(isn) - - USE time_integration - - use prec_const + USE basic, ONLY: cstep, stdout + USE time_integration, ONLY: updatetlevel + USE prec_const, ONLY: dp IMPLICIT NONE real(dp), INTENT(IN) :: x @@ -29,10 +25,8 @@ CONTAINS FUNCTION is_inf(x,str) RESULT(isi) - - USE time_integration - - use prec_const + USE basic, ONLY: stdout + USE prec_const, ONLY: dp IMPLICIT NONE real(dp), INTENT(IN) :: x @@ -51,13 +45,14 @@ CONTAINS END FUNCTION is_inf FUNCTION checkfield(field,str) RESULT(mlend) - - USE grid - - use prec_const + USE grid, ONLY: ikys,ikye,ikxs,ikxe,izgs,izge + use prec_const, ONLY: dp IMPLICIT NONE - - COMPLEX(dp), DIMENSION(ikys:ikye,ikxs:ikxe), INTENT(IN) :: field + !! BUG found (or feature?) + ! if one put the commented first line (commented) instead of the second one, + ! no error will be risen by the compiler even if the rank of the array is not matching (should be 3D!) + ! COMPLEX(dp), DIMENSION(ikys:ikye,ikxs:ikxe), INTENT(IN) :: field + COMPLEX(dp), DIMENSION(ikys:ikye,ikxs:ikxe,izgs:izge), INTENT(IN) :: field CHARACTER(LEN=*), INTENT(IN) :: str LOGICAL :: mlend COMPLEX(dp) :: sumfield -- GitLab