From 8e2cb42287e3bf7469b1f737d45407e000b8db18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Riette?= <sebastien.riette@meteo.fr> Date: Wed, 22 Nov 2023 18:18:26 +0100 Subject: [PATCH] S. Riette 23 Nov 2023: update rain_ice_old testprogs initialisation Part of #17 --- src/testprogs/ice_adjust/main_ice_adjust.F90 | 7 +- src/testprogs/rain_ice/main_rain_ice.F90 | 27 +- .../rain_ice_old/main_rain_ice_old.F90 | 875 ++++++++++-------- src/testprogs/shallow/main_shallow.F90 | 65 +- .../support/{diff.F90 => compute_diff.F90} | 0 src/testprogs/turb_mnh/main_turb.F90 | 53 +- 6 files changed, 547 insertions(+), 480 deletions(-) rename src/testprogs/support/{diff.F90 => compute_diff.F90} (100%) diff --git a/src/testprogs/ice_adjust/main_ice_adjust.F90 b/src/testprogs/ice_adjust/main_ice_adjust.F90 index 77b85dac3..20225eb60 100644 --- a/src/testprogs/ice_adjust/main_ice_adjust.F90 +++ b/src/testprogs/ice_adjust/main_ice_adjust.F90 @@ -1,8 +1,8 @@ PROGRAM MAIN_ICE_ADJUST -USE XRD_GETOPTIONS -USE GETDATA_ICE_ADJUST_MOD -USE COMPUTE_DIFF +USE XRD_GETOPTIONS, ONLY: INITOPTIONS, GETOPTION, CHECKOPTIONS +USE GETDATA_ICE_ADJUST_MOD, ONLY: GETDATA_ICE_ADJUST +USE COMPUTE_DIFF, ONLY: DIFF USE MODI_ICE_ADJUST USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t USE MODD_PHYEX, ONLY: PHYEX_t @@ -12,7 +12,6 @@ USE YOMHOOK, ONLY : LHOOK, DR_HOOK, JPHOOK IMPLICIT NONE -INTEGER :: KLON INTEGER :: KLEV INTEGER :: KRR diff --git a/src/testprogs/rain_ice/main_rain_ice.F90 b/src/testprogs/rain_ice/main_rain_ice.F90 index 4a6055341..c8c007c6f 100644 --- a/src/testprogs/rain_ice/main_rain_ice.F90 +++ b/src/testprogs/rain_ice/main_rain_ice.F90 @@ -1,8 +1,8 @@ PROGRAM MAIN_RAIN_ICE -USE XRD_GETOPTIONS -USE GETDATA_RAIN_ICE_MOD -USE COMPUTE_DIFF +USE XRD_GETOPTIONS, ONLY: INITOPTIONS, GETOPTION, CHECKOPTIONS +USE GETDATA_RAIN_ICE_MOD, ONLY: GETDATA_RAIN_ICE +USE COMPUTE_DIFF, ONLY: DIFF USE MODI_RAIN_ICE USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t USE MODD_PHYEX, ONLY: PHYEX_t @@ -12,7 +12,6 @@ USE YOMHOOK, ONLY : LHOOK, DR_HOOK, JPHOOK IMPLICIT NONE -INTEGER :: KLON INTEGER :: KLEV INTEGER :: KRR @@ -258,20 +257,20 @@ IF (LLCHECK .OR. LLSTAT .OR. LLCHECKDIFF) THEN PRINT *, " IBL = ", IBL DO JRR=1, KRR WRITE (CLTEXT, '("PRS JRR=",I3.3)') JRR - CALL DIFF3 (CLTEXT, PRS_OUT (:,:,:,JRR,IBL), PRS (:,:,:,JRR,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF (CLTEXT, PRS_OUT (:,:,:,JRR,IBL), PRS (:,:,:,JRR,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) IF(JRR>=2) THEN WRITE (CLTEXT, '("PFPR JRR=",I3.3)') JRR - CALL DIFF3 (CLTEXT, PFPR_OUT (:,:,:,JRR,IBL), PFPR (:,:,:,JRR,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF (CLTEXT, PFPR_OUT (:,:,:,JRR,IBL), PFPR (:,:,:,JRR,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) ENDIF ENDDO - CALL DIFF3 ("PCIT", PCIT_OUT (:,:,:,IBL), PCIT (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF2 ("ZINPRC", ZINPRC_OUT (:,:,IBL), ZINPRC (:,:,IBL) , LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF2 ("PINPRRRS", PINPRR_OUT (:,:,IBL), PINPRR (:,:,IBL) , LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PEVAP", PEVAP_OUT (:,:,:,IBL), PEVAP (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF2 ("PINPRS", PINPRS_OUT (:,:,IBL), PINPRS (:,:,IBL) , LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF2 ("PINPRG", PINPRG_OUT (:,:,IBL), PINPRG (:,:,IBL) , LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF2 ("ZINDEP", ZINDEP_OUT (:,:,IBL), ZINDEP (:,:,IBL) , LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - !CALL DIFF3 ("ZRAINFR", ZRAINFR_OUT (:,:,:,IBL), ZRAINFR (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PCIT", PCIT_OUT (:,:,:,IBL), PCIT (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("ZINPRC", ZINPRC_OUT (:,:,IBL), ZINPRC (:,:,IBL) , LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PINPRRRS", PINPRR_OUT (:,:,IBL), PINPRR (:,:,IBL) , LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PEVAP", PEVAP_OUT (:,:,:,IBL), PEVAP (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PINPRS", PINPRS_OUT (:,:,IBL), PINPRS (:,:,IBL) , LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PINPRG", PINPRG_OUT (:,:,IBL), PINPRG (:,:,IBL) , LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("ZINDEP", ZINDEP_OUT (:,:,IBL), ZINDEP (:,:,IBL) , LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + !CALL DIFF ("ZRAINFR", ZRAINFR_OUT (:,:,:,IBL), ZRAINFR (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) ENDDO ENDIF diff --git a/src/testprogs/rain_ice_old/main_rain_ice_old.F90 b/src/testprogs/rain_ice_old/main_rain_ice_old.F90 index 55dc41c63..5feee2d5a 100644 --- a/src/testprogs/rain_ice_old/main_rain_ice_old.F90 +++ b/src/testprogs/rain_ice_old/main_rain_ice_old.F90 @@ -1,285 +1,341 @@ -program main_rain_ice_old +PROGRAM MAIN_RAIN_ICE_OLD + +USE XRD_GETOPTIONS, ONLY: INITOPTIONS, GETOPTION, CHECKOPTIONS +USE GETDATA_RAIN_ICE_OLD_MOD, ONLY: GETDATA_RAIN_ICE_OLD + +USE MODI_RAIN_ICE_OLD +USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t +USE MODD_PHYEX, ONLY: PHYEX_t +USE STACK_MOD +USE OMP_LIB +USE YOMHOOK, ONLY : LHOOK, DR_HOOK, JPHOOK + +use iso_fortran_env, only: output_unit + +IMPLICIT NONE + +INTEGER :: KLEV +INTEGER :: KRR + +REAL, ALLOCATABLE, DIMENSION(:,:,:) :: PDZZ +REAL, ALLOCATABLE, DIMENSION(:,:,:) :: PRHODJ +REAL, ALLOCATABLE, DIMENSION(:,:,:) :: PRHODREF +REAL, ALLOCATABLE, DIMENSION(:,:,:) :: PEXNREF +REAL, ALLOCATABLE, DIMENSION(:,:,:) :: PPABSM +REAL, ALLOCATABLE, DIMENSION(:,:,:) :: PCIT, PCIT_OUT +REAL, ALLOCATABLE, DIMENSION(:,:,:) :: PCLDFR +REAL, ALLOCATABLE, DIMENSION(:,:,:) :: PTHT +REAL, ALLOCATABLE, DIMENSION(:,:,:,:) :: PRT +REAL, ALLOCATABLE, DIMENSION(:,:,:) :: PTHS, PTHS_OUT +REAL, ALLOCATABLE, DIMENSION(:,:,:,:) :: PRS, PRS_OUT +REAL, ALLOCATABLE, DIMENSION(:,:,:) :: PSIGS +REAL, ALLOCATABLE, DIMENSION(:,:) :: PSEA +REAL, ALLOCATABLE, DIMENSION(:,:) :: PTOWN + +REAL, ALLOCATABLE, DIMENSION(:,:) :: ZINPRC, ZINPRC_OUT +REAL, ALLOCATABLE, DIMENSION(:,:) :: PINPRR, PINPRR_OUT +REAL, ALLOCATABLE, DIMENSION(:,:,:) :: PEVAP, PEVAP_OUT +REAL, ALLOCATABLE, DIMENSION(:,:) :: PINPRS, PINPRS_OUT +REAL, ALLOCATABLE, DIMENSION(:,:) :: PINPRG, PINPRG_OUT +REAL, ALLOCATABLE, DIMENSION(:,:,:,:) :: PFPR, PFPR_OUT + +REAL, ALLOCATABLE, DIMENSION(:,:) :: PINPRH, PINPRH_OUT + +!spp stuff +REAL, ALLOCATABLE, dimension(:,:) :: PICENU, PKGN_ACON, PKGN_SBGR +!ocnd2 stuff +REAL, ALLOCATABLE, DIMENSION(:,:,:) :: PICLDFR ! Ice cloud fraction +REAL, ALLOCATABLE, DIMENSION(:,:,:) :: PIFR ! Ratio cloud ice moist part to dry part +REAL, ALLOCATABLE, DIMENSION(:,:,:) :: PSSIO ! Super-saturation with respect to ice in the supersaturated fraction +REAL, ALLOCATABLE, DIMENSION(:,:,:) :: PSSIU ! Sub-saturation with respect to ice in the subsaturated fraction + +LOGICAL, ALLOCATABLE, DIMENSION(:,:,:) :: LLMICRO + +INTEGER :: NPROMA, NGPBLKS, NFLEVG +INTEGER :: IBL, JLON, JLEV + +TYPE(DIMPHYEX_t) :: D, D0 +TYPE(PHYEX_t) :: PHYEX +LOGICAL :: LLCHECK +LOGICAL :: LLCHECKDIFF +LOGICAL :: LLDIFF +INTEGER :: IBLOCK1, IBLOCK2 +INTEGER :: ISTSZ, JBLK1, JBLK2 +INTEGER :: NTID, ITID +INTEGER :: JRR + +REAL, ALLOCATABLE :: PSTACK(:,:) +TYPE (STACK) :: YLSTACK + +REAL(KIND=8) :: TS,TE +REAL(KIND=8) :: TSC, TEC, TSD, TED, ZTC, ZTD +INTEGER(8) :: COUNTER, C_RATE +REAL(8) :: TIME_START_REAL, TIME_END_REAL +REAL(8) :: TIME_START_CPU, TIME_END_CPU +INTEGER :: ITIME, NTIME +INTEGER :: IRANK, ISIZE +LOGICAL :: LLVERBOSE, LLSTAT, LLBIND +REAL (KIND=JPHOOK) :: ZHOOK_HANDLE + +INTEGER :: ISIZEMICRO +INTEGER :: KKA +INTEGER :: KKU +INTEGER :: KKL +INTEGER :: KSPLITR +LOGICAL :: OSEDIC +LOGICAL :: OCND2 +LOGICAL :: LKOGAN +LOGICAL :: LMODICEDEP +CHARACTER(LEN=4) :: C_SEDIM +CHARACTER(LEN=4) :: CSUBG_AUCV_RC +LOGICAL :: OWARM +REAL :: PTSTEP + + integer :: j - use xrd_getoptions, only: initoptions, getoption - use getdata_rain_ice_old_mod, only: getdata_rain_ice_old - use modi_rain_ice_old - use yomhook, only: lhook, dr_hook, jphook - use modd_dimphyex, only: dimphyex_t - use modd_cst, only: cst - use modd_rain_ice_param_n, only: rain_ice_paramn - use modd_rain_ice_descr_n, only: rain_ice_descrn - use modd_param_ice_n, only: param_icen - use modd_budget - - use iso_fortran_env, only: output_unit - - implicit none - - integer :: n_gp_blocks, & - n_proma, & - n_levels - - real, allocatable, dimension(:,:,:) :: pdzz - real, allocatable, dimension(:,:,:) :: prhodj - real, allocatable, dimension(:,:,:) :: prhodref - real, allocatable, dimension(:,:,:) :: pexnref - real, allocatable, dimension(:,:,:) :: ppabsm - real, allocatable, dimension(:,:,:) :: pcit, pcit_out - real, allocatable, dimension(:,:,:) :: pcldfr - real, allocatable, dimension(:,:,:) :: ptht - real, allocatable, dimension(:,:,:,:) :: prt - real, allocatable, dimension(:,:,:) :: pths, pths_out - real, allocatable, dimension(:,:,:,:) :: prs, prs_out - real, allocatable, dimension(:,:,:) :: psigs - real, allocatable, dimension(:,:) :: psea - real, allocatable, dimension(:,:) :: ptown - - real, allocatable, dimension(:,:) :: zinprc, zinprc_out - real, allocatable, dimension(:,:) :: pinprr, pinprr_out - real, allocatable, dimension(:,:,:) :: pevap, pevap_out - real, allocatable, dimension(:,:) :: pinprs, pinprs_out - real, allocatable, dimension(:,:) :: pinprg, pinprg_out - real, allocatable, dimension(:,:,:,:) :: pfpr, pfpr_out - - real, allocatable, dimension(:,:) :: pinprh, pinprh_out - - !spp stuff - real, allocatable, dimension(:,:) :: picenu, pkgn_acon, pkgn_sbgr - !ocnd2 stuff - real, allocatable, dimension(:,:,:) :: picldfr ! Ice cloud fraction - real, allocatable, dimension(:,:,:) :: pifr ! Ratio cloud ice moist part to dry part - real, allocatable, dimension(:,:,:) :: pssio ! Super-saturation with respect to ice in the supersaturated fraction - real, allocatable, dimension(:,:,:) :: pssiu ! Sub-saturation with respect to ice in the subsaturated fraction - - logical, allocatable, dimension(:,:,:) :: llmicro - - integer :: isize - - type(dimphyex_t) :: D - - integer(8) :: counter, c_rate - logical :: l_verbose, checkdiff - - integer :: kka - integer :: kku - integer :: kkl - integer :: krr - integer :: ksplitr - - logical :: osedic - logical :: ocnd2 - logical :: lkogan - logical :: lmodicedep - character(len=4) :: c_sedim - character(len=4) :: c_micro - character(len=4) :: csubg_aucv_rc - logical :: owarm - TYPE(TBUDGETDATA), DIMENSION(NBUDGET_RH) :: YLBUDGET - - real :: ptstep - - integer :: i, j, jrr - - real(kind=jphook) :: zhook_handle - - real(8) :: time_start_real, time_end_real - real(8) :: time_start_cpu, time_end_cpu - - interface - - subroutine init_rain_ice_old(kulout) - - implicit none - - integer, intent (in) :: kulout - - end subroutine init_rain_ice_old - - subroutine init_gmicro(D, krr, n_gp_blocks, odmicro, prt, pssio, ocnd2, prht) - - use modd_dimphyex, only: dimphyex_t - use modd_rain_ice_descr_n, only: xrtmin - use modd_rain_ice_param_n, only: xfrmin - - implicit none - - type(dimphyex_t) :: D - - integer, intent(in) :: krr, n_gp_blocks - logical, dimension(D%nit, D%nkt, n_gp_blocks), intent(inout) :: odmicro - - real, dimension(D%nit, D%nkt, krr, n_gp_blocks), intent(in) :: prt - real, dimension(D%nit, D%nkt, n_gp_blocks), intent(in) :: pssio - real, dimension(D%nit, D%nkt, n_gp_blocks), optional, intent(in) :: prht - - logical, intent(in) :: ocnd2 - - end subroutine init_gmicro - - subroutine print_diff_1(array, ref) - - implicit none + + + - real, intent(in), dimension(:) :: array - real, intent(in), dimension(:) :: ref - end subroutine print_diff_1 - subroutine print_diff_2(array, ref) - implicit none - real, intent(in), dimension(:,:) :: array - real, intent(in), dimension(:,:) :: ref +CALL INITOPTIONS() +NGPBLKS = 150 +CALL GETOPTION ("--blocks", NGPBLKS) +NPROMA = 32 +CALL GETOPTION ("--nproma", NPROMA) +NFLEVG = 90 +CALL GETOPTION ("--nflevg", NFLEVG) +CALL GETOPTION ("--check", LLCHECK) +CALL GETOPTION ("--checkdiff", LLCHECKDIFF) +IBLOCK1 = 1 +CALL GETOPTION ("--check-block-1", IBLOCK1) +IBLOCK2 = NGPBLKS +CALL GETOPTION ("--check-block-2", IBLOCK2) +CALL GETOPTION ("--stat", LLSTAT) +NTIME = 1 +CALL GETOPTION ("--times", NTIME) +LLVERBOSE = .FALSE. +CALL GETOPTION ("--verbose", LLVERBOSE) +CALL GETOPTION ("--bind", LLBIND) +CALL CHECKOPTIONS () + +LLDIFF = .FALSE. + +IRANK = 0 +ISIZE = 1 +IF (LLBIND) THEN + CALL LINUX_BIND (IRANK, ISIZE) + CALL LINUX_BIND_DUMP (IRANK, ISIZE) +ENDIF + +WRITE(OUTPUT_UNIT, *) 'n_gp_blocks: ', NGPBLKS +WRITE(OUTPUT_UNIT, *) 'n_proma: ', NPROMA +WRITE(OUTPUT_UNIT, *) 'n_levels: ', NFLEVG +WRITE(OUTPUT_UNIT, *) 'total: ', NFLEVG*NPROMA*NGPBLKS + +CALL GETDATA_RAIN_ICE_OLD(NPROMA, NGPBLKS, NFLEVG, KRR, & + OSEDIC, OCND2, LKOGAN, LMODICEDEP, OWARM, & + KKA, KKU, KKL, KSPLITR, & + PTSTEP, C_SEDIM, CSUBG_AUCV_RC, & + PDZZ, PRHODJ, PRHODREF, & + PEXNREF, PPABSM, & + PCIT, PCIT_OUT, & + PCLDFR, & + PICLDFR, PSSIO, PSSIU, PIFR, & + PTHT, PRT, PTHS, PTHS_OUT, & + PRS, PRS_OUT, & + PSIGS, PSEA, PTOWN, & + ZINPRC, ZINPRC_OUT, & + PINPRR, PINPRR_OUT, & + PEVAP, PEVAP_OUT, & + PINPRS, PINPRS_OUT, & + PINPRG, PINPRG_OUT, & + PINPRH, PINPRH_OUT, & + PICENU, PKGN_ACON, PKGN_SBGR, & + PFPR, PFPR_OUT, LLMICRO, LLVERBOSE) +KLEV = SIZE (PRS, 2) + +IF (LLVERBOSE) PRINT *, " KLEV = ", KLEV, " KRR = ", KRR + +WRITE(OUTPUT_UNIT, *) 'osedic: ', OSEDIC +WRITE(OUTPUT_UNIT, *) 'ocnd2: ', OCND2 +WRITE(OUTPUT_UNIT, *) 'lkogan: ', LKOGAN +WRITE(OUTPUT_UNIT, *) 'lmodicedep: ', LMODICEDEP +WRITE(OUTPUT_UNIT, *) 'owarm: ', OWARM +WRITE(OUTPUT_UNIT, *) 'kka: ', KKA +WRITE(OUTPUT_UNIT, *) 'kku: ', KKU +WRITE(OUTPUT_UNIT, *) 'kkl: ', KKL +WRITE(OUTPUT_UNIT, *) 'ksplitr: ', KSPLITR +WRITE(OUTPUT_UNIT, *) 'ptstep: ', PTSTEP +WRITE(OUTPUT_UNIT, *) 'c_sedim: ', C_SEDIM +WRITE(OUTPUT_UNIT, *) 'csubg_aucv_rc: ', CSUBG_AUCV_RC + +!PRINT *, " NPROMA = ", NPROMA, " KLEV = ", KLEV, " NGPBLKS = ", NGPBLKS + +CALL INIT_PHYEX(KRR, PHYEX, OWARM, OSEDIC, OCND2, C_SEDIM, CSUBG_AUCV_RC, PTSTEP) + +D0%NIT = NPROMA +D0%NIB = 1 +D0%NIE = NPROMA +D0%NJT = 1 +D0%NJB = 1 +D0%NJE = 1 +D0%NIJT = D0%NIT * D0%NJT +D0%NIJB = 1 +D0%NIJE = NPROMA +D0%NKL = KKL +D0%NKT = KLEV +D0%NKA = KLEV +D0%NKU = 1 +D0%NKB = KLEV +D0%NKE = 1 +D0%NKTB = 1 +D0%NKTE = KLEV + +ISTSZ = NPROMA * 20 * KLEV +ALLOCATE (PSTACK (ISTSZ, NGPBLKS)) + +TS = OMP_GET_WTIME () + +ZTD = 0. +ZTC = 0. + +CALL INIT_GMICRO(D0, KRR, NGPBLKS, LLMICRO, PRT, PSSIO, OCND2) + +IF (LHOOK) CALL DR_HOOK ('MAIN',0,ZHOOK_HANDLE) + +CALL CPU_TIME(TIME_START_CPU) +CALL SYSTEM_CLOCK(COUNT=COUNTER, COUNT_RATE=C_RATE) +TIME_START_REAL = REAL(COUNTER,8)/C_RATE + +DO ITIME = 1, NTIME + + TSD = OMP_GET_WTIME () + +!openacc directives + + TSC = OMP_GET_WTIME () + +#ifdef USE_OPENMP +!$OMP PARALLEL PRIVATE (D, ITID, JBLK1, JBLK2, ISIZE, ISIZEMICRO) +#endif + +#ifdef _OPENACC +JBLK1 = 1 +JBLK2 = NGPBLKS +#endif + +#ifdef USE_OPENMP +NTID = OMP_GET_MAX_THREADS () +ITID = OMP_GET_THREAD_NUM () +JBLK1 = 1 + (NGPBLKS * (ITID+0)) / NTID +JBLK2 = (NGPBLKS * (ITID+1)) / NTID + + +!PRINT *, ITID, JBLK1, JBLK2 + +#endif + +!$acc parallel loop gang vector private (YLSTACK, IBL, JLON, D, ISIZEMICRO) collapse (2) + + DO IBL = JBLK1, JBLK2 + + +#ifdef _OPENACC + DO JLON = 1, NPROMA + D = D0 + D%NIB = JLON + D%NIE = JLON + D%NIJB = JLON + D%NIJE = JLON +#endif + +#ifdef USE_OPENMP + D = D0 +#endif + +#ifdef USE_STACK + YLSTACK%L = LOC (PSTACK (1, IBL)) + YLSTACK%U = YLSTACK%L + ISTSZ * KIND (PSTACK) +#else + YLSTACK%L = 0 + YLSTACK%U = 0 +#endif + + ISIZEMICRO = COUNT(LLMICRO(:,:,IBL)) + + IF (ISIZEMICRO .GT. 0) THEN + CALL RAIN_ICE_OLD(D=D, CST=PHYEX%CST, PARAMI=PHYEX%PARAM_ICEN, & + ICEP=PHYEX%RAIN_ICE_PARAMN, ICED=PHYEX%RAIN_ICE_DESCRN, BUCONF=PHYEX%MISC%TBUCONF, & + OSEDIC=OSEDIC, OCND2=OCND2, & + LKOGAN=LKOGAN, LMODICEDEP=LMODICEDEP, & + HSEDIM=C_SEDIM, HSUBG_AUCV_RC=CSUBG_AUCV_RC, OWARM=OWARM, & + KKA=KKA, KKU=KKU, KKL=KKL, & + KSPLITR=KSPLITR, PTSTEP=2*PTSTEP, KRR=KRR, & + KSIZE=ISIZEMICRO, GMICRO=LLMICRO(:,:,IBL), & + PDZZ=PDZZ(:,:,IBL), PRHODJ=PRHODJ(:,:,IBL), PRHODREF=PRHODREF(:,:,IBL), & + PEXNREF=PEXNREF(:,:,IBL), PPABST=PPABSM(:,:,IBL), & + PCIT=PCIT(:,:,IBL), PCLDFR=PCLDFR(:,:,IBL), & + PICLDFR=PICLDFR(:,:,IBL), PSSIO=PSSIO(:,:,IBL), PSSIU=PSSIU(:,:,IBL), & + PIFR=PIFR(:,:,IBL), & + PTHT=PTHT(:,:,IBL), & + PRVT=PRT(:,:,1,IBL), PRCT=PRT(:,:,2,IBL), PRRT=PRT(:,:,3,IBL), & + PRIT=PRT(:,:,4,IBL), PRST=PRT(:,:,5,IBL), PRGT=PRT(:,:,6,IBL), & + PTHS=PTHS(:,:,IBL), & + PRVS=PRS(:,:,1,IBL), PRCS=PRS(:,:,2,IBL), PRRS=PRS(:,:,3,IBL), & + PRIS=PRS(:,:,4,IBL), PRSS=PRS(:,:,5,IBL), PRGS=PRS(:,:,6,IBL), & + PINPRC=ZINPRC(:,IBL), PINPRR=PINPRR(:,IBL), PEVAP3D=PEVAP(:,:,IBL), & + PINPRS=PINPRS(:,IBL), PINPRG=PINPRG(:,IBL), PSIGS=PSIGS(:,:,IBL), & + PSEA=PSEA(:,IBL), PTOWN=PTOWN(:,IBL), & + TBUDGETS=PHYEX%MISC%YLBUDGET, KBUDGETS=PHYEX%MISC%NBUDGET, & + PICENU=PICENU(:,IBL), & + PKGN_ACON=PKGN_ACON(:,IBL), PKGN_SBGR=PKGN_SBGR(:,IBL), & + PFPR=PFPR(:,:,:,IBL)) + ENDIF - end subroutine print_diff_2 +#ifdef _OPENACC + ENDDO +#endif - end interface + ENDDO +#ifdef USE_OPENMP +!$OMP END PARALLEL +#endif - n_gp_blocks = 150 - n_proma = 32 - n_levels = 90 - krr = 6 - l_verbose = .false. - checkdiff = .false. +!$acc end parallel loop - owarm = .true. + TEC = OMP_GET_WTIME () - kka = 1 - kku = n_levels - kkl = -1 - ksplitr = 2 +!$acc end data - c_sedim = 'STAT' - csubg_aucv_rc = 'PDF' + TED = OMP_GET_WTIME () + + ZTC = ZTC + (TEC - TSC) + ZTD = ZTD + (TED - TSD) -DO JRR=1, NBUDGET_RH - YLBUDGET(JRR)%NBUDGET=JRR ENDDO - ptstep = 25.0000000000000 - - call initoptions() - - call getoption ("--blocks", n_gp_blocks) - call getoption ("--nproma", n_proma) - call getoption ("--nflevg", n_levels) - call getoption ("--verbose", l_verbose) - - write(output_unit, *) 'n_gp_blocks: ', n_gp_blocks - write(output_unit, *) 'n_proma: ', n_proma - write(output_unit, *) 'n_levels: ', n_levels - write(output_unit, *) 'total: ', n_levels*n_proma*n_gp_blocks - - call getdata_rain_ice_old(n_proma, n_gp_blocks, n_levels, krr, & - osedic, ocnd2, lkogan, lmodicedep, owarm, & - kka, kku, kkl, ksplitr, & - ptstep, c_sedim, csubg_aucv_rc, & - pdzz, prhodj, prhodref, & - pexnref, ppabsm, & - pcit, pcit_out, & - pcldfr, & - picldfr, pssio, pssiu, pifr, & - ptht, prt, pths, pths_out, & - prs, prs_out, & - psigs, psea, ptown, & - zinprc, zinprc_out, & - pinprr, pinprr_out, & - pevap, pevap_out, & - pinprs, pinprs_out, & - pinprg, pinprg_out, & - pinprh, pinprh_out, & - picenu, pkgn_acon, pkgn_sbgr, & - pfpr, pfpr_out, llmicro, l_verbose) +IF (LHOOK) CALL DR_HOOK ('MAIN',1,ZHOOK_HANDLE) - - write(output_unit, *) 'osedic: ', osedic - write(output_unit, *) 'ocnd2: ', ocnd2 - write(output_unit, *) 'lkogan: ', lkogan - write(output_unit, *) 'lmodicedep: ', lmodicedep - write(output_unit, *) 'owarm: ', owarm - write(output_unit, *) 'kka: ', kka - write(output_unit, *) 'kku: ', kku - write(output_unit, *) 'kkl: ', kkl - write(output_unit, *) 'ksplitr: ', ksplitr - write(output_unit, *) 'ptstep: ', ptstep - write(output_unit, *) 'c_sedim: ', c_sedim - write(output_unit, *) 'csubg_aucv_rc: ', csubg_aucv_rc - - D%nit = n_proma - D%nib = 1 - D%nie = n_proma - D%njt = 1 - D%njb = 1 - D%nje = 1 - D%nijt = D%nit * D%njt - D%nijb = 1 - D%nije = n_proma - D%nkl = -1 - D%nkt = n_levels - D%nka = n_levels - D%nku = 1 - D%nkb = n_levels - D%nke = 1 - D%nktb = 1 - D%nkte = n_levels - - call init_rain_ice_old(20) - - call init_gmicro(D, krr, n_gp_blocks, llmicro, prt, pssio, ocnd2) - - call cpu_time(time_start_cpu) - call system_clock(count=counter, count_rate=c_rate) - time_start_real = real(counter,8)/c_rate - - if(lhook) call dr_hook ('MAIN',0,zhook_handle) - - do i = 1, n_gp_blocks - - isize = count(llmicro(:,:,i)) - - if (isize .gt. 0) then - - call rain_ice_old(D=D, cst=cst, parami=param_icen, & - icep=rain_ice_paramn, iced=rain_ice_descrn, buconf=tbuconf, & - osedic=osedic, ocnd2=ocnd2, & - lkogan=lkogan, lmodicedep=lmodicedep, & - hsedim=c_sedim, hsubg_aucv_rc=csubg_aucv_rc, owarm=owarm, & - kka=kka, kku=kku, kkl=kkl, & - ksplitr=ksplitr, ptstep=2*ptstep, krr=krr, & - ksize=isize, gmicro=llmicro(:,:,i), & - pdzz=pdzz(:,:,i), prhodj=prhodj(:,:,i), prhodref=prhodref(:,:,i), & - pexnref=pexnref(:,:,i), ppabst=ppabsm(:,:,i), & - pcit=pcit(:,:,i), pcldfr=pcldfr(:,:,i), & - picldfr=picldfr(:,:,i), pssio=pssio(:,:,i), pssiu=pssiu(:,:,i), & - pifr=pifr(:,:,i), & - ptht=ptht(:,:,i), & - prvt=prt(:,:,1,i), prct=prt(:,:,2,i), prrt=prt(:,:,3,i), & - prit=prt(:,:,4,i), prst=prt(:,:,5,i), prgt=prt(:,:,6,i), & - pths=pths(:,:,i), & - prvs=prs(:,:,1,i), prcs=prs(:,:,2,i), prrs=prs(:,:,3,i), & - pris=prs(:,:,4,i), prss=prs(:,:,5,i), prgs=prs(:,:,6,i), & - pinprc=zinprc(:,i), pinprr=pinprr(:,i), pevap3d=pevap(:,:,i), & - pinprs=pinprs(:,i), pinprg=pinprg(:,i), psigs=psigs(:,:,i), & - psea=psea(:,i), ptown=ptown(:,i), & - TBUDGETS=YLBUDGET, KBUDGETS=SIZE(YLBUDGET), & - picenu=picenu(:,i), & - pkgn_acon=pkgn_acon(:,i), pkgn_sbgr=pkgn_sbgr(:,i), & - pfpr=pfpr(:,:,:,i)) +TE = OMP_GET_WTIME() - endif +!WRITE (*,'(A,F8.2,A)') 'elapsed time : ',TE-TS,' s' +!WRITE (*,'(A,F8.4,A)') ' i.e. ',1000.*(TE-TS)/(NPROMA*NGPBLKS)/NTIME,' ms/gp' +! +!PRINT *, " ZTD = ", ZTD, ZTD / REAL (NPROMA*NGPBLKS*NTIME) +!PRINT *, " ZTC = ", ZTC, ZTC / REAL (NPROMA*NGPBLKS*NTIME) - enddo - - if(lhook) call dr_hook ('MAIN',1,zhook_handle) - call cpu_time(time_end_cpu) - call system_clock(count=counter, count_rate=c_rate) - time_end_real = real(counter,8)/c_rate + CALL CPU_TIME(TIME_END_CPU) + CALL SYSTEM_CLOCK(COUNT=COUNTER, COUNT_RATE=C_RATE) + TIME_END_REAL = REAL(COUNTER,8)/C_RATE write(output_unit, *) @@ -359,149 +415,163 @@ ENDDO call print_diff_2(pfpr(:,:,6,1), pfpr_out(:,:,6,1)) write(output_unit, *) -end program - -subroutine init_rain_ice_old(kulout) - - use modd_param_ice_n, only: param_ice_goto_model - use modd_rain_ice_param_n, only: rain_ice_param_goto_model - use modd_rain_ice_descr_n, only: rain_ice_descr_goto_model - use modd_cloudpar_n, only: cloudpar_goto_model - use modd_param_ice_n - - use mode_ini_rain_ice - - use mode_ini_cst - use mode_ini_tiwmx - use modd_budget - use modd_les, only: tles - - use iso_fortran_env, only: output_unit - - implicit none - - integer, intent (in) :: kulout - - character(len=4) :: c_micro - integer :: isplitr - - call ini_cst - - call ini_tiwmx - - call cloudpar_goto_model(1, 1) - call param_ice_goto_model(1, 1) - call rain_ice_descr_goto_model(1, 1) - call rain_ice_param_goto_model(1, 1) - - call param_icen_init('AROME ', 0, .false., kulout, & - &.true., .false., .false., 0) - - call tbuconf_associate - - lbu_enable=.false. - lbudget_u=.false. - lbudget_v=.false. - lbudget_w=.false. - lbudget_th=.false. - lbudget_tke=.false. - lbudget_rv=.false. - lbudget_rc=.false. - lbudget_rr=.false. - lbudget_ri=.false. - lbudget_rs=.false. - lbudget_rg=.false. - lbudget_rh=.false. - lbudget_sv=.false. - tles%lles_call = .false. - - ! 1. set implicit default values for modd_param_ice - cpristine_ice = 'PLAT' - csubg_rc_rr_accr = 'NONE' - csubg_rr_evap = 'NONE' - csubg_pr_pdf = 'SIGM' - c_micro = 'ICE3' - - ! 2. set implicit default values for modd_rain_ice_descr and modd_rain_ice_param - - call ini_rain_ice(kulout, 50., 20., isplitr, c_micro) - -end subroutine init_rain_ice_old - - -subroutine init_gmicro(D, krr, n_gp_blocks, odmicro, prt, pssio, ocnd2, prht) - - use modd_dimphyex, only: dimphyex_t - use modd_rain_ice_descr_n, only: xrtmin - use modd_rain_ice_param_n, only: xfrmin - use iso_fortran_env, only: output_unit - - implicit none - - type(dimphyex_t) :: D - - integer, intent(in) :: krr, n_gp_blocks - logical, dimension(D%nit, D%nkt, n_gp_blocks), intent(inout) :: odmicro - - real, dimension(D%nit, D%nkt, krr, n_gp_blocks), intent(in) :: prt - real, dimension(D%nit, D%nkt, n_gp_blocks), intent(in) :: pssio - real, dimension(D%nit, D%nkt, n_gp_blocks), optional, intent(in) :: prht - - logical, intent(in) :: ocnd2 - - integer :: i, k, ikrr, iblock - - if (ocnd2) then - - do iblock = 1, n_gp_blocks - - do k = 1, D%nkt - do i = 1, D%nit - odmicro(i, k, iblock) = odmicro(i, k, iblock) .or. pssio(i, k, iblock) > xfrmin(12) - enddo - enddo - - do ikrr = 2, 6 - do k = 1, D%nkt - do i = 1, D%nit - odmicro(i, k, iblock) = odmicro(i, k, iblock) .or. prt(i, k, ikrr, iblock) > xfrmin(13) - enddo - enddo - enddo - - if (krr == 7) then - do k = 1, D%nkt - do i = 1, D%nit - odmicro(i, k, iblock) = odmicro(i, k, iblock) .or. prht(i, k, iblock) > xfrmin(13) - enddo - enddo - endif - - enddo - - else - - do iblock = 1, n_gp_blocks - do ikrr = 2, 6 - do k = 1, D%nkt - do i = 1, D%nit - odmicro(i, k, iblock) = odmicro(i, k, iblock) .or. prt(i, k, ikrr, iblock) > xrtmin(ikrr) - enddo - enddo - enddo - enddo - - if (krr == 7) then - do k = 1, D%nkt - do i = 1, D%nit - odmicro(i, k, iblock) = odmicro(i, k, iblock) .or. prht(i, k, iblock) > xrtmin(7) - enddo - enddo - endif - - endif - -end subroutine init_gmicro +STOP + +CONTAINS + +SUBROUTINE INIT_PHYEX(KRR, PHYEX, LDWARM, LDSEDIC, LDCND2, C_SEDIM, CSUBG_AUCV_RC, PTSTEP) + +USE MODD_BUDGET, ONLY: TBUCONF_ASSOCIATE, NBUDGET_RH, TBUCONF, LBU_ENABLE, LBUDGET_U, LBUDGET_V, LBUDGET_W, LBUDGET_TH, & + LBUDGET_TKE, LBUDGET_RV, LBUDGET_RC, LBUDGET_RR, LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, LBUDGET_RH, LBUDGET_SV +USE MODD_PHYEX, ONLY: PHYEX_t +USE MODI_INI_PHYEX, ONLY: INI_PHYEX + +IMPLICIT NONE + +! ----------------------------------------------------------------------- +! DUMMY VARIABLES +INTEGER, INTENT(IN) :: KRR +TYPE(PHYEX_t), INTENT(OUT) :: PHYEX +LOGICAL, INTENT(IN) :: LDWARM +LOGICAL, INTENT(IN) :: LDSEDIC +LOGICAL, INTENT(IN) :: LDCND2 +CHARACTER(LEN=4), INTENT(IN) :: C_SEDIM +CHARACTER(LEN=4), INTENT(IN) :: CSUBG_AUCV_RC +REAL, INTENT(IN) :: PTSTEP + +!----------------------------------------------------------------------- +! LOCAL VARIABLES +INTEGER :: IULOUT, JRR +REAL :: ZDZMIN +CHARACTER(LEN=6) :: CPROGRAM +CHARACTER(LEN=4) :: CMICRO, CSCONV, CTURB +! ----------------------------------------------------------------------- + +IULOUT=20 +CPROGRAM='AROME' +ZDZMIN=20. +CMICRO='ICE3' +CSCONV='NONE' +CTURB='TKEL' + +!Default values +CALL INI_PHYEX(CPROGRAM, 0, .TRUE., IULOUT, 0, 1, & + &PTSTEP, ZDZMIN, & + &CMICRO, CSCONV, CTURB, & + &LDDEFAULTVAL=.TRUE., LDREADNAM=.FALSE., LDCHECK=.FALSE., KPRINT=0, LDINIT=.FALSE., & + &PHYEX_OUT=PHYEX) + +!Control parameters +PHYEX%MISC%PTSTEP = 2*PTSTEP +PHYEX%MISC%KRR = KRR + +!Emulate the namelist reading +!PHYEX%PARAM_ICEN%LCRIAUTI=.TRUE. +!PHYEX%PARAM_ICEN%XCRIAUTI_NAM=0.2E-3 +!PHYEX%PARAM_ICEN%XT0CRIAUTI_NAM=-5. +!PHYEX%PARAM_ICEN%XCRIAUTC_NAM=0.1E-2 +PHYEX%PARAM_ICEN%LOCND2=LDCND2 +PHYEX%PARAM_ICEN%CSEDIM=C_SEDIM +PHYEX%PARAM_ICEN%LWARM=LDWARM +PHYEX%PARAM_ICEN%LSEDIC=LDSEDIC +!PHYEX%PARAM_ICEN%CSNOWRIMING='M90 ' +!PHYEX%PARAM_ICEN%XFRACM90=0.1 ! Fraction used for the Murakami 1990 formulation +!PHYEX%PARAM_ICEN%LCONVHG=.TRUE. ! TRUE to allow the conversion from hail to graupel +!PHYEX%PARAM_ICEN%LCRFLIMIT=.TRUE. !True to limit rain contact freezing to possible heat exchange +!PHYEX%PARAM_ICEN%LFEEDBACKT=.TRUE. ! When .TRUE. feed back on temperature is taken into account +!PHYEX%PARAM_ICEN%LEVLIMIT=.TRUE. ! When .TRUE. water vapour pressure is limited by saturation +!PHYEX%PARAM_ICEN%LNULLWETG=.TRUE. ! When .TRUE. graupel wet growth is activated with null rate (to allow water shedding) +!PHYEX%PARAM_ICEN%LWETGPOST=.TRUE. ! When .TRUE. graupel wet growth is activated with positive temperature (to allow water shedding) +!PHYEX%PARAM_ICEN%LNULLWETH=.TRUE. ! Same as LNULLWETG but for hail +!PHYEX%PARAM_ICEN%LWETHPOST=.TRUE. ! Same as LWETGPOST but for hail +!PHYEX%PARAM_ICEN%LSEDIM_AFTER=.FALSE. ! Sedimentation done after microphysics +!PHYEX%PARAM_ICEN%XSPLIT_MAXCFL=0.8 +!PHYEX%PARAM_ICEN%LDEPOSC=.FALSE. ! water deposition on vegetation +!PHYEX%PARAM_ICEN%XVDEPOSC=0.02 ! deposition speed (2 cm.s-1) +!PHYEX%PARAM_ICEN%CSUBG_RC_RR_ACCR='NONE' +!PHYEX%PARAM_ICEN%CSUBG_RR_EVAP='NONE' +!PHYEX%PARAM_ICEN%CSUBG_PR_PDF='SIGM' +PHYEX%PARAM_ICEN%CSUBG_AUCV_RC=CSUBG_AUCV_RC + +!Param initialisation +CALL INI_PHYEX(CPROGRAM, 0, .TRUE., IULOUT, 0, 1, & + &PTSTEP, ZDZMIN, & + &CMICRO, CSCONV, CTURB, & + &LDDEFAULTVAL=.FALSE., LDREADNAM=.FALSE., LDCHECK=.TRUE., KPRINT=2, LDINIT=.TRUE., & + &PHYEX_IN=PHYEX, PHYEX_OUT=PHYEX) + +!Budgets +CALL TBUCONF_ASSOCIATE +PHYEX%MISC%NBUDGET=NBUDGET_RH +DO JRR=1, PHYEX%MISC%NBUDGET + PHYEX%MISC%YLBUDGET(JRR)%NBUDGET=JRR +ENDDO +LBU_ENABLE=.FALSE. +LBUDGET_U=.FALSE. +LBUDGET_V=.FALSE. +LBUDGET_W=.FALSE. +LBUDGET_TH=.FALSE. +LBUDGET_TKE=.FALSE. +LBUDGET_RV=.FALSE. +LBUDGET_RC=.FALSE. +LBUDGET_RR=.FALSE. +LBUDGET_RI=.FALSE. +LBUDGET_RS=.FALSE. +LBUDGET_RG=.FALSE. +LBUDGET_RH=.FALSE. +LBUDGET_SV=.FALSE. +PHYEX%MISC%TBUCONF=TBUCONF + +END SUBROUTINE INIT_PHYEX + +SUBROUTINE INIT_GMICRO(D, KRR, NGPBLKS, ODMICRO, PRT, PSSIO, OCND2) + + USE MODD_DIMPHYEX, ONLY: DIMPHYEX_T + USE MODD_RAIN_ICE_DESCR_N, ONLY: XRTMIN + USE MODD_RAIN_ICE_PARAM_N, ONLY: XFRMIN + USE ISO_FORTRAN_ENV, ONLY: OUTPUT_UNIT + + IMPLICIT NONE + + TYPE(DIMPHYEX_T) :: D + + INTEGER, INTENT(IN) :: KRR, NGPBLKS + LOGICAL, DIMENSION(D%NIT, D%NKT, NGPBLKS), INTENT(INOUT) :: ODMICRO + + REAL, DIMENSION(D%NIT, D%NKT, KRR, NGPBLKS), INTENT(IN) :: PRT + REAL, DIMENSION(D%NIT, D%NKT, NGPBLKS), INTENT(IN) :: PSSIO + + LOGICAL, INTENT(IN) :: OCND2 + + INTEGER :: I, K, IKRR, IBLOCK + REAL :: ZTHR + + DO IBLOCK = 1, NGPBLKS + + IF (OCND2) THEN + DO K = 1, D%NKT + DO I = 1, D%NIT + ODMICRO(I, K, IBLOCK) = ODMICRO(I, K, IBLOCK) .OR. PSSIO(I, K, IBLOCK) > XFRMIN(12) + ENDDO + ENDDO + ENDIF + + DO IKRR = 2, KRR + IF (OCND2) THEN + ZTHR = XFRMIN(13) + ELSE + ZTHR = XRTMIN(IKRR) + ENDIF + DO K = 1, D%NKT + DO I = 1, D%NIT + ODMICRO(I, K, IBLOCK) = ODMICRO(I, K, IBLOCK) .OR. PRT(I, K, IKRR, IBLOCK) > XFRMIN(13) + ENDDO + ENDDO + ENDDO + + ENDDO + +END SUBROUTINE INIT_GMICRO subroutine print_diff_1(array, ref) @@ -559,4 +629,5 @@ subroutine print_diff_2(array, ref) end subroutine print_diff_2 +END PROGRAM diff --git a/src/testprogs/shallow/main_shallow.F90 b/src/testprogs/shallow/main_shallow.F90 index 4273072ef..29826ea4a 100644 --- a/src/testprogs/shallow/main_shallow.F90 +++ b/src/testprogs/shallow/main_shallow.F90 @@ -1,8 +1,8 @@ PROGRAM MAIN_SHALLOW -USE XRD_GETOPTIONS -USE GETDATA_SHALLOW_MOD -USE COMPUTE_DIFF +USE XRD_GETOPTIONS, ONLY: INITOPTIONS, GETOPTION, CHECKOPTIONS +USE GETDATA_SHALLOW_MOD, ONLY: GETDATA_SHALLOW +USE COMPUTE_DIFF, ONLY: DIFF USE MODI_SHALLOW_MF USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t USE MODD_PHYEX, ONLY: PHYEX_t @@ -12,7 +12,6 @@ USE YOMHOOK, ONLY : LHOOK, DR_HOOK, JPHOOK IMPLICIT NONE -INTEGER :: KLON INTEGER :: KLEV INTEGER :: KRR, KRRL, KRRI INTEGER :: KSV @@ -332,35 +331,35 @@ PRINT *, " ZTC = ", ZTC, ZTC / REAL (NPROMA*NGPBLKS*NTIME) IF (LLCHECK .OR. LLSTAT .OR. LLCHECKDIFF) THEN DO IBL = IBLOCK1, IBLOCK2 PRINT *, " IBL = ", IBL - CALL DIFF3 ("PDUDT_MF ", PDUDT_MF_OUT (:,:,:,IBL), PDUDT_MF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PDVDT_MF ", PDVDT_MF_OUT (:,:,:,IBL), PDVDT_MF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PDTHLDT_MF ", PDTHLDT_MF_OUT (:,:,:,IBL), PDTHLDT_MF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PDRTDT_MF ", PDRTDT_MF_OUT (:,:,:,IBL), PDRTDT_MF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PSIGMF ", PSIGMF_OUT (:,:,:,IBL), PSIGMF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PRC_MF ", PRC_MF_OUT (:,:,:,IBL), PRC_MF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PRI_MF ", PRI_MF_OUT (:,:,:,IBL), PRI_MF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PCF_MF ", PCF_MF_OUT (:,:,:,IBL), PCF_MF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PFLXZTHVMF ", PFLXZTHVMF_OUT (:,:,:,IBL), PFLXZTHVMF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("ZFLXZTHMF ", ZFLXZTHMF_OUT (:,:,:,IBL), ZFLXZTHMF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("ZFLXZRMF ", ZFLXZRMF_OUT (:,:,:,IBL), ZFLXZRMF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("ZFLXZUMF ", ZFLXZUMF_OUT (:,:,:,IBL), ZFLXZUMF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("ZFLXZVMF ", ZFLXZVMF_OUT (:,:,:,IBL), ZFLXZVMF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PTHL_UP ", PTHL_UP_OUT (:,:,:,IBL), PTHL_UP (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PRT_UP ", PRT_UP_OUT (:,:,:,IBL), PRT_UP (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PRV_UP ", PRV_UP_OUT (:,:,:,IBL), PRV_UP (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PRC_UP ", PRC_UP_OUT (:,:,:,IBL), PRC_UP (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PRI_UP ", PRI_UP_OUT (:,:,:,IBL), PRI_UP (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PU_UP ", PU_UP_OUT (:,:,:,IBL), PU_UP (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PV_UP ", PV_UP_OUT (:,:,:,IBL), PV_UP (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PTHV_UP ", PTHV_UP_OUT (:,:,:,IBL), PTHV_UP (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PW_UP ", PW_UP_OUT (:,:,:,IBL), PW_UP (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PFRAC_UP ", PFRAC_UP_OUT (:,:,:,IBL), PFRAC_UP (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PEMF ", PEMF_OUT (:,:,:,IBL), PEMF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("ZDETR ", ZDETR_OUT (:,:,:,IBL), ZDETR (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("ZENTR ", ZENTR_OUT (:,:,:,IBL), ZENTR (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) -! CALL DIFF2 ("IKLCL ", IKLCL_OUT (:,:,IBL), IKLCL (:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) -! CALL DIFF2 ("IKETL ", IKETL_OUT (:,:,IBL), IKETL (:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) -! CALL DIFF2 ("IKCTL ", IKCTL_OUT (:,:,IBL), IKCTL (:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PDUDT_MF ", PDUDT_MF_OUT (:,:,:,IBL), PDUDT_MF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PDVDT_MF ", PDVDT_MF_OUT (:,:,:,IBL), PDVDT_MF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PDTHLDT_MF ", PDTHLDT_MF_OUT (:,:,:,IBL), PDTHLDT_MF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PDRTDT_MF ", PDRTDT_MF_OUT (:,:,:,IBL), PDRTDT_MF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PSIGMF ", PSIGMF_OUT (:,:,:,IBL), PSIGMF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PRC_MF ", PRC_MF_OUT (:,:,:,IBL), PRC_MF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PRI_MF ", PRI_MF_OUT (:,:,:,IBL), PRI_MF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PCF_MF ", PCF_MF_OUT (:,:,:,IBL), PCF_MF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PFLXZTHVMF ", PFLXZTHVMF_OUT (:,:,:,IBL), PFLXZTHVMF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("ZFLXZTHMF ", ZFLXZTHMF_OUT (:,:,:,IBL), ZFLXZTHMF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("ZFLXZRMF ", ZFLXZRMF_OUT (:,:,:,IBL), ZFLXZRMF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("ZFLXZUMF ", ZFLXZUMF_OUT (:,:,:,IBL), ZFLXZUMF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("ZFLXZVMF ", ZFLXZVMF_OUT (:,:,:,IBL), ZFLXZVMF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PTHL_UP ", PTHL_UP_OUT (:,:,:,IBL), PTHL_UP (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PRT_UP ", PRT_UP_OUT (:,:,:,IBL), PRT_UP (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PRV_UP ", PRV_UP_OUT (:,:,:,IBL), PRV_UP (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PRC_UP ", PRC_UP_OUT (:,:,:,IBL), PRC_UP (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PRI_UP ", PRI_UP_OUT (:,:,:,IBL), PRI_UP (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PU_UP ", PU_UP_OUT (:,:,:,IBL), PU_UP (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PV_UP ", PV_UP_OUT (:,:,:,IBL), PV_UP (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PTHV_UP ", PTHV_UP_OUT (:,:,:,IBL), PTHV_UP (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PW_UP ", PW_UP_OUT (:,:,:,IBL), PW_UP (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PFRAC_UP ", PFRAC_UP_OUT (:,:,:,IBL), PFRAC_UP (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PEMF ", PEMF_OUT (:,:,:,IBL), PEMF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("ZDETR ", ZDETR_OUT (:,:,:,IBL), ZDETR (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("ZENTR ", ZENTR_OUT (:,:,:,IBL), ZENTR (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) +! CALL DIFF ("IKLCL ", IKLCL_OUT (:,:,IBL), IKLCL (:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) +! CALL DIFF ("IKETL ", IKETL_OUT (:,:,IBL), IKETL (:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) +! CALL DIFF ("IKCTL ", IKCTL_OUT (:,:,IBL), IKCTL (:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) ENDDO ENDIF diff --git a/src/testprogs/support/diff.F90 b/src/testprogs/support/compute_diff.F90 similarity index 100% rename from src/testprogs/support/diff.F90 rename to src/testprogs/support/compute_diff.F90 diff --git a/src/testprogs/turb_mnh/main_turb.F90 b/src/testprogs/turb_mnh/main_turb.F90 index 423b7b419..b0a7f5c5f 100644 --- a/src/testprogs/turb_mnh/main_turb.F90 +++ b/src/testprogs/turb_mnh/main_turb.F90 @@ -1,8 +1,8 @@ PROGRAM MAIN_TURB -USE XRD_GETOPTIONS -USE GETDATA_TURB_MOD -USE COMPUTE_DIFF +USE XRD_GETOPTIONS, ONLY: INITOPTIONS, GETOPTION, CHECKOPTIONS +USE GETDATA_TURB_MOD, ONLY: GETDATA_TURB +USE COMPUTE_DIFF, ONLY: DIFF USE MODI_TURB USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t USE MODD_PHYEX, ONLY: PHYEX_t @@ -13,7 +13,6 @@ USE MODD_LES, ONLY: TLES_t IMPLICIT NONE -INTEGER :: KLON INTEGER :: KLEV INTEGER :: KRR, KRRL, KRRI INTEGER :: KSV @@ -354,31 +353,31 @@ IF (LLCHECK .OR. LLSTAT .OR. LLCHECKDIFF) THEN PRINT *, " IBL = ", IBL DO JRR=1, KRR WRITE (CLTEXT, '("ZRM JRR=",I3.3)') JRR - CALL DIFF3 (CLTEXT, ZRM_OUT (:,:,:,JRR,IBL), ZRM (:,:,:,JRR,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF (CLTEXT, ZRM_OUT (:,:,:,JRR,IBL), ZRM (:,:,:,JRR,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) WRITE (CLTEXT, '("ZRRS JRR=",I3.3)') JRR - CALL DIFF3 (CLTEXT, ZRRS_OUT (:,:,:,JRR,IBL), ZRRS (:,:,:,JRR,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF (CLTEXT, ZRRS_OUT (:,:,:,JRR,IBL), ZRRS (:,:,:,JRR,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) ENDDO - CALL DIFF2 ("ZBL_DEPTH ", ZBL_DEPTH_OUT (:,:,IBL) , ZBL_DEPTH (:,:,IBL) , LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF2 ("ZSBL_DEPTH ", ZSBL_DEPTH_OUT (:,:,IBL) , ZSBL_DEPTH (:,:,IBL) , LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PTHM ", PTHM_OUT (:,:,:,IBL), PTHM (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PRUS ", PRUS_OUT (:,:,:,IBL), PRUS (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PRVS ", PRVS_OUT (:,:,:,IBL), PRVS (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PRWS ", PRWS_OUT (:,:,:,IBL), PRWS (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PRTHS ", PRTHS_OUT (:,:,:,IBL), PRTHS (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PRTKES_OUT ", PRTKES_OUT_OUT (:,:,:,IBL), PRTKES_OUT (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PSIGS ", PSIGS_OUT (:,:,:,IBL), PSIGS (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("ZWTH ", ZWTH_OUT (:,:,:,IBL), ZWTH (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("ZWRC ", ZWRC_OUT (:,:,:,IBL), ZWRC (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PDP ", PDP_OUT (:,:,:,IBL), PDP (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PTP ", PTP_OUT (:,:,:,IBL), PTP (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PTDIFF ", PTDIFF_OUT (:,:,:,IBL), PTDIFF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PTDISS ", PTDISS_OUT (:,:,:,IBL), PTDISS (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PEDR ", PEDR_OUT (:,:,:,IBL), PEDR (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PTPMF ", PTPMF_OUT (:,:,:,IBL), PTPMF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PDRUS_TURB ", PDRUS_TURB_OUT (:,:,:,IBL), PDRUS_TURB (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PDRVS_TURB ", PDRVS_TURB_OUT (:,:,:,IBL), PDRVS_TURB (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PDRTHLS_TURB", PDRTHLS_TURB_OUT (:,:,:,IBL), PDRTHLS_TURB(:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) - CALL DIFF3 ("PDRRTS_TURB ", PDRRTS_TURB_OUT (:,:,:,IBL), PDRRTS_TURB (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("ZBL_DEPTH ", ZBL_DEPTH_OUT (:,:,IBL) , ZBL_DEPTH (:,:,IBL) , LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("ZSBL_DEPTH ", ZSBL_DEPTH_OUT (:,:,IBL) , ZSBL_DEPTH (:,:,IBL) , LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PTHM ", PTHM_OUT (:,:,:,IBL), PTHM (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PRUS ", PRUS_OUT (:,:,:,IBL), PRUS (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PRVS ", PRVS_OUT (:,:,:,IBL), PRVS (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PRWS ", PRWS_OUT (:,:,:,IBL), PRWS (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PRTHS ", PRTHS_OUT (:,:,:,IBL), PRTHS (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PRTKES_OUT ", PRTKES_OUT_OUT (:,:,:,IBL), PRTKES_OUT (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PSIGS ", PSIGS_OUT (:,:,:,IBL), PSIGS (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("ZWTH ", ZWTH_OUT (:,:,:,IBL), ZWTH (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("ZWRC ", ZWRC_OUT (:,:,:,IBL), ZWRC (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PDP ", PDP_OUT (:,:,:,IBL), PDP (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PTP ", PTP_OUT (:,:,:,IBL), PTP (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PTDIFF ", PTDIFF_OUT (:,:,:,IBL), PTDIFF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PTDISS ", PTDISS_OUT (:,:,:,IBL), PTDISS (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PEDR ", PEDR_OUT (:,:,:,IBL), PEDR (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PTPMF ", PTPMF_OUT (:,:,:,IBL), PTPMF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PDRUS_TURB ", PDRUS_TURB_OUT (:,:,:,IBL), PDRUS_TURB (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PDRVS_TURB ", PDRVS_TURB_OUT (:,:,:,IBL), PDRVS_TURB (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PDRTHLS_TURB", PDRTHLS_TURB_OUT (:,:,:,IBL), PDRTHLS_TURB(:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF ("PDRRTS_TURB ", PDRRTS_TURB_OUT (:,:,:,IBL), PDRRTS_TURB (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) ENDDO ENDIF -- GitLab