Newer
Older
PROGRAM MAIN_TURB
USE XRD_GETOPTIONS
USE GETDATA_TURB_MOD
USE COMPUTE_DIFF
USE MODI_TURB
USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t

RODIER Quentin
committed
USE MODD_IO, ONLY: TFILEDATA
USE MODD_PHYEX, ONLY: PHYEX_t
USE STACK_MOD
USE OMP_LIB
USE YOMHOOK, ONLY : LHOOK, DR_HOOK
USE PARKIND1, ONLY : JPRB, JPIM
USE MODD_LES, ONLY: TLES_t
IMPLICIT NONE
INTEGER :: KLON
INTEGER :: KLEV
INTEGER :: KRR, KRRL, KRRI
INTEGER :: KSV
REAL, ALLOCATABLE :: ZDXX (:,:,:,:)
REAL, ALLOCATABLE :: ZDYY (:,:,:,:)
REAL, ALLOCATABLE :: ZDZZ (:,:,:,:)
REAL, ALLOCATABLE :: ZDZX (:,:,:,:)
REAL, ALLOCATABLE :: ZDZY (:,:,:,:)
REAL, ALLOCATABLE :: ZZZ (:,:,:,:)
REAL, ALLOCATABLE :: ZDIRCOSXW (:,:,:)
REAL, ALLOCATABLE :: ZDIRCOSYW (:,:,:)
REAL, ALLOCATABLE :: ZDIRCOSZW (:,:,:)
REAL, ALLOCATABLE :: ZCOSSLOPE (:,:,:)
REAL, ALLOCATABLE :: ZSINSLOPE (:,:,:)
REAL, ALLOCATABLE :: PRHODJ (:,:,:,:)
REAL, ALLOCATABLE :: PTHVREF (:,:,:,:)
REAL, ALLOCATABLE :: PSFTH (:,:,:)
REAL, ALLOCATABLE :: PSFRV (:,:,:)
REAL, ALLOCATABLE :: PSFU (:,:,:)
REAL, ALLOCATABLE :: PSFV (:,:,:)
REAL, ALLOCATABLE :: PSFSV (:,:,:,:) !(KLON, 1, KSV)
REAL, ALLOCATABLE :: PPABSM (:,:,:,:)
REAL, ALLOCATABLE :: PUM (:,:,:,:)
REAL, ALLOCATABLE :: PVM (:,:,:,:)
REAL, ALLOCATABLE :: PWM (:,:,:,:)
REAL, ALLOCATABLE :: PTKEM (:,:,:,:)
REAL, ALLOCATABLE :: ZSVM (:,:,:,:,:) !(KLON,1,KLEV+2,KSV)
REAL, ALLOCATABLE :: PSRCM (:,:,:,:)
REAL, ALLOCATABLE :: PLENGTHM (:,:,:,:)
REAL, ALLOCATABLE :: PLENGTHH (:,:,:,:)
REAL, ALLOCATABLE :: MFMOIST (:,:,:,:)
REAL, ALLOCATABLE :: ZBL_DEPTH (:,:,:)
REAL, ALLOCATABLE :: ZSBL_DEPTH (:,:,:)
REAL, ALLOCATABLE :: ZCEI (:,:,:,:)
REAL, ALLOCATABLE :: PTHM (:,:,:,:)
REAL, ALLOCATABLE :: ZRM (:,:,:,:,:) !(KLON,1,KLEV+2,KRR)
REAL, ALLOCATABLE :: PRUS (:,:,:,:)
REAL, ALLOCATABLE :: PRVS (:,:,:,:)
REAL, ALLOCATABLE :: PRWS (:,:,:,:)
REAL, ALLOCATABLE :: PRTHS (:,:,:,:)
REAL, ALLOCATABLE :: ZRRS (:,:,:,:,:) !(KLON,1,KLEV+2,KRR)
REAL, ALLOCATABLE :: ZRSVS (:,:,:,:,:) !(KLON,1,KLEV+2,KSV)
REAL, ALLOCATABLE :: PRTKES_OUT (:,:,:,:)
REAL, ALLOCATABLE :: PFLXZTHVMF (:,:,:,:)
REAL, ALLOCATABLE :: PHGRAD (:,:,:,:,:) !(KLON,1,KLEV+2,KGRADIENTS)
REAL, ALLOCATABLE :: PZS (:,:,:)
!OUT
REAL, ALLOCATABLE :: PSIGS (:,:,:,:)
REAL, ALLOCATABLE :: ZWTH (:,:,:,:)
REAL, ALLOCATABLE :: ZWRC (:,:,:,:)
REAL, ALLOCATABLE :: ZWSV (:,:,:,:,:) !(KLON,1,KLEV+2,KSV)
REAL, ALLOCATABLE :: PDP (:,:,:,:)
REAL, ALLOCATABLE :: PTP (:,:,:,:)
REAL, ALLOCATABLE :: PTDIFF (:,:,:,:)
REAL, ALLOCATABLE :: PTDISS (:,:,:,:)
REAL, ALLOCATABLE :: PEDR (:,:,:,:)
REAL, ALLOCATABLE :: PTPMF (:,:,:,:)
REAL, ALLOCATABLE :: PDRUS_TURB (:,:,:,:)
REAL, ALLOCATABLE :: PDRVS_TURB (:,:,:,:)
REAL, ALLOCATABLE :: PDRTHLS_TURB (:,:,:,:)
REAL, ALLOCATABLE :: PDRRTS_TURB (:,:,:,:)
REAL, ALLOCATABLE :: ZDRSVS_TURB (:,:,:,:,:) !(KLON,1,KLEV+2,KSV)
!Expected values
REAL, ALLOCATABLE :: ZBL_DEPTH_OUT (:,:,:)
REAL, ALLOCATABLE :: ZSBL_DEPTH_OUT (:,:,:)
REAL, ALLOCATABLE :: PTHM_OUT (:,:,:,:)
REAL, ALLOCATABLE :: ZRM_OUT (:,:,:,:,:) !(KLON,1,KLEV+2,KRR)
REAL, ALLOCATABLE :: PRUS_OUT (:,:,:,:)
REAL, ALLOCATABLE :: PRVS_OUT (:,:,:,:)
REAL, ALLOCATABLE :: PRWS_OUT (:,:,:,:)
REAL, ALLOCATABLE :: PRTHS_OUT (:,:,:,:)
REAL, ALLOCATABLE :: ZRRS_OUT (:,:,:,:,:) !(KLON,1,KLEV+2,KRR)
REAL, ALLOCATABLE :: ZRSVS_OUT (:,:,:,:,:) !(KLON,1,KLEV+2,KSV)
REAL, ALLOCATABLE :: PRTKES_OUT_OUT (:,:,:,:)
REAL, ALLOCATABLE :: PSIGS_OUT (:,:,:,:)
REAL, ALLOCATABLE :: ZWTH_OUT (:,:,:,:)
REAL, ALLOCATABLE :: ZWRC_OUT (:,:,:,:)
REAL, ALLOCATABLE :: ZWSV_OUT (:,:,:,:,:) !(KLON,1,KLEV+2,KSV)
REAL, ALLOCATABLE :: PDP_OUT (:,:,:,:)
REAL, ALLOCATABLE :: PTP_OUT (:,:,:,:)
REAL, ALLOCATABLE :: PTDIFF_OUT (:,:,:,:)
REAL, ALLOCATABLE :: PTDISS_OUT (:,:,:,:)
REAL, ALLOCATABLE :: PEDR_OUT (:,:,:,:)
REAL, ALLOCATABLE :: PTPMF_OUT (:,:,:,:)
REAL, ALLOCATABLE :: PDRUS_TURB_OUT (:,:,:,:)
REAL, ALLOCATABLE :: PDRVS_TURB_OUT (:,:,:,:)
REAL, ALLOCATABLE :: PDRTHLS_TURB_OUT (:,:,:,:)
REAL, ALLOCATABLE :: PDRRTS_TURB_OUT (:,:,:,:)
REAL, ALLOCATABLE :: ZDRSVS_TURB_OUT (:,:,:,:,:) !(KLON,1,KLEV+2,KSV)
INTEGER :: NPROMA, NGPBLKS, NFLEVG
INTEGER :: IBL, JLON, JLEV
TYPE(DIMPHYEX_t) :: D, D0

RODIER Quentin
committed
TYPE(TFILEDATA) :: TPFILE
TYPE(PHYEX_t) :: PHYEX
LOGICAL :: LLCHECK
LOGICAL :: LLCHECKDIFF
LOGICAL :: LLDIFF
INTEGER :: IBLOCK1, IBLOCK2
INTEGER :: ISTSZ, JBLK1, JBLK2
INTEGER :: NTID, ITID
INTEGER :: JRR
TYPE(TLES_t) :: TLES
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
REAL, ALLOCATABLE :: PSTACK(:,:)
TYPE (STACK) :: YLSTACK
REAL(KIND=8) :: TS,TE
REAL(KIND=8) :: TSC, TEC, TSD, TED, ZTC, ZTD
INTEGER :: ITIME, NTIME
INTEGER :: IRANK, ISIZE
LOGICAL :: LLVERBOSE, LLSTAT, LLBIND
REAL (KIND=JPRB) :: ZHOOK_HANDLE
CHARACTER(LEN=32) :: CLTEXT
CALL INITOPTIONS ()
NGPBLKS = 150
CALL GETOPTION ("--blocks", NGPBLKS)
NPROMA = 32
CALL GETOPTION ("--nproma", NPROMA)
NFLEVG = -1
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)
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
CALL GETDATA_TURB (NPROMA, NGPBLKS, NFLEVG, KRR, KRRL, KRRI, KSV, KLEV, &
!IN and INOUT (allocation and values are needed for the call)
&ZDXX, ZDYY, ZDZZ, ZDZX, ZDZY, ZZZ, &
&ZDIRCOSXW, ZDIRCOSYW, ZDIRCOSZW, ZCOSSLOPE, ZSINSLOPE, &
&PRHODJ, PTHVREF, &
&PSFTH, PSFRV, PSFU, PSFV, PSFSV, &
&PPABSM, PUM, PVM, PWM, PTKEM, ZSVM, PSRCM, &
&PLENGTHM, PLENGTHH, MFMOIST, &
&ZBL_DEPTH, ZSBL_DEPTH, &
&ZCEI, &
&PTHM, ZRM, &
&PRUS, PRVS, PRWS, PRTHS, ZRRS, ZRSVS, PRTKES_OUT, &
&PFLXZTHVMF, &
!OUT only (needed to allocate the array to be passed to the subroutine)
&PSIGS, &
&ZWTH,ZWRC,ZWSV,PDP,PTP,PTDIFF,PTDISS, &
&PEDR,PTPMF, &
&PDRUS_TURB,PDRVS_TURB, &
&PDRTHLS_TURB,PDRRTS_TURB,ZDRSVS_TURB, &
!OUT and INOUT (expected values)
&ZBL_DEPTH_OUT, ZSBL_DEPTH_OUT, &
&PTHM_OUT, ZRM_OUT, &
&PRUS_OUT, PRVS_OUT, PRWS_OUT, PRTHS_OUT, ZRRS_OUT, ZRSVS_OUT, PRTKES_OUT_OUT, &
&PSIGS_OUT, &
&ZWTH_OUT, ZWRC_OUT, ZWSV_OUT, PDP_OUT, PTP_OUT, PTDIFF_OUT, PTDISS_OUT, &
&PEDR_OUT, PTPMF_OUT, &
&PDRUS_TURB_OUT, PDRVS_TURB_OUT, &
&PDRTHLS_TURB_OUT, PDRRTS_TURB_OUT, ZDRSVS_TURB_OUT, LLVERBOSE)
IF (LLVERBOSE) PRINT *, " KLEV = ", KLEV, " KRR = ", KRR
PRINT *, " NPROMA = ", NPROMA, " KLEV = ", KLEV, " NGPBLKS = ", NGPBLKS
CALL INIT_PHYEX(KRR, KRRL, KRRI, KSV, SIZE(PSIGS, 3), PHYEX)
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 = -1
D0%NKT = KLEV
D0%NKA = KLEV
D0%NKU = 1
D0%NKB = KLEV-1
D0%NKE = 2
D0%NKTB = 2
D0%NKTE = KLEV-1
D0%NIBC = 1
D0%NJBC = 1
D0%NIEC = D0%NIE
D0%NJEC = D0%NJT
ISTSZ = NPROMA * 20 * KLEV
ALLOCATE (PSTACK (ISTSZ, NGPBLKS))
TS = OMP_GET_WTIME ()
ZTD = 0.
ZTC = 0.
IF (LHOOK) CALL DR_HOOK ('MAIN',0,ZHOOK_HANDLE)
DO ITIME = 1, NTIME
TSD = OMP_GET_WTIME ()
!!! !directives pas a jour !$acc data &
!!! !directives pas a jour !$acc & copyin (D0, PHYEX, KRR, HFRAC_ICE, HCONDENS, HLAMBDA3, HBUNAME, OSIGMAS, OCND2, LMFCONV, &
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
!!! !directives pas a jour !$acc & ZSIGQSAT, PRHODJ, PEXNREF, PRHODREF, PSIGS, PMFCONV, PPABSM, ZZZ, PCF_MF, PRC_MF, PRI_MF, ZRS, ZICE_CLD_WGT) &
!!! !directives pas a jour !$acc & copy (PRS, PTHS), &
!!! !directives pas a jour !$acc & copyout (PSRCS, PCLDFR, PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF) &
!!! !directives pas a jour !$acc & create (PSTACK)
TSC = OMP_GET_WTIME ()
#ifdef USE_OPENMP
!$OMP PARALLEL PRIVATE (D, ITID, JBLK1, JBLK2)
#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) 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
D%NIBC = JLON
D%NIEC = 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
CALL TURB(PHYEX%CST, PHYEX%CSTURB, PHYEX%MISC%TBUCONF, PHYEX%TURBN, PHYEX%NEBN, D, TLES,&

RODIER Quentin
committed
& PHYEX%MISC%KRR, PHYEX%MISC%KRRL, PHYEX%MISC%KRRI, PHYEX%MISC%HLBCX, PHYEX%MISC%HLBCY, PHYEX%MISC%KGRADIENTS, PHYEX%MISC%KHALO,&

RODIER Quentin
committed
& PHYEX%TURBN%NTURBSPLIT,PHYEX%TURBN%LCLOUDMODIFLM, PHYEX%MISC%KSV, PHYEX%MISC%KSV_LGBEG, PHYEX%MISC%KSV_LGEND, &
& PHYEX%MISC%KSV_LIMA_NR, PHYEX%MISC%KSV_LIMA_NS, PHYEX%MISC%KSV_LIMA_NG, PHYEX%MISC%KSV_LIMA_NH,&
& PHYEX%MISC%O2D, PHYEX%MISC%ONOMIXLG, PHYEX%MISC%OFLAT, PHYEX%MISC%OCOUPLES, PHYEX%MISC%OBLOWSNOW,PHYEX%MISC%OIBM,&
& PHYEX%MISC%OFLYER, PHYEX%MISC%OCOMPUTE_SRC, PHYEX%MISC%PRSNOW, &
& PHYEX%MISC%OOCEAN, PHYEX%MISC%ODEEPOC, PHYEX%MISC%ODIAG_IN_RUN, &

RODIER Quentin
committed
& PHYEX%TURBN%CTURBLEN_CLOUD,PHYEX%MISC%CMICRO, &
& PHYEX%MISC%PTSTEP,PHYEX%MISC%ZTFILE, &
& ZDXX(:,:,:,IBL),ZDYY(:,:,:,IBL),ZDZZ(:,:,:,IBL),ZDZX(:,:,:,IBL),ZDZY(:,:,:,IBL),ZZZ(:,:,:,IBL), &
& ZDIRCOSXW,ZDIRCOSYW,ZDIRCOSZW,ZCOSSLOPE,ZSINSLOPE, &
& PRHODJ(:,:,:,IBL),PTHVREF(:,:,:,IBL), PHGRAD, PZS, &
& PSFTH(:,:,IBL),PSFRV(:,:,IBL),PSFSV(:,:,:,IBL),PSFU(:,:,IBL),PSFV(:,:,IBL), &
& PPABSM(:,:,:,IBL),PUM(:,:,:,IBL),PVM(:,:,:,IBL),PWM(:,:,:,IBL),PTKEM(:,:,:,IBL),ZSVM(:,:,:,:,IBL),PSRCM(:,:,:,IBL), &
& PLENGTHM(:,:,:,IBL),PLENGTHH(:,:,:,IBL),MFMOIST(:,:,:,IBL), &
& ZBL_DEPTH(:,:,IBL),ZSBL_DEPTH(:,:,IBL), &

RODIER Quentin
committed
& ZCEI(:,:,:,IBL),PHYEX%TURBN%XCEI_MIN,PHYEX%TURBN%XCEI_MAX,PHYEX%TURBN%XCOEF_AMPL_SAT, &
& PTHM(:,:,:,IBL),ZRM(:,:,:,:,IBL), &
& PRUS(:,:,:,IBL),PRVS(:,:,:,IBL),PRWS(:,:,:,IBL),PRTHS(:,:,:,IBL),ZRRS(:,:,:,:,IBL),ZRSVS(:,:,:,:,IBL),PRTKES_OUT(:,:,:,IBL), &
& PSIGS(:,:,:,IBL), &
& PFLXZTHVMF(:,:,:,IBL),ZWTH(:,:,:,IBL),ZWRC(:,:,:,IBL),ZWSV(:,:,:,:,IBL),PDP(:,:,:,IBL),PTP(:,:,:,IBL),PTDIFF(:,:,:,IBL),PTDISS(:,:,:,IBL),&
& PHYEX%MISC%YLBUDGET, KBUDGETS=PHYEX%MISC%NBUDGET,PEDR=PEDR(:,:,:,IBL),PTPMF=PTPMF(:,:,:,IBL),&
& PDRUS_TURB=PDRUS_TURB(:,:,:,IBL),PDRVS_TURB=PDRVS_TURB(:,:,:,IBL), &
& PDRTHLS_TURB=PDRTHLS_TURB(:,:,:,IBL),PDRRTS_TURB=PDRRTS_TURB(:,:,:,IBL),PDRSVS_TURB=ZDRSVS_TURB(:,:,:,:,IBL))
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
#ifdef _OPENACC
ENDDO
#endif
ENDDO
#ifdef USE_OPENMP
!$OMP END PARALLEL
#endif
!$acc end parallel loop
TEC = OMP_GET_WTIME ()
!$acc end data
TED = OMP_GET_WTIME ()
ZTC = ZTC + (TEC - TSC)
ZTD = ZTD + (TED - TSD)
ENDDO
IF (LHOOK) CALL DR_HOOK ('MAIN',1,ZHOOK_HANDLE)
TE = OMP_GET_WTIME()
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)
IF (LLCHECK .OR. LLSTAT .OR. LLCHECKDIFF) THEN
DO IBL = IBLOCK1, IBLOCK2
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)
WRITE (CLTEXT, '("ZRRS JRR=",I3.3)') JRR
CALL DIFF3 (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)
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
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)
ENDDO
ENDIF
IF (LLCHECKDIFF) THEN
IF (LLDIFF) THEN
PRINT*, "THERE ARE DIFF SOMEWHERE"
ELSE
PRINT*, "THERE IS NO DIFF AT ALL"
ENDIF
ENDIF
STOP
CONTAINS
SUBROUTINE INIT_PHYEX(KRR, KRRL, KRRI, KSV, KSIZE_PSIGS, PHYEX)
USE MODD_BUDGET, ONLY: TBUCONF_ASSOCIATE, NBUDGET_RI, 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
! -----------------------------------------------------------------------
! DUMMY VARIABLES
INTEGER, INTENT(IN) :: KRR, KRRL, KRRI, KSV, KSIZE_PSIGS
TYPE(PHYEX_t), INTENT(OUT) :: PHYEX
!-----------------------------------------------------------------------
! LOCAL VARIABLES
INTEGER :: IULOUT, JRR
REAL :: ZDZMIN
CHARACTER(LEN=6) :: CPROGRAM
CHARACTER(LEN=4) :: CMICRO, CSCONV, CTURB
REAL :: PTSTEP
! -----------------------------------------------------------------------
IULOUT=20
CPROGRAM='AROME'
ZDZMIN=999.
CMICRO='ICE3'
PTSTEP = 25.0000000000000

RODIER Quentin
committed
TPFILE%NLU=0
!Default values

RODIER Quentin
committed
CALL INI_PHYEX(CPROGRAM, TPFILE, .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%KSV_LGBEG = 0
PHYEX%MISC%KSV_LGEND = 0
PHYEX%MISC%ONOMIXLG=.FALSE.
PHYEX%MISC%KRR = KRR
PHYEX%MISC%KRRL = KRRL
PHYEX%MISC%KRRI = KRRI
PHYEX%MISC%KSV = KSV
PHYEX%MISC%KGRADIENTS =0
PHYEX%MISC%HLBCX(:)='CYCLCYCL'
PHYEX%MISC%HLBCY(:)='CYCLCYCL'

RIETTE Sébastien
committed
PHYEX%MISC%KHALO=1
PHYEX%MISC%CPROGRAM=CPROGRAM
PHYEX%MISC%O2D=.FALSE.
PHYEX%MISC%OFLAT=.FALSE.
PHYEX%MISC%OCOUPLES=.FALSE.
PHYEX%MISC%OBLOWSNOW=.FALSE.
PHYEX%MISC%OCOMPUTE_SRC=KSIZE_PSIGS/=0
PHYEX%MISC%OOCEAN=.FALSE.
PHYEX%MISC%ODEEPOC=.FALSE.
PHYEX%MISC%ZTFILE%LOPENED=.FALSE.
PHYEX%MISC%KSV_LIMA_NR=0
PHYEX%MISC%KSV_LIMA_NS=0
PHYEX%MISC%KSV_LIMA_NG=0
PHYEX%MISC%KSV_LIMA_NH=0
PHYEX%MISC%OIBM=.FALSE.
PHYEX%MISC%PRSNOW=1.0
PHYEX%MISC%ODIAG_IN_RUN=.FALSE.
PHYEX%MISC%CMICRO=CMICRO
!Emulate the namelist reading
PHYEX%NEBN%LSUBG_COND=.TRUE.
PHYEX%TURBN%XLINI=0.1 !This line should not exist to reproduce operational setup but the testprogs reference run
!was done (erroneously) with XLINI=0.1
!Param initialisation

RODIER Quentin
committed
CALL INI_PHYEX(CPROGRAM, TPFILE, .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
PHYEX%MISC%NBUDGET=NBUDGET_RI
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
END PROGRAM