diff --git a/src/LIB/SURCOUCHE/src/mode_mppdb.f90 b/src/LIB/SURCOUCHE/src/mode_mppdb.f90 index 575fb7b8eb1fef100d62a21ab541a52fea447779..f8990dcc839493457a422b8a449ce6be52d21a8e 100644 --- a/src/LIB/SURCOUCHE/src/mode_mppdb.f90 +++ b/src/LIB/SURCOUCHE/src/mode_mppdb.f90 @@ -14,6 +14,7 @@ MODULE MODE_MPPDB ! Philippe Wautelet: 10/01/2019: use NEWUNIT argument of OPEN ! Philippe Wautelet: 22/01/2019: use standard FLUSH statement instead of non standard intrinsics ! Philippe Wautelet: 22/01/2019: use sleep_c subroutine instead of non-standard call system +! Juan Escobar : 09/07/2019: Bug, in MPPDB_CHECK_SURFEX3D , recompute IKSIZE_ll for local 0 size array ! use ISO_FORTRAN_ENV, only: OUTPUT_UNIT use modi_tools_c @@ -898,7 +899,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_INTEGER, MPI_STATUS_IGNORE, MPI_SUM + USE MODD_MPIF , ONLY : MPI_INTEGER, MPI_STATUS_IGNORE, MPI_SUM , MPI_MAX USE MODD_MNH_SURFEX_n ! IMPLICIT NONE @@ -917,23 +918,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,MPI_INTEGER, MPI_SUM, MPPDB_INTRA_COMM, IINFO_ll) IF ( IGLBSIZEPTAB == 0 ) RETURN + CALL MPI_ALLREDUCE(SIZE(PTAB,2),IKSIZE_ll, 1,MPI_INTEGER, 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 a4d5256d26e7ec92b755f13604f6b9dc3ffe1242..4bf7527b7290e2c7a26a58c05d42ae1e9d9ea4f3 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 !! !------------------------------------------------------------------------------- ! @@ -119,18 +120,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 48bfede318410cd24a6a6431857a57c50da89ed0..121f5d3570b1c0bdfbafc17920bf3ce92b92cdfa 100644 --- a/src/MNH/modd_sub_modeln.f90 +++ b/src/MNH/modd_sub_modeln.f90 @@ -7,6 +7,8 @@ ! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O ! 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 +! 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 @@ -18,19 +20,20 @@ USE MODD_PARAMETERS, ONLY: JPMODELMAX 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*8,DIMENSION(2) :: XT_START REAL*8,DIMENSION(2) :: XT_STORE,XT_BOUND,XT_GUESS @@ -54,10 +57,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*8,DIMENSION(:), POINTER :: XT_START=>NULL() @@ -83,32 +87,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 8731123547563e0128956764c67786a1da8cde16..2e0017c0e376dd13418d0fdf36496dea00f09230 100644 --- a/src/MNH/modeln.f90 +++ b/src/MNH/modeln.f90 @@ -255,6 +255,8 @@ END MODULE MODI_MODEL_n ! to allow to disable writes (for bench purposes) !! 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 +!! 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 @@ -623,10 +625,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))) @@ -647,65 +650,65 @@ IF (KTCOUNT == 1) THEN ! ! a) Sources terms ! - CALL ADD3DFIELD_ll(TZFIELDS_ll, XRUS) - CALL ADD3DFIELD_ll(TZFIELDS_ll, XRVS) - CALL ADD3DFIELD_ll(TZFIELDS_ll, XRWS) - CALL ADD3DFIELD_ll(TZFIELDS_ll, XRTHS) - CALL ADD3DFIELD_ll(TZFIELDS_ll, XRUS_PRES) - CALL ADD3DFIELD_ll(TZFIELDS_ll, XRVS_PRES) - CALL ADD3DFIELD_ll(TZFIELDS_ll, XRWS_PRES) - CALL ADD3DFIELD_ll(TZFIELDS_ll, XRTHS_CLD) - IF (SIZE(XRTKES,1) /= 0) CALL ADD3DFIELD_ll(TZFIELDS_ll, XRTKES) + CALL ADD3DFIELD_ll(TFIELDS_ll, XRUS) + CALL ADD3DFIELD_ll(TFIELDS_ll, XRVS) + CALL ADD3DFIELD_ll(TFIELDS_ll, XRWS) + CALL ADD3DFIELD_ll(TFIELDS_ll, XRTHS) + CALL ADD3DFIELD_ll(TFIELDS_ll, XRUS_PRES) + CALL ADD3DFIELD_ll(TFIELDS_ll, XRVS_PRES) + CALL ADD3DFIELD_ll(TFIELDS_ll, XRWS_PRES) + CALL ADD3DFIELD_ll(TFIELDS_ll, XRTHS_CLD) + IF (SIZE(XRTKES,1) /= 0) CALL ADD3DFIELD_ll(TFIELDS_ll, XRTKES) DO JRR=1,NRR - CALL ADD3DFIELD_ll(TZFIELDS_ll, XRRS(:,:,:,JRR)) - CALL ADD3DFIELD_ll(TZFIELDS_ll, XRRS_CLD(:,:,:,JRR)) + CALL ADD3DFIELD_ll(TFIELDS_ll, XRRS(:,:,:,JRR)) + CALL ADD3DFIELD_ll(TFIELDS_ll, XRRS_CLD(:,:,:,JRR)) ENDDO DO JSV=1,NSV - CALL ADD3DFIELD_ll(TZFIELDS_ll, XRSVS(:,:,:,JSV)) - CALL ADD3DFIELD_ll(TZFIELDS_ll, XRSVS_CLD(:,:,:,JSV)) + CALL ADD3DFIELD_ll(TFIELDS_ll, XRSVS(:,:,:,JSV)) + CALL ADD3DFIELD_ll(TFIELDS_ll, XRSVS_CLD(:,:,:,JSV)) ENDDO - IF (SIZE(XSRCT,1) /= 0) CALL ADD3DFIELD_ll(TZFIELDS_ll, XSRCT) + IF (SIZE(XSRCT,1) /= 0) CALL ADD3DFIELD_ll(TFIELDS_ll, XSRCT) ! IF ((LNUMDIFU .OR. LNUMDIFTH .OR. LNUMDIFSV) ) THEN ! ! b) LS fields ! - CALL ADD3DFIELD_ll(TZLSFIELD_ll, XLSUM) - CALL ADD3DFIELD_ll(TZLSFIELD_ll, XLSVM) - CALL ADD3DFIELD_ll(TZLSFIELD_ll, XLSWM) - CALL ADD3DFIELD_ll(TZLSFIELD_ll, XLSTHM) - CALL ADD2DFIELD_ll(TZLSFIELD_ll, XLSZWSM) + CALL ADD3DFIELD_ll(TLSFIELD_ll, XLSUM) + CALL ADD3DFIELD_ll(TLSFIELD_ll, XLSVM) + CALL ADD3DFIELD_ll(TLSFIELD_ll, XLSWM) + CALL ADD3DFIELD_ll(TLSFIELD_ll, XLSTHM) + CALL ADD2DFIELD_ll(TLSFIELD2D_ll, XLSZWSM) IF (NRR >= 1) THEN - CALL ADD3DFIELD_ll(TZLSFIELD_ll, XLSRVM) + CALL ADD3DFIELD_ll(TLSFIELD_ll, XLSRVM) ENDIF ! ! c) Fields at t ! - CALL ADD3DFIELD_ll(TZFIELDT_ll, XUT) - CALL ADD3DFIELD_ll(TZFIELDT_ll, XVT) - CALL ADD3DFIELD_ll(TZFIELDT_ll, XWT) - CALL ADD3DFIELD_ll(TZFIELDT_ll, XTHT) - IF (SIZE(XRTKES,1) /= 0) CALL ADD3DFIELD_ll(TZFIELDT_ll, XTKET) + CALL ADD3DFIELD_ll(TFIELDT_ll, XUT) + CALL ADD3DFIELD_ll(TFIELDT_ll, XVT) + CALL ADD3DFIELD_ll(TFIELDT_ll, XWT) + CALL ADD3DFIELD_ll(TFIELDT_ll, XTHT) + IF (SIZE(XRTKES,1) /= 0) CALL ADD3DFIELD_ll(TFIELDT_ll, XTKET) DO JRR=1,NRR - CALL ADD3DFIELD_ll(TZFIELDT_ll, XRT(:,:,:,JRR)) + CALL ADD3DFIELD_ll(TFIELDT_ll, XRT(:,:,:,JRR)) ENDDO DO JSV=1,NSV - CALL ADD3DFIELD_ll(TZFIELDT_ll, XSVT(:,:,:,JSV)) + CALL ADD3DFIELD_ll(TFIELDT_ll, XSVT(:,:,:,JSV)) ENDDO ! !* 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 ! @@ -1227,11 +1230,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, & @@ -1239,7 +1243,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 @@ -1964,7 +1968,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 af0265cb623c78bda525b7a84e8929a46a0650cd..52e477ac1b68dccb261bc070a7bb24aafb323398 100644 --- a/src/MNH/num_diff.f90 +++ b/src/MNH/num_diff.f90 @@ -215,6 +215,7 @@ END MODULE MODI_NUM_DIFF !! 07/09 (C.Lac) Correction on budget calls !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! J.Escobar : 05/12/2017 : Pb SegFault , correct IF(ONUMDIFTH/OZDIFFU) nesting +!! J.Escobar : 09/07/2019 : add TTZHALO2*LIST structure , to match all case of diffusion/U/TH activation T/F !! !------------------------------------------------------------------------------- ! @@ -288,6 +289,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 ! @@ -305,11 +307,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 7bffe8cfd65cb80ac1ceab14514c4fe5c452f8df..94e8cf0b886dd7eb61c68a17637a6b63e815c40f 100644 --- a/src/MNH/rain_ice.f90 +++ b/src/MNH/rain_ice.f90 @@ -240,6 +240,7 @@ END MODULE MODI_RAIN_ICE !! J.Escobar : 8/2018 : for real*4 , bis => limit exp() in RAIN_ICE_SLOW with XMNH_HUGE_12_LOG !! P.Wautelet 01/02/2019: add missing initialization for PFPR !! 02/2019 C.Lac add rain fraction as an output field +!! J.Escobar 09/07/2019 : for reproductiblity MPPDB_CHECK , add missing LCHECK test in ZRHODJ de/allocate ! !* 0. DECLARATIONS ! ------------ @@ -615,7 +616,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)) ZRHODJ(:) = PACK( PRHODJ(:,:,:),MASK=GMICRO(:,:,:) ) END IF @@ -940,7 +941,7 @@ IF( IMICRO >= 0 ) THEN DEALLOCATE(ZPRES) DEALLOCATE(ZRHODREF) DEALLOCATE(ZZT) - IF(LBU_ENABLE .OR. LLES_CALL) DEALLOCATE(ZRHODJ) + IF(LBU_ENABLE .OR. LLES_CALL .OR. LCHECK ) DEALLOCATE(ZRHODJ) DEALLOCATE(ZTHS) DEALLOCATE(ZTHT) DEALLOCATE(ZTHLT)