diff --git a/src/LIB/SURCOUCHE/src/mode_mppdb.f90 b/src/LIB/SURCOUCHE/src/mode_mppdb.f90 index 15727c382c58ae8b7129bb95a03fff771eb02b73..cc3b67c97202e5cde8110d15df720aa5355eacf9 100644 --- a/src/LIB/SURCOUCHE/src/mode_mppdb.f90 +++ b/src/LIB/SURCOUCHE/src/mode_mppdb.f90 @@ -16,6 +16,7 @@ MODULE MODE_MPPDB ! Philippe Wautelet: 22/01/2019: use sleep_c subroutine instead of non-standard call system ! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg ! P. Wautelet 26/04/2019: use modd_precision parameters for datatypes of MPI communications +! J. Escobar 09/07/2019: bug, in MPPDB_CHECK_SURFEX3D, recompute IKSIZE_ll for local 0 size array !----------------------------------------------------------------- ! use ISO_FORTRAN_ENV, only: OUTPUT_UNIT @@ -905,7 +906,7 @@ CONTAINS USE MODI_GET_SURF_MASK_n USE MODD_IO_SURF_MNH, ONLY : NHALO USE MODD_CONFZ , ONLY : MPI_BUFFER_SIZE - USE MODD_MPIF , ONLY : MPI_STATUS_IGNORE, MPI_SUM + USE MODD_MPIF, ONLY: MPI_STATUS_IGNORE, MPI_MAX, MPI_SUM USE MODD_MNH_SURFEX_n use modd_precision, only: MNHINT_MPI ! @@ -925,23 +926,25 @@ CONTAINS INTEGER :: IIU,IJU,IKU INTEGER :: KXOR, KYOR, KXEND, KYEND ! origin and end of the local physical subdomain INTEGER :: II,IJ,IK - INTEGER, ALLOCATABLE, DIMENSION(:) :: KMASK + INTEGER, ALLOCATABLE, DIMENSION(:) :: KMASK INTEGER :: KSIZE INTEGER :: KSIZEBUF INTEGER :: KSIZE_FULL INTEGER :: IGLBSIZEPTAB INTEGER :: INBSLICES INTEGER :: IINFO_ll + INTEGER :: IKSIZE_ll ! IF ( ( .NOT. MPPDB_INITIALIZED ) ) RETURN CALL MPI_ALLREDUCE(SIZE(PTAB), IGLBSIZEPTAB, 1,MNHINT_MPI, MPI_SUM, MPPDB_INTRA_COMM, IINFO_ll) IF ( IGLBSIZEPTAB == 0 ) RETURN + CALL MPI_ALLREDUCE(SIZE(PTAB,2),IKSIZE_ll, 1, MNHINT_MPI, MPI_MAX, MPPDB_INTRA_COMM, IINFO_ll) ! IF ( SIZE(PTAB) == 0 ) THEN !if the local size of the field is 0, we need to define ZFIELD3D filled with default value 1e20 CALL GET_INDICE_ll( KXOR, KYOR, KXEND, KYEND ) IIU = KXEND-KXOR+1+2*JPHEXT IJU = KYEND-KYOR+1+2*JPHEXT - IKU = KZSIZE + IKU = IKSIZE_ll ALLOCATE(ZFIELD3D(IIU,IJU,IKU)) ZFIELD3D = 1.E20 ELSE diff --git a/src/MNH/budget.f90 b/src/MNH/budget.f90 index c8fe1b6cbca301acff0d519a44721f1bc75c17e7..bead348bf8baaeb46487fee30d58dfbd41f65c4e 100644 --- a/src/MNH/budget.f90 +++ b/src/MNH/budget.f90 @@ -77,6 +77,7 @@ END MODULE MODI_BUDGET !! V. Masson 06/10/02 add LES budgets !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +!! J.Escobar : 09/07/2019 : for bit reproductiblity use MPPDB_CHECK with PRECISION=0.0 error !! !------------------------------------------------------------------------------- ! @@ -117,18 +118,15 @@ INTEGER :: IRESP ! Return code of FM-routines REAL :: ZTIME1 ! CPU time counter REAL :: ZTIME2 ! CPU time counter ! -REAL :: XPRECISION ! for reproductibility checks - !------------------------------------------------------------------------------- ! !* Reproductivity checks ! Warning: requires an adaptation of the makefile in order to run two runs in ! parallel for comparison ! -XPRECISION = 1E-10 IF (LCHECK) THEN print*,'BUDGET :',HBUVAR - CALL MPPDB_CHECK3D(PVARS,HBUVAR,XPRECISION) + CALL MPPDB_CHECK3D(PVARS,HBUVAR,PRECISION) END IF ! ! diff --git a/src/MNH/initial_guess.f90 b/src/MNH/initial_guess.f90 index b999796d65677a716cb4da15f59ebbd047961d93..f7d74b6474576d655d59f7a7d6a9d30d128a749a 100644 --- a/src/MNH/initial_guess.f90 +++ b/src/MNH/initial_guess.f90 @@ -144,6 +144,7 @@ END MODULE MODI_INITIAL_GUESS !! 20/05/06 Remove KEPS !! 10/09 (C.Lac) FIT for variables advected with PPM !! 04/13 (C.Lac) FIT for all variables +!! 07/19 (J.Escobar) add reproductiblity test => MPPDB_CHECK( PRRS/RT/RHO ) !! !------------------------------------------------------------------------------- ! @@ -158,6 +159,7 @@ USE MODD_BLOWSNOW_n ! USE MODI_SHUMAN USE MODI_BUDGET +USE MODE_MPPDB ! IMPLICIT NONE ! @@ -218,6 +220,7 @@ END IF DO JRR=1,KRR PRRS(:,:,:,JRR) = PRT(:,:,:,JRR) * ZINVTSTEP * PRHODJ(:,:,:) END DO +CALL MPPDB_CHECK3DM("initial_guess:PRRS/RT/RHO",PRECISION,PRRS(:,:,:,1) , PRT(:,:,:,1) , PRHODJ) ! ! *** passive tracers ! diff --git a/src/MNH/modd_sub_modeln.f90 b/src/MNH/modd_sub_modeln.f90 index b6e364b2222e189bce38a1b8f00314c1b815b2bc..326de827d4e9ad98b76d86c68b05b290806bfd80 100644 --- a/src/MNH/modd_sub_modeln.f90 +++ b/src/MNH/modd_sub_modeln.f90 @@ -8,6 +8,8 @@ ! J. Escobar 18/06/2018: bug compile R*4 => real*8 pointer XT_VISC ! P. Wautelet 08/02/2019: add missing NULL association for pointers ! P. Wautelet 28/03/2019: use MNHTIME for time measurement variables +! J. Escobar 09/07/2019: norme Doctor -> Rename Module Type variable TZ -> T +! J. Escobar 09/07/2019: for bug in management of XLSZWSM variable, add/use specific 2D TLSFIELD2D_ll pointer !----------------------------------------------------------------- ! ################# MODULE MODD_SUB_MODEL_n @@ -20,19 +22,20 @@ use modd_precision, only: MNHTIME IMPLICIT NONE TYPE SUB_MODEL_t - TYPE(LIST_ll), POINTER :: TZFIELDS_ll => NULL(), TZLSFIELD_ll => NULL(), TZFIELDM_ll => NULL() + TYPE(LIST_ll), POINTER :: TFIELDS_ll => NULL(), TLSFIELD_ll => NULL(), TFIELDM_ll => NULL() ! list of fields to update halo - TYPE(HALO2LIST_ll), POINTER :: TZHALO2M_ll => NULL(), TZLSHALO2_ll => NULL() + TYPE(LIST_ll), POINTER :: TLSFIELD2D_ll => NULL() + TYPE(HALO2LIST_ll), POINTER :: THALO2M_ll => NULL(), TLSHALO2_ll => NULL() ! list of fields for the halo updates (2nd layer) ! halo lists and updates for 4th order schemes ! list of fields to update halo at time t - TYPE(LIST_ll), POINTER :: TZFIELDT_ll => NULL() ! for meteorological scalars - TYPE(LIST_ll), POINTER :: TZFIELDMT_ll => NULL() ! for momentum - TYPE(LIST_ll), POINTER :: TZFIELDSC_ll => NULL() ! for tracer scalars + TYPE(LIST_ll), POINTER :: TFIELDT_ll => NULL() ! for meteorological scalars + TYPE(LIST_ll), POINTER :: TFIELDMT_ll => NULL() ! for momentum + TYPE(LIST_ll), POINTER :: TFIELDSC_ll => NULL() ! for tracer scalars ! list of fields for the halo updates (2nd layer) at time t - TYPE(HALO2LIST_ll), POINTER :: TZHALO2T_ll => NULL() - TYPE(HALO2LIST_ll), POINTER :: TZHALO2MT_ll => NULL() - TYPE(HALO2LIST_ll), POINTER :: TZHALO2SC_ll => NULL() + TYPE(HALO2LIST_ll), POINTER :: THALO2T_ll => NULL() + TYPE(HALO2LIST_ll), POINTER :: THALO2MT_ll => NULL() + TYPE(HALO2LIST_ll), POINTER :: THALO2SC_ll => NULL() INTEGER :: IBAK, IOUT ! number of the backup / output REAL(kind=MNHTIME), DIMENSION(2) :: XT_START REAL(kind=MNHTIME), DIMENSION(2) :: XT_STORE, XT_BOUND, XT_GUESS @@ -56,10 +59,11 @@ END TYPE SUB_MODEL_t TYPE(SUB_MODEL_t), DIMENSION(JPMODELMAX), TARGET, SAVE :: SUB_MODEL_MODEL -TYPE(LIST_ll), POINTER :: TZFIELDS_ll=>NULL(),TZLSFIELD_ll=>NULL(),TZFIELDM_ll=>NULL() -TYPE(LIST_ll), POINTER :: TZFIELDT_ll=>NULL(),TZFIELDMT_ll=>NULL(),TZFIELDSC_ll=>NULL() -TYPE(HALO2LIST_ll), POINTER :: TZHALO2M_ll=>NULL(), TZLSHALO2_ll=>NULL() -TYPE(HALO2LIST_ll), POINTER :: TZHALO2T_ll=>NULL(), TZHALO2MT_ll=>NULL(), TZHALO2SC_ll=>NULL() +TYPE(LIST_ll), POINTER :: TFIELDS_ll=>NULL(),TLSFIELD_ll=>NULL(),TFIELDM_ll=>NULL() +TYPE(LIST_ll), POINTER :: TLSFIELD2D_ll => NULL() +TYPE(LIST_ll), POINTER :: TFIELDT_ll=>NULL(),TFIELDMT_ll=>NULL(),TFIELDSC_ll=>NULL() +TYPE(HALO2LIST_ll), POINTER :: THALO2M_ll=>NULL(), TLSHALO2_ll=>NULL() +TYPE(HALO2LIST_ll), POINTER :: THALO2T_ll=>NULL(), THALO2MT_ll=>NULL(), THALO2SC_ll=>NULL() INTEGER, POINTER :: IBAK=>NULL() INTEGER, POINTER :: IOUT=>NULL() REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_START=>NULL() @@ -85,32 +89,34 @@ SUBROUTINE SUB_MODEL_GOTO_MODEL(KFROM, KTO) INTEGER, INTENT(IN) :: KFROM, KTO ! ! Save current state for allocated arrays -SUB_MODEL_MODEL(KFROM)%TZFIELDS_ll=>TZFIELDS_ll -SUB_MODEL_MODEL(KFROM)%TZLSFIELD_ll=>TZLSFIELD_ll -SUB_MODEL_MODEL(KFROM)%TZFIELDM_ll=>TZFIELDM_ll -SUB_MODEL_MODEL(KFROM)%TZFIELDT_ll=>TZFIELDT_ll -SUB_MODEL_MODEL(KFROM)%TZFIELDMT_ll=>TZFIELDMT_ll -SUB_MODEL_MODEL(KFROM)%TZFIELDSC_ll=>TZFIELDSC_ll -SUB_MODEL_MODEL(KFROM)%TZHALO2M_ll=>TZHALO2M_ll -SUB_MODEL_MODEL(KFROM)%TZLSHALO2_ll=>TZLSHALO2_ll -SUB_MODEL_MODEL(KFROM)%TZHALO2T_ll=>TZHALO2T_ll -SUB_MODEL_MODEL(KFROM)%TZHALO2MT_ll=>TZHALO2MT_ll -SUB_MODEL_MODEL(KFROM)%TZHALO2SC_ll=>TZHALO2SC_ll +SUB_MODEL_MODEL(KFROM)%TFIELDS_ll=>TFIELDS_ll +SUB_MODEL_MODEL(KFROM)%TLSFIELD_ll=>TLSFIELD_ll +SUB_MODEL_MODEL(KFROM)%TFIELDM_ll=>TFIELDM_ll +SUB_MODEL_MODEL(KFROM)%TFIELDT_ll=>TFIELDT_ll +SUB_MODEL_MODEL(KFROM)%TFIELDMT_ll=>TFIELDMT_ll +SUB_MODEL_MODEL(KFROM)%TLSFIELD2D_ll=>TLSFIELD2D_ll +SUB_MODEL_MODEL(KFROM)%TFIELDSC_ll=>TFIELDSC_ll +SUB_MODEL_MODEL(KFROM)%THALO2M_ll=>THALO2M_ll +SUB_MODEL_MODEL(KFROM)%TLSHALO2_ll=>TLSHALO2_ll +SUB_MODEL_MODEL(KFROM)%THALO2T_ll=>THALO2T_ll +SUB_MODEL_MODEL(KFROM)%THALO2MT_ll=>THALO2MT_ll +SUB_MODEL_MODEL(KFROM)%THALO2SC_ll=>THALO2SC_ll SUB_MODEL_MODEL(KFROM)%ZWT_ACT_NUC=>ZWT_ACT_NUC SUB_MODEL_MODEL(KFROM)%GMASKkids=>GMASKkids ! ! Current model is set to model KTO -TZFIELDS_ll=>SUB_MODEL_MODEL(KTO)%TZFIELDS_ll -TZLSFIELD_ll=>SUB_MODEL_MODEL(KTO)%TZLSFIELD_ll -TZFIELDM_ll=>SUB_MODEL_MODEL(KTO)%TZFIELDM_ll -TZFIELDT_ll=>SUB_MODEL_MODEL(KTO)%TZFIELDT_ll -TZFIELDMT_ll=>SUB_MODEL_MODEL(KTO)%TZFIELDMT_ll -TZFIELDSC_ll=>SUB_MODEL_MODEL(KTO)%TZFIELDSC_ll -TZHALO2M_ll=>SUB_MODEL_MODEL(KTO)%TZHALO2M_ll -TZLSHALO2_ll=>SUB_MODEL_MODEL(KTO)%TZLSHALO2_ll -TZHALO2T_ll=>SUB_MODEL_MODEL(KTO)%TZHALO2T_ll -TZHALO2MT_ll=>SUB_MODEL_MODEL(KTO)%TZHALO2MT_ll -TZHALO2SC_ll=>SUB_MODEL_MODEL(KTO)%TZHALO2SC_ll +TFIELDS_ll=>SUB_MODEL_MODEL(KTO)%TFIELDS_ll +TLSFIELD_ll=>SUB_MODEL_MODEL(KTO)%TLSFIELD_ll +TFIELDM_ll=>SUB_MODEL_MODEL(KTO)%TFIELDM_ll +TFIELDT_ll=>SUB_MODEL_MODEL(KTO)%TFIELDT_ll +TFIELDMT_ll=>SUB_MODEL_MODEL(KTO)%TFIELDMT_ll +TLSFIELD2D_ll=>SUB_MODEL_MODEL(KTO)%TLSFIELD2D_ll +TFIELDSC_ll=>SUB_MODEL_MODEL(KTO)%TFIELDSC_ll +THALO2M_ll=>SUB_MODEL_MODEL(KTO)%THALO2M_ll +TLSHALO2_ll=>SUB_MODEL_MODEL(KTO)%TLSHALO2_ll +THALO2T_ll=>SUB_MODEL_MODEL(KTO)%THALO2T_ll +THALO2MT_ll=>SUB_MODEL_MODEL(KTO)%THALO2MT_ll +THALO2SC_ll=>SUB_MODEL_MODEL(KTO)%THALO2SC_ll IBAK=>SUB_MODEL_MODEL(KTO)%IBAK IOUT=>SUB_MODEL_MODEL(KTO)%IOUT XT_START=>SUB_MODEL_MODEL(KTO)%XT_START diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90 index e5a089034687fc6c113766ad6ea88fe636e12471..6eaf3308cc35929d95c4f4e675afc65a3c071577 100644 --- a/src/MNH/modeln.f90 +++ b/src/MNH/modeln.f90 @@ -256,11 +256,14 @@ END MODULE MODI_MODEL_n ! P. Wautelet 07/02/2019: remove OPARALLELIO argument from open and close files subroutines ! (nsubfiles_ioz is now determined in IO_File_add2list) !! 02/2019 C.Lac add rain fraction as an output field +!! Bielli S. 02/2019 Sea salt : significant sea wave height influences salt emission; 5 salt modes ! P. Wautelet 28/03/2019: use MNHTIME for time measurement variables ! P. Wautelet 28/03/2019: use TFILE instead of unit number for set_iluout_timing ! P. Wautelet 19/04/2019: removed unused dummy arguments and variables ! P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function ! P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine +! J. Escobar 09/07/2019: norme Doctor -> Rename Module Type variable TZ -> T +! J. Escobar 09/07/2019: for bug in management of XLSZWSM variable, add/use specific 2D TLSFIELD2D_ll pointer !!------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -589,10 +592,11 @@ END IF ! IF (KTCOUNT == 1) THEN ! - NULLIFY(TZFIELDS_ll,TZLSFIELD_ll,TZFIELDT_ll) - NULLIFY(TZHALO2T_ll) - NULLIFY(TZLSHALO2_ll) - NULLIFY(TZFIELDSC_ll) + NULLIFY(TFIELDS_ll,TLSFIELD_ll,TFIELDT_ll) + NULLIFY(TLSFIELD2D_ll) + NULLIFY(THALO2T_ll) + NULLIFY(TLSHALO2_ll) + NULLIFY(TFIELDSC_ll) ! ALLOCATE(ZWT_ACT_NUC(SIZE(XWT,1),SIZE(XWT,2),SIZE(XWT,3))) ALLOCATE(GMASKkids(SIZE(XWT,1),SIZE(XWT,2))) @@ -613,57 +617,57 @@ IF (KTCOUNT == 1) THEN ! ! a) Sources terms ! - CALL ADD3DFIELD_ll( TZFIELDS_ll, XRUS, 'MODEL_n::XRUS' ) - CALL ADD3DFIELD_ll( TZFIELDS_ll, XRVS, 'MODEL_n::XRVS' ) - CALL ADD3DFIELD_ll( TZFIELDS_ll, XRWS, 'MODEL_n::XRWS' ) - CALL ADD3DFIELD_ll( TZFIELDS_ll, XRTHS, 'MODEL_n::XRTHS' ) - CALL ADD3DFIELD_ll( TZFIELDS_ll, XRUS_PRES, 'MODEL_n::XRUS_PRES' ) - CALL ADD3DFIELD_ll( TZFIELDS_ll, XRVS_PRES, 'MODEL_n::XRVS_PRES' ) - CALL ADD3DFIELD_ll( TZFIELDS_ll, XRWS_PRES, 'MODEL_n::XRWS_PRES' ) - CALL ADD3DFIELD_ll( TZFIELDS_ll, XRTHS_CLD, 'MODEL_n::XRTHS_CLD' ) - IF (SIZE(XRTKES,1) /= 0) CALL ADD3DFIELD_ll( TZFIELDS_ll, XRTKES, 'MODEL_n::XRTKES' ) - CALL ADD4DFIELD_ll( TZFIELDS_ll, XRRS (:,:,:,1:NRR), 'MODEL_n::XRRS' ) - CALL ADD4DFIELD_ll( TZFIELDS_ll, XRRS_CLD (:,:,:,1:NRR), 'MODEL_n::XRRS_CLD' ) - CALL ADD4DFIELD_ll( TZFIELDS_ll, XRSVS (:,:,:,1:NSV), 'MODEL_n::XRSVS') - CALL ADD4DFIELD_ll( TZFIELDS_ll, XRSVS_CLD(:,:,:,1:NSV), 'MODEL_n::XRSVS_CLD') - IF (SIZE(XSRCT,1) /= 0) CALL ADD3DFIELD_ll( TZFIELDS_ll, XSRCT, 'MODEL_n::XSRCT' ) + CALL ADD3DFIELD_ll( TFIELDS_ll, XRUS, 'MODEL_n::XRUS' ) + CALL ADD3DFIELD_ll( TFIELDS_ll, XRVS, 'MODEL_n::XRVS' ) + CALL ADD3DFIELD_ll( TFIELDS_ll, XRWS, 'MODEL_n::XRWS' ) + CALL ADD3DFIELD_ll( TFIELDS_ll, XRTHS, 'MODEL_n::XRTHS' ) + CALL ADD3DFIELD_ll( TFIELDS_ll, XRUS_PRES, 'MODEL_n::XRUS_PRES' ) + CALL ADD3DFIELD_ll( TFIELDS_ll, XRVS_PRES, 'MODEL_n::XRVS_PRES' ) + CALL ADD3DFIELD_ll( TFIELDS_ll, XRWS_PRES, 'MODEL_n::XRWS_PRES' ) + CALL ADD3DFIELD_ll( TFIELDS_ll, XRTHS_CLD, 'MODEL_n::XRTHS_CLD' ) + IF (SIZE(XRTKES,1) /= 0) CALL ADD3DFIELD_ll( TFIELDS_ll, XRTKES, 'MODEL_n::XRTKES' ) + CALL ADD4DFIELD_ll( TFIELDS_ll, XRRS (:,:,:,1:NRR), 'MODEL_n::XRRS' ) + CALL ADD4DFIELD_ll( TFIELDS_ll, XRRS_CLD (:,:,:,1:NRR), 'MODEL_n::XRRS_CLD' ) + CALL ADD4DFIELD_ll( TFIELDS_ll, XRSVS (:,:,:,1:NSV), 'MODEL_n::XRSVS') + CALL ADD4DFIELD_ll( TFIELDS_ll, XRSVS_CLD(:,:,:,1:NSV), 'MODEL_n::XRSVS_CLD') + IF (SIZE(XSRCT,1) /= 0) CALL ADD3DFIELD_ll( TFIELDS_ll, XSRCT, 'MODEL_n::XSRCT' ) ! IF ((LNUMDIFU .OR. LNUMDIFTH .OR. LNUMDIFSV) ) THEN ! ! b) LS fields ! - CALL ADD3DFIELD_ll( TZLSFIELD_ll, XLSUM, 'MODEL_n::XLSUM' ) - CALL ADD3DFIELD_ll( TZLSFIELD_ll, XLSVM, 'MODEL_n::XLSVM' ) - CALL ADD3DFIELD_ll( TZLSFIELD_ll, XLSWM, 'MODEL_n::XLSWM' ) - CALL ADD3DFIELD_ll( TZLSFIELD_ll, XLSTHM, 'MODEL_n::XLSTHM' ) - CALL ADD2DFIELD_ll( TZLSFIELD_ll, XLSZWSM, 'MODEL_n::XLSZWSM' ) + CALL ADD3DFIELD_ll( TLSFIELD_ll, XLSUM, 'MODEL_n::XLSUM' ) + CALL ADD3DFIELD_ll( TLSFIELD_ll, XLSVM, 'MODEL_n::XLSVM' ) + CALL ADD3DFIELD_ll( TLSFIELD_ll, XLSWM, 'MODEL_n::XLSWM' ) + CALL ADD3DFIELD_ll( TLSFIELD_ll, XLSTHM, 'MODEL_n::XLSTHM' ) + CALL ADD2DFIELD_ll( TLSFIELD_ll, XLSZWSM, 'MODEL_n::XLSZWSM' ) IF (NRR >= 1) THEN - CALL ADD3DFIELD_ll( TZLSFIELD_ll, XLSRVM, 'MODEL_n::XLSRVM' ) + CALL ADD3DFIELD_ll( TLSFIELD_ll, XLSRVM, 'MODEL_n::XLSRVM' ) ENDIF ! ! c) Fields at t ! - CALL ADD3DFIELD_ll( TZFIELDT_ll, XUT, 'MODEL_n::XUT' ) - CALL ADD3DFIELD_ll( TZFIELDT_ll, XVT, 'MODEL_n::XVT' ) - CALL ADD3DFIELD_ll( TZFIELDT_ll, XWT, 'MODEL_n::XWT' ) - CALL ADD3DFIELD_ll( TZFIELDT_ll, XTHT, 'MODEL_n::XTHT' ) - IF (SIZE(XRTKES,1) /= 0) CALL ADD3DFIELD_ll( TZFIELDT_ll, XTKET, 'MODEL_n::XTKET' ) - CALL ADD4DFIELD_ll(TZFIELDT_ll, XRT (:,:,:,1:NRR), 'MODEL_n::XSV' ) - CALL ADD4DFIELD_ll(TZFIELDT_ll, XSVT(:,:,:,1:NSV), 'MODEL_n::XSVT' ) + CALL ADD3DFIELD_ll( TFIELDT_ll, XUT, 'MODEL_n::XUT' ) + CALL ADD3DFIELD_ll( TFIELDT_ll, XVT, 'MODEL_n::XVT' ) + CALL ADD3DFIELD_ll( TFIELDT_ll, XWT, 'MODEL_n::XWT' ) + CALL ADD3DFIELD_ll( TFIELDT_ll, XTHT, 'MODEL_n::XTHT' ) + IF (SIZE(XRTKES,1) /= 0) CALL ADD3DFIELD_ll( TFIELDT_ll, XTKET, 'MODEL_n::XTKET' ) + CALL ADD4DFIELD_ll(TFIELDT_ll, XRT (:,:,:,1:NRR), 'MODEL_n::XSV' ) + CALL ADD4DFIELD_ll(TFIELDT_ll, XSVT(:,:,:,1:NSV), 'MODEL_n::XSVT' ) ! !* 1.5 Initialize the list of fields for the halo updates (2nd layer) ! INBVAR = 4+NRR+NSV IF (SIZE(XRTKES,1) /= 0) INBVAR=INBVAR+1 - CALL INIT_HALO2_ll(TZHALO2T_ll,INBVAR,IIU,IJU,IKU) - CALL INIT_HALO2_ll(TZLSHALO2_ll,4+MIN(1,NRR),IIU,IJU,IKU) + CALL INIT_HALO2_ll(THALO2T_ll,INBVAR,IIU,IJU,IKU) + CALL INIT_HALO2_ll(TLSHALO2_ll,4+MIN(1,NRR),IIU,IJU,IKU) ! !* 1.6 Initialise the 2nd layer of the halo of the LS fields ! IF ( LSTEADYLS ) THEN - CALL UPDATE_HALO_ll(TZLSFIELD_ll, IINFO_ll) - CALL DEL2DFIELD_ll(TZLSFIELD_ll,XLSZWSM,IINFO_ll) - CALL UPDATE_HALO2_ll(TZLSFIELD_ll, TZLSHALO2_ll, IINFO_ll) + CALL UPDATE_HALO_ll(TLSFIELD_ll, IINFO_ll) + CALL UPDATE_HALO_ll(TLSFIELD2D_ll,IINFO_ll) + CALL UPDATE_HALO2_ll(TLSFIELD_ll, TLSHALO2_ll, IINFO_ll) END IF END IF ! @@ -1185,11 +1189,12 @@ XTIME_LES_BU_PROCESS = 0. ! IF ( LNUMDIFU .OR. LNUMDIFTH .OR. LNUMDIFSV ) THEN ! - CALL UPDATE_HALO_ll(TZFIELDT_ll, IINFO_ll) - CALL UPDATE_HALO2_ll(TZFIELDT_ll, TZHALO2T_ll, IINFO_ll) + CALL UPDATE_HALO_ll(TFIELDT_ll, IINFO_ll) + CALL UPDATE_HALO2_ll(TFIELDT_ll, THALO2T_ll, IINFO_ll) IF ( .NOT. LSTEADYLS ) THEN - CALL UPDATE_HALO_ll(TZLSFIELD_ll, IINFO_ll) - CALL UPDATE_HALO2_ll(TZLSFIELD_ll, TZLSHALO2_ll, IINFO_ll) + CALL UPDATE_HALO_ll(TLSFIELD_ll, IINFO_ll) + CALL UPDATE_HALO_ll(TLSFIELD2D_ll,IINFO_ll) + CALL UPDATE_HALO2_ll(TLSFIELD_ll, TLSHALO2_ll, IINFO_ll) END IF CALL NUM_DIFF ( CLBCX, CLBCY, NRR, NSV, & XDK2U, XDK4U, XDK2TH, XDK4TH, XDK2SV, XDK4SV, IMI, & @@ -1197,7 +1202,7 @@ IF ( LNUMDIFU .OR. LNUMDIFTH .OR. LNUMDIFSV ) THEN XLSUM,XLSVM,XLSWM,XLSTHM,XLSRVM,XRHODJ, & XRUS, XRVS, XRWS, XRTHS, XRTKES, XRRS, XRSVS, & LZDIFFU,LNUMDIFU, LNUMDIFTH, LNUMDIFSV, & - TZHALO2T_ll, TZLSHALO2_ll,XZDIFFU_HALO2 ) + THALO2T_ll, TLSHALO2_ll,XZDIFFU_HALO2 ) END IF ! DO JSV = NSV_CHEMBEG,NSV_CHEMEND @@ -1922,7 +1927,7 @@ END IF ! ZTIME1 = ZTIME2 ! -CALL EXCHANGE (XTSTEP,NRR,NSV,XRHODJ,TZFIELDS_ll, & +CALL EXCHANGE (XTSTEP,NRR,NSV,XRHODJ,TFIELDS_ll, & XRUS, XRVS,XRWS,XRTHS,XRRS,XRTKES,XRSVS) ! CALL SECOND_MNH2(ZTIME2) diff --git a/src/MNH/num_diff.f90 b/src/MNH/num_diff.f90 index e31370e1d27efcd07fc4bf2935357de1c1d4666c..23751bff843dc1a983d8ad0f1cde32eeb59fb3dd 100644 --- a/src/MNH/num_diff.f90 +++ b/src/MNH/num_diff.f90 @@ -211,7 +211,8 @@ END MODULE MODI_NUM_DIFF !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! J.Escobar : 05/12/2017 : Pb SegFault , correct IF(ONUMDIFTH/OZDIFFU) nesting ! P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function -! +! J. Escobar 09/07/2019: add TTZHALO2*LIST structure, to match all cases of diffusion/U/TH activation T/F +!! !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -284,6 +285,7 @@ INTEGER :: IKU LOGICAL :: GTKEALLOC ! true if TKE arrays are not zero-sized ! TYPE(HALO2LIST_ll), POINTER :: TZHALO2LIST, TZHALO2LSLIST +TYPE(HALO2LIST_ll), TARGET :: TTZHALO2LIST, TTZHALO2LSLIST ! INTEGER :: IGRID ! localisation on the model grid ! @@ -301,11 +303,19 @@ GTKEALLOC = SIZE(PTKEM,1) /= 0 !* 2. CALL THE NUM_DIFF_ALGO ROUTINE FOR EACH FIELD ! --------------------------------------------- ! +! +! Initialized TZHALO2*LIST%NEXT to match all case of diffusion activation T/F +! +TTZHALO2LIST%NEXT => TPHALO2LIST +TTZHALO2LSLIST%NEXT => TPHALO2LSLIST +TZHALO2LIST => TTZHALO2LIST +TZHALO2LSLIST => TTZHALO2LSLIST +! IF (ONUMDIFU) THEN IGRID = 2 !!$ IF(NHALO == 1) THEN - TZHALO2LIST => TPHALO2LIST - TZHALO2LSLIST => TPHALO2LSLIST + TZHALO2LIST => TZHALO2LIST%NEXT + TZHALO2LSLIST => TZHALO2LSLIST%NEXT CALL NUM_DIFF_ALGO(PRUS, PUM, IGRID, MXM(PRHODJ), PDK2U, PDK4U, & PLSUM,TZHALO2LIST%HALO2, TZHALO2LSLIST%HALO2) !!$ ELSE diff --git a/src/MNH/rain_ice.f90 b/src/MNH/rain_ice.f90 index 51f3a734e961f55493974ebda2e1c21b1077e994..23d5a06c51b12c89c3b16d9c55cd4ed8c6ced3ac 100644 --- a/src/MNH/rain_ice.f90 +++ b/src/MNH/rain_ice.f90 @@ -243,12 +243,14 @@ END MODULE MODI_RAIN_ICE ! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg ! P. Wautelet 28/05/2019: move COUNTJV function to tools.f90 ! P. Wautelet 29/05/2019: remove PACK/UNPACK intrinsics (to get more performance and better OpenACC support) +! J. Escobar 09/07/2019: for reproductiblity MPPDB_CHECK, add missing LCHECK test in ZRHODJ de/allocate ! !* 0. DECLARATIONS ! ------------ ! use MODD_BUDGET, only: LBU_ENABLE, LBUDGET_RC, LBUDGET_RG, LBUDGET_RH, LBUDGET_RI, & LBUDGET_RR, LBUDGET_RS, LBUDGET_RV, LBUDGET_TH +use MODD_CONF, only: LCHECK use MODD_CST, only: XCI, XCL, XCPD, XCPV, XLSTT, XLVTT, XTT, & XALPI, XBETAI, XGAMI, XMD, XMV, XTT use MODD_LES, only: LLES_CALL @@ -576,7 +578,7 @@ IF( IMICRO >= 0 ) THEN ALLOCATE(ZZW1(IMICRO,6)) ENDIF ! - IF (LBU_ENABLE .OR. LLES_CALL) THEN + IF (LBU_ENABLE .OR. LLES_CALL .OR. LCHECK ) THEN ALLOCATE(ZRHODJ(IMICRO)) DO JL=1,IMICRO ZRHODJ(JL) = PRHODJ(I1(JL),I2(JL),I3(JL)) @@ -903,7 +905,7 @@ IF( IMICRO >= 0 ) THEN DEALLOCATE(ZPRES) DEALLOCATE(ZRHODREF) DEALLOCATE(ZZT) - IF(LBU_ENABLE .OR. LLES_CALL) DEALLOCATE(ZRHODJ) + DEALLOCATE(ZRHODJ) DEALLOCATE(ZTHS) DEALLOCATE(ZTHT) DEALLOCATE(ZTHLT)