diff --git a/src/arome/conv/convect_chem_transport.F90 b/src/arome/conv/convect_chem_transport.F90 index 85b33c8c16fcdf892fe3c48f713d9848233e53fc..b5030c5b70947c34bde2dfad0ae40d63efa668e1 100644 --- a/src/arome/conv/convect_chem_transport.F90 +++ b/src/arome/conv/convect_chem_transport.F90 @@ -49,8 +49,8 @@ !* 0. DECLARATIONS ! ------------ ! -USE MODD_CST -USE MODD_CONVPAREXT +USE MODD_CST, ONLY : XG +USE MODD_CONVPAREXT, ONLY : JCVEXB, JCVEXT USE MODD_NSV, ONLY : NSV_LGBEG,NSV_LGEND ! IMPLICIT NONE diff --git a/src/arome/conv/convect_closure_adjust_shal.F90 b/src/arome/conv/convect_closure_adjust_shal.F90 index e66a38775bbbd13912950f27d44da197b8b97218..4b5447ab1f8344e31dd1fa0a0bd880a96672ee04 100644 --- a/src/arome/conv/convect_closure_adjust_shal.F90 +++ b/src/arome/conv/convect_closure_adjust_shal.F90 @@ -52,7 +52,7 @@ !* 0. DECLARATIONS ! ------------ ! -USE MODD_CONVPAREXT +USE MODD_CONVPAREXT, ONLY : JCVEXB, JCVEXT ! IMPLICIT NONE ! diff --git a/src/arome/conv/convect_closure_shal.F90 b/src/arome/conv/convect_closure_shal.F90 index d45e04aa76d4157f2595ae220d19b8334ece5bd3..cfae7f68451336695eba5ac7d1de960004aac616 100644 --- a/src/arome/conv/convect_closure_shal.F90 +++ b/src/arome/conv/convect_closure_shal.F90 @@ -76,9 +76,9 @@ !* 0. DECLARATIONS ! ------------ ! -USE MODD_CST -USE MODD_CONVPAR_SHAL -USE MODD_CONVPAREXT +USE MODD_CST, ONLY : XCPD, XRD, XG, XP00, XCPV, XLVTT, XCL, XTT, XCI +USE MODD_CONVPAR_SHAL, ONLY : XSTABT, XSTABC +USE MODD_CONVPAREXT, ONLY : JCVEXB, JCVEXT ! ! IMPLICIT NONE diff --git a/src/arome/conv/convect_closure_thrvlcl.F90 b/src/arome/conv/convect_closure_thrvlcl.F90 index 54e69ad15f385b9ad2cb071e62d92dd6f4bd9dc8..1ad35ec7c6c345fa932d741782be648868b928be 100644 --- a/src/arome/conv/convect_closure_thrvlcl.F90 +++ b/src/arome/conv/convect_closure_thrvlcl.F90 @@ -67,9 +67,8 @@ !* 0. DECLARATIONS ! ------------ ! -USE MODD_CST -USE MODD_CONVPAR -USE MODD_CONVPAREXT +USE MODD_CST, ONLY : XRD, XRV, XCPD, XP00, XTT, XBETAW, XGAMW +USE MODD_CONVPAREXT, ONLY : JCVEXB, JCVEXT ! ! IMPLICIT NONE diff --git a/src/arome/conv/convect_condens.F90 b/src/arome/conv/convect_condens.F90 index 5bfbc0e902914690fa8e0013fe9c315bd20e2b73..1facb675f96a219b48f2be66e2253c170d1ed37e 100644 --- a/src/arome/conv/convect_condens.F90 +++ b/src/arome/conv/convect_condens.F90 @@ -63,8 +63,8 @@ !* 0. DECLARATIONS ! ------------ ! -USE MODD_CST -USE MODD_CONVPAR +USE MODD_CST, ONLY : XALPI, XALPW, XBETAI, XBETAW, XCI, XCL, XCPD, XCPV, XG, XGAMI, XGAMW, XLSTT, XLVTT, XRD, XRV, XTT +USE MODD_CONVPAR, ONLY : XTFRZ1, XTFRZ2 ! ! IMPLICIT NONE diff --git a/src/arome/conv/convect_satmixratio.F90 b/src/arome/conv/convect_satmixratio.F90 index 34da003ce6a54fd4a63fde8cc16bab9646e227f2..0926cd7a39d2e9aec2a4339b9372719a4448a835 100644 --- a/src/arome/conv/convect_satmixratio.F90 +++ b/src/arome/conv/convect_satmixratio.F90 @@ -52,7 +52,7 @@ !* 0. DECLARATIONS ! ------------ ! -USE MODD_CST +USE MODD_CST, ONLY : XALPW, XBETAW, XCI, XCL, XCPD, XCPV, XGAMW, XLSTT, XLVTT, XRD, XRV, XTT ! ! IMPLICIT NONE diff --git a/src/arome/conv/convect_trigger_shal.F90 b/src/arome/conv/convect_trigger_shal.F90 index 7738cad93cda7cd2df77509fbcffd56534e4ead1..9b09758085642eaebcc36435e3148a6a1fe494d9 100644 --- a/src/arome/conv/convect_trigger_shal.F90 +++ b/src/arome/conv/convect_trigger_shal.F90 @@ -80,9 +80,9 @@ !* 0. DECLARATIONS ! ------------ ! -USE MODD_CST -USE MODD_CONVPAR_SHAL -USE MODD_CONVPAREXT +USE MODD_CST, ONLY : XBETAW, XCPD, XG, XGAMW, XP00, XRD, XRV, XTT +USE MODD_CONVPAR_SHAL, ONLY : XATPERT, XAW, XBTPERT, XBW, XCDEPTH, XDTPERT, XNHGAM, XZLCL, XZPBL +USE MODD_CONVPAREXT, ONLY : JCVEXB, JCVEXT ! ! IMPLICIT NONE diff --git a/src/arome/conv/convect_updraft_shal.F90 b/src/arome/conv/convect_updraft_shal.F90 index 360088752c29c722889326e7c7c834ebbf6e4a76..6aa68e00d89dcf117f22e52eeeb1c30fbb0c9cc3 100644 --- a/src/arome/conv/convect_updraft_shal.F90 +++ b/src/arome/conv/convect_updraft_shal.F90 @@ -77,9 +77,9 @@ !* 0. DECLARATIONS ! ------------ ! -USE MODD_CST -USE MODD_CONVPAR_SHAL -USE MODD_CONVPAREXT +USE MODD_CST, ONLY : XCPD, XCPV, XG, XP00, XRD, XRV +USE MODD_CONVPAR_SHAL, ONLY : XCDEPTH, XCDEPTH_D, XCRAD, XENTR, XNHGAM +USE MODD_CONVPAREXT, ONLY : JCVEXB, JCVEXT ! ! IMPLICIT NONE diff --git a/src/arome/conv/ini_convpar.F90 b/src/arome/conv/ini_convpar.F90 index a1be28567acc7120cc53d89f467d4272bb486290..16ab5ca90480685de18d1d9fa21c918f46818019 100644 --- a/src/arome/conv/ini_convpar.F90 +++ b/src/arome/conv/ini_convpar.F90 @@ -42,7 +42,9 @@ !* 0. DECLARATIONS ! ------------ ! -USE MODD_CONVPAR +USE MODD_CONVPAR, ONLY : XA25, XCDEPTH, XCRAD, XENTR, XMELDPTH, XNHGAM, XRCONV, XRHDBC, XSTABC, & +& XSTABT, XTFRZ1, XTFRZ2, XUSRDPTH, XUVDP, XWTRIG, XZLCL, XZPBL + ! IMPLICIT NONE ! diff --git a/src/arome/conv/shallow_convection.F90 b/src/arome/conv/shallow_convection.F90 index 172d00af76037c1eaf26c8ae9b605f38ca4219bb..ba40743d07d5acfa98fb831b4e1111ff2f315773 100644 --- a/src/arome/conv/shallow_convection.F90 +++ b/src/arome/conv/shallow_convection.F90 @@ -94,9 +94,9 @@ !* 0. DECLARATIONS ! ------------ ! -USE MODD_CST -USE MODD_CONVPAREXT -USE MODD_CONVPAR_SHAL +USE MODD_CST, ONLY : XALPW, XBETAW, XCI, XCL, XCPD, XCPV, XG, XGAMW, XLSTT, XLVTT, XP00, XRD, XRV, XTT +USE MODD_CONVPAREXT, ONLY : JCVEXB, JCVEXT +USE MODD_CONVPAR_SHAL, ONLY : LLSMOOTH, XA25, XCTIME_SHAL USE MODD_NSV, ONLY : NSV_LGBEG,NSV_LGEND ! ! diff --git a/src/arome/ext/apl_arome.F90 b/src/arome/ext/apl_arome.F90 index 1af66f4e83aa91846edf543253e899e96bc050f8..71ce44e701918bc98c5a961ccdc4de09fe85e4a2 100644 --- a/src/arome/ext/apl_arome.F90 +++ b/src/arome/ext/apl_arome.F90 @@ -1,47 +1,10 @@ -!OPTION! -pvctl noloopfusion -SUBROUTINE APL_AROME(YDGEOMETRY,YDSURF, YDCFU, YDXFU, YDMODEL, KBL, KGPCOMP, KIDIA , KFDIA , KLON ,& - & KTDIA , KLEV , KSTEP ,& - & KMAXDRAFT, KSGST, KNFRRC, PDT, LDXFUMSE, PINDX, PINDY ,& - & PGEMU,PGELAM,POROG,PGM,PMU0,PMU0LU,PMU0M,PMU0N,PCLON, PSLON,PVO3ABC,PLSM,& - & PAESEA , PAELAN , PAESOO , PAEDES , PAESUL, PAEVOL,& - & PGP2DSDT, PGP2DSPP, & - !--------------------------------------------------------------------- - ! - INPUT A M - & PAPHIM,PAPHIFM,PAPRSM, PAPRSFM, PRDELPM, PDELPM, PTM, PQVM ,& - & PCPM , PRM ,PALPHM , PLNPRM,& - & PQCM , PQIM ,PQRM , PQSM, PQGM, PQHM,& - - & PLIMAM , & - & PTKEM , PEFB1 ,PEFB2 , PEFB3,& - & PSIGM,PSVM,& - & PUM , PVM, PWM, PEDR,& - & PFORCEU,PFORCEV,PFORCET,PFORCEQ,& - !--------------------------------------------------------------------- - ! - INOUT A S - & PGPAR, PEMTD, PEMTU, PTRSO,& - & PGDEOSI, PGUEOSI, PGMU0, PGMU0_MIN, PGMU0_MAX,& - & PGDEOTI, PGDEOTI2, PGUEOTI, PGUEOTI2, PGEOLT, PGEOXT,& - & PGRPROX, PGMIXP, PGFLUXC, PGRSURF,& - & PTURB3D,& - ! - OUT A S - & PQLRAD, PQIRAD, PRH, PCLFS, PSIGS,& - & PTENDT, PTENDR, PTENDU, PTENDV,PTENDW,& - - & PTENDLIMA, & - & PTENDTKE, PTENDEFB1, PTENDEFB2, PTENDEFB3,& - & PTENDEXT,PFRTH, PFRSO,PFRTHDS, PFRSODS, PFRSOPS, PFRSDNI,& - & PFRSOPT, PFRTHC, PFRSOC, & - !--------------------------------------------------------------------- - ! - IN FOR RADIATION IF NO SURFACE SCHEME - & PALBIN,PEMIS,& - ! - INOUT for easy diag - & PEZDIAG,& - ! - INOUT for CFU XFU - & PCLCH,PCLCL,PCLCM,PCLCT,PFPLSL,PFPLSN,PFPLSG,PFPLSH,PSTRTU,PSTRTV,PFCS,PFCLL,& - & PFCLN,PUCLS,PVCLS,PNUCLS,PNVCLS,PTCLS,PQCLS,PHUCLS,PUGST,PVGST,PFEVL,PFEVN, PPBLH,PSPSG,PSPSGR,& - & PSDUR,PDIAGH,PFLASH,PSFORC,PTPWCLS,PDPRECIPS,PDPRECIPS2,PVISICLD,PVISIHYDRO,PMXCLWC,& - ! daand: radflex - & YDPROCSET ,YDDDH) +#ifdef RS6K +@PROCESS NOCHECK +#endif +SUBROUTINE APL_AROME(YDCST, YDMF_PHYS_BASE_STATE, YDMF_PHYS_NEXT_STATE, YDGEOMETRY, YDCPG_BNDS, YDCPG_OPTS, & +& YDCPG_MISC, YDCPG_GPAR, YDCPG_PHY0, YDCPG_PHY9, YDMF_PHYS, YDCPG_DYN0, YDCPG_DYN9, YDMF_PHYS_SURF, & +& YDCPG_SL1, YDVARS, YDGMV, YDSURF, YDCFU, YDXFU, YDMODEL, PGFL, PGP2DSDT, PGMVT1, & +& PGFLT1, PTRAJ_PHYS, YDDDH) !**** *APL_AROME * - CALL OF PHYSICAL PARAMETERISATIONS FOR ALARO/AROME @@ -62,75 +25,30 @@ SUBROUTINE APL_AROME(YDGEOMETRY,YDSURF, YDCFU, YDXFU, YDMODEL, KBL, KGPCOMP, KID ! - NOM DES PARAMETRES DE DIMENSIONNEMENT DE LA PHYSIQUE. ! - DIMENSIONS. -! KBL : NUMERO DE BLOC NPROMA -! KBL : NPROMA-PACKETS NUMBER -! KGPCOMP : NOMBRE TOTAL DE POINTS DE GRILLE SUR LE DOMAINE -! KGPCOMP : TOTAL GRID POINTS NUMBER IN THE DOMAIN -! KIDIA, KFDIA : BORNES BOUCLES HORIZONTALES (IST,IEND DANS CPG). -! KIDIA, KFDIA : START/END OF HORIZONTAL LOOP (IST,IEND IN *CPG*). -! KLON : DIMENSION HORIZONTALE (NPROMA DANS CPG). -! KLON : HORIZONTAL DIMENSION (NPROMA IN *CPG*). -! KTDIA : DEBUT BOUCLE VERTICALE DANS LA PHYSIQUE. -! KTDIA : START OF THE VERTICAL LOOP IN THE PHYSICS (IF SOME LEVELS ARE -! SKIPPED AT THE TOP OF THE MODEL). -! KLEV : FIN BOUCLE VERTICE ET DIMENSION VERTICALE (NFLEVG DANS CPG). -! KLEV : END OF VERTICAL LOOP AND VERTICAL DIMENSION(NFLEVG IN *CPG*). -! KSTEP : TIME STEP NUMBER (starting with zero) ! KMAXDRAFT : MAX NUMBER OF DRAFTS (FOR DIMENSIONNING) ! KSGST : NUMBER OF SUBGRID SURFACE TEMPERATURES AND FLUXES (NTSSG IN *CPG*) ! KNFRRC : FREQUENCY FOR CLEAR SKY RADIATION CALCULATION -! PDT : TIME STEP (in s) +! PDT : TIME STEP (in s) ! LDXFUMSE : T if CDCONF=X in order not to increment surfex timer in that case !----------------------------------------------------------------------- -! PGEMU : SINE OF GEOGRAPHICAL LATITUDE +! YDVARS%GEOMETRY%GEMU%T0 : SINE OF GEOGRAPHICAL LATITUDE ! PGELAM : LONGITUDE ! POROG : g * OROGRAPHY ! PGM : MAP FACTOR (used in ALARO convection only) -! PMU0 : COSINUS LOCAL INSTANTANE DE L'ANGLE ZENITHAL SOLAIRE. -! PMU0LU : COSINUS LOCAL INSTANTANE DE L'ANGLE ZENITHAL LUNAIRE. -! PMU0 : LOCAL COSINE OF INSTANTANEOUS SOLAR ZENITH ANGLE. -! PMU0M : COSINUS LOCAL MOYEN DE L'ANGLE ZENITHAL. -! PMU0M : LOCAL COSINE OF AVERAGED SOLAR ZENITH ANGLE. -! PMU0N : COSINUS LOCAL AU PAS DE TEMPS SUIVANT DE L'ANGLE ZENITHAL SOLAIRE. -! PMU0N : NEXT TIME STEP COSINUS LOCAL INSTANTANE DE L'ANGLE ZENITHAL SOLAIRE. ! PCLON : cosine of geographical longitude. ! PSLON : sine of geographical longitude. -! PVO3ABC : OZONE COEFFICIENTS FOR ARPEGE PROFILES -! PLSM : -ATMOSPHERIC MODEL- LAND-SEA MASK (! MAY BE DIFFERENT FROM -! THE SURFACE ONE) -! PAESEA : MARINE AEROSOLS (IF NVCLIA >= 4) -! PAELAN : CONTINENTAL AEROSOLS (IF NVCLIA >= 4) -! PAESOO : SOOT AEROSOLS (IF NVCLIA >= 4) -! PAEDES : DESERT AEROSOLS (IF NVCLIA >= 4) -! PAESUL : SULFATE AEROSOLS (IF LAEROSUL=.T.) -! PAEVOL : VOLCANO AEROSOLS (IF LAEROVOL=.T.) ! PGP2DSDT : STOCHASTIC PHYSICS PATTERNS ! FIELDS WITH SUBSCRIPT M FOR TIME T-DT IN 3TL OR T IN 2TL -! PAPHIM : GEOPOTENTIAL ON HALF-LEVELS -! PAPHIFM : GEOPOTENTIAL ON FULL-LEVELS -! PAPRSM : PRESSURE ON HALF LEVELS -! PAPRSFM : PRESSURE ON FULL LEVELS. -! PRDELPM : INVERSE OF PDELP ! PDELPM : LAYER THICKNESS IN PRESSURE UNITS ! PTM : TEMPERATURE. -! PQVM : SPECIFIC HUMIDITY OF WATER VAPOR ! PCPM : SPECIFIC HEAT AT CONSTANT PRESSURE FOR AIR ! PRM : GAS CONSTANT FOR AIR -! PALPHM : "alpha" on layers -! PLNPRM : "delta" on layers - -! PQCM : SPECIFIC HUMIDITY OF CLOUD WATER -! PQIM : SPECIFIC HUMIDITY OF ICE -! PQRM : SPECIFIC HUMIDITY OF RAIN -! PQSM : SPECIFIC HUMIDITY OF SNOW -! PQGM : SPECIFIC HUMIDITY OF GRAUPEL -! PQHM : SPECIFIC HUMIDITY OF HAIL + ! PTKEM : TURBULENT KINETIC ENERGY ! PSVM : PASSIVE SCALARS -! PSIGM : SIGMA FOR SUBGRIDCOND ! PUM : ZONAL WIND ! PVM : MERIDIAN WIND ! PWM : VERTICAL VELOCITY (m/s) @@ -138,112 +56,33 @@ SUBROUTINE APL_AROME(YDGEOMETRY,YDSURF, YDCFU, YDXFU, YDMODEL, KBL, KGPCOMP, KID !----------------------------------------------------------------------- ! - INOUT -! PGPAR : BUFFER FOR 2D FIELDS - CONTAINS PRECIP, ALBEDO, EMISS, TS +! PGPAR : BUFFER FOR 2D FIELDS - CONTAINS PRECIP, ALBEDO, EMISS, TS ! : SURFACE FLUXES -! PEMTD : DOWNWARD LONGWAVE EMISSIVITY -! PEMTU : UPWARD LONGWAVE EMISSIVITY -! PTRSO : SHORTWAVE TRANSMISSIVITY ! ACRANEB2 intermittency storage -! PGDEOSI : DESCENDING INCREMENTAL OPTICAL DEPTHS, SOLAR -! PGUEOSI : ASCENDING INCREMENTAL OPTICAL DEPTHS, SOLAR -! PGMU0 : COSINE OF SOLAR ZENITH ANGLE, APPROXIMATE ACTUAL VALUE -! PGMU0_MIN : COSINE OF SOLAR ZENITH ANGLE, MIN VALUE -! PGMU0_MAX : COSINE OF SOLAR ZENITH ANGLE, MAX VALUE -! PGDEOTI : DESCENDING INCREMENTAL OPTICAL DEPTHS, dB/dT(T0) WEIGHTS -! PGDEOTI2 : DESCENDING INCREMENTAL OPTICAL DEPTHS, B WEIGHTS WITH ! LINEAR T_e CORRECTION -! PGUEOTI : ASCENDING INCREMENTAL OPTICAL DEPTHS, dB/dT(T0) WEIGHTS -! PGUEOTI2 : ASCENDING INCREMENTAL OPTICAL DEPTHS, B WEIGHTS WITH ! LINEAR T_e CORRECTION -! PGEOLT : LOCAL OPTICAL DEPTHS, dB/dT(T0) WEIGHTS -! PGEOXT : MAXIMUM OPTICAL DEPTHS FOR EBL-EAL, dB/dT(T0) WEIGHTS -! PGRPROX : CORRECTION TERM FOR ADJACENT EXCHANGES -! PGMIXP : NON-STATISTICAL WEIGHTS FOR BRACKETING -! PGFLUXC : OUT OF BRACKET PART OF CLEARSKY EBL, RESP. EBL-EAL FLUX -! PGRSURF : CORRECTIVE RATIO FOR SURFACE CTS CONTRIBUTION -! PTURB3D : MATRICE DE GRADIENTS HORIZONTAUX !----------------------------------------------------------------------- ! - OUTPUT (SUBSCRIPT S FOR T+DT) -! PCLFS : CLOUD FRACTION -! PQLRAD : SPECIFIC HUMIDITY OF CLOUD WATER FOR RTTOV -! PQIRAD : SPECIFIC HUMIDITY OF ICE FOR RTTOV ! PSIGS : SIGMA FOR SUBGRIDCOND ! PTENDT : TEMPERATURE TENDENCY ! PTENDR : HYDROMETEORE TENDENCIES -! PTENDU : ZONAL WIND TENDENCY -! PTENDV : MERIDIAN WIND TENDENCY ! PTENDW : VERTICAL VELOCITY TENDENCY ! PTENDTKE : TKE TENDENCY ! PTENDEXT : PASSIVE SCALARS TENDENCY -! PFRTH : LONGWAVE RADIATIVE FLUX ! PFRSO : SHORTWAVE RADIATIVE FLUX -! PFRTHDS : LONGWAVE DOWNWARD SURFACE RADIATIVE FLUX -! PFRSOPS : SHORTWAVE DOWNWARD SURFACE RADIATIVE FLUX DIRECT -! PFRSDNI : SHORTWAVE DIRECT NORMAL IRRADIANCE -! PFRSODS : SHORTWAVE DOWNWARD SURFACE RADIATIVE FLUX GLOBAL -! PFRSOPT : SHORTWAVE DOWNWARD TOP RADIATIVE FLUX DIRECT ! - 2D (0:1) -! PFRTHC : LONGWAVE CLEAR SKY NET RADIATIVE FLUX -! PFRSOC : SHORTWAVE CLEAR SKY NET RADIATIVE FLUX -! variables used in input for radiation in case no surface scheme is used +! variables used in input for radiation in case no surface scheme is used -! PALBIN : MODEL SURFACE SHORTWAVE ALBEDO. -! PEMIS : MODEL SURFACE LONGWAVE EMISSIVITY. +! PSIC : MODEL SEA ICE CONCENTRATION ! Part of GFL strcture dedicated to easy diagnostics (to be used as a print...) ! PEZDIAG : MULPITPLE ARRAY TO BE FILLED BY THE USER BY 3D FIELDS ! (NGFL_EZDIAG ONES) ! output for CFU XFU -! PCLCH : HIGH CLOUD COVER (DIAGNOSTIC). -! PCLCL : LOW CLOUD COVER (DIAGNOSTIC). -! PCLCM : MEDIUM CLOUD COVER (DIAGNOSTIC). -! PCLCT : TOTAL CLOUD COVER (DIAGNOSTIC). -! PFPLSL : RESOLVED PRECIPITATION AS RAIN. -! PFPLSN : RESOLVED PRECIPITATION AS SNOW -! PFPLSG : RESOLVED PRECIPITATION AS GRAUPEL -! PFPLSH : RESOLVED PRECIPITATION AS HAIL -! PSTRTU : TURBULENT FLUX OF MOMENTUM "U". -! PSTRTV : TURBULENT FLUX OF MOMENTUM "V". -! PFCS : SENSIBLE HEAT FLUX AT SURFACE LEVEL. -! PFCLL : LATENT HEAT FLUX AT SURFACE LEVEL OVER WATER. -! PFCLN : LATENT HEAT FLUX AT SURFACE LEVEL OVER SNOW. -! PUCLS : SORTIE DIAGNOSTIQUE DU VENT EN X A HUV METEO. -! PUCLS : U-COMPONENT OF WIND AT 10 METERS (DIAGNOSTIC). -! PVCLS : SORTIE DIAGNOSTIQUE DU VENT EN Y A HUV METEO. -! PVCLS : V-COMPONENT OF WIND AT 10 METERS (DIAGNOSTIC). -! PNUCLS : SORTIE DIAGNOSTIQUE DU VENT NEUTRE EN X A HUV METEO. -! PNUCLS : U-COMPONENT OF NEUTRAL WIND AT 10 METERS (DIAGNOSTIC). -! PNVCLS : SORTIE DIAGNOSTIQUE DU VENT NEUTRE EN Y A HUV METEO. -! PNVCLS : V-COMPONENT OF NEUTRAL WIND AT 10 METERS (DIAGNOSTIC). -! PTCLS : SORTIE DIAGNOSTIQUE DE LA TEMPERATURE A HTQ METEO. -! PTCLS : TEMPERATURE AT 2 METERS (DIAGNOSTIC). -! PQCLS : SORTIE DIAGNOSTIQUE DE L'HUMIDITE SPECIFIQUE A HTQ METEO. -! PQCLS : SPECIFIC HUMIDITY AT 2 METERS (DIAGNOSTIC). -! PHUCLS : SORTIE DIAGNOSTIQUE DE L'HUMIDITE RELATIVE A HTQ METEO. -! PHUCLS : RELATIVE HUMIDITY AT 2 METERS (DIAGNOSTIC). -! PUGST : SORTIE DIAGNOSTIQUE DU VENT RAFALE EN X A HUV METEO. -! PUGST : U-COMPONENT OF WIND GUST AT 10 METERS (DIAGNOSTIC). -! PVGST : SORTIE DIAGNOSTIQUE DU VENT RAFALE EN Y A HUV METEO. -! PVGST : V-COMPONENT OF WIND GUST AT 10 METERS (DIAGNOSTIC). -! PFEVL : FLUX DE VAPEUR D'EAU SUR EAU LIQUIDE (OU SOL HUMIDE). -! PFEVL : WATER VAPOUR FLUX OVER LIQUID WATER (OR WET SOIL) -! PFEVN : FLUX DE VAPEUR D'EAU SUR NEIGE (OU GLACE) ET SOL GELE. -! PFEVN : WATER VAPOUR FLUX OVER SNOW (OR ICE) AND FROZEN SOIL. -! PPBLH : PSEUDO-HISTORICAL ARRAY FOR PBL HEIGHT -! PSPSG : SNOW COVER -! PSPSGR : SNOW DENSITY -! PSDUR : SUNSHINE DURATION [s] -! PDIAGH : HAIL DIAGNOSTIC -! PFLASH : LIGHTNING DIAGNOSTICS -! PVISICLD : VISIBILITY DUE TO CLOUD WATER AND CLOUD ICE -! PVISIHYDRO : VISIBILITY DUE TO RAIN AND SNOW AND GRAUPEL -! PMXCLWC : CLOUD WATER LIQUID CONTENT AT HVISI METERS -! PDPRECIPS : PRECIPITATION TYPE -! PDPRECIPS2 : PRECIPITATION TYPE FOR 2NDE PERIOD !----------------------------------------------------------------------- @@ -252,8 +91,8 @@ SUBROUTINE APL_AROME(YDGEOMETRY,YDSURF, YDCFU, YDXFU, YDMODEL, KBL, KGPCOMP, KID ! Method ! ------ -! - convert aladin variables into mesonh variables (level inversion -! and q to r, t to theta) +! - convert aladin variables into mesonh variables (level inversion +! and q to r, t to theta) ! - call mesoNH physics and ECMWF radiation scheme ! - convert mesoNH tendencies to aladin tendencies @@ -265,44 +104,44 @@ SUBROUTINE APL_AROME(YDGEOMETRY,YDSURF, YDCFU, YDXFU, YDMODEL, KBL, KGPCOMP, KID ! externalisation of surface scheme call + small cleaning (20-07-04) Y.Seity ! Modifications ! ------------- -! G. Hello 04-02-06: Add the call of KFB-convection scheme +! G. Hello 04-02-06: Add the call of KFB-convection scheme ! for future use in ALARO -! T.Kovacic 04-05-05: Added ZCVTENDPR_ and ZCVTENDPRS_ +! T.Kovacic 04-05-05: Added ZCVTENDPR_ and ZCVTENDPRS_ ! M.Hamrud 01-Oct-2003 CY28 Cleaning ! F.Bouyssel 04-05-05: New arguments in ACRADIN ! Y. Seity 30-Sept-2005 Add MNH Chemistry scheme ! R. Zaaboul 15-feb-2006 add surface scheme call -! T.Kovacic 2006-03-23: calls to subroutines for budgets +! T.Kovacic 2006-03-23: calls to subroutines for budgets ! and new arguments PFRTH and PFRSO -! Y. Seity 2007-05-07: add CFU and XFU calculations +! Y. Seity 2007-05-07: add CFU and XFU calculations ! and call aro_ground_diag -! S.Ivatek-S 2007-04-17: Over dimensioning of PGPAR by NGPAR+1 just -! (KLON,NGPAR) is used boundary checking bf +! S.Ivatek-S 2007-04-17: Over dimensioning of PGPAR by NGPAR+1 just +! (YDCPG_OPTS%KLON,NGPAR) is used boundary checking bf ! T.Kovacic 2007-03-16: Fourth dim. in APFT -! JJMorcrette, ECMWF, 20080325: dummy arguments for RADACT to allow for +! JJMorcrette, ECMWF, 20080325: dummy arguments for RADACT to allow for ! using a new sulphate climatology in the ECMWF model ! Y. Seity 2008-06-15: correct calculations of PFRTHDS, PFRSODS and PFCLL ! Y. Seity 2008-09-29: phasing Chemistry corrections ! O.Riviere 2008-10-01: introduction of new data flow for DDH in Arome ! Y. Seity 2009-05-03: new version of EDKF and implementation of EDMF -! Y. Seity 2009-10-03: add missed deallocations +! Y. Seity 2009-10-03: add missed deallocations ! S. Riette 2009-03-25: Arguments modification for AROCLDIA to add HTKERAF ! K. Yessad (Jul 2009): remove CDLOCK + some cleanings ! A. Alias 2009-09-01: Sulfate and Volcano aerosols added (call radaer) ! S. Riette 2010-01-19: ZUM__, ZVM__ and ZDEPTH_HEIGHT_ are given -! ARO_GROUND_DIAG in 3D. +! ARO_GROUND_DIAG in 3D. ! Y. Seity 2010-03-09: add PFEVN and PFEVL ! Y. Bouteloup 2010-03-26 : Add PQLRAD et PQIRAD ! Y. Seity : Test TKE > 0. ! Y. Seity : Optimized version of EDKF + diag HCLS ! Y. Seity : 2010-09 Save Ts at the end of apl_arome for ICMSH+0000 -! L. Bengtsson (2010): Introduce cloud diagnostics based on geop. -! height (LWMOCLOUD), AND cloud-overlap assumptions +! L. Bengtsson (2010): Introduce cloud diagnostics based on geop. +! height (LWMOCLOUD), AND cloud-overlap assumptions ! from C. Wittman 2009 (LACPANMX + WMXOV) ! S. Riette: 2010-12 aro_ground_diag interface modified ! Y. Seity: 2010-12 add hail diagnostic ! R. El Khatib 30-Jun-2010 NEC directive noloopfusion to preserve critical regions -! P.Marguinaud 2010-06-29 : KSURFEXCTL flag (disable SURFEX) +! P.Marguinaud 2010-06-29 : KSURFEXCTL flag (disable SURFEX) ! 2010-12 B. Decharme : modify the radiative coupling with surfex (SW per band in ACRADIN and RADHEAT) ! 2011-02 A. Voldoire : add ZAERINDS to CALL RADAER and ACRADIN ! for sulfate indirect effect computation @@ -331,11 +170,13 @@ SUBROUTINE APL_AROME(YDGEOMETRY,YDSURF, YDCFU, YDXFU, YDMODEL, KBL, KGPCOMP, KID ! 2016-09, J. Masek: Proper calculation of sunshine duration in ACRANEB2. ! 2016-10, P. Marguinaud : Port to single precision ! S. Riette 2016-11: Changes in ICE3/ICE4 +! K.I Ivarsson 2018-02 : Some new variables for microphysics ! 2018-09, E. Gleeson: Corrected misplaced arguments in ACRANEB2 call. ! 2019-09-24 J.M. Piriou arguments for convective gusts. ! R. El Khatib 30-Oct-2018 substantial rewrite for optimization and coding standards respect. ! 2018-10, I. Etchevers : add Visibilities ! 2019-01, I. Etchevers, Y. Seity : add Precipitation Type +! 2019-06, W. de Rooy: Modifications for new set-up statistical cloud scheme (LSTATNW) ! 2019-09, J. Masek: Corrected dimensioning of dummy argument PGMU0. ! Modified call to ACRANEB2 (clearsky fluxes). ! 2019-10, I. Etchevers : Visibilities in ACVISIH, AROCLDIA=>ACCLDIA @@ -344,212 +185,91 @@ SUBROUTINE APL_AROME(YDGEOMETRY,YDSURF, YDCFU, YDXFU, YDMODEL, KBL, KGPCOMP, KID ! 2020-10, J. Masek: Modified call to ACCLDIA. ! 2020-12, F. Meier add call to latent heat nudging if LNUDGLH is TRUE ! 2020-12, U. Andrae : Introduce SPP for HARMONIE-AROME -! R. El Khatib 24-Aug-2021 NPROMICRO specific cache-blocking factor for microphysics +! 2021-12, F. Meier add call to windfarm parametrisation if LWINDFARM is TRUE +! R. El Khatib 08-Jul-2022 Contribution to the encapsulation of YOMCST and YOETHF ! End modifications !------------------------------------------------------------------------------- + USE GEOMETRY_MOD , ONLY : GEOMETRY +USE MF_PHYS_TYPE_MOD , ONLY : MF_PHYS_TYPE +USE CPG_TYPE_MOD , ONLY : CPG_MISC_TYPE, CPG_GPAR_TYPE, CPG_SL1_TYPE, CPG_DYN_TYPE, CPG_PHY_TYPE +USE CPG_OPTS_TYPE_MOD , ONLY : CPG_BNDS_TYPE, CPG_OPTS_TYPE +USE MF_PHYS_SURFACE_TYPE_MOD,ONLY : MF_PHYS_SURF_TYPE +USE FIELD_VARIABLES_MOD, ONLY : FIELD_VARIABLES USE SURFACE_FIELDS_MIX , ONLY : TSURF USE YOMXFU , ONLY : TXFU USE YOMCFU , ONLY : TCFU USE TYPE_MODEL , ONLY : MODEL USE PARKIND1 , ONLY : JPIM ,JPRB ,JPRD USE YOMHOOK , ONLY : LHOOK ,DR_HOOK - -! AROME SPECIFIC - - -! OTHERS USE YOESW , ONLY : RSUN2 -USE YOMCST , ONLY : RG ,RCPD ,RD ,RATM ,RTT ,& - & RCW ,RCPV ,RLVTT ,RCS ,RLSTT ,RGAMW ,& - & RBETW ,RALPW ,RGAMS ,RBETS ,RALPS ,RGAMD ,& - & RBETD ,RALPD ,RETV ,RV ,RKAPPA ,RHOUR +USE YOMCST , ONLY : TCST USE YOMLUN , ONLY : NULOUT -USE YOMCT0 , ONLY : LTWOTL, LSFORCS +USE YOMCT0 , ONLY : LTWOTL, LSFORCS, LSLAG, LNHDYN, LAROME USE YOMVERT , ONLY : VP00 USE YOMRIP0 , ONLY : NINDAT USE YOMNUDGLH , ONLY : LNUDGLH, NSTARTNUDGLH, NSTOPNUDGLH, NINTNUDGLH, NTAUNUDGLH, & & RAMPLIFY,RMAXNUDGLH,RMINNUDGLH,LNUDGLHCOMPT,NTIMESPLITNUDGLH USE YOMNSV , ONLY : NSV_CO2 -USE DDH_MIX , ONLY : ADD_FIELD_3D, NEW_ADD_FIELD_3D, TYP_DDH ! for new diag data flow +USE DDH_MIX , ONLY : NEW_ADD_FIELD_3D, NEW_ADD_FIELD_2D,& + & NTOTSVAR, NTOTSURF, NTOTSVFS, TYP_DDH ! for new data flow USE YOMSPSDT , ONLY : YSPPT_CONFIG, YSPPT USE SPP_MOD , ONLY : YSPP_CONFIG, YSPP +USE SPP_MOD_TYPE, ONLY : ALL_SPP_VARS, SET_ALL_SPP, CLEAR_ALL_SPP, APPLY_SPP USE YOMLSFORC , ONLY : LMUSCLFA, NMUSCLFA, REMIS_FORC, RALB_FORC -! daand: radflex USE INTFLEX_MOD, ONLY : LINTFLEX, LRADFLEX,& & TYPE_INTPROC, TYPE_INTPROCSET,& - & NEWINTFIELD, NEWINTPROC + & NEWINTFIELD, NEWINTPROC, NEWINTPROCSET, CLEANINTPROCSET +USE YOMGFL , ONLY : GFL_WKA, GFL_WKA2 USE YOMMP0 , ONLY : MYPROC +USE MF_PHYS_BASE_STATE_TYPE_MOD & + & , ONLY : MF_PHYS_BASE_STATE_TYPE +USE MF_PHYS_NEXT_STATE_TYPE_MOD & + & , ONLY : MF_PHYS_NEXT_STATE_TYPE +USE YOMGMV , ONLY : TGMV +USE SC2PRG_MOD , ONLY : SC2PRG -! -------------------------------------------------------------------------- +USE YOMCVER , ONLY : LVERTFE ,LVFE_GWMPA +USE YOMDYNA , ONLY : LGWADV, L_RDRY_VD +USE YOMSCM , ONLY : LGSCM +USE YOMTRAJ , ONLY : TRAJ_PHYS_TYPE + +! ------------------------------------------------------------------------- IMPLICIT NONE -TYPE(GEOMETRY) ,INTENT(IN) :: YDGEOMETRY -TYPE(TSURF) ,INTENT(INOUT) :: YDSURF -TYPE(TXFU) ,INTENT(INOUT) :: YDXFU -TYPE(TCFU) ,INTENT(INOUT) :: YDCFU -TYPE(MODEL) ,INTENT(INOUT) :: YDMODEL -INTEGER(KIND=JPIM),INTENT(IN) :: KLON -INTEGER(KIND=JPIM),INTENT(IN) :: KLEV -INTEGER(KIND=JPIM),INTENT(IN) :: KBL -INTEGER(KIND=JPIM),INTENT(IN) :: KGPCOMP -INTEGER(KIND=JPIM),INTENT(IN) :: KIDIA -INTEGER(KIND=JPIM),INTENT(IN) :: KFDIA -INTEGER(KIND=JPIM),INTENT(IN) :: KTDIA -INTEGER(KIND=JPIM),INTENT(IN) :: KSTEP -INTEGER(KIND=JPIM),INTENT(IN) :: KMAXDRAFT -INTEGER(KIND=JPIM),INTENT(IN) :: KSGST -INTEGER(KIND=JPIM),INTENT(IN) :: KNFRRC -REAL(KIND=JPRB) ,INTENT(IN) :: PDT -LOGICAL ,INTENT(IN) :: LDXFUMSE -REAL(KIND=JPRB) ,INTENT(IN) :: PINDX(KLON) -REAL(KIND=JPRB) ,INTENT(IN) :: PINDY(KLON) -REAL(KIND=JPRB) ,INTENT(IN) :: PGEMU(KLON) -REAL(KIND=JPRB) ,INTENT(IN) :: PGELAM(KLON) -REAL(KIND=JPRB) ,INTENT(IN) :: PGM(KLON) -REAL(KIND=JPRB) ,INTENT(IN) :: POROG(KLON) -REAL(KIND=JPRB) ,INTENT(IN) :: PMU0(KLON) -REAL(KIND=JPRB) ,INTENT(IN) :: PMU0LU(KLON) -REAL(KIND=JPRB) ,INTENT(IN) :: PMU0M(KLON) -REAL(KIND=JPRB) ,INTENT(IN) :: PMU0N(KLON) -REAL(KIND=JPRB) ,INTENT(IN) :: PCLON(KLON) -REAL(KIND=JPRB) ,INTENT(IN) :: PSLON(KLON) -REAL(KIND=JPRB) ,INTENT(IN) :: PVO3ABC(KLON,3) -REAL(KIND=JPRB) ,INTENT(IN) :: PLSM(KLON) -REAL(KIND=JPRB) ,INTENT(IN) :: PAESEA(KLON) -REAL(KIND=JPRB) ,INTENT(IN) :: PAELAN(KLON) -REAL(KIND=JPRB) ,INTENT(IN) :: PAESOO(KLON) -REAL(KIND=JPRB) ,INTENT(IN) :: PAEDES(KLON) -REAL(KIND=JPRB) ,INTENT(IN) :: PAESUL(KLON) -REAL(KIND=JPRB) ,INTENT(IN) :: PAEVOL(KLON) -REAL(KIND=JPRB) ,INTENT(IN) :: PGP2DSDT(KLON,YSPPT%YGPSDT(1)%NG2D,YSPPT%N2D) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGP2DSPP(KLON,YSPP%N2D) -REAL(KIND=JPRB) ,INTENT(IN) :: PAPHIM(KLON,0:KLEV) -REAL(KIND=JPRB) ,INTENT(IN) :: PAPHIFM(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(IN) :: PAPRSM(KLON,0:KLEV) -REAL(KIND=JPRB) ,INTENT(IN) :: PAPRSFM(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(IN) :: PRDELPM(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(IN) :: PDELPM(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(IN) :: PTM(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(IN) :: PQVM(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(IN) :: PCPM(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(IN) :: PRM(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(IN) :: PALPHM(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(IN) :: PLNPRM(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(IN) :: PQCM(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(IN) :: PQIM(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(IN) :: PQRM(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(IN) :: PQSM(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(IN) :: PQGM(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(IN) :: PQHM(KLON,KLEV) - -REAL(KIND=JPRB) ,INTENT(IN) :: PLIMAM(KLON,KLEV,YDMODEL%YRML_GCONF%YGFL%NLIMA) -REAL(KIND=JPRB) ,INTENT(IN), TARGET :: PTKEM(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(IN) :: PEFB1(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(IN) :: PEFB2(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(IN) :: PEFB3(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(IN) :: PSVM(KLON,KLEV,YDMODEL%YRML_GCONF%YGFL%NGFL_EXT) -REAL(KIND=JPRB) ,INTENT(IN) :: PSIGM(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(IN) :: PUM(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(IN) :: PVM(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(IN) :: PWM(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(IN) :: PFORCEU(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(IN) :: PFORCEV(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(IN) :: PFORCET(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(IN) :: PFORCEQ(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGPAR(KLON,YDMODEL%YRML_PHY_MF%YRPARAR%NGPAR+1) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PEMTD(KLON,0:KLEV) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PEMTU(KLON,0:KLEV) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PTRSO(KLON,0:KLEV) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGDEOSI(KLON,0:KLEV,2) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGUEOSI(KLON,0:KLEV,2) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGMU0(KLON,0:YDMODEL%YRML_PHY_MF%YRPHY%NSORAYFR-1) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGMU0_MIN(KLON) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGMU0_MAX(KLON) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGDEOTI(KLON,0:KLEV) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGDEOTI2(KLON,0:KLEV) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGUEOTI(KLON,0:KLEV) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGUEOTI2(KLON,0:KLEV) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGEOLT(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGEOXT(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGRPROX(KLON,0:KLEV) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGMIXP(KLON,0:KLEV) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGFLUXC(KLON,0:KLEV) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGRSURF(KLON) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PTURB3D(KLON,YDMODEL%YRML_PHY_MF%YRARPHY%NGRADIENTS,KLEV) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PCLFS(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(OUT) :: PQLRAD(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(OUT) :: PEDR(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(OUT) :: PQIRAD(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(OUT) :: PSIGS(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(OUT) :: PTENDT(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(OUT) :: PTENDR(KLON,KLEV,YDMODEL%YRML_PHY_MF%YRPARAR%NRR) -REAL(KIND=JPRB) ,INTENT(OUT) :: PTENDU(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(OUT) :: PTENDV(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(OUT) :: PTENDW(KLON,KLEV) +TYPE(TCST), INTENT(IN) :: YDCST +TYPE (MF_PHYS_BASE_STATE_TYPE), INTENT(IN) :: YDMF_PHYS_BASE_STATE +TYPE (MF_PHYS_NEXT_STATE_TYPE), INTENT(INOUT) :: YDMF_PHYS_NEXT_STATE +TYPE(GEOMETRY), INTENT(IN) :: YDGEOMETRY +TYPE(CPG_BNDS_TYPE), INTENT(IN) :: YDCPG_BNDS +TYPE(CPG_OPTS_TYPE), INTENT(IN) :: YDCPG_OPTS +TYPE(CPG_MISC_TYPE), INTENT(INOUT) :: YDCPG_MISC +TYPE(CPG_GPAR_TYPE), INTENT(INOUT) :: YDCPG_GPAR +TYPE(CPG_PHY_TYPE), INTENT(IN) :: YDCPG_PHY0 +TYPE(CPG_PHY_TYPE), INTENT(IN) :: YDCPG_PHY9 +TYPE(MF_PHYS_TYPE), INTENT(IN) :: YDMF_PHYS +TYPE(CPG_DYN_TYPE), INTENT(IN) :: YDCPG_DYN0 +TYPE(CPG_DYN_TYPE), INTENT(IN) :: YDCPG_DYN9 +TYPE(MF_PHYS_SURF_TYPE), INTENT(INOUT) :: YDMF_PHYS_SURF +TYPE(CPG_SL1_TYPE), INTENT(INOUT) :: YDCPG_SL1 +TYPE(FIELD_VARIABLES), INTENT(INOUT) :: YDVARS +TYPE(TGMV), INTENT(IN) :: YDGMV +TYPE(TSURF), INTENT(IN) :: YDSURF +TYPE(TCFU), INTENT(IN) :: YDCFU +TYPE(TXFU), INTENT(IN) :: YDXFU +TYPE(MODEL), INTENT(IN) :: YDMODEL + -REAL(KIND=JPRB) ,INTENT(OUT) :: PTENDLIMA(KLON,KLEV,YDMODEL%YRML_GCONF%YGFL%NLIMA) -REAL(KIND=JPRB) ,INTENT(OUT) :: PTENDTKE(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(OUT) :: PRH(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PTENDEFB1(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PTENDEFB2(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PTENDEFB3(KLON,KLEV) -REAL(KIND=JPRB) ,INTENT(OUT) :: PTENDEXT(KLON,KLEV,YDMODEL%YRML_GCONF%YGFL%NGFL_EXT) -REAL(KIND=JPRB) ,INTENT(IN) :: PALBIN(KLON) -! daand: radflex; made target -REAL(KIND=JPRB) ,INTENT(INOUT), TARGET :: PFRTH(KLON,0:KLEV,KSGST+1) -REAL(KIND=JPRB) ,INTENT(OUT), TARGET :: PFRSO(KLON,0:KLEV,KSGST+1) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFRTHDS(KLON) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFRSOPS(KLON) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFRSDNI(KLON) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFRSODS(KLON) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFRSOPT(KLON) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFRSOC(KLON,0:1) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFRTHC(KLON,0:1) -REAL(KIND=JPRB) ,INTENT(IN) :: PEMIS(KLON) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PEZDIAG(KLON,KLEV,YDMODEL%YRML_GCONF%YGFL%NGFL_EZDIAG) -REAL(KIND=JPRB) ,INTENT(OUT) :: PCLCH(KLON) -REAL(KIND=JPRB) ,INTENT(OUT) :: PCLCL(KLON) -REAL(KIND=JPRB) ,INTENT(OUT) :: PCLCM(KLON) -REAL(KIND=JPRB) ,INTENT(OUT) :: PCLCT(KLON) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFPLSL(KLON,0:KLEV) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFPLSN(KLON,0:KLEV) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFPLSG(KLON,0:KLEV) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFPLSH(KLON,0:KLEV) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PSTRTU(KLON,0:KLEV) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PSTRTV(KLON,0:KLEV) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFCS(KLON,KSGST+1) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFCLL(KLON,KSGST+1) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFCLN(KLON,KSGST+1) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFEVL(KLON,KSGST+1) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFEVN(KLON,KSGST+1) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PUCLS(KLON) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PVCLS(KLON) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PNUCLS(KLON) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PNVCLS(KLON) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PTCLS(KLON) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PQCLS(KLON) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PHUCLS(KLON) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PUGST(KLON) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PVGST(KLON) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PPBLH(KLON) -REAL(KIND=JPRB) ,INTENT(OUT) :: PSPSG(KLON) -REAL(KIND=JPRB) ,INTENT(OUT) :: PSPSGR(KLON) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PSDUR(KLON) -REAL(KIND=JPRB) ,INTENT(OUT) :: PDIAGH(KLON) -REAL(KIND=JPRB) ,INTENT(OUT) :: PTPWCLS(KLON) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFLASH(KLON) -REAL(KIND=JPRB) ,INTENT(OUT) :: PDPRECIPS(KLON,YDMODEL%YRML_PHY_MF%YRPHY%YRDPRECIPS%NDTPREC) -REAL(KIND=JPRB) ,INTENT(OUT) :: PDPRECIPS2(KLON,YDMODEL%YRML_PHY_MF%YRPHY%YRDPRECIPS%NDTPREC2) -REAL(KIND=JPRB) ,INTENT(OUT) :: PVISICLD(KLON) -REAL(KIND=JPRB) ,INTENT(OUT) :: PVISIHYDRO(KLON) -REAL(KIND=JPRB) ,INTENT(OUT) :: PMXCLWC(KLON) -REAL(KIND=JPRB) ,INTENT(IN) :: PSFORC(KLON,YDMODEL%YRML_PHY_MF%YRPHYDS%NSFORC) -! daand: radflex -TYPE(TYPE_INTPROCSET), INTENT(INOUT) :: YDPROCSET -TYPE(TYP_DDH) ,INTENT(INOUT) :: YDDDH +REAL(KIND=JPRB), INTENT(INOUT) :: PGFL(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG,YDMODEL%YRML_GCONF%YGFL%NDIM) +REAL(KIND=JPRB), INTENT(IN) :: PGP2DSDT(YDCPG_OPTS%KLON,YSPPT%YGPSDT(1)%NG2D,YSPPT%N2D) +REAL(KIND=JPRB), INTENT(INOUT) :: PGMVT1(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG,YDGMV%YT1%NDIM) +REAL(KIND=JPRB), INTENT(INOUT) :: PGFLT1(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG,YDMODEL%YRML_GCONF%YGFL%NDIM1) +TYPE (TRAJ_PHYS_TYPE), INTENT(INOUT) :: PTRAJ_PHYS + +TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH + !* ! ------------------------------------------------------------------ @@ -570,7 +290,7 @@ TYPE(TYP_DDH) ,INTENT(INOUT) :: YDDDH ! Local 3D arrays with extra levels for Meso-NH turbulence scheme : ! - first dimension is KFDIA not KDLON in order to limit array copies ! - suffixed with two underscore to be easily identified -! These arrays are passed in argument as ZXXX__(:,1:KLEV) except for aro_turb_mnh where they are passed as ZXXX__. +! These arrays are passed in argument as ZXXX__(:,1:YDCPG_OPTS%KFLEVG) except for aro_turb_mnh where they are passed as ZXXX__. ! Local 3D arrays with regular number of levels for Meso-NH interfaces : ! - first dimension is KFDIA not KDLON in order to limit array copies due to non-contiguous data. @@ -598,11 +318,11 @@ TYPE(TYP_DDH) ,INTENT(INOUT) :: YDDDH ! because the compiler will be able to use an optimized function to initialize/copy a segment of memory, ! and may be able to address simultaneously several cach lines : ! 1D array : -! Z(KIDIA:KFDIA)=value +! Z(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=value ! 2D arrays : -! DO JLEV=1,KLEV -! ZX(KIDIA:KFDIA,JLEV)=xval -! ZY(KIDIA:KFDIA,JLEV)=yval +! DO JLEV=1,YDCPG_OPTS%KFLEVG +! ZX(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=xval +! ZY(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=yval ! ENDDO ! - if you need the bakup of an array, use a swapp mechanism, as what is done here for instance for @@ -636,232 +356,257 @@ TYPE(TYP_DDH) ,INTENT(INOUT) :: YDDDH ! CALL COMPUTE(ZARG) ! IF (JI > IFIRST) THEN ! ! Add increment -! ZSUM(KIDIA:KFDIA)=ZSUM(KIDIA:KFDIA)+ZINC(KIDIA:KFDIA) +! ZSUM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=ZSUM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)+ZINC(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA) ! ENDIF ! ENDDO !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -REAL(KIND=JPRB) :: ZRHODJM__(KFDIA,0:KLEV+1), ZRHODREFM__(KFDIA,0:KLEV+1), ZPABSM__(KFDIA,0:KLEV+1) -REAL(KIND=JPRB) :: ZUM__(KFDIA,0:KLEV+1), ZVM__(KFDIA,0:KLEV+1), ZTHM__(KFDIA,0:KLEV+1) -REAL(KIND=JPRB) :: ZUS__(KFDIA,0:KLEV+1), ZVS__(KFDIA,0:KLEV+1), ZWS__(KFDIA,0:KLEV+1) -REAL(KIND=JPRB) :: ZTKES_OUT__(KFDIA,0:KLEV+1), ZMF_UP__(KFDIA,0:KLEV+1), ZTHVREFM__(KFDIA,0:KLEV+1) ! thetav de l etat -REAL(KIND=JPRB) :: ZTENDU_TURB__(KFDIA,0:KLEV+1), ZTENDV_TURB__(KFDIA,0:KLEV+1), ZTENDTHL_TURB__(KFDIA,0:KLEV+1) -REAL(KIND=JPRB) :: ZTENDRT_TURB__(KFDIA,0:KLEV+1), ZTKEM__(KFDIA,0:KLEV+1), ZSRCS__(KFDIA,0:KLEV+1) -REAL(KIND=JPRB) :: ZHLC_HRC__(KFDIA,0:KLEV+1), ZHLC_HCF__(KFDIA,0:KLEV+1), & - & ZHLI_HRI__(KFDIA,0:KLEV+1), ZHLI_HCF__(KFDIA,0:KLEV+1) - -REAL(KIND=JPRB) :: ZSIGS__(KFDIA,0:KLEV+1), ZEDR__(KFDIA,0:KLEV+1) +REAL(KIND=JPRB) :: ZRHODJM__(YDCPG_BNDS%KFDIA,0:YDCPG_OPTS%KFLEVG+1), ZRHODREFM__(YDCPG_BNDS%KFDIA,0:YDCPG_OPTS%KFLEVG+1), ZPABSM__(YDCPG_BNDS%KFDIA,0:YDCPG_OPTS%KFLEVG+1) +REAL(KIND=JPRB) :: ZUM__(YDCPG_BNDS%KFDIA,0:YDCPG_OPTS%KFLEVG+1), ZVM__(YDCPG_BNDS%KFDIA,0:YDCPG_OPTS%KFLEVG+1), ZTHM__(YDCPG_BNDS%KFDIA,0:YDCPG_OPTS%KFLEVG+1) +REAL(KIND=JPRB) :: ZUS__(YDCPG_BNDS%KFDIA,0:YDCPG_OPTS%KFLEVG+1), ZVS__(YDCPG_BNDS%KFDIA,0:YDCPG_OPTS%KFLEVG+1), ZWS__(YDCPG_BNDS%KFDIA,0:YDCPG_OPTS%KFLEVG+1) +REAL(KIND=JPRB) :: ZTKES_OUT__(YDCPG_BNDS%KFDIA,0:YDCPG_OPTS%KFLEVG+1), ZMF_UP__(YDCPG_BNDS%KFDIA,0:YDCPG_OPTS%KFLEVG+1), ZTHVREFM__(YDCPG_BNDS%KFDIA,0:YDCPG_OPTS%KFLEVG+1) ! thetav de l etat +REAL(KIND=JPRB) :: ZTENDU_TURB__(YDCPG_BNDS%KFDIA,0:YDCPG_OPTS%KFLEVG+1), ZTENDV_TURB__(YDCPG_BNDS%KFDIA,0:YDCPG_OPTS%KFLEVG+1), ZTENDTHL_TURB__(YDCPG_BNDS%KFDIA,0:YDCPG_OPTS%KFLEVG+1) +REAL(KIND=JPRB) :: ZTENDRT_TURB__(YDCPG_BNDS%KFDIA,0:YDCPG_OPTS%KFLEVG+1), ZTKEM__(YDCPG_BNDS%KFDIA,0:YDCPG_OPTS%KFLEVG+1), ZSRCS__(YDCPG_BNDS%KFDIA,0:YDCPG_OPTS%KFLEVG+1) +REAL(KIND=JPRB) :: ZSIGS__(YDCPG_BNDS%KFDIA,0:YDCPG_OPTS%KFLEVG+1), ZEDR__(YDCPG_BNDS%KFDIA,0:YDCPG_OPTS%KFLEVG+1) ! THE DDH budgets -REAL(KIND=JPRB) :: ZDP__(KFDIA,0:KLEV+1), ZTP__(KFDIA,0:KLEV+1), ZTPMF__(KFDIA,0:KLEV+1) -REAL(KIND=JPRB) :: ZTDIFF__(KFDIA,0:KLEV+1), ZTDISS__(KFDIA,0:KLEV+1) +REAL(KIND=JPRB) :: ZDP__(YDCPG_BNDS%KFDIA,0:YDCPG_OPTS%KFLEVG+1), ZTP__(YDCPG_BNDS%KFDIA,0:YDCPG_OPTS%KFLEVG+1), ZTPMF__(YDCPG_BNDS%KFDIA,0:YDCPG_OPTS%KFLEVG+1) +REAL(KIND=JPRB) :: ZTDIFF__(YDCPG_BNDS%KFDIA,0:YDCPG_OPTS%KFLEVG+1), ZTDISS__(YDCPG_BNDS%KFDIA,0:YDCPG_OPTS%KFLEVG+1) ! length scales for momentum and heat for mnh level definitions in case LHARATU=TRUE -REAL(KIND=JPRB) :: ZLENGTHM__(KFDIA,0:KLEV+1), ZLENGTHH__(KFDIA,0:KLEV+1) +REAL(KIND=JPRB) :: ZLENGTHM__(YDCPG_BNDS%KFDIA,0:YDCPG_OPTS%KFLEVG+1), ZLENGTHH__(YDCPG_BNDS%KFDIA,0:YDCPG_OPTS%KFLEVG+1) REAL(KIND=JPRB), POINTER :: ZTHS__(:,:) ! horizontal gradients and diagnostics -REAL(KIND=JPRB) :: ZTURB3D__(KFDIA,0:KLEV+1,YDMODEL%YRML_PHY_MF%YRARPHY%NGRADIENTS) +REAL(KIND=JPRB) :: ZTURB3D__(YDCPG_BNDS%KFDIA,0:YDCPG_OPTS%KFLEVG+1,YDMODEL%YRML_PHY_MF%YRARPHY%NGRADIENTS) ! WARNING ! Don't use ZTHSWAP__ or ZTHSAVE__ below because they may be swapped ! ! Use only the pointer ZTHS__, and possibly ZTHSIN_ if you need the backup of input data. -REAL(KIND=JPRB), TARGET :: ZTHSWAP__(KFDIA,0:KLEV+1), ZTHSAVE__(KFDIA,0:KLEV+1) -REAL(KIND=JPRB), TARGET :: ZFLXZTHVMF_SUM__(KFDIA,0:KLEV+1), ZWM__(KFDIA,0:KLEV+1) +REAL(KIND=JPRB), TARGET :: ZTHSWAP__(YDCPG_BNDS%KFDIA,0:YDCPG_OPTS%KFLEVG+1), ZTHSAVE__(YDCPG_BNDS%KFDIA,0:YDCPG_OPTS%KFLEVG+1) +REAL(KIND=JPRB), TARGET :: ZFLXZTHVMF_SUM__(YDCPG_BNDS%KFDIA,0:YDCPG_OPTS%KFLEVG+1), ZWM__(YDCPG_BNDS%KFDIA,0:YDCPG_OPTS%KFLEVG+1) ! Updraft characteristics for Meso-NH world (input of ARO_SHALLOW_MF) -REAL(KIND=JPRB) :: ZTHETAL_UP_(KFDIA,KLEV), ZTHETAV_UP_(KFDIA,KLEV), ZZFRAC_UP_(KFDIA,KLEV) -REAL(KIND=JPRB) :: ZRT_UP_(KFDIA,KLEV), ZRC_UP_(KFDIA,KLEV), ZRI_UP_(KFDIA,KLEV) -REAL(KIND=JPRB) :: ZZU_UP_(KFDIA,KLEV), ZZV_UP_(KFDIA,KLEV), ZZW_UP_(KFDIA,KLEV) -REAL(KIND=JPRB) :: ZZRV_UP_(KFDIA,KLEV), ZTKES_(KFDIA,KLEV), ZZZ_(KFDIA,KLEV) -REAL(KIND=JPRB) :: ZDZZ_(KFDIA,KLEV), ZZZ_F_(KFDIA,KLEV), ZDZZ_F_(KFDIA,KLEV) -REAL(KIND=JPRB) :: ZCIT_(KFDIA,KLEV), ZMFM_(KFDIA,KLEV), ZEXNREFM_(KFDIA,KLEV) -REAL(KIND=JPRB) :: ZSIGM_(KFDIA,KLEV), ZNEBMNH_(KFDIA,KLEV), ZEVAP_(KFDIA,KLEV) +REAL(KIND=JPRB) :: ZTHETAL_UP_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZTHETAV_UP_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZZFRAC_UP_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG) +REAL(KIND=JPRB) :: ZRT_UP_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZRC_UP_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZRI_UP_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG) +REAL(KIND=JPRB) :: ZZU_UP_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZZV_UP_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZZW_UP_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG) +REAL(KIND=JPRB) :: ZZRV_UP_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZTKES_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZZZ_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG) +REAL(KIND=JPRB) :: ZDZZ_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZZZ_F_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZDZZ_F_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG) +REAL(KIND=JPRB) :: ZCIT_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZMFM_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZEXNREFM_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG) +REAL(KIND=JPRB) :: ZSIGM_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZNEBMNH_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZEVAP_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG) ! additions for MF scheme (Pergaud et al) -REAL(KIND=JPRB) :: ZSIGMF_(KFDIA,KLEV), ZRC_MF_(KFDIA,KLEV), ZRI_MF_(KFDIA,KLEV) -REAL(KIND=JPRB) :: ZCF_MF_(KFDIA,KLEV), ZAERD_(KFDIA,KLEV), ZCVTENDT_(KFDIA,KLEV) -REAL(KIND=JPRB) :: ZCVTENDRV_(KFDIA,KLEV), ZCVTENDRC_(KFDIA,KLEV), ZCVTENDRI_(KFDIA,KLEV) -REAL(KIND=JPRB) :: ZMFS_(KFDIA,KLEV), ZTHLS_(KFDIA,KLEV), ZRTS_(KFDIA,KLEV) -REAL(KIND=JPRB) :: ZMFUS_(KFDIA,KLEV), ZMFVS_(KFDIA,KLEV), ZDEPTH_HEIGHT_(KFDIA,KLEV) +REAL(KIND=JPRB) :: ZSIGMF_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZRC_MF_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZRI_MF_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG) +REAL(KIND=JPRB) :: ZCF_MF_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZAERD_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZCVTENDT_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG) +REAL(KIND=JPRB) :: ZCVTENDRV_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZCVTENDRC_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZCVTENDRI_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG) +REAL(KIND=JPRB) :: ZMFS_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZTHLS_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZRTS_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG) +REAL(KIND=JPRB) :: ZMFUS_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZMFVS_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZDEPTH_HEIGHT_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG) -REAL(KIND=JPRB), TARGET :: ZFLXZTHVMF_(KFDIA,KLEV) +REAL(KIND=JPRB), TARGET :: ZFLXZTHVMF_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG) REAL(KIND=JPRB), POINTER :: ZARG_FLXZTHVMF_(:,:) +! Subgrid autoconversions +REAL(KIND=JPRB) :: ZHLC_HRC_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZHLC_HCF_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), & + ZHLI_HRI_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZHLI_HCF_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG) + ! WARNING ! Don't use ZRSWAP_ or ZRSAVE_ below because they may be swapped ! ! Use only the pointer ZRS_, and possibly ZRSIN_ if you need the backup of input data. REAL(KIND=JPRB), POINTER :: ZRSIN_(:,:,:), ZRS_(:,:,:) -REAL(KIND=JPRB), TARGET :: ZRSWAP_(KFDIA,KLEV,YDMODEL%YRML_PHY_MF%YRPARAR%NRR) -REAL(KIND=JPRB), TARGET :: ZRSAVE_(KFDIA,KLEV,YDMODEL%YRML_PHY_MF%YRPARAR%NRR) +REAL(KIND=JPRB), TARGET :: ZRSWAP_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG,YDMODEL%YRML_PHY_MF%YRPARAR%NRR) +REAL(KIND=JPRB), TARGET :: ZRSAVE_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG,YDMODEL%YRML_PHY_MF%YRPARAR%NRR) REAL(KIND=JPRB), POINTER :: ZPTRWNU_(:,:), ZTHSIN_(:,:) -REAL(KIND=JPRB), TARGET :: ZWNU_(KFDIA,KLEV) +REAL(KIND=JPRB), TARGET :: ZWNU_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG) ! WARNING ! Don't use ZSVSWAP_ or ZSVSAVE_ below because they may be swapped ! ! Use only the pointer ZSVS_, and possibly ZSVSIN_ if you need the backup of input data. REAL(KIND=JPRB), POINTER :: ZSVSIN_(:,:,:), ZSVS_(:,:,:) -REAL(KIND=JPRB), TARGET :: ZSVSWAP_(KFDIA,KLEV,YDMODEL%YRML_GCONF%YGFL%NGFL_EXT) -REAL(KIND=JPRB), TARGET :: ZSVSAVE_(KFDIA,KLEV,YDMODEL%YRML_GCONF%YGFL%NGFL_EXT) +REAL(KIND=JPRB), TARGET :: ZSVSWAP_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG,YDMODEL%YRML_GCONF%YGFL%NGFL_EXT) +REAL(KIND=JPRB), TARGET :: ZSVSAVE_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG,YDMODEL%YRML_GCONF%YGFL%NGFL_EXT) -REAL(KIND=JPRB) :: ZSVXXX_(KFDIA,KLEV,YDMODEL%YRML_GCONF%YGFL%NGFL_EXT) +REAL(KIND=JPRB) :: ZSVXXX_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG,YDMODEL%YRML_GCONF%YGFL%NGFL_EXT) ! WARNING ! Don't use ZSVMSWAP_ or ZSVMSAVE_ below because they may be swapped ! ! Use only the pointer ZSVM_, and possibly ZSVMIN_ if you need the backup of input data. REAL(KIND=JPRB), POINTER :: ZSVMIN_(:,:,:), ZSVM_(:,:,:) -REAL(KIND=JPRB), TARGET :: ZSVMSWAP_(KFDIA,KLEV,YDMODEL%YRML_GCONF%YGFL%NGFL_EXT) -REAL(KIND=JPRB), TARGET :: ZSVMSAVE_(KFDIA,KLEV,YDMODEL%YRML_GCONF%YGFL%NGFL_EXT) -REAL(KIND=JPRB) :: ZSVMB_(KFDIA,YDMODEL%YRML_GCONF%YGFL%NGFL_EXT) +REAL(KIND=JPRB), TARGET :: ZSVMSWAP_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG,YDMODEL%YRML_GCONF%YGFL%NGFL_EXT) +REAL(KIND=JPRB), TARGET :: ZSVMSAVE_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG,YDMODEL%YRML_GCONF%YGFL%NGFL_EXT) +REAL(KIND=JPRB) :: ZSVMB_(YDCPG_BNDS%KFDIA,YDMODEL%YRML_GCONF%YGFL%NGFL_EXT) ! WARNING ! Don't use ZLIMASWAP_ or ZLIMASAVE_ below because they may be swapped ! ! Use only the pointer ZLIMAS_, and possibly ZLIMASIN_ if you need the backup of input data. REAL(KIND=JPRB), POINTER :: ZLIMAS_(:,:,:), ZLIMASIN_(:,:,:) -REAL(KIND=JPRB), TARGET :: ZLIMASWAP_(KFDIA,KLEV,YDMODEL%YRML_GCONF%YGFL%NLIMA) -REAL(KIND=JPRB), TARGET :: ZLIMASAVE_(KFDIA,KLEV,YDMODEL%YRML_GCONF%YGFL%NLIMA) +REAL(KIND=JPRB), TARGET :: ZLIMASWAP_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG,YDMODEL%YRML_GCONF%YGFL%NLIMA) +REAL(KIND=JPRB), TARGET :: ZLIMASAVE_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG,YDMODEL%YRML_GCONF%YGFL%NLIMA) -REAL(KIND=JPRB) :: ZLIMAM_(KFDIA,KLEV,YDMODEL%YRML_GCONF%YGFL%NLIMA) +REAL(KIND=JPRB) :: ZLIMAM_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG,YDMODEL%YRML_GCONF%YGFL%NLIMA) !INTEGER(KIND=JPIM) :: KSV_TURB !CPtoclean? -!CPtoclean REAL(KIND=JPRB) :: ZTURBM(KLON,KLEV,YDMODEL%YRML_GCONF%YGFL%NGFL_EXT+YDMODEL%YRML_GCONF%YGFL%NLIMA) -!CPtoclean REAL(KIND=JPRB) :: ZTURBS(KLON,KLEV,YDMODEL%YRML_GCONF%YGFL%NGFL_EXT+YDMODEL%YRML_GCONF%YGFL%NLIMA) +!CPtoclean REAL(KIND=JPRB) :: ZTURBM(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG,YDMODEL%YRML_GCONF%YGFL%NGFL_EXT+YDMODEL%YRML_GCONF%YGFL%NLIMA) +!CPtoclean REAL(KIND=JPRB) :: ZTURBS(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG,YDMODEL%YRML_GCONF%YGFL%NGFL_EXT+YDMODEL%YRML_GCONF%YGFL%NLIMA) !not (yet ?) used. REK -!REAL(KIND=JPRB) :: ZSFTURB(KLON,YDMODEL%YRML_GCONF%YGFL%NGFL_EXT+YDMODEL%YRML_GCONF%YGFL%NLIMA) ! surf. flux of SV (=0) -!REAL(KIND=JPRB) :: ZTENDSV_TURB2(KLON,KLEV,YDMODEL%YRML_GCONF%YGFL%NGFL_EXT+YDMODEL%YRML_GCONF%YGFL%NLIMA) ! SV (=0) -REAL(KIND=JPRB) :: ZSFSVLIMA_(KFDIA,YDMODEL%YRML_GCONF%YGFL%NLIMA) ! surf. flux of LIMA vars -REAL(KIND=JPRB) :: ZTENDSV_TURBLIMA_(KFDIA,KLEV,YDMODEL%YRML_GCONF%YGFL%NLIMA) ! LIMA +!REAL(KIND=JPRB) :: ZSFTURB(YDCPG_OPTS%KLON,YDMODEL%YRML_GCONF%YGFL%NGFL_EXT+YDMODEL%YRML_GCONF%YGFL%NLIMA) ! surf. flux of SV (=0) +!REAL(KIND=JPRB) :: ZTENDSV_TURB2(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG,YDMODEL%YRML_GCONF%YGFL%NGFL_EXT+YDMODEL%YRML_GCONF%YGFL%NLIMA) ! SV (=0) +REAL(KIND=JPRB) :: ZSFSVLIMA_(YDCPG_BNDS%KFDIA,YDMODEL%YRML_GCONF%YGFL%NLIMA) ! surf. flux of LIMA vars +REAL(KIND=JPRB) :: ZTENDSV_TURBLIMA_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG,YDMODEL%YRML_GCONF%YGFL%NLIMA) ! LIMA ! For radiation scheme -REAL(KIND=JPRB) :: ZRM_(KFDIA,KLEV,YDMODEL%YRML_PHY_MF%YRPARAR%NRR) -REAL(KIND=JPRB) :: ZPFPR_(KFDIA,KLEV,YDMODEL%YRML_PHY_MF%YRPARAR%NRR) +REAL(KIND=JPRB) :: ZRM_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG,YDMODEL%YRML_PHY_MF%YRPARAR%NRR) +REAL(KIND=JPRB) :: ZPFPR_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG,YDMODEL%YRML_PHY_MF%YRPARAR%NRR) -REAL(KIND=JPRB) :: ZPEZDIAG_(KFDIA,KLEV,YDMODEL%YRML_GCONF%YGFL%NGFL_EZDIAG) +REAL(KIND=JPRB) :: ZPEZDIAG_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG,YDMODEL%YRML_GCONF%YGFL%NGFL_EZDIAG) -REAL(KIND=JPRB) :: ZSFSV_(KFDIA,YDMODEL%YRML_GCONF%YGFL%NGFL_EXT) ! surf. flux of scalars +REAL(KIND=JPRB) :: ZSFSV_(YDCPG_BNDS%KFDIA,YDMODEL%YRML_GCONF%YGFL%NGFL_EXT) ! surf. flux of scalars +REAL(KIND=JPRD) :: ZGEMU_D(YDCPG_OPTS%KLON) ! double precision version of YDVARS%GEOMETRY%GEMU%T0, for RADACT ! Single scattering albedo of dust (points,lev,wvl) : -REAL(KIND=JPRB) :: ZPIZA_DST_(KFDIA,KLEV,YDMODEL%YRML_PHY_MF%YRPARAR%NSWB_MNH) +REAL(KIND=JPRB) :: ZPIZA_DST_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG,YDMODEL%YRML_PHY_MF%YRPARAR%NSWB_MNH) ! Assymetry factor for dust (points,lev,wvl) : -REAL(KIND=JPRB) :: ZCGA_DST_(KFDIA,KLEV,YDMODEL%YRML_PHY_MF%YRPARAR%NSWB_MNH) +REAL(KIND=JPRB) :: ZCGA_DST_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG,YDMODEL%YRML_PHY_MF%YRPARAR%NSWB_MNH) ! tau/tau_{550} dust (points,lev,wvl) : -REAL(KIND=JPRB) :: ZTAUREL_DST_(KFDIA,KLEV,YDMODEL%YRML_PHY_MF%YRPARAR%NSWB_MNH) +REAL(KIND=JPRB) :: ZTAUREL_DST_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG,YDMODEL%YRML_PHY_MF%YRPARAR%NSWB_MNH) ! surface flux of theta and surface flux of vapor ; surface flux of CO2 -REAL(KIND=JPRB) :: ZSFTH_(KFDIA), ZSFRV_(KFDIA), ZSFCO2_(KFDIA) -REAL(KIND=JPRB) :: ZACPRG_(KFDIA), ZINPRG_NOTINCR_(KFDIA), ZINPRG_(KFDIA) -REAL(KIND=JPRB) :: ZACPRR_(KFDIA), ZINPRR_NOTINCR_(KFDIA), ZINPRR_(KFDIA) -REAL(KIND=JPRB) :: ZACPRS_(KFDIA), ZINPRS_NOTINCR_(KFDIA), ZINPRS_(KFDIA) -REAL(KIND=JPRB) :: ZCFBTH_(KFDIA), ZINPRH_NOTINCR_(KFDIA), ZINPRH_(KFDIA) -REAL(KIND=JPRB) :: ZZS_(KFDIA), ZSSO_STDEV_(KFDIA), ZALB_UV_(KIDIA) -REAL(KIND=JPRB) :: ZLAT_(KIDIA), ZLON_(KIDIA), ZZENITH_(KIDIA) -REAL(KIND=JPRB) :: ZGZ0_(KFDIA), ZGZ0H_(KFDIA), ZTOWNS_(KFDIA) -REAL(KIND=JPRB) :: ZCFAQ_(KFDIA), ZCFBQ_(KFDIA), ZCFATH_(KFDIA) -REAL(KIND=JPRB) :: ZCFAU_(KFDIA), ZCFBU_(KFDIA), ZCFBV_(KFDIA) -REAL(KIND=JPRB) :: ZBUDTH_ (KFDIA),ZBUDSO_(KFDIA), ZFCLL_(KFDIA) -REAL(KIND=JPRB) :: ZCD_(KFDIA), ZSEA_(KFDIA), ZTOWN_(KFDIA) -REAL(KIND=JPRB) :: ZZTOP_(KFDIA), ZCVTENDPR_(KFDIA), ZCVTENDPRS_(KFDIA) +REAL(KIND=JPRB) :: ZSFTH_(YDCPG_BNDS%KFDIA), ZSFRV_(YDCPG_BNDS%KFDIA), ZSFCO2_(YDCPG_BNDS%KFDIA) +REAL(KIND=JPRB) :: ZACPRG_(YDCPG_BNDS%KFDIA), ZINPRG_NOTINCR_(YDCPG_BNDS%KFDIA), ZINPRG_(YDCPG_BNDS%KFDIA) +REAL(KIND=JPRB) :: ZACPRR_(YDCPG_BNDS%KFDIA), ZINPRR_NOTINCR_(YDCPG_BNDS%KFDIA), ZINPRR_(YDCPG_BNDS%KFDIA) +REAL(KIND=JPRB) :: ZACPRS_(YDCPG_BNDS%KFDIA), ZINPRS_NOTINCR_(YDCPG_BNDS%KFDIA), ZINPRS_(YDCPG_BNDS%KFDIA) +REAL(KIND=JPRB) :: ZCFBTH_(YDCPG_BNDS%KFDIA), ZINPRH_NOTINCR_(YDCPG_BNDS%KFDIA), ZINPRH_(YDCPG_BNDS%KFDIA) +REAL(KIND=JPRB) :: ZZS_(YDCPG_BNDS%KFDIA), ZSSO_STDEV_(YDCPG_BNDS%KFDIA), ZALB_UV_(YDCPG_BNDS%KIDIA) +REAL(KIND=JPRB) :: ZLAT_(YDCPG_BNDS%KIDIA), ZLON_(YDCPG_BNDS%KIDIA), ZZENITH_(YDCPG_BNDS%KIDIA) +REAL(KIND=JPRB) :: ZGZ0_(YDCPG_BNDS%KFDIA), ZGZ0H_(YDCPG_BNDS%KFDIA), ZTOWNS_(YDCPG_BNDS%KFDIA) +REAL(KIND=JPRB) :: ZCFAQ_(YDCPG_BNDS%KFDIA), ZCFBQ_(YDCPG_BNDS%KFDIA), ZCFATH_(YDCPG_BNDS%KFDIA) +REAL(KIND=JPRB) :: ZCFAU_(YDCPG_BNDS%KFDIA), ZCFBU_(YDCPG_BNDS%KFDIA), ZCFBV_(YDCPG_BNDS%KFDIA) +REAL(KIND=JPRB) :: ZBUDTH_ (YDCPG_BNDS%KFDIA),ZBUDSO_(YDCPG_BNDS%KFDIA), ZFCLL_(YDCPG_BNDS%KFDIA) +REAL(KIND=JPRB) :: ZCD_(YDCPG_BNDS%KFDIA), ZSEA_(YDCPG_BNDS%KFDIA), ZTOWN_(YDCPG_BNDS%KFDIA) +REAL(KIND=JPRB) :: ZZTOP_(YDCPG_BNDS%KFDIA), ZCVTENDPR_(YDCPG_BNDS%KFDIA), ZCVTENDPRS_(YDCPG_BNDS%KFDIA) ! surface flux of x and y component of wind. are they really necessary ? REK -REAL(KIND=JPRB) :: ZSFU_(KFDIA), ZSFV_(KFDIA) +REAL(KIND=JPRB) :: ZSFU_(YDCPG_BNDS%KFDIA), ZSFV_(YDCPG_BNDS%KFDIA) +! local areas for OCND2 option: +! ZICLDFR = ice cloud fraction , ZWCLDFR = water or mixed-phase cloud fraction, +! ZSSIO = Super-saturation with respect to ice in ZICLDFR , +! ZSSIU = Sub-saturation with respect to ice outside ZICLDFR, +! ZIFR = variable used for calulation of subgridscale ice +! Meso-NH world +REAL(KIND=JPRB) :: ZICLDFR_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZWCLDFR_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG) +REAL(KIND=JPRB) :: ZSSIO_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZSSIU_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZIFR_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG) ! Arpege-style dimensionning : ! -------------------------- !Variables used in case LHARATU=TRUE ! length scales for momentum and heat and TKE -REAL(KIND=JPRB) :: ZLENGTH_M(KLON,KLEV),ZLENGTH_H(KLON,KLEV) -REAL(KIND=JPRB) :: ZTKEEDMF(KLON,KLEV) -REAL(KIND=JPRB) :: ZTKEEDMFS(KLON,KLEV) - -REAL(KIND=JPRB) :: ZEMIS (KLON) -REAL(KIND=JPRB) :: ZQICE(KLON,KLEV), ZQLIQ(KLON,KLEV) +REAL(KIND=JPRB) :: ZLENGTH_M(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG),ZLENGTH_H(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) +REAL(KIND=JPRB) :: ZTKEEDMF(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) +REAL(KIND=JPRB) :: ZTKEEDMFS(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) -REAL(KIND=JPRB) :: ZAER(KLON,KLEV,6) -REAL(KIND=JPRB) :: ZAERINDS(KLON,KLEV) +REAL(KIND=JPRB) :: ZEMIS (YDCPG_OPTS%KLON) +REAL(KIND=JPRB) :: ZTMP2(YDCPG_OPTS%KLON,0:YDCPG_OPTS%KFLEVG),ZTMP(YDCPG_OPTS%KLON) +REAL(KIND=JPRB) :: ZQICE(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG), ZQLIQ(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) -REAL(KIND=JPRB) :: ZQSAT(KLON,KLEV) +REAL(KIND=JPRB) :: ZAER(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG,6) +REAL(KIND=JPRB) :: ZAERINDS(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) +REAL(KIND=JPRB) :: ZRAER(YDCPG_OPTS%KLON,6,YDCPG_OPTS%KFLEVG) +REAL(KIND=JPRB) :: ZAERO(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG,12) -REAL(KIND=JPRB) :: ZFRSOFS(KLON) -REAL(KIND=JPRB) :: ZLH(KLON,KLEV), ZLSCPE(KLON,KLEV), ZGEOSLC(KLON,KLEV) -REAL(KIND=JPRB) :: ZQDM(KLON,KLEV), ZQV(KLON,KLEV) -REAL(KIND=JPRB) :: ZQCO2(KLON,KLEV) -REAL(KIND=JPRB), TARGET :: ZTKEM4SLDDH(KLON,KLEV) -REAL(KIND=JPRB), POINTER :: ZTKEM(:,:) -REAL(KIND=JPRB) :: ZQW(KLON,KLEV), ZTW(KLON,KLEV) -REAL(KIND=JPRB) :: ZTENT(KLON,KLEV) -REAL(KIND=JPRB) :: ZTENDT(KLON,KLEV) ! array to save heating profile for LHN -REAL(KIND=JPRB) :: ZMAXTEND,ZMINTEND -REAL(KIND=JPRB) :: ZDZZ(KLON,KLEV) -REAL(KIND=JPRB) :: ZTPW(KLON,KLEV) +REAL(KIND=JPRB) :: ZQSAT(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) -! POUR GROUND -REAL(KIND=JPRB) :: ZZS_FSWDIR(KLON,YDMODEL%YRML_PHY_RAD%YRERAD%NSW), ZZS_FSWDIF(KLON,YDMODEL%YRML_PHY_RAD%YRERAD%NSW) -REAL(KIND=JPRB) :: ZTRSODIR (KLON,YDMODEL%YRML_PHY_RAD%YRERAD%NSW), ZTRSODIF (KLON,YDMODEL%YRML_PHY_RAD%YRERAD%NSW) +REAL(KIND=JPRB) :: ZFRSOFS(YDCPG_OPTS%KLON) +REAL(KIND=JPRB) :: ZLH(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG), ZLSCPE(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG), ZGEOSLC(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) +REAL(KIND=JPRB) :: ZQDM(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG), ZQV(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) -REAL(KIND=JPRB) :: ZTRSOD(KLON) -REAL(KIND=JPRB) :: ZSUDU(KLON), ZSDUR(KLON), ZDSRP(KLON) -REAL(KIND=JPRB) :: ZCEMTR(KLON,2), ZCTRSO(KLON,2) +REAL(KIND=JPRB) :: ZQCO2(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG), ZQCH4(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) +REAL(KIND=JPRB) :: ZQN2O(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG), ZQNO2(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG), ZQC11(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) +REAL(KIND=JPRB) :: ZQC12(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG), ZQC22(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG), ZQCL4(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) +REAL(KIND=JPRB) :: ZCHTIX(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG+1), ZCAPH(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG+1), ZTH(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG+1) +REAL(KIND=JPRB) :: ZDUM(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG), ZGELAM(YDCPG_OPTS%KLON) +REAL(KIND=JPRB), TARGET :: ZTKEM4SLDDH(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) -REAL(KIND=JPRB) :: ZALBD(KLON,YDMODEL%YRML_PHY_RAD%YRERAD%NSW), ZALBP(KLON,YDMODEL%YRML_PHY_RAD%YRERAD%NSW) -REAL(KIND=JPRB) :: ZALBD1(KLON), ZALBP1(KLON) -REAL(KIND=JPRB) :: ZAPHIM(KLON,0:KLEV), ZAPHIFM(KLON,KLEV) +REAL(KIND=JPRB), POINTER :: ZTKEM(:,:) +REAL(KIND=JPRB) :: ZQW(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG), ZTW(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) -REAL(KIND=JPRB) :: ZTM(KLON,KLEV), ZQVM(KLON,KLEV), ZQIM(KLON,KLEV) -REAL(KIND=JPRB) :: ZQCM(KLON,KLEV),ZQHM(KLON,KLEV), ZQHGM(KLON,KLEV) -REAL(KIND=JPRB) :: ZQRM(KLON,KLEV), ZQSM(KLON,KLEV), ZQGM(KLON,KLEV) -REAL(KIND=JPRB) :: ZUPGENL(KLON,KLEV) -REAL(KIND=JPRB) :: ZUPGENN(KLON,KLEV) -REAL(KIND=JPRB) :: ZCLFR(KLON) +REAL(KIND=JPRB) :: ZTENT(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) +REAL(KIND=JPRB) :: ZTENDTT(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) ! array to save heating profile for LHN +REAL(KIND=JPRB) :: ZMAXTEND,ZMINTEND +REAL(KIND=JPRB) :: ZDZZ(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) +REAL(KIND=JPRB) :: ZTPW(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) -REAL(KIND=JPRB) :: ZCPM(KLON,KLEV), ZRHM(KLON,KLEV) +! POUR GROUND +REAL(KIND=JPRB) :: ZZS_FSWDIR(YDCPG_OPTS%KLON,YDMODEL%YRML_PHY_RAD%YRERAD%NSW), ZZS_FSWDIF(YDCPG_OPTS%KLON,YDMODEL%YRML_PHY_RAD%YRERAD%NSW) +REAL(KIND=JPRB) :: ZTRSODIR (YDCPG_OPTS%KLON,YDMODEL%YRML_PHY_RAD%YRERAD%NSW), ZTRSODIF (YDCPG_OPTS%KLON,YDMODEL%YRML_PHY_RAD%YRERAD%NSW) +REAL(KIND=JPRB) :: ZTP2(YDCPG_OPTS%KLON), ZWS2(YDCPG_OPTS%KLON), ZWP2(YDCPG_OPTS%KLON), ZWSI2(YDCPG_OPTS%KLON), ZWPI2(YDCPG_OPTS%KLON) +REAL(KIND=JPRB) :: ZWR2(YDCPG_OPTS%KLON), ZSNA2(YDCPG_OPTS%KLON) +REAL(KIND=JPRB) :: ZTRSOD(YDCPG_OPTS%KLON) +REAL(KIND=JPRB) :: ZSUDU(YDCPG_OPTS%KLON), ZSDUR(YDCPG_OPTS%KLON), ZDSRP(YDCPG_OPTS%KLON) +REAL(KIND=JPRB) :: ZCEMTR(YDCPG_OPTS%KLON,2), ZCTRSO(YDCPG_OPTS%KLON,2) + +REAL(KIND=JPRB) :: ZALBD(YDCPG_OPTS%KLON,YDMODEL%YRML_PHY_RAD%YRERAD%NSW), ZALBP(YDCPG_OPTS%KLON,YDMODEL%YRML_PHY_RAD%YRERAD%NSW) +REAL(KIND=JPRB) :: ZALBD1(YDCPG_OPTS%KLON), ZALBP1(YDCPG_OPTS%KLON) +REAL(KIND=JPRB) :: ZAPHIM(YDCPG_OPTS%KLON,0:YDCPG_OPTS%KFLEVG), ZAPHIFM(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) + +REAL(KIND=JPRB) :: ZTM(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG), ZQVM(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG), ZQIM(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) +REAL(KIND=JPRB) :: ZQCM(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG),ZQHM(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG), ZQHGM(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) +REAL(KIND=JPRB) :: ZQRM(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG), ZQSM(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG), ZQGM(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) +REAL(KIND=JPRB) :: ZUPGENL(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) +REAL(KIND=JPRB) :: ZUPGENN(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) +REAL(KIND=JPRB) :: ZCLFR(YDCPG_OPTS%KLON) + +REAL(KIND=JPRB) :: ZCPM(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG), ZRHM(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) ! Variables concerning updraft rain/snow for EDMF -REAL(KIND=JPRB) :: ZTENDTUP(KLON,KLEV), ZTENDQVUP(KLON,KLEV) +REAL(KIND=JPRB) :: ZTENDTUP(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG), ZTENDQVUP(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) ! specific to new data flow for diagnostics -REAL(KIND=JPRB) :: ZTENDTBAK(KLON,KLEV), ZTENDRBAK(KLON,KLEV,YDMODEL%YRML_PHY_MF%YRPARAR%NRR) -REAL(KIND=JPRB) :: ZTMPAF(KLON,KLEV) +REAL(KIND=JPRB) :: ZTENDTBAK(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG), ZTENDRBAK(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG,YDMODEL%YRML_PHY_MF%YRPARAR%NRR) +REAL(KIND=JPRB) :: ZTMPAF(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) ! daand: radflex -REAL(KIND=JPRB) :: ZFPR(KLON,0:KLEV,YDMODEL%YRML_PHY_MF%YRPARAR%NRR) +REAL(KIND=JPRB) :: ZFPR(YDCPG_OPTS%KLON,0:YDCPG_OPTS%KFLEVG,YDMODEL%YRML_PHY_MF%YRPARAR%NRR) ! Target should not be necessary. REK -REAL(KIND=JPRB), TARGET :: ZCON1(KLON,KLEV) -REAL(KIND=JPRB), TARGET :: ZCON2(KLON,KLEV) -REAL(KIND=JPRB), TARGET :: ZCON3(KLON,KLEV) +REAL(KIND=JPRB), TARGET :: ZCON1(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) +REAL(KIND=JPRB), TARGET :: ZCON2(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) +REAL(KIND=JPRB), TARGET :: ZCON3(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) ! Ajout pour MF Dual Scheme (KNMI et al) ! Updraft characteristics in Arpege/IFS world -REAL(KIND=JPRB) :: ZMF_UP(KLON,0:KLEV,KMAXDRAFT) -REAL(KIND=JPRB) :: ZTHETAL_UP(KLON,0:KLEV,KMAXDRAFT) -REAL(KIND=JPRB) :: ZQT_UP(KLON,0:KLEV,KMAXDRAFT) -REAL(KIND=JPRB) :: ZTHTV_UP(KLON,0:KLEV,KMAXDRAFT) -REAL(KIND=JPRB) :: ZQC_UP(KLON,0:KLEV,KMAXDRAFT) -REAL(KIND=JPRB) :: ZQI_UP(KLON,0:KLEV,KMAXDRAFT) -REAL(KIND=JPRB) :: ZU_UP(KLON,0:KLEV,KMAXDRAFT) -REAL(KIND=JPRB) :: ZV_UP(KLON,0:KLEV,KMAXDRAFT) -REAL(KIND=JPRB) :: ZTSURF(KLON), ZTN(KLON), ZQS(KLON) +REAL(KIND=JPRB) :: ZMF_UP(YDCPG_OPTS%KLON,0:YDCPG_OPTS%KFLEVG,YDCPG_OPTS%KMAXDRAFT) +REAL(KIND=JPRB) :: ZTHETAL_UP(YDCPG_OPTS%KLON,0:YDCPG_OPTS%KFLEVG,YDCPG_OPTS%KMAXDRAFT) +REAL(KIND=JPRB) :: ZQT_UP(YDCPG_OPTS%KLON,0:YDCPG_OPTS%KFLEVG,YDCPG_OPTS%KMAXDRAFT) +REAL(KIND=JPRB) :: ZTHTV_UP(YDCPG_OPTS%KLON,0:YDCPG_OPTS%KFLEVG,YDCPG_OPTS%KMAXDRAFT) +REAL(KIND=JPRB) :: ZQC_UP(YDCPG_OPTS%KLON,0:YDCPG_OPTS%KFLEVG,YDCPG_OPTS%KMAXDRAFT) +REAL(KIND=JPRB) :: ZQI_UP(YDCPG_OPTS%KLON,0:YDCPG_OPTS%KFLEVG,YDCPG_OPTS%KMAXDRAFT) +REAL(KIND=JPRB) :: ZU_UP(YDCPG_OPTS%KLON,0:YDCPG_OPTS%KFLEVG,YDCPG_OPTS%KMAXDRAFT) +REAL(KIND=JPRB) :: ZV_UP(YDCPG_OPTS%KLON,0:YDCPG_OPTS%KFLEVG,YDCPG_OPTS%KMAXDRAFT) +REAL(KIND=JPRB) :: ZTSURF(YDCPG_OPTS%KLON), ZTN(YDCPG_OPTS%KLON), ZQS(YDCPG_OPTS%KLON) +REAL(KIND=JPRB) :: ZZEXNREFM(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG), ZZWCLDFR(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) -REAL(KIND=JPRB) :: ZFRSOLU(KLON), ZFRSODS(KLON) -REAL(KIND=JPRB) :: ZFSDNN(KLON), ZFSDNV(KLON) +REAL(KIND=JPRB) :: ZFRSOLU(YDCPG_OPTS%KLON), ZFRSODS(YDCPG_OPTS%KLON) +REAL(KIND=JPRB) :: ZFSDNN(YDCPG_OPTS%KLON), ZFSDNV(YDCPG_OPTS%KLON) -REAL(KIND=JPRB) :: ZSURFPREP(KLON), ZSURFSNOW(KLON) +REAL(KIND=JPRB) :: ZSURFPREP(YDCPG_OPTS%KLON), ZSURFSNOW(YDCPG_OPTS%KLON) -REAL(KIND=JPRB) :: ZQO3(KLON,0:KLEV) +REAL(KIND=JPRB) :: ZQO3(YDCPG_OPTS%KLON,0:YDCPG_OPTS%KFLEVG) -REAL(KIND=JPRB) :: ZZS_FTH_(KLON), ZZS_FRV_(KLON), ZZS_FU_(KLON), ZZS_FV_(KLON) +REAL(KIND=JPRB) :: ZZS_FTH_(YDCPG_OPTS%KLON), ZZS_FRV_(YDCPG_OPTS%KLON), ZZS_FU_(YDCPG_OPTS%KLON), ZZS_FV_(YDCPG_OPTS%KLON) ! Surface forcing arrays for MUSC -REAL(KIND=JPRB) :: ZRHODREFM(KLON), ZTHETAS(KLON) +REAL(KIND=JPRB) :: ZRHODREFM(YDCPG_OPTS%KLON), ZTHETAS(YDCPG_OPTS%KLON) ! ACRANEB2 local variables -REAL(KIND=JPRB) :: ZNEB0 (KLON,KLEV) ! protected cloud fractions -REAL(KIND=JPRB) :: ZCLCT_RAD(KLON) ! total cloud cover for radiation -REAL(KIND=JPRB) :: ZDECRD (KLON) ! decorrelation depth +REAL(KIND=JPRB) :: ZNEB0 (YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) ! protected cloud fractions +REAL(KIND=JPRB) :: ZCLCT_RAD(YDCPG_OPTS%KLON) ! total cloud cover for radiation +REAL(KIND=JPRB) :: ZDECRD (YDCPG_OPTS%KLON) ! decorrelation depth ! Stochastic physics pattern & dummy tendencies for calling sppten ! Bof. REK -REAL(KIND=JPRB) :: ZDUMMY(KLON,KLEV) -REAL(KIND=JPRB) :: ZDUMMY1(KLON) +REAL(KIND=JPRB) :: ZMULNOISE(YDCPG_OPTS%KLON,1) +REAL(KIND=JPRB) :: ZDUMMY(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) +REAL(KIND=JPRB) :: ZDUMMY1(YDCPG_OPTS%KLON) +REAL(KIND=JPRB) :: PTENDENCYU(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG,1),PTENDENCYV(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG,1) +REAL(KIND=JPRB) :: PTENDENCYT(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG,1),PTENDENCYQ(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG,1) -REAL(KIND=JPRB) :: ZROZ(KLON,KLEV) +REAL(KIND=JPRB) :: ZROZ(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) ! Can we remove ? REK REAL(KIND=JPRB) :: ZEPSM(0,0,0) ! Dissipation of TKE (eps) at time t-dt @@ -874,17 +619,17 @@ INTEGER(KIND=JPIM) :: IJN ! max. number of day/night slices within NRPOMA INTEGER(KIND=JPIM) :: IKL !ordering of vert levels 1:MNH -1:AROME INTEGER(KIND=JPIM) :: IOFF_MFSHAL, IEZDIAG_CHEM INTEGER(KIND=JPIM) :: IKA,IKB,IKU,IKT,IKTE,IKTB ! vertical points as in mpa -INTEGER(KIND=JPIM) :: JSG, JK, JR, JSW +INTEGER(KIND=JPIM) :: JSG, JK, JR, JSW, JAE INTEGER(KIND=JPIM) :: IDRAFT,JDRAFT,INDRAFT INTEGER(KIND=JPIM) :: ISURFEX -INTEGER(KIND=JPIM) :: IDAY,IYEAR,IMONTH +INTEGER(KIND=JPIM) :: IDAY,IYEAR,IMONTH,IAERO INTEGER(KIND=JPIM) :: INIT0 ! Kind of safety/debugging initialization : ! 0 = initialize to HUGE (debugging) ! 1 = initialize to realistic value (discouraged) ! -1 = no initialization (optimized code) - this is the default. -INTEGER(KIND=JPIM) :: ICLPH(KLON) !PBL top level +INTEGER(KIND=JPIM) :: ICLPH(YDCPG_OPTS%KLON) !PBL top level INTEGER(KIND=JPIM) :: JLHSTEP,ISTEP ! Real @@ -892,21 +637,21 @@ REAL(KIND=JPRB) :: ZRHO REAL(KIND=JPRB) :: ZAEO, ZAEN, ZSALBCOR REAL(KIND=JPRB) :: ZDT, ZDT2, ZINVDT, ZINVG, ZRSCP, ZINVATM, Z_WMAX, Z_WMIN ! pas de temps pour la surface externalise -REAL(KIND=JPRB) :: ZDTMSE,ZRHGMT,ZSTATI +REAL(KIND=JPRB) :: ZDTMSE,ZRHGMT,ZSTATI,ZADTMS REAL(KIND=JPRB) :: ZDELTA REAL(KIND=JPRB) :: ZEPSNEB ! default values for initialization : REAL(KIND=JPRB) :: ZVALUE, ZVALUE_ONE, ZVALUE_T, ZVALUE_P, ZVALUE_L, ZVALUE_EPSILON -REAL(KIND=JPRB) :: ZVETAH(0:KLEV) +REAL(KIND=JPRB) :: ZVETAH(0:YDCPG_OPTS%KFLEVG) ! Boolean LOGICAL :: LLMSE, LLMSE_PARAM, LLMSE_DIAG LOGICAL :: LLAROME LOGICAL :: LLRAD LOGICAL :: LLSWAP_THS, LLSWAP_RS, LLSWAP_SVS, LLSWAP_SVM, LLSWAP_LIMAS ! logical to swap or not pointers in and out -LOGICAL :: LLHN(KLON,KLEV) +LOGICAL :: LLHN(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) LOGICAL :: LNUDGLHNREAD ! Characters @@ -916,7 +661,7 @@ CHARACTER(LEN=2),DIMENSION(7):: CLVARNAME=(/"QV","QL","QR","QI","QS","QG","QH"/) ! daand: radflex REAL(KIND=JPRB), POINTER :: ZFRSO(:,:), ZFRTH(:,:) TYPE(TYPE_INTPROC), POINTER :: YLRADPROC -REAL(KIND=JPRB) :: ZCAPE(KLON), ZDCAPE(KLON) +REAL(KIND=JPRB) :: ZCAPE(YDCPG_OPTS%KLON), ZDCAPE(YDCPG_OPTS%KLON) ! ! Phaser team note from CY43T1: @@ -929,13 +674,121 @@ REAL(KIND=JPRB), PARAMETER :: PPTKEMIN = 1.E-6 ! Perturbed radiation-cloud interaction coef -REAL(KIND=JPRB), DIMENSION (KLON) :: ZRADGR,ZRADSN -REAL(KIND=JPRB) :: ZMU,ZVAL -INTEGER(KIND=JPIM) :: JKO,JKE +REAL(KIND=JPRB), DIMENSION (YDCPG_OPTS%KLON) :: ZRADGR,ZRADSN + +TYPE(ALL_SPP_VARS) :: ZSPP_ALL + +! ------------------------------------------------------------------ +LOGICAL :: LLDIAB +LOGICAL :: LL_SAVE_PHSURF +LOGICAL :: LLXFUMSE + +INTEGER(KIND=JPIM) :: IPTREXT,IEFB1,IEFB2,IEFB3 +INTEGER(KIND=JPIM) :: IPTR(YDMODEL%YRML_GCONF%YGFL%NUMFLDS) +INTEGER(KIND=JPIM) :: IPTRLIMA +INTEGER(KIND=JPIM) :: IRR ! pointer of 1st hydrometeors in ZTENDGFLR +INTEGER(KIND=JPIM) :: IPTRTKE ! pointer of TKE in ZTENDGFLR + +INTEGER(KIND=JPIM) :: IPGFL(YDMODEL%YRML_GCONF%YGFL%NUMFLDS) + +INTEGER(KIND=JPIM) :: INSTEP_DEB,INSTEP_FIN +INTEGER(KIND=JPIM) :: JROF, JSPP +INTEGER(KIND=JPIM) :: ISLB1U9 ,ISLB1V9 ,ISLB1T9 ,ISLB1GFL9, ISLB1VD9 + +! --- UPPER AIR PHYSICAL TENDENCIES. +REAL(KIND=JPRB) :: ZTENDH(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) ! Enthalpy tendency. +REAL(KIND=JPRB) :: ZTENDPTKE(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) ! Pseudo progn. TKE + +! GFL tendencies for APL_AROME (assumes YDMODEL%YRML_GCONF%YGFL%NUMFLDS>=YDMODEL%YRML_PHY_MF%YRPARAR%NRR) +! for now, use Jovi's trick : +REAL(KIND=JPRB), TARGET :: ZTENDGFLR(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG,0:YDMODEL%YRML_GCONF%YGFL%NUMFLDS) +REAL(KIND=JPRB) :: ZTENDGFL(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG,YDMODEL%YRML_GCONF%YGFL%NUMFLDS) ! GFL tendencies + +! --- UPPER AIR PHYSICAL TENDENCIES FOR AROME. +! (the previous one are not used in AROME) +REAL(KIND=JPRB) :: ZTENDT (YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) ! temperature tendency +REAL(KIND=JPRB) :: ZTENDW (YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) ! W tendency +REAL(KIND=JPRB) :: ZTENDD (YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) ! d tendency + +REAL(KIND=JPRB) :: ZTENDU (YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) ! U tendency without deep convection contribution +REAL(KIND=JPRB) :: ZTENDV (YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) ! V tendency without deep convection contribution + + +! ---FOR AROME PHYSICS --- +REAL(KIND=JPRB) :: ZGWT1(YDCPG_OPTS%KLON,0:YDCPG_OPTS%KFLEVG) ! vertical velocity calculated by cputqy_arome before convertion in d +REAL(KIND=JPRB) :: ZTT1(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) ! Temperature at t1 + +! ZRTT1: appropriate version of R*T at t1 for gnhgw2svd +! Version of R must be consistent with definition of vertical divergence. +REAL(KIND=JPRB) :: ZRTT1(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) + + +REAL (KIND=JPRB) :: ZSAV_GZ0F (YDCPG_OPTS%KLON) +REAL (KIND=JPRB) :: ZSAV_UDOM (YDCPG_OPTS%KLON, 1:YDCPG_OPTS%KFLEVG) +REAL (KIND=JPRB) :: ZPRC_DPRECIPS2 (YDCPG_OPTS%KLON, 1:YDCPG_OPTS%NDTPREC2) +REAL (KIND=JPRB) :: ZRDG_LCVQ (YDCPG_OPTS%KLON, 1:YDCPG_OPTS%KFLEVG) +REAL (KIND=JPRB) :: ZSAV_DDAL (YDCPG_OPTS%KLON, 1:YDCPG_OPTS%KFLEVG) +REAL (KIND=JPRB) :: ZPRC_DPRECIPS (YDCPG_OPTS%KLON, 1:YDCPG_OPTS%NDTPREC) +REAL (KIND=JPRB) :: ZRDG_MU0M (YDCPG_OPTS%KLON) +REAL (KIND=JPRB) :: ZRDG_CVGQ (YDCPG_OPTS%KLON, 1:YDCPG_OPTS%KFLEVG) +REAL (KIND=JPRB) :: ZRDG_MU0N (YDCPG_OPTS%KLON) +REAL (KIND=JPRB) :: ZSAV_UDAL (YDCPG_OPTS%KLON, 1:YDCPG_OPTS%KFLEVG) +REAL (KIND=JPRB) :: ZSAV_UDGRO (YDCPG_OPTS%KLON) +REAL (KIND=JPRB) :: ZSAV_HV (YDCPG_OPTS%KLON) +REAL (KIND=JPRB) :: ZSAV_QSH (YDCPG_OPTS%KLON) +REAL (KIND=JPRB) :: ZSAV_DDOM (YDCPG_OPTS%KLON, 1:YDCPG_OPTS%KFLEVG) +REAL (KIND=JPRB) :: ZSAV_UNEBH (YDCPG_OPTS%KLON, 1:YDCPG_OPTS%KFLEVG) +REAL (KIND=JPRB) :: ZRDG_MU0 (YDCPG_OPTS%KLON) +REAL (KIND=JPRB) :: ZSAV_ENTCH (YDCPG_OPTS%KLON, 1:YDCPG_OPTS%KFLEVG) +REAL (KIND=JPRB) :: ZRDG_MU0LU (YDCPG_OPTS%KLON) +REAL (KIND=JPRB) :: ZSAV_PBLH (YDCPG_OPTS%KLON) +REAL (KIND=JPRB) :: ZSAV_GZ0HF (YDCPG_OPTS%KLON) +REAL (KIND=JPRB) :: ZSAV_FHPS (YDCPG_OPTS%KLON) + +! required for INTFLEX +TYPE(TYPE_INTPROCSET) :: YLPROCSET + +! SPP +REAL(KIND=JPRB) :: ZGP2DSPP(YDCPG_OPTS%KLON,YSPP%N2D) + +REAL(KIND=JPRB), POINTER, CONTIGUOUS :: ZTEND_Q (:,:) +REAL(KIND=JPRB), POINTER, CONTIGUOUS :: ZTEND_L (:,:) +REAL(KIND=JPRB), POINTER, CONTIGUOUS :: ZTEND_R (:,:) +REAL(KIND=JPRB), POINTER, CONTIGUOUS :: ZTEND_I (:,:) +REAL(KIND=JPRB), POINTER, CONTIGUOUS :: ZTEND_S (:,:) +REAL(KIND=JPRB), POINTER, CONTIGUOUS :: ZTEND_G (:,:) +REAL(KIND=JPRB), POINTER, CONTIGUOUS :: ZTEND_H (:,:) +REAL(KIND=JPRB), TARGET :: ZDUM2 (1,1) + +REAL(KIND=JPRB), POINTER, CONTIGUOUS :: ZTENDRA (:,:,:) + +REAL(KIND=JPRB), POINTER, CONTIGUOUS :: ZTENDLIMA (:,:,:) +REAL(KIND=JPRB), POINTER, CONTIGUOUS :: ZTENDTKE (:,:) +REAL(KIND=JPRB), POINTER, CONTIGUOUS :: ZTENDEFB1 (:,:) +REAL(KIND=JPRB), POINTER, CONTIGUOUS :: ZTENDEFB2 (:,:) +REAL(KIND=JPRB), POINTER, CONTIGUOUS :: ZTENDEFB3 (:,:) +REAL(KIND=JPRB), POINTER, CONTIGUOUS :: ZTENDEXT (:,:,:) + +REAL(KIND=JPRB), POINTER :: ZP1EZDIAG(:,:,:) REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -------------------------------------------------------------------------- +! ------------------------------------------------------------------ + +#include "cpphinp.intfb.h" +#include "cptend_flex.intfb.h" +#include "cputqy_arome_expl.intfb.h" +#include "cputqy_arome_loop.intfb.h" +#include "cputqy.intfb.h" +#include "cp_ptrslb1.intfb.h" +#include "gnhgw2svdarome.intfb.h" +#include "writephysio.intfb.h" +#include "mf_phys_save_phsurf_part1.intfb.h" +#include "mf_phys_save_phsurf_part2.intfb.h" +#include "mf_phys_transfer.intfb.h" +#include "mf_phys_precips.intfb.h" +#include "apl_arome_calc_iptr.intfb.h" +#include "apl_arome_calc_ipgfl.intfb.h" #include "abor1.intfb.h" #include "recmwf.intfb.h" #include "acraneb2.intfb.h" @@ -945,8 +798,10 @@ REAL(KIND=JPRB) :: ZHOOK_HANDLE #include "gpgeo.intfb.h" #include "gprcp.intfb.h" #include "radheat.intfb.h" +#include "radghg.intfb.h" #include "suozon.intfb.h" #include "radaer.intfb.h" +#include "radact.intfb.h" #include "radozc.intfb.h" #include "accldia.intfb.h" #include "vdfhghthl.intfb.h" @@ -954,12 +809,12 @@ REAL(KIND=JPRB) :: ZHOOK_HANDLE #include "surf_ideal_flux.intfb.h" #include "ecr1d.intfb.h" #include "apl_arome2intflex.intfb.h" - #include "aro_rain_ice.h" #include "nudglhprecip.intfb.h" #include "nudglh.intfb.h" #include "nudglhclimprof.intfb.h" #include "nudglhprep.intfb.h" +#include "aro_windfarm.intfb.h" #include "aro_turb_mnh.h" #include "aro_adjust.h" #include "aro_mnhc.h" @@ -977,104 +832,176 @@ REAL(KIND=JPRB) :: ZHOOK_HANDLE #include "acvisih.intfb.h" #include "aro_ground_diag_2isba.h" +#ifdef REPRO48 +!To compensate a bug introduced in 48t3 +!Must be suppressed as soon as the bug is corrected +#include "aroini_budget.h" +#endif + ! ------------------------------------------------------------------ #include "fcttrm.func.h" -! -------------------------------------------------------------------------- +! ------------------------------------------------------------------ IF (LHOOK) CALL DR_HOOK('APL_AROME',0,ZHOOK_HANDLE) -ASSOCIATE(YDDIM=>YDGEOMETRY%YRDIM,YDDIMV=>YDGEOMETRY%YRDIMV,YDGEM=>YDGEOMETRY%YRGEM, YDMP=>YDGEOMETRY%YRMP, & - & YDVETA=>YDGEOMETRY%YRVETA, YDVFE=>YDGEOMETRY%YRVFE, YDSTA=>YDGEOMETRY%YRSTA, YDLAP=>YDGEOMETRY%YRLAP, & - & YDCSGLEG=>YDGEOMETRY%YRCSGLEG, YDVSPLIP=>YDGEOMETRY%YRVSPLIP, YDVSLETA=>YDGEOMETRY%YRVSLETA, & - & YDHSLMER=>YDGEOMETRY%YRHSLMER, YDCSGEOM=>YDGEOMETRY%YRCSGEOM, YDCSGEOM_NB=>YDGEOMETRY%YRCSGEOM_NB, & - & YDGSGEOM=>YDGEOMETRY%YRGSGEOM, YDGSGEOM_NB=>YDGEOMETRY%YRGSGEOM_NB, YDSPGEOM=>YDGEOMETRY%YSPGEOM, & - & YDPHY=>YDMODEL%YRML_PHY_MF%YRPHY, & - & YLDDH=>YDMODEL%YRML_DIAG%YRLDDH,YDTOPH=>YDMODEL%YRML_PHY_MF%YRTOPH, & - & YDERDI=>YDMODEL%YRML_PHY_RAD%YRERDI,YDRIP=>YDMODEL%YRML_GCONF%YRRIP,YDARPHY=>YDMODEL%YRML_PHY_MF%YRARPHY, & - & YDERAD=>YDMODEL%YRML_PHY_RAD%YRERAD,YDPHY3=>YDMODEL%YRML_PHY_MF%YRPHY3,YDPHYDS=>YDMODEL%YRML_PHY_MF%YRPHYDS, & - & YDPHY0=>YDMODEL%YRML_PHY_MF%YRPHY0, YDVISI=>YDMODEL%YRML_PHY_MF%YRPHY%YRDVISI,& - & YDPHY2=>YDMODEL%YRML_PHY_MF%YRPHY2,& - & YGFL=>YDMODEL%YRML_GCONF%YGFL,YDMSE=>YDMODEL%YRML_PHY_MF%YRMSE, & - & YDPARAR=>YDMODEL%YRML_PHY_MF%YRPARAR,YDPRECIPS=>YDMODEL%YRML_PHY_MF%YRPHY%YRDPRECIPS, & - & YDSTOPH=>YDMODEL%YRML_PHY_STOCH%YRSTOPH) - -ASSOCIATE(MINPRR=>YDPARAR%MINPRR, MINPRS=>YDPARAR%MINPRS, MVQS=>YDPARAR%MVQS, & - & MINPRG=>YDPARAR%MINPRG, LOTOWNC=>YDPARAR%LOTOWNC, LFPREC3D=>YDPARAR%LFPREC3D, & - & NGPAR=>YDPARAR%NGPAR, CSUBG_PR_PDF=>YDPARAR%CSUBG_PR_PDF, & - & NRRI=>YDPARAR%NRRI, NRRL=>YDPARAR%NRRL, CSUBG_AUCV_RC=>YDPARAR%CSUBG_AUCV_RC, & - & CSUBG_AUCV_RI=>YDPARAR%CSUBG_AUCV_RI, CCONDENS=>YDPARAR%CCONDENS, & - & CSUBG_MF_PDF=>YDPARAR%CSUBG_MF_PDF, & - & LTOTPREC=>YDPARAR%LTOTPREC, CSUBG_RC_RR_ACCR=>YDPARAR%CSUBG_RC_RR_ACCR, CSUBG_RR_EVAP=>YDPARAR%CSUBG_RR_EVAP, & - & NPRINTFR=>YDPARAR%NPRINTFR, CMF_CLOUD=>YDPARAR%CMF_CLOUD, & - & MALBDIR=>YDPARAR%MALBDIR, NSWB_MNH=>YDPARAR%NSWB_MNH, & - & XSW_BANDS=>YDPARAR%XSW_BANDS, MACPRG=>YDPARAR%MACPRG, MSWDIR=>YDPARAR%MSWDIR, & - & LMIXUV=>YDPARAR%LMIXUV, MSWDIF=>YDPARAR%MSWDIF, LOLSMC=>YDPARAR%LOLSMC, & - & NDIAGWMAX=>YDPARAR%NDIAGWMAX, MACPRS=>YDPARAR%MACPRS, MACPRR=>YDPARAR%MACPRR, & - & LSQUALL=>YDPARAR%LSQUALL, VSIGQSAT=>YDPARAR%VSIGQSAT, & - & MALBSCA=>YDPARAR%MALBSCA,& - & RADSN=>YDPARAR%RADSN, LOSEDIC=>YDPARAR%LOSEDIC, LDIAGWMAX=>YDPARAR%LDIAGWMAX, & - & CSEDIM=>YDPARAR%CSEDIM, CLAMBDA3=>YDPARAR%CLAMBDA3, & - & NPTP=>YDPARAR%NPTP, NSPLITR=>YDPARAR%NSPLITR, NSPLITG=>YDPARAR%NSPLITG, NSV=>YDPARAR%NSV, & - & CFRAC_ICE_SHALLOW_MF=>YDPARAR%CFRAC_ICE_SHALLOW_MF, CFRAC_ICE_ADJUST=>YDPARAR%CFRAC_ICE_ADJUST, & - & MVTS=>YDPARAR%MVTS, NREFROI2=>YDPARAR%NREFROI2, NREFROI1=>YDPARAR%NREFROI1, & - & MVEMIS=>YDPARAR%MVEMIS, LOWARM=>YDPARAR%LOWARM, LOCND2=>YDPARAR%LOCND2, & - & LGRSN=>YDPARAR%LGRSN, LOSIGMAS=>YDPARAR%LOSIGMAS, NRR=>YDPARAR%NRR, & - & LOSUBG_COND=>YDPARAR%LOSUBG_COND, RADGR=>YDPARAR%RADGR, & - & CMF_UPDRAFT=>YDPARAR%CMF_UPDRAFT, LHARATU=>YDPARAR%LHARATU, & - & XMINLM=>YDPHY0%XMINLM, XMAXLM=>YDPHY0%XMAXLM, AERCS1=>YDPHY0%AERCS1, & - & AERCS3=>YDPHY0%AERCS3, AERCS5=>YDPHY0%AERCS5, & - & RDECRD1=>YDPHY0%RDECRD1, RDECRD2=>YDPHY0%RDECRD2, & - & RDECRD3=>YDPHY0%RDECRD3, RDECRD4=>YDPHY0%RDECRD4, & - & LMPA=>YDARPHY%LMPA, LUSECHEM=>YDARPHY%LUSECHEM, LKFBCONV=>YDARPHY%LKFBCONV, & - & LMFSHAL=>YDARPHY%LMFSHAL, LMICRO=>YDARPHY%LMICRO, & - & CCOUPLING=>YDARPHY%CCOUPLING, LTURB=>YDARPHY%LTURB, LGRADHPHY=>YDARPHY%LGRADHPHY, & - & NSURFEX_ITER=>YDARPHY%NSURFEX_ITER, LRDUST=>YDARPHY%LRDUST, & - & NGRADIENTS=>YDARPHY%NGRADIENTS, & - & LRDEPOS=>YDARPHY%LRDEPOS, LSURFEX_CRITICAL=>YDARPHY%LSURFEX_CRITICAL, & - & LRCO2=>YDARPHY%LRCO2, LMSE=>YDARPHY%LMSE, & - & LSURFEX_KFROM=>YDARPHY%LSURFEX_KFROM, & - & NSURFEXCTL=>YDMSE%NSURFEXCTL, XZSEPS=>YDMSE%XZSEPS, & - & NDLUNG=>YDDIM%NDLUNG, NDGUNG=>YDDIM%NDGUNG, NPROMA=>YDDIM%NPROMA, & - & NDLUXG=>YDDIM%NDLUXG, NDGUXG=>YDDIM%NDGUXG, & - & NSFORC=>YDPHYDS%NSFORC, & - & NGFL_EXT=>YGFL%NGFL_EXT, YLRAD=>YGFL%YLRAD, YIRAD=>YGFL%YIRAD, & - & NGFL_EZDIAG=>YGFL%NGFL_EZDIAG, & - & NLIMA=>YGFL%NLIMA, CMICRO=>YDPARAR%CMICRO,NPROMICRO=>YDPARAR%NPROMICRO, & - & YSD_VAD=>YDSURF%YSD_VAD, & - & QCO2=>YDPHY3%QCO2, & - & NTEND_DIAG_POS=>YDPHY%NTEND_DIAG_POS, NTEND_DIAG_FREQ_RESET=>YDPHY%NTEND_DIAG_FREQ_RESET, & - & NRAY=>YDPHY%NRAY, LRAYFM=>YDPHY%LRAYFM, & - & LO3ABC=>YDPHY%LO3ABC, LRAY=>YDPHY%LRAY, & - & LAEROVOL=>YDPHY%LAEROVOL, LRSTAER=>YDPHY%LRSTAER, LRNUEXP=>YDPHY%LRNUEXP, & - & AMAGSTOPH_CASBS=> YDSTOPH%AMAGSTOPH_CASBS, LFORCENL=>YDSTOPH%LFORCENL, & - & NFORCESTART=>YDSTOPH%NFORCESTART, NFORCEEND=>YDSTOPH%NFORCEEND, & - & NTRADI=>YDTOPH%NTRADI, NTQSAT=>YDTOPH%NTQSAT, NTNEBU=>YDTOPH%NTNEBU,& - & NAER=>YDERAD%NAER, & - & LHLRADUPD=>YDPHY%LHLRADUPD, & - & TSPHY=>YDPHY2%TSPHY,& - & NMODE=>YDERAD%NMODE, & - & NOZOCL=>YDERAD%NOZOCL, & - & NRADFR=>YDERAD%NRADFR, & - & NSW=>YDERAD%NSW, & - & RCARDI=>YDERDI%RCARDI, & - & LFLEXDIA=>YLDDH%LFLEXDIA, LDDH_OMP=>YLDDH%LDDH_OMP, LRSLDDH=>YLDDH%LRSLDDH, & - & RDECLI=>YDRIP%RDECLI, & - & RCODEC=>YDRIP%RCODEC, & - & RHGMT=>YDRIP%RHGMT, & - & RSIDEC=>YDRIP%RSIDEC, & - & RSOVR=>YDRIP%RSOVR, & - & RSTATI=>YDRIP%RSTATI, & - & TSTEP=>YDRIP%TSTEP, & - & STPREH=>YDSTA%STPREH, & - & LXXDIAGH=>YDXFU%LXXDIAGH,& - & LFLASH =>YDCFU%LFLASH,& - & LDPRECIPS=>YDPHY%LDPRECIPS,LDPRECIPS2=>YDPHY%LDPRECIPS2,& - & NDTPREC=>YDPRECIPS%NDTPREC,NDTPREC2=>YDPRECIPS%NDTPREC2,& - & NDTPRECCUR=>YDPRECIPS%NDTPRECCUR,NDTPRECCUR2=>YDPRECIPS%NDTPRECCUR2,& - & NGPTOT=>YDGEM%NGPTOT,& - & NGPBLKS=>YDDIM%NGPBLKS) +ASSOCIATE(YDDIM=>YDGEOMETRY%YRDIM, YDGEM=>YDGEOMETRY%YRGEM, YDSTA=>YDGEOMETRY%YRSTA, YDPHY=>YDMODEL%YRML_PHY_MF%YRPHY, & +& YLDDH=>YDMODEL%YRML_DIAG%YRLDDH, YDTOPH=>YDMODEL%YRML_PHY_MF%YRTOPH, YDERDI=>YDMODEL%YRML_PHY_RAD%YRERDI, & +& YDRIP=>YDMODEL%YRML_GCONF%YRRIP, YDARPHY=>YDMODEL%YRML_PHY_MF%YRARPHY, YDERAD=>YDMODEL%YRML_PHY_RAD%YRERAD, & +& YDPHY3=>YDMODEL%YRML_PHY_MF%YRPHY3, YDPHYDS=>YDMODEL%YRML_PHY_MF%YRPHYDS, YDPHY0=>YDMODEL%YRML_PHY_MF%YRPHY0, & +& YDVISI=>YDMODEL%YRML_PHY_MF%YRPHY%YRDVISI, YDPHY2=>YDMODEL%YRML_PHY_MF%YRPHY2, YGFL=>YDMODEL%YRML_GCONF%YGFL, & +& YDMSE=>YDMODEL%YRML_PHY_MF%YRMSE, YDPARAR=>YDMODEL%YRML_PHY_MF%YRPARAR, YDPRECIPS=>YDMODEL%YRML_PHY_MF%YRPHY%YRDPRECIPS, & +& YDSTOPH=>YDMODEL%YRML_PHY_STOCH%YRSTOPH, YDPTRSLB1=>YDMODEL%YRML_DYN%YRPTRSLB1, YDMDDH=>YDMODEL%YRML_DIAG%YRMDDH, & +& YDDPHY=>YDMODEL%YRML_PHY_G%YRDPHY, YDLDDH=>YDMODEL%YRML_DIAG%YRLDDH, YDEPHY=> YDMODEL%YRML_PHY_EC%YREPHY & +& ) + +ASSOCIATE(MINPRR=>YDPARAR%MINPRR, MINPRS=>YDPARAR%MINPRS, MVQS=>YDPARAR%MVQS, MINPRG=>YDPARAR%MINPRG, & +& LOTOWNC=>YDPARAR%LOTOWNC, LFPREC3D=>YDPARAR%LFPREC3D, NRRI=>YDPARAR%NRRI, NRRL=>YDPARAR%NRRL, CSUBG_AUCV_RC=>YDPARAR%CSUBG_AUCV_RC, & +& CSUBG_AUCV_RI=>YDPARAR%CSUBG_AUCV_RI, CCONDENS=>YDPARAR%CCONDENS, CSUBG_MF_PDF=>YDPARAR%CSUBG_MF_PDF, & +& LTOTPREC=>YDPARAR%LTOTPREC, NPRINTFR=>YDPARAR%NPRINTFR, CMF_CLOUD=>YDPARAR%CMF_CLOUD, MALBDIR=>YDPARAR%MALBDIR, & +& NSWB_MNH=>YDPARAR%NSWB_MNH, XSW_BANDS=>YDPARAR%XSW_BANDS, MACPRG=>YDPARAR%MACPRG, MSWDIR=>YDPARAR%MSWDIR, & +& LMIXUV=>YDPARAR%LMIXUV, MSWDIF=>YDPARAR%MSWDIF, LOLSMC=>YDPARAR%LOLSMC, NDIAGWMAX=>YDPARAR%NDIAGWMAX, & +& MACPRS=>YDPARAR%MACPRS, MACPRR=>YDPARAR%MACPRR, LSQUALL=>YDPARAR%LSQUALL, VSIGQSAT=>YDPARAR%VSIGQSAT, & +& MALBSCA=>YDPARAR%MALBSCA, RADSN=>YDPARAR%RADSN, LOSEDIC=>YDPARAR%LOSEDIC, LDIAGWMAX=>YDPARAR%LDIAGWMAX, & +& CSEDIM=>YDPARAR%CSEDIM, CLAMBDA3=>YDPARAR%CLAMBDA3, & +& NPTP=>YDPARAR%NPTP, NSPLITR=>YDPARAR%NSPLITR, NSPLITG=>YDPARAR%NSPLITG, NSV=>YDPARAR%NSV, & +& CFRAC_ICE_SHALLOW_MF=>YDPARAR%CFRAC_ICE_SHALLOW_MF, CFRAC_ICE_ADJUST=>YDPARAR%CFRAC_ICE_ADJUST, MVTS=>YDPARAR%MVTS, & +& NREFROI2=>YDPARAR%NREFROI2, NREFROI1=>YDPARAR%NREFROI1, MVEMIS=>YDPARAR%MVEMIS, LOWARM=>YDPARAR%LOWARM, & +& LOCND2=>YDPARAR%LOCND2, LOSIGMAS=>YDPARAR%LOSIGMAS, NRR=>YDPARAR%NRR, LOSUBG_COND=>YDPARAR%LOSUBG_COND, & +& RADGR=>YDPARAR%RADGR, CMF_UPDRAFT=>YDPARAR%CMF_UPDRAFT, LHARATU=>YDPARAR%LHARATU, XMINLM=>YDPHY0%XMINLM, & +& XMAXLM=>YDPHY0%XMAXLM, AERCS1=>YDPHY0%AERCS1, AERCS3=>YDPHY0%AERCS3, AERCS5=>YDPHY0%AERCS5, RDECRD1=>YDPHY0%RDECRD1, & +& RDECRD2=>YDPHY0%RDECRD2, RDECRD3=>YDPHY0%RDECRD3, RDECRD4=>YDPHY0%RDECRD4, LMPA=>YDARPHY%LMPA, LUSECHEM=>YDARPHY%LUSECHEM, & +& LKFBCONV=>YDARPHY%LKFBCONV, LMFSHAL=>YDARPHY%LMFSHAL, LMICRO=>YDARPHY%LMICRO, CCOUPLING=>YDARPHY%CCOUPLING, & +& LTURB=>YDARPHY%LTURB, LGRADHPHY=>YDARPHY%LGRADHPHY, LRDUST=>YDARPHY%LRDUST, & +& NGRADIENTS=>YDARPHY%NGRADIENTS, LRDEPOS=>YDARPHY%LRDEPOS, & +& LRCO2=>YDARPHY%LRCO2, LMSE=>YDARPHY%LMSE, LSURFEX_KFROM=>YDARPHY%LSURFEX_KFROM, NSURFEXCTL=>YDMSE%NSURFEXCTL, & +& XZSEPS=>YDMSE%XZSEPS, NDLUNG=>YDDIM%NDLUNG, NDGUNG=>YDDIM%NDGUNG, NPROMA=>YDDIM%NPROMA, NDLUXG=>YDDIM%NDLUXG, & +& NDGUXG=>YDDIM%NDGUXG, NGFL_EXT=>YGFL%NGFL_EXT, YLRAD=>YGFL%YLRAD, YIRAD=>YGFL%YIRAD, NGFL_EZDIAG=>YGFL%NGFL_EZDIAG, & +& NLIMA=>YGFL%NLIMA, CMICRO=>YDPARAR%CMICRO, NPROMICRO=>YDPARAR%NPROMICRO, & +& YSD_VAD=>YDSURF%YSD_VAD, QCO2=>YDPHY3%QCO2, NRAY=>YDPHY%NRAY, & +& LRAYFM=>YDPHY%LRAYFM, LO3ABC=>YDPHY%LO3ABC, LRAY=>YDPHY%LRAY, LRSTAER=>YDPHY%LRSTAER, LRNUEXP=>YDPHY%LRNUEXP, & +& AMAGSTOPH_CASBS=> YDSTOPH%AMAGSTOPH_CASBS, LFORCENL=>YDSTOPH%LFORCENL, NFORCESTART=>YDSTOPH%NFORCESTART, & +& NFORCEEND=>YDSTOPH%NFORCEEND, NTRADI=>YDTOPH%NTRADI, NTQSAT=>YDTOPH%NTQSAT, NTNEBU=>YDTOPH%NTNEBU, NAERMACC=>YDERAD%NAERMACC, & +& NAER=>YDERAD%NAER, LHLRADUPD=>YDPHY%LHLRADUPD, TSPHY=>YDPHY2%TSPHY, NOZOCL=>YDERAD%NOZOCL, NRADFR=>YDERAD%NRADFR, & +& NSW=>YDERAD%NSW, RCARDI=>YDERDI%RCARDI, LFLEXDIA=>YLDDH%LFLEXDIA, LDDH_OMP=>YLDDH%LDDH_OMP, LRSLDDH=>YLDDH%LRSLDDH, & +& RDECLI=>YDRIP%RDECLI, RCODEC=>YDRIP%RCODEC, RHGMT=>YDRIP%RHGMT, RSIDEC=>YDRIP%RSIDEC, RSOVR=>YDRIP%RSOVR, & +& RSTATI=>YDRIP%RSTATI, TSTEP=>YDRIP%TSTEP, STPREH=>YDSTA%STPREH, LXXDIAGH=>YDXFU%LXXDIAGH, LFLASH =>YDCFU%LFLASH, & +& LDPRECIPS=>YDPHY%LDPRECIPS, LDPRECIPS2=>YDPHY%LDPRECIPS2, NDTPREC=>YDPRECIPS%NDTPREC, NDTPREC2=>YDPRECIPS%NDTPREC2, & +& NGPTOT=>YDGEM%NGPTOT, NGPBLKS=>YDDIM%NGPBLKS, NTSSG=>YDDPHY%NTSSG, YEZDIAG=>YGFL%YEZDIAG, YEXT=>YGFL%YEXT, & +& YNOGW=>YGFL%YNOGW, YCHEM=>YGFL%YCHEM, YSP_SBD=>YDSURF%YSP_SBD, LEDR=>YDPHY%LEDR, LAGPHY=>YDEPHY%LAGPHY, & +& YLIMA=>YGFL%YLIMA, LSPSDT => YSPPT_CONFIG%LSPSDT, LKOGAN=>YDPARAR%LKOGAN, LHGT_QS=>YDPARAR%LHGT_QS, & +& LMODICEDEP=>YDPARAR%LMODICEDEP, LWINDFARM=>YDPHY%LWINDFARM, LSTATNW=>YDPARAR%LSTATNW, & + & RG=>YDCST%RG, RCPD=>YDCST%RCPD, RATM=>YDCST%RATM, RTT=>YDCST%RTT, RPI=>YDCST%RPI, & + & RCW=>YDCST%RCW, RCPV=>YDCST%RCPV, RLVTT=>YDCST%RLVTT, RCS=>YDCST%RCS, RLSTT=>YDCST%RLSTT, & + & RGAMW=>YDCST%RGAMW, RBETW=>YDCST%RBETW, RALPW=>YDCST%RALPW, RGAMS=>YDCST%RGAMS, & + & RBETS=>YDCST%RBETS, RALPS=>YDCST%RALPS, RGAMD=>YDCST%RGAMD, RBETD=>YDCST%RBETD, & + & RALPD=>YDCST%RALPD, RETV=>YDCST%RETV, RKAPPA=>YDCST%RKAPPA, RHOUR=>YDCST%RHOUR, RV=>YDCST%RV, RD=>YDCST%RD, & +& LTOTPRECL=>YDPARAR%LTOTPRECL) + +CALL SC2PRG(1, YEZDIAG(:)%MP, YDMODEL%YRML_GCONF%YGFL%NGFL_EZDIAG, PGFL, ZP1EZDIAG) + +! ------------------------------------------------------------------ + +! 0. constructor for procset +IF (LINTFLEX) YLPROCSET=NEWINTPROCSET() + +! 1. Preliminary calculations necessary +! for all types of physics. +! ------------------------------------ +#ifdef REPRO48 +!see comment associated to the include statement +CALL AROINI_BUDGET(YDMODEL%YRML_DIAG%YRLDDH%LSDDH) +#endif + +INSTEP_DEB=1 +INSTEP_FIN=1 + +! initialisation for surfex if XFU +LLXFUMSE=.FALSE. +IF (YDCPG_OPTS%LCONFX) THEN + LLXFUMSE=.TRUE. +ENDIF + +! SPP +IF ( YSPP_CONFIG%LSPP ) THEN + DO JSPP=1,YSPP%N2D + ZGP2DSPP(:,JSPP) = YSPP%GP_ARP(JSPP)%GP2D(:,1,YDCPG_BNDS%KBL) + ENDDO +ENDIF + +! Complete physics is called. +LLDIAB=(.NOT.LAGPHY) + +IF (LLDIAB) THEN + CALL CPPHINP(YDCPG_OPTS%LVERTFE, YDGEOMETRY, YDMODEL, YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, YDVARS%GEOMETRY%GEMU%T0, & + & YDVARS%GEOMETRY%GELAM%T0, YDVARS%U%T0, YDVARS%V%T0, YDVARS%Q%T0, YDVARS%Q%DL, YDVARS%Q%DM, YDVARS%CVGQ%DL, YDVARS%CVGQ%DM, & + & YDCPG_PHY0%XYB%RDELP, YDCPG_DYN0%CTY%EVEL, YDVARS%CVGQ%T0, ZRDG_MU0, ZRDG_MU0LU, ZRDG_MU0M, & + & ZRDG_MU0N, ZRDG_CVGQ) + ZRDG_LCVQ(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG)=ZRDG_CVGQ(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG) +ENDIF + +! * In some cases, some pseudo-historic surface buffers (like z0) should +! not be modified between the entrance and the output of APL_AROME +! (this is the case for example if LDCONFX=T). +! For the time being, we must save: +! - HV (group VV) : resistance to evapotranspiration +! - Z0F (group VD): gravity * surface roughness length +! - Z0H (group VV): gravity * roughness length for heat +! - PBLH (group VH): PBL height +! - SPSH (group VH): +! - QSH (group VH): + +LL_SAVE_PHSURF = .FALSE. + +IF (LLDIAB) THEN + LL_SAVE_PHSURF=YDCPG_OPTS%LCONFX + IF (LL_SAVE_PHSURF) THEN + CALL MF_PHYS_SAVE_PHSURF_PART1 (YDCPG_BNDS, YDCPG_OPTS, ZSAV_DDAL, ZSAV_DDOM, ZSAV_ENTCH, & + & ZSAV_FHPS, ZSAV_GZ0F, ZSAV_GZ0HF, ZSAV_HV, ZSAV_PBLH, ZSAV_QSH, ZSAV_UDAL, ZSAV_UDGRO, & + & ZSAV_UDOM, ZSAV_UNEBH, YDMF_PHYS_SURF%GSD_VF%PZ0F, YDMF_PHYS_SURF%GSD_VH%PPBLH, YDMF_PHYS_SURF%GSD_VH%PQSH, & + & YDMF_PHYS_SURF%GSD_VH%PSPSH, YDMF_PHYS_SURF%GSD_VK%PUDGRO, YDMF_PHYS_SURF%GSD_VV%PHV, YDMF_PHYS_SURF%GSD_VV%PZ0H, & + & YDVARS%DAL%T0, YDVARS%DOM%T0, YDVARS%UAL%T0, YDVARS%UEN%T0, YDVARS%UNEBH%T0, YDVARS%UOM%T0, & + & YDMODEL) + ENDIF +ENDIF + + +CALL APL_AROME_CALC_IPGFL (YDGEOMETRY, YDCPG_BNDS, YDCPG_OPTS, YDMODEL, IPGFL) + +CALL MF_PHYS_TRANSFER (YDCPG_BNDS, YDCPG_OPTS, YDVARS, YDMODEL%YRML_PHY_MF%YRPHY, YDMODEL%YRML_GCONF%YGFL) + +CALL APL_AROME_CALC_IPTR (YDMODEL, IEFB1, IEFB2, IEFB3, IPTR, IPTREXT, IPTRLIMA, IPTRTKE, IRR) + +! If an incorrect address is used, then the initialization below will detect it : +ZTENDGFLR(:,:,0)=HUGE(1._JPRB) + +ZTEND_Q => ZTENDGFLR (:,:,IRR+0) ! 1 Q +ZTEND_L => ZTENDGFLR (:,:,IRR+1) ! 2 L +ZTEND_R => ZTENDGFLR (:,:,IRR+2) ! 3 R +ZTEND_I => ZTENDGFLR (:,:,IRR+3) ! 4 I +ZTEND_S => ZTENDGFLR (:,:,IRR+4) ! 5 S +ZTEND_G => ZTENDGFLR (:,:,IRR+5) ! 6 G +IF (YDMODEL%YRML_PHY_MF%YRPARAR%NRR == 7) THEN + ZTEND_H => ZTENDGFLR (:,:,IRR+6) ! 7 H +ELSE + ZTEND_H => ZDUM2 +ENDIF + + +ZTENDRA => ZTENDGFLR (:, :, IRR:IRR+YDMODEL%YRML_PHY_MF%YRPARAR%NRR-1) +ZTENDLIMA => ZTENDGFLR (:, :, IPTRLIMA:IPTRLIMA+YDMODEL%YRML_GCONF%YGFL%NLIMA-1) +ZTENDTKE => ZTENDGFLR (:, :, IPTRTKE) +ZTENDEFB1 => ZTENDGFLR (:, :, IEFB1) +ZTENDEFB2 => ZTENDGFLR (:, :, IEFB2) +ZTENDEFB3 => ZTENDGFLR (:, :, IEFB3) +ZTENDEXT => ZTENDGFLR (:, :, IPTREXT:IPTREXT+YDMODEL%YRML_GCONF%YGFL%NGFL_EXT-1) + + + + + + ! -------------------------------------------------------------------------- ! ------------------------------------------------------------------ @@ -1113,38 +1040,38 @@ ELSE ZEPSNEB=1.E-06 ENDIF -NSV=0 - ! 1.3 time step initialisation -! the mesoNH physics (turb and microphysics) is written +! the mesoNH physics (turb and microphysics) is written ! for leap frog scheme -! !!! be carefull for 2TL or 3TL +! !!! be carefull for 2TL or 3TL IF (LTWOTL) THEN - ZDT=PDT/2._JPRB + ZDT=YDCPG_OPTS%ZDTPHY/2._JPRB ELSE - IF (KSTEP/=0) THEN - ZDT=PDT/2._JPRB + IF (YDCPG_OPTS%KSTEP/=0) THEN + ZDT=YDCPG_OPTS%ZDTPHY/2._JPRB ELSE - ZDT=PDT + ZDT=YDCPG_OPTS%ZDTPHY ENDIF ENDIF -ZINVDT=1/PDT +ZINVDT=1/YDCPG_OPTS%ZDTPHY ZINVG=1._JPRB/RG ! initialisation de ZDTMSE -IF (LDXFUMSE) THEN +IF (LLXFUMSE) THEN ZDTMSE=0.01_JPRB - ZSTATI=REAL(RSTATI,JPRB)-ZDTMSE/2._JPRB + ZSTATI=REAL(RSTATI,JPRB)-ZDTMSE*.5_JPRB + ZADTMS=0._JPRB ELSE - ZDTMSE=PDT + ZDTMSE=YDCPG_OPTS%ZDTPHY ZSTATI=REAL(RSTATI,JPRB) + ZADTMS=ZDTMSE ENDIF IF(LTWOTL) THEN - ZRHGMT=REAL(RHGMT,JPRB)-ZDTMSE/2._JPRB + ZRHGMT=REAL(RHGMT,JPRB)-ZDTMSE*.5_JPRB ELSE ZRHGMT=REAL(RHGMT,JPRB) ENDIF @@ -1156,11 +1083,11 @@ LLMSE_DIAG=LLMSE.AND.(NSURFEXCTL >= 3) ! Vertical points -IKA=KLEV -IKB=KLEV +IKA=YDCPG_OPTS%KFLEVG +IKB=YDCPG_OPTS%KFLEVG IKU=1 -IKT=KLEV -IKTE=KLEV +IKT=YDCPG_OPTS%KFLEVG +IKTE=YDCPG_OPTS%KFLEVG IKTB=1 IKL=-1 @@ -1188,6 +1115,11 @@ IF (INIT0 >= 0) THEN ZMFM_(:,:)=ZVALUE ZSIGM_(:,:)=ZVALUE ZNEBMNH_(:,:)=ZVALUE + ZICLDFR_(:,:)=ZVALUE + ZWCLDFR_(:,:)=ZVALUE + ZSSIO_(:,:)=ZVALUE + ZSSIU_(:,:)=ZVALUE + ZIFR_(:,:)=ZVALUE ZEVAP_(:,:)=ZVALUE ZRSWAP_(:,:,:)=ZVALUE @@ -1265,7 +1197,7 @@ IF (INIT0 >= 0) THEN ZFRSOFS(:)=ZVALUE ZQW(:,:)=ZVALUE - PRH(:,:)=ZVALUE + YDCPG_MISC%RH(:,:)=ZVALUE ZTW(:,:)=ZVALUE ZTRSODIF(:,:)=ZVALUE @@ -1283,10 +1215,10 @@ IF (INIT0 >= 0) THEN ZQV(:,:)=ZVALUE ZSFSV_(:,:)=ZVALUE - PFRSOC(:,:)=ZVALUE - PFRTHC(:,:)=ZVALUE - PFRSOPS(:)=ZVALUE - PDIAGH(:)=ZVALUE + YDMF_PHYS%OUT%FRSOC(:,:)=ZVALUE + YDMF_PHYS%OUT%FRTHC(:,:)=ZVALUE + YDMF_PHYS%OUT%FRSOPS(:)=ZVALUE + YDMF_PHYS%OUT%DIAGH(:)=ZVALUE ZTENDSV_TURBLIMA_(:,:,:)=ZVALUE @@ -1294,76 +1226,76 @@ ENDIF ! INITIALIZE (CUMULATED) TENDENCIES -DO JLEV=1,KLEV - PTENDT(KIDIA:KFDIA,JLEV)=0.0_JPRB - PTENDU(KIDIA:KFDIA,JLEV)=0.0_JPRB - PTENDV(KIDIA:KFDIA,JLEV)=0.0_JPRB - PTENDW(KIDIA:KFDIA,JLEV)=0.0_JPRB - PTENDTKE(KIDIA:KFDIA,JLEV)=0.0_JPRB +DO JLEV=1,YDCPG_OPTS%KFLEVG + ZTENDT(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=0.0_JPRB + YDMF_PHYS%OUT%TENDU(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=0.0_JPRB + YDMF_PHYS%OUT%TENDV(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=0.0_JPRB + ZTENDW(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=0.0_JPRB + ZTENDTKE(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=0.0_JPRB ENDDO DO JRR=1,NRR - DO JLEV=1,KLEV - PTENDR(KIDIA:KFDIA,JLEV,JRR)=0.0_JPRB + DO JLEV=1,YDCPG_OPTS%KFLEVG + ZTENDRA(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV,JRR)=0.0_JPRB ENDDO ENDDO DO JGFL=1,NGFL_EXT - DO JLEV=1,KLEV - PTENDEXT(KIDIA:KFDIA,JLEV,JGFL)=0.0_JPRB + DO JLEV=1,YDCPG_OPTS%KFLEVG + ZTENDEXT(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV,JGFL)=0.0_JPRB ENDDO ENDDO DO JGFL=1,NLIMA - DO JLEV=1,KLEV - PTENDLIMA(KIDIA:KFDIA,JLEV,JGFL)=0.0_JPRB + DO JLEV=1,YDCPG_OPTS%KFLEVG + ZTENDLIMA(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV,JGFL)=0.0_JPRB ENDDO ENDDO ! INITIALIZE CUMULATED STUFF ! Small array, OK. REK -ZINPRH_(KIDIA:KFDIA)=0._JPRB -ZINPRR_(KIDIA:KFDIA)=0._JPRB -ZACPRR_(KIDIA:KFDIA)=0._JPRB -ZINPRS_(KIDIA:KFDIA)=0._JPRB -ZACPRS_(KIDIA:KFDIA)=0._JPRB -ZINPRG_(KIDIA:KFDIA)=0._JPRB +ZINPRH_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=0._JPRB +ZINPRR_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=0._JPRB +ZACPRR_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=0._JPRB +ZINPRS_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=0._JPRB +ZACPRS_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=0._JPRB +ZINPRG_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=0._JPRB -DO JLEV = 1,KLEV - DO JLON = KIDIA,KFDIA - ZZZ_F_(JLON,JLEV)=PAPHIFM(JLON,JLEV)*ZINVG - ZTENDT(JLON,JLEV)=0._JPRB +DO JLEV = 1,YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZZZ_F_(JLON,JLEV)=YDMF_PHYS_BASE_STATE%YCPG_DYN%PHIF(JLON,JLEV)*ZINVG + ZTENDTT(JLON,JLEV)=0._JPRB ENDDO ENDDO ! adhoc solution to avoid negative tke values ! when SL advective ddh is activated IF (LRSLDDH) THEN - DO JLEV=1, KLEV - DO JLON = KIDIA, KFDIA - ZTKEM4SLDDH(JLON,JLEV)=MAX(PTKEM(JLON,JLEV),PPTKEMIN) + DO JLEV=1, YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA + ZTKEM4SLDDH(JLON,JLEV)=MAX(YDMF_PHYS_BASE_STATE%TKE(JLON,JLEV),PPTKEMIN) ENDDO ENDDO ZTKEM => ZTKEM4SLDDH(:,:) ELSE - ZTKEM => PTKEM(:,:) + ZTKEM => YDMF_PHYS_BASE_STATE%TKE(:,:) !test TKE > 0. - IF (MINVAL(ZTKEM(KIDIA:KFDIA,1:KLEV)) <= 0._JPRB) THEN + IF (MINVAL(ZTKEM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG)) <= 0._JPRB) THEN CALL ABOR1('TKE < 0 under APL_AROME check YTKE_NL%NREQIN') ENDIF ENDIF - -!test invalid combinations -IF (LHARATU .AND. CMF_UPDRAFT == 'EDKF') THEN - CALL ABOR1('Combination LHARATU and EDKF not valid!') -ENDIF - !initialisation of first useful field for EZDIAG use in Chemistry/Dust IOFF_MFSHAL=1 IF(LFPREC3D) IOFF_MFSHAL=2 +! 1.5 SPP settings +IF (YSPP_CONFIG%LSPP) THEN + CALL SET_ALL_SPP(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG,NGFL_EZDIAG, & + & YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA,ZGP2DSPP,ZP1EZDIAG,ZSPP_ALL) +ENDIF + ! ------------------------------------------------------------------ -! 2 - CHANGEMENTS DE VARIABLES ET INVERSION DES NIVEAUX +! 2 - CHANGEMENTS DE VARIABLES ET INVERSION DES NIVEAUX ! -------------------------------------------------------------------- IF (LMICRO.OR.LTURB.OR.LLMSE.OR.LKFBCONV) THEN @@ -1371,83 +1303,83 @@ IF (LMICRO.OR.LTURB.OR.LLMSE.OR.LKFBCONV) THEN ZRSCP=RD/RCPD ZINVATM=1/RATM !initialisation de ZZZ_ - DO JLEV = 1,KLEV - !initialisation de qdm (utile localement pour calculer rho + DO JLEV = 1,YDCPG_OPTS%KFLEVG + !initialisation de qdm (utile localement pour calculer rho !et convertir q en r IF (NRR==7) THEN - DO JLON = KIDIA,KFDIA - ZQDM(JLON,JLEV)=1._JPRB-PQVM(JLON,JLEV)-PQCM(JLON,JLEV)-PQRM(JLON,JLEV)& - & -PQIM(JLON,JLEV)-PQSM(JLON,JLEV)-PQGM(JLON,JLEV)-PQHM(JLON,JLEV) + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZQDM(JLON,JLEV)=1._JPRB-YDMF_PHYS_BASE_STATE%Q(JLON,JLEV)-YDMF_PHYS_BASE_STATE%L(JLON,JLEV)-YDMF_PHYS_BASE_STATE%R(JLON,JLEV)& + & -YDMF_PHYS_BASE_STATE%I(JLON,JLEV)-YDMF_PHYS_BASE_STATE%S(JLON,JLEV)-YDMF_PHYS_BASE_STATE%G(JLON,JLEV)-YDMF_PHYS_BASE_STATE%H(JLON,JLEV) ENDDO ELSE - DO JLON = KIDIA,KFDIA - ZQDM(JLON,JLEV)=1._JPRB-PQVM(JLON,JLEV)-PQCM(JLON,JLEV)-PQRM(JLON,JLEV)& - & -PQIM(JLON,JLEV)-PQSM(JLON,JLEV)-PQGM(JLON,JLEV) + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZQDM(JLON,JLEV)=1._JPRB-YDMF_PHYS_BASE_STATE%Q(JLON,JLEV)-YDMF_PHYS_BASE_STATE%L(JLON,JLEV)-YDMF_PHYS_BASE_STATE%R(JLON,JLEV)& + & -YDMF_PHYS_BASE_STATE%I(JLON,JLEV)-YDMF_PHYS_BASE_STATE%S(JLON,JLEV)-YDMF_PHYS_BASE_STATE%G(JLON,JLEV) ENDDO ENDIF - DO JLON = KIDIA,KFDIA - !initialisation de ZRHODREFM__ (=qd*zrho) - ZRHO=PAPRSFM(JLON,JLEV)/(PRM(JLON,JLEV)*PTM(JLON,JLEV)) + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + !initialisation de ZRHODREFM__ (=qd*zrho) + ZRHO=YDMF_PHYS_BASE_STATE%YCPG_PHY%PREF(JLON,JLEV)/(YDMF_PHYS_BASE_STATE%YCPG_DYN%RCP%R(JLON,JLEV)*YDMF_PHYS_BASE_STATE%T(JLON,JLEV)) ZRHODREFM__(JLON,JLEV)=ZRHO*ZQDM(JLON,JLEV) - ZRHODJM__(JLON,JLEV)=PDELPM(JLON,JLEV)*ZINVG + ZRHODJM__(JLON,JLEV)=YDMF_PHYS_BASE_STATE%YCPG_PHY%XYB%DELP(JLON,JLEV)*ZINVG !initialisation de ZEXNREFM_ - ZEXNREFM_(JLON,JLEV)=(PAPRSFM(JLON,JLEV)*ZINVATM)**(ZRSCP) + ZEXNREFM_(JLON,JLEV)=(YDMF_PHYS_BASE_STATE%YCPG_PHY%PREF(JLON,JLEV)*ZINVATM)**(ZRSCP) ! vent horizontal et TKE - ZPABSM__(JLON,JLEV)=PAPRSFM(JLON,JLEV) - ZUM__(JLON,JLEV)= PUM(JLON,JLEV) - ZVM__(JLON,JLEV)= PVM(JLON,JLEV) - ZWM__(JLON,JLEV)= PWM(JLON,JLEV) + ZPABSM__(JLON,JLEV)=YDMF_PHYS_BASE_STATE%YCPG_PHY%PREF(JLON,JLEV) + ZUM__(JLON,JLEV)= YDMF_PHYS_BASE_STATE%U(JLON,JLEV) + ZVM__(JLON,JLEV)= YDMF_PHYS_BASE_STATE%V(JLON,JLEV) + ZWM__(JLON,JLEV)= YDMF_PHYS_BASE_STATE%YCPG_PHY%W(JLON,JLEV) ZTKEM__(JLON,JLEV)= ZTKEM(JLON,JLEV) - ZZZ_(JLON,JLEV)=PAPHIM(JLON,JLEV)*ZINVG + ZZZ_(JLON,JLEV)=YDMF_PHYS_BASE_STATE%YCPG_DYN%PHI(JLON,JLEV)*ZINVG ENDDO ENDDO !initialise sigma for subgrid condensation coming !from previous time step turbulence scheme IF (LOSIGMAS) THEN - DO JLEV = 1, KLEV - ZSIGM_(KIDIA:KFDIA,JLEV)= PSIGM(KIDIA:KFDIA,JLEV) + DO JLEV = 1, YDCPG_OPTS%KFLEVG + ZSIGM_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)= YDMF_PHYS_BASE_STATE%SRC(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV) ENDDO ENDIF - !initialise convective mas flux for subgrid condensation coming + !initialise convective mas flux for subgrid condensation coming !from previous time step convection scheme IF (LOSUBG_COND.AND..NOT.LOSIGMAS) THEN IF (LKFBCONV) THEN - DO JLEV = 1, KLEV - ZMFM_(KIDIA:KFDIA,JLEV)=PSIGM(KIDIA:KFDIA,JLEV) + DO JLEV = 1, YDCPG_OPTS%KFLEVG + ZMFM_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=YDMF_PHYS_BASE_STATE%SRC(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV) ENDDO ELSE - DO JLEV = 1, KLEV - ZMFM_(KIDIA:KFDIA,JLEV)=0._JPRB + DO JLEV = 1, YDCPG_OPTS%KFLEVG + ZMFM_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=0. ENDDO ENDIF ENDIF -!!! initialisation des variables d etat MNH �t +!!! initialisation des variables d etat MNH !initialisation de ZRM_ pour les hydrometeores (ri=qi/qd) - DO JLEV = 1, KLEV - DO JLON = KIDIA,KFDIA - ZTHM__(JLON,JLEV)=PTM(JLON,JLEV)/ZEXNREFM_(JLON,JLEV) - ZRM_(JLON,JLEV,1)=PQVM(JLON,JLEV)/ZQDM(JLON,JLEV) - ZRM_(JLON,JLEV,2)=PQCM(JLON,JLEV)/ZQDM(JLON,JLEV) - ZRM_(JLON,JLEV,3)=PQRM(JLON,JLEV)/ZQDM(JLON,JLEV) - ZRM_(JLON,JLEV,4)=PQIM(JLON,JLEV)/ZQDM(JLON,JLEV) - ZRM_(JLON,JLEV,5)=PQSM(JLON,JLEV)/ZQDM(JLON,JLEV) - ZRM_(JLON,JLEV,6)=PQGM(JLON,JLEV)/ZQDM(JLON,JLEV) + DO JLEV = 1, YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZTHM__(JLON,JLEV)=YDMF_PHYS_BASE_STATE%T(JLON,JLEV)/ZEXNREFM_(JLON,JLEV) + ZRM_(JLON,JLEV,1)=YDMF_PHYS_BASE_STATE%Q(JLON,JLEV)/ZQDM(JLON,JLEV) + ZRM_(JLON,JLEV,2)=YDMF_PHYS_BASE_STATE%L(JLON,JLEV)/ZQDM(JLON,JLEV) + ZRM_(JLON,JLEV,3)=YDMF_PHYS_BASE_STATE%R(JLON,JLEV)/ZQDM(JLON,JLEV) + ZRM_(JLON,JLEV,4)=YDMF_PHYS_BASE_STATE%I(JLON,JLEV)/ZQDM(JLON,JLEV) + ZRM_(JLON,JLEV,5)=YDMF_PHYS_BASE_STATE%S(JLON,JLEV)/ZQDM(JLON,JLEV) + ZRM_(JLON,JLEV,6)=YDMF_PHYS_BASE_STATE%G(JLON,JLEV)/ZQDM(JLON,JLEV) ENDDO ENDDO - + IF (NRR==7) THEN - DO JLEV = 1, KLEV - DO JLON = KIDIA,KFDIA - ZRM_(JLON,JLEV,7)=PQHM(JLON,JLEV)/ZQDM(JLON,JLEV) + DO JLEV = 1, YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZRM_(JLON,JLEV,7)=YDMF_PHYS_BASE_STATE%H(JLON,JLEV)/ZQDM(JLON,JLEV) ENDDO ENDDO ENDIF - + IF (NRR==6) THEN !initialisation de ZTHVREFM__ - DO JLEV = 1, KLEV - DO JLON = KIDIA,KFDIA + DO JLEV = 1, YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA ZTHVREFM__(JLON,JLEV)=ZTHM__(JLON,JLEV)*& & (1._JPRB+ZRM_(JLON,JLEV,1)*(RV/RD))/& & (1._JPRB+ZRM_(JLON,JLEV,1)+ZRM_(JLON,JLEV,2) +& @@ -1456,8 +1388,8 @@ IF (LMICRO.OR.LTURB.OR.LLMSE.OR.LKFBCONV) THEN ENDDO ENDDO ELSEIF (NRR==7) THEN - DO JLEV = 1, KLEV - DO JLON = KIDIA,KFDIA + DO JLEV = 1, YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA ZTHVREFM__(JLON,JLEV)=ZTHM__(JLON,JLEV)*& & (1._JPRB+ZRM_(JLON,JLEV,1)*(RV/RD))/& & (1._JPRB+ZRM_(JLON,JLEV,1)+ZRM_(JLON,JLEV,2) +& @@ -1470,17 +1402,17 @@ IF (LMICRO.OR.LTURB.OR.LLMSE.OR.LKFBCONV) THEN !!! initialisation des variables d etat MNH a t+dt !!! division pas le pas de temps -!!!(la multiplication par rhodj est faite plus tard, si necessaire, -!!! suivant les parametrisations) +!!!(la multiplication par rhodj est faite plus tard, si necessaire, +!!! suivant les parametrisations) ! initialise pointers : CALL SWAP_THS ! vent horizontal - DO JLEV = 1, KLEV - DO JLON=KIDIA,KFDIA - ZUS__(JLON,JLEV)= PUM(JLON,JLEV)*ZINVDT - ZVS__(JLON,JLEV)= PVM(JLON,JLEV)*ZINVDT - ZWS__(JLON,JLEV)= PWM(JLON,JLEV)*ZINVDT + DO JLEV = 1, YDCPG_OPTS%KFLEVG + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZUS__(JLON,JLEV)= YDMF_PHYS_BASE_STATE%U(JLON,JLEV)*ZINVDT + ZVS__(JLON,JLEV)= YDMF_PHYS_BASE_STATE%V(JLON,JLEV)*ZINVDT + ZWS__(JLON,JLEV)= YDMF_PHYS_BASE_STATE%YCPG_PHY%W(JLON,JLEV)*ZINVDT ZTKES_(JLON,JLEV)= ZTKEM(JLON,JLEV)*ZINVDT ZTHS__(JLON,JLEV)=ZTHM__(JLON,JLEV)*ZINVDT ENDDO @@ -1490,8 +1422,8 @@ IF (LMICRO.OR.LTURB.OR.LLMSE.OR.LKFBCONV) THEN ! initialise pointers : CALL SWAP_RS DO JRR=1,NRR - DO JLEV = 1, KLEV - DO JLON=KIDIA,KFDIA + DO JLEV = 1, YDCPG_OPTS%KFLEVG + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA ZRS_(JLON,JLEV,JRR)=ZRM_(JLON,JLEV,JRR)*ZINVDT ENDDO ENDDO @@ -1499,17 +1431,17 @@ IF (LMICRO.OR.LTURB.OR.LLMSE.OR.LKFBCONV) THEN !!! Initialisations temporaires d'arguments non-utilises !initialisation de ZCIT_ - ZCIT_(KIDIA:KFDIA,1:IKT)=0.0_JPRB + ZCIT_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:IKT)=0.0_JPRB - !initialisation des tableaux de precipitations inst. and cumulated + !initialisation des tableaux de precipitations inst. and cumulated !and surface fluxes for turbulence IF (LLMSE.OR.LSFORCS) THEN - ZACPRR_(KIDIA:KFDIA)=PGPAR(KIDIA:KFDIA,MACPRR) - ZACPRS_(KIDIA:KFDIA)=PGPAR(KIDIA:KFDIA,MACPRS) - ZACPRG_(KIDIA:KFDIA)=PGPAR(KIDIA:KFDIA,MACPRG) - ZINPRR_NOTINCR_(KIDIA:KFDIA)=PGPAR(KIDIA:KFDIA,MINPRR) - ZINPRS_NOTINCR_(KIDIA:KFDIA)=PGPAR(KIDIA:KFDIA,MINPRS) - ZINPRG_NOTINCR_(KIDIA:KFDIA)=PGPAR(KIDIA:KFDIA,MINPRG) + ZACPRR_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=YDCPG_GPAR%ACPRR(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA) + ZACPRS_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=YDCPG_GPAR%ACPRS(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA) + ZACPRG_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=YDCPG_GPAR%ACPRG(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA) + ZINPRR_NOTINCR_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=YDCPG_GPAR%INPRR(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA) + ZINPRS_NOTINCR_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=YDCPG_GPAR%INPRS(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA) + ZINPRG_NOTINCR_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=YDCPG_GPAR%INPRG(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA) ENDIF !initialisation des scalaires passifs @@ -1517,10 +1449,10 @@ IF (LMICRO.OR.LTURB.OR.LLMSE.OR.LKFBCONV) THEN CALL SWAP_SVM CALL SWAP_SVS DO JGFL=1,NGFL_EXT - DO JLEV = 1, KLEV - DO JLON=KIDIA,KFDIA - ZSVM_(JLON,JLEV,JGFL)=PSVM(JLON,JLEV,JGFL) - ZSVS_(JLON,JLEV,JGFL)=PSVM(JLON,JLEV,JGFL)*ZINVDT + DO JLEV = 1, YDCPG_OPTS%KFLEVG + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZSVM_(JLON,JLEV,JGFL)=YDMF_PHYS_BASE_STATE%P1EXT(JLON,JLEV,JGFL) + ZSVS_(JLON,JLEV,JGFL)=YDMF_PHYS_BASE_STATE%P1EXT(JLON,JLEV,JGFL)*ZINVDT ENDDO ENDDO ENDDO @@ -1529,10 +1461,10 @@ IF (LMICRO.OR.LTURB.OR.LLMSE.OR.LKFBCONV) THEN ! initialise pointers : CALL SWAP_LIMAS DO JGFL=1,NLIMA - DO JLEV = 1, KLEV - DO JLON=KIDIA,KFDIA - ZLIMAM_(JLON,JLEV,JGFL)=PLIMAM(JLON,JLEV,JGFL) - ZLIMAS_(JLON,JLEV,JGFL)=PLIMAM(JLON,JLEV,JGFL)*ZINVDT + DO JLEV = 1, YDCPG_OPTS%KFLEVG + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZLIMAM_(JLON,JLEV,JGFL)=YDMF_PHYS_BASE_STATE%P1LIMA(JLON,JLEV,JGFL) + ZLIMAS_(JLON,JLEV,JGFL)=YDMF_PHYS_BASE_STATE%P1LIMA(JLON,JLEV,JGFL)*ZINVDT ENDDO ENDDO ENDDO @@ -1540,24 +1472,24 @@ IF (LMICRO.OR.LTURB.OR.LLMSE.OR.LKFBCONV) THEN ENDIF ! daand: radflex -ZFRSO => PFRSO(:,:,1) -ZFRTH => PFRTH(:,:,1) +ZFRSO => YDMF_PHYS%OUT%FRSO(:,:,1) +ZFRTH => YDMF_PHYS%OUT%FRTH(:,:,1) ! ------------------------------------------------------------------ ! 3 - PRINTS FOR DIAGNOSTICS IF NEEDED ! ------------------------------------------------------------------ IF (LDIAGWMAX) THEN - IF (MOD(KSTEP+1,NDIAGWMAX)==0) THEN + IF (MOD(YDCPG_OPTS%KSTEP+1,NDIAGWMAX)==0) THEN ! calcul de wmax - DO JLEV = 1 , KLEV + DO JLEV = 1 , YDCPG_OPTS%KFLEVG Z_WMAX=0._JPRB Z_WMIN=0._JPRB - DO JLON=KIDIA,KFDIA - IF (PWM(JLON,JLEV)>Z_WMAX) THEN - Z_WMAX=PWM(JLON,JLEV) + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + IF (YDMF_PHYS_BASE_STATE%YCPG_PHY%W(JLON,JLEV)>Z_WMAX) THEN + Z_WMAX=YDMF_PHYS_BASE_STATE%YCPG_PHY%W(JLON,JLEV) ENDIF - IF (PWM(JLON,JLEV)<Z_WMIN) THEN - Z_WMIN=PWM(JLON,JLEV) + IF (YDMF_PHYS_BASE_STATE%YCPG_PHY%W(JLON,JLEV)<Z_WMIN) THEN + Z_WMIN=YDMF_PHYS_BASE_STATE%YCPG_PHY%W(JLON,JLEV) ENDIF ENDDO ENDDO @@ -1566,15 +1498,15 @@ ENDIF IF (LFLEXDIA) THEN !save tendencies - ZTENDTBAK(KIDIA:KFDIA,1:KLEV)=PTENDT(KIDIA:KFDIA,1:KLEV) + ZTENDTBAK(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG)=ZTENDT(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG) DO JR=1,NRR - ZTENDRBAK(KIDIA:KFDIA,1:KLEV,JR)=PTENDR(KIDIA:KFDIA,1:KLEV,JR) + ZTENDRBAK(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG,JR)=ZTENDRA(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG,JR) ENDDO ENDIF ! ------------------------------------------------------------------ -! 4 - ADJUSTMENT (CALLED IF THE MICROPHYSICS IS SWITCH ON) +! 4 - ADJUSTMENT (CALLED IF THE MICROPHYSICS IS SWITCH ON) ! ------------------------------------------------------------------ IF (LMICRO) THEN @@ -1585,150 +1517,130 @@ IF (LMICRO) THEN IF (LMFSHAL .AND. (CMF_CLOUD=='DIRE'.OR.CMF_CLOUD=='BIGA')) THEN IOFF_MFSHAL=IOFF_MFSHAL+3 - IF (KSTEP==0) THEN - DO JLEV = 1, KLEV - ZRC_MF_(KIDIA:KFDIA,JLEV)=0._JPRB - ZRI_MF_(KIDIA:KFDIA,JLEV)=0._JPRB - ZCF_MF_(KIDIA:KFDIA,JLEV)=0._JPRB + IF (YDCPG_OPTS%KSTEP==0) THEN + DO JLEV = 1, YDCPG_OPTS%KFLEVG + ZRC_MF_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=0._JPRB + ZRI_MF_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=0._JPRB + ZCF_MF_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=0._JPRB ENDDO ELSE - DO JLEV = 1, KLEV - ZRC_MF_(KIDIA:KFDIA,JLEV)=PEZDIAG(KIDIA:KFDIA,JLEV,1) - ZRI_MF_(KIDIA:KFDIA,JLEV)=PEZDIAG(KIDIA:KFDIA,JLEV,3) - ZCF_MF_(KIDIA:KFDIA,JLEV)=PEZDIAG(KIDIA:KFDIA,JLEV,2) + DO JLEV = 1, YDCPG_OPTS%KFLEVG + ZRC_MF_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=ZP1EZDIAG(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV,1) + ZRI_MF_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=ZP1EZDIAG(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV,3) + ZCF_MF_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=ZP1EZDIAG(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV,2) ENDDO ENDIF - PEZDIAG(KIDIA:KFDIA,1:KLEV,1:3)=0._JPRB + ZP1EZDIAG(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG,1:3)=0._JPRB ELSE - DO JLEV = 1, KLEV - ZRC_MF_(KIDIA:KFDIA,JLEV)=0._JPRB - ZRI_MF_(KIDIA:KFDIA,JLEV)=0._JPRB - ZCF_MF_(KIDIA:KFDIA,JLEV)=0._JPRB + DO JLEV = 1, YDCPG_OPTS%KFLEVG + ZRC_MF_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=0._JPRB + ZRI_MF_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=0._JPRB + ZCF_MF_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=0._JPRB ENDDO ENDIF - IF (MOD(KSTEP+1,NPRINTFR)==0) THEN + IF (MOD(YDCPG_OPTS%KSTEP+1,NPRINTFR)==0) THEN WRITE(NULOUT,*)'avant aro_adjust sous apl_arome' WRITE(NULOUT,*)'JLEV ZZZ_F_ RHODJM EXNREFM PABSM THM SIGM MFM ' - DO JLEV=1,KLEV+1 + DO JLEV=1,YDCPG_OPTS%KFLEVG WRITE(NULOUT,'(I2,X,7F10.3)') JLEV,ZZZ_F_(NPTP,JLEV),ZRHODJM__(NPTP,JLEV),& & ZEXNREFM_(NPTP,JLEV), ZPABSM__(NPTP,JLEV), ZTHM__(NPTP,JLEV), ZSIGM_(NPTP,JLEV), ZMFM_(NPTP,JLEV) ENDDO WRITE (NULOUT,*)'JLEV rhoQv rhoQc rhoQr rhoQi rhoQs rhoQg' - DO JLEV=1,KLEV + DO JLEV=1,YDCPG_OPTS%KFLEVG WRITE(NULOUT,'(I2,X,6E11.4)') JLEV,ZRM_(NPTP,JLEV,1),& - & ZRM_(NPTP,JLEV,2), ZRM_(NPTP,JLEV,3),ZRM_(NPTP,JLEV,4),ZRM_(NPTP,JLEV,5), ZRM_(NPTP,JLEV,6) + & ZRM_(NPTP,JLEV,2), ZRM_(NPTP,JLEV,3),ZRM_(NPTP,JLEV,4),ZRM_(NPTP,JLEV,5), ZRM_(NPTP,JLEV,6) ENDDO WRITE (NULOUT,*)'JLEV ZRC_MF_ ZRI_MF_ ZCF_MF_ ZTHSIN_ ZSRCS__ ZNEBMNH_' - DO JLEV=1,KLEV + DO JLEV=1,YDCPG_OPTS%KFLEVG WRITE(NULOUT,'(I2,X,6E11.4)') JLEV,ZRC_MF_(NPTP,JLEV),& & ZRI_MF_(NPTP,JLEV),ZCF_MF_(NPTP,JLEV), ZTHSIN_(NPTP,JLEV),ZSRCS__(NPTP,JLEV), ZNEBMNH_(NPTP,JLEV) ENDDO ENDIF ! for now a copy is needed (see below, inside). I don't like than :-( REK - ZTHS__(KIDIA:KFDIA,1:KLEV)=ZTHSIN_(KIDIA:KFDIA,1:KLEV) - ZRS_(KIDIA:KFDIA,1:KLEV,1:NRR)=ZRSIN_(KIDIA:KFDIA,1:KLEV,1:NRR) + ZTHS__(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG)=ZTHSIN_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG) + ZRS_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG,1:NRR)=ZRSIN_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG,1:NRR) IF (CMICRO == 'LIMA') THEN CALL SWAP_LIMAS ! for now a copy is needed (see below, inside). I don't like than :-( REK - ZLIMAS_(KIDIA:KFDIA,1:KLEV,1:NLIMA)=ZLIMASIN_(KIDIA:KFDIA,1:KLEV,1:NLIMA) - - CALL ARO_ADJUST_LIMA (KLEV,IKU,IKL,KFDIA,KLEV,NRR,NLIMA,KSTEP+1,& - & LOSUBG_COND, LOSIGMAS, LOCND2, & - & ZDT,VSIGQSAT,ZZZ_F_,& - & ZRHODJM__(:,1:KLEV),& - & ZRHODREFM__(:,1:KLEV),& - & ZEXNREFM_,& - & ZPABSM__(:,1:KLEV),& - & ZTHM__(:,1:KLEV),& - & ZRM_,& - & ZLIMAM_,& - & ZSIGM_,& - & ZMFM_,ZRC_MF_,& - & ZRI_MF_,ZCF_MF_,& - & ZTHS__(:,1:KLEV),ZRS_,& - & ZLIMAS_,& - & ZSRCS__(:,1:KLEV),ZNEBMNH_,& - & YDDDH, YDMODEL%YRML_DIAG%YRLDDH, YDMODEL%YRML_DIAG%YRMDDH) + ZLIMAS_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG,1:NLIMA)=ZLIMASIN_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG,1:NLIMA) + + CALL ARO_ADJUST_LIMA (YDCPG_OPTS%KFLEVG, IKU, IKL, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KFLEVG, NRR, & + & NLIMA, YDCPG_OPTS%KSTEP+1, LOSUBG_COND, LOSIGMAS, LOCND2, ZDT, VSIGQSAT, ZZZ_F_, ZRHODJM__(:, 1:YDCPG_OPTS%KFLEVG), & + & ZRHODREFM__(:, 1:YDCPG_OPTS%KFLEVG), ZEXNREFM_, ZPABSM__(:, 1:YDCPG_OPTS%KFLEVG), ZTHM__(:, 1:YDCPG_OPTS%KFLEVG), & + & ZRM_, ZLIMAM_, ZSIGM_, ZMFM_, ZRC_MF_, ZRI_MF_, ZCF_MF_, ZTHS__(:, 1:YDCPG_OPTS%KFLEVG), ZRS_, & + & ZLIMAS_, ZSRCS__(:, 1:YDCPG_OPTS%KFLEVG), ZNEBMNH_, YDDDH, YDMODEL%YRML_DIAG%YRLDDH, YDMODEL%YRML_DIAG%YRMDDH & + & ) ELSE - CALL ARO_ADJUST (KLEV,IKU,IKL,KFDIA,KLEV,NRR,& - & NGFL_EZDIAG, & - & CFRAC_ICE_ADJUST, CCONDENS, CLAMBDA3, LOSUBG_COND, & - & LOSIGMAS, CMICRO, LOCND2, CSUBG_MF_PDF, & - & ZDT,VSIGQSAT,ZZZ_F_,& - & ZRHODJM__(:,1:KLEV),& - & ZEXNREFM_,& - & ZRHODREFM__(:,1:KLEV),& - & ZPABSM__(:,1:KLEV),& - & ZTHM__(:,1:KLEV),& - & ZRM_,ZSIGM_,& - & ZMFM_,ZRC_MF_,& - & ZRI_MF_,ZCF_MF_,& - & ZTHS__(:,1:KLEV),ZRS_,& - & ZSRCS__(:,1:KLEV),ZNEBMNH_,& - & ZHLC_HRC__(:,1:KLEV), ZHLC_HCF__(:,1:KLEV),& - & ZHLI_HRI__(:,1:KLEV), ZHLI_HCF__(:,1:KLEV),& - & PGP2DSPP,PEZDIAG,& - & YDDDH, YDMODEL%YRML_DIAG%YRLDDH, YDMODEL%YRML_DIAG%YRMDDH) + CALL ARO_ADJUST (YDCPG_OPTS%KFLEVG, IKU, IKL, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KFLEVG, NRR, & + & CFRAC_ICE_ADJUST, CCONDENS, CLAMBDA3, LOSUBG_COND, & + & LOSIGMAS, CMICRO, LOCND2, LHGT_QS, CSUBG_MF_PDF, & + & ZDT, VSIGQSAT, ZZZ_F_, ZRHODJM__(:, 1:YDCPG_OPTS%KFLEVG), & + & ZEXNREFM_, ZRHODREFM__(:, 1:YDCPG_OPTS%KFLEVG), ZPABSM__(:, 1:YDCPG_OPTS%KFLEVG), ZTHM__(:, 1:YDCPG_OPTS%KFLEVG), ZRM_, ZSIGM_, & + & ZMFM_, ZRC_MF_, ZRI_MF_, ZCF_MF_, ZTHS__(:, 1:YDCPG_OPTS%KFLEVG), ZRS_, ZSRCS__(:, 1:YDCPG_OPTS%KFLEVG), & + & ZNEBMNH_, & + & ZICLDFR_,ZWCLDFR_,ZSSIO_,ZSSIU_,ZIFR_,& + & ZHLC_HRC_, ZHLC_HCF_, ZHLI_HRI_, ZHLI_HCF_, & + & YDDDH, YDMODEL%YRML_DIAG%YRLDDH, YDMODEL%YRML_DIAG%YRMDDH,& + & ZSPP_ALL%YSPP_PSIGQSAT,ZSPP_ALL%YSPP_ICE_CLD_WGT) ENDIF - IF (MOD(KSTEP+1,NPRINTFR)==0) THEN + IF (MOD(YDCPG_OPTS%KSTEP+1,NPRINTFR)==0) THEN WRITE(NULOUT,*)'apres aro_adjust sous apl_arome' - WRITE(NULOUT,*)'JLEV ZZZ_F_ RHODJM EXNREFM PABSM THM SIGM MFM ' - DO JLEV=1,KLEV+1 + WRITE(NULOUT,*)'JLEV ZZZ_F_ RHODJM EXNREFM PABSM THM SIGM MFM ' + DO JLEV=1,YDCPG_OPTS%KFLEVG WRITE(NULOUT,'(I2,X,7F10.3)') JLEV,ZZZ_F_(NPTP,JLEV),ZRHODJM__(NPTP,JLEV),& & ZEXNREFM_(NPTP,JLEV), ZPABSM__(NPTP,JLEV), ZTHM__(NPTP,JLEV), ZSIGM_(NPTP,JLEV), ZMFM_(NPTP,JLEV) ENDDO WRITE (NULOUT,*)'JLEV rhoQv rhoQc rhoQr rhoQi rhoQs rhoQg' - DO JLEV=1,KLEV + DO JLEV=1,YDCPG_OPTS%KFLEVG WRITE(NULOUT,'(I2,X,6E11.4)') JLEV,ZRS_(NPTP,JLEV,1),& - & ZRS_(NPTP,JLEV,2), ZRS_(NPTP,JLEV,3),ZRS_(NPTP,JLEV,4),ZRS_(NPTP,JLEV,5), ZRS_(NPTP,JLEV,6) + & ZRS_(NPTP,JLEV,2), ZRS_(NPTP,JLEV,3),ZRS_(NPTP,JLEV,4),ZRS_(NPTP,JLEV,5), ZRS_(NPTP,JLEV,6) ENDDO WRITE (NULOUT,*)'JLEV ZRC_MF_ ZRI_MF_ ZCF_MF_ ZTHS__ ZSRCS__ ZNEBMNH_' - DO JLEV=1,KLEV + DO JLEV=1,YDCPG_OPTS%KFLEVG WRITE(NULOUT,'(I2,X,6E11.4)')JLEV,ZRC_MF_(NPTP,JLEV),& & ZRI_MF_(NPTP,JLEV),ZCF_MF_(NPTP,JLEV), ZTHS__(NPTP,JLEV),ZSRCS__(NPTP,JLEV), ZNEBMNH_(NPTP,JLEV) ENDDO ENDIF - DO JLEV=1,KLEV - PCLFS(KIDIA:KFDIA,JLEV)=ZNEBMNH_(KIDIA:KFDIA,JLEV) + DO JLEV=1,YDCPG_OPTS%KFLEVG + YDVARS%A%T1(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=ZNEBMNH_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV) ENDDO !adjusted zthm and zrm - DO JLEV = 1, KLEV - DO JLON = KIDIA,KFDIA - ZTHM__(JLON,JLEV)=ZTHS__(JLON,JLEV)*PDT + DO JLEV = 1, YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZTHM__(JLON,JLEV)=ZTHS__(JLON,JLEV)*YDCPG_OPTS%ZDTPHY ENDDO ENDDO DO JRR=1,NRR - DO JLEV = 1, KLEV - DO JLON = KIDIA,KFDIA - ZRM_(JLON,JLEV,JRR)=ZRS_(JLON,JLEV,JRR)*PDT + DO JLEV = 1, YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZRM_(JLON,JLEV,JRR)=ZRS_(JLON,JLEV,JRR)*YDCPG_OPTS%ZDTPHY ENDDO ENDDO ENDDO - - !initialisation de qdm utile pour - !convertir tendance de r en tendance de q + !initialisation de qdm utile pour + !convertir tendance de r en tendance de q IF (NRR==6) THEN - DO JLEV=1,KLEV - DO JLON= KIDIA, KFDIA + DO JLEV=1,YDCPG_OPTS%KFLEVG + DO JLON= YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA ZQDM(JLON,JLEV)=1._JPRB/(1._JPRB+ZRM_(JLON,JLEV,1)+& &ZRM_(JLON,JLEV,2)+ZRM_(JLON,JLEV,3)+ZRM_(JLON,JLEV,4)+ZRM_(JLON,JLEV,5)+& &ZRM_(JLON,JLEV,6) ) ENDDO ENDDO ELSEIF (NRR==7) THEN - DO JLEV=1,KLEV - DO JLON= KIDIA, KFDIA + DO JLEV=1,YDCPG_OPTS%KFLEVG + DO JLON= YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA ZQDM(JLON,JLEV)=1._JPRB/(1._JPRB+ZRM_(JLON,JLEV,1)+& &ZRM_(JLON,JLEV,2)+ZRM_(JLON,JLEV,3)+ZRM_(JLON,JLEV,4)+ZRM_(JLON,JLEV,5)+& &ZRM_(JLON,JLEV,6)+ZRM_(JLON,JLEV,7) ) @@ -1736,8 +1648,8 @@ IF (LMICRO) THEN ENDDO ENDIF !reinitialisation des qi - DO JLEV = 1, KLEV - DO JLON = KIDIA,KFDIA + DO JLEV = 1, YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA ZQVM(JLON,JLEV)=ZRM_(JLON,JLEV,1)*ZQDM(JLON,JLEV) ZQCM(JLON,JLEV)=ZRM_(JLON,JLEV,2)*ZQDM(JLON,JLEV) ZQRM(JLON,JLEV)=ZRM_(JLON,JLEV,3)*ZQDM(JLON,JLEV) @@ -1748,158 +1660,170 @@ IF (LMICRO) THEN ENDDO IF (NRR==7) THEN - DO JLEV = 1,KLEV - DO JLON = KIDIA,KFDIA + DO JLEV = 1,YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA ZQHM(JLON,JLEV)=ZRM_(JLON,JLEV,7)*ZQDM(JLON,JLEV) ENDDO ENDDO ELSE - ZQHM(KIDIA:KFDIA,1:KLEV)=0._JPRB + ZQHM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG)=0._JPRB ENDIF ! Tendances des variables LIMA DO JGFL=1,NLIMA - DO JLEV = 1, KLEV + DO JLEV = 1, YDCPG_OPTS%KFLEVG ! Réinitialisation des variables LIMA - DO JLON=KIDIA,KFDIA - ZLIMAM_(JLON,JLEV,JGFL)=ZLIMAS_(JLON,JLEV,JGFL)*PDT - PTENDLIMA(JLON,JLEV,JGFL)=PTENDLIMA(JLON,JLEV,JGFL)+(ZLIMAS_(JLON,JLEV,JGFL)-ZLIMASIN_(JLON,JLEV,JGFL)) + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZLIMAM_(JLON,JLEV,JGFL)=ZLIMAS_(JLON,JLEV,JGFL)*YDCPG_OPTS%ZDTPHY + ZTENDLIMA(JLON,JLEV,JGFL)=ZTENDLIMA(JLON,JLEV,JGFL)+(ZLIMAS_(JLON,JLEV,JGFL)-ZLIMASIN_(JLON,JLEV,JGFL)) ENDDO ENDDO ENDDO !modif de R et CP - ZQHGM(KIDIA:KFDIA,:)=ZQHM(KIDIA:KFDIA,:)+ZQGM(KIDIA:KFDIA,:) - CALL GPRCP(KLON,KIDIA,KFDIA,KLEV,PQ=ZQVM,PQI=ZQIM,PQL=ZQCM,PQR=ZQRM,PQS=ZQSM,PQG=ZQHGM,PCP=ZCPM,PR=ZRHM) + ZQHGM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,:)=ZQHM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,:)+ZQGM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,:) + CALL GPRCP(YDCPG_OPTS%KLON, YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KFLEVG, PQ=ZQVM, PQI=ZQIM, & + & PQL=ZQCM, PQR=ZQRM, PQS=ZQSM, PQG=ZQHGM, PCP=ZCPM, PR=ZRHM) - DO JLEV = 1,KLEV - DO JLON = KIDIA,KFDIA + DO JLEV = 1,YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA ZTM(JLON,JLEV)=ZTHM__(JLON,JLEV)*ZEXNREFM_(JLON,JLEV) !reinitialisation de ZRHODREFM__ (=qd*zrho) - ZRHO=PAPRSFM(JLON,JLEV)/(ZRHM(JLON,JLEV)*ZTM(JLON,JLEV)) + ZRHO=YDMF_PHYS_BASE_STATE%YCPG_PHY%PREF(JLON,JLEV)/(ZRHM(JLON,JLEV)*ZTM(JLON,JLEV)) ZRHODREFM__(JLON,JLEV)=ZRHO*ZQDM(JLON,JLEV) ENDDO ENDDO !geopotentiel calculation - ZAPHIM(KIDIA:KFDIA,KLEV)=PAPHIM(KIDIA:KFDIA,KLEV) - CALL GPGEO(KLON,KIDIA,KFDIA,KLEV,ZAPHIM,ZAPHIFM,ZTM,ZRHM,PLNPRM,PALPHM,YDGEOMETRY%YRVERT_GEOM) + ZAPHIM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG)=YDMF_PHYS_BASE_STATE%YCPG_DYN%PHI(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG) + CALL GPGEO(YDCPG_OPTS%KLON, YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KFLEVG, ZAPHIM, ZAPHIFM, & + & ZTM, ZRHM, YDMF_PHYS_BASE_STATE%YCPG_PHY%XYB%LNPR, YDMF_PHYS_BASE_STATE%YCPG_PHY%XYB%ALPH, YDGEOMETRY%YRVERT_GEOM& + & ) !calcul de l'altitude - DO JLEV = 1, KLEV - DO JLON = KIDIA,KFDIA + DO JLEV = 1, YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA ZZZ_(JLON,JLEV)=ZAPHIM(JLON,JLEV)*ZINVG !initialisation de ZZZ_F_ ZZZ_F_(JLON,JLEV)=ZAPHIFM(JLON,JLEV)*ZINVG ! tendency of T - PTENDT(JLON,JLEV)=PTENDT(JLON,JLEV)+(ZTHS__(JLON,JLEV)-ZTHSIN_(JLON,JLEV))*ZEXNREFM_(JLON,JLEV) - ZTENDT(JLON,JLEV)=ZTHS__(JLON,JLEV)-ZTHSIN_(JLON,JLEV) + ZTENDT(JLON,JLEV)=ZTENDT(JLON,JLEV)+(ZTHS__(JLON,JLEV)-ZTHSIN_(JLON,JLEV))*ZEXNREFM_(JLON,JLEV) + ZTENDTT(JLON,JLEV)=ZTHS__(JLON,JLEV)-ZTHSIN_(JLON,JLEV) ENDDO ENDDO - !inversion niveaux tendances des ri et conversion en qi en multipliant par qd + !inversion niveaux tendances des ri et conversion en qi en multipliant par qd DO JR=1,NRR - DO JLEV=1,KLEV - DO JLON=KIDIA,KFDIA - PTENDR(JLON,JLEV,JR)=PTENDR(JLON,JLEV,JR)+(ZRS_(JLON,JLEV,JR)-ZRSIN_(JLON,JLEV,JR))*ZQDM(JLON,JLEV) + DO JLEV=1,YDCPG_OPTS%KFLEVG + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZTENDRA(JLON,JLEV,JR)=ZTENDRA(JLON,JLEV,JR)+(ZRS_(JLON,JLEV,JR)-ZRSIN_(JLON,JLEV,JR))*ZQDM(JLON,JLEV) ENDDO ENDDO ENDDO !initialisation de ZDZZ_ - DO JLON = KIDIA,KFDIA + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA ZDZZ_(JLON,1)=ZAPHIM(JLON,0)*ZINVG-ZZZ_(JLON,1) ENDDO - DO JLEV = 2, KLEV - DO JLON = KIDIA,KFDIA + DO JLEV = 2, YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA ZDZZ_(JLON,JLEV)=ZZZ_(JLON,JLEV+IKL)-ZZZ_(JLON,JLEV) ENDDO ENDDO ELSE - ZTM (KIDIA:KFDIA,1:KLEV)=PTM(KIDIA:KFDIA,1:KLEV) - ZRHM(KIDIA:KFDIA,1:KLEV)=PRM(KIDIA:KFDIA,1:KLEV) - ZQVM(KIDIA:KFDIA,1:KLEV)=PQVM(KIDIA:KFDIA,1:KLEV) - ZQIM(KIDIA:KFDIA,1:KLEV)=PQIM(KIDIA:KFDIA,1:KLEV) - ZQCM(KIDIA:KFDIA,1:KLEV)=PQCM(KIDIA:KFDIA,1:KLEV) - ZQRM(KIDIA:KFDIA,1:KLEV)=PQRM(KIDIA:KFDIA,1:KLEV) - ZQSM(KIDIA:KFDIA,1:KLEV)=PQSM(KIDIA:KFDIA,1:KLEV) - ZQGM(KIDIA:KFDIA,1:KLEV)=PQGM(KIDIA:KFDIA,1:KLEV) + ZTM (YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG)=YDMF_PHYS_BASE_STATE%T(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG) + ZRHM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG)=YDMF_PHYS_BASE_STATE%YCPG_DYN%RCP%R(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG) + ZQVM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG)=YDMF_PHYS_BASE_STATE%Q(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG) + ZQIM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG)=YDMF_PHYS_BASE_STATE%I(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG) + ZQCM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG)=YDMF_PHYS_BASE_STATE%L(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG) + ZQRM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG)=YDMF_PHYS_BASE_STATE%R(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG) + ZQSM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG)=YDMF_PHYS_BASE_STATE%S(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG) + ZQGM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG)=YDMF_PHYS_BASE_STATE%G(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG) IF (NRR==7) THEN - ZQHM(KIDIA:KFDIA,1:KLEV)=PQHM(KIDIA:KFDIA,1:KLEV) + ZQHM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG)=YDMF_PHYS_BASE_STATE%H(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG) ELSE - ZQHM(KIDIA:KFDIA,1:KLEV)=0._JPRB + ZQHM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG)=0._JPRB ENDIF - ZCPM(KIDIA:KFDIA,KTDIA:KLEV)=PCPM(KIDIA:KFDIA,KTDIA:KLEV) - ZAPHIM(KIDIA:KFDIA,0:KLEV)=PAPHIM(KIDIA:KFDIA,0:KLEV) - ZAPHIFM(KIDIA:KFDIA,1:KLEV)=PAPHIFM(KIDIA:KFDIA,1:KLEV) - ZZZ_(KIDIA:KFDIA,1:KLEV)=PAPHIM(KIDIA:KFDIA,1:KLEV)*ZINVG + ZCPM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,YDCPG_OPTS%KTDIA:YDCPG_OPTS%KFLEVG)=YDMF_PHYS_BASE_STATE%YCPG_DYN%RCP%CP(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,YDCPG_OPTS%KTDIA:YDCPG_OPTS%KFLEVG) + ZAPHIM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,0:YDCPG_OPTS%KFLEVG)=YDMF_PHYS_BASE_STATE%YCPG_DYN%PHI(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,0:YDCPG_OPTS%KFLEVG) + ZAPHIFM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG)=YDMF_PHYS_BASE_STATE%YCPG_DYN%PHIF(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG) + ZZZ_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG)=YDMF_PHYS_BASE_STATE%YCPG_DYN%PHI(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG)*ZINVG !initialisation of PCLFS outside LMICRO to be zero in case LMICRO=F - PCLFS(KIDIA:KFDIA,1:KLEV)=0._JPRB + YDVARS%A%T1(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG)=0._JPRB ENDIF ! ADJUSTMENT LMICRO +! ------------------------------------------------------------------ +! NEBULOSITE (CONVECTIVE+STRATIFORME) A TROIS NIVEAUX. +! DIAGNOSTIC OF THREE LEVELS (CONVECTIVE+STRATIFORM) CLOUDINESS. + +! protect cloudiness from being 0 or 1 (needed for ACRANEB2 and ACNPART) +DO JLEV=YDCPG_OPTS%KTDIA,YDCPG_OPTS%KFLEVG + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZNEB0(JLON,JLEV)=MAX(ZEPSNEB,MIN(1._JPRB-ZEPSNEB,YDVARS%A%T1(JLON,JLEV))) + ENDDO +ENDDO + +! decorrelation depth for cloud overlaps + +IF (LRNUEXP) THEN + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZDECRD(JLON)=RDECRD1+RDECRD2*EXP(-((ASIN(YDVARS%GEOMETRY%GEMU%T0(JLON))-RDECRD3*RDECLI)/RDECRD4)**2) + ENDDO +ENDIF + +! calculate high, medium, low and total cloud cover +CALL ACNPART(YDCST, YDMODEL%YRML_PHY_MF,YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA,YDCPG_OPTS%KLON,NTNEBU,YDCPG_OPTS%KFLEVG,& + & YDMF_PHYS_BASE_STATE%YCPG_DYN%PHI,YDMF_PHYS_BASE_STATE%YCPG_DYN%PHIF,YDMF_PHYS_BASE_STATE%YCPG_PHY%PREF,ZDECRD,ZNEB0,& + & YDMF_PHYS%OUT%CLCH, YDMF_PHYS%OUT%CLCM, YDMF_PHYS%OUT%CLCL, YDCPG_MISC%CLCT, ZCLCT_RAD) + IF (LFLEXDIA) THEN - DO JLEV = 1, KLEV - DO JLON=KIDIA,KFDIA - ZTMPAF(JLON,JLEV)=(PTENDT(JLON,JLEV)-ZTENDTBAK(JLON,JLEV))*PDELPM(JLON,JLEV)*ZINVG*ZCPM(JLON,JLEV) + DO JLEV = 1, YDCPG_OPTS%KFLEVG + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZTMPAF(JLON,JLEV)=(ZTENDT(JLON,JLEV)-ZTENDTBAK(JLON,JLEV))*YDMF_PHYS_BASE_STATE%YCPG_PHY%XYB%DELP(JLON,JLEV)*ZINVG*ZCPM(JLON,JLEV) ENDDO ENDDO - IF (LDDH_OMP) THEN - CALL NEW_ADD_FIELD_3D(YDMODEL%YRML_DIAG%YRMDDH,ZTMPAF,'TCTADJU',YDDDH) - ELSE - CALL ADD_FIELD_3D(YLDDH,ZTMPAF,'TCTADJU','T','ARP',.TRUE.,.TRUE.) - ENDIF + CALL NEW_ADD_FIELD_3D(YDMODEL%YRML_DIAG%YRMDDH,ZTMPAF,'TCTADJU',YDDDH) DO JR=1,NRR CLNAME='T'//CLVARNAME(JR)//'ADJU' - DO JLEV = 1, KLEV - DO JLON=KIDIA,KFDIA - ZTMPAF(JLON,JLEV)=(PTENDR(JLON,JLEV,JR)-ZTENDRBAK(JLON,JLEV,JR))*PDELPM(JLON,JLEV)*ZINVG + DO JLEV = 1, YDCPG_OPTS%KFLEVG + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZTMPAF(JLON,JLEV)=(ZTENDRA(JLON,JLEV,JR)-ZTENDRA(JLON,JLEV,JR))*YDMF_PHYS_BASE_STATE%YCPG_PHY%XYB%DELP(JLON,JLEV)*ZINVG ENDDO ENDDO - IF (LDDH_OMP) THEN - CALL NEW_ADD_FIELD_3D(YDMODEL%YRML_DIAG%YRMDDH,ZTMPAF,CLNAME,YDDDH) - ELSE - CALL ADD_FIELD_3D(YLDDH,ZTMPAF,CLNAME,'T','ARP',.TRUE.,.TRUE.) - ENDIF - DO JLEV = 1, KLEV - DO JLON=KIDIA,KFDIA - ZTMPAF(JLON,JLEV)=PCLFS(JLON,JLEV)*PDELPM(JLON,JLEV) + CALL NEW_ADD_FIELD_3D(YDMODEL%YRML_DIAG%YRMDDH,ZTMPAF,CLNAME,YDDDH) + DO JLEV = 1, YDCPG_OPTS%KFLEVG + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZTMPAF(JLON,JLEV)=YDVARS%A%T1(JLON,JLEV)*YDMF_PHYS_BASE_STATE%YCPG_PHY%XYB%DELP(JLON,JLEV) ENDDO ENDDO - IF (LDDH_OMP) THEN - CALL NEW_ADD_FIELD_3D(YDMODEL%YRML_DIAG%YRMDDH,ZTMPAF,'VNT',YDDDH) - ELSE - CALL ADD_FIELD_3D(YLDDH,ZTMPAF,'VNT','V','ARP',.TRUE.,.TRUE.) - ENDIF + CALL NEW_ADD_FIELD_3D(YDMODEL%YRML_DIAG%YRMDDH,ZTMPAF,'VNT',YDDDH) ENDDO ! specific to new data flow for diagnostics - IF (LDDH_OMP) THEN - DO JLEV = 1, KLEV - ZCON1(KIDIA:KFDIA,JLEV) = 1.0_JPRB - ZCON2(KIDIA:KFDIA,JLEV) = ZQDM(KIDIA:KFDIA,JLEV) - ENDDO - DO JLEV = 1, KLEV - DO JLON=KIDIA,KFDIA - ZCON3(JLON,JLEV) = PCPM(JLON,JLEV)*ZEXNREFM_(JLON,JLEV) - ENDDO + DO JLEV = 1, YDCPG_OPTS%KFLEVG + ZCON1(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV) = 1.0_JPRB + ZCON2(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV) = ZQDM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV) + ENDDO + DO JLEV = 1, YDCPG_OPTS%KFLEVG + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZCON3(JLON,JLEV) = YDMF_PHYS_BASE_STATE%YCPG_DYN%RCP%CP(JLON,JLEV)*ZEXNREFM_(JLON,JLEV) ENDDO - ! missing interface !!! REK - CALL ARO_SUINTBUDGET_OMP(KLON,KLEV,KSTEP,ZCON1,ZCON2,ZCON3,YDDDH) - ELSE - ! missing interface !!! REK - CALL ARO_SUINTBUDGET(KLON,KLEV,KSTEP,KFDIA,ZQDM,ZEXNREFM_,PCPM) - ENDIF + ENDDO + ! missing interface !!! REK + CALL ARO_SUINTBUDGET_OMP(YDCPG_OPTS%KLON, YDCPG_OPTS%KFLEVG, YDCPG_OPTS%KSTEP, ZCON1, ZCON2, & + & ZCON3, YDDDH) + ENDIF -DO JLEV = 1, KLEV-1 - DO JLON = KIDIA,KFDIA +DO JLEV = 1, YDCPG_OPTS%KFLEVG-1 + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA ZDZZ_F_(JLON,JLEV)=ZZZ_F_(JLON,JLEV)-ZZZ_F_(JLON,JLEV-IKL) ENDDO ENDDO -DO JLON = KIDIA,KFDIA - ZDZZ_F_(JLON,KLEV)=ZZZ_F_(JLON,KLEV)-POROG(JLON)*ZINVG +DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZDZZ_F_(JLON,YDCPG_OPTS%KFLEVG)=ZZZ_F_(JLON,YDCPG_OPTS%KFLEVG)-YDVARS%GEOMETRY%OROG%T0(JLON)*ZINVG ENDDO @@ -1907,22 +1831,22 @@ ENDDO ! 5 - COMPUTE DUST PROPERTIES FOR RADIATION IF LRDUST=T ! -------------------------------------------------------------------- IF (LRDUST) THEN - PEZDIAG(KIDIA:KFDIA,1:KLEV,IOFF_MFSHAL:NGFL_EZDIAG)=0.0_JPRB + ZP1EZDIAG(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG,IOFF_MFSHAL:NGFL_EZDIAG)=0.0_JPRB ! input dust scalar concentration in ppp from IEZDIAG_CHEM=NGFL_EZDIAG-IOFF_MFSHAL+1 ! Swapp because IN and OUT will be needed simultaneously CALL SWAP_SVM ! input dust scalar concentration in ppp from - CALL ARO_MNHDUST (IKL,KFDIA,KLEV,NGFL_EXT, PDT,ZSVMIN_,ZZZ_,ZDZZ_,& - & ZPABSM__(:,1:KLEV),ZTHM__(:,1:KLEV),ZRHODREFM__(:,1:KLEV),& - & NSWB_MNH,KSTEP+1,ZSVM_,ZPIZA_DST_,ZCGA_DST_,ZTAUREL_DST_,ZAERD_,IEZDIAG_CHEM,& - & ZPEZDIAG_(:,:,IOFF_MFSHAL:NGFL_EZDIAG) ) - PEZDIAG(KIDIA:KFDIA,1:KLEV,IOFF_MFSHAL:NGFL_EZDIAG)=ZPEZDIAG_(KIDIA:KFDIA,1:KLEV,IOFF_MFSHAL:NGFL_EZDIAG) + CALL ARO_MNHDUST (IKL, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KFLEVG, NGFL_EXT, YDCPG_OPTS%ZDTPHY, ZSVMIN_, ZZZ_, ZDZZ_, & + & ZPABSM__(:, 1:YDCPG_OPTS%KFLEVG), ZTHM__(:, 1:YDCPG_OPTS%KFLEVG), ZRHODREFM__(:, 1:YDCPG_OPTS%KFLEVG), & + & NSWB_MNH, YDCPG_OPTS%KSTEP+1, ZSVM_, ZPIZA_DST_, ZCGA_DST_, ZTAUREL_DST_, ZAERD_, IEZDIAG_CHEM, ZPEZDIAG_(:, :, IOFF_MFSHAL:NGFL_EZDIAG)& + & ) + ZP1EZDIAG(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG,IOFF_MFSHAL:NGFL_EZDIAG)=ZPEZDIAG_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG,IOFF_MFSHAL:NGFL_EZDIAG) ! return to tendency DO JGFL=1, NGFL_EXT - DO JLEV = 1,KLEV - DO JLON = KIDIA,KFDIA - PTENDEXT(JLON,JLEV,JGFL)=PTENDEXT(JLON,JLEV,JGFL)+(ZSVM_(JLON,JLEV,JGFL)-ZSVMIN_(JLON,JLEV,JGFL))*ZINVDT + DO JLEV = 1,YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZTENDEXT(JLON,JLEV,JGFL)=ZTENDEXT(JLON,JLEV,JGFL)+(ZSVM_(JLON,JLEV,JGFL)-ZSVMIN_(JLON,JLEV,JGFL))*ZINVDT ENDDO ENDDO ENDDO @@ -1930,33 +1854,35 @@ ENDIF ! LRDUST IF (LSFORCS) THEN ! <== Surface forcing for MUSC - ZTSURF(KIDIA:KFDIA) = PTM(KIDIA:KFDIA,KLEV) - ZTN(KIDIA:KFDIA) = PTM(KIDIA:KFDIA,KLEV) - ZQS(KIDIA:KFDIA) = PQVM(KIDIA:KFDIA,KLEV) - DO JLON=KIDIA,KFDIA - ZRHODREFM(JLON) = PAPRSFM(JLON,KLEV)/(PTM(JLON,KLEV)*PRM(JLON,KLEV)) - ZTHETAS(JLON) = ZTSURF(JLON)*(RATM/PAPRSM(JLON,KLEV))**RKAPPA + ZTSURF(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA) = YDMF_PHYS_BASE_STATE%T(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG) + ZTN(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA) = YDMF_PHYS_BASE_STATE%T(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG) + ZQS(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA) = YDMF_PHYS_BASE_STATE%Q(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG) + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZRHODREFM(JLON) = YDMF_PHYS_BASE_STATE%YCPG_PHY%PREF(JLON,YDCPG_OPTS%KFLEVG)/(YDMF_PHYS_BASE_STATE%T(JLON,YDCPG_OPTS%KFLEVG)*YDMF_PHYS_BASE_STATE%YCPG_DYN%RCP%R(JLON,YDCPG_OPTS%KFLEVG)) + ZTHETAS(JLON) = ZTSURF(JLON)*(RATM/YDMF_PHYS_BASE_STATE%YCPG_PHY%PRE(JLON,YDCPG_OPTS%KFLEVG))**RKAPPA ENDDO LLAROME=.TRUE. - CALL SURF_IDEAL_FLUX(YDRIP,YDPHY0,YDPHYDS, LLAROME, KIDIA , KFDIA , KLON, PAPHIFM(:,KLEV), & - & ZRHODREFM, PSFORC,ZTN,ZTSURF,PLSM,PQVM(:,KLEV), PUM(:,KLEV), PVM(:,KLEV), ZTHETAS, & - & ZSFTH_, ZSFRV_, ZSFU_, ZSFV_) + CALL SURF_IDEAL_FLUX(YDRIP, YDPHY0, YDPHYDS, LLAROME, YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KLON, & + & YDMF_PHYS_BASE_STATE%YCPG_DYN%PHIF(:, YDCPG_OPTS%KFLEVG), ZRHODREFM, YDMF_PHYS_SURF%GSD_SFO%PGROUP, & + & ZTN, ZTSURF, YDMF_PHYS_SURF%GSD_VF%PLSM, YDMF_PHYS_BASE_STATE%Q(:, YDCPG_OPTS%KFLEVG), YDMF_PHYS_BASE_STATE%U(:, YDCPG_OPTS%KFLEVG), & + & YDMF_PHYS_BASE_STATE%V(:, YDCPG_OPTS%KFLEVG), ZTHETAS, ZSFTH_, ZSFRV_, ZSFU_, ZSFV_) !* Compute PBL-diagnostics ZCAPE(:)=0._JPRB ZDCAPE(:)=0._JPRB - CALL ACCLDIA(YDXFU,YDPHY,YDMODEL%YRML_PHY_MF%YRPHY2,YDTOPH,KIDIA,KFDIA,KLON,KLEV,PUCLS,& - & PVCLS,PUM(:,1:KLEV),PVM(:,1:KLEV),ZCAPE,ZDCAPE,ZTKEM(:,1:KLEV),PAPHIFM(:,1:KLEV),POROG,& - & PUGST,PVGST,PPBLH,ICLPH) + CALL ACCLDIA(YDCST, YDCPG_OPTS%LXCLP, YDCPG_OPTS%LXTGST, YDCPG_OPTS%LXXGST, YDPHY, YDMODEL%YRML_PHY_MF%YRPHY2, YDTOPH, YDCPG_BNDS%KIDIA, & + & YDCPG_BNDS%KFDIA, YDCPG_OPTS%KLON, YDCPG_OPTS%KFLEVG, YDMF_PHYS%OUT%UCLS, YDMF_PHYS%OUT%VCLS, YDMF_PHYS_BASE_STATE%U(:, 1:YDCPG_OPTS%KFLEVG), & + & YDMF_PHYS_BASE_STATE%V(:, 1:YDCPG_OPTS%KFLEVG), ZCAPE, ZDCAPE, ZTKEM(:, 1:YDCPG_OPTS%KFLEVG), YDMF_PHYS_BASE_STATE%YCPG_DYN%PHIF(:, 1:YDCPG_OPTS%KFLEVG), & + & YDVARS%GEOMETRY%OROG%T0, YDMF_PHYS%OUT%UGST, YDMF_PHYS%OUT%VGST, YDMF_PHYS%OUT%CLPH, ICLPH) - PPBLH(KIDIA:KFDIA)=MIN(XMAXLM,MAX(XMINLM,PPBLH(KIDIA:KFDIA))) + YDMF_PHYS%OUT%CLPH(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=MIN(XMAXLM,MAX(XMINLM,YDMF_PHYS%OUT%CLPH(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA))) ENDIF ! <== End of surface forcing for MUSC ! -------------------------------------------------------------------- -! 6 - RADIATION LRAYFM (IFS) or LRAY (ACRANEB2) +! 6 - RADIATION LRAYFM (IFS) or LRAY (ACRANEB2) ! -------------------------------------------------------------------- IF (LRAYFM.OR.LRAY) THEN ! prepare some input for both radiation schemes at every time step @@ -1968,61 +1894,35 @@ IF (LRAYFM.OR.LRAY) THEN ENDIF ! compute saturated specific humidity - CALL ACTQSAT ( YDPHY,KIDIA,KFDIA,KLON,NTQSAT,KLEV, PAPRSFM, ZCPM, ZQVM, ZTM,& - & ZGEOSLC, ZLH, ZLSCPE, ZQSAT, ZQW, PRH, ZTW) - - IF (YSPP_CONFIG%LSPP.AND.YSPP_CONFIG%LPERT_RADGR) THEN - IF (YSPP_CONFIG%LLNN_MEAN1.OR.YSPP_CONFIG%LLNN_MEAN1_RADGR) THEN - ZMU = -0.5_JPRB * (YSPP_CONFIG%CMPERT_RADGR * YSPP_CONFIG%SDEV)**2 - ELSE - ZMU = 0._JPRB - ENDIF - DO JLON=KIDIA,KFDIA - ZVAL = RADGR*EXP(ZMU+YSPP_CONFIG%CMPERT_RADGR*PGP2DSPP(JLON,YSPP%MP_RADGR)) - ZRADGR(JLON) = MAX(YSPP_CONFIG%CLIP_RADGR(1),MIN(ZVAL,YSPP_CONFIG%CLIP_RADGR(2))) - ENDDO - IF ( YSPP_CONFIG%IEZDIAG_POS > 0 ) THEN - JKO=2*YSPP%MP_RADGR-1 - JKE=2*YSPP%MP_RADGR - DO JLON=KIDIA,KFDIA - PEZDIAG(JLON,JKO,YSPP_CONFIG%IEZDIAG_POS) = PGP2DSPP(JLON,YSPP%MP_RADGR) - PEZDIAG(JLON,JKE,YSPP_CONFIG%IEZDIAG_POS) = ZRADGR(JLON) - ENDDO - ENDIF + CALL ACTQSAT (YDCST, YDPHY, YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KLON, NTQSAT, YDCPG_OPTS%KFLEVG, & + & YDMF_PHYS_BASE_STATE%YCPG_PHY%PREF, ZCPM, ZQVM, ZTM, ZGEOSLC, ZLH, ZLSCPE, ZQSAT, ZQW, YDCPG_MISC%RH, & + & ZTW) + + IF (ZSPP_ALL%YSPP_RADGR%LPERT) THEN + CALL APPLY_SPP(ZSPP_ALL%YSPP_RADGR, & + & YDCPG_OPTS%KLON,YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA, & + & RADGR,ZRADGR) ELSE - DO JLON=KIDIA,KFDIA + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA ZRADGR(JLON) = RADGR ENDDO ENDIF - IF (YSPP_CONFIG%LSPP.AND.YSPP_CONFIG%LPERT_RADSN) THEN - IF (YSPP_CONFIG%LLNN_MEAN1.OR.YSPP_CONFIG%LLNN_MEAN1_RADSN) THEN - ZMU = -0.5_JPRB * (YSPP_CONFIG%CMPERT_RADSN * YSPP_CONFIG%SDEV)**2 - ELSE - ZMU = 0._JPRB - ENDIF - DO JLON=KIDIA,KFDIA - ZVAL = RADSN*EXP(ZMU+YSPP_CONFIG%CMPERT_RADSN*PGP2DSPP(JLON,YSPP%MP_RADSN)) - ZRADSN(JLON) = MAX(YSPP_CONFIG%CLIP_RADSN(1),MIN(ZVAL,YSPP_CONFIG%CLIP_RADSN(2))) - ENDDO - IF ( YSPP_CONFIG%IEZDIAG_POS > 0 ) THEN - JKO=2*YSPP%MP_RADSN-1 - JKE=2*YSPP%MP_RADSN - DO JLON=KIDIA,KFDIA - PEZDIAG(JLON,JKO,YSPP_CONFIG%IEZDIAG_POS) = PGP2DSPP(JLON,YSPP%MP_RADSN) - PEZDIAG(JLON,JKE,YSPP_CONFIG%IEZDIAG_POS) = ZRADSN(JLON) - ENDDO - ENDIF + IF (ZSPP_ALL%YSPP_RADSN%LPERT) THEN + CALL APPLY_SPP(ZSPP_ALL%YSPP_RADSN, & + & YDCPG_OPTS%KLON,YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA, & + & RADSN,ZRADSN) ELSE - DO JLON=KIDIA,KFDIA + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA ZRADSN(JLON) = RADSN ENDDO ENDIF - ! initialisation des humidite (dans le rayonnement, l'eau liquide nuageuse + + ! initialisation des humidite (dans le rayonnement, l'eau liquide nuageuse ! et la glace sont donne par des hu par rapport au gaz. ! (qi/qa+qv pour ice par ex. C'est donc different de ri) - DO JLEV=KTDIA,KLEV - DO JLON=KIDIA,KFDIA + DO JLEV=YDCPG_OPTS%KTDIA,YDCPG_OPTS%KFLEVG + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA ZQICE(JLON,JLEV)= MAX(0.0_JPRB,& & (ZQIM(JLON,JLEV) + ZQSM(JLON,JLEV)*ZRADSN(JLON) + ZQGM(JLON,JLEV)*ZRADGR(JLON))/& & (1.0_JPRB-ZQIM(JLON,JLEV)-ZQCM(JLON,JLEV)-ZQRM(JLON,JLEV)& @@ -2037,117 +1937,162 @@ IF (LRAYFM.OR.LRAY) THEN ENDDO ! store cloud water content for RTTOV - IF (YIRAD%LGP) PQIRAD(KIDIA:KFDIA,:) = ZQICE(KIDIA:KFDIA,:) - IF (YLRAD%LGP) PQLRAD(KIDIA:KFDIA,:) = ZQLIQ(KIDIA:KFDIA,:) + IF (YIRAD%LGP) YDVARS%IRAD%T1(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,:) = ZQICE(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,:) + IF (YLRAD%LGP) YDVARS%LRAD%T1(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,:) = ZQLIQ(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,:) ! Hannu Savijarvi diffuse -> direct albedo correction from hlradia, - ! Assuming that SURFEX does not make difference between + ! Assuming that SURFEX does not make difference between ! dir/dif albedo as surfex/SURFEX/albedo_from_nir_vis.F90 defines ! PSCA_ALB(:,:) = PDIR_ALB(:,:) - + ! Albedo dans les intervalles, direct (parallel) et diffus (diffuse). IF (NSW==6.OR.NSW==1) THEN IF (LLMSE) THEN DO JSW=1,NSW - ZALBP(KIDIA:KFDIA,JSW)=PGPAR(KIDIA:KFDIA,MALBDIR-1+JSW) - ZALBD(KIDIA:KFDIA,JSW)=PGPAR(KIDIA:KFDIA,MALBSCA-1+JSW) + ZALBP(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JSW)=YDCPG_GPAR%ALBDIR(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JSW) + ZALBD(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JSW)=YDCPG_GPAR%ALBSCA(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JSW) IF (LHLRADUPD) THEN - DO JLON=KIDIA,KFDIA - ZSALBCOR=0.2_JPRB/(1._JPRB+PMU0(JLON))-0.12_JPRB + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZSALBCOR=0.2_JPRB/(1._JPRB+ZRDG_MU0(JLON))-0.12_JPRB ZALBP(JLON,JSW)=ZALBD(JLON,JSW)+ZSALBCOR ENDDO ENDIF ENDDO ELSEIF (LSFORCS) THEN DO JSW=1,NSW - ZALBP(KIDIA:KFDIA,JSW)=RALB_FORC - ZALBD(KIDIA:KFDIA,JSW)=RALB_FORC + ZALBP(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JSW)=RALB_FORC + ZALBD(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JSW)=RALB_FORC ! direct>diffuse correction might be applied to RALB_FORC,too: ! ZALBP(JLON,JSW)=RALB_FORC+ZSALBCOR ENDDO ELSE !pour pouvoir tourner sans la surface DO JSW=1,NSW - ZALBP(KIDIA:KFDIA,JSW)=PALBIN(KIDIA:KFDIA) - ZALBD(KIDIA:KFDIA,JSW)=PALBIN(KIDIA:KFDIA) + ZALBP(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JSW)=YDMF_PHYS_SURF%GSD_VF%PALBF(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA) + ZALBD(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JSW)=YDMF_PHYS_SURF%GSD_VF%PALBF(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA) ! ZALBP(JLON,JSW)=PALBIN(JLON)+ZSALBCOR ENDDO ENDIF - ! Spectral average albedo done with RSUN2 weights, + ! Spectral average albedo done with RSUN2 weights, ! to be applied for HLRADIA, ACRANEB2 which use a single solar spectral band IF (LHLRADUPD) THEN - ZALBP1(KIDIA:KFDIA)=0._JPRB - ZALBD1(KIDIA:KFDIA)=0._JPRB + ZALBP1(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=0._JPRB + ZALBD1(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=0._JPRB DO JSW=1,NSW - DO JLON=KIDIA,KFDIA + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA ZALBP1(JLON)=ZALBP1(JLON)+RSUN2(JSW)*ZALBP(JLON,JSW) ZALBD1(JLON)=ZALBD1(JLON)+RSUN2(JSW)*ZALBD(JLON,JSW) ENDDO ENDDO ELSE - ZALBP1(KIDIA:KFDIA)=PGPAR(KIDIA:KFDIA,MALBDIR) - ZALBD1(KIDIA:KFDIA)=PGPAR(KIDIA:KFDIA,MALBSCA) + ZALBP1(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=YDCPG_GPAR%ALBDIR(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1) + ZALBD1(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=YDCPG_GPAR%ALBSCA(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1) ENDIF - ELSE - CALL ABOR1 ('ALBEDO FOR NSW/= 1 or 6 not defined in apl_arome') - ENDIF ! all albedo operations IF (LLMSE) THEN - ZEMIS(KIDIA:KFDIA)=PGPAR(KIDIA:KFDIA,MVEMIS) - ZTSURF(KIDIA:KFDIA)=PGPAR(KIDIA:KFDIA,MVTS) + ZEMIS(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=YDCPG_GPAR%VEMIS(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA) + ZTSURF(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=YDCPG_GPAR%VTS(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA) ! protection for E Zone, Where surface scheme send back EMIS and T =0 ! the protection in aro_ground_paramn is not sufficient !!! WHY ?? - DO JLON=KIDIA,KFDIA + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA IF (ZEMIS(JLON)==0._JPRB) THEN ZEMIS(JLON)=1.0_JPRB ZTSURF(JLON)=288.0_JPRB ENDIF ENDDO ELSEIF (LSFORCS) THEN - ZEMIS(KIDIA:KFDIA)=REMIS_FORC + ZEMIS(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=REMIS_FORC ELSE - ZEMIS(KIDIA:KFDIA)=0.5_JPRB ! value 0.5 is suspicious - ZTSURF(KIDIA:KFDIA)=ZTM(KIDIA:KFDIA,KLEV) + ZEMIS(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=0.5_JPRB ! value 0.5 is suspicious + ZTSURF(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=ZTM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG) ENDIF !LLMSE EMIS ! initialization of aerosols IF (LRAY.AND.NRAY == 2.AND.LRADFLEX.AND.LRSTAER) THEN ! old ("standard") aerosols for LRAY only - ZAER(KIDIA:KFDIA,1:KTDIA-1,1)=0._JPRB - DO JLEV=KTDIA-1,KLEV + ZAER(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KTDIA-1,1)=0._JPRB + DO JLEV=YDCPG_OPTS%KTDIA-1,YDCPG_OPTS%KFLEVG ZVETAH(JLEV)=STPREH(JLEV)/VP00 ENDDO - ZAEO=AERCS1*ZVETAH(KTDIA-1)+AERCS3*ZVETAH(KTDIA-1)**3+AERCS5*ZVETAH(KTDIA-1)**5 - DO JLEV=KTDIA,KLEV + ZAEO=AERCS1*ZVETAH(YDCPG_OPTS%KTDIA-1)+AERCS3*ZVETAH(YDCPG_OPTS%KTDIA-1)**3+AERCS5*ZVETAH(YDCPG_OPTS%KTDIA-1)**5 + DO JLEV=YDCPG_OPTS%KTDIA,YDCPG_OPTS%KFLEVG ZAEN=AERCS1*ZVETAH(JLEV)+AERCS3*ZVETAH(JLEV)**3+AERCS5*ZVETAH(JLEV)**5 - ZAER(KIDIA:KFDIA,JLEV,1)=ZAEN-ZAEO + ZAER(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV,1)=ZAEN-ZAEO ZAEO=ZAEN ENDDO - ZAER(KIDIA:KFDIA,1:KLEV,2:6)=0._JPRB + ZAER(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG,2:6)=0._JPRB ELSE - IF (NAER >= 1 ) THEN + IF (NAER >= 1 .AND. NAERMACC == 0) THEN IF(YSD_VAD%NUMFLDS >= 4) THEN - CALL RADAER ( YDMODEL%YRML_PHY_RAD%YREAERD,YDERAD,YDPHY, KIDIA , KFDIA , KLON , KLEV,& - & PAPRSM,PAPRSFM,ZTM,ZTSURF,PAESEA,PAELAN,PAESOO,PAEDES,PAESUL,PAEVOL,ZAER,ZAERINDS) + CALL RADAER ( YDMODEL%YRML_PHY_RAD%YREAERD, YDERAD, YDPHY, YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, & + & YDCPG_OPTS%KLON, YDCPG_OPTS%KFLEVG, YDMF_PHYS_BASE_STATE%YCPG_PHY%PRE, YDMF_PHYS_BASE_STATE%YCPG_PHY%PREF, & + & ZTM, ZTSURF, YDMF_PHYS_SURF%GSD_VA%PSEA, YDMF_PHYS_SURF%GSD_VA%PLAN, YDMF_PHYS_SURF%GSD_VA%PSOO, & + & YDMF_PHYS_SURF%GSD_VA%PDES, YDMF_PHYS_SURF%GSD_VA%PSUL, YDMF_PHYS_SURF%GSD_VA%PVOL, ZAER, & + & ZAERINDS) ELSE WRITE(NULOUT,*) 'YSD_VAD%NUMFLDS SHOULD BE >= 4, IT IS: ',YSD_VAD%NUMFLDS CALL ABOR1('APL_AROME: PB AEROSOLS!') ! NB : this abort excludes the use of radact. REK. ENDIF + ELSE + !AEROSOLS from MACC (NAERMACC=1) + ZDUM=1._JPRB + ! in E Zone, there are YDVARS%GEOMETRY%GEMU%T0 < 0. + ZGELAM=YDVARS%GEOMETRY%GELAM%T0 + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + IF (ZGELAM(JLON)<0._JPRB) THEN + ZGELAM(JLON)=ZGELAM(JLON)+2*RPI + ENDIF + ENDDO + ! Init ZCHTIX + ! Warning YDMF_PHYS_BASE_STATE%YCPG_PHY%PRE is 0:YDCPG_OPTS%KFLEVG here whereas in radintg it is + ! 1:YDCPG_OPTS%KFLEVG+1 + DO JK=2,YDCPG_OPTS%KFLEVG + ZCAPH(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JK)=YDMF_PHYS_BASE_STATE%YCPG_PHY%PRE(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JK-1) + ZTH(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JK)=(ZTM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JK-1)*YDMF_PHYS_BASE_STATE%YCPG_PHY%PREF(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JK-1)& + & *(YDMF_PHYS_BASE_STATE%YCPG_PHY%PREF(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JK)-YDMF_PHYS_BASE_STATE%YCPG_PHY%PRE(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JK-1))& + & +ZTM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JK)*YDMF_PHYS_BASE_STATE%YCPG_PHY%PREF(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JK)*(YDMF_PHYS_BASE_STATE%YCPG_PHY%PRE(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JK-1)& + & -YDMF_PHYS_BASE_STATE%YCPG_PHY%PREF(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JK-1)))& + &*(1.0_JPRB/(YDMF_PHYS_BASE_STATE%YCPG_PHY%PRE(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JK-1)*(YDMF_PHYS_BASE_STATE%YCPG_PHY%PREF(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JK)-YDMF_PHYS_BASE_STATE%YCPG_PHY%PREF(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JK-1)))) + ZCHTIX(1:YDCPG_OPTS%KLON,JK)=ZTH(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JK) + ENDDO + ! QUANTITIES AT BOUNDARIES + ZCAPH(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1)=YDMF_PHYS_BASE_STATE%YCPG_PHY%PRE(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,0) + ZCAPH(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG+1)=YDMF_PHYS_BASE_STATE%YCPG_PHY%PRE(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG) + ZTH(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1)=ZTM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1)-YDMF_PHYS_BASE_STATE%YCPG_PHY%PREF(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1)*(ZTM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1)& + & -ZTH(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,2))/(YDMF_PHYS_BASE_STATE%YCPG_PHY%PREF(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1)-YDMF_PHYS_BASE_STATE%YCPG_PHY%PRE(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1)) + ZTH(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG+1)=ZTSURF(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA) + ZCHTIX(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG+1)=ZTH(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG+1) + ZCHTIX(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1)=ZTH(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1) + IAERO=SIZE(ZAERO,3) + ZGEMU_D=REAL(YDVARS%GEOMETRY%GEMU%T0,JPRD) + CALL RADACT(YDMODEL%YRML_PHY_RAD%YREAERD,YDERAD,YDMODEL%YRML_PHY_AER%YREAERSNK,YDRIP, & + & YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KLON, YDCPG_OPTS%KFLEVG,& + & 1 , YDCPG_OPTS%KLON , YDCPG_OPTS%KLON ,0 , 1,& + & YDMF_PHYS_BASE_STATE%YCPG_PHY%PRE , ZGELAM, ZGEMU_D, YDVARS%GEOMETRY%GECLO%T0, YDVARS%GEOMETRY%GESLO%T0, ZCHTIX,& + & ZQVM , ZQSAT , ZDUM ,& + & ZRAER , ZAERO,ZROZ ) + DO JAE=1,6 + DO JK=1,YDCPG_OPTS%KFLEVG + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZAER(JLON,JK,JAE)=ZRAER(JLON,JAE,JK) + ENDDO + ENDDO + ENDDO ENDIF IF (LRDUST) THEN ! We use the extinction coefficient explicitly solved by ARO_MNHDUST - ZAER(KIDIA:KFDIA,1:KLEV,3) = ZAERD_(KIDIA:KFDIA,1:KLEV) + ZAER(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG,3) = ZAERD_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG) ENDIF ENDIF @@ -2156,156 +2101,143 @@ IF (LRAYFM.OR.LRAY) THEN ! initialization of ozone IF (NOZOCL == 1) THEN ! as in IFS - CALL RADOZC(KIDIA,KFDIA,KLON,KLEV,1,KLON,0,PAPRSM,PGEMU,ZROZ) - DO JK=1,KLEV - DO JLON=KIDIA,KFDIA - ZQO3(JLON,JK)=ZROZ(JLON,JK)/PDELPM(JLON,JK) + CALL RADOZC(YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KLON, YDCPG_OPTS%KFLEVG, 1, YDCPG_OPTS%KLON, & + & 0, YDMF_PHYS_BASE_STATE%YCPG_PHY%PRE, YDVARS%GEOMETRY%GEMU%T0, ZROZ) + DO JK=1,YDCPG_OPTS%KFLEVG + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZQO3(JLON,JK)=ZROZ(JLON,JK)/YDMF_PHYS_BASE_STATE%YCPG_PHY%XYB%DELP(JLON,JK) ENDDO ENDDO ELSEIF (NOZOCL == 2) THEN ! as in ARPEGE (from clim profiles) - CALL SUOZON(KIDIA,KFDIA,KLON,KLEV,ZQO3,.FALSE.,PAPRSM,PRDELPM,LO3ABC,PVO3ABC) + CALL SUOZON(YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KLON, YDCPG_OPTS%KFLEVG, ZQO3, & + & .FALSE., YDMF_PHYS_BASE_STATE%YCPG_PHY%PRE, YDMF_PHYS_BASE_STATE%YCPG_PHY%XYB%RDELP, LO3ABC, YDMF_PHYS_SURF%GSD_VC%PA, & + & YDMF_PHYS_SURF%GSD_VC%PB, YDMF_PHYS_SURF%GSD_VC%PC) + ENDIF + IF (NOZOCL==3.OR.NOZOCL==4) THEN ! Clims MACC + CALL RADGHG (YDERAD,YDRIP,YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA,YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG,YDCPG_OPTS%KLON, & + & YDMF_PHYS_BASE_STATE%YCPG_PHY%PRE,YDVARS%GEOMETRY%GEMU%T0,& + & ZQCO2, ZQCH4, ZQN2O, ZQNO2, ZQC11, ZQC12, ZROZ, ZQC22, ZQCL4 ) + DO JK=1,YDCPG_OPTS%KFLEVG + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZQO3(JLON,JK)=ZROZ(JLON,JK) + ENDDO + ENDDO ENDIF + ELSE DO JSW=1,NSW - ZALBP(KIDIA:KFDIA,JSW)=0._JPRB - ZALBD(KIDIA:KFDIA,JSW)=0._JPRB + ZALBP(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JSW)=0._JPRB + ZALBD(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JSW)=0._JPRB ENDDO ENDIF !of preparation of input for LRAYFM, LRAY at every time step - + IF (LRAYFM) THEN ! Intermittent call to radiation interface - IF (MOD(KSTEP,NRADFR) == 0) THEN - CALL RECMWF (YDGEOMETRY%YRDIMV, YDMODEL, & - & KIDIA , KFDIA , KLON , KLEV , & - & ZALBD , ZALBP , PAPRSM , PAPRSFM , & - & PCLFS , ZQO3 , ZAER , PDELPM , ZEMIS , & - & PMU0M , ZQV , ZQSAT , ZQICE , ZQLIQ , & - & ZQSM , ZQRM , PLSM , ZTM , ZTSURF , & - & PGP2DSPP, PEZDIAG, & - & PEMTD , PEMTU , PTRSO , PFRTHC , PFRTH , & - & PFRSOC , PFRSO , ZZS_FSWDIR, ZZS_FSWDIF, ZFSDNN , & - & ZFSDNV , ZCTRSO, ZCEMTR , ZTRSOD , ZTRSODIR, & - & ZTRSODIF, ZPIZA_DST_,ZCGA_DST_,ZTAUREL_DST_,ZAERINDS,& - & PGELAM , PGEMU ,PGPAR , & - & PMU0LU , ZALBD1 , ZFRSOLU) + IF (MOD(YDCPG_OPTS%KSTEP,NRADFR) == 0) THEN + CALL RECMWF (YDGEOMETRY%YRDIMV, YDMODEL, YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KLON, YDCPG_OPTS%KFLEVG, & + & YDCPG_OPTS%KSW, & + & NOZOCL ,NAERMACC, IAERO, & + & ZALBD, ZALBP, YDMF_PHYS_BASE_STATE%YCPG_PHY%PRE, YDMF_PHYS_BASE_STATE%YCPG_PHY%PREF, & + & YDVARS%A%T1, ZQO3,ZQCO2 , ZQCH4 , ZQN2O , & + & ZQNO2 , ZQC11 , ZQC12 , ZQC22 , ZQCL4 , & + & ZAER, ZAERO, YDMF_PHYS_BASE_STATE%YCPG_PHY%XYB%DELP, ZEMIS, & + & ZRDG_MU0M, ZQV, ZQSAT, & + & ZQICE, ZQLIQ, ZQSM, ZQRM, YDMF_PHYS_SURF%GSD_VF%PLSM, ZTM, ZTSURF, YDMF_PHYS%RAD%EMTD, YDMF_PHYS%RAD%EMTU, & + & YDMF_PHYS%RAD%TRSW, YDMF_PHYS%OUT%FRTHC, YDMF_PHYS%OUT%FRTH, YDMF_PHYS%OUT%FRSOC, YDMF_PHYS%OUT%FRSO, & + & ZZS_FSWDIR, ZZS_FSWDIF, ZFSDNN, ZFSDNV, ZCTRSO, ZCEMTR, ZTRSOD, ZTRSODIR, ZTRSODIF, & + & ZPIZA_DST_, ZCGA_DST_, ZTAUREL_DST_, ZAERINDS, YDVARS%GEOMETRY%GELAM%T0, YDVARS%GEOMETRY%GEMU%T0, & + & YDCPG_GPAR%SWDIR, YDCPG_GPAR%SWDIF, ZRDG_MU0LU, ZALBD1, ZFRSOLU, & + & YSPP_RSWINHF=ZSPP_ALL%YSPP_RSWINHF, YSPP_RLWINHF=ZSPP_ALL%YSPP_RLWINHF) ELSE - IF (LLMSE) THEN - DO JSW=1,NSW - ZTRSODIR(KIDIA:KFDIA,JSW)=PGPAR(KIDIA:KFDIA,MSWDIR+JSW-1) - ZTRSODIF(KIDIA:KFDIA,JSW)=PGPAR(KIDIA:KFDIA,MSWDIF+JSW-1) - ENDDO + IF (LLMSE) THEN + DO JSW=1,NSW + ZTRSODIR(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JSW)=YDCPG_GPAR%SWDIR(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JSW) + ZTRSODIF(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JSW)=YDCPG_GPAR%SWDIF(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JSW) + ENDDO ENDIF ZCTRSO(:,:)=0._JPRB ENDIF ! daand: radflex IF (LRADFLEX) THEN - YLRADPROC => NEWINTPROC(YDPROCSET,'Radiation') - ZFRSO => NEWINTFIELD(YLRADPROC,KLON,KLEV,'FRSO','H','F') - ZFRTH => NEWINTFIELD(YLRADPROC,KLON,KLEV,'FRTH','H','F') + YLRADPROC => NEWINTPROC(YLPROCSET,'Radiation') + ZFRSO => NEWINTFIELD(YLRADPROC,YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG,'FRSO','H','F') + ZFRTH => NEWINTFIELD(YLRADPROC,YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG,'FRTH','H','F') ENDIF - DO JLEV=1,KLEV - ZTENT(KIDIA:KFDIA,JLEV)=0.0_JPRB + DO JLEV=1,YDCPG_OPTS%KFLEVG + ZTENT(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=0.0_JPRB ENDDO - ZSUDU(KIDIA:KFDIA)=0.0_JPRB + ZSUDU(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=0.0_JPRB - CALL RADHEAT& - & ( YDERAD,YDERDI,YDMODEL%YRML_PHY_MF, KIDIA , KFDIA , KLON , KLEV,& - & PAPRSM , ZEMIS , PEMTD , PMU0, ZQVM,& - & ZTENT , PTRSO , ZTRSOD , ZTSURF , PDT,& - & ZTRSODIR,ZTRSODIF, ZALBD , ZALBP,& - ! daand: radflex; replaced PFRSO and PRFTH by pointers - & ZFRSO , ZFRTH , PFRSODS, PFRTHDS, ZCEMTR , ZCTRSO , PFRSOC , PFRTHC,& - & ZSUDU , ZSDUR , ZDSRP , ZZS_FSWDIR , ZZS_FSWDIF ,& - & PFRSOPS, ZFRSOFS, PFRSOPT ) + CALL RADHEAT ( YDERAD, YDERDI, YDMODEL%YRML_PHY_MF, YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KLON, & + & YDCPG_OPTS%KFLEVG, YDMF_PHYS_BASE_STATE%YCPG_PHY%PRE, ZEMIS, YDMF_PHYS%RAD%EMTD, ZRDG_MU0, ZQVM, & + & ZTENT, YDMF_PHYS%RAD%TRSW, ZTRSOD, ZTSURF, YDCPG_OPTS%ZDTPHY, ZTRSODIR, ZTRSODIF, ZALBD, ZALBP, ZFRSO, & + & ZFRTH, YDMF_PHYS%OUT%FRSODS, YDMF_PHYS%OUT%FRTHDS, ZCEMTR, ZCTRSO, YDMF_PHYS%OUT%FRSOC, YDMF_PHYS%OUT%FRTHC, & + & ZSUDU, ZSDUR, ZDSRP, ZZS_FSWDIR, ZZS_FSWDIF, YDMF_PHYS%OUT%FRSOPS, ZFRSOFS, YDMF_PHYS%OUT%FRSOPT & + & ) ! daand: radflex IF (LRADFLEX) THEN ! store for further calculations and diagnostics ! warning : pointers. REK - PFRSO(:,:,1)=ZFRSO - PFRTH(:,:,1)=ZFRTH + YDMF_PHYS%OUT%FRSO(:,:,1)=ZFRSO + YDMF_PHYS%OUT%FRTH(:,:,1)=ZFRTH ELSE ! daand: if LRADFLEX, the contribution to temperature is done by ! cptend_flex/cputqy ! update temperature tendency by radiative contribution - DO JLEV=1,KLEV - DO JLON = KIDIA, KFDIA - PTENDT(JLON,JLEV)=PTENDT(JLON,JLEV)+ZTENT(JLON,JLEV) + DO JLEV=1,YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA + ZTENDT(JLON,JLEV)=ZTENDT(JLON,JLEV)+ZTENT(JLON,JLEV) ENDDO ENDDO ENDIF - DO JLON = KIDIA, KFDIA + DO JLON = YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA ! update sunshine duration [s] - PSDUR(JLON)=PSDUR(JLON)+ZSDUR(JLON)*TSTEP + !YDMF_PHYS_SURF%GSD_VD%PSUND(JLON)=YDMF_PHYS_SURF%GSD_VD%PSUND(JLON)+ZSDUR(JLON)*TSTEP + YDMF_PHYS_SURF%GSD_VD%PSUND(JLON)=YDMF_PHYS_SURF%GSD_VD%PSUND(JLON)+ZSDUR(JLON)*ZADTMS ! fix stepx case ! Estimate of the direct normal irradiance, with securities - IF (PMU0(JLON) > 3.0E-02_JPRB) THEN - PFRSDNI(JLON)=MAX(0.0_JPRB,PFRSOPS(JLON)/PMU0(JLON)) + IF (ZRDG_MU0(JLON) > 3.0E-02_JPRB) THEN + YDMF_PHYS%OUT%FRSDNI(JLON)=MAX(0.0_JPRB,YDMF_PHYS%OUT%FRSOPS(JLON)/ZRDG_MU0(JLON)) ELSE - PFRSDNI(JLON)=MAX(0.0_JPRB,PFRSOPS(JLON)) + YDMF_PHYS%OUT%FRSDNI(JLON)=MAX(0.0_JPRB,YDMF_PHYS%OUT%FRSOPS(JLON)) ENDIF ENDDO - IF( MOD(KSTEP+1,NPRINTFR)==0) THEN + IF( MOD(YDCPG_OPTS%KSTEP+1,NPRINTFR)==0) THEN WRITE(NULOUT,*)'sous apl_arome apres rayonnement ZTENT=',ZTENT(NPTP,30:41) IF (LLMSE) THEN DO JSW=1, NSW WRITE(NULOUT,*)'ZSFSWDIR ZSFSWDIF ZFSDNN ZFSDNV PFRSO',& - & ZZS_FSWDIR(NPTP,JSW),ZZS_FSWDIF(NPTP,JSW),ZFSDNN(NPTP), ZFSDNV(NPTP),PFRSO(NPTP,KLEV,1) + & ZZS_FSWDIR(NPTP,JSW),ZZS_FSWDIF(NPTP,JSW),ZFSDNN(NPTP), ZFSDNV(NPTP),YDMF_PHYS%OUT%FRSO(NPTP,YDCPG_OPTS%KFLEVG,1) WRITE(NULOUT,*)'ZALBD ZALBP',ZALBD(NPTP,JSW),ZALBP(NPTP,JSW) ENDDO ENDIF WRITE(NULOUT,*)ZFSDNN(NPTP),ZFSDNV(NPTP) - WRITE (NULOUT,*)'TSURF EMIS ZFRTH',ZTSURF(NPTP),ZEMIS(NPTP),PFRTHDS(NPTP) + WRITE (NULOUT,*)'TSURF EMIS ZFRTH',ZTSURF(NPTP),ZEMIS(NPTP),YDMF_PHYS%OUT%FRTHDS(NPTP) ENDIF IF (LFLEXDIA) THEN - IF (LDDH_OMP) THEN - CALL NEW_ADD_FIELD_3D(YDMODEL%YRML_DIAG%YRMDDH,PFRSO(:,:,1),'FCTRAYSO',YDDDH) - CALL NEW_ADD_FIELD_3D(YDMODEL%YRML_DIAG%YRMDDH,PFRTH(:,:,1),'FCTRAYTH',YDDDH) - ELSE - CALL ADD_FIELD_3D(YLDDH,PFRSO(:,:,1),'FCTRAYSO','F','ARP',.TRUE.,.TRUE.) - CALL ADD_FIELD_3D(YLDDH,PFRTH(:,:,1),'FCTRAYTH','F','ARP',.TRUE.,.TRUE.) - ENDIF + CALL NEW_ADD_FIELD_3D(YDMODEL%YRML_DIAG%YRMDDH, YDMF_PHYS%OUT%FRSO(:, :, 1), 'FCTRAYSO', YDDDH& + & ) + CALL NEW_ADD_FIELD_3D(YDMODEL%YRML_DIAG%YRMDDH, YDMF_PHYS%OUT%FRTH(:, :, 1), 'FCTRAYTH', YDDDH& + & ) ENDIF ELSE - PFRSOC(KIDIA:KFDIA,0:1)=0.0_JPRB - PFRTHC(KIDIA:KFDIA,0:1)=0.0_JPRB + YDMF_PHYS%OUT%FRSOC(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,0:1)=0.0_JPRB + YDMF_PHYS%OUT%FRTHC(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,0:1)=0.0_JPRB ENDIF ! LRAYFM -! ------------------------------------------------------------------ -! NEBULOSITE (CONVECTIVE+STRATIFORME) A TROIS NIVEAUX. -! DIAGNOSTIC OF THREE LEVELS (CONVECTIVE+STRATIFORM) CLOUDINESS. - -! protect cloudiness from being 0 or 1 (needed for ACRANEB2 and ACNPART) -DO JLEV=KTDIA,KLEV - DO JLON=KIDIA,KFDIA - ZNEB0(JLON,JLEV)=MAX(ZEPSNEB,MIN(1._JPRB-ZEPSNEB,PCLFS(JLON,JLEV))) - ENDDO -ENDDO - -! decorrelation depth for cloud overlaps - -IF (LRNUEXP) THEN - DO JLON=KIDIA,KFDIA - ZDECRD(JLON)=RDECRD1+RDECRD2*EXP(-((ASIN(PGEMU(JLON))-RDECRD3*RDECLI)/RDECRD4)**2) - ENDDO -ENDIF - -! calculate high, medium, low and total cloud cover -CALL ACNPART(YDMODEL%YRML_PHY_MF,KIDIA,KFDIA,KLON,NTNEBU,KLEV,& - & PAPHIM,PAPHIFM,PAPRSFM,ZDECRD,ZNEB0,& - & PCLCH,PCLCM,PCLCL,PCLCT,ZCLCT_RAD) IF (LRAY.AND.NRAY == 2.AND.LRADFLEX) THEN @@ -2317,8 +2249,8 @@ IF (LRAY.AND.NRAY == 2.AND.LRADFLEX) THEN ! initialization of cloud ice, cloud liquid and specific humidity ! (with respect to moist air, i.e. excluding hydrometeors) - DO JLEV=KTDIA,KLEV - DO JLON=KIDIA,KFDIA + DO JLEV=YDCPG_OPTS%KTDIA,YDCPG_OPTS%KFLEVG + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA ZQICE(JLON,JLEV)=MAX(0.0_JPRB, ZQIM(JLON,JLEV)/& & (1.0_JPRB-ZQIM(JLON,JLEV)-ZQCM(JLON,JLEV)-ZQRM(JLON,JLEV)& & -ZQGM(JLON,JLEV)-ZQSM(JLON,JLEV)-ZQHM(JLON,JLEV))) @@ -2332,46 +2264,63 @@ IF (LRAY.AND.NRAY == 2.AND.LRADFLEX) THEN ENDDO ! store cloud water content for RTTOV - IF (YIRAD%LGP) PQIRAD(KIDIA:KFDIA,:) = ZQICE(KIDIA:KFDIA,:) - IF (YLRAD%LGP) PQLRAD(KIDIA:KFDIA,:) = ZQLIQ(KIDIA:KFDIA,:) + IF (YIRAD%LGP) YDVARS%IRAD%T1(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,:) = ZQICE(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,:) + IF (YLRAD%LGP) YDVARS%LRAD%T1(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,:) = ZQLIQ(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,:) ! initialization of ozone IF (NOZOCL == 1) THEN ! as in IFS - CALL RADOZC(KIDIA,KFDIA,KLON,KLEV,1,KLON,0,PAPRSM,PGEMU,ZROZ) - DO JK=1,KLEV - DO JLON=KIDIA,KFDIA - ZQO3(JLON,JK)=ZROZ(JLON,JK)/PDELPM(JLON,JK) + CALL RADOZC(YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KLON, YDCPG_OPTS%KFLEVG, 1, YDCPG_OPTS%KLON, & + & 0, YDMF_PHYS_BASE_STATE%YCPG_PHY%PRE, YDVARS%GEOMETRY%GEMU%T0, ZROZ) + DO JK=1,YDCPG_OPTS%KFLEVG + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZQO3(JLON,JK)=ZROZ(JLON,JK)/YDMF_PHYS_BASE_STATE%YCPG_PHY%XYB%DELP(JLON,JK) ENDDO ENDDO ELSEIF (NOZOCL == 2) THEN ! as in ARPEGE (from clim profiles) - CALL SUOZON(KIDIA,KFDIA,KLON,KLEV,ZQO3,.FALSE.,PAPRSM,PRDELPM,LO3ABC,PVO3ABC) + CALL SUOZON(YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KLON, YDCPG_OPTS%KFLEVG, ZQO3, & + & .FALSE., YDMF_PHYS_BASE_STATE%YCPG_PHY%PRE, YDMF_PHYS_BASE_STATE%YCPG_PHY%XYB%RDELP, LO3ABC, YDMF_PHYS_SURF%GSD_VC%PA, & + & YDMF_PHYS_SURF%GSD_VC%PB, YDMF_PHYS_SURF%GSD_VC%PC) + ENDIF + IF (NOZOCL==3.OR.NOZOCL==4) THEN ! Clims MACC + CALL RADGHG (YDERAD,YDRIP,YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA,YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG,YDCPG_OPTS%KLON, & + & YDMF_PHYS_BASE_STATE%YCPG_PHY%PRE,YDVARS%GEOMETRY%GEMU%T0,& + & ZQCO2, ZQCH4, ZQN2O, ZQNO2, ZQC11, ZQC12, ZROZ, ZQC22, ZQCL4 ) + DO JK=1,YDCPG_OPTS%KFLEVG + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZQO3(JLON,JK)=ZROZ(JLON,JK) + ENDDO + ENDDO ENDIF + ! initialization of aerosols IF (LRAY.AND.NRAY == 2.AND.LRADFLEX.AND.LRSTAER) THEN - ZAER(KIDIA:KFDIA,1:KTDIA-1,1)=0._JPRB + ZAER(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KTDIA-1,1)=0._JPRB ! old ("standard") aerosols - DO JLEV=KTDIA-1,KLEV + DO JLEV=YDCPG_OPTS%KTDIA-1,YDCPG_OPTS%KFLEVG ZVETAH(JLEV)=STPREH(JLEV)/VP00 ENDDO - ZAEO=AERCS1*ZVETAH(KTDIA-1)+AERCS3*ZVETAH(KTDIA-1)**3+AERCS5*ZVETAH(KTDIA-1)**5 - DO JLEV=KTDIA,KLEV + ZAEO=AERCS1*ZVETAH(YDCPG_OPTS%KTDIA-1)+AERCS3*ZVETAH(YDCPG_OPTS%KTDIA-1)**3+AERCS5*ZVETAH(YDCPG_OPTS%KTDIA-1)**5 + DO JLEV=YDCPG_OPTS%KTDIA,YDCPG_OPTS%KFLEVG ZAEN=AERCS1*ZVETAH(JLEV)+AERCS3*ZVETAH(JLEV)**3+AERCS5*ZVETAH(JLEV)**5 - ZAER(KIDIA:KFDIA,JLEV,1)=ZAEN-ZAEO + ZAER(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV,1)=ZAEN-ZAEO ZAEO=ZAEN ENDDO - ZAER(KIDIA:KFDIA,1:KLEV,2:6)=0._JPRB + ZAER(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG,2:6)=0._JPRB ELSE IF (NAER >= 1) THEN IF (YSD_VAD%NUMFLDS >= 4) THEN ! initialisation of aerosols as in ARPEGE (from clim files) - CALL RADAER (YDMODEL%YRML_PHY_RAD%YREAERD,YDERAD,YDPHY, KIDIA , KFDIA , KLON , KLEV,& - & PAPRSM,PAPRSFM,ZTM,ZTSURF,PAESEA,PAELAN,PAESOO,PAEDES,PAESUL,PAEVOL,ZAER,ZAERINDS) + CALL RADAER (YDMODEL%YRML_PHY_RAD%YREAERD, YDERAD, YDPHY, YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, & + & YDCPG_OPTS%KLON, YDCPG_OPTS%KFLEVG, YDMF_PHYS_BASE_STATE%YCPG_PHY%PRE, YDMF_PHYS_BASE_STATE%YCPG_PHY%PREF, & + & ZTM, ZTSURF, YDMF_PHYS_SURF%GSD_VA%PSEA, YDMF_PHYS_SURF%GSD_VA%PLAN, YDMF_PHYS_SURF%GSD_VA%PSOO, & + & YDMF_PHYS_SURF%GSD_VA%PDES, YDMF_PHYS_SURF%GSD_VA%PSUL, YDMF_PHYS_SURF%GSD_VA%PVOL, ZAER, & + & ZAERINDS) ELSE CALL ABOR1('APL_AROME: PB AEROSOLS!') ! NB : this abort excludes the use of radact. REK. @@ -2380,19 +2329,19 @@ IF (LRAY.AND.NRAY == 2.AND.LRADFLEX) THEN IF (LRDUST) THEN ! We uses the extinction coefficient explicitely solved by ARO_MNHDUST - ZAER(KIDIA:KFDIA,1:KLEV,3) = ZAERD_(KIDIA:KFDIA,1:KLEV) + ZAER(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG,3) = ZAERD_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG) ENDIF ENDIF ! (LRAY.AND.NRAY == 2.AND.LRADFLEX.AND.LRSTAER) THEN ! get diffuse and direct surface albedo, emissivity and temperature IF (.NOT.LHLRADUPD) THEN - ZALBD1(KIDIA:KFDIA)=PGPAR(KIDIA:KFDIA,MALBSCA) - ZALBP1(KIDIA:KFDIA)=PGPAR(KIDIA:KFDIA,MALBDIR) + ZALBD1(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=YDCPG_GPAR%ALBSCA(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1) + ZALBP1(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=YDCPG_GPAR%ALBDIR(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1) ENDIF - ZEMIS (KIDIA:KFDIA)=PGPAR(KIDIA:KFDIA,MVEMIS) - ZTSURF (KIDIA:KFDIA)=PGPAR(KIDIA:KFDIA,MVTS) - DO JLON=KIDIA,KFDIA + ZEMIS (YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=YDCPG_GPAR%VEMIS(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA) + ZTSURF (YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=YDCPG_GPAR%VTS(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA) + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA ! protection of E-zone (not to have zero emissivity and T_surf there) IF (ZEMIS(JLON) == 0._JPRB) THEN ZEMIS (JLON)= 1._JPRB @@ -2403,343 +2352,238 @@ IF (LRAY.AND.NRAY == 2.AND.LRADFLEX) THEN !+++ End of redundant input preparations for ACRANEB ! initialization of CO2(+), differs from IFS radiation scheme! - ZQCO2(KIDIA:KFDIA,1:KLEV)=QCO2 + ZQCO2(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG)=QCO2 ! daand: radflex - YLRADPROC => NEWINTPROC(YDPROCSET,'Radiation') - ZFRSO => NEWINTFIELD(YLRADPROC,KLON,KLEV, 'FRSO','H','F') - ZFRTH => NEWINTFIELD(YLRADPROC,KLON,KLEV, 'FRTH','H','F') + YLRADPROC => NEWINTPROC(YLPROCSET,'Radiation') + ZFRSO => NEWINTFIELD(YLRADPROC,YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG, 'FRSO','H','F') + ZFRTH => NEWINTFIELD(YLRADPROC,YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG, 'FRTH','H','F') ! call radiation scheme - IJN=KLON - CALL ACRANEB2(YDERDI,YDRIP,YDMODEL%YRML_PHY_MF,& - & KIDIA,KFDIA,KLON,NTRADI,KLEV,IJN,KSTEP,KNFRRC,& - & PAPRSM,PAPRSFM,PCPM,PRM,PDELPM,ZNEB0,& - & ZQV,ZQCO2,ZQICE,ZQLIQ,ZQO3,PTM,& - & ZALBD1,ZALBP1,ZEMIS,PGELAM,PGEMU,PMU0,PMU0LU,ZTSURF, & - & ZDECRD,ZCLCT_RAD,& - & PGDEOSI,PGUEOSI,PGMU0,PGMU0_MIN,PGMU0_MAX,& - & PGDEOTI,PGDEOTI2,PGUEOTI,PGUEOTI2,PGEOLT,PGEOXT,& - & PGRPROX,PGMIXP,PGFLUXC,PGRSURF,PSDUR,& - & ZFRSO,ZFRTH,& - & PFRSOC,PFRTHC,ZFRSODS,PFRSOPS,ZFRSOLU,PFRTHDS,ZAER) + IJN=YDCPG_OPTS%KLON + CALL ACRANEB2(YDERDI, YDRIP, YDMODEL%YRML_PHY_MF, YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KLON, & + & NTRADI, YDCPG_OPTS%KFLEVG, IJN, YDCPG_OPTS%KSTEP, YDCFU%NFRRC, YDMF_PHYS_BASE_STATE%YCPG_PHY%PRE, & + & YDMF_PHYS_BASE_STATE%YCPG_PHY%PREF, YDMF_PHYS_BASE_STATE%YCPG_DYN%RCP%CP, YDMF_PHYS_BASE_STATE%YCPG_DYN%RCP%R, & + & YDMF_PHYS_BASE_STATE%YCPG_PHY%XYB%DELP, ZNEB0, ZQV, ZQCO2, ZQICE, ZQLIQ, ZQO3, YDMF_PHYS_BASE_STATE%T, & + & ZALBD1, ZALBP1, ZEMIS, YDVARS%GEOMETRY%GELAM%T0, YDVARS%GEOMETRY%GEMU%T0, ZRDG_MU0, ZRDG_MU0LU, & + & ZTSURF, ZDECRD, ZCLCT_RAD, YDMF_PHYS%OPT%GDEOSI, YDMF_PHYS%OPT%GUEOSI, YDMF_PHYS%OPT%GMU0, YDMF_PHYS%OPT%GMU0_MIN, & + & YDMF_PHYS%OPT%GMU0_MAX, YDMF_PHYS%OPT%GDEOTI, YDMF_PHYS%OPT%GDEOTI2, YDMF_PHYS%OPT%GUEOTI, YDMF_PHYS%OPT%GUEOTI2, & + & YDMF_PHYS%OPT%GEOLT, YDMF_PHYS%OPT%GEOXT, YDMF_PHYS%OPT%GRPROX, YDMF_PHYS%OPT%GMIXP, YDMF_PHYS%OPT%GFLUXC, & + & YDMF_PHYS%OPT%GRSURF, YDMF_PHYS_SURF%GSD_VD%PSUND, ZFRSO, ZFRTH, YDMF_PHYS%OUT%FRSOC, YDMF_PHYS%OUT%FRTHC, & + & ZFRSODS, YDMF_PHYS%OUT%FRSOPS, ZFRSOLU, YDMF_PHYS%OUT%FRTHDS, ZAER) ! daand: radflex ! store for further calculations and diagnostics ! warning : pointers. REK - PFRSO(:,:,1)=ZFRSO - PFRTH(:,:,1)=ZFRTH + YDMF_PHYS%OUT%FRSO(:,:,1)=ZFRSO + YDMF_PHYS%OUT%FRTH(:,:,1)=ZFRTH ! extract surface fluxes - DO JLON=KIDIA,KFDIA - PFRSODS(JLON)=ZFRSODS(JLON)+PFRSOPS(JLON) ! downward surface sw flux + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + YDMF_PHYS%OUT%FRSODS(JLON)=ZFRSODS(JLON)+YDMF_PHYS%OUT%FRSOPS(JLON) ! downward surface sw flux ENDDO IF (LLMSE) THEN IF (LHLRADUPD) THEN DO JSW = 1,NSW - DO JLON=KIDIA,KFDIA - ZZS_FSWDIR(JLON,JSW) = PFRSOPS(JLON)*RSUN2(JSW) + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZZS_FSWDIR(JLON,JSW) = YDMF_PHYS%OUT%FRSOPS(JLON)*RSUN2(JSW) ZZS_FSWDIF(JLON,JSW) = ZFRSODS(JLON)*RSUN2(JSW) ENDDO ENDDO ELSE - ZZS_FSWDIR(KIDIA:KFDIA,1)=PFRSOPS(KIDIA:KFDIA) ! direct surface swdn flux - ZZS_FSWDIF(KIDIA:KFDIA,1)=ZFRSODS(KIDIA:KFDIA) ! diffuse surface swdn flux + ZZS_FSWDIR(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1)=YDMF_PHYS%OUT%FRSOPS(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA) ! direct surface swdn flux + ZZS_FSWDIF(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1)=ZFRSODS(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA) ! diffuse surface swdn flux ENDIF ENDIF ! Estimate of the direct normal irradiance, with securities - PFRSDNI(KIDIA:KFDIA)=PFRSOPS(KIDIA:KFDIA) - DO JLON = KIDIA, KFDIA - IF (PMU0(JLON) > 3.0E-02_JPRB) THEN - PFRSDNI(JLON)=PFRSOPS(JLON)/PMU0(JLON) + YDMF_PHYS%OUT%FRSDNI(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=YDMF_PHYS%OUT%FRSOPS(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA) + DO JLON = YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA + IF (ZRDG_MU0(JLON) > 3.0E-02_JPRB) THEN + YDMF_PHYS%OUT%FRSDNI(JLON)=YDMF_PHYS%OUT%FRSOPS(JLON)/ZRDG_MU0(JLON) ENDIF ENDDO - DO JLON = KIDIA, KFDIA - PFRSDNI(JLON)=MAX(0.0_JPRB,PFRSDNI(JLON)) + DO JLON = YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA + YDMF_PHYS%OUT%FRSDNI(JLON)=MAX(0.0_JPRB,YDMF_PHYS%OUT%FRSDNI(JLON)) ENDDO IF (LFLEXDIA) THEN - IF (LDDH_OMP) THEN - CALL NEW_ADD_FIELD_3D(YDMODEL%YRML_DIAG%YRMDDH,PFRSO(:,:,1),'FCTRAYSO',YDDDH) - CALL NEW_ADD_FIELD_3D(YDMODEL%YRML_DIAG%YRMDDH,PFRTH(:,:,1),'FCTRAYSO',YDDDH) - ELSE - CALL ADD_FIELD_3D(YLDDH,PFRSO(:,:,1),'FCTRAYSO','F','ARP',.TRUE.,.TRUE.) - CALL ADD_FIELD_3D(YLDDH,PFRTH(:,:,1),'FCTRAYTH','F','ARP',.TRUE.,.TRUE.) - ENDIF + CALL NEW_ADD_FIELD_3D(YDMODEL%YRML_DIAG%YRMDDH, YDMF_PHYS%OUT%FRSO(:, :, 1), 'FCTRAYSO', YDDDH& + & ) + CALL NEW_ADD_FIELD_3D(YDMODEL%YRML_DIAG%YRMDDH, YDMF_PHYS%OUT%FRTH(:, :, 1), 'FCTRAYSO', YDDDH& + & ) ENDIF ENDIF IF (.NOT.(LRAY.AND.NRAY == 2.AND.LRADFLEX).AND..NOT.LRAYFM) THEN DO JSW = 1,NSW - ZZS_FSWDIR(KIDIA:KFDIA,JSW) = 0._JPRB - ZZS_FSWDIF(KIDIA:KFDIA,JSW) = 0._JPRB + ZZS_FSWDIR(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JSW) = 0._JPRB + ZZS_FSWDIF(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JSW) = 0._JPRB ENDDO - PFRSOPS(KIDIA:KFDIA)=0._JPRB + YDMF_PHYS%OUT%FRSOPS(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=0._JPRB ENDIF IF (LFLEXDIA) THEN - CALL ARO_STARTBU( KIDIA, KFDIA, KLEV, NRR,NGFL_EXT,ZRHODJM__(:,1:KLEV),& - & ZUS__(:,1:KLEV), ZVS__(:,1:KLEV), ZWS__(:,1:KLEV), ZTHS__(:,1:KLEV), & - & ZRS_, ZTKES_, YDDDH,YDMODEL%YRML_DIAG%YRLDDH,YDMODEL%YRML_DIAG%YRMDDH) + CALL ARO_STARTBU( YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KFLEVG, NRR, NGFL_EXT, ZRHODJM__(:, 1:YDCPG_OPTS%KFLEVG), & + & ZUS__(:, 1:YDCPG_OPTS%KFLEVG), ZVS__(:, 1:YDCPG_OPTS%KFLEVG), ZWS__(:, 1:YDCPG_OPTS%KFLEVG), ZTHS__(:, 1:YDCPG_OPTS%KFLEVG), & + & ZRS_, ZTKES_, YDDDH, YDMODEL%YRML_DIAG%YRLDDH, YDMODEL%YRML_DIAG%YRMDDH) ENDIF ! ------------------------------------------------------------------ -! 7 - CONVECTION. +! 7 - CONVECTION. ! -------------------------------------------------------------------- IF(LKFBCONV) THEN ! No swapp needed becaus IN and OUT are not needed simultaneously - CALL BRI2ACCONV(YDMODEL%YRML_PHY_MF,YDGEOMETRY%YREGEO,KIDIA,KFDIA,KFDIA,KLEV,PGM(KIDIA:KFDIA),& - & ZPABSM__(:,1:KLEV),ZZZ_F_, ZTM(KIDIA:KFDIA,:), ZRM_(:,:,1),ZRM_(:,:,2), ZRM_(:,:,4), & - & ZRHODREFM__(:,1:KLEV), ZUM__(:,1:KLEV),ZVM__(:,1:KLEV), ZWM__(:,1:KLEV),ZMFS_,& - & ZCVTENDT_, ZCVTENDRV_,ZCVTENDRC_, ZCVTENDRI_,ZCVTENDPR_, ZCVTENDPRS_ & - & ) + CALL BRI2ACCONV(YDMODEL%YRML_PHY_MF, YDGEOMETRY%YREGEO, YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, YDCPG_BNDS%KFDIA, & + & YDCPG_OPTS%KFLEVG, YDVARS%GEOMETRY%GM%T0(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), ZPABSM__(:, 1:YDCPG_OPTS%KFLEVG), & + & ZZZ_F_, ZTM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA, :), ZRM_(:, :, 1), ZRM_(:, :, 2), ZRM_(:, :, 4), ZRHODREFM__(:, 1:YDCPG_OPTS%KFLEVG), & + & ZUM__(:, 1:YDCPG_OPTS%KFLEVG), ZVM__(:, 1:YDCPG_OPTS%KFLEVG), ZWM__(:, 1:YDCPG_OPTS%KFLEVG), & + & ZMFS_, ZCVTENDT_, ZCVTENDRV_, ZCVTENDRC_, ZCVTENDRI_, ZCVTENDPR_, ZCVTENDPRS_ ) - IF(MOD(KSTEP+1,NPRINTFR)==0) THEN + IF(MOD(YDCPG_OPTS%KSTEP+1,NPRINTFR)==0) THEN WRITE(NULOUT,*)"Pluie conv au sol", ZCVTENDPR_(NPTP), & - & MAXVAL(ZCVTENDPR_(KIDIA:KFDIA)) ,MINVAL(ZCVTENDPR_(KIDIA:KFDIA)) + & MAXVAL(ZCVTENDPR_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)) ,MINVAL(ZCVTENDPR_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)) ENDIF - DO JLEV = 1,KLEV - DO JLON = KIDIA, KFDIA - PTENDT(JLON,JLEV)=PTENDT(JLON,JLEV) + ZCVTENDT_(JLON,JLEV) - PTENDR(JLON,JLEV,1) = PTENDR(JLON,JLEV,1) + ZCVTENDRV_(JLON,JLEV)*ZQDM(JLON,JLEV) - PTENDR(JLON,JLEV,2) = PTENDR(JLON,JLEV,2) + ZCVTENDRC_(JLON,JLEV)*ZQDM(JLON,JLEV) - PTENDR(JLON,JLEV,4) = PTENDR(JLON,JLEV,4) + ZCVTENDRI_(JLON,JLEV)*ZQDM(JLON,JLEV) + DO JLEV = 1,YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA + ZTENDT(JLON,JLEV)=ZTENDT(JLON,JLEV) + ZCVTENDT_(JLON,JLEV) + ZTEND_Q(JLON,JLEV) = ZTEND_Q(JLON,JLEV) + ZCVTENDRV_(JLON,JLEV)*ZQDM(JLON,JLEV) + ZTEND_L(JLON,JLEV) = ZTEND_L(JLON,JLEV) + ZCVTENDRC_(JLON,JLEV)*ZQDM(JLON,JLEV) + ZTEND_I(JLON,JLEV) = ZTEND_I(JLON,JLEV) + ZCVTENDRI_(JLON,JLEV)*ZQDM(JLON,JLEV) ZRS_(JLON,JLEV,1)=ZRS_(JLON,JLEV,1)+ZCVTENDRV_(JLON,JLEV) ZRS_(JLON,JLEV,2)=ZRS_(JLON,JLEV,2)+ZCVTENDRC_(JLON,JLEV) ZRS_(JLON,JLEV,4)=ZRS_(JLON,JLEV,4)+ZCVTENDRI_(JLON,JLEV) - ZTHS__(JLON,JLEV)=ZTHS__(JLON,JLEV)+ZCVTENDT_(JLON,JLEV)*(RATM/PAPRSFM(JLON,JLEV))**(RD/RCPD) + ZTHS__(JLON,JLEV)=ZTHS__(JLON,JLEV)+ZCVTENDT_(JLON,JLEV)*(RATM/YDMF_PHYS_BASE_STATE%YCPG_PHY%PREF(JLON,JLEV))**(RD/RCPD) ENDDO ENDDO - DO JLON =KIDIA, KFDIA + DO JLON =YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA ZINPRR_(JLON)=ZINPRR_(JLON)+ZCVTENDPR_(JLON)-ZCVTENDPRS_(JLON) - ZACPRR_(JLON)=ZACPRR_(JLON)+(ZCVTENDPR_(JLON)-ZCVTENDPRS_(JLON))*PDT + ZACPRR_(JLON)=ZACPRR_(JLON)+(ZCVTENDPR_(JLON)-ZCVTENDPRS_(JLON))*YDCPG_OPTS%ZDTPHY ZINPRS_(JLON)=ZINPRS_(JLON)+ZCVTENDPRS_(JLON) - ZACPRS_(JLON)=ZACPRS_(JLON)+ZCVTENDPRS_(JLON)*PDT + ZACPRS_(JLON)=ZACPRS_(JLON)+ZCVTENDPRS_(JLON)*YDCPG_OPTS%ZDTPHY ENDDO ! avance temporelle et inversion niveau pour ZMFS_ - ! on utilise PSIGS pour le flux de masse pour la condensation sous maille + ! on utilise PSIGS pour le flux de masse pour la condensation sous maille ! car PSIGS n est utilise que si LOSIGMAS=T IF (LOSUBG_COND.AND..NOT.LOSIGMAS) THEN - PSIGS(KIDIA:KFDIA,1:KLEV)=ZMFS_(KIDIA:KFDIA,1:KLEV) + YDVARS%SRC%T1(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG)=ZMFS_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG) ENDIF - IF(MOD(KSTEP+1,NPRINTFR)==0) THEN + IF(MOD(YDCPG_OPTS%KSTEP+1,NPRINTFR)==0) THEN WRITE(NULOUT,*)"aps CONV, TENRV, TENRC, TENRI" - DO JLEV=1,KLEV - WRITE(NULOUT,*)PTENDR(NPTP,JLEV,1),PTENDR(NPTP,JLEV,2),PTENDR(NPTP,JLEV,4) + DO JLEV=1,YDCPG_OPTS%KFLEVG + WRITE(NULOUT,*)ZTEND_Q(NPTP,JLEV),ZTEND_L(NPTP,JLEV),ZTEND_I(NPTP,JLEV) ENDDO ENDIF - CALL ARO_CONVBU(KFDIA,KLEV,NRR,ZRHODJM__(:,1:KLEV),ZRS_,ZTHS__(:,1:KLEV), & - & YDDDH, YDMODEL%YRML_DIAG%YRLDDH, YDMODEL%YRML_DIAG%YRMDDH) + CALL ARO_CONVBU(YDCPG_BNDS%KFDIA, YDCPG_OPTS%KFLEVG, NRR, ZRHODJM__(:, 1:YDCPG_OPTS%KFLEVG), ZRS_, & + & ZTHS__(:, 1:YDCPG_OPTS%KFLEVG), YDDDH, YDMODEL%YRML_DIAG%YRLDDH, YDMODEL%YRML_DIAG%YRMDDH) ENDIF ! ------------------------------------------------------------------ -! 8 - SURFACE. +! 8 - SURFACE. ! -------------------------------------------------------------------- IF (LLMSE) THEN -! A loop around SURFEX in order to test OpenMP - - SURFEX_LOOP : DO ISURFEX = 1, NSURFEX_ITER +! Initialisations -! Initialisations - - DO JLON=KIDIA,KFDIA - ZZS_(JLON)=POROG(JLON)*ZINVG + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZZS_(JLON)=YDVARS%GEOMETRY%OROG%T0(JLON)*ZINVG ENDDO - DO JLEV = 1,KLEV - DO JLON=KIDIA,KFDIA - ZDEPTH_HEIGHT_(JLON,JLEV)=ZZZ_F_(JLON,JLEV)-ZZS_(JLON) + DO JLEV = 1,YDCPG_OPTS%KFLEVG + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZDEPTH_HEIGHT_(JLON,JLEV)=ZZZ_F_(JLON,JLEV)-ZZS_(JLON) ENDDO ENDDO - IF (MINVAL(ZDEPTH_HEIGHT_(KIDIA:KFDIA,IKB)) <= 0._JPRB) THEN - DO JLON=KIDIA,KFDIA + IF (MINVAL(ZDEPTH_HEIGHT_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,IKB)) <= 0._JPRB) THEN + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA IF (ZDEPTH_HEIGHT_(JLON,IKB) <= 0._JPRB) THEN - WRITE (NULOUT,*)'sous apl_arome pb height en', JLON,ZAPHIFM(JLON,KLEV),POROG(JLON) + WRITE (NULOUT,*)'sous apl_arome pb height en', JLON,ZAPHIFM(JLON,YDCPG_OPTS%KFLEVG),YDVARS%GEOMETRY%OROG%T0(JLON) ENDIF ENDDO ENDIF ! Can't use a section of pointer. An explicit copy shows, by the way, that a copy is needed ! because data is not contiguous. REK - ZSVMB_(KIDIA:KFDIA,1:NGFL_EXT)=ZSVM_(KIDIA:KFDIA,IKB,1:NGFL_EXT) - - IF (LSURFEX_CRITICAL) THEN - -!$OMP CRITICAL (ARO_GROUND_PARAM_LOCK) - - IF (LLMSE_PARAM) THEN - CALL ARO_GROUND_PARAM( KBL,KGPCOMP,& - & KFDIA,KIDIA,KFDIA,KSTEP,& - & NRR,NSW,NGFL_EXT,NDGUNG, NDGUXG, NDLUNG, NDLUXG,LSURFEX_KFROM,& - & LMPA,CCOUPLING,LDXFUMSE,& - & NINDAT,ZRHGMT,ZSTATI,RSOVR,RCODEC,RSIDEC,& - & PINDX(KIDIA:KFDIA),PINDY(KIDIA:KFDIA),& - & ZUM__(:,IKB),& - & ZVM__(:,IKB),& - & ZTM(KIDIA:KFDIA,KLEV),ZRM_(:,IKB,1),& - & ZSVMB_,& - & RCARDI,ZRHODREFM__(:,IKB),& - & ZPABSM__(:,IKB),PAPRSM(KIDIA:KFDIA,KLEV),& - & ZDTMSE,ZDEPTH_HEIGHT_(:,IKB),ZZS_, XZSEPS,& - & PMU0(KIDIA:KFDIA),PMU0N(KIDIA:KFDIA),PGELAM(KIDIA:KFDIA),& - & PGEMU(KIDIA:KFDIA),XSW_BANDS,& - & ZINPRR_NOTINCR_,ZINPRS_NOTINCR_,& - & ZINPRG_NOTINCR_,& - & PFRTHDS(KIDIA:KFDIA),ZZS_FSWDIF(KIDIA:KFDIA,1:NSW),& - & ZZS_FSWDIR(KIDIA:KFDIA,1:NSW),& - & ZCFAQ_, ZCFATH_, ZCFAU_,ZCFBQ_, ZCFBTH_, ZCFBU_,ZCFBV_,& - & ZSFTH_,ZSFRV_,& - & ZSFSV_,ZSFCO2_,& - & ZSFU_,ZSFV_,& - & ZALBP(KIDIA:KFDIA,1:NSW),ZALBD(KIDIA:KFDIA,1:NSW),& - & ZEMIS(KIDIA:KFDIA),ZTSURF(KIDIA:KFDIA),PFRTH(KIDIA:KFDIA,KLEV,1)) - - ENDIF - - IF (LRCO2) THEN - ZSFSV_(KIDIA:KFDIA,NSV_CO2)= ZSFCO2_(KIDIA:KFDIA) -!print*,' FLUX CO2 =', MINVAL(ZSFSV_(KIDIA:KFDIA,NSV_CO2)),& -! & MAXVAL(ZSFSV_(KIDIA:KFDIA,NSV_CO2)) - ENDIF - -!!!!! TEST DDH ATTENTION -!ZSFRV_(KIDIA:KFDIA) = 0._JPRB - - IF (LLMSE_DIAG) THEN - - CALL ARO_GROUND_DIAG( KBL, KGPCOMP,& - & KFDIA,KIDIA,KFDIA,KLEV, IKL,& - & NDGUNG, NDGUXG, NDLUNG, NDLUXG, LSURFEX_KFROM,& - & ZZS_,ZSFRV_,& - & ZUM__(:,IKTB:IKTE),& - & ZVM__(:,IKTB:IKTE),& - & ZDEPTH_HEIGHT_(:,IKTB:IKTE),& - & PFRTH(KIDIA:KFDIA,KLEV,1),PFRSO(KIDIA:KFDIA,KLEV,1),& - & PINDX(KIDIA:KFDIA),PINDY(KIDIA:KFDIA),& - & ZQS(KIDIA:KFDIA),ZGZ0_,ZGZ0H_,& - & PTCLS(KIDIA:KFDIA),PQCLS(KIDIA:KFDIA),PHUCLS(KIDIA:KFDIA),& - & PUCLS(KIDIA:KFDIA),PVCLS(KIDIA:KFDIA),& - & PNUCLS(KIDIA:KFDIA),PNVCLS(KIDIA:KFDIA),& - & PFCLL(KIDIA:KFDIA,1),PFCLN(KIDIA:KFDIA,1),& - & PFEVL(KIDIA:KFDIA,1),PFEVN(KIDIA:KFDIA,1),& - & ZSSO_STDEV_, PSPSG(KIDIA:KFDIA),& - & ZBUDTH_, ZBUDSO_,& - & ZFCLL_, ZTOWNS_,& - & ZCD_ ) - CALL ARO_GROUND_DIAG_2ISBA( KBL, KGPCOMP, & - & KFDIA, KIDIA, KFDIA, & - & NDGUNG, NDGUXG, NDLUNG, NDLUXG, LSURFEX_KFROM, & - & PINDX(KIDIA:KFDIA), PINDY(KIDIA:KFDIA), & - & PLSM, ZDUMMY1, ZDUMMY1, ZDUMMY1, ZTSURF(KIDIA:KFDIA), PSPSG(KIDIA:KFDIA), & - & ZDUMMY1(KIDIA:KFDIA), ZDUMMY1(KIDIA:KFDIA), ZDUMMY1(KIDIA:KFDIA), & - & ZDUMMY1(KIDIA:KFDIA), ZDUMMY1(KIDIA:KFDIA), ZDUMMY1(KIDIA:KFDIA), & - & ZDUMMY1(KIDIA:KFDIA), PSPSGR(KIDIA:KFDIA), ZDUMMY1 ) - - ENDIF - -!$OMP END CRITICAL (ARO_GROUND_PARAM_LOCK) - ELSE + ZSVMB_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:NGFL_EXT)=ZSVM_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,IKB,1:NGFL_EXT) + + IF (LLMSE_PARAM) THEN + + CALL ARO_GROUND_PARAM( YDCPG_BNDS%KBL, YDCPG_OPTS%KGPCOMP, YDCPG_BNDS%KFDIA, YDCPG_BNDS%KIDIA, & + & YDCPG_BNDS%KFDIA, YDCPG_OPTS%KSTEP, NRR, NSW, NGFL_EXT, NDGUNG, NDGUXG, NDLUNG, NDLUXG, & + & LSURFEX_KFROM, LMPA, CCOUPLING, LLXFUMSE, NINDAT, ZRHGMT, ZSTATI, RSOVR, RCODEC, RSIDEC, YDVARS%GEOMETRY%RINDX%T0(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), & + & YDVARS%GEOMETRY%RINDY%T0(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), ZUM__(:, IKB), ZVM__(:, IKB), ZTM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA, YDCPG_OPTS%KFLEVG), & + & ZRM_(:, IKB, 1), ZSVMB_, RCARDI, ZRHODREFM__(:, IKB), ZPABSM__(:, IKB), YDMF_PHYS_BASE_STATE%YCPG_PHY%PRE(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA, YDCPG_OPTS%KFLEVG), & + & ZDTMSE, ZDEPTH_HEIGHT_(:, IKB), ZZS_, XZSEPS, ZRDG_MU0(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), ZRDG_MU0N(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), & + & YDVARS%GEOMETRY%GELAM%T0(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), YDVARS%GEOMETRY%GEMU%T0(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), & + & XSW_BANDS, ZINPRR_NOTINCR_, ZINPRS_NOTINCR_, ZINPRG_NOTINCR_, YDMF_PHYS%OUT%FRTHDS(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), & + & ZZS_FSWDIF(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA, 1:NSW), ZZS_FSWDIR(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA, 1:NSW), & + & ZCFAQ_, ZCFATH_, ZCFAU_, ZCFBQ_, ZCFBTH_, ZCFBU_, ZCFBV_, ZSFTH_, ZSFRV_, ZSFSV_, ZSFCO2_, & + & ZSFU_, ZSFV_, ZALBP(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA, 1:NSW), ZALBD(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA, 1:NSW), & + & ZEMIS(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), ZTSURF(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), YDMF_PHYS%OUT%FRTH(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA, YDCPG_OPTS%KFLEVG, 1) & + & ) - IF (LLMSE_PARAM) THEN - - CALL ARO_GROUND_PARAM( KBL,KGPCOMP,& - & KFDIA,KIDIA,KFDIA,KSTEP,& - & NRR,NSW,NGFL_EXT,NDGUNG, NDGUXG, NDLUNG, NDLUXG,LSURFEX_KFROM,& - & LMPA,CCOUPLING,LDXFUMSE,& - & NINDAT,ZRHGMT,ZSTATI,RSOVR,RCODEC,RSIDEC,& - & PINDX(KIDIA:KFDIA),PINDY(KIDIA:KFDIA),& - & ZUM__(:,IKB),& - & ZVM__(:,IKB),& - & ZTM(KIDIA:KFDIA,KLEV),ZRM_(:,IKB,1),& - & ZSVMB_,& - & RCARDI,ZRHODREFM__(:,IKB),& - & ZPABSM__(:,IKB),PAPRSM(KIDIA:KFDIA,KLEV),& - & ZDTMSE,ZDEPTH_HEIGHT_(:,IKB),ZZS_, XZSEPS,& - & PMU0(KIDIA:KFDIA),PMU0N(KIDIA:KFDIA),PGELAM(KIDIA:KFDIA),& - & PGEMU(KIDIA:KFDIA),XSW_BANDS,& - & ZINPRR_NOTINCR_,ZINPRS_NOTINCR_,& - & ZINPRG_NOTINCR_,& - & PFRTHDS(KIDIA:KFDIA),ZZS_FSWDIF(KIDIA:KFDIA,1:NSW),& - & ZZS_FSWDIR(KIDIA:KFDIA,1:NSW),& - & ZCFAQ_, ZCFATH_, ZCFAU_,ZCFBQ_, ZCFBTH_, ZCFBU_,ZCFBV_,& - & ZSFTH_,ZSFRV_,& - & ZSFSV_,ZSFCO2_,& - & ZSFU_,ZSFV_,& - & ZALBP(KIDIA:KFDIA,1:NSW),ZALBD(KIDIA:KFDIA,1:NSW),& - & ZEMIS(KIDIA:KFDIA),ZTSURF(KIDIA:KFDIA),PFRTH(KIDIA:KFDIA,KLEV,1)) - - ENDIF + ENDIF - IF (LRCO2) THEN - ZSFSV_(KIDIA:KFDIA,NSV_CO2)= ZSFCO2_(KIDIA:KFDIA) -!print*,' FLUX CO2 =', MINVAL(ZSFSV_(KIDIA:KFDIA,NSV_CO2)),& -! & MAXVAL(ZSFSV_(KIDIA:KFDIA,NSV_CO2)) - ENDIF + IF (LRCO2) THEN + ZSFSV_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,NSV_CO2)= ZSFCO2_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA) +!print*,' FLUX CO2 =', MINVAL(ZSFSV_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,NSV_CO2)),& +! & MAXVAL(ZSFSV_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,NSV_CO2)) + ENDIF !!!!! TEST DDH ATTENTION -!ZSFRV_(KIDIA:KFDIA) = 0._JPRB - - IF (LLMSE_DIAG) THEN - - CALL ARO_GROUND_DIAG( KBL, KGPCOMP,& - & KFDIA,KIDIA,KFDIA,KLEV, IKL,& - & NDGUNG, NDGUXG, NDLUNG, NDLUXG, LSURFEX_KFROM,& - & ZZS_,ZSFRV_,& - & ZUM__(:,IKTB:IKTE),& - & ZVM__(:,IKTB:IKTE),& - & ZDEPTH_HEIGHT_(:,IKTB:IKTE),& - & PFRTH(KIDIA:KFDIA,KLEV,1),PFRSO(KIDIA:KFDIA,KLEV,1),& - & PINDX(KIDIA:KFDIA),PINDY(KIDIA:KFDIA),& - & ZQS(KIDIA:KFDIA),ZGZ0_,ZGZ0H_,& - & PTCLS(KIDIA:KFDIA),PQCLS(KIDIA:KFDIA),PHUCLS(KIDIA:KFDIA),& - & PUCLS(KIDIA:KFDIA),PVCLS(KIDIA:KFDIA),& - & PNUCLS(KIDIA:KFDIA),PNVCLS(KIDIA:KFDIA),& - & PFCLL(KIDIA:KFDIA,1),PFCLN(KIDIA:KFDIA,1),& - & PFEVL(KIDIA:KFDIA,1),PFEVN(KIDIA:KFDIA,1),& - & ZSSO_STDEV_, PSPSG(KIDIA:KFDIA),& - & ZBUDTH_, ZBUDSO_,& - & ZFCLL_, ZTOWNS_,& - & ZCD_ ) - - CALL ARO_GROUND_DIAG_2ISBA( KBL, KGPCOMP, & - & KFDIA, KIDIA, KFDIA, & - & NDGUNG, NDGUXG, NDLUNG, NDLUXG, LSURFEX_KFROM, & - & PINDX(KIDIA:KFDIA), PINDY(KIDIA:KFDIA), & - & PLSM, ZDUMMY1, ZDUMMY1, ZDUMMY1, ZTSURF(KIDIA:KFDIA), PSPSG(KIDIA:KFDIA), & - & ZDUMMY1(KIDIA:KFDIA), ZDUMMY1(KIDIA:KFDIA), ZDUMMY1(KIDIA:KFDIA), & - & ZDUMMY1(KIDIA:KFDIA), ZDUMMY1(KIDIA:KFDIA), ZDUMMY1(KIDIA:KFDIA), & - & ZDUMMY1(KIDIA:KFDIA), PSPSGR(KIDIA:KFDIA), ZDUMMY1 ) +!ZSFRV_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA) = 0._JPRB + + IF (LLMSE_DIAG) THEN + + CALL ARO_GROUND_DIAG( YDCPG_BNDS%KBL, YDCPG_OPTS%KGPCOMP, YDCPG_BNDS%KFDIA, YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, & + & YDCPG_OPTS%KFLEVG, IKL, NDGUNG, NDGUXG, NDLUNG, NDLUXG, LSURFEX_KFROM, ZZS_, ZSFRV_, ZUM__(:, IKTB:IKTE), & + & ZVM__(:, IKTB:IKTE), ZDEPTH_HEIGHT_(:, IKTB:IKTE), YDMF_PHYS%OUT%FRTH(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA, YDCPG_OPTS%KFLEVG, 1), & + & YDMF_PHYS%OUT%FRSO(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA, YDCPG_OPTS%KFLEVG, 1), YDVARS%GEOMETRY%RINDX%T0(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), & + & YDVARS%GEOMETRY%RINDY%T0(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), ZQS(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), & + & ZGZ0_, ZGZ0H_, YDMF_PHYS%OUT%TCLS(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), YDMF_PHYS%OUT%QCLS(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), & + & YDMF_PHYS%OUT%RHCLS(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), YDMF_PHYS%OUT%UCLS(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), & + & YDMF_PHYS%OUT%VCLS(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), YDMF_PHYS%OUT%NUCLS(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), & + & YDMF_PHYS%OUT%NVCLS(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), YDMF_PHYS%OUT%FCLL(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA, 1), & + & YDMF_PHYS%OUT%FCLN(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA, 1), YDMF_PHYS%OUT%FEVL(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA, 1), & + & YDMF_PHYS%OUT%FEVN(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA, 1), ZSSO_STDEV_, YDMF_PHYS_SURF%GSP_SG%PF_T1, & + & ZBUDTH_, ZBUDSO_, ZFCLL_, ZTOWNS_, ZCD_, YDMF_PHYS%OUT%SIC(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)) + + CALL ARO_GROUND_DIAG_2ISBA( YDCPG_BNDS%KBL, YDCPG_OPTS%KGPCOMP, YDCPG_BNDS%KFDIA, YDCPG_BNDS%KIDIA, & + & YDCPG_BNDS%KFDIA, NDGUNG, NDGUXG, NDLUNG, NDLUXG, LSURFEX_KFROM, YDVARS%GEOMETRY%RINDX%T0(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), & + & YDVARS%GEOMETRY%RINDY%T0(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), YDMF_PHYS_SURF%GSD_VF%PLSM, & + & ZDUMMY1, ZDUMMY1, ZDUMMY1, ZTSURF(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), YDMF_PHYS_SURF%GSP_SG%PF_T1, & + & ZTP2(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), ZWS2(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), ZWP2(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), & + & ZWSI2(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), ZWPI2(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), ZWR2(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), & + & ZDUMMY1(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), YDMF_PHYS_SURF%GSP_SG%PR_T1, ZDUMMY1 ) - ENDIF - ENDIF - ENDDO SURFEX_LOOP !* Compute PBL-diagnostics ZCAPE(:)=0._JPRB - ZDCAPE(:)=0._JPRB - CALL ACCLDIA(YDXFU,YDPHY,YDMODEL%YRML_PHY_MF%YRPHY2,YDTOPH, KIDIA,KFDIA,KLON,KLEV,PUCLS,& - & PVCLS,PUM(:,1:KLEV),PVM(:,1:KLEV), ZCAPE,ZDCAPE,ZTKEM(:,1:KLEV),PAPHIFM(:,1:KLEV),POROG,& - & PUGST,PVGST,PPBLH,ICLPH) + ZDCAPE(:)=0._JPRB + CALL ACCLDIA(YDCST, YDCPG_OPTS%LXCLP, YDCPG_OPTS%LXTGST, YDCPG_OPTS%LXXGST, YDPHY, YDMODEL%YRML_PHY_MF%YRPHY2, YDTOPH, YDCPG_BNDS%KIDIA, & + & YDCPG_BNDS%KFDIA, YDCPG_OPTS%KLON, YDCPG_OPTS%KFLEVG, YDMF_PHYS%OUT%UCLS, YDMF_PHYS%OUT%VCLS, YDMF_PHYS_BASE_STATE%U(:, 1:YDCPG_OPTS%KFLEVG), & + & YDMF_PHYS_BASE_STATE%V(:, 1:YDCPG_OPTS%KFLEVG), ZCAPE, ZDCAPE, ZTKEM(:, 1:YDCPG_OPTS%KFLEVG), YDMF_PHYS_BASE_STATE%YCPG_DYN%PHIF(:, 1:YDCPG_OPTS%KFLEVG), & + & YDVARS%GEOMETRY%OROG%T0, YDMF_PHYS%OUT%UGST, YDMF_PHYS%OUT%VGST, YDMF_PHYS%OUT%CLPH, ICLPH) - PPBLH(KIDIA:KFDIA)=MIN(XMAXLM,MAX(XMINLM,PPBLH(KIDIA:KFDIA))) + YDMF_PHYS%OUT%CLPH(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=MIN(XMAXLM,MAX(XMINLM,YDMF_PHYS%OUT%CLPH(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA))) - CALL ACVISIH(YDVISI,KIDIA,KFDIA,KLON,KTDIA,KLEV,PAPHIM,PAPHIFM,PAPRSFM,& - & ZTM,ZRHM,ZQCM,ZQIM,ZQRM,ZQSM,ZQGM,PVISICLD, PVISIHYDRO,PMXCLWC) + CALL ACVISIH(YDCST, YDVISI, YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KLON, YDCPG_OPTS%KTDIA, YDCPG_OPTS%KFLEVG, & + & YDMF_PHYS_BASE_STATE%YCPG_DYN%PHI, YDMF_PHYS_BASE_STATE%YCPG_DYN%PHIF, YDMF_PHYS_BASE_STATE%YCPG_PHY%PREF, & + & ZTM, ZRHM, ZQCM, ZQIM, ZQRM, ZQSM, ZQGM, YDMF_PHYS%OUT%VISICLD, YDMF_PHYS%OUT%VISIHYD, YDMF_PHYS%OUT%MXCLWC & + & ) ELSE - ZSFSV_(KIDIA:KFDIA,:)=0._JPRB + ZSFSV_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,:)=0._JPRB ENDIF ! <== End block "IF (LMSE)" @@ -2747,14 +2591,14 @@ ENDIF ! <== End block "IF (LMSE)" ! -------------------------------------------------------- IF (LSQUALL.AND.LTURB) THEN - ! on n'a besoin que d'un flux sur V (U est nul). - DO JLON=KIDIA,KFDIA + ! on n'a besoin que d'un flux sur V (U est nul). + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA IF (ABS(ZVM__(JLON,IKB)) <= 1.E-12) THEN ZSFV_(JLON)=0._JPRB ELSE ZSFV_(JLON)=-(ZVM__(JLON,IKB))**2 *& & (0.4_JPRB /(LOG(ZZZ_F_(JLON,IKB)/0.2_JPRB) ) )**2& - & *ZVM__(JLON,IKB)/ABS(ZVM__(JLON,IKB)) + & *ZVM__(JLON,IKB)/ABS(ZVM__(JLON,IKB)) ENDIF ENDDO ENDIF @@ -2763,7 +2607,6 @@ ENDIF ! 9. Shallow Mass Flux Mixing ! ------------------------------------------------------------------ - IF (LMFSHAL) THEN IF (CMF_UPDRAFT=='DUAL') THEN ! Updraft computation from EDMF/ECMWF dual proposal @@ -2775,28 +2618,42 @@ IF (LMFSHAL) THEN ! only 2 and 3 are used for tendency computation in ARO_SHALLOW_MF INDRAFT=3 ! 1 for test, 2 for dry, 3 for wet - IF (KMAXDRAFT < INDRAFT) THEN + IF (YDCPG_OPTS%KMAXDRAFT < INDRAFT) THEN CALL ABOR1('APL_AROME : KMAXDRAFT TOO SMALL !') ENDIF - DO JLON = KIDIA, KFDIA - ZZS_FTH_(JLON)=-1._JPRB*ZSFTH_(JLON)*(PAPRSM(JLON,KLEV)*ZINVATM)**(ZRSCP) + DO JLON = YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA + ZZS_FTH_(JLON)=-1._JPRB*ZSFTH_(JLON)*(YDMF_PHYS_BASE_STATE%YCPG_PHY%PRE(JLON,YDCPG_OPTS%KFLEVG)*ZINVATM)**(ZRSCP) ZZS_FRV_(JLON)=-1._JPRB*ZSFRV_(JLON) ENDDO - ZZS_FU_(KIDIA:KFDIA)=ZSFU_(KIDIA:KFDIA) - ZZS_FV_(KIDIA:KFDIA)=ZSFV_(KIDIA:KFDIA) + ZZS_FU_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=ZSFU_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA) + ZZS_FV_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=ZSFV_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA) + DO JLEV=1,YDCPG_OPTS%KFLEVG + ZZEXNREFM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=ZEXNREFM_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV) + ENDDO + + ! If OCND2 and non-LIMA microphysics use water or mixed-phase cloud fraction for VDFHGHTHL, else use cloud fraction YDVARS%A%T1 + IF (LOCND2.AND.LMICRO.AND.CMICRO/='LIMA') THEN + DO JLEV=1,YDCPG_OPTS%KFLEVG + ZZWCLDFR(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV) = ZWCLDFR_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV) + ENDDO + ELSE + DO JLEV=1,YDCPG_OPTS%KFLEVG + ZZWCLDFR(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV) = YDVARS%A%T1(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV) + ENDDO + ENDIF ! IF LHARATU=TRUE then TKE at t-dt is needed as input for vdfexcuhl so fill ZTKEEDMF with t-1 value from PTKEM IF (LHARATU) THEN - DO JLEV=1,KLEV - ZTKEEDMF(KIDIA:KFDIA,JLEV)=ZTKEM(KIDIA:KFDIA,JLEV) - ZLENGTH_M(KIDIA:KFDIA,JLEV)=0.01_JPRB - ZLENGTH_H(KIDIA:KFDIA,JLEV)=0.01_JPRB - ENDDO - IF (MAXVAL(ZTKEM(KIDIA:KFDIA,1:KLEV)) > 3300._JPRB) THEN - DO JLEV=1, KLEV - DO JLON = KIDIA, KFDIA + DO JLEV=1,YDCPG_OPTS%KFLEVG + ZTKEEDMF(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=ZTKEM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV) + ZLENGTH_M(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=0.01_JPRB + ZLENGTH_H(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=0.01_JPRB + ENDDO + IF (MAXVAL(ZTKEM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG)) > 3300._JPRB) THEN + DO JLEV=1, YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA IF (ZTKEM(JLON,JLEV) > 3300._JPRB) THEN WRITE (NULOUT,*) 'TKE > 3300 ! ' ENDIF @@ -2805,44 +2662,42 @@ IF (LMFSHAL) THEN ENDIF ENDIF - CALL VDFHGHTHL(YDMODEL%YRML_PHY_G%YRVDF,YDMODEL%YRML_PHY_SLIN%YREPHLI, & - & YDMODEL%YRML_PHY_EC%YRECUMF,YDMODEL%YRML_PHY_EC%YREPHY,YDPARAR, & - & KSTEP,KIDIA,KFDIA,KLON,KLEV,INDRAFT,& - & PDT, PUM, PVM,& - & ZTM,ZQVM,ZQCM,ZQIM,PCLFS,& - & PAPRSM, PAPRSFM, ZAPHIFM,ZAPHIM,& - & ZZS_FTH_,ZZS_FRV_,ZZS_FU_,ZZS_FV_,& - & ZMF_UP,ZTHETAL_UP,ZQT_UP,ZTHTV_UP,ZQC_UP,ZQI_UP,& - & ZU_UP, ZV_UP,& - & PGP2DSPP, NGFL_EZDIAG, PEZDIAG, & - & ZTENDQVUP,ZTENDTUP,ZSURFPREP,ZSURFSNOW, & - & ZUPGENL,ZUPGENN, ZCLFR, & - & ZLENGTH_M, ZLENGTH_H, ZTKEEDMF) + CALL VDFHGHTHL(YDMODEL%YRML_PHY_G%YRVDF, YDMODEL%YRML_PHY_SLIN%YREPHLI, YDMODEL%YRML_PHY_EC%YRECUMF, & + & YDMODEL%YRML_PHY_EC%YREPHY, YDPARAR, YDCPG_OPTS%KSTEP, YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KLON, & + & YDCPG_OPTS%KFLEVG, INDRAFT, YDCPG_OPTS%ZDTPHY, YDMF_PHYS_BASE_STATE%U, YDMF_PHYS_BASE_STATE%V, ZTM, ZQVM, & + & ZQCM, ZQIM, ZZWCLDFR, YDMF_PHYS_BASE_STATE%YCPG_PHY%PRE, YDMF_PHYS_BASE_STATE%YCPG_PHY%PREF, & + & ZAPHIFM, ZAPHIM, ZZEXNREFM, ZZS_FTH_, ZZS_FRV_, ZZS_FU_, ZZS_FV_, ZMF_UP, ZTHETAL_UP, ZQT_UP, ZTHTV_UP, & + & ZQC_UP, ZQI_UP, ZU_UP, ZV_UP, & + & ZSPP_ALL%YSPP_CLDDPTH,ZSPP_ALL%YSPP_CLDDPTHDP, & + & ZSPP_ALL%YSPP_RFAC_TWOC,ZSPP_ALL%YSPP_RZC_H,ZSPP_ALL%YSPP_RZL_INF, & + & ZTENDQVUP, ZTENDTUP, ZSURFPREP, & + & ZSURFSNOW, ZUPGENL, ZUPGENN, ZCLFR, ZLENGTH_M, ZLENGTH_H, ZTKEEDMF) + ! tendtup, tendqvup tendencies for non-conserved AROME ! variables due to updraft precipitation/snow (and its evaporation) - DO JLEV = 2 ,KLEV - DO JLON = KIDIA,KFDIA - PTENDT(JLON,JLEV)=PTENDT(JLON,JLEV) + ZTENDTUP(JLON,JLEV) - PTENDR(JLON,JLEV,1)=PTENDR(JLON,JLEV,1) + ZTENDQVUP(JLON,JLEV) + DO JLEV = 2 ,YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZTENDT(JLON,JLEV)=ZTENDT(JLON,JLEV) + ZTENDTUP(JLON,JLEV) + ZTEND_Q(JLON,JLEV)=ZTEND_Q(JLON,JLEV) + ZTENDQVUP(JLON,JLEV) ENDDO ENDDO - - IF(LTOTPREC)THEN + + IF (LTOTPREC.OR.LTOTPRECL) THEN !Add rain and snow tendencies from the sub-grid scheme to tendencies and sources, - !at all vertical levels, instead of diagnosing only surface precip. - ZSURFPREP(KIDIA:KFDIA)=0.0_JPRB - ZSURFSNOW(KIDIA:KFDIA)=0.0_JPRB - DO JLEV= 1, KLEV - DO JLON = KIDIA, KFDIA + !at all vertical levels, instead of diagnosing only surface precip. + ZSURFPREP(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=0.0_JPRB + ZSURFSNOW(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=0.0_JPRB + DO JLEV= 1, YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA !Add rain and snow to sources: ZRS_(JLON,JLEV,3)=ZRS_(JLON,JLEV,3)+ZUPGENL(JLON,JLEV) ZRS_(JLON,JLEV,5)=ZRS_(JLON,JLEV,5)+ZUPGENN(JLON,JLEV) ZTHS__(JLON,JLEV)=ZTHS__(JLON,JLEV)+ZTENDTUP(JLON,JLEV)*(RATM/& - & PAPRSFM(JLON,JLEV))**(RD/RCPD) + & YDMF_PHYS_BASE_STATE%YCPG_PHY%PREF(JLON,JLEV))**(RD/RCPD) !Update rain/snow tendencies: - PTENDR(JLON,JLEV,3)=PTENDR(JLON,JLEV,3)+ZUPGENL(JLON,JLEV) - PTENDR(JLON,JLEV,5)=PTENDR(JLON,JLEV,5)+ZUPGENN(JLON,JLEV) + ZTEND_R(JLON,JLEV)=ZTEND_R(JLON,JLEV)+ZUPGENL(JLON,JLEV) + ZTEND_S(JLON,JLEV)=ZTEND_S(JLON,JLEV)+ZUPGENN(JLON,JLEV) ENDDO ENDDO ENDIF @@ -2850,8 +2705,8 @@ IF (LMFSHAL) THEN ELSE IDRAFT=3 ! only a wet updraft INDRAFT=1 - ZSURFPREP(KIDIA:KFDIA)=0._JPRB - ZSURFSNOW(KIDIA:KFDIA)=0._JPRB + ZSURFPREP(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=0._JPRB + ZSURFSNOW(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=0._JPRB ENDIF DO JDRAFT=IDRAFT,3 @@ -2868,8 +2723,8 @@ IF (LMFSHAL) THEN IF (CMF_UPDRAFT=='DUAL') THEN ! Goes from one of the updraft from the IFS level world to the Méso-NH level world ! go from q to r) - DO JLEV = 1,KLEV - DO JLON = KIDIA,KFDIA + DO JLEV = 1,YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA ZMF_UP__(JLON,JLEV) = ZMF_UP(JLON,JLEV,JDRAFT) ZZU_UP_(JLON,JLEV) = ZU_UP(JLON,JLEV,JDRAFT) ZZV_UP_(JLON,JLEV) = ZV_UP(JLON,JLEV,JDRAFT) @@ -2880,11 +2735,11 @@ IF (LMFSHAL) THEN ZRI_UP_(JLON,JLEV) = ZQI_UP(JLON,JLEV,JDRAFT)/(1.-ZQT_UP(JLON,JLEV,JDRAFT)) ENDDO ENDDO - ZZW_UP_(KIDIA:KFDIA,1:IKT)=0._JPRB - ZZFRAC_UP_(KIDIA:KFDIA,1:IKT)=0._JPRB + ZZW_UP_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:IKT)=0._JPRB + ZZFRAC_UP_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:IKT)=0._JPRB IF (LHARATU) THEN - DO JLEV = 1,KLEV - DO JLON = KIDIA,KFDIA + DO JLEV = 1,YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA ZLENGTHM__(JLON,JLEV) = MAX(0.01_JPRB,ZLENGTH_M(JLON,JLEV)) ZLENGTHH__(JLON,JLEV) = MAX(0.01_JPRB,ZLENGTH_H(JLON,JLEV)) ! TKE should be bigger than a minimum value: @@ -2893,82 +2748,76 @@ IF (LMFSHAL) THEN ENDDO ENDIF ENDIF - IF(MOD(KSTEP+1,NPRINTFR)==0) THEN + IF(MOD(YDCPG_OPTS%KSTEP+1,NPRINTFR)==0) THEN WRITE(NULOUT,*)"apres surface zsfth zsfrv",ZSFTH_(NPTP),ZSFRV_(NPTP) ENDIF - DO JLEV = 1, KLEV - ZRC_MF_(KIDIA:KFDIA,JLEV)=0._JPRB - ZRI_MF_(KIDIA:KFDIA,JLEV)=0._JPRB - ZCF_MF_(KIDIA:KFDIA,JLEV)=0._JPRB + DO JLEV = 1, YDCPG_OPTS%KFLEVG + ZRC_MF_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=0._JPRB + ZRI_MF_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=0._JPRB + ZCF_MF_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=0._JPRB ENDDO IF (JDRAFT == IDRAFT) THEN ! Fill the sum at the first iteration - ZARG_FLXZTHVMF_ => ZFLXZTHVMF_SUM__(:,1:KLEV) + ZARG_FLXZTHVMF_ => ZFLXZTHVMF_SUM__(:,1:YDCPG_OPTS%KFLEVG) ELSE ! increment - ZARG_FLXZTHVMF_ => ZFLXZTHVMF_(:,1:KLEV) + ZARG_FLXZTHVMF_ => ZFLXZTHVMF_(:,1:YDCPG_OPTS%KFLEVG) ENDIF - CALL ARO_SHALLOW_MF (KKL=IKL, KLON=KFDIA,KLEV=KLEV,KRR=NRR,KRRL=NRRL,& - & KRRI=NRRI,KSV=NGFL_EXT,HMF_UPDRAFT=CMF_UPDRAFT, HMF_CLOUD=CMF_CLOUD,& - & HFRAC_ICE=CFRAC_ICE_SHALLOW_MF,& - & OMIXUV=LMIXUV, ONOMIXLG=.FALSE.,KSV_LGBEG=0,KSV_LGEND=0,& - & KTCOUNT=KSTEP+1, PTSTEP=ZDT,& - & PDX=YDGEOMETRY%YREGEO%EDELX, PDY=YDGEOMETRY%YREGEO%EDELY,& - & PZZ=ZZZ_,PZZF=ZZZ_F_,& - & PDZZF=ZDZZ_F_,& - & PRHODJ=ZRHODJM__(:,1:KLEV),& - & PRHODREF=ZRHODREFM__(:,1:KLEV),& - & PPABSM=ZPABSM__(:,1:KLEV),& - & PEXNM=ZEXNREFM_,& - & PSFTH=ZSFTH_,PSFRV=ZSFRV_,& - & PTHM=ZTHM__(:,1:KLEV),PRM=ZRM_,& - & PUM=ZUM__(:,1:KLEV),PVM=ZVM__(:,1:KLEV),& - & PTKEM=ZTKEM__(:,1:KLEV),PSVM=ZSVM_,& - & PDUDT_MF=ZMFUS_,PDVDT_MF=ZMFVS_,& - & PDTHLDT_MF=ZTHLS_,PDRTDT_MF=ZRTS_,& - & PDSVDT_MF=ZSVXXX_,& - & PSIGMF=ZSIGMF_,PRC_MF=ZRC_MF_,& - & PRI_MF=ZRI_MF_,& - & PCF_MF=ZCF_MF_,PFLXZTHVMF=ZARG_FLXZTHVMF_,& - & PTHL_UP=ZTHETAL_UP_,PRT_UP= ZRT_UP_,& - & PRV_UP=ZZRV_UP_,& - & PRC_UP=ZRC_UP_,PRI_UP=ZRI_UP_,& - & PU_UP=ZZU_UP_,PV_UP=ZZV_UP_,& - & PTHV_UP=ZTHETAV_UP_,PW_UP=ZZW_UP_,& - & PFRAC_UP=ZZFRAC_UP_,PEMF=ZMF_UP__(:,1:KLEV)) + CALL ARO_SHALLOW_MF (KKL=IKL, KLON=YDCPG_BNDS%KFDIA, KLEV=YDCPG_OPTS%KFLEVG, KRR=NRR, KRRL=NRRL, & + & KRRI=NRRI, KSV=NGFL_EXT, HMF_UPDRAFT=CMF_UPDRAFT, HMF_CLOUD=CMF_CLOUD, HFRAC_ICE=CFRAC_ICE_SHALLOW_MF, & + & OMIXUV=LMIXUV, ONOMIXLG=.FALSE., KSV_LGBEG=0, KSV_LGEND=0, KTCOUNT=YDCPG_OPTS%KSTEP+1, PTSTEP=ZDT, & + & PDX=YDGEOMETRY%YREGEO%EDELX, PDY=YDGEOMETRY%YREGEO%EDELY, & + & PZZ=ZZZ_, PZZF=ZZZ_F_, PDZZF=ZDZZ_F_, PRHODJ=ZRHODJM__(:, 1:YDCPG_OPTS%KFLEVG), PRHODREF=ZRHODREFM__(:, 1:YDCPG_OPTS%KFLEVG), & + & PPABSM=ZPABSM__(:, 1:YDCPG_OPTS%KFLEVG), PEXNM=ZEXNREFM_, PSFTH=ZSFTH_, PSFRV=ZSFRV_, PTHM=ZTHM__(:, 1:YDCPG_OPTS%KFLEVG), & + & PRM=ZRM_, PUM=ZUM__(:, 1:YDCPG_OPTS%KFLEVG), PVM=ZVM__(:, 1:YDCPG_OPTS%KFLEVG), PTKEM=ZTKEM__(:, 1:YDCPG_OPTS%KFLEVG), & + & PSVM=ZSVM_, PDUDT_MF=ZMFUS_, PDVDT_MF=ZMFVS_, PDTHLDT_MF=ZTHLS_, PDRTDT_MF=ZRTS_, PDSVDT_MF=ZSVXXX_, & + & PSIGMF=ZSIGMF_, PRC_MF=ZRC_MF_, PRI_MF=ZRI_MF_, PCF_MF=ZCF_MF_, PFLXZTHVMF=ZARG_FLXZTHVMF_, PTHL_UP=ZTHETAL_UP_, & + & PRT_UP= ZRT_UP_, PRV_UP=ZZRV_UP_, PRC_UP=ZRC_UP_, PRI_UP=ZRI_UP_, PU_UP=ZZU_UP_, PV_UP=ZZV_UP_, & + & PTHV_UP=ZTHETAV_UP_, PW_UP=ZZW_UP_, PFRAC_UP=ZZFRAC_UP_, PEMF=ZMF_UP__(:, 1:YDCPG_OPTS%KFLEVG) & + & ) + + !wc No variance due to dry updraft yet. + ! Putting ZSIGMF to 0 for dry updraft might be obsolete + IF (LSTATNW) THEN + IF (JDRAFT .EQ. 2) THEN + DO JLEV = 1,YDCPG_OPTS%KFLEVG + ZSIGMF_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=0._JPRB + ENDDO + ENDIF + ENDIF IF (JDRAFT > IDRAFT) THEN ! Add increment - ZFLXZTHVMF_SUM__(KIDIA:KFDIA,1:KLEV)=ZFLXZTHVMF_SUM__(KIDIA:KFDIA,1:KLEV)+ZFLXZTHVMF_(KIDIA:KFDIA,1:KLEV) + ZFLXZTHVMF_SUM__(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG)=ZFLXZTHVMF_SUM__(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG)+ZFLXZTHVMF_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG) ENDIF ! traitement des sorties pour repasser dans le monde Aladin IF ((CMF_CLOUD=='DIRE'.OR.CMF_CLOUD=='BIGA').AND.JDRAFT==3) THEN ! sauvegarde pour le schema de nuage - DO JLEV = 1,KLEV - PEZDIAG(KIDIA:KFDIA,JLEV,1)=ZRC_MF_(KIDIA:KFDIA,JLEV) - PEZDIAG(KIDIA:KFDIA,JLEV,3)=ZRI_MF_(KIDIA:KFDIA,JLEV) - PEZDIAG(KIDIA:KFDIA,JLEV,2)=ZCF_MF_(KIDIA:KFDIA,JLEV) + DO JLEV = 1,YDCPG_OPTS%KFLEVG + ZP1EZDIAG(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV,1)=ZRC_MF_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV) + ZP1EZDIAG(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV,3)=ZRI_MF_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV) + ZP1EZDIAG(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV,2)=ZCF_MF_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV) ENDDO ENDIF - DO JLEV = 1,KLEV - DO JLON = KIDIA,KFDIA + DO JLEV = 1,YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA ZUS__(JLON,JLEV)=ZUS__(JLON,JLEV)+ZMFUS_(JLON,JLEV) ZVS__(JLON,JLEV)=ZVS__(JLON,JLEV)+ZMFVS_(JLON,JLEV) ZTHS__(JLON,JLEV)=ZTHS__(JLON,JLEV)+ZTHLS_(JLON,JLEV) ZRS_(JLON,JLEV,1)=ZRS_(JLON,JLEV,1)+ZRTS_(JLON,JLEV) !calcul de tendance et inversion des niveaux pour le vent horizontal - PTENDU(JLON,JLEV)=PTENDU(JLON,JLEV)+ZMFUS_(JLON,JLEV) - PTENDV(JLON,JLEV)=PTENDV(JLON,JLEV)+ZMFVS_(JLON,JLEV) + YDMF_PHYS%OUT%TENDU(JLON,JLEV)=YDMF_PHYS%OUT%TENDU(JLON,JLEV)+ZMFUS_(JLON,JLEV) + YDMF_PHYS%OUT%TENDV(JLON,JLEV)=YDMF_PHYS%OUT%TENDV(JLON,JLEV)+ZMFVS_(JLON,JLEV) !conversion de la tendance de theta en tendance de T et inversion niveau - PTENDT(JLON,JLEV)=PTENDT(JLON,JLEV)+ZTHLS_(JLON,JLEV)*ZEXNREFM_(JLON,JLEV) - ZTENDT(JLON,JLEV)=ZTENDT(JLON,JLEV)+ZTHLS_(JLON,JLEV) + ZTENDT(JLON,JLEV)=ZTENDT(JLON,JLEV)+ZTHLS_(JLON,JLEV)*ZEXNREFM_(JLON,JLEV) + ZTENDTT(JLON,JLEV)=ZTENDTT(JLON,JLEV)+ZTHLS_(JLON,JLEV) !inversion niveaux tendances des ri et conversion en qi en multipliant par qd - PTENDR(JLON,JLEV,1) = PTENDR(JLON,JLEV,1)+ZRTS_(JLON,JLEV)*ZQDM(JLON,JLEV) + ZTEND_Q(JLON,JLEV) = ZTEND_Q(JLON,JLEV)+ZRTS_(JLON,JLEV)*ZQDM(JLON,JLEV) ENDDO ENDDO @@ -2990,11 +2839,11 @@ IF (LTURB) THEN CALL SWAP_SVS ! well let's keep the copy, though for now OUT=IN anyway. IF (NGFL_EXT /=0 ) THEN - ZSVSIN_(KIDIA:KFDIA,1:KLEV,1:NGFL_EXT)=ZSVS_(KIDIA:KFDIA,1:KLEV,1:NGFL_EXT) + ZSVSIN_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG,1:NGFL_EXT)=ZSVS_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG,1:NGFL_EXT) ENDIF !prints - IF(MOD(KSTEP+1,NPRINTFR)==0) THEN + IF(MOD(YDCPG_OPTS%KSTEP+1,NPRINTFR)==0) THEN WRITE(NULOUT,*)'avant d entrer dans turb sous apl_arome U' WRITE(NULOUT,*)MAXVAL(ZUM__(:,IKB)), MINVAL(ZUM__(:,IKB)) WRITE(NULOUT,*)'avant d entrer dans turb sous apl_arome V' @@ -3003,15 +2852,15 @@ IF (LTURB) THEN WRITE(NULOUT,*)MAXVAL(ZWM__(:,IKB)), MINVAL(ZWM__(:,IKB)) WRITE(NULOUT,*)'avant d entrer dans turb sous apl_arome TKE' WRITE(NULOUT,*)MAXVAL(ZTKEM__(:,IKB)), MINVAL(ZTKEM__(:,IKB)) - DO JLEV=1,KLEV + DO JLEV=1,YDCPG_OPTS%KFLEVG WRITE(NULOUT,*)JLEV,ZUM__(NPTP,JLEV),ZVM__(NPTP,JLEV),ZWM__(NPTP,JLEV),ZTKEM__(NPTP,JLEV) ENDDO WRITE(NULOUT,*)'u v w tke a S' - DO JLEV=1,KLEV + DO JLEV=1,YDCPG_OPTS%KFLEVG WRITE(NULOUT,*)JLEV,ZUS__(NPTP,JLEV),ZVS__(NPTP,JLEV),ZWS__(NPTP,JLEV),ZTKES_(NPTP,JLEV) ENDDO WRITE(NULOUT,*)'ZTHS__ avant turb' - DO JLEV=1,KLEV + DO JLEV=1,YDCPG_OPTS%KFLEVG WRITE(NULOUT,*)JLEV,ZTHS__(NPTP,JLEV) ENDDO ENDIF @@ -3022,9 +2871,9 @@ IF (LTURB) THEN !!$! !!$ IF (NGFL_EXT/=0) THEN !!$ DO JGFL=1,NGFL_EXT -!!$ DO JLON=KIDIA,KFDIA +!!$ DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA !!$ ZSFTURB(JLON,JGFL)=ZSFSV_(JLON,JGFL) -!!$ DO JLEV = 1, KLEV +!!$ DO JLEV = 1, YDCPG_OPTS%KFLEVG !!$ ZTURBM(JLON,JLEV,JGFL)=ZSVM_(JLON,1,JLEV,JGFL) !!$ ZTURBS(JLON,JLEV,JGFL)=ZSVSIN_(JLON,1,JLEV,JGFL) !!$ ENDDO @@ -3034,9 +2883,9 @@ IF (LTURB) THEN !!$! !!$ IF (NLIMA/=0) THEN !!$ DO JGFL=1,NLIMA -!!$ DO JLON=KIDIA,KFDIA +!!$ DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA !!$ ZSFTURB(JLON,NGFL_EXT+JGFL)=0. -!!$ DO JLEV = 1, KLEV +!!$ DO JLEV = 1, YDCPG_OPTS%KFLEVG !!$ ZTURBM(JLON,JLEV,NGFL_EXT+JGFL)=ZLIMAM_(JLON,JLEV,JGFL) !!$ ZTURBS(JLON,JLEV,NGFL_EXT+JGFL)=ZLIMASIN_(JLON,JLEV,JGFL) !!$ ENDDO @@ -3045,16 +2894,16 @@ IF (LTURB) THEN !!$ ENDIF ! Input variable indeed. REK - ZSFSVLIMA_(KIDIA:KFDIA,1:NLIMA)=0._JPRB + ZSFSVLIMA_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:NLIMA)=0._JPRB ! 10.2 calcul TURB - ZZTOP_(KIDIA:KFDIA)=ZAPHIM(KIDIA:KFDIA,0)*ZINVG + ZZTOP_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=ZAPHIM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,0)*ZINVG IF (LGRADHPHY) THEN - ! - DO JLEV = 1,KLEV - DO JGR=1,NGRADIENTS - ZTURB3D__(KIDIA:KFDIA,JLEV,JGR)=PTURB3D(KIDIA:KFDIA,JGR,JLEV) + ! + DO JGR=1,NGRADIENTS + DO JLEV = 1,YDCPG_OPTS%KFLEVG + ZTURB3D__(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV,JGR)=YDMF_PHYS%GRA%G(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV,JGR) ENDDO ENDDO @@ -3062,40 +2911,27 @@ IF (LTURB) THEN ! Appel avec les arguments modifiés pour variables LIMA : ! KSV_TURB, ZSFTURB, ZTURBM, ZTURBS, ZTENDSV_TURB - CALL ARO_TURB_MNH(KKA=IKA,KKU=IKU,KKL=IKL,KLON=KFDIA,KLEV=KLEV,& - & KRR=NRR, KRRL=NRRL,KRRI= NRRI,& - & KSV=NLIMA,KTCOUNT=KSTEP+1,KGRADIENTS=NGRADIENTS,& - &LDHARATU=LHARATU,CMICRO=CMICRO,PTSTEP=ZDT,& - & PZZ=ZZZ_,PZZF=ZZZ_F_,& - & PZZTOP=ZZTOP_,PRHODJ=ZRHODJM__,PTHVREF=ZTHVREFM__,& - & HINST_SFU='M',& - & PSFTH=ZSFTH_,PSFRV=ZSFRV_,& - & PSFSV=ZSFSVLIMA_,PSFU=ZSFU_,& - & PSFV=ZSFV_,PPABSM=ZPABSM__,& - & PUM=ZUM__,PVM=ZVM__,PWM=ZWM__,PTKEM=ZTKEM__,PEPSM=ZEPSM,& - & PSVM=ZLIMAM_,& - & PSRCM=ZSRCS__,PTHM=ZTHM__,& - & PRM=ZRM_,& - & PRUS=ZUS__,PRVS=ZVS__,PRWS=ZWS__,PRTHS=ZTHS__,& - & PRRS=ZRS_,& - & PRSVSIN=ZLIMASIN_,PRSVS=ZLIMAS_,& - & PRTKES=ZTKES_,PRTKES_OUT=ZTKES_OUT__,& - & PREPSS=ZEPSS,PHGRAD=ZTURB3D__,PSIGS=ZSIGS__,& - & OSUBG_COND=LOSUBG_COND,& - & PFLXZTHVMF=ZFLXZTHVMF_SUM__,& - & PLENGTHM=ZLENGTHM__,PLENGTHH=ZLENGTHH__,MFMOIST=ZMF_UP__,PDRUS_TURB=ZTENDU_TURB__, & - & PDRVS_TURB=ZTENDV_TURB__,PDRTHLS_TURB=ZTENDTHL_TURB__,PDRRTS_TURB=ZTENDRT_TURB__,& - & PDRSVS_TURB=ZTENDSV_TURBLIMA_,& - & PDP=ZDP__, PTP=ZTP__,PTPMF=ZTPMF__,PTDIFF=ZTDIFF__,PTDISS=ZTDISS__,PEDR=ZEDR__,YDDDH=YDDDH,& - & YDLDDH=YDMODEL%YRML_DIAG%YRLDDH,YDMDDH=YDMODEL%YRML_DIAG%YRMDDH) + CALL ARO_TURB_MNH(KKA=IKA, KKU=IKU, KKL=IKL, KLON=YDCPG_BNDS%KFDIA, KLEV=YDCPG_OPTS%KFLEVG, KRR=NRR, & + & KRRL=NRRL, KRRI= NRRI, KSV=NLIMA, KTCOUNT=YDCPG_OPTS%KSTEP+1, KGRADIENTS=NGRADIENTS, LDHARATU=LHARATU, & + & CMICRO=CMICRO, & + & PTSTEP=ZDT, PZZ=ZZZ_, PZZF=ZZZ_F_, PZZTOP=ZZTOP_, PRHODJ=ZRHODJM__, PTHVREF=ZTHVREFM__, & + & HINST_SFU='M', PSFTH=ZSFTH_, PSFRV=ZSFRV_, PSFSV=ZSFSVLIMA_, PSFU=ZSFU_, & + & PSFV=ZSFV_, PPABSM=ZPABSM__, PUM=ZUM__, PVM=ZVM__, PWM=ZWM__, PTKEM=ZTKEM__, PEPSM=ZEPSM, PSVM=ZLIMAM_, & + & PSRCM=ZSRCS__, PTHM=ZTHM__, PRM=ZRM_, PRUS=ZUS__, PRVS=ZVS__, PRWS=ZWS__, PRTHS=ZTHS__, PRRS=ZRS_, & + & PRSVSIN=ZLIMASIN_, PRSVS=ZLIMAS_, PRTKES=ZTKES_, PRTKES_OUT=ZTKES_OUT__, PREPSS=ZEPSS, PHGRAD=ZTURB3D__, & + & PSIGS=ZSIGS__, OSUBG_COND=LOSUBG_COND, PFLXZTHVMF=ZFLXZTHVMF_SUM__, PLENGTHM=ZLENGTHM__, PLENGTHH=ZLENGTHH__, & + & MFMOIST=ZMF_UP__, PDRUS_TURB=ZTENDU_TURB__, PDRVS_TURB=ZTENDV_TURB__, PDRTHLS_TURB=ZTENDTHL_TURB__, & + & PDRRTS_TURB=ZTENDRT_TURB__, PDRSVS_TURB=ZTENDSV_TURBLIMA_, PDP=ZDP__, PTP=ZTP__, PTPMF=ZTPMF__, PTDIFF=ZTDIFF__, & + & PTDISS=ZTDISS__, PEDR=ZEDR__, YDDDH=YDDDH, YDLDDH=YDMODEL%YRML_DIAG%YRLDDH, YDMDDH=YDMODEL%YRML_DIAG%YRMDDH & + & ) ! Séparation des variables SV (NGFL_EXT + NLIMA) !!$ IF (NGFL_EXT/=0) THEN !!$ DO JGFL=1,NGFL_EXT -!!$ DO JLON=KIDIA,KFDIA +!!$ DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA !!$ ZSFSV_(JLON,JGFL)=ZSFTURB(JLON,JGFL) -!!$ DO JLEV = 1, KLEV +!!$ DO JLEV = 1, YDCPG_OPTS%KFLEVG !!$ ZSVM_(JLON,1,JLEV,JGFL)=ZTURBM(JLON,JLEV,JGFL) !!$ ZSVS_(JLON,1,JLEV,JGFL)=ZTURBS(JLON,JLEV,JGFL) !!$ ENDDO @@ -3105,8 +2941,8 @@ IF (LTURB) THEN !!$! !!$ IF (NLIMA/=0) THEN !!$ DO JGFL=1,NLIMA -!!$ DO JLON=KIDIA,KFDIA -!!$ DO JLEV = 1, KLEV +!!$ DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA +!!$ DO JLEV = 1, YDCPG_OPTS%KFLEVG !!$ ZLIMAM_(JLON,JLEV,JGFL)=ZTURBM(JLON,JLEV,NGFL_EXT+JGFL) !!$ ZLIMAS_(JLON,JLEV,JGFL)=ZTURBS(JLON,JLEV,NGFL_EXT+JGFL) !!$ ENDDO @@ -3115,42 +2951,40 @@ IF (LTURB) THEN !!$ ENDIF - DO JLEV = 1 , KLEV - PEDR(KIDIA:KFDIA,JLEV)=ZEDR__(KIDIA:KFDIA,JLEV) + DO JLEV = 1 , YDCPG_OPTS%KFLEVG + YDMF_PHYS%OUT%EDR(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=ZEDR__(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV) ENDDO IF (LFLEXDIA) THEN - DO JLEV = 1,KLEV - DO JLON = KIDIA,KFDIA - ZDP__(JLON,JLEV)=ZDP__(JLON,JLEV)*PDELPM(JLON,JLEV)*ZINVG - ZTP__(JLON,JLEV)=(ZTP__(JLON,JLEV)-ZTPMF__(JLON,JLEV))*PDELPM(JLON,JLEV)*ZINVG - ZTPMF__(JLON,JLEV)=ZTPMF__(JLON,JLEV)*PDELPM(JLON,JLEV)*ZINVG - ZTDIFF__(JLON,JLEV)=ZTDIFF__(JLON,JLEV)*PDELPM(JLON,JLEV)*ZINVG - ZTDISS__(JLON,JLEV)=ZTDISS__(JLON,JLEV)*PDELPM(JLON,JLEV)*ZINVG - ENDDO - ENDDO - IF (LDDH_OMP) THEN - CALL NEW_ADD_FIELD_3D(YDMODEL%YRML_DIAG%YRMDDH,ZDP__(:,1:KLEV),'TKEPRDY',YDDDH) - CALL NEW_ADD_FIELD_3D(YDMODEL%YRML_DIAG%YRMDDH,ZTP__(:,1:KLEV),'TKEPRTH',YDDDH) - CALL NEW_ADD_FIELD_3D(YDMODEL%YRML_DIAG%YRMDDH,ZTPMF__(:,1:KLEV),'TKEPRTHMF',YDDDH) - CALL NEW_ADD_FIELD_3D(YDMODEL%YRML_DIAG%YRMDDH,ZTDIFF__(:,1:KLEV),'TKEDIFF',YDDDH) - CALL NEW_ADD_FIELD_3D(YDMODEL%YRML_DIAG%YRMDDH,ZTDISS__(:,1:KLEV),'TKEDISS',YDDDH) - ELSE - CALL ADD_FIELD_3D(YLDDH,ZDP__(:,1:KLEV),'TKEPRDY','T','ARO',.TRUE.,.TRUE.) - CALL ADD_FIELD_3D(YLDDH,ZTP__(:,1:KLEV),'TKEPRTH','T','ARO',.TRUE.,.TRUE.) - CALL ADD_FIELD_3D(YLDDH,ZTPMF__(:,1:KLEV),'TKEPRTHMF','T','ARO',.TRUE.,.TRUE.) - CALL ADD_FIELD_3D(YLDDH,ZTDIFF__(:,1:KLEV),'TKEDIFF','T','ARO',.TRUE.,.TRUE.) - CALL ADD_FIELD_3D(YLDDH,ZTDISS__(:,1:KLEV),'TKEDISS','T','ARO',.TRUE.,.TRUE.) - ENDIF + DO JLEV = 1,YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZDP__(JLON,JLEV)=ZDP__(JLON,JLEV)*YDMF_PHYS_BASE_STATE%YCPG_PHY%XYB%DELP(JLON,JLEV)*ZINVG + ZTP__(JLON,JLEV)=(ZTP__(JLON,JLEV)-ZTPMF__(JLON,JLEV))*YDMF_PHYS_BASE_STATE%YCPG_PHY%XYB%DELP(JLON,JLEV)*ZINVG + ZTPMF__(JLON,JLEV)=ZTPMF__(JLON,JLEV)*YDMF_PHYS_BASE_STATE%YCPG_PHY%XYB%DELP(JLON,JLEV)*ZINVG + ZTDIFF__(JLON,JLEV)=ZTDIFF__(JLON,JLEV)*YDMF_PHYS_BASE_STATE%YCPG_PHY%XYB%DELP(JLON,JLEV)*ZINVG + ZTDISS__(JLON,JLEV)=ZTDISS__(JLON,JLEV)*YDMF_PHYS_BASE_STATE%YCPG_PHY%XYB%DELP(JLON,JLEV)*ZINVG + ENDDO + ENDDO + CALL NEW_ADD_FIELD_3D(YDMODEL%YRML_DIAG%YRMDDH, ZDP__(:, 1:YDCPG_OPTS%KFLEVG), 'TKEPRDY', & + & YDDDH ) + CALL NEW_ADD_FIELD_3D(YDMODEL%YRML_DIAG%YRMDDH, ZTP__(:, 1:YDCPG_OPTS%KFLEVG), 'TKEPRTH', & + & YDDDH ) + CALL NEW_ADD_FIELD_3D(YDMODEL%YRML_DIAG%YRMDDH, ZTPMF__(:, 1:YDCPG_OPTS%KFLEVG), 'TKEPRTHMF', & + & YDDDH) + CALL NEW_ADD_FIELD_3D(YDMODEL%YRML_DIAG%YRMDDH, ZTDIFF__(:, 1:YDCPG_OPTS%KFLEVG), 'TKEDIFF', & + & YDDDH) + CALL NEW_ADD_FIELD_3D(YDMODEL%YRML_DIAG%YRMDDH, ZTDISS__(:, 1:YDCPG_OPTS%KFLEVG), 'TKEDISS', & + & YDDDH) + ENDIF - IF(MOD(KSTEP+1,NPRINTFR)==0) THEN + IF(MOD(YDCPG_OPTS%KSTEP+1,NPRINTFR)==0) THEN WRITE(NULOUT,*)'u v w a S apres turb' - DO JLEV=1,KLEV + DO JLEV=1,YDCPG_OPTS%KFLEVG WRITE(NULOUT,*)JLEV,ZUS__(NPTP,JLEV),ZVS__(NPTP,JLEV),ZWS__(NPTP,JLEV),ZTKES_OUT__(NPTP,JLEV) ENDDO WRITE(NULOUT,*)'THS TKES SIGS apres turb' - DO JLEV=1,KLEV + DO JLEV=1,YDCPG_OPTS%KFLEVG WRITE(NULOUT,*)JLEV,ZTHS__(NPTP,JLEV),ZTKES_OUT__(NPTP,JLEV),ZSIGS__(NPTP,JLEV) ENDDO ENDIF @@ -3158,13 +2992,13 @@ IF (LTURB) THEN ! avance temporelle et inversion niveau pour ZSIGS__ IF (LOSUBG_COND .AND. LOSIGMAS) THEN IF (CMF_CLOUD=='DIRE'.OR.CMF_CLOUD=='BIGA'.OR.CMF_CLOUD=='NONE') THEN - DO JLEV = 1,KLEV - PSIGS(KIDIA:KFDIA,JLEV)=ZSIGS__(KIDIA:KFDIA,JLEV) + DO JLEV = 1,YDCPG_OPTS%KFLEVG + YDVARS%SRC%T1(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=ZSIGS__(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV) ENDDO ELSEIF (CMF_CLOUD=='STAT') THEN - DO JLEV = 1,KLEV - DO JLON = KIDIA,KFDIA - PSIGS(JLON,JLEV)=SQRT(ZSIGS__(JLON,JLEV)**2+ZSIGMF_(JLON,JLEV)**2 ) + DO JLEV = 1,YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + YDVARS%SRC%T1(JLON,JLEV)=SQRT(ZSIGS__(JLON,JLEV)**2+ZSIGMF_(JLON,JLEV)**2 ) ENDDO ENDDO ENDIF @@ -3174,57 +3008,81 @@ IF (LTURB) THEN !10.3. traitement des sorties pour repasser dans le monde Aladin !calcul de tendance et inversion des niveaux pour le vent horizontal et la TKE - DO JLEV = 1,KLEV - DO JLON = KIDIA,KFDIA - PTENDU(JLON,JLEV)=PTENDU(JLON,JLEV)+ZTENDU_TURB__(JLON,JLEV) - PTENDV(JLON,JLEV)=PTENDV(JLON,JLEV)+ZTENDV_TURB__(JLON,JLEV) + DO JLEV = 1,YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + YDMF_PHYS%OUT%TENDU(JLON,JLEV)=YDMF_PHYS%OUT%TENDU(JLON,JLEV)+ZTENDU_TURB__(JLON,JLEV) + YDMF_PHYS%OUT%TENDV(JLON,JLEV)=YDMF_PHYS%OUT%TENDV(JLON,JLEV)+ZTENDV_TURB__(JLON,JLEV) ! for the moment, turbulence do not compute w tendency: - PTENDW(JLON,JLEV)=0.0_JPRB + ZTENDW(JLON,JLEV)=0.0_JPRB ! PTENDW(JLON,JLEV)+(ZWS__(JLON,JLEV)-& ! & ZWS_AVE(JLON,1,JLEV)) !conversion de la tendance de theta en tendance de T et inversion niveau - PTENDT(JLON,JLEV)=PTENDT(JLON,JLEV)+ZTENDTHL_TURB__(JLON,JLEV)*ZEXNREFM_(JLON,JLEV) + ZTENDT(JLON,JLEV)=ZTENDT(JLON,JLEV)+ZTENDTHL_TURB__(JLON,JLEV)*ZEXNREFM_(JLON,JLEV) !inversion niveaux tendances des rv et conversion en qv en multipliant par qd - PTENDR(JLON,JLEV,1)= PTENDR(JLON,JLEV,1)+ZTENDRT_TURB__(JLON,JLEV)*ZQDM(JLON,JLEV) + ZTEND_Q(JLON,JLEV)= ZTEND_Q(JLON,JLEV)+ZTENDRT_TURB__(JLON,JLEV)*ZQDM(JLON,JLEV) ENDDO ENDDO IF (LHARATU) THEN - DO JLEV = 1,KLEV - DO JLON = KIDIA,KFDIA - PTENDTKE(JLON,JLEV)=PTENDTKE(JLON,JLEV)+(ZTKEEDMFS(JLON,JLEV)-ZTKES_(JLON,JLEV)) + DO JLEV = 1,YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZTENDTKE(JLON,JLEV)=ZTENDTKE(JLON,JLEV)+(ZTKEEDMFS(JLON,JLEV)-ZTKES_(JLON,JLEV)) ENDDO ENDDO ELSE - DO JLEV = 1,KLEV - DO JLON = KIDIA,KFDIA - PTENDTKE(JLON,JLEV)=PTENDTKE(JLON,JLEV)+(ZTKES_OUT__(JLON,JLEV)-ZTKES_(JLON,JLEV)) + DO JLEV = 1,YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZTENDTKE(JLON,JLEV)=ZTENDTKE(JLON,JLEV)+(ZTKES_OUT__(JLON,JLEV)-ZTKES_(JLON,JLEV)) ENDDO ENDDO ENDIF DO JGFL=1,NGFL_EXT - DO JLEV = 1,KLEV - DO JLON = KIDIA,KFDIA - PTENDEXT(JLON,JLEV,JGFL)=PTENDEXT(JLON,JLEV,JGFL)+(ZSVS_(JLON,JLEV,JGFL)-ZSVSIN_(JLON,JLEV,JGFL)) + DO JLEV = 1,YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZTENDEXT(JLON,JLEV,JGFL)=ZTENDEXT(JLON,JLEV,JGFL)+(ZSVS_(JLON,JLEV,JGFL)-ZSVSIN_(JLON,JLEV,JGFL)) ENDDO ENDDO ENDDO ! Tendances LIMA DO JGFL=1,NLIMA - DO JLEV = 1, KLEV - DO JLON=KIDIA,KFDIA - PTENDLIMA(JLON,JLEV,JGFL)=PTENDLIMA(JLON,JLEV,JGFL)+ZTENDSV_TURBLIMA_(JLON,JLEV,JGFL) + DO JLEV = 1, YDCPG_OPTS%KFLEVG + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZTENDLIMA(JLON,JLEV,JGFL)=ZTENDLIMA(JLON,JLEV,JGFL)+ZTENDSV_TURBLIMA_(JLON,JLEV,JGFL) ! PTENDLIMA(JLON,JLEV,:)=PTENDLIMA(JLON,JLEV,:)+ (ZLIMAS_(JLON,JLEV,:)-ZLIMASIN_(JLON,JLEV,:)) ENDDO ENDDO ENDDO ENDIF +IF(LWINDFARM)THEN + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZP1EZDIAG(JLON,1,5)=0.0_JPRB + IF(GFL_WKA(JLON,YDCPG_BNDS%KBL)>0.0)THEN + JGFL=INT(GFL_WKA2(1,6,YDCPG_BNDS%KBL))*1_JPIM + CALL ARO_WINDFARM(YDGEOMETRY,YDMODEL,YDVARS%GEOMETRY%OROG%T0(JLON), & + & YDMF_PHYS_BASE_STATE%U(JLON,1:YDCPG_OPTS%KFLEVG),YDMF_PHYS_BASE_STATE%V(JLON,1:YDCPG_OPTS%KFLEVG),& + & YDMF_PHYS_BASE_STATE%YCPG_PHY%W(JLON,1:YDCPG_OPTS%KFLEVG),YDMF_PHYS_BASE_STATE%TKE(JLON,1:YDCPG_OPTS%KFLEVG),& + & YDMF_PHYS_BASE_STATE%YCPG_DYN%PHI(JLON,0:YDCPG_OPTS%KFLEVG),& + & YDMF_PHYS_BASE_STATE%YCPG_PHY%PREF(JLON,1:YDCPG_OPTS%KFLEVG),ZTENDU_TURB__(JLON,1:YDCPG_OPTS%KFLEVG),& + & ZTENDV_TURB__(JLON,1:YDCPG_OPTS%KFLEVG),ZTKES_OUT__(JLON,1:YDCPG_OPTS%KFLEVG),& + & GFL_WKA(JLON,YDCPG_BNDS%KBL),GFL_WKA2(1:JGFL,1:6,YDCPG_BNDS%KBL),YDCPG_OPTS%KFLEVG,& + & YDCPG_OPTS%KSTEP,JGFL,ZP1EZDIAG(JLON,1,5)) + DO JLEV=1,YDCPG_OPTS%KFLEVG + YDMF_PHYS%OUT%TENDU(JLON,JLEV)=YDMF_PHYS%OUT%TENDU(JLON,JLEV)+ZTENDU_TURB__(JLON,JLEV) + YDMF_PHYS%OUT%TENDV(JLON,JLEV)=YDMF_PHYS%OUT%TENDV(JLON,JLEV)+ZTENDV_TURB__(JLON,JLEV) + ZTENDTKE(JLON,JLEV)=ZTENDTKE(JLON,JLEV)+ZTKES_OUT__(JLON,JLEV) + !WRITE(*,*) 'windfarm tendencies dU/dt,dV/dt,dTKE/dt' + !WRITE(*,*)ZTENDU_TURB(JLON,1,JLEV),ZTENDV_TURB(JLON,1,JLEV),& + ! & ZZI_TKES(JLON,1,JLEV) + ENDDO + ENDIF + ENDDO +ENDIF ! ------------------------------------------------------------------ -! 11 - MICROPHYSIQUE. +! 11 - MICROPHYSIQUE. ! -------------------------------------------------------------------- IF (LMICRO) THEN @@ -3235,90 +3093,94 @@ IF (LMICRO) THEN CALL SWAP_LIMAS ! for now a copy is needed (see below, inside). I don't like than :-( REK - ZTHS__(KIDIA:KFDIA,1:KLEV)=ZTHSIN_(KIDIA:KFDIA,1:KLEV) - ZRS_(KIDIA:KFDIA,1:KLEV,1:NRR)=ZRSIN_(KIDIA:KFDIA,1:KLEV,1:NRR) + ZTHS__(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG)=ZTHSIN_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG) + ZRS_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG,1:NRR)=ZRSIN_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG,1:NRR) ! for now a copy is needed (see below, inside). I don't like than :-( REK - ZLIMAS_(KIDIA:KFDIA,1:KLEV,1:NLIMA)=ZLIMASIN_(KIDIA:KFDIA,1:KLEV,1:NLIMA) + ZLIMAS_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG,1:NLIMA)=ZLIMASIN_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG,1:NLIMA) !prints - IF (MOD(KSTEP+1,NPRINTFR)==0) THEN + IF (MOD(YDCPG_OPTS%KSTEP+1,NPRINTFR)==0) THEN WRITE(NULOUT,*)'avant rain_ice sous apl_arome' WRITE(NULOUT,*)'JLEV ZZZ_F_ ZZZ_ ZRHODREF',& - & ' ZRHODJ ZPABSM__ ZTHSIN_ ZTHM__ ' - DO JLEV=1,KLEV+1 + & ' ZRHODJ ZPABSM__ ZTHSIN_ ZTHM__ ' + DO JLEV=1,YDCPG_OPTS%KFLEVG WRITE(NULOUT,'(I2,X,7F10.3)')JLEV,ZZZ_F_(NPTP,JLEV),ZZZ_(NPTP,JLEV), ZRHODREFM__(NPTP,JLEV),& & ZRHODJM__(NPTP,JLEV), ZPABSM__(NPTP,JLEV), ZTHSIN_(NPTP,JLEV), ZTHM__(NPTP,JLEV) ENDDO WRITE(NULOUT,*)'JLEV PDELPM ZPABSM__ ZEXNREF',' ZSIGS__' - DO JLEV=2,KLEV - WRITE(NULOUT,'(I2,X,4f10.3)')JLEV, PDELPM(NPTP,JLEV),& - & ZPABSM__(NPTP,JLEV),ZEXNREFM_(NPTP,JLEV),ZSIGS__(NPTP,JLEV) + DO JLEV=2,YDCPG_OPTS%KFLEVG + WRITE(NULOUT,'(I2,X,4f10.3)')JLEV, YDMF_PHYS_BASE_STATE%YCPG_PHY%XYB%DELP(NPTP,JLEV),& + & ZPABSM__(NPTP,JLEV),ZEXNREFM_(NPTP,JLEV),ZSIGS__(NPTP,JLEV) ENDDO WRITE(NULOUT,*)'JLEV PTM PRM PCPM' - DO JLEV=1,KLEV - WRITE(NULOUT,'(I2,X,3f10.3)')JLEV,ZTM(NPTP,KLEV+1-JLEV), ZRHM(NPTP,KLEV+1-JLEV) ,ZCPM(NPTP,KLEV+1-JLEV) + DO JLEV=1,YDCPG_OPTS%KFLEVG + WRITE(NULOUT,'(I2,X,3f10.3)')JLEV,ZTM(NPTP,YDCPG_OPTS%KFLEVG+1-JLEV), ZRHM(NPTP,YDCPG_OPTS%KFLEVG+1-JLEV) ,ZCPM(NPTP,YDCPG_OPTS%KFLEVG+1-JLEV) ENDDO WRITE (NULOUT,*)'JLEV rhoQv rhoQc rhoQr rhoQi rhoQs rhoQg' - DO JLEV=1,KLEV + DO JLEV=1,YDCPG_OPTS%KFLEVG WRITE(NULOUT,'(I2,X,6E11.4)')JLEV,ZRM_(NPTP,JLEV,1), ZRM_(NPTP,JLEV,2),& - & ZRM_(NPTP,JLEV,3),ZRM_(NPTP,JLEV,4),ZRM_(NPTP,JLEV,5), ZRM_(NPTP,JLEV,6) + & ZRM_(NPTP,JLEV,3),ZRM_(NPTP,JLEV,4),ZRM_(NPTP,JLEV,5), ZRM_(NPTP,JLEV,6) ENDDO WRITE (NULOUT,*)'JLEV ZRSQv ZRSQc ZRSQr ZRSQi ZRSQs ZRSQg' - DO JLEV=1,KLEV + DO JLEV=1,YDCPG_OPTS%KFLEVG WRITE(NULOUT,'(I2,X,6E11.4)')JLEV,ZRS_(NPTP,JLEV,1), ZRS_(NPTP,JLEV,2),& - & ZRSIN_(NPTP,JLEV,3),ZRSIN_(NPTP,JLEV,4),ZRSIN_(NPTP,JLEV,5), ZRSIN_(NPTP,JLEV,6) + & ZRSIN_(NPTP,JLEV,3),ZRSIN_(NPTP,JLEV,4),ZRSIN_(NPTP,JLEV,5), ZRSIN_(NPTP,JLEV,6) ENDDO WRITE(NULOUT,*)'ZDT=',ZDT - WRITE(NULOUT,*)'NRR and co',NRR,KSTEP+1,NSPLITR,LOSUBG_COND, LOSIGMAS, CSUBG_AUCV_RC,LOWARM + WRITE(NULOUT,*)'NRR and co',NRR,YDCPG_OPTS%KSTEP+1,NSPLITR,LOSUBG_COND, LOSIGMAS, CSUBG_AUCV_RC,LOWARM ENDIF - - ZSEA_(KIDIA:KFDIA)=0.0_JPRB + ZSEA_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=0.0_JPRB IF (LOLSMC) THEN - DO JLON = KIDIA, KFDIA - IF (PLSM(JLON) < 0.5) THEN + DO JLON = YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA + IF (YDMF_PHYS_SURF%GSD_VF%PLSM(JLON) < 0.5) THEN ZSEA_(JLON) = 1.0_JPRB ENDIF ENDDO ENDIF - + IF (LOTOWNC) THEN - ZTOWN_(KIDIA:KFDIA) = ZTOWNS_(KIDIA:KFDIA) + ZTOWN_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA) = ZTOWNS_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA) ELSE - ZTOWN_(KIDIA:KFDIA)=0.0_JPRB - ENDIF + ZTOWN_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=0.0_JPRB + ENDIF IF (CMICRO == 'LIMA') THEN IF (LTURB) THEN - DO JLON=KIDIA,KFDIA - DO JLEV=1,KLEV + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + DO JLEV=1,YDCPG_OPTS%KFLEVG ZWNU_(JLON,JLEV) = ZWM__(JLON,JLEV) + 0.66*SQRT(ZTKEM__(JLON,JLEV)) ENDDO ENDDO - ZPTRWNU_ => ZWNU_(1:KFDIA,1:KLEV) + ZPTRWNU_ => ZWNU_(1:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG) ELSE - ZPTRWNU_ => ZWM__(1:KFDIA,1:KLEV) + ZPTRWNU_ => ZWM__(1:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG) ENDIF - CALL ARO_LIMA(KLEV,IKU,IKL,KFDIA,KLEV,NRR,NLIMA,KSTEP+1,NSPLITR,NSPLITG, ZDT,ZDZZ_ ,& - & ZRHODJM__(:,1:KLEV),ZRHODREFM__(:,1:KLEV), ZEXNREFM_, ZPABSM__(:,1:KLEV), ZPTRWNU_, & - & ZTHM__(:,1:KLEV),ZRM_, ZLIMAM_, ZTHS__(:,1:KLEV),ZRS_, ZLIMAS_, ZEVAP_, & - & ZINPRR_NOTINCR_, ZINPRS_NOTINCR_, ZINPRG_NOTINCR_, ZINPRH_NOTINCR_,ZPFPR_,& - & YDDDH, YDMODEL%YRML_DIAG%YRLDDH, YDMODEL%YRML_DIAG%YRMDDH ) + CALL ARO_LIMA(YDCPG_OPTS%KFLEVG, IKU, IKL, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KFLEVG, NRR, NLIMA, YDCPG_OPTS%KSTEP+1, & + & NSPLITR, NSPLITG, ZDT, ZDZZ_, ZRHODJM__(:, 1:YDCPG_OPTS%KFLEVG), ZRHODREFM__(:, 1:YDCPG_OPTS%KFLEVG), & + & ZEXNREFM_, ZPABSM__(:, 1:YDCPG_OPTS%KFLEVG), ZPTRWNU_, ZTHM__(:, 1:YDCPG_OPTS%KFLEVG), ZRM_, & + & ZLIMAM_, ZTHS__(:, 1:YDCPG_OPTS%KFLEVG), ZRS_, ZLIMAS_, ZEVAP_, ZINPRR_NOTINCR_, & + & ZINPRS_NOTINCR_, ZINPRG_NOTINCR_, ZINPRH_NOTINCR_, ZPFPR_, YDDDH, YDMODEL%YRML_DIAG%YRLDDH, YDMODEL%YRML_DIAG%YRMDDH& + & ) ELSE - CALL ARO_RAIN_ICE (NPROMICRO,KLEV,IKU,IKL,KFDIA,KLEV,NRR,KSTEP+1,NSPLITR,NGFL_EZDIAG,& - & LOSUBG_COND, CSUBG_AUCV_RC, CSUBG_AUCV_RI, LOSEDIC,CSEDIM, CMICRO, ZDT,ZDZZ_ ,& - & ZRHODJM__(:,1:KLEV),ZRHODREFM__(:,1:KLEV), ZEXNREFM_, ZPABSM__(:,1:KLEV),& - & ZHLC_HRC__(:,1:KLEV), ZHLC_HCF__(:,1:KLEV),& - & ZHLI_HRI__(:,1:KLEV), ZHLI_HCF__(:,1:KLEV),& - & ZTHM__(:,1:KLEV),ZRM_, ZSIGS__(:,1:KLEV), ZNEBMNH_, ZTHS__(:,1:KLEV),ZRS_,& - & ZEVAP_, ZCIT_,LOWARM,ZSEA_,ZTOWN_, LOCND2,LGRSN,& - & ZINPRR_NOTINCR_, ZINPRS_NOTINCR_, ZINPRG_NOTINCR_, ZINPRH_NOTINCR_,ZPFPR_,& - & PGP2DSPP,PEZDIAG, & - & YDDDH, YDMODEL%YRML_DIAG%YRLDDH, YDMODEL%YRML_DIAG%YRMDDH) + CALL ARO_RAIN_ICE (NPROMICRO, YDCPG_OPTS%KFLEVG, IKU, IKL, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KFLEVG, NRR, YDCPG_OPTS%KSTEP+1, & + & NSPLITR, LOSUBG_COND, CSUBG_AUCV_RC, CSUBG_AUCV_RI, LOSEDIC, CSEDIM, CMICRO, ZDT, ZDZZ_, & + & ZRHODJM__(:, 1:YDCPG_OPTS%KFLEVG), ZRHODREFM__(:, 1:YDCPG_OPTS%KFLEVG), ZEXNREFM_, ZPABSM__(:, 1:YDCPG_OPTS%KFLEVG), & + & ZHLC_HRC_, ZHLC_HCF_, ZHLI_HRI_, ZHLI_HCF_, & + & ZTHM__(:, 1:YDCPG_OPTS%KFLEVG), & + & ZRM_, ZSIGS__(:, 1:YDCPG_OPTS%KFLEVG), ZNEBMNH_, ZTHS__(:, 1:YDCPG_OPTS%KFLEVG), ZRS_, ZEVAP_, & + & ZCIT_, LOWARM, ZSEA_, ZTOWN_, & + & ZICLDFR_, ZWCLDFR_, ZSSIO_, ZSSIU_, ZIFR_, & + & LOCND2, LKOGAN, LMODICEDEP,& + & ZINPRR_NOTINCR_, ZINPRS_NOTINCR_, ZINPRG_NOTINCR_, & + & ZINPRH_NOTINCR_, ZPFPR_, & + & YDDDH, YDMODEL%YRML_DIAG%YRLDDH, YDMODEL%YRML_DIAG%YRMDDH,& + & ZSPP_ALL%YSPP_ICENU,ZSPP_ALL%YSPP_KGN_ACON,ZSPP_ALL%YSPP_KGN_SBGR) + ENDIF - DO JLON=KIDIA,KFDIA + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA ZINPRR_(JLON)=ZINPRR_(JLON)+ZINPRR_NOTINCR_(JLON) ZINPRS_(JLON)=ZINPRS_(JLON)+ZINPRS_NOTINCR_(JLON) ZINPRG_(JLON)=ZINPRG_(JLON)+ZINPRG_NOTINCR_(JLON) @@ -3326,27 +3188,27 @@ IF (LMICRO) THEN ENDDO !conversion de la tendance de theta en tendance de T et inversion niveau - DO JLEV = 1,KLEV - DO JLON = KIDIA,KFDIA - PTENDT(JLON,JLEV)= PTENDT(JLON,JLEV)+(ZTHS__(JLON,JLEV)-ZTHSIN_(JLON,JLEV))*ZEXNREFM_(JLON,JLEV) - ZTENDT(JLON,JLEV)= ZTENDT(JLON,JLEV)+ZTHS__(JLON,JLEV)-ZTHSIN_(JLON,JLEV) + DO JLEV = 1,YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZTENDT(JLON,JLEV)= ZTENDT(JLON,JLEV)+(ZTHS__(JLON,JLEV)-ZTHSIN_(JLON,JLEV))*ZEXNREFM_(JLON,JLEV) + ZTENDTT(JLON,JLEV)= ZTENDTT(JLON,JLEV)+ZTHS__(JLON,JLEV)-ZTHSIN_(JLON,JLEV) ENDDO ENDDO - + !inversion niveaux tendances des ri et conversion en qi en multipliant par qd DO JR=1,NRR - DO JLEV=1,KLEV - DO JLON=KIDIA,KFDIA - PTENDR(JLON,JLEV,JR)=PTENDR(JLON,JLEV,JR)+(ZRS_(JLON,JLEV,JR)-ZRSIN_(JLON,JLEV,JR))*ZQDM(JLON,JLEV) + DO JLEV=1,YDCPG_OPTS%KFLEVG + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZTENDRA(JLON,JLEV,JR)=ZTENDRA(JLON,JLEV,JR)+(ZRS_(JLON,JLEV,JR)-ZRSIN_(JLON,JLEV,JR))*ZQDM(JLON,JLEV) ENDDO ENDDO ENDDO ! Tendances des variables LIMA DO JGFL=1,NLIMA - DO JLEV = 1, KLEV - DO JLON=KIDIA,KFDIA - PTENDLIMA(JLON,JLEV,JGFL)=PTENDLIMA(JLON,JLEV,JGFL)+(ZLIMAS_(JLON,JLEV,JGFL)-ZLIMASIN_(JLON,JLEV,JGFL)) + DO JLEV = 1, YDCPG_OPTS%KFLEVG + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZTENDLIMA(JLON,JLEV,JGFL)=ZTENDLIMA(JLON,JLEV,JGFL)+(ZLIMAS_(JLON,JLEV,JGFL)-ZLIMASIN_(JLON,JLEV,JGFL)) ENDDO ENDDO ENDDO @@ -3354,50 +3216,50 @@ IF (LMICRO) THEN IF (LINTFLEX) THEN !inversion of levels of upper-air precipitation DO JR=2,NRR ! no precip for qv - ZFPR(KIDIA:KFDIA,0,JR)=0._JPRB ! zero precip at top of atmosphere - DO JLEV=1,KLEV - ZFPR(KIDIA:KFDIA,JLEV,JR)=ZPFPR_(KIDIA:KFDIA,JLEV,JR) + ZFPR(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,0,JR)=0._JPRB ! zero precip at top of atmosphere + DO JLEV=1,YDCPG_OPTS%KFLEVG + ZFPR(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV,JR)=ZPFPR_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV,JR) ENDDO ENDDO ENDIF - !store cumulative 3D precipitations for mocage + !store cumulative 3D precipitations for mocage IF (LFPREC3D) THEN DO JR=2,NRR ! no precip for qv - DO JLEV=1,KLEV - DO JLON=KIDIA,KFDIA - PEZDIAG(JLON,JLEV,4)=PEZDIAG(JLON,JLEV,4)+ZPFPR_(JLON,JLEV,JR)*1000._JPRB*PDT + DO JLEV=1,YDCPG_OPTS%KFLEVG + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZP1EZDIAG(JLON,JLEV,4)=ZP1EZDIAG(JLON,JLEV,4)+ZPFPR_(JLON,JLEV,JR)*1000._JPRB*YDCPG_OPTS%ZDTPHY ENDDO ENDDO ENDDO ENDIF - !prints - IF(MOD(KSTEP+1,NPRINTFR)==0) THEN + !prints + IF(MOD(YDCPG_OPTS%KSTEP+1,NPRINTFR)==0) THEN WRITE(NULOUT,*)'PTENDT en sortie de rain_ice' WRITE(NULOUT,*)'ZTHS__ en sortie de rain_ice' - DO JLEV=1,KLEV - WRITE(NULOUT,*)PTENDT(NPTP,JLEV),ZTHS__(NPTP,JLEV) + DO JLEV=1,YDCPG_OPTS%KFLEVG + WRITE(NULOUT,*)ZTENDT(NPTP,JLEV),ZTHS__(NPTP,JLEV) ENDDO - WRITE (NULOUT,*)'JLEV ZTENDQv ZTZNDQc ZTENDQr ZTENDQi' ,'ZTENDQs ZTENDQg' - DO JLEV=1,KLEV - WRITE(NULOUT,'(I2,X,6E11.4)')JLEV,PTENDR(NPTP,JLEV,1),PTENDR(NPTP,JLEV,2),& - & PTENDR(NPTP,JLEV,3),PTENDR(NPTP,JLEV,4),PTENDR(NPTP,JLEV,5),PTENDR(NPTP,JLEV,6) + WRITE (NULOUT,*)'JLEV ZTENDQv ZTZNDQc ZTENDQr ZTENDQi' ,'ZTENDQs ZTENDQg' + DO JLEV=1,YDCPG_OPTS%KFLEVG + WRITE(NULOUT,'(I2,X,6E11.4)')JLEV,ZTEND_Q(NPTP,JLEV),ZTEND_L(NPTP,JLEV),& + & ZTEND_R(NPTP,JLEV),ZTEND_I(NPTP,JLEV),ZTEND_S(NPTP,JLEV),ZTEND_G(NPTP,JLEV) ENDDO - WRITE (NULOUT,*) 'ZSRCS__ et ZNEBMNH_',MAXVAL(ZSRCS__),MAXVAL(ZNEBMNH_) + WRITE (NULOUT,*) 'ZSRCS__ et ZNEBMNH_',MAXVAL(ZSRCS__),MAXVAL(ZNEBMNH_) ENDIF - + IF (LRDEPOS) THEN ISPLITR=NSPLITR ! Swapp because IN and OUT will be needed simultaneously CALL SWAP_SVM - CALL ARO_RAINAERO(KFDIA,KLEV,NGFL_EXT,NRR, PDT,ZSVMIN_,ZZZ_,& - & ZPABSM__(:,1:KLEV),ZTHM__(:,1:KLEV),ZRHODREFM__(:,1:KLEV),& - & KSTEP+1,ZRM_,ZEVAP_, ISPLITR, ZSVM_ ) + CALL ARO_RAINAERO(YDCPG_BNDS%KFDIA, YDCPG_OPTS%KFLEVG, NGFL_EXT, NRR, YDCPG_OPTS%ZDTPHY, ZSVMIN_, ZZZ_, ZPABSM__(:, 1:YDCPG_OPTS%KFLEVG), & + & ZTHM__(:, 1:YDCPG_OPTS%KFLEVG), ZRHODREFM__(:, 1:YDCPG_OPTS%KFLEVG), YDCPG_OPTS%KSTEP+1, ZRM_, & + & ZEVAP_, ISPLITR, ZSVM_ ) ! return to tendency DO JGFL=1,NGFL_EXT - DO JLEV = 1,KLEV - DO JLON = KIDIA,KFDIA - PTENDEXT(JLON,JLEV,JGFL)=PTENDEXT(JLON,JLEV,JGFL)+(ZSVM_(JLON,JLEV,JGFL)-ZSVMIN_(JLON,JLEV,JGFL))*ZINVDT + DO JLEV = 1,YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZTENDEXT(JLON,JLEV,JGFL)=ZTENDEXT(JLON,JLEV,JGFL)+(ZSVM_(JLON,JLEV,JGFL)-ZSVMIN_(JLON,JLEV,JGFL))*ZINVDT ENDDO ENDDO ENDDO @@ -3408,23 +3270,25 @@ ENDIF ! LMICRO ! start LHN F.Meier 2020 ****** LNUDGLHNREAD=.TRUE. -IF(MYPROC==1.AND.KSTEP==1.AND.LNUDGLH)THEN - CALL NUDGLHCLIMPROF(KLEV,LNUDGLHNREAD) +IF(MYPROC==1.AND.YDCPG_OPTS%KSTEP==1.AND.LNUDGLH)THEN + CALL NUDGLHCLIMPROF(YDCPG_OPTS%KFLEVG, LNUDGLHNREAD) ENDIF ! save accumulated precipitation for LHN -IF (LNUDGLH.AND.KSTEP == NSTARTNUDGLH.AND.NSTARTNUDGLH > 0) THEN +IF (LNUDGLH.AND.YDCPG_OPTS%KSTEP == NSTARTNUDGLH.AND.NSTARTNUDGLH > 0) THEN !IF(MYPROC==1) WRITE(NULOUT,*)'save precip for LHN - STEP:',KSTEP, & ! & 'NUDGINGINT:',NINTNUDGLH,'NSTARTNUDGLH:',NSTARTNUDGLH - CALL NUDGLHPRECIP(KIDIA,KFDIA,KLON,ZACPRR_(KIDIA:KFDIA),& - & ZACPRS_(KIDIA:KFDIA),ZACPRG_(KIDIA:KFDIA),KBL) + CALL NUDGLHPRECIP(YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KLON, ZACPRR_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), & + & ZACPRS_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), ZACPRG_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), YDCPG_BNDS%KBL & + & ) ENDIF -ISTEP=KSTEP-NSTARTNUDGLH +ISTEP=YDCPG_OPTS%KSTEP-NSTARTNUDGLH ! if LNUDGLH and KSTEP in nudging interval -IF (LNUDGLH.AND.KSTEP > NSTARTNUDGLH.AND.KSTEP <= NSTOPNUDGLH) THEN +IF (LNUDGLH.AND.YDCPG_OPTS%KSTEP > NSTARTNUDGLH.AND.YDCPG_OPTS%KSTEP <= NSTOPNUDGLH) THEN ! safe LH profile for step before LHN step LLHN=.FALSE. IF(MOD(ISTEP+1,NINTNUDGLH)==0) THEN - CALL NUDGLHPREP(KIDIA,KFDIA,KLON,KLEV,ZTENDT,KBL) + CALL NUDGLHPREP(YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KLON, YDCPG_OPTS%KFLEVG, ZTENDTT, & + & YDCPG_BNDS%KBL ) ENDIF ! LHN step IF(MOD(ISTEP,NINTNUDGLH)==0) THEN @@ -3435,31 +3299,31 @@ IF (LNUDGLH.AND.KSTEP > NSTARTNUDGLH.AND.KSTEP <= NSTOPNUDGLH) THEN JLHSTEP=NINT(1.0_JPRB*ISTEP/(NTIMESPLITNUDGLH*NINTNUDGLH))+2 !IF(MYPROC==1) WRITE(NULOUT,*)'observation array:',JLHSTEP ! call nudging routine to modify LHN profile where necessary - CALL NUDGLH(NGPTOT,NPROMA,NGPBLKS,KIDIA,KFDIA,KLON,KLEV,ZACPRR_(KIDIA:KFDIA),& - & ZACPRS_(KIDIA:KFDIA),ZACPRG_(KIDIA:KFDIA),& - & ZTENDT(KIDIA:KFDIA,1:KLEV),JLHSTEP,KBL,& - & ZEXNREFM_(KIDIA:KFDIA,1:KLEV),.TRUE.,& - & LLHN(KIDIA:KFDIA,1:KLEV),ZPABSM__(KIDIA:KFDIA,1:KLEV),ZDT,& - & ZTHM__(KIDIA:KFDIA,1:KLEV),ZRM_(KIDIA:KFDIA,1:KLEV,:),& - & ZQDM(KIDIA:KFDIA,1:KLEV),PTENDR(KIDIA:KFDIA,1:KLEV,1),NRR,LNUDGLHNREAD) + CALL NUDGLH(NGPTOT, NPROMA, NGPBLKS, YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KLON, YDCPG_OPTS%KFLEVG, & + & ZACPRR_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), ZACPRS_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), ZACPRG_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), & + & ZTENDTT(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA, 1:YDCPG_OPTS%KFLEVG), JLHSTEP, YDCPG_BNDS%KBL, ZEXNREFM_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA, 1:YDCPG_OPTS%KFLEVG), & + & .TRUE., LLHN(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA, 1:YDCPG_OPTS%KFLEVG), ZPABSM__(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA, 1:YDCPG_OPTS%KFLEVG), & + & ZDT, ZTHM__(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA, 1:YDCPG_OPTS%KFLEVG), ZRM_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA, 1:YDCPG_OPTS%KFLEVG, :), & + & ZQDM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA, 1:YDCPG_OPTS%KFLEVG), ZTEND_Q(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA, 1:YDCPG_OPTS%KFLEVG), & + & NRR, LNUDGLHNREAD) !IF(MYPROC==1) WRITE(NULOUT,*)'calling LH successful - convert TH to T and !add temperature tendency' ! add LHN tendency to physics tendency, limit LHN tendency ZMAXTEND=0.0_JPRB ZMINTEND=0.0_JPRB - DO JLEV = 1,KLEV - DO JLON = KIDIA,KFDIA + DO JLEV = 1,YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA IF(LLHN(JLON,JLEV))THEN - ZTENDT(JLON,JLEV)=MAX(ZTENDT(JLON,JLEV),RMINNUDGLH) - ZTENDT(JLON,JLEV)=MIN(ZTENDT(JLON,JLEV),RMAXNUDGLH) - PTENDT(JLON,JLEV)=PTENDT(JLON,JLEV)+ZTENDT(JLON,JLEV)*& + ZTENDTT(JLON,JLEV)=MAX(ZTENDTT(JLON,JLEV),RMINNUDGLH) + ZTENDTT(JLON,JLEV)=MIN(ZTENDTT(JLON,JLEV),RMAXNUDGLH) + ZTENDT(JLON,JLEV)=ZTENDT(JLON,JLEV)+ZTENDTT(JLON,JLEV)*& & RAMPLIFY*ZEXNREFM_(JLON,JLEV) - ZMINTEND=MIN(ZTENDT(JLON,JLEV),ZMINTEND) - ZMAXTEND=MAX(ZTENDT(JLON,JLEV),ZMAXTEND) + ZMINTEND=MIN(ZTENDTT(JLON,JLEV),ZMINTEND) + ZMAXTEND=MAX(ZTENDTT(JLON,JLEV),ZMAXTEND) ! keep RH constant if LNUDGLHCOMPT=T - IF(PTM(JLON,JLEV)>0.01_JPRB.AND.LNUDGLHCOMPT)THEN - PTENDR(JLON,JLEV,1)=PTENDR(JLON,JLEV,1)+RLVTT/RV/((PTM(JLON,JLEV))**2._JPRB)* & - & ZTENDT(JLON,JLEV)*RAMPLIFY*ZEXNREFM_(JLON,JLEV)*ZQSAT(JLON,JLEV) + IF(YDMF_PHYS_BASE_STATE%T(JLON,JLEV)>0.01_JPRB.AND.LNUDGLHCOMPT)THEN + ZTEND_Q(JLON,JLEV)=ZTEND_Q(JLON,JLEV)+RLVTT/RV/((YDMF_PHYS_BASE_STATE%T(JLON,JLEV))**2._JPRB)* & + & ZTENDTT(JLON,JLEV)*RAMPLIFY*ZEXNREFM_(JLON,JLEV)*ZQSAT(JLON,JLEV) ENDIF ENDIF ENDDO @@ -3467,13 +3331,14 @@ IF (LNUDGLH.AND.KSTEP > NSTARTNUDGLH.AND.KSTEP <= NSTOPNUDGLH) THEN !IF(ZMINTEND<-0.01)WRITE(*,*)'ZMINTEND',ZMINTEND !IF(ZMAXTEND>0.01)WRITE(*,*)'ZMAXTEND',ZMAXTEND ! write LH profiles to array to save it for next time step - CALL NUDGLHPREP(KIDIA,KFDIA,KLON,KLEV,ZTENDT,KBL) + CALL NUDGLHPREP(YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KLON, YDCPG_OPTS%KFLEVG, ZTENDTT, & + & YDCPG_BNDS%KBL ) IF(MYPROC==1) WRITE(NULOUT,*)'calling LH successful finished' ! use LHN factor again on following time steps depending on NTAUNUDGLH ELSEIF(MOD(ISTEP,NINTNUDGLH)<NTAUNUDGLH.AND.MOD(ISTEP,NINTNUDGLH)>0 & & .AND.ISTEP>NINTNUDGLH) THEN IF(MYPROC==1)THEN - WRITE(NULOUT,*)'LH nudging applied-STEP:',KSTEP,'NUDGINGINT:',NINTNUDGLH + WRITE(NULOUT,*)'LH nudging applied-STEP:',YDCPG_OPTS%KSTEP,'NUDGINGINT:',NINTNUDGLH WRITE(NULOUT,*)'NTAUNUDGLH:',NTAUNUDGLH ENDIF ! get index for reading correctly most recent obs @@ -3481,29 +3346,29 @@ IF (LNUDGLH.AND.KSTEP > NSTARTNUDGLH.AND.KSTEP <= NSTOPNUDGLH) THEN !IF(MYPROC==1) WRITE(NULOUT,*)'observation array:',JLHSTEP ! call nudging routine to modify LHN profile where necessary ! LHN factor is not recalculated but might be damped by RDAMPNUDGLH - CALL NUDGLH(NGPTOT,NPROMA,NGPBLKS,KIDIA,KFDIA,KLON,KLEV,ZACPRR_(KIDIA:KFDIA),& - & ZACPRS_(KIDIA:KFDIA),ZACPRG_(KIDIA:KFDIA),& - & ZTENDT(KIDIA:KFDIA,1:KLEV),JLHSTEP,KBL,& - & ZEXNREFM_(KIDIA:KFDIA,1:KLEV),.FALSE.,& - & LLHN(KIDIA:KFDIA,1:KLEV),ZPABSM__(KIDIA:KFDIA,1:KLEV),ZDT,& - & ZTHM__(KIDIA:KFDIA,1:KLEV),ZRM_(KIDIA:KFDIA,1:KLEV,:),& - & ZQDM(KIDIA:KFDIA,1:KLEV),PTENDR(KIDIA:KFDIA,1:KLEV,1),NRR,LNUDGLHNREAD) + CALL NUDGLH(NGPTOT, NPROMA, NGPBLKS, YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KLON, YDCPG_OPTS%KFLEVG, & + & ZACPRR_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), ZACPRS_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), ZACPRG_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA), & + & ZTENDTT(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA, 1:YDCPG_OPTS%KFLEVG), JLHSTEP, YDCPG_BNDS%KBL, ZEXNREFM_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA, 1:YDCPG_OPTS%KFLEVG), & + & .FALSE., LLHN(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA, 1:YDCPG_OPTS%KFLEVG), ZPABSM__(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA, 1:YDCPG_OPTS%KFLEVG), & + & ZDT, ZTHM__(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA, 1:YDCPG_OPTS%KFLEVG), ZRM_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA, 1:YDCPG_OPTS%KFLEVG, :), & + & ZQDM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA, 1:YDCPG_OPTS%KFLEVG), ZTEND_Q(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA, 1:YDCPG_OPTS%KFLEVG), & + & NRR, LNUDGLHNREAD) !IF(MYPROC==1) WRITE(NULOUT,*)'calling LH successful - convert TH to T and !add temperature tendency' ! add LHN tendency to physics tendency, limit LHN tendency - DO JLEV = 1,KLEV - DO JLON = KIDIA,KFDIA + DO JLEV = 1,YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA IF(LLHN(JLON,JLEV))THEN - ZTENDT(JLON,JLEV)=MAX(ZTENDT(JLON,JLEV),RMINNUDGLH) - ZTENDT(JLON,JLEV)=MIN(ZTENDT(JLON,JLEV),RMAXNUDGLH) - PTENDT(JLON,JLEV)= PTENDT(JLON,JLEV)+ZTENDT(JLON,JLEV)*& + ZTENDTT(JLON,JLEV)=MAX(ZTENDTT(JLON,JLEV),RMINNUDGLH) + ZTENDTT(JLON,JLEV)=MIN(ZTENDTT(JLON,JLEV),RMAXNUDGLH) + ZTENDT(JLON,JLEV)= ZTENDT(JLON,JLEV)+ZTENDTT(JLON,JLEV)*& & RAMPLIFY*ZEXNREFM_(JLON,JLEV) - ZMINTEND=MIN(ZTENDT(JLON,JLEV),ZMINTEND) - ZMAXTEND=MAX(ZTENDT(JLON,JLEV),ZMAXTEND) + ZMINTEND=MIN(ZTENDTT(JLON,JLEV),ZMINTEND) + ZMAXTEND=MAX(ZTENDTT(JLON,JLEV),ZMAXTEND) ! keep RH constant if LNUDGLHCOMPT=T - IF(PTM(JLON,JLEV)>0.01_JPRB.AND.LNUDGLHCOMPT)THEN - PTENDR(JLON,JLEV,1)=PTENDR(JLON,JLEV,1)+RLVTT/RV/((PTM(JLON,JLEV))**2._JPRB)*& - & ZTENDT(JLON,JLEV)*RAMPLIFY*ZEXNREFM_(JLON,JLEV)*ZQSAT(JLON,JLEV) + IF(YDMF_PHYS_BASE_STATE%T(JLON,JLEV)>0.01_JPRB.AND.LNUDGLHCOMPT)THEN + ZTEND_Q(JLON,JLEV)=ZTEND_Q(JLON,JLEV)+RLVTT/RV/((YDMF_PHYS_BASE_STATE%T(JLON,JLEV))**2._JPRB)*& + & ZTENDTT(JLON,JLEV)*RAMPLIFY*ZEXNREFM_(JLON,JLEV)*ZQSAT(JLON,JLEV) ENDIF ENDIF ENDDO @@ -3511,17 +3376,18 @@ IF (LNUDGLH.AND.KSTEP > NSTARTNUDGLH.AND.KSTEP <= NSTOPNUDGLH) THEN !IF(ZMAXTEND>0.01) WRITE(*,*)'ZMAXTEND',ZMAXTEND !IF(ZMINTEND<-0.01) WRITE(*,*)'ZMINTEND',ZMINTEND ! write LHN profiles to array for next timestep - CALL NUDGLHPREP(KIDIA,KFDIA,KLON,KLEV,ZTENDT,KBL) + CALL NUDGLHPREP(YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KLON, YDCPG_OPTS%KFLEVG, ZTENDTT, & + & YDCPG_BNDS%KBL ) IF(MYPROC==1) WRITE(NULOUT,*)'calling LH successful finished' ENDIF ENDIF ! **end latent heat nudging*********** - + ! ------------------------------------------------------------------ ! 11 - SAVE FIELDS FOR EXT. SURFACE. ! -------------------------------------------------------------------- -! Cette partie n'est plus necessaire apres branchement de la physique +! Cette partie n'est plus necessaire apres branchement de la physique ! de surface sous apl_arome ! ------------------------------------------------------------------ @@ -3536,11 +3402,11 @@ IF (LUSECHEM) THEN ! JOUR DU MOIS IDAY = NINDAT - 10000*IYEAR - 100*IMONTH - DO JLON = KIDIA,KFDIA - ZLAT_(JLON) = 180. * ASIN(PGEMU(JLON)) / (2.*ASIN(1.)) - ZLON_(JLON) = 180. * PGELAM(JLON) / (2.*ASIN(1.)) - ZZENITH_(JLON) = ACOS( PMU0(JLON) ) - ZZS_(JLON)=POROG(JLON)/RG + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZLAT_(JLON) = 180. * ASIN(YDVARS%GEOMETRY%GEMU%T0(JLON)) / (2.*ASIN(1.)) + ZLON_(JLON) = 180. * YDVARS%GEOMETRY%GELAM%T0(JLON) / (2.*ASIN(1.)) + ZZENITH_(JLON) = ACOS( ZRDG_MU0(JLON) ) + ZZS_(JLON)=YDVARS%GEOMETRY%OROG%T0(JLON)/RG ZALB_UV_(JLON)=ZALBP(JLON,1) ENDDO @@ -3548,26 +3414,26 @@ IF (LUSECHEM) THEN CALL SWAP_SVS DO JGFL=1,NGFL_EXT - DO JLEV=1,KLEV - DO JLON= KIDIA,KFDIA + DO JLEV=1,YDCPG_OPTS%KFLEVG + DO JLON= YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA ! modify input ZSVSIN_(JLON,JLEV,JGFL)=MAX(0.0_JPRB, ZSVSIN_(JLON,JLEV,JGFL)) ENDDO ENDDO ENDDO IEZDIAG_CHEM=NGFL_EZDIAG-IOFF_MFSHAL+1 - CALL ARO_MNHC(ZSVSIN_,& - & ZRHODREFM__(:,1:KLEV),PDT, ZTHM__(:,1:KLEV), ZPABSM__(:,1:KLEV), ZRM_, ZLAT_, ZLON_, ZALB_UV_, & - & ZZS_, ZZENITH_,ZZZ_, IYEAR,IMONTH,IDAY, REAL(RHGMT,JPRB)+PDT/2._JPRB,& - & KFDIA,KLEV,NGFL_EXT, NRR, KSTEP+1,NULOUT,IEZDIAG_CHEM, ZPEZDIAG_(:,:,IOFF_MFSHAL:NGFL_EZDIAG),ZSVS_ ) + CALL ARO_MNHC(ZSVSIN_, ZRHODREFM__(:, 1:YDCPG_OPTS%KFLEVG), YDCPG_OPTS%ZDTPHY, ZTHM__(:, 1:YDCPG_OPTS%KFLEVG), & + & ZPABSM__(:, 1:YDCPG_OPTS%KFLEVG), ZRM_, ZLAT_, ZLON_, ZALB_UV_, ZZS_, ZZENITH_, ZZZ_, IYEAR, & + & IMONTH, IDAY, REAL(RHGMT, JPRB)+YDCPG_OPTS%ZDTPHY/2._JPRB, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KFLEVG, NGFL_EXT, & + & NRR, YDCPG_OPTS%KSTEP+1, NULOUT, IEZDIAG_CHEM, ZPEZDIAG_(:, :, IOFF_MFSHAL:NGFL_EZDIAG), ZSVS_ ) - PEZDIAG(KIDIA:KFDIA,1:KLEV,IOFF_MFSHAL:NGFL_EZDIAG)=ZPEZDIAG_(KIDIA:KFDIA,1:KLEV,IOFF_MFSHAL:NGFL_EZDIAG) + ZP1EZDIAG(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG,IOFF_MFSHAL:NGFL_EZDIAG)=ZPEZDIAG_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG,IOFF_MFSHAL:NGFL_EZDIAG) !inversion niveau de la tendance des scalaires passifs DO JGFL=1,NGFL_EXT - DO JLEV = 1,KLEV - DO JLON = KIDIA,KFDIA - PTENDEXT(JLON,JLEV,JGFL)=PTENDEXT(JLON,JLEV,JGFL)+(ZSVS_(JLON,JLEV,JGFL)-ZSVSIN_(JLON,JLEV,JGFL)) + DO JLEV = 1,YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZTENDEXT(JLON,JLEV,JGFL)=ZTENDEXT(JLON,JLEV,JGFL)+(ZSVS_(JLON,JLEV,JGFL)-ZSVSIN_(JLON,JLEV,JGFL)) ENDDO ENDDO ENDDO @@ -3578,26 +3444,33 @@ ENDIF ! LUSECHEM ! 13 - STOCHASTIC PHYSICS : PERTURB TENDENCIES ! ----------------------------------------------------------------- -IF(YSPPT_CONFIG%LSPSDT) THEN +IF(LSPSDT) THEN + + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZMULNOISE(JLON,1)=PGP2DSDT(JLON,1,1) ! Use a single 2D pattern for all levels + ENDDO + + ZDUMMY(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG)=0.0_JPRB ! Dummy nonphys tendency for compatibility with ecmwf stochphy + CALL SPPTEN (YDMODEL%YRML_PHY_EC%YRECLDP, YGFL, & + & YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KLON, YDCPG_OPTS%KFLEVG, 1, YDCPG_OPTS%ZDTPHY, & ! In: block indices, physicstimestep + & PTSL=YDMF_PHYS_BASE_STATE%T, PQSL=YDMF_PHYS_BASE_STATE%Q, PA=YDVARS%A%T1, & ! In: (T,Q,cloud) forsupersatcheck + & PAP=YDMF_PHYS_BASE_STATE%YCPG_PHY%PREF, PAPH=YDMF_PHYS_BASE_STATE%YCPG_PHY%PRE, & ! In: Pfull, Phalf + & PDYN_U=ZDUMMY, PDYN_V=ZDUMMY, PDYN_T=ZDUMMY, PDYN_Q=ZDUMMY, & ! In: dummy nonphys tendencies + & PUNP_U=ZDUMMY, PUNP_V=ZDUMMY, PUNP_T=ZDUMMY, PUNP_Q=ZDUMMY, & ! In: (u,v,t,qv) tendencies to perturb + & PPHY_U=YDMF_PHYS%OUT%TENDU, PPHY_V=YDMF_PHYS%OUT%TENDV, PPHY_T=ZTENDT, PPHY_Q=ZTEND_Q, & ! In: (u,v,t,qv) tendencies to perturb + & PMULNOISE=ZMULNOISE, & ! In: stochphy 3D random multiplicative pattern (less one) + & PTENU=YDMF_PHYS%OUT%TENDU, PTENV=YDMF_PHYS%OUT%TENDV, PTENT=ZTENDT, PTENQ=ZTEND_Q ) ! Out: (u,v,t,qv) total perturbed tendencies - ZDUMMY(KIDIA:KFDIA,1:KLEV)=0.0_JPRB ! Dummy nonphys tendency for compatibility with ecmwf stochphy - CALL SPPTEN (YDMODEL%YRML_PHY_EC%YRECLDP,YGFL, & - & KIDIA,KFDIA,KLON,KLEV,1,PDT, & ! In: block indices, physicstimestep - & PTSL=PTM,PQSL=PQVM, PA=PCLFS, PAP=PAPRSFM, PAPH=PAPRSM, & ! In: (T,Q,cloud) forsupersatcheck, Pfull, Phalf - & PDYN_U=ZDUMMY,PDYN_V=ZDUMMY,PDYN_T=ZDUMMY,PDYN_Q=ZDUMMY, & ! In: dummy nonphys tendencies - & PUNP_U=PTENDU,PUNP_V=PTENDV,PUNP_T=PTENDT,PUNP_Q=PTENDR(:,:,1), & ! In: (u,v,t,qv) tendencies to perturb - & PMULNOISE=PGP2DSDT(1,1,1), & ! In: stochphy 3D random multiplicative pattern (less one) - & PTENU=PTENDU,PTENV=PTENDV,PTENT=PTENDT,PTENQ=PTENDR(:,:,1) ) ! Out: (u,v,t,qv) total perturbed tendencies ENDIF -IF(LFORCENL.AND.(KSTEP*(TSPHY/RHOUR)>=NFORCESTART).AND.& - & (KSTEP*(TSPHY/RHOUR)<=NFORCEEND)) THEN - DO JLEV=1,KLEV - DO JLON=KIDIA,KFDIA - PTENDU(JLON,JLEV)=PTENDU(JLON,JLEV)+AMAGSTOPH_CASBS*PFORCEU(JLON,JLEV) - PTENDV(JLON,JLEV)=PTENDV(JLON,JLEV)+AMAGSTOPH_CASBS*PFORCEV(JLON,JLEV) - PTENDT(JLON,JLEV)=PTENDT(JLON,JLEV)+AMAGSTOPH_CASBS*PFORCET(JLON,JLEV) - PTENDR(JLON,JLEV,1)=PTENDR(JLON,JLEV,1)+AMAGSTOPH_CASBS*PFORCEQ(JLON,JLEV) +IF(LFORCENL.AND.(YDCPG_OPTS%KSTEP*(TSPHY/RHOUR)>=NFORCESTART).AND.& + & (YDCPG_OPTS%KSTEP*(TSPHY/RHOUR)<=NFORCEEND)) THEN + DO JLEV=1,YDCPG_OPTS%KFLEVG + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + YDMF_PHYS%OUT%TENDU(JLON,JLEV)=YDMF_PHYS%OUT%TENDU(JLON,JLEV)+AMAGSTOPH_CASBS*YDMF_PHYS%FOR%U(JLON,JLEV) + YDMF_PHYS%OUT%TENDV(JLON,JLEV)=YDMF_PHYS%OUT%TENDV(JLON,JLEV)+AMAGSTOPH_CASBS*YDMF_PHYS%FOR%V(JLON,JLEV) + ZTENDT(JLON,JLEV)=ZTENDT(JLON,JLEV)+AMAGSTOPH_CASBS*YDMF_PHYS%FOR%T(JLON,JLEV) + ZTEND_Q(JLON,JLEV)=ZTEND_Q(JLON,JLEV)+AMAGSTOPH_CASBS*YDMF_PHYS%FOR%Q(JLON,JLEV) ENDDO ENDDO ENDIF @@ -3606,17 +3479,17 @@ ENDIF ! 14 - FINAL CALCULATIONS. ! -------------------------------------------------------------------- -!forcage pour declencher la ligne de grain +!forcage pour declencher la ligne de grain IF (LSQUALL) THEN IF (LTWOTL) THEN ZDT2=2*ZDT ELSE ZDT2=ZDT ENDIF - IF((KSTEP+1)*ZDT2 < 600._JPRB) THEN + IF((YDCPG_OPTS%KSTEP+1)*ZDT2 < 600._JPRB) THEN WRITE(NULOUT, *)'refroidissement impose de',NREFROI1,' a ',NREFROI2 - DO JLEV=KLEV,KLEV-20,-1 - PTENDT(NREFROI1:NREFROI2,JLEV)=-0.01_JPRB + DO JLEV=YDCPG_OPTS%KFLEVG,YDCPG_OPTS%KFLEVG-20,-1 + ZTENDT(NREFROI1:NREFROI2,JLEV)=-0.01_JPRB ENDDO ENDIF ENDIF @@ -3624,168 +3497,418 @@ ENDIF !ecriture du buffer IF(LLMSE.OR.LSFORCS) THEN - DO JLON = KIDIA,KFDIA - PGPAR(JLON,MINPRR)=ZINPRR_(JLON)+ZSURFPREP(JLON)/1000._JPRB - PGPAR(JLON,MINPRS)=ZINPRS_(JLON)+ZSURFSNOW(JLON)/1000._JPRB - PGPAR(JLON,MINPRG)=ZINPRG_(JLON)+ZINPRH_(JLON) - PGPAR(JLON,MACPRR)=PGPAR(JLON,MACPRR)+(ZINPRR_(JLON)+ZSURFPREP(JLON)/1000._JPRB)*PDT - PGPAR(JLON,MACPRS)=PGPAR(JLON,MACPRS)+(ZINPRS_(JLON)+ZSURFSNOW(JLON)/1000._JPRB)*PDT - PGPAR(JLON,MACPRG)=PGPAR(JLON,MACPRG)+(ZINPRG_(JLON)+ZINPRH_(JLON))*PDT - ENDDO - PGPAR(KIDIA:KFDIA,MVTS)=ZTSURF(KIDIA:KFDIA) - PGPAR(KIDIA:KFDIA,MVEMIS)=ZEMIS(KIDIA:KFDIA) - PGPAR(KIDIA:KFDIA,MVQS)=ZQS(KIDIA:KFDIA) + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + YDCPG_GPAR%INPRR(JLON)=ZINPRR_(JLON)+ZSURFPREP(JLON)/1000._JPRB + YDCPG_GPAR%INPRS(JLON)=ZINPRS_(JLON)+ZSURFSNOW(JLON)/1000._JPRB + YDCPG_GPAR%INPRG(JLON)=ZINPRG_(JLON)+ZINPRH_(JLON) + YDCPG_GPAR%ACPRR(JLON)=YDCPG_GPAR%ACPRR(JLON)+(ZINPRR_(JLON)+ZSURFPREP(JLON)/1000._JPRB)*YDCPG_OPTS%ZDTPHY + YDCPG_GPAR%ACPRS(JLON)=YDCPG_GPAR%ACPRS(JLON)+(ZINPRS_(JLON)+ZSURFSNOW(JLON)/1000._JPRB)*YDCPG_OPTS%ZDTPHY + YDCPG_GPAR%ACPRG(JLON)=YDCPG_GPAR%ACPRG(JLON)+(ZINPRG_(JLON)+ZINPRH_(JLON))*YDCPG_OPTS%ZDTPHY + ENDDO + YDCPG_GPAR%VTS(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=ZTSURF(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA) + YDCPG_GPAR%VEMIS(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=ZEMIS(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA) + YDCPG_GPAR%VQS(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=ZQS(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA) DO JSW=1,NSW - PGPAR(KIDIA:KFDIA,MALBDIR-1+JSW)=ZALBP(KIDIA:KFDIA,JSW) - PGPAR(KIDIA:KFDIA,MALBSCA-1+JSW)=ZALBD(KIDIA:KFDIA,JSW) + YDCPG_GPAR%ALBDIR(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JSW)=ZALBP(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JSW) + YDCPG_GPAR%ALBSCA(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JSW)=ZALBD(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JSW) ENDDO ENDIF -IF (LMUSCLFA) CALL ECR1D(NMUSCLFA,'PCLCT_apl',PCLCT,1,KLON) +IF (LMUSCLFA) CALL ECR1D(NMUSCLFA, 'PCLCT_apl', YDCPG_MISC%CLCT, 1, YDCPG_OPTS%KLON) ! initialisations for CFU for Rainfalls -DO JLEV = 0,KLEV - DO JLON = KIDIA,KFDIA +DO JLEV = 0,YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA ! conversion from m/s in mm/s - PFPLSL(JLON,JLEV)= ZINPRR_(JLON)*1000._JPRB+ZSURFPREP(JLON) - PFPLSN(JLON,JLEV)= ZINPRS_(JLON)*1000._JPRB+ZSURFSNOW(JLON) - PFPLSG(JLON,JLEV)= ZINPRG_(JLON)*1000._JPRB - PFPLSH(JLON,JLEV)= ZINPRH_(JLON)*1000._JPRB + YDMF_PHYS%OUT%FPLSL(JLON,JLEV)= ZINPRR_(JLON)*1000._JPRB+ZSURFPREP(JLON) + YDMF_PHYS%OUT%FPLSN(JLON,JLEV)= ZINPRS_(JLON)*1000._JPRB+ZSURFSNOW(JLON) + YDMF_PHYS%OUT%FPLSG(JLON,JLEV)= ZINPRG_(JLON)*1000._JPRB + YDMF_PHYS%OUT%FPLSH(JLON,JLEV)= ZINPRH_(JLON)*1000._JPRB ! conversion in correct Unit for BADP (same as ALADIN) - PSTRTU(JLON,JLEV)= ZSFU_(JLON)*ZRHODREFM__(JLON,IKB) - PSTRTV(JLON,JLEV)= ZSFV_(JLON)*ZRHODREFM__(JLON,IKB) + YDMF_PHYS%OUT%STRTU(JLON,JLEV)= ZSFU_(JLON)*ZRHODREFM__(JLON,IKB) + YDMF_PHYS%OUT%STRTV(JLON,JLEV)= ZSFV_(JLON)*ZRHODREFM__(JLON,IKB) ENDDO ENDDO !Hail diagnostic -PDIAGH(KIDIA:KFDIA)=0._JPRB +YDMF_PHYS%OUT%DIAGH(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=0._JPRB IF (LXXDIAGH) THEN - DO JLEV=1,KLEV - DO JLON=KIDIA,KFDIA - PDIAGH(JLON)=PDIAGH(JLON)+ZQGM(JLON,JLEV)*PDELPM(JLON,JLEV)*ZINVG + DO JLEV=1,YDCPG_OPTS%KFLEVG + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + YDMF_PHYS%OUT%DIAGH(JLON)=YDMF_PHYS%OUT%DIAGH(JLON)+ZQGM(JLON,JLEV)*YDMF_PHYS_BASE_STATE%YCPG_PHY%XYB%DELP(JLON,JLEV)*ZINVG ENDDO ENDDO ENDIF ! lightening density IF (LFLASH) THEN - IF (KSTEP==0) PFLASH=0._JPRB + IF (YDCPG_OPTS%KSTEP==0) YDMF_PHYS%OUT%FLASH=0._JPRB - CALL DIAGFLASH(YDCFU,KIDIA,KFDIA,KLON,KLEV,KSTEP,& - &ZQCM,ZQIM,ZQRM,ZQSM,ZQGM,ZQHM,& - &PDELPM,ZTM,PWM,PLSM,PFLASH) + CALL DIAGFLASH(YDCFU,YDMODEL%YRML_PHY_MF,YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA,YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG,YDCPG_OPTS%KSTEP,& + &ZQCM,ZQIM,ZQRM,ZQSM,ZQGM,ZQHM,YDMF_PHYS_BASE_STATE%YCPG_PHY%XYB%DELP,ZTM,YDMF_PHYS_BASE_STATE%YCPG_PHY%W,ZDUMMY,ZDUMMY,ZDUMMY,ZDUMMY,& + &YDMF_PHYS_SURF%GSD_VF%PLSM, YDMF_PHYS%OUT%FLASH) ENDIF !!! modif pour LMSE non activee IF (LLMSE) THEN - DO JLEV=1,KSGST+1 - DO JLON = KIDIA,KFDIA - PFCS(JLON,JLEV)=-ZSFTH_(JLON)*ZRHODREFM__(JLON,IKB)*RCPD - PFCLL(JLON,JLEV) = PFCLL(JLON,JLEV)*ZRHODREFM__(JLON,IKB) - PFCLN(JLON,JLEV) = PFCLN(JLON,JLEV)*ZRHODREFM__(JLON,IKB) - PFEVL(JLON,JLEV) = PFEVL(JLON,JLEV)*ZRHODREFM__(JLON,IKB) - PFEVN(JLON,JLEV) = PFEVN(JLON,JLEV)*ZRHODREFM__(JLON,IKB) + DO JLEV=1,NTSSG+1 + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + YDMF_PHYS%OUT%FCS(JLON,JLEV)=-ZSFTH_(JLON)*ZRHODREFM__(JLON,IKB)*RCPD + YDMF_PHYS%OUT%FCLL(JLON,JLEV) = YDMF_PHYS%OUT%FCLL(JLON,JLEV)*ZRHODREFM__(JLON,IKB) + YDMF_PHYS%OUT%FCLN(JLON,JLEV) = YDMF_PHYS%OUT%FCLN(JLON,JLEV)*ZRHODREFM__(JLON,IKB) + YDMF_PHYS%OUT%FEVL(JLON,JLEV) = YDMF_PHYS%OUT%FEVL(JLON,JLEV)*ZRHODREFM__(JLON,IKB) + YDMF_PHYS%OUT%FEVN(JLON,JLEV) = YDMF_PHYS%OUT%FEVN(JLON,JLEV)*ZRHODREFM__(JLON,IKB) ENDDO ENDDO ENDIF IF (LSFORCS) THEN - DO JLEV=1,KSGST+1 - DO JLON = KIDIA,KFDIA - PFCS(JLON,JLEV)=-ZSFTH_(JLON)*ZRHODREFM__(JLON,IKB)*RCPD + DO JLEV=1,NTSSG+1 + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + YDMF_PHYS%OUT%FCS(JLON,JLEV)=-ZSFTH_(JLON)*ZRHODREFM__(JLON,IKB)*RCPD ZDELTA=MAX(0.0_JPRB,SIGN(1.0_JPRB,RTT-ZTSURF(JLON))) - PFCLL(JLON,JLEV)=-ZSFRV_(JLON)*ZRHODREFM__(JLON,IKB)* FOLH (ZTSURF(JLON),0._JPRB)*(1.0_JPRB-ZDELTA) - PFCLN(JLON,JLEV)=-ZSFRV_(JLON)*ZRHODREFM__(JLON,IKB)* FOLH (ZTSURF(JLON),0._JPRB)*ZDELTA + YDMF_PHYS%OUT%FCLL(JLON,JLEV)=-ZSFRV_(JLON)*ZRHODREFM__(JLON,IKB)* FOLH (ZTSURF(JLON),0._JPRB)*(1.0_JPRB-ZDELTA) + YDMF_PHYS%OUT%FCLN(JLON,JLEV)=-ZSFRV_(JLON)*ZRHODREFM__(JLON,IKB)* FOLH (ZTSURF(JLON),0._JPRB)*ZDELTA ENDDO ENDDO -ENDIF +ENDIF -DO JSG = 1, KSGST+1 - DO JLEV = 0, KLEV - DO JLON = KIDIA, KFDIA - PFRTH(JLON,JLEV,JSG)=PFRTH(JLON,JLEV,JSG)+ZBUDTH_(JLON) +DO JSG = 1, NTSSG+1 + DO JLEV = 0, YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA + YDMF_PHYS%OUT%FRTH(JLON,JLEV,JSG)=YDMF_PHYS%OUT%FRTH(JLON,JLEV,JSG)+ZBUDTH_(JLON) ENDDO ENDDO ENDDO +IF (LFLEXDIA) THEN + ! surface variables + CALL NEW_ADD_FIELD_2D(YDMODEL%YRML_DIAG%YRMDDH,YDMF_PHYS_SURF%GSD_VF%PLSM,'SVLSM',YDDDH,CDTYPE='V') + CALL NEW_ADD_FIELD_2D(YDMODEL%YRML_DIAG%YRMDDH,ZTSURF,'SVTS',YDDDH,CDTYPE='V') + !am: FIXME: issue of shape of PF_T1 (2D) when arg should be 1D + !CALL NEW_ADD_FIELD_2D(YDMODEL%YRML_DIAG%YRMDDH,YDMF_PHYS_SURF%GSP_SG%PF_T1,'SVWN',YDDDH,CDTYPE='V') + CALL NEW_ADD_FIELD_2D(YDMODEL%YRML_DIAG%YRMDDH,YDMF_PHYS%OUT%TCLS,'SVTCLS',YDDDH,CDTYPE='V') + CALL NEW_ADD_FIELD_2D(YDMODEL%YRML_DIAG%YRMDDH,YDMF_PHYS%OUT%QCLS,'SVQCLS',YDDDH,CDTYPE='V') + CALL NEW_ADD_FIELD_2D(YDMODEL%YRML_DIAG%YRMDDH,YDMF_PHYS%OUT%RHCLS,'SVHUCLS',YDDDH,CDTYPE='V') + CALL NEW_ADD_FIELD_2D(YDMODEL%YRML_DIAG%YRMDDH,YDMF_PHYS%OUT%UCLS,'SVUCLS',YDDDH,CDTYPE='V') + CALL NEW_ADD_FIELD_2D(YDMODEL%YRML_DIAG%YRMDDH,YDMF_PHYS%OUT%VCLS,'SVVCLS',YDDDH,CDTYPE='V') + CALL NEW_ADD_FIELD_2D(YDMODEL%YRML_DIAG%YRMDDH,YDMF_PHYS%OUT%CLPH,'SVPBLH',YDDDH,CDTYPE='V') + ZTMP(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=YDMF_PHYS_SURF%GSD_VF%PLSM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)*ZWS2(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA) + CALL NEW_ADD_FIELD_2D(YDMODEL%YRML_DIAG%YRMDDH,ZTMP,'SVWS',YDDDH,CDTYPE='V') + ZTMP(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=YDMF_PHYS_SURF%GSD_VF%PLSM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)*ZWP2(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA) + CALL NEW_ADD_FIELD_2D(YDMODEL%YRML_DIAG%YRMDDH,ZTMP,'SVWP',YDDDH,CDTYPE='V') + ZTMP(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=YDMF_PHYS_SURF%GSD_VF%PLSM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)*ZWSI2(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA) + CALL NEW_ADD_FIELD_2D(YDMODEL%YRML_DIAG%YRMDDH,ZTMP,'SVWIS',YDDDH,CDTYPE='V') + ZTMP(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=YDMF_PHYS_SURF%GSD_VF%PLSM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)*ZWPI2(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA) + CALL NEW_ADD_FIELD_2D(YDMODEL%YRML_DIAG%YRMDDH,ZTMP,'SVWIP',YDDDH,CDTYPE='V') + ZTMP(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=YDMF_PHYS_SURF%GSD_VF%PLSM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)*ZTP2(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA) + CALL NEW_ADD_FIELD_2D(YDMODEL%YRML_DIAG%YRMDDH,ZTMP,'SVTP',YDDDH,CDTYPE='V') + !am: FIXME: issue of shape of PF_T1 (2D) when arg should be 1D + !ZTMP(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=YDMF_PHYS_SURF%GSD_VF%PLSM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)*YDMF_PHYS_SURF%GSP_SG%PF_T1(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA) + CALL NEW_ADD_FIELD_2D(YDMODEL%YRML_DIAG%YRMDDH,YDVARS%GEOMETRY%OROG%T0,'SVOROG',YDDDH,CDTYPE='V') + ZTMP(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=YDMF_PHYS_SURF%GSD_VF%PLSM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)*YDMF_PHYS%OUT%FEVL(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1) + CALL NEW_ADD_FIELD_2D(YDMODEL%YRML_DIAG%YRMDDH,ZTMP,'SFEVAPLIQ',YDDDH,CDTYPE='F') + ZTMP(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=YDMF_PHYS_SURF%GSD_VF%PLSM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)*YDMF_PHYS%OUT%FEVN(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1) + CALL NEW_ADD_FIELD_2D(YDMODEL%YRML_DIAG%YRMDDH,ZTMP,'SFEVAPNEG',YDDDH,CDTYPE='F') + ZTMP(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=YDMF_PHYS_SURF%GSD_VF%PLSM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)*YDMF_PHYS%OUT%FCLL(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1) + CALL NEW_ADD_FIELD_2D(YDMODEL%YRML_DIAG%YRMDDH,ZTMP,'SFCHLATLI',YDDDH,CDTYPE='F') + ZTMP(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=YDMF_PHYS_SURF%GSD_VF%PLSM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)*YDMF_PHYS%OUT%FCLN(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1) + CALL NEW_ADD_FIELD_2D(YDMODEL%YRML_DIAG%YRMDDH,ZTMP,'SFCHLATNE',YDDDH,CDTYPE='F') + ZTMP(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=YDMF_PHYS_SURF%GSD_VF%PLSM(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)*YDMF_PHYS%OUT%FCS(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1) + CALL NEW_ADD_FIELD_2D(YDMODEL%YRML_DIAG%YRMDDH,ZTMP,'SFCHSENS',YDDDH,CDTYPE='F') + !set to 0._JPRB + ! ZTMP(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=0._JPRB + !CALL NEW_ADD_FIELD_2D(YDMODEL%YRML_DIAG%YRMDDH,ZTMP,'SFFONTESL',YDDDH,CDTYPE='F') + !CALL NEW_ADD_FIELD_2D(YDMODEL%YRML_DIAG%YRMDDH,ZTMP,'SFLIQSNPL',YDDDH,CDTYPE='F') + !CALL NEW_ADD_FIELD_2D(YDMODEL%YRML_DIAG%YRMDDH,ZTMP,'SFFONTESN',YDDDH,CDTYPE='F') + + ! surface radiation + CALL NEW_ADD_FIELD_2D(YDMODEL%YRML_DIAG%YRMDDH,YDMF_PHYS%OUT%FRSO(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG,1),'SFRAYSO',YDDDH,CDTYPE='F') + CALL NEW_ADD_FIELD_2D(YDMODEL%YRML_DIAG%YRMDDH,YDMF_PHYS%OUT%FRTH(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG,1),'SFRAYTH',YDDDH,CDTYPE='F') + CALL NEW_ADD_FIELD_2D(YDMODEL%YRML_DIAG%YRMDDH,YDMF_PHYS%OUT%FRSODS(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA),'SFRAYSODS',YDDDH,CDTYPE='F') + CALL NEW_ADD_FIELD_2D(YDMODEL%YRML_DIAG%YRMDDH,YDMF_PHYS%OUT%FRTHDS(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA),'SFRAYTHDS',YDDDH,CDTYPE='F') + ZTMP(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=1_JPRB-YDMF_PHYS%OUT%FRSO(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG,1)/MAX(ZEPSNEB,YDMF_PHYS%OUT%FRSODS(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)) + CALL NEW_ADD_FIELD_2D(YDMODEL%YRML_DIAG%YRMDDH,ZTMP,'SVALB',YDDDH,CDTYPE='V') + ! surface precipitations + CALL NEW_ADD_FIELD_2D(YDMODEL%YRML_DIAG%YRMDDH,YDMF_PHYS%OUT%FPLSL(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG),'SFPRELIGE',YDDDH,CDTYPE='F') + CALL NEW_ADD_FIELD_2D(YDMODEL%YRML_DIAG%YRMDDH,YDMF_PHYS%OUT%FPLSN(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG),'SFPRENEGE',YDDDH,CDTYPE='F') + CALL NEW_ADD_FIELD_2D(YDMODEL%YRML_DIAG%YRMDDH,YDMF_PHYS%OUT%FPLSG(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG),'SFPREGRPL',YDDDH,CDTYPE='F') + CALL NEW_ADD_FIELD_2D(YDMODEL%YRML_DIAG%YRMDDH,YDMF_PHYS%OUT%FPLSH(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG),'SFPREHAIL',YDDDH,CDTYPE='F') + ! surface wind stress + CALL NEW_ADD_FIELD_2D(YDMODEL%YRML_DIAG%YRMDDH,YDMF_PHYS%OUT%STRTU(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG),'SFUUTUR',YDDDH,CDTYPE='F') + CALL NEW_ADD_FIELD_2D(YDMODEL%YRML_DIAG%YRMDDH,YDMF_PHYS%OUT%STRTV(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG),'SFVVTUR',YDDDH,CDTYPE='F') + + ! WRITE(NULOUT,*) 'LFLEXDIA ARPEGE WITH NTOTSURF = ',NTOTSURF,& + ! & ' AND NTOTSVAR = ',NTOTSVAR, ' AND NTOTSVFS = ',NTOTSVFS + ! 3D Variables : + ZTMP2(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,0)=0._JPRB + DO JLEV=1,YDCPG_OPTS%KFLEVG + ZTMP2(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=ZPFPR_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV,2)+ZPFPR_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV,4) + ENDDO + !ZTMP2(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,:)=ZFPR(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,:,2)+ZFPR(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,:,3) + CALL NEW_ADD_FIELD_3D(YDMODEL%YRML_DIAG%YRMDDH,ZTMP2(:,:),'FQTPRECISTL',YDDDH) + DO JLEV=1,YDCPG_OPTS%KFLEVG + ZTMP2(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=ZPFPR_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV,4)+ZPFPR_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV,5) + ENDDO + !ZTMP2(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,:)=ZFPR(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,:,4)+ZFPR(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,:,5) + CALL NEW_ADD_FIELD_3D(YDMODEL%YRML_DIAG%YRMDDH,ZTMP2(:,:),'FQTPRECISTN',YDDDH) + +ENDIF + + ! daand: radflex IF (LINTFLEX) THEN ! account for radiation separately LLRAD=.NOT.LRADFLEX - CALL APL_AROME2INTFLEX(YGFL,YDPARAR,YDPHY,KLON,KIDIA,KFDIA,KLEV, PDT,& - & PRDELPM, PUM, PVM, PTM, PGPAR(1,MVTS), PCPM,& - & ZFPR,&! precipitation fluxes - & LLRAD, PFRTH, PFRSO,&! radiative fluxes - & PTENDU, PTENDV, PTENDT,&! momentum and temperature tendencies - & PTENDR, PTENDTKE, PTENDEXT,&! total gfl tendencies - & YDPROCSET) + CALL APL_AROME2INTFLEX(YGFL, YDPARAR, YDPHY, YDCPG_OPTS%KLON, YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KFLEVG, & + & YDCPG_OPTS%ZDTPHY, YDMF_PHYS_BASE_STATE%YCPG_PHY%XYB%RDELP, YDMF_PHYS_BASE_STATE%U, YDMF_PHYS_BASE_STATE%V, & + & YDMF_PHYS_BASE_STATE%T, YDCPG_GPAR%VTS, YDMF_PHYS_BASE_STATE%YCPG_DYN%RCP%CP, ZFPR, LLRAD, YDMF_PHYS%OUT%FRTH, & + & YDMF_PHYS%OUT%FRSO, YDMF_PHYS%OUT%TENDU, YDMF_PHYS%OUT%TENDV, ZTENDT, ZTENDRA, ZTENDTKE, & + & ZTENDEXT, YLPROCSET) ENDIF ! Precipitation Type ! Compute wet-bulb temperature at 2 meters (suppose homogeneity of qv/ql/qi ) -!ZPCLS(KIDIA:KFDIA)=PAPRSM(KIDIA:KFDIA,KLEV)-2._JPRB/ZZZF(KIDIA:KFDIA,1,KLEV)*& -! &(PAPRSM(KIDIA:KFDIA,KLEV)-PAPRSFM(KIDIA:KFDIA,KLEV)) +!ZPCLS(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA)=YDMF_PHYS_BASE_STATE%YCPG_PHY%PRE(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG)-2._JPRB/ZZZF(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1,YDCPG_OPTS%KFLEVG)*& +! &(YDMF_PHYS_BASE_STATE%YCPG_PHY%PRE(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG)-YDMF_PHYS_BASE_STATE%YCPG_PHY%PREF(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG)) -CALL PPWETPOINT(YDPHY,KIDIA,KFDIA,KLON,PAPRSM(:,KLEV),PTCLS,& - & PQCLS,ZQCM(:,KLEV),ZQIM(:,KLEV),PTPWCLS) +CALL PPWETPOINT(YDCST, YDPHY, YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KLON, YDMF_PHYS_BASE_STATE%YCPG_PHY%PRE(:, YDCPG_OPTS%KFLEVG), & +& YDMF_PHYS%OUT%TCLS, YDMF_PHYS%OUT%QCLS, ZQCM(:, YDCPG_OPTS%KFLEVG), ZQIM(:, YDCPG_OPTS%KFLEVG), YDMF_PHYS%OUT%TPWCLS & +& ) IF (LDPRECIPS.OR.LDPRECIPS2) THEN !initialisation de ZDZZ - DO JLON = KIDIA,KFDIA + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA ZDZZ(JLON,1)=ZAPHIM(JLON,0)*ZINVG-ZZZ_(JLON,1) ENDDO - DO JLEV = 2, KLEV - DO JLON = KIDIA,KFDIA + DO JLEV = 2, YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA ZDZZ(JLON,JLEV)=ZZZ_(JLON,JLEV+IKL)-ZZZ_(JLON,JLEV) ENDDO ENDDO ! Compute wet-bulb temperature - DO JLEV=1,KLEV - CALL PPWETPOINT(YDPHY,KIDIA,KFDIA,KLON,PAPRSFM(:,JLEV),ZTM(:,JLEV),& - & ZQVM(:,JLEV),ZQCM(:,JLEV),ZQIM(:,JLEV),ZTPW(:,JLEV)) + DO JLEV=1,YDCPG_OPTS%KFLEVG + CALL PPWETPOINT(YDCST, YDPHY, YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KLON, YDMF_PHYS_BASE_STATE%YCPG_PHY%PREF(:, JLEV), & + & ZTM(:, JLEV), ZQVM(:, JLEV), ZQCM(:, JLEV), ZQIM(:, JLEV), ZTPW(:, JLEV)) ENDDO IF (LDPRECIPS) THEN ! Defined precipitation type ! - NDTPRECCUR=INT(MOD(ZSTATI/TSTEP,REAL(NDTPREC)))+1_JPIM - !PDPRECIPS(:,NDTPRECCUR)=HUGE(1._JPRB) - PDPRECIPS(:,NDTPRECCUR)=0._JPRB + ZPRC_DPRECIPS(:,YDCPG_OPTS%NDTPRECCUR)=0._JPRB - !WRITE(NULOUT,*)'sous apl_arome NDTPRECCUR=',NDTPRECCUR,NDTPREC - CALL DPRECIPS(YDPRECIPS,KIDIA,KFDIA,KLON,KLEV,POROG,PTPWCLS,PDIAGH,PAPHIFM,& - & ZDZZ,ZTPW,ZQCM,PFPLSL(:,KLEV),PFPLSN(:,KLEV),PFPLSG(:,KLEV),PDPRECIPS(:,NDTPRECCUR)) + CALL DPRECIPS(YDCST, YDPRECIPS, YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KLON, YDCPG_OPTS%KFLEVG, YDVARS%GEOMETRY%OROG%T0, & + & YDMF_PHYS%OUT%TPWCLS, YDMF_PHYS%OUT%DIAGH, YDMF_PHYS_BASE_STATE%YCPG_DYN%PHIF, ZDZZ, ZTPW, ZQCM, & + & YDMF_PHYS%OUT%FPLSL(:, YDCPG_OPTS%KFLEVG), YDMF_PHYS%OUT%FPLSN(:, YDCPG_OPTS%KFLEVG), YDMF_PHYS%OUT%FPLSG(:, YDCPG_OPTS%KFLEVG), & + & ZPRC_DPRECIPS(:, YDCPG_OPTS%NDTPRECCUR) & + & ) ENDIF IF (LDPRECIPS2) THEN !Idem for an other time step and an other period - NDTPRECCUR2=INT(MOD(ZSTATI/TSTEP,REAL(NDTPREC2)))+1_JPIM - PDPRECIPS2(:,NDTPRECCUR2)=0._JPRB + ZPRC_DPRECIPS2(:,YDCPG_OPTS%NDTPRECCUR2)=0._JPRB - CALL DPRECIPS(YDPRECIPS,KIDIA,KFDIA,KLON,KLEV,POROG,PTPWCLS,PDIAGH,PAPHIFM,& - & ZDZZ,ZTPW,ZQCM,PFPLSL(:,KLEV),PFPLSN(:,KLEV),PFPLSG(:,KLEV),PDPRECIPS2(:,NDTPRECCUR2)) + CALL DPRECIPS(YDCST, YDPRECIPS, YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KLON, YDCPG_OPTS%KFLEVG, YDVARS%GEOMETRY%OROG%T0, & + & YDMF_PHYS%OUT%TPWCLS, YDMF_PHYS%OUT%DIAGH, YDMF_PHYS_BASE_STATE%YCPG_DYN%PHIF, ZDZZ, ZTPW, ZQCM, & + & YDMF_PHYS%OUT%FPLSL(:, YDCPG_OPTS%KFLEVG), YDMF_PHYS%OUT%FPLSN(:, YDCPG_OPTS%KFLEVG), YDMF_PHYS%OUT%FPLSG(:, YDCPG_OPTS%KFLEVG), & + & ZPRC_DPRECIPS2(:, YDCPG_OPTS%NDTPRECCUR2) & + & ) ENDIF ENDIF +!Save surface temperature +IF (LMSE.OR.LSFORCS) THEN + IF (LLXFUMSE) THEN + DO JROF=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + YDMF_PHYS_SURF%GSP_RR%PT_T0(JROF)=YDCPG_GPAR%VTS(JROF) + ENDDO + ELSE + DO JROF=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + YDMF_PHYS_SURF%GSP_RR%PT_T1(JROF)=YDCPG_GPAR%VTS(JROF) + ENDDO + ENDIF +ENDIF +! 4.2 COMPUTE THE PHYS. TENDENCY FOR "T" AND "w" +! ------------------------------------------ + +IF (LVERTFE.AND.LVFE_GWMPA) THEN + ! * case LVFE_GWMPA not yet coded. + ! (in this case ZGWT1 must be computed at full levels and + ! not at half levels) + CALL ABOR1(' APL_AROME: case LVFE_GWMPA not yet coded if LMPA=T!') +ENDIF +! * compute ZTT1: +IF (LSLAG.AND.LTWOTL) THEN + DO JLEV=1,YDCPG_OPTS%KFLEVG + DO JROF=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZTT1(JROF,JLEV)=YDVARS%T%T0(JROF,JLEV)+YDCPG_OPTS%ZDTPHY*ZTENDT(JROF,JLEV) + ENDDO + ENDDO +ELSE + DO JLEV=1,YDCPG_OPTS%KFLEVG + DO JROF=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZTT1(JROF,JLEV)=YDVARS%T%T9(JROF,JLEV)+YDCPG_OPTS%ZDTPHY*ZTENDT(JROF,JLEV) + ENDDO + ENDDO +ENDIF + +! * compute ZGWT1 = tendency of gw: +IF (LNHDYN) THEN + ! Valid for LVFE_GWMPA=F only; ZGWT1 assumed to be half level values. + DO JLEV=1,YDCPG_OPTS%KFLEVG-1 + DO JROF=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZGWT1(JROF,JLEV)=0.5_JPRB*RG*(ZTENDW(JROF,JLEV)+ZTENDW(JROF,JLEV+1)) + ENDDO + ENDDO + DO JROF=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZGWT1(JROF,YDCPG_OPTS%KFLEVG)=0.0_JPRB + ZGWT1(JROF,0)=0.0_JPRB + ENDDO +ENDIF + +! * convert gw tendency in d tendency: +IF(LNHDYN) THEN + + IF (LGWADV) THEN + ZTENDD(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG)=ZGWT1(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG) + ELSE + + ! * Provide the appropriate version of (RT) at t+dt for GNHGW2SVDAROME: + IF (L_RDRY_VD) THEN + ! Use Rd because "dver" is currently defined with Rd. + ZRTT1(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG)=RD*ZTT1(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG) + ELSE + ! Use "moist R" because "dver" is defined with "moist R". + ! Unfortunately, R(t+dt) is not yet available there, use R(t) instead. + ! "Moist R" tendency is neglected in the below call to GNHGW2SVDAROME. + DO JLEV=1,YDCPG_OPTS%KFLEVG + DO JROF=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + ZRTT1(JROF,JLEV)=YDCPG_DYN0%RCP%R(JROF,JLEV)*ZTT1(JROF,JLEV) + ENDDO + ENDDO + ENDIF + + ! * Do conversion: + IF (LSLAG.AND.LTWOTL) THEN + CALL GNHGW2SVDAROME(YDGEOMETRY, YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, YDCPG_PHY0%PREHYDF, YDCPG_PHY0%XYB%LNPR, & + & ZRTT1, YDCPG_PHY0%PREF, ZGWT1, ZTENDD) + ELSE + CALL GNHGW2SVDAROME(YDGEOMETRY, YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, YDCPG_PHY9%PREHYDF, YDCPG_PHY9%XYB%LNPR, & + & ZRTT1, YDCPG_PHY9%PREF, ZGWT1, ZTENDD) + ENDIF + + ENDIF +ELSE + ZTENDD=0.0_JPRB +ENDIF + +! 4.3 PUT THE TENDENCIES IN PB1/GFLT1/GMVT1. +! -------------------------------------- + + +IF (LSLAG) CALL CP_PTRSLB1(YDMODEL%YRML_DYN%YRDYN, YDPTRSLB1, ISLB1U9, ISLB1V9, ISLB1T9, ISLB1VD9, & + & ISLB1GFL9) +IF ( LINTFLEX ) THEN + + ! Set GFL tendencies to 0 + ZTENDGFL(:,:,:) = 0.0_JPRB + + CALL CPTEND_FLEX( YDLDDH, YDMDDH, YGFL, YDPHY, YDCPG_OPTS%KLON, YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, & + & YDCPG_OPTS%KFLEVG, YDVARS%GEOMETRY%GNORDL%T0, YDVARS%GEOMETRY%GNORDM%T0, YDMF_PHYS_BASE_STATE%YCPG_PHY%XYB%DELP, & + & YDMF_PHYS_BASE_STATE%YCPG_PHY%XYB%RDELP, YDMF_PHYS_BASE_STATE%YCPG_DYN%RCP%CP, YDMF_PHYS_BASE_STATE%U, & + & YDMF_PHYS_BASE_STATE%V, YDMF_PHYS_BASE_STATE%T, YDMF_PHYS_BASE_STATE%YGSP_RR%T, PGFL, YLPROCSET, & + & YDMF_PHYS%OUT%TENDU, YDMF_PHYS%OUT%TENDV, ZTENDH, ZTENDGFL, YDMF_PHYS%OUT%FHSCL, YDMF_PHYS%OUT%FHSCN, & + & YDMF_PHYS%OUT%FHSSL, YDMF_PHYS%OUT%FHSSN, YDMF_PHYS%OUT%FHPCL, YDMF_PHYS%OUT%FHPCN, YDMF_PHYS%OUT%FHPSL, & + & YDMF_PHYS%OUT%FHPSN, PFEPFP =YDMF_PHYS%OUT%FEPFP, PFCMPCQ=YDMF_PHYS%OUT%FCMPCQ, PFCMPSN=YDMF_PHYS%OUT%FCMPSN, & + & PFCMPSL=YDMF_PHYS%OUT%FCMPSL, YDDDH=YDDDH ) + + CALL CPUTQY(YDGEOMETRY%YRDIMV, YDGMV, YGFL, YDPTRSLB1, YDPHY, YDCPG_OPTS%KLON, YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA, & + & YDCPG_OPTS%KFLEVG, YDCPG_OPTS%ZDTPHY, IPGFL, ISLB1T9, ISLB1U9, ISLB1V9, ISLB1VD9, ISLB1GFL9, ZTENDH, ZTENDT, & + & YDMF_PHYS%OUT%TENDU, YDMF_PHYS%OUT%TENDV, ZTENDU, ZTENDV, ZTENDD, ZTENDGFL, YDMF_PHYS_BASE_STATE%YCPG_DYN%RCP%CP, & + & YDMF_PHYS_BASE_STATE%YCPG_PHY%XYB%DELP, YDMF_PHYS_BASE_STATE%T, YDMF_PHYS_BASE_STATE%U, YDMF_PHYS_BASE_STATE%V, & + & YDCPG_SL1%ZVIEW, PGMVT1, PGFLT1, YDMF_PHYS%OUT%FDIS) + +ELSE + + ! start ZTENDGFLR at 1 because it is dimensionned (:,:,0:n) + CALL CPUTQY_AROME_EXPL (YDMF_PHYS_NEXT_STATE, YDVARS, YDMODEL, YDGEOMETRY%YRDIMV, YDCPG_BNDS, & + & YDCPG_OPTS, YDCPG_OPTS%ZDTPHY, ZTEND_Q, ZTEND_L, ZTEND_R, ZTEND_I, ZTEND_S, ZTEND_G, ZTEND_H, ZTENDTKE, & + & ZTENDT, YDMF_PHYS%OUT%TENDU, YDMF_PHYS%OUT%TENDV, ZTENDD) + CALL CPUTQY_AROME_LOOP (YDMODEL, YDGEOMETRY%YRDIMV, YDGMV, YDCPG_BNDS, YDCPG_OPTS, YDCPG_OPTS%ZDTPHY, IPGFL, & + & IPTR, ZTENDGFLR(:, :, 1:), YDCPG_SL1%ZVIEW, PGMVT1, PGFLT1) +ENDIF + + +! ------------------------------------------------------------------ +!* 5. Final calculations. +! ------------------- + +! * Restore the initial value of some pseudo-historical surface buffers +! if relevant. +IF (LLDIAB) THEN + IF (LL_SAVE_PHSURF) THEN + CALL MF_PHYS_SAVE_PHSURF_PART2 (YDCPG_BNDS, YDCPG_OPTS, ZSAV_DDAL, ZSAV_DDOM, ZSAV_ENTCH, & + & ZSAV_FHPS, ZSAV_GZ0F, ZSAV_GZ0HF, ZSAV_HV, ZSAV_PBLH, ZSAV_QSH, ZSAV_UDAL, ZSAV_UDGRO, & + & ZSAV_UDOM, ZSAV_UNEBH, YDMF_PHYS_SURF%GSD_VF%PZ0F, YDMF_PHYS_SURF%GSD_VH%PPBLH, YDMF_PHYS_SURF%GSD_VH%PQSH, & + & YDMF_PHYS_SURF%GSD_VH%PSPSH, YDMF_PHYS_SURF%GSD_VK%PUDGRO, YDMF_PHYS_SURF%GSD_VV%PHV, YDMF_PHYS_SURF%GSD_VV%PZ0H, & + & YDVARS%DAL%T0, YDVARS%DOM%T0, YDVARS%UAL%T0, YDVARS%UEN%T0, YDVARS%UNEBH%T0, YDVARS%UOM%T0, & + & YDMODEL) + ENDIF +ENDIF + +!------------------------------------------------- +! Extract Single Column Model profiles from 3D run or +! write LFA file for MUSC (1D model) +!------------------------------------------------- +IF(LGSCM.OR.LMUSCLFA) THEN + IF (LAROME) THEN + DO JLEV=1,YDCPG_OPTS%KFLEVG + DO JROF=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + YDCPG_MISC%NEB(JROF,JLEV)=YDVARS%A%T1(JROF,JLEV) + ENDDO + ENDDO + ENDIF + CALL WRITEPHYSIO(YDGEOMETRY, YDCPG_MISC, YDCPG_PHY0, YDMF_PHYS, YDCPG_DYN0, YDMF_PHYS_SURF, YDVARS, & + & YDSURF, YDDPHY, YDRIP, YDMODEL%YRML_PHY_MF, YDCPG_BNDS%KFDIA, YDCPG_BNDS%KIDIA, YDCPG_OPTS%KGL1, & + & YDCPG_OPTS%KGL2, YDCPG_BNDS%KSTGLO, YDCPG_OPTS%KSTEP, NTSSG, YSP_SBD%NLEVS, YDVARS%GEOMETRY%GELAM%T0, & + & YDVARS%GEOMETRY%GEMU%T0, YDVARS%GEOMETRY%GM%T0, YDVARS%GEOMETRY%OROG%T0, YDVARS%GEOMETRY%RCORI%T0, & + & YDVARS%GEOMETRY%RATATH%T0, YDVARS%GEOMETRY%RATATX%T0, YDVARS%GEOMETRY%GECLO%T0, YDVARS%GEOMETRY%GESLO%T0, & + & ZRDG_CVGQ, ZRDG_LCVQ, ZRDG_MU0 ) +ENDIF + +IF (LEDR) THEN + YDMF_PHYS_SURF%GSD_DI%PXEDR(:,:)=YDMF_PHYS%OUT%EDR(:,:) +ENDIF + +CALL MF_PHYS_PRECIPS (YDCPG_BNDS, YDCPG_OPTS, ZPRC_DPRECIPS, ZPRC_DPRECIPS2, YDMF_PHYS_SURF%GSD_XP%PPRECIP, & +& YDMF_PHYS_SURF%GSD_XP2%PPRECIP2, YDMODEL) + +! 6. destructor for procset +IF (LINTFLEX) CALL CLEANINTPROCSET(YLPROCSET) + +! Clear SPP +IF (YSPP_CONFIG%LSPP) CALL CLEAR_ALL_SPP(ZSPP_ALL) + +! ------------------------------------------------------------------ -! -------------------------------------------------------------------------- END ASSOCIATE END ASSOCIATE + IF (LHOOK) CALL DR_HOOK('APL_AROME',1,ZHOOK_HANDLE) CONTAINS SUBROUTINE SWAP_THS IF (LLSWAP_THS) THEN - ZTHSIN_ => ZTHSAVE__(:,1:KLEV) + ZTHSIN_ => ZTHSAVE__(:,1:YDCPG_OPTS%KFLEVG) ZTHS__ => ZTHSWAP__ ELSE - ZTHSIN_ => ZTHSWAP__(:,1:KLEV) + ZTHSIN_ => ZTHSWAP__(:,1:YDCPG_OPTS%KFLEVG) ZTHS__ => ZTHSAVE__ ENDIF LLSWAP_THS=.NOT.LLSWAP_THS diff --git a/src/arome/ext/aro_adjust.F90 b/src/arome/ext/aro_adjust.F90 index 4554df8ba03f4e467703232f2cfe500bb20a7648..abae8e663baea159347e9be6b37b78c434f8b354 100644 --- a/src/arome/ext/aro_adjust.F90 +++ b/src/arome/ext/aro_adjust.F90 @@ -1,16 +1,16 @@ ! ######spl SUBROUTINE ARO_ADJUST(KKA,KKU,KKL,KLON,KLEV, KRR, & - NGFL_EZDIAG, & HFRAC_ICE, HCONDENS, HLAMBDA3, OSUBG_COND, & - OSIGMAS, CMICRO, OCND2, HSUBG_MF_PDF, & + OSIGMAS, CMICRO, OCND2, LHGT_QS, HSUBG_MF_PDF, & PTSTEP, PSIGQSAT, & PZZF, PRHODJ, PEXNREF, PRHODREF,& PPABSM, PTHT, PRT, PSIGS, & PMFCONV, PRC_MF, PRI_MF, PCF_MF, & PTHS, PRS, PSRCS, PCLDFR,& + PICLDFR, PWCLDFR, PSSIO, PSSIU, PIFR, & PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF,& - PGP2DSPP,PEZDIAG, & - YDDDH,YDLDDH,YDMDDH) + YDDDH,YDLDDH,YDMDDH,& + YSPP_PSIGQSAT,YSPP_ICE_CLD_WGT) USE PARKIND1, ONLY : JPRB USE YOMHOOK , ONLY : LHOOK, DR_HOOK ! ########################################################################## @@ -76,6 +76,7 @@ !! S. Riette ice for EDKF !! 2012-02 Y. Seity, add possibility to run with reversed vertical levels !! 2016-11 S. Riette: new ice_adjust interface, add OLD3/OLD4 schemes +!! 2018-02 K.I Ivarsson : More outputs from OCND2 option !! 2020-12 U. Andrae : Introduce SPP for HARMONIE-AROME !! R. El Khatib 24-Aug-2021 Optimizations !! @@ -88,11 +89,11 @@ USE MODD_CONF USE MODD_CST USE MODD_PARAMETERS USE MODD_RAIN_ICE_DESCR +USE MODD_RAIN_ICE_PARAM, ONLY: XFRMIN USE MODD_BUDGET, ONLY: TBUDGETDATA, NBUDGET_RI -USE MODD_SPP_TYPE +USE SPP_MOD_TYPE, ONLY : TSPP_CONFIG_TYPE, CLEAR_SPP_TYPE, APPLY_SPP ! USE MODI_ICE_ADJUST -USE SPP_MOD, ONLY : YSPP_CONFIG,YSPP ! USE DDH_MIX , ONLY : TYP_DDH USE YOMLDDH , ONLY : TLDDH @@ -111,7 +112,6 @@ INTEGER, INTENT(IN) :: KKL !vert. levels type 1=MNH -1=ARO INTEGER, INTENT(IN) :: KLON !NPROMA under CPG INTEGER, INTENT(IN) :: KLEV !Number of vertical levels INTEGER, INTENT(IN) :: KRR ! Number of moist variables -INTEGER, INTENT(IN) :: NGFL_EZDIAG ! Diagnostic array dimension CHARACTER*1, INTENT(IN) :: HFRAC_ICE CHARACTER*80, INTENT(IN) :: HCONDENS CHARACTER*4, INTENT(IN) :: HLAMBDA3 ! formulation for lambda3 coeff @@ -121,6 +121,7 @@ LOGICAL, INTENT(IN) :: OSIGMAS ! Switch for Sigma_s: ! or that from turbulence scheme CHARACTER (LEN=4), INTENT(IN) :: CMICRO ! Microphysics scheme LOGICAL, INTENT(IN) :: OCND2 +LOGICAL, INTENT(IN) :: LHGT_QS CHARACTER*80, INTENT(IN) :: HSUBG_MF_PDF REAL, INTENT(IN) :: PTSTEP ! Time step REAL, INTENT(IN) :: PSIGQSAT ! coeff applied to qsat variance contribution @@ -148,19 +149,25 @@ REAL, DIMENSION(KLON,1,KLEV), INTENT(OUT) :: PSRCS ! Second-order flux ! s'rc'/2Sigma_s2 at time t+1 ! multiplied by Lambda_3 REAL, DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PCLDFR! Cloud fraction +REAL, DIMENSION(KLON,1,KLEV), INTENT(OUT) :: PICLDFR ! ice cloud fraction +REAL, DIMENSION(KLON,1,KLEV), INTENT(OUT) :: PWCLDFR ! water or mixed-phase cloud fraction +REAL, DIMENSION(KLON,1,KLEV), INTENT(OUT) :: PSSIO ! Super-saturation with respect to ice in the + ! supersaturated fraction +REAL, DIMENSION(KLON,1,KLEV), INTENT(OUT) :: PSSIU ! Sub-saturation with respect to ice in the + ! subsaturated fraction +REAL, DIMENSION(KLON,1,KLEV), INTENT(OUT) :: PIFR ! Ratio cloud ice moist part to dry part ! REAL, DIMENSION(KLON,1,KLEV), INTENT(OUT) :: PHLC_HRC REAL, DIMENSION(KLON,1,KLEV), INTENT(OUT) :: PHLC_HCF REAL, DIMENSION(KLON,1,KLEV), INTENT(OUT) :: PHLI_HRI REAL, DIMENSION(KLON,1,KLEV), INTENT(OUT) :: PHLI_HCF ! -REAL, DIMENSION(KLON,YSPP%N2D), TARGET, INTENT(INOUT) :: PGP2DSPP -REAL, DIMENSION(KLON,KLEV,NGFL_EZDIAG), INTENT(INOUT) :: PEZDIAG -! TYPE(TYP_DDH), INTENT(INOUT), TARGET :: YDDDH TYPE(TLDDH), INTENT(IN), TARGET :: YDLDDH TYPE(TMDDH), INTENT(IN), TARGET :: YDMDDH ! +TYPE(TSPP_CONFIG_TYPE), INTENT(INOUT) :: YSPP_PSIGQSAT,YSPP_ICE_CLD_WGT +! !* 0.2 Declarations of local variables : CHARACTER*4 :: HBUNAME ! Name of the budget @@ -178,12 +185,9 @@ REAL :: ZMASSTOT ! total mass for one water category REAL :: ZMASSPOS ! total mass for one water category ! after removing the negative values REAL :: ZRATIO ! ZMASSTOT / ZMASSCOR -REAL :: ZCOR(KLON) ! for the correction of negative rv +REAL :: ZCOR(KLON) ! for the correction of negative rv ! -TYPE(TSPP_CONFIG_MPA) :: YSPP_PSIGQSAT,YSPP_ICE_CLD_WGT -REAL :: ZMU, ZVAL REAL, DIMENSION(KLON,1) :: ZSIGQSAT, ZICE_CLD_WGT -INTEGER :: JI TYPE(TBUDGETDATA), DIMENSION(NBUDGET_RI) :: YLBUDGET !NBUDGET_RI is the one with the highest number ! ! @@ -195,69 +199,20 @@ REAL(KIND=JPRB) :: ZHOOK_HANDLE ! IF (LHOOK) CALL DR_HOOK('ARO_ADJUST',0,ZHOOK_HANDLE) -! Copy SPP settings -IF ( YSPP_CONFIG%LSPP ) THEN - - IF ( YSPP_CONFIG%LPERT_PSIGQSAT ) & - CALL SET_SPP_TYPE(YSPP_PSIGQSAT, & - YSPP_CONFIG%LLNN_MEAN1, YSPP_CONFIG%LLNN_MEAN1_PSIGQSAT, & - YSPP_CONFIG%CMPERT_PSIGQSAT, YSPP_CONFIG%SDEV, & - YSPP_CONFIG%CLIP_PSIGQSAT, & - YSPP%MP_PSIGQSAT, & - KLON,KLEV,YSPP%N2D,NGFL_EZDIAG, & - YSPP_CONFIG%IEZDIAG_POS, & - PGP2DSPP,PSIGQSAT,PEZDIAG) - - IF ( YSPP_CONFIG%LPERT_ICE_CLD_WGT ) & - CALL SET_SPP_TYPE(YSPP_ICE_CLD_WGT, & - YSPP_CONFIG%LLNN_MEAN1, YSPP_CONFIG%LLNN_MEAN1_ICE_CLD_WGT, & - YSPP_CONFIG%CMPERT_ICE_CLD_WGT, YSPP_CONFIG%SDEV, & - YSPP_CONFIG%CLIP_ICE_CLD_WGT, & - YSPP%MP_ICE_CLD_WGT, & - KLON,KLEV,YSPP%N2D,NGFL_EZDIAG, & - YSPP_CONFIG%IEZDIAG_POS, & - PGP2DSPP,1.0_JPRB,PEZDIAG) - ! Awaiting merge of HARMONIE-AROME physics - !PGP2DSPP,XFRMIN(21),PEZDIAG) - -ENDIF +! +! Apply SPP perturbations +! -! Compute perturbations -! Perturb PSIGQSAT IF (YSPP_PSIGQSAT%LPERT) THEN - IF (YSPP_PSIGQSAT%LLNN_MEAN1.OR.YSPP_PSIGQSAT%LLNN_MEAN1_SELF) THEN - ZMU = -0.5 * (YSPP_PSIGQSAT%CMPERT * YSPP_PSIGQSAT%SDEV)**2 - ELSE - ZMU = 0. - ENDIF - DO JI=1,KLON - ZVAL = & - PSIGQSAT*EXP(ZMU+YSPP_PSIGQSAT%CMPERT*YSPP_PSIGQSAT%PGP2DSPP(JI)) - ZSIGQSAT(JI,1) = MAX(YSPP_PSIGQSAT%CLIP(1),MIN(ZVAL,YSPP_PSIGQSAT%CLIP(2))) - ENDDO + CALL APPLY_SPP(YSPP_PSIGQSAT,KLON,1,KLON,PSIGQSAT,ZSIGQSAT) ELSE - ZSIGQSAT(:,1) = PSIGQSAT + ZSIGQSAT(:,:) = PSIGQSAT ENDIF -! Perturb ICE_CLD_WGT IF (YSPP_ICE_CLD_WGT%LPERT) THEN - IF (YSPP_ICE_CLD_WGT%LLNN_MEAN1.OR.YSPP_ICE_CLD_WGT%LLNN_MEAN1_SELF) THEN - ZMU = -0.5 * (YSPP_ICE_CLD_WGT%CMPERT * YSPP_ICE_CLD_WGT%SDEV)**2 - ELSE - ZMU = 0. - ENDIF - DO JI=1,KLON - ! Awaiting HARMONIE-AROME physics changes - ! ZVAL = & - ! XFRMIN(21)* EXP(ZMU+YSPP_ICE_CLD_WGT%CMPERT*YSPP_ICE_CLD_WGT%PGP2DSPP(JI)) - ZVAL = & - 1.5* EXP(ZMU+YSPP_ICE_CLD_WGT%CMPERT*YSPP_ICE_CLD_WGT%PGP2DSPP(JI)) - ZICE_CLD_WGT(JI,1) = & - MAX(YSPP_ICE_CLD_WGT%CLIP(1),MIN(ZVAL,YSPP_ICE_CLD_WGT%CLIP(2))) - ENDDO + CALL APPLY_SPP(YSPP_ICE_CLD_WGT,KLON,1,KLON,XFRMIN(21),ZICE_CLD_WGT) ELSE -! ZICE_CLD_WGT(:) = XFRMIN(21) - ZICE_CLD_WGT(:,1) = 1.5 + ZICE_CLD_WGT(:,:) = XFRMIN(21) ENDIF HBUNAME='DEPI' @@ -435,11 +390,13 @@ IF (KRR==6) THEN CALL ICE_ADJUST ( KKA=KKA,KKU=KKU,KKL=KKL,KRR=KRR,& & HFRAC_ICE=HFRAC_ICE, HCONDENS=HCONDENS, HLAMBDA3=HLAMBDA3, HBUNAME=HBUNAME, & & OSUBG_COND=OSUBG_COND, OSIGMAS=OSIGMAS, & - & OCND2=OCND2, HSUBG_MF_PDF=HSUBG_MF_PDF, & + & OCND2=OCND2, LHGT_QS=LHGT_QS, HSUBG_MF_PDF=HSUBG_MF_PDF, & & PTSTEP=ZTWOTSTEP,PSIGQSAT=ZSIGQSAT, & & PRHODJ=PRHODJ ,PEXNREF=PEXNREF, PRHODREF=PRHODREF, & & PSIGS=PSIGS, PMFCONV=PMFCONV, PPABST=PPABSM, PZZ=ZZZ, & & PEXN=PEXNREF, PCF_MF=PCF_MF,PRC_MF=PRC_MF,PRI_MF=PRI_MF, & + & PICLDFR=PICLDFR, PWCLDFR=PWCLDFR, & + & PSSIO=PSSIO, PSSIU=PSSIU, PIFR=PIFR, & & PRV=ZRS(:,:,:,1), PRC=ZRS(:,:,:,2), & & PRVS=PRS(:,:,:,1), PRCS=PRS(:,:,:,2), & & PTH=ZRS(:,:,:,0), PTHS=PTHS,PSRCS=PSRCS, PCLDFR=PCLDFR, & @@ -447,19 +404,21 @@ IF (KRR==6) THEN & PRI=ZRS(:,:,:,4), PRIS=PRS(:,:,:,4), & & PRS=ZRS(:,:,:,5), & & PRG=ZRS(:,:,:,6), & - & PHLC_HRC=PHLC_HRC(:,:,:), PHLC_HCF=PHLC_HCF(:,:,:), & - & PHLI_HRI=PHLI_HRI(:,:,:), PHLI_HCF=PHLI_HCF(:,:,:), & + & TBUDGETS=YLBUDGET, KBUDGETS=SIZE(YLBUDGET), & & PICE_CLD_WGT=ZICE_CLD_WGT(:,:), & - & TBUDGETS=YLBUDGET, KBUDGETS=SIZE(YLBUDGET)) + & PHLC_HRC=PHLC_HRC(:,:,:), PHLC_HCF=PHLC_HCF(:,:,:), & + & PHLI_HRI=PHLI_HRI(:,:,:), PHLI_HCF=PHLI_HCF(:,:,:)) ELSE CALL ICE_ADJUST ( KKA=KKA,KKU=KKU,KKL=KKL,KRR=KRR,& & HFRAC_ICE=HFRAC_ICE, HCONDENS=HCONDENS, HLAMBDA3=HLAMBDA3, HBUNAME=HBUNAME, & & OSUBG_COND=OSUBG_COND, OSIGMAS=OSIGMAS, & - & OCND2=OCND2, HSUBG_MF_PDF=HSUBG_MF_PDF, & + & OCND2=OCND2, LHGT_QS=LHGT_QS, HSUBG_MF_PDF=HSUBG_MF_PDF, & & PTSTEP=ZTWOTSTEP,PSIGQSAT=ZSIGQSAT, & & PRHODJ=PRHODJ ,PEXNREF=PEXNREF, PRHODREF=PRHODREF, & & PSIGS=PSIGS, PMFCONV=PMFCONV, PPABST=PPABSM, PZZ=ZZZ, & & PEXN=PEXNREF, PCF_MF=PCF_MF,PRC_MF=PRC_MF,PRI_MF=PRI_MF, & + & PICLDFR=PICLDFR, PWCLDFR=PWCLDFR, & + & PSSIO=PSSIO, PSSIU=PSSIU, PIFR=PIFR, & & PRV=ZRS(:,:,:,1), PRC=ZRS(:,:,:,2), & & PRVS=PRS(:,:,:,1), PRCS=PRS(:,:,:,2), & & PTH=ZRS(:,:,:,0), PTHS=PTHS,PSRCS=PSRCS, PCLDFR=PCLDFR, & @@ -467,11 +426,11 @@ ELSE & PRI=ZRS(:,:,:,4), PRIS=PRS(:,:,:,4), & & PRS=ZRS(:,:,:,5), & & PRG=ZRS(:,:,:,6), & + & TBUDGETS=YLBUDGET, KBUDGETS=SIZE(YLBUDGET), & + & PICE_CLD_WGT=ZICE_CLD_WGT(:,:), & & PRH=ZRS(:,:,:,7), & & PHLC_HRC=PHLC_HRC(:,:,:), PHLC_HCF=PHLC_HCF(:,:,:), & - & PHLI_HRI=PHLI_HRI(:,:,:), PHLI_HCF=PHLI_HCF(:,:,:), & - & PICE_CLD_WGT=ZICE_CLD_WGT(:,:), & - & TBUDGETS=YLBUDGET, KBUDGETS=SIZE(YLBUDGET)) + & PHLI_HRI=PHLI_HRI(:,:,:), PHLI_HCF=PHLI_HCF(:,:,:)) ENDIF CALL CLEAR_SPP_TYPE(YSPP_PSIGQSAT) diff --git a/src/arome/ext/aro_adjust.h b/src/arome/ext/aro_adjust.h index 6f2856602c59c9926eecc055be328e7e4efaea48..862153ceea5a759f69af5a8502378e11d08de6fb 100644 --- a/src/arome/ext/aro_adjust.h +++ b/src/arome/ext/aro_adjust.h @@ -1,17 +1,17 @@ INTERFACE SUBROUTINE ARO_ADJUST(KKA,KKU,KKL,KLON,KLEV, KRR,& - & NGFL_EZDIAG, & & HFRAC_ICE, HCONDENS, HLAMBDA3, OSUBG_COND, & - & OSIGMAS, CMICRO, OCND2, HSUBG_MF_PDF,& + & OSIGMAS, CMICRO, OCND2, LHGT_QS, HSUBG_MF_PDF,& & PTSTEP, PSIGQSAT, PZZF, PRHODJ, PEXNREF, PRHODREF,& & PPABSM, PTHT, PRT, PSIGS,& & PMFCONV, PRC_MF, PRI_MF, PCF_MF,& & PTHS, PRS, PSRCS, PCLDFR, & + & PICLDFR, PWCLDFR, PSSIO, PSSIU, PIFR,& & PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF, & - & PGP2DSPP,PEZDIAG, & - & YDDDH,YDLDDH,YDMDDH) + & YDDDH,YDLDDH,YDMDDH,& + & YSPP_PSIGQSAT,YSPP_ICE_CLD_WGT) USE PARKIND1 ,ONLY : JPIM ,JPRB -USE SPP_MOD, ONLY : YSPP +USE SPP_MOD_TYPE, ONLY : TSPP_CONFIG_TYPE USE DDH_MIX, ONLY : TYP_DDH USE YOMLDDH, ONLY : TLDDH USE YOMMDDH, ONLY : TMDDH @@ -21,7 +21,6 @@ INTEGER(KIND=JPIM), INTENT(IN) :: KKL INTEGER(KIND=JPIM), INTENT(IN) :: KLON INTEGER(KIND=JPIM), INTENT(IN) :: KLEV INTEGER(KIND=JPIM), INTENT(IN) :: KRR -INTEGER(KIND=JPIM), INTENT(IN) :: NGFL_EZDIAG CHARACTER*1, INTENT(IN) :: HFRAC_ICE CHARACTER(LEN=80), INTENT(IN) :: HCONDENS CHARACTER*4, INTENT(IN) :: HLAMBDA3 @@ -29,6 +28,7 @@ LOGICAL, INTENT(IN) :: OSUBG_COND LOGICAL, INTENT(IN) :: OSIGMAS CHARACTER(LEN=4), INTENT(IN) :: CMICRO LOGICAL, INTENT(IN) :: OCND2 +LOGICAL, INTENT(IN) :: LHGT_QS CHARACTER(LEN=80), INTENT(IN) :: HSUBG_MF_PDF REAL(KIND=JPRB), INTENT(IN) :: PTSTEP REAL(KIND=JPRB), INTENT(IN) :: PSIGQSAT @@ -46,14 +46,18 @@ REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PTHS REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV,KRR), INTENT(INOUT) :: PRS REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(OUT) :: PSRCS REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PCLDFR +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(OUT) :: PICLDFR +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(OUT) :: PWCLDFR +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(OUT) :: PSSIO +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(OUT) :: PSSIU +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(OUT) :: PIFR REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(OUT) :: PHLC_HRC REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(OUT) :: PHLC_HCF REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(OUT) :: PHLI_HRI REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(OUT) :: PHLI_HCF -REAL(KIND=JPRB), DIMENSION(KLON,YSPP%N2D), INTENT(INOUT) :: PGP2DSPP -REAL(KIND=JPRB), DIMENSION(KLON,KLEV,NGFL_EZDIAG), INTENT(INOUT) :: PEZDIAG TYPE(TYP_DDH) , INTENT(INOUT) :: YDDDH TYPE(TLDDH) , INTENT(IN) :: YDLDDH TYPE(TMDDH) , INTENT(IN) :: YDMDDH +TYPE(TSPP_CONFIG_TYPE), INTENT(INOUT) :: YSPP_PSIGQSAT,YSPP_ICE_CLD_WGT END SUBROUTINE ARO_ADJUST END INTERFACE diff --git a/src/arome/ext/aro_rain_ice.F90 b/src/arome/ext/aro_rain_ice.F90 index ccc9271418fa9b34d8f8349c8943d850e5fc0301..7e321c99507b4bb1cdc61791b21bb38d73f0d4a7 100644 --- a/src/arome/ext/aro_rain_ice.F90 +++ b/src/arome/ext/aro_rain_ice.F90 @@ -1,15 +1,15 @@ ! ######spl SUBROUTINE ARO_RAIN_ICE(KPROMA,KKA,KKU,KKL,KLON,KLEV, KRR, KTCOUNT, KSPLITR,& - KEZDIAG, & OSUBG_COND, CSUBG_AUCV_RC, CSUBG_AUCV_RI,OSEDIC, CSEDIM, CMICRO, & PTSTEP, PDZZ, PRHODJ, PRHODREF, PEXNREF,& PPABSM, PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF, PTHT, PRT, PSIGS,PCLDFR, & PTHS, PRS, PEVAP, & PCIT, OWARM, PSEA, PTOWN, & - OCND2,LGRSN, & + PICLDFR, PWCLDFR, PSSIO, PSSIU, PIFR, & + OCND2, LKOGAN, LMODICEDEP,& PINPRR,PINPRS,PINPRG,PINPRH,PFPR, & - PGP2DSPP,PEZDIAG, & - YDDDH, YDLDDH, YDMDDH) + YDDDH, YDLDDH, YDMDDH, & + YSPP_ICENU,YSPP_KGN_ACON,YSPP_KGN_SBGR) USE PARKIND1, ONLY : JPRB USE YOMHOOK , ONLY : LHOOK, DR_HOOK ! ########################################################################## @@ -78,6 +78,7 @@ !! 2014-11 S. Riette, ICE3/ICE4 modified, old versions under OLD3/OLD4 !! 2014-11 S. Riette, ICE3/ICE4 modified, old versions under OLD3/OLD4 !! 2020-12 U. Andrae : Introduce SPP for HARMONIE-AROME +!! 2018-02 K.I: Ivarsson: More inputs to OCND2-option for saving computing time. !! R. El Khatib 24-Aug-2021 Specific cache-blocking factor for microphysics !! !------------------------------------------------------------------------------- @@ -89,7 +90,7 @@ USE MODD_CONF USE MODD_CST USE MODD_PARAMETERS USE MODD_RAIN_ICE_DESCR -USE MODD_SPP_TYPE +USE MODD_RAIN_ICE_PARAM, ONLY: XFRMIN ! USE MODD_BUDGET, ONLY: LBUDGET_RV, LBUDGET_RC, LBUDGET_RR, LBUDGET_RI, LBUDGET_RS, & & LBUDGET_RG, LBUDGET_RH, LBUDGET_TH, TBUDGETDATA, NBUDGET_RH @@ -97,7 +98,7 @@ USE MODE_BUDGET, ONLY: BUDGET_DDH ! USE MODI_RAIN_ICE ! -USE SPP_MOD, ONLY : YSPP_CONFIG,YSPP +USE SPP_MOD_TYPE, ONLY : TSPP_CONFIG_TYPE, APPLY_SPP ! USE MODI_RAIN_ICE_OLD ! @@ -121,7 +122,6 @@ INTEGER, INTENT(IN) :: KLEV !Number of vertical levels INTEGER, INTENT(IN) :: KRR ! Number of moist variables INTEGER, INTENT(IN) :: KTCOUNT ! Temporal loop counter INTEGER, INTENT(IN) :: KSPLITR ! Number of small time step -INTEGER, INTENT(IN) :: KEZDIAG ! Size of diagnostics array ! integrations for rain sedimendation LOGICAL, INTENT(IN) :: OSUBG_COND ! Switch for Subgrid Cond. CHARACTER (LEN=4), INTENT(IN) :: CSUBG_AUCV_RC @@ -150,6 +150,16 @@ REAL, DIMENSION(KLON,1,KLEV), INTENT(IN) :: PTHT ! Theta at time t REAL, DIMENSION(KLON,1,KLEV,KRR), INTENT(INOUT):: PRT ! Moist variables at time t REAL, DIMENSION(KLON,1,KLEV), INTENT(IN) :: PSIGS ! Sigma_s at time t REAL, DIMENSION(KLON,1,KLEV), INTENT(IN) :: PCLDFR ! Cloud fraction +! input from aro_adjust / condensation with OCND2, dummy if OCND2 = F +REAL, DIMENSION(KLON,1,KLEV), INTENT(IN) :: PICLDFR ! ice cloud fraction +REAL, DIMENSION(KLON,1,KLEV), INTENT(IN) :: PWCLDFR ! water or mixed-phase cloud fraction +REAL, DIMENSION(KLON,1,KLEV), INTENT(IN) :: PSSIO ! Super-saturation with respect to ice in the + ! supersaturated fraction +REAL, DIMENSION(KLON,1,KLEV), INTENT(IN) :: PSSIU ! Sub-saturation with respect to ice in the + ! subsaturated fraction +REAL, DIMENSION(KLON,1,KLEV), INTENT(INOUT):: PIFR ! Ratio cloud ice moist part to dry part +!REAL, DIMENSION (KLON,1), INTENT(IN) :: PPBL ! PBL top above ground (m) +! input from aro_adjust / condensation with OCND2 END. ! ! REAL, DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PTHS ! Theta source @@ -164,7 +174,8 @@ LOGICAL, INTENT(IN) :: OWARM ! Control of the rain formation ! by slow warm microphysical ! processes LOGICAL, INTENT(IN) :: OCND2 ! Logical switch to separate liquid and ice -LOGICAL, INTENT(IN) :: LGRSN ! Logical switch to turn graupel to snow for high supersaturation wrt ice +LOGICAL, INTENT(IN) :: LKOGAN! Logical switch for using Kogan autoconversion of liquid +LOGICAL, INTENT(IN) :: LMODICEDEP ! Logical switch for alternative dep/evap of ice REAL, DIMENSION(KLON,1), INTENT(IN) :: PSEA ! Land sea mask REAL, DIMENSION(KLON,1), INTENT(IN) :: PTOWN ! Town mask REAL, DIMENSION(KLON,1), INTENT(OUT) :: PINPRR! Rain instant precip @@ -172,13 +183,13 @@ REAL, DIMENSION(KLON,1), INTENT(OUT) :: PINPRS! Snow instant precip REAL, DIMENSION(KLON,1), INTENT(OUT) :: PINPRG! Graupel instant precip REAL, DIMENSION(KLON,1), INTENT(OUT) :: PINPRH! Hail instant precip REAL, DIMENSION(KLON,1,KLEV,KRR), INTENT(INOUT) :: PFPR ! upper-air precip -REAL, DIMENSION(KLON,YSPP%N2D), TARGET, INTENT(INOUT) :: PGP2DSPP -REAL, DIMENSION(KLON,KLEV,KEZDIAG), INTENT(INOUT) :: PEZDIAG ! TYPE(TYP_DDH), INTENT(INOUT), TARGET :: YDDDH TYPE(TLDDH), INTENT(IN), TARGET :: YDLDDH TYPE(TMDDH), INTENT(IN), TARGET :: YDMDDH ! +TYPE(TSPP_CONFIG_TYPE), INTENT(INOUT) :: YSPP_ICENU,YSPP_KGN_ACON,YSPP_KGN_SBGR +! ! !* 0.2 Declarations of local variables : INTEGER :: JRR ! Loop index for the moist and scalar variables @@ -189,6 +200,7 @@ REAL, DIMENSION(KLON,1,KLEV):: ZT,ZLV,ZLS,ZCPH REAL, DIMENSION(KLON,1,KLEV):: ZCOR REAL, DIMENSION(KLON,1):: ZINDEP ! surf cloud deposition (already contained in sedimentation) REAL, DIMENSION(KLON,1,KLEV):: ZRAINFR +REAL, DIMENSION(KLON,1) :: ZICENU, ZKGN_ACON, ZKGN_SBGR REAL, DIMENSION(KLON,1):: ZINPRC ! surf cloud sedimentation ! for the correction of negative rv REAL :: ZMASSTOT ! total mass for one water category @@ -197,8 +209,6 @@ REAL :: ZMASSPOS ! total mass for one water category ! after removing the negative values REAL :: ZRATIO ! ZMASSTOT / ZMASSCOR -TYPE(TSPP_CONFIG_MPA) :: YSPP_ICENU,YSPP_KGN_ACON,YSPP_KGN_SBGR - LOGICAL, DIMENSION(KLON, 1, KLEV) :: LLMICRO !mask to limit computation TYPE(TBUDGETDATA), DIMENSION(NBUDGET_RH) :: YLBUDGET !NBUDGET_RH is the one with the highest number @@ -217,43 +227,6 @@ IF (LHOOK) CALL DR_HOOK('ARO_RAIN_ICE',0,ZHOOK_HANDLE) ZINPRC=0. PINPRH=0. -! Copy SPP settings -IF ( YSPP_CONFIG%LSPP ) THEN - - ! Awaiting HARMONIE-AROME physics changes - - IF ( YSPP_CONFIG%LPERT_ICENU ) & - CALL SET_SPP_TYPE(YSPP_ICENU, & - YSPP_CONFIG%LLNN_MEAN1, YSPP_CONFIG%LLNN_MEAN1_ICENU, & - YSPP_CONFIG%CMPERT_ICENU, YSPP_CONFIG%SDEV, & - YSPP_CONFIG%CLIP_ICENU, & - YSPP%MP_ICENU, KLON,KLEV,YSPP%N2D,KEZDIAG, & - YSPP_CONFIG%IEZDIAG_POS, & - PGP2DSPP, 1.0_JPRB,PEZDIAG) - !PGP2DSPP, XFRMIN(9),PEZDIAG) - - IF ( YSPP_CONFIG%LPERT_KGN_ACON ) & - CALL SET_SPP_TYPE(YSPP_KGN_ACON, & - YSPP_CONFIG%LLNN_MEAN1, YSPP_CONFIG%LLNN_MEAN1_KGN_ACON, & - YSPP_CONFIG%CMPERT_KGN_ACON, YSPP_CONFIG%SDEV, & - YSPP_CONFIG%CLIP_KGN_ACON, & - YSPP%MP_KGN_ACON, KLON,KLEV,YSPP%N2D,KEZDIAG, & - YSPP_CONFIG%IEZDIAG_POS, & - PGP2DSPP, 10._JPRB ,PEZDIAG) - !PGP2DSPP, XFRMIN(10),PEZDIAG) - - IF ( YSPP_CONFIG%LPERT_KGN_SBGR ) & - CALL SET_SPP_TYPE(YSPP_KGN_SBGR, & - YSPP_CONFIG%LLNN_MEAN1, YSPP_CONFIG%LLNN_MEAN1_KGN_SBGR, & - YSPP_CONFIG%CMPERT_KGN_SBGR, YSPP_CONFIG%SDEV, & - YSPP_CONFIG%CLIP_KGN_SBGR, & - YSPP%MP_KGN_SBGR, KLON,KLEV,YSPP%N2D,KEZDIAG, & - YSPP_CONFIG%IEZDIAG_POS, & - PGP2DSPP, 1.0_JPRB,PEZDIAG) - !PGP2DSPP, XFRMIN(11),PEZDIAG) - -ENDIF - !Mask to limit computation IF ( KRR == 7 ) THEN IF (CMICRO /= 'ICE4' .AND. CMICRO /= 'OLD4') THEN @@ -462,11 +435,31 @@ ELSEIF (CMICRO=='ICE3') THEN & TBUDGETS=YLBUDGET, KBUDGETS=SIZE(YLBUDGET), & & PSEA=PSEA, PTOWN=PTOWN, PFPR=PFPR) ELSEIF (CMICRO=='OLD4') THEN - CALL RAIN_ICE_OLD( OSEDIC=OSEDIC, OCND2=OCND2, LGRSN=LGRSN, HSEDIM=CSEDIM, HSUBG_AUCV_RC=CSUBG_AUCV_RC,& + IF (YSPP_ICENU%LPERT) THEN + CALL APPLY_SPP(YSPP_ICENU,KLON,1,KLON,XFRMIN(9),ZICENU) + ELSE + ZICENU(:,:) = XFRMIN(9) + ENDIF + + IF (YSPP_KGN_ACON%LPERT) THEN + CALL APPLY_SPP(YSPP_KGN_ACON,KLON,1,KLON,XFRMIN(10),ZKGN_ACON) + ELSE + ZKGN_ACON(:,:) = XFRMIN(10) + ENDIF + + IF (YSPP_KGN_SBGR%LPERT) THEN + CALL APPLY_SPP(YSPP_KGN_SBGR,KLON,1,KLON,XFRMIN(11),ZKGN_SBGR) + ELSE + ZKGN_SBGR(:,:) = XFRMIN(11) + ENDIF + CALL RAIN_ICE_OLD( OSEDIC=OSEDIC, OCND2=OCND2, LKOGAN=LKOGAN, LMODICEDEP=LMODICEDEP, & + & HSEDIM=CSEDIM, HSUBG_AUCV_RC=CSUBG_AUCV_RC, & & OWARM=OWARM,KKA=KKA,KKU=KKU,KKL=KKL,KSPLITR=KSPLITR, & & PTSTEP=2*PTSTEP, KRR=KRR, & & PDZZ=PDZZ, PRHODJ=PRHODJ, PRHODREF=PRHODREF, PEXNREF=PEXNREF,& & PPABST=PPABSM, PCIT=PCIT, PCLDFR=PCLDFR, & + & PICLDFR=PICLDFR, PWCLDFR=PWCLDFR, & + & PSSIO=PSSIO, PSSIU=PSSIU, PIFR=PIFR, & & PTHT=PTHT,PRVT= PRT(:,:,:,1),PRCT= PRT(:,:,:,2), & & PRRT=PRT(:,:,:,3), & & PRIT=PRT(:,:,:,4), PRST=PRT(:,:,:,5), & @@ -476,15 +469,39 @@ ELSEIF (CMICRO=='OLD4') THEN & PRIS=PRS(:,:,:,4),PRSS= PRS(:,:,:,5),PRGS= PRS(:,:,:,6),& & PINPRC=ZINPRC,PINPRR=PINPRR,PEVAP3D=PEVAP,& & PINPRS=PINPRS, PINPRG=PINPRG, & - & PSIGS=PSIGS, PSEA=PSEA, PTOWN=PTOWN, PRHT=PRT(:,:,:,7),& + & PSIGS=PSIGS, PSEA=PSEA, PTOWN=PTOWN, & + & YDDDH=YDDDH,YDLDDH=YDLDDH,YDMDDH=YDMDDH, & + & PRHT=PRT(:,:,:,7),& & PRHS=PRS(:,:,:,7), PINPRH=PINPRH, PFPR=PFPR, & - & YDDDH=YDDDH,YDLDDH=YDLDDH,YDMDDH=YDMDDH ) + & PICENU=ZICENU, & + & PKGN_ACON=ZKGN_ACON, & + & PKGN_SBGR=ZKGN_SBGR) ELSE - CALL RAIN_ICE_OLD ( OSEDIC=OSEDIC, OCND2=OCND2, LGRSN=LGRSN, HSEDIM=CSEDIM, HSUBG_AUCV_RC=CSUBG_AUCV_RC, & + IF (YSPP_ICENU%LPERT) THEN + CALL APPLY_SPP(YSPP_ICENU,KLON,1,KLON,XFRMIN(9),ZICENU) + ELSE + ZICENU(:,:) = XFRMIN(9) + ENDIF + + IF (YSPP_KGN_ACON%LPERT) THEN + CALL APPLY_SPP(YSPP_KGN_ACON,KLON,1,KLON,XFRMIN(10),ZKGN_ACON) + ELSE + ZKGN_ACON(:,:) = XFRMIN(10) + ENDIF + + IF (YSPP_KGN_SBGR%LPERT) THEN + CALL APPLY_SPP(YSPP_KGN_SBGR,KLON,1,KLON,XFRMIN(11),ZKGN_SBGR) + ELSE + ZKGN_SBGR(:,:) = XFRMIN(11) + ENDIF + CALL RAIN_ICE_OLD( OSEDIC=OSEDIC, OCND2=OCND2, LKOGAN=LKOGAN, LMODICEDEP=LMODICEDEP, & + & HSEDIM=CSEDIM, HSUBG_AUCV_RC=CSUBG_AUCV_RC, & & OWARM=OWARM,KKA=KKA,KKU=KKU,KKL=KKL,KSPLITR=KSPLITR, & & PTSTEP=2*PTSTEP, KRR=KRR, & - & PDZZ=PDZZ, PRHODJ=PRHODJ, PRHODREF=PRHODREF,PEXNREF=PEXNREF,& + & PDZZ=PDZZ, PRHODJ=PRHODJ, PRHODREF=PRHODREF, PEXNREF=PEXNREF,& & PPABST=PPABSM, PCIT=PCIT, PCLDFR=PCLDFR, & + & PICLDFR=PICLDFR, PWCLDFR=PWCLDFR, & + & PSSIO=PSSIO, PSSIU=PSSIU, PIFR=PIFR, & & PTHT=PTHT,PRVT= PRT(:,:,:,1),PRCT= PRT(:,:,:,2), & & PRRT=PRT(:,:,:,3), & & PRIT=PRT(:,:,:,4), PRST=PRT(:,:,:,5), & @@ -494,10 +511,12 @@ ELSE & PRIS=PRS(:,:,:,4),PRSS= PRS(:,:,:,5),PRGS= PRS(:,:,:,6),& & PINPRC=ZINPRC,PINPRR=PINPRR,PEVAP3D=PEVAP,& & PINPRS=PINPRS, PINPRG=PINPRG, & - & PSIGS=PSIGS, PSEA=PSEA, PTOWN=PTOWN, PFPR=PFPR, & + & PSIGS=PSIGS, PSEA=PSEA, PTOWN=PTOWN, & & YDDDH=YDDDH,YDLDDH=YDLDDH,YDMDDH=YDMDDH, & - & YSPP_KGN_ACON=YSPP_KGN_ACON, & - & YSPP_KGN_SBGR=YSPP_KGN_SBGR) + & PFPR=PFPR, & + & PICENU=ZICENU, & + & PKGN_ACON=ZKGN_ACON, & + & PKGN_SBGR=ZKGN_SBGR) ENDIF !add ZINPRC in PINPRR PINPRR=PINPRR+ZINPRC diff --git a/src/arome/ext/aro_rain_ice.h b/src/arome/ext/aro_rain_ice.h index 825705af01df59841ec6b148606cc092b1d09303..6b506fe8998551137e5b7089b87ed3695d423197 100644 --- a/src/arome/ext/aro_rain_ice.h +++ b/src/arome/ext/aro_rain_ice.h @@ -1,19 +1,19 @@ INTERFACE SUBROUTINE ARO_RAIN_ICE(KPROMA,KKA,KKU,KKL,KLON,KLEV, KRR, KTCOUNT, KSPLITR,& - & KEZDIAG, & & OSUBG_COND, CSUBG_AUCV_RC, CSUBG_AUCV_RI, OSEDIC,CSEDIM,CMICRO,& & PTSTEP, PDZZ, PRHODJ, PRHODREF, PEXNREF,& & PPABSM, PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF, PTHT, PRT, PSIGS,PCLDFR,& & PTHS, PRS, PEVAP,& & PCIT, OWARM, PSEA, PTOWN, & - & OCND2, LGRSN, & + & PICLDFR, PWCLDFR, PSSIO, PSSIU, PIFR, & + & OCND2, LKOGAN, LMODICEDEP,& & PINPRR,PINPRS,& & PINPRG,PINPRH,PFPR,& - & PGP2DSPP,PEZDIAG, & - & YDDDH,YDLDDH,YDMDDH) + & YDDDH,YDLDDH,YDMDDH,& + & YSPP_ICENU,YSPP_KGN_ACON,YSPP_KGN_SBGR) USE PARKIND1 ,ONLY : JPIM ,JPRB USE DDH_MIX, ONLY : TYP_DDH -USE SPP_MOD, ONLY : YSPP +USE SPP_MOD_TYPE, ONLY : TSPP_CONFIG_TYPE USE YOMLDDH, ONLY : TLDDH USE YOMMDDH, ONLY : TMDDH INTEGER, INTENT(IN) :: KPROMA @@ -25,7 +25,6 @@ INTEGER(KIND=JPIM), INTENT(IN) :: KLEV INTEGER(KIND=JPIM), INTENT(IN) :: KRR INTEGER(KIND=JPIM), INTENT(IN) :: KTCOUNT INTEGER(KIND=JPIM), INTENT(IN) :: KSPLITR -INTEGER(KIND=JPIM), INTENT(IN) :: KEZDIAG LOGICAL, INTENT(IN) :: OSUBG_COND CHARACTER(LEN=4), INTENT(IN) :: CSUBG_AUCV_RC CHARACTER(LEN=80), INTENT(IN) :: CSUBG_AUCV_RI @@ -53,17 +52,22 @@ REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PCIT LOGICAL, INTENT(IN) :: OWARM REAL(KIND=JPRB), DIMENSION(KLON,1), INTENT(IN) :: PSEA REAL(KIND=JPRB), DIMENSION(KLON,1), INTENT(IN) :: PTOWN +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PICLDFR +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PWCLDFR +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PSSIO +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PSSIU +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PIFR LOGICAL, INTENT(IN) :: OCND2 -LOGICAL, INTENT(IN) :: LGRSN +LOGICAL, INTENT(IN) :: LKOGAN +LOGICAL, INTENT(IN) :: LMODICEDEP REAL(KIND=JPRB), DIMENSION(KLON,1), INTENT(INOUT) :: PINPRR REAL(KIND=JPRB), DIMENSION(KLON,1), INTENT(INOUT) :: PINPRS REAL(KIND=JPRB), DIMENSION(KLON,1), INTENT(INOUT) :: PINPRG REAL(KIND=JPRB), DIMENSION(KLON,1), INTENT(INOUT) :: PINPRH REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV,KRR), INTENT(INOUT) :: PFPR -REAL(KIND=JPRB), DIMENSION(KLON,YSPP%N2D), INTENT(INOUT) :: PGP2DSPP -REAL(KIND=JPRB), DIMENSION(KLON,KLEV,1), INTENT(INOUT) :: PEZDIAG TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH TYPE(TLDDH), INTENT(IN) :: YDLDDH TYPE(TMDDH), INTENT(IN) :: YDMDDH +TYPE(TSPP_CONFIG_TYPE), INTENT(INOUT) :: YSPP_ICENU,YSPP_KGN_ACON,YSPP_KGN_SBGR END SUBROUTINE ARO_RAIN_ICE END INTERFACE diff --git a/src/arome/ext/aro_turb_mnh.h b/src/arome/ext/aro_turb_mnh.h index 87d261e866fd200d4e6b43fc953da7c76ac0b63b..bf20e5b9bdaaec12ecdce19101f7c1559dedc09b 100644 --- a/src/arome/ext/aro_turb_mnh.h +++ b/src/arome/ext/aro_turb_mnh.h @@ -69,7 +69,7 @@ REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV+2), INTENT(OUT) :: PDRTHLS_TURB REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV+2), INTENT(OUT) :: PDRRTS_TURB REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV,KSV), INTENT(OUT) :: PDRSVS_TURB REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV+2), INTENT(INOUT) :: PFLXZTHVMF -LOGICAL , INTENT(INOUT) :: OSUBG_COND +LOGICAL , INTENT(IN) :: OSUBG_COND REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV+2), INTENT(OUT) :: PDP REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV+2), INTENT(OUT) :: PTP REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV+2), INTENT(OUT) :: PTPMF diff --git a/src/arome/ext/aroini_micro.F90 b/src/arome/ext/aroini_micro.F90 new file mode 100644 index 0000000000000000000000000000000000000000..ddacff7d3a6b6e6555eb0dfb6a93d72b1b5076c6 --- /dev/null +++ b/src/arome/ext/aroini_micro.F90 @@ -0,0 +1,198 @@ +! ######spl +SUBROUTINE AROINI_MICRO(KULOUT,PTSTEP,LDWARM,CMICRO,KSPLITR,CCSEDIM,LDCRIAUTI,& + PCRIAUTI,PT0CRIAUTI,PCRIAUTC,PTSTEP_TS, CCSNOWRIMING, PMRSTEP, KMAXITER, & + LDFEEDBACKT, LDEVLIMIT, LDNULLWETG, LDWETGPOST, LDNULLWETH, LDWETHPOST, & + PFRACM90, LDCONVHG, CCSUBG_RC_RR_ACCR, CCSUBG_RR_EVAP, CCSUBG_PR_PDF, & + LDCRFLIMIT, CCFRAC_ICE_ADJUST, PSPLIT_MAXCFL,& + CCFRAC_ICE_SHALLOW_MF, LDSEDIM_AFTER,LDDEPOSC,PVDEPOSC, PFRMIN,& + LDDEPSG,PRDEPSRED,PRDEPGRED) + +USE PARKIND1, ONLY : JPRB +USE YOMHOOK , ONLY : LHOOK, DR_HOOK +!**** *INI_MICRO* - Initialize common meso_NH MODD_ used in microphysics for AROME + +! Purpose. +! -------- +! Initialize +! MODD_RAIN_ICE_DESCR, MODD_RAIN_ICE_PARAM and MODD_PARAM_ICE +! parameters used in AROME microphysics + +!** Interface. +! ---------- +! *CALL* *INI_MICRO (KULOUT,KSTEP,KSPLITR) + +! Explicit arguments : +! -------------------- +! KULOUT : Logical unit for the output +! PTSTEP : Time step +! KSPLITR : Number of small time step interation for rain sedimentation +! LDWARM : value assigned to LWARM + +! Implicit arguments : +! -------------------- +! + +! Method. +! ------- +! See documentation + +! Externals. +! ---------- + +! Reference. +! ---------- +! Documentation AROME + +! Author. +! ------- +! Y. Seity + +! Modifications. +! -------------- +! Original : 03-12-12 +! 05-08-25 Kovacic added LDWARM +! Jan 2015 S. Riette: LFEEDBACKT, LEVLIMIT, LNULLWETG, LWETGPOST, CSNOWRIMING, +! XFRACM90, NMRSITER, XMRSTEP, LSIMULSG, XTSTEP_TS +! LNULLWETH, LWETHPOST added +! Oct 2016 S. Riette: LDCRFLIMIT, CCFRAC_ICE_ADJUST +! and CCFRAC_ICE_SHALLOW_MF added +! Dec 2020 Y. Seity : Add Fog deposition term +! Jan 2020 C.Wittmann: Add LDDEPSG,PRDEPSRED,PRDEPGRED +! ------------------------------------------------------------------ + +USE MODD_RAIN_ICE_DESCR +USE MODD_RAIN_ICE_PARAM +USE MODD_PARAM_ICE +USE MODD_PARAM_C1R3 + +USE MODI_INI_RAIN_ICE +USE MODI_INI_TIWMX + +IMPLICIT NONE +! ----------------------------------------------------------------------- +! DUMMY INTEGER SCALARS +INTEGER, INTENT (IN) :: KULOUT +REAL, INTENT (IN) :: PTSTEP +LOGICAL, INTENT (IN) :: LDWARM +CHARACTER(4), INTENT (IN) :: CMICRO +CHARACTER(4), INTENT (IN) :: CCSEDIM +INTEGER, INTENT (OUT) :: KSPLITR +LOGICAL, INTENT (IN) :: LDCRIAUTI +REAL, INTENT (IN) :: PCRIAUTI +REAL, INTENT (IN) :: PT0CRIAUTI +REAL, INTENT (IN) :: PCRIAUTC +REAL, INTENT (IN) :: PTSTEP_TS +CHARACTER(4), INTENT (IN) :: CCSNOWRIMING +REAL, INTENT (IN) :: PMRSTEP +INTEGER, INTENT (IN) :: KMAXITER +LOGICAL, INTENT (IN) :: LDFEEDBACKT +LOGICAL, INTENT (IN) :: LDEVLIMIT +LOGICAL, INTENT (IN) :: LDNULLWETG +LOGICAL, INTENT (IN) :: LDWETGPOST +LOGICAL, INTENT (IN) :: LDNULLWETH +LOGICAL, INTENT (IN) :: LDWETHPOST +REAL, INTENT (IN) :: PFRACM90 +LOGICAL, INTENT (IN) :: LDCONVHG +CHARACTER(LEN=80), INTENT(IN) :: CCSUBG_RC_RR_ACCR +CHARACTER(LEN=80), INTENT(IN) :: CCSUBG_RR_EVAP +CHARACTER(LEN=80), INTENT(IN) :: CCSUBG_PR_PDF +LOGICAL, INTENT (IN) :: LDCRFLIMIT +CHARACTER(LEN=1), INTENT(IN) :: CCFRAC_ICE_ADJUST +REAL, INTENT (IN) :: PSPLIT_MAXCFL +CHARACTER(LEN=1), INTENT(IN) :: CCFRAC_ICE_SHALLOW_MF +LOGICAL, INTENT (IN) :: LDSEDIM_AFTER +LOGICAL, INTENT (IN) :: LDDEPOSC +REAL, INTENT(IN):: PVDEPOSC +REAL, OPTIONAL, INTENT (IN) :: PFRMIN(40) +LOGICAL, INTENT (IN) :: LDDEPSG +REAL, INTENT (IN) :: PRDEPSRED, PRDEPGRED + +!----------------------------------------------------------------------- +! LOCAL VARIABLES +REAL :: ZCRI0, ZTCRI0 +! ----------------------------------------------------------------------- +! 1. Set implicit default values for MODD_PARAM_ICE + +REAL(KIND=JPRB) :: ZHOOK_HANDLE +IF (LHOOK) CALL DR_HOOK('AROINI_MICRO',0,ZHOOK_HANDLE) +LWARM=LDWARM +CPRISTINE_ICE='PLAT' +CPRISTINE_ICE_C1R3='PLAT' +CHEVRIMED_ICE_C1R3='GRAU' +CSEDIM=CCSEDIM +CSUBG_RC_RR_ACCR=CCSUBG_RC_RR_ACCR +CSUBG_RR_EVAP=CCSUBG_RR_EVAP +CSUBG_PR_PDF=CCSUBG_PR_PDF +LFEEDBACKT=LDFEEDBACKT ! When .TRUE. feed back on temperature is taken into account +LEVLIMIT=LDEVLIMIT ! When .TRUE. water vapour pressure is limited by saturation +LNULLWETG=LDNULLWETG ! When .TRUE. graupel wet growth is activated with null rate (to allow water shedding) +LWETGPOST=LDWETGPOST ! When .TRUE. graupel wet growth is activated with positive temperature (to allow water shedding) +LNULLWETH=LDNULLWETH ! Same as LNULLWETG but for hail +LWETHPOST=LDWETHPOST ! Same as LWETGPOST but for hail +CSNOWRIMING=CCSNOWRIMING ! OLD or M90 for Murakami 1990 formulation +XFRACM90=PFRACM90 ! Fraction used for the Murakami 1990 formulation +NMAXITER=KMAXITER ! Maximum number of iterations for mixing ratio or time splitting +XMRSTEP=PMRSTEP ! maximum mixing ratio step for mixing ratio splitting +LCONVHG=LDCONVHG ! TRUE to allow the conversion from hail to graupel +LCRFLIMIT=LDCRFLIMIT !True to limit rain contact freezing to possible heat exchange +CFRAC_ICE_ADJUST=CCFRAC_ICE_ADJUST !Choice of solid/liquid partition in adjustements +CFRAC_ICE_SHALLOW_MF=CCFRAC_ICE_SHALLOW_MF !Choice of solid/liquid partition in shallow_mf +XSPLIT_MAXCFL=PSPLIT_MAXCFL +LSEDIM_AFTER=LDSEDIM_AFTER ! sedimentation done before or after microphysics +! +XTSTEP_TS=PTSTEP_TS ! Approximative time step for time-splitting (0 for no time-splitting) +! +! 2. Set implicit default values for MODD_RAIN_ICE_DESCR +! et MODD_RAIN_ICE_PARAM + +CALL INI_RAIN_ICE (KULOUT, PTSTEP, 20.,KSPLITR,CMICRO) +CALL INI_TIWMX + +IF(PRESENT(PFRMIN))THEN + XFRMIN = PFRMIN + WRITE(UNIT=KULOUT,FMT='('' UPDATED VALUES OF XFRMIN FROM NAMPARAR :'')') + WRITE(UNIT=KULOUT,FMT='('' XFRMIN = '',40E10.3)') XFRMIN + IF(XFRMIN(16) > 0.) THEN + CALL INI_SNOW(KULOUT) ! Recalculate snow parameters : XCCS = XFRMIN(16),XCXS = XFRMIN(17) + ENDIF +ENDIF + +!update values from namparar +LDEPOSC=LDDEPOSC +XVDEPOSC=PVDEPOSC +IF (LDCRIAUTI) THEN + + XCRIAUTI=PCRIAUTI + XCRIAUTC=PCRIAUTC + XT0CRIAUTI=PT0CRIAUTI + !second point to determine 10**(aT+b) law + ZTCRI0=-40.0 + ZCRI0=1.25E-6 + + XBCRIAUTI=-( LOG10(XCRIAUTI) - LOG10(ZCRI0)*PT0CRIAUTI/ZTCRI0 )& + *ZTCRI0/(XT0CRIAUTI-ZTCRI0) + XACRIAUTI=(LOG10(ZCRI0)-XBCRIAUTI)/ZTCRI0 + + ! 3. Write NSPLITR,updated CRIAUTI + + WRITE(UNIT=KULOUT,FMT='('' NSPLITR = '',I8.4)')KSPLITR + WRITE(UNIT=KULOUT,FMT='('' UPDATED VALUES FROM NAMPARAR :'')') + WRITE(UNIT=KULOUT,FMT='('' LCRIAUTI = '',L5)')LDCRIAUTI + WRITE(UNIT=KULOUT,FMT='('' XCRIAUTI = '',E13.6)')XCRIAUTI + WRITE(UNIT=KULOUT,FMT='('' XACRIAUTI = '',E13.6)')XACRIAUTI + WRITE(UNIT=KULOUT,FMT='('' XBCRIAUTI = '',E13.6)')XBCRIAUTI + WRITE(UNIT=KULOUT,FMT='('' XT0CRIAUTI = '',E13.6)')XT0CRIAUTI + WRITE(UNIT=KULOUT,FMT='('' XCRIAUTC = '',E13.6)')XCRIAUTC + WRITE(UNIT=KULOUT,FMT='('' XVDEPOSC = '',E13.6)')XVDEPOSC + WRITE(UNIT=KULOUT,FMT='('' LDEPOSC = '',L5)')LDEPOSC +ENDIF + +XRDEPSRED=PRDEPSRED +XRDEPGRED=PRDEPGRED + + +! ----------------------------------------------------------------------- + +IF (LHOOK) CALL DR_HOOK('AROINI_MICRO',1,ZHOOK_HANDLE) +RETURN +END SUBROUTINE AROINI_MICRO diff --git a/src/arome/ext/aroini_micro.h b/src/arome/ext/aroini_micro.h new file mode 100644 index 0000000000000000000000000000000000000000..bf6d1d18b8bc0296f7cae80c60b93d4b85cb9ea3 --- /dev/null +++ b/src/arome/ext/aroini_micro.h @@ -0,0 +1,46 @@ +INTERFACE +SUBROUTINE AROINI_MICRO(KULOUT,PTSTEP,LDWARM,CMICRO,KSPLITR,CCSEDIM,LDCRIAUTI,& + & PCRIAUTI,PT0CRIAUTI,PCRIAUTC,PTSTEP_TS,CCSNOWRIMING, PMRSTEP,KMAXITER,& + & LDFEEDBACKT, LDEVLIMIT, LDNULLWETG, LDWETGPOST, LDNULLWETH, LDWETHPOST, & + & PFRACM90, LDCONVHG, CCSUBG_RC_RR_ACCR, CCSUBG_RR_EVAP, CCSUBG_PR_PDF, & + & LDCRFLIMIT, CCFRAC_ICE_ADJUST, PSPLIT_MAXCFL,& + & CCFRAC_ICE_SHALLOW_MF, LDSEDIC_AFTER,LDDEPOSC, PVDEPOSC, PFRMIN,& + & LDDEPSG,PRDEPSRED,PRDEPGRED) +USE PARKIND1 ,ONLY : JPIM ,JPRB +INTEGER(KIND=JPIM), INTENT (IN) :: KULOUT +REAL(KIND=JPRB), INTENT (IN) :: PTSTEP +LOGICAL, INTENT (IN) :: LDWARM +CHARACTER (LEN=4), INTENT (IN) :: CMICRO +CHARACTER(4), INTENT (IN) :: CCSEDIM +INTEGER(KIND=JPIM), INTENT (OUT) :: KSPLITR +LOGICAL, INTENT (IN) :: LDCRIAUTI +REAL(KIND=JPRB), INTENT (IN) :: PCRIAUTI +REAL(KIND=JPRB), INTENT (IN) :: PT0CRIAUTI +REAL(KIND=JPRB), INTENT (IN) :: PCRIAUTC +REAL(KIND=JPRB), INTENT (IN) :: PTSTEP_TS +CHARACTER(4), INTENT (IN) :: CCSNOWRIMING +REAL(KIND=JPRB), INTENT (IN) :: PMRSTEP +INTEGER(KIND=JPIM), INTENT (IN) :: KMAXITER +LOGICAL, INTENT (IN) :: LDFEEDBACKT +LOGICAL, INTENT (IN) :: LDEVLIMIT +LOGICAL, INTENT (IN) :: LDNULLWETG +LOGICAL, INTENT (IN) :: LDWETGPOST +LOGICAL, INTENT (IN) :: LDNULLWETH +LOGICAL, INTENT (IN) :: LDWETHPOST +REAL(KIND=JPRB), INTENT (IN) :: PFRACM90 +LOGICAL, INTENT (IN) :: LDCONVHG +CHARACTER(LEN=80), INTENT(IN) :: CCSUBG_RC_RR_ACCR +CHARACTER(LEN=80), INTENT(IN) :: CCSUBG_RR_EVAP +CHARACTER(LEN=80), INTENT(IN) :: CCSUBG_PR_PDF +LOGICAL, INTENT (IN) :: LDCRFLIMIT +CHARACTER(LEN=1), INTENT(IN) :: CCFRAC_ICE_ADJUST +REAL(KIND=JPRB), INTENT (IN) :: PSPLIT_MAXCFL +CHARACTER(LEN=1), INTENT(IN) :: CCFRAC_ICE_SHALLOW_MF +LOGICAL, INTENT (IN) :: LDSEDIC_AFTER +LOGICAL, INTENT (IN) :: LDDEPOSC +REAL(KIND=JPRB), INTENT (IN) :: PVDEPOSC +REAL(KIND=JPRB), OPTIONAL, INTENT (IN) :: PFRMIN(40) +LOGICAL, INTENT (IN) :: LDDEPSG +REAL(KIND=JPRB), INTENT (IN) :: PRDEPSRED, PRDEPGRED +END SUBROUTINE AROINI_MICRO +END INTERFACE diff --git a/src/arome/ext/aroini_turb.F90 b/src/arome/ext/aroini_turb.F90 index 6a9edd9d97e6a27dc15a17f06d2be8d18a759f3f..c1ab16006739d7ac4bcb4a2c8d5dd1937d2ab356 100644 --- a/src/arome/ext/aroini_turb.F90 +++ b/src/arome/ext/aroini_turb.F90 @@ -1,5 +1,5 @@ ! ######spl -SUBROUTINE AROINI_TURB(PLINI,OHARATU) +SUBROUTINE AROINI_TURB(PLINI,OHARATU,OSTATNW) USE PARKIND1, ONLY : JPRB USE YOMHOOK , ONLY : LHOOK, DR_HOOK !**** *INI_TURB* - Initialize common meso_NH MODD_ used in Turbulence scheme @@ -42,7 +42,7 @@ USE YOMHOOK , ONLY : LHOOK, DR_HOOK ! ------------------------------------------------------------------ USE MODD_LES, ONLY : LLES, LLES_CALL -USE MODD_CTURB, ONLY : XLINI, LHARAT +USE MODD_CTURB, ONLY : XLINI, LHARAT,LSTATNW USE MODD_TURB_n, ONLY : CTURBLEN USE MODI_INI_CTURB @@ -54,6 +54,7 @@ IMPLICIT NONE ! REAL, INTENT(IN) :: PLINI ! minimum bl89 mixing length LOGICAL,INTENT(IN) :: OHARATU ! switch HARATU +LOGICAL,INTENT(IN) :: OSTATNW ! switch LSTATNW ! ! ------------------------------------------------------------------ @@ -66,6 +67,7 @@ CALL INI_CTURB ! 1bis. Modification of MODD_CTURB values XLINI=PLINI LHARAT=OHARATU +LSTATNW=OSTATNW ! 2. Set implicit default values for MODD_LES diff --git a/src/arome/ext/aroini_turb.h b/src/arome/ext/aroini_turb.h new file mode 100644 index 0000000000000000000000000000000000000000..eeb0a5ab3191974f4ce769e92768c6a5cbe97e63 --- /dev/null +++ b/src/arome/ext/aroini_turb.h @@ -0,0 +1,8 @@ +INTERFACE +SUBROUTINE AROINI_TURB(PLINI,OHARATU,OSTATNW) +USE PARKIND1 ,ONLY : JPRB +REAL(KIND=JPRB),INTENT(IN)::PLINI +LOGICAL, INTENT(IN) ::OHARATU +LOGICAL, INTENT(IN) ::OSTATNW +END SUBROUTINE AROINI_TURB +END INTERFACE diff --git a/src/arome/ext/dead_code/aro_icecld.F90 b/src/arome/ext/dead_code/aro_icecld.F90 deleted file mode 100644 index 95b508910b0fcdcd0e15280752a372b0295e12bd..0000000000000000000000000000000000000000 --- a/src/arome/ext/dead_code/aro_icecld.F90 +++ /dev/null @@ -1,217 +0,0 @@ -SUBROUTINE ARO_ICECLD & -! Input : - & ( PP,PZ,PDZ,PT,PR,PPBLH,PWCLD,XW2D, & -! Output : - & SIFRC,SSIO,SSIU,W2D,RSI) - - - USE PARKIND1, ONLY : JPRB - USE YOMHOOK , ONLY : LHOOK, DR_HOOK - USE MODD_CST,ONLY : XCPD,XCPV,XLVTT,XLSTT,XG,XRD,XTT,XMD,XMV,XEPSILO - IMPLICIT NONE -!----------------------------------------------------------------------- -! -! Purpose: -! calculate subgridscale fraction of supersaturation with respect to ice. -! Method: -! Assume a linear distubution of relative humidity and let the variability -! of humidity be a function of model level thickness. -! (Also a function of of humidity itself in the boundary layer) -! Interface: subroutine ARO_ICECLD is called -! ------------ from subroutine 'rain_ice' -! -! variable type content -! ======== ==== ======= -! -! INPUT arguments (arguments d'entree) -!---------------------------------------------- -! PP : pressure at model level (Pa) -! PZ : model level height (m) -! PDZ : model level thickness (m) -! PT : temperature (K) -! PR : model level humidity mixing ratio (kg/kg) -! PPBLH : plantetary layer height (m) (negative value means unknown) -! PWCLD : water and / mixed phase cloud cover (negative means unknown) -! XW2D : quota between ice crystal concentration between dry and wet -! part of a gridbox - -! OUTPUT arguments (arguments d'sortie) -!--------------------------------------------- -! SIFRC : subgridscale fraction with supersaturation with respect to ice. -! SSIO : Super-saturation with respect to ice in the -! supersaturated fraction -! SSIU : Sub-saturation with respect to ice in the sub-saturated -! fraction -! W2D : Factor used to get consistncy between the mean value of -! the gridbox and parts of the gridbox -! RSI : Saturation mixing ratio over ice - - - - -REAL, INTENT(IN) :: PP -REAL, INTENT(IN) :: PZ -REAL, INTENT(IN) :: PDZ -REAL, INTENT(IN) :: PT -REAL, INTENT(IN) :: PR -REAL, INTENT(IN) :: PPBLH -REAL, INTENT(IN) :: PWCLD -REAL, INTENT(IN) :: XW2D - -! OUTPUT arguments (arguments d'sortie) -!--------------------------------------------- -REAL, INTENT(OUT) :: SIFRC -REAL, INTENT(OUT) :: SSIO -REAL, INTENT(OUT) :: SSIU -REAL, INTENT(OUT) :: W2D -REAL, INTENT(OUT) :: RSI -! Working variables: - - REAL :: ZSIGMAX,ZSIGMAY,ZSIGMAZ,ZFICE,ZXDIST, ZYDIST,& - & ZRSW,ZRHW,ZRHIN,ZDRHDZ,ZZ,ZRHDIST ,ZRHLIM, & - & ZRHDIF,ZWCLD ,ZI2W,ZRHLIMICE,ZRHLIMINV,ZA,ZRHI - -! ================================================================== -! 1. Declarations. -! ================================================================== -! 1.1 MODULES USED -!----------------------------------------------------------------------- - REAL AROQSATMX - -REAL(KIND=JPRB) :: ZHOOK_HANDLE -IF (LHOOK) CALL DR_HOOK('ARO_ICECLD',0,ZHOOK_HANDLE) - -SIFRC = 0. -ZFICE = 0. -ZRSW= AROQSATMX(PP,PT,ZFICE) -ZRHW= PR/ZRSW -ZFICE=1. -RSI= AROQSATMX(PP,PT,ZFICE) -ZRHI= PR/RSI -ZI2W = ZRSW/RSI -SSIU=ZRHI -SSIO=SSIU -W2D = 1. - -IF(PT>XTT.OR. PR<=0.)THEN - SSIU=SSIU-1 - SSIO=SSIU - IF(PWCLD>=0.)SIFRC=PWCLD - IF (LHOOK) CALL DR_HOOK('ARO_ICECLD',1,ZHOOK_HANDLE) - RETURN -ENDIF - -ZSIGMAX=3.E-4 ! assumed rh variation in x axis direction -ZFICE=0. ! fraction of ice -ZSIGMAY=ZSIGMAX ! assumed rh variation in y axis direction -ZSIGMAZ=1.6E-2 ! t5 - -!ZXDIST=MAX(0.10,DTHETA)*110000. -!ZXDIST=DTHETA*110000. -ZXDIST=2500. - ! gridsize in x axis (m) Avoid too low - ! since the model has a tendency to become - ! drier at high horizontal resolution - ! due to stronger vertical velocities. -ZYDIST=ZXDIST ! gridsize in y axis (m) - - - - -ZRHIN = MAX(0.05, MIN(1.,PR/ZRSW)) - -ZDRHDZ=ZRHIN*XG /(PT*XRD)* & - & ( XEPSILO*XLVTT/(XCPD*PT) -1.) ! correct -! & ( XEPSILO*XLSTT/(XCPD*PT) -1.) ! incorrect but currently used -! more exact -! assumed rh variation in the z axis (rh/m) in the pbl . -! Also possible to just use -! zdrhdz=4.2e-4_jprb ! rh/m ! -ZZ=0. - - -IF(PPBLH < 0. )THEN ! Assume boundary layer height is not available - ZZ= MIN(1.,MAX(0.,PZ*0.001)) -ELSE - IF(PZ > 35. .AND. PZ > PPBLH)ZZ= 1. -ENDIF - -! 1.6e-2 rh/m means variations is of order 0.5 for a 1km dept. -! sigmaz=4e-2 ! EO 140 lev. - - -! Compute rh-variation is x,y,z direction as approxmately -! independent, exept for the z variation in the pbl, where rh is -! assumed to be fairly constantly increasing with height -if(ZXDIST*ZSIGMAX**2 + ZYDIST*ZSIGMAY**2 + & - & (1.-ZZ)* (PDZ* ZDRHDZ)**2 + ZZ*PDZ* ZSIGMAZ**2 < 0.)then -write(*,*)'in ARO_ICECLD: PDZ ZDRHDZ,expression=',PDZ, ZDRHDZ& -& ,ZXDIST*ZSIGMAX**2 + ZYDIST*ZSIGMAY**2 + & - & (1.-ZZ)* (PDZ* ZDRHDZ)**2 + ZZ*PDZ* ZSIGMAZ**2 -endif -ZRHDIST = SQRT( ZXDIST*ZSIGMAX**2 + ZYDIST*ZSIGMAY**2 + & - & (1.-ZZ)* (PDZ* ZDRHDZ)**2 + ZZ*PDZ* ZSIGMAZ**2) -! z-variation of rh in the pbl z-variation of rh outside the pbl -! Safety for very coarse vertical resolution: -IF(ZZ > 0.1) ZRHDIST = ZRHDIST/(1.+ZRHDIST) - -!!!! Note ZRHDIST is with respect to water ! !!!!!!!!!!!! - - -ZRHLIM = MAX(0.5, MIN(0.99,1. - 0.5*ZRHDIST)) - - -IF(PWCLD < 0.)THEN - ! Assume water/mixed-phase cloud cover from e.g. - ! statistical cloud scheme is not avialabe - ZRHDIF = (1. - ZRHW)/(1.0-ZRHLIM) - ZRHDIF = 1. - SQRT(MAX(0.,ZRHDIF)) - ZWCLD = MIN(1.,MAX(ZRHDIF,0.0)) -ELSE - ZWCLD = PWCLD -! possible to backwards compute a critical relative humity consitent with -! input cloudcover: -! IF(PWCLD < 0.99 .AND. PWCLD > 0.01) ZRHLIM= 1. - (1.-ZRHW)/(1.-PWCLD)**2 -ENDIF - -SIFRC = ZWCLD - -! relation rhlim with respect to water to that of ice: -!ZRHLIMICE = MAX(ZRHDMIN*ZI2W,1.+ ZI2W*( ZRHLIM - 1.)) -ZRHLIMICE = 1.+ ZI2W*( ZRHLIM - 1.) - -IF(ZRHLIM <= 0.999)THEN - - ! compute a 1/(1-rhlim) constistant with lstmp(i,k): - ZRHLIMINV = 1./(1. - ZRHLIMICE) - ZRHDIF = (ZRHI - ZRHLIMICE)*ZRHLIMINV - - IF(ZWCLD==0.)THEN - SIFRC = MIN(1.,0.5*MAX(0.,ZRHDIF)) - ELSE - ZA =1. - 1./ZI2W - SIFRC =MIN(1.,ZA*0.5/ (1. - ZRHLIM)) - SIFRC = MIN(1.,ZWCLD + SIFRC) - ENDIF -ENDIF - - - -IF(SIFRC > 0.01) THEN - SSIU = SIFRC + ZRHLIMICE*(1.-SIFRC) - SSIO = (ZRHI - (1.- SIFRC)*SSIU)/SIFRC -ELSE - SIFRC=0.! to aviod mismatch with output variables - ZA = MIN(0.,ZRHI-ZRHLIMICE) - SSIU = MAX(0.,SIFRC + ZRHLIMICE*(1.-SIFRC) + 2*ZA ) -ENDIF - - -! Transform from relative humidity to degree of saturation: -SSIU = SSIU - 1. -SSIO = SSIO - 1. - -IF (XW2D > 1.) W2D = 1./(1. - SIFRC + XW2D*SIFRC) - -IF (LHOOK) CALL DR_HOOK('ARO_ICECLD',1,ZHOOK_HANDLE) -END SUBROUTINE ARO_ICECLD diff --git a/src/arome/ext/dead_code/aro_tiwmx.F90 b/src/arome/ext/dead_code/aro_tiwmx.F90 deleted file mode 100644 index 55a335c8130d93134f2f22df6ade51195d9efd1d..0000000000000000000000000000000000000000 --- a/src/arome/ext/dead_code/aro_tiwmx.F90 +++ /dev/null @@ -1,123 +0,0 @@ -FUNCTION ARO_TIWMX(P,T,QR,FICE,QRSN,RS,EPS) - -! Purpose: (*) -! The fuction arotiwmx returns the wet bulb temperature, but also the -! corresponding saturation specific humidity as an output parameter. -! ------------------------------------------------------------------- -! Computation of wet bulb temperature. -! TIW is found iteratively. Note that Q is used instead of WV. -! Converges VERY quickly. EPS is the threshold value for -! TIW(n)-TIW(n-1) at wich the iteration is interupted. (n is -! iteration number).Modified in July 1988 by Stefan Gollvik -! Convereted to new fortran standard in Dec. 2006 by Karl-Ivar Ivarsson. -! Convereted to AROME in 2014 by Karl-Ivar Ivarsson. -! INTERFACE : the function is intended to be used everywhere. -! INPUT arguments (arguments d'entree) -! ----------------------------------------------------- -! P : pressure (Pa) -! T : temperature (K) -! QR : mixing ratio humidity (kg/Kg) -! FICE : fraction of ice (0 to 1) -! EPS : The value determens the accuracy of the output value. 0.1 -! : is suffient in most cases. Low value means high accuracy but -! : also high computational cost. - -! OUTPUT arguments (arguments d'sortie) -! ----------------------------------------------------- -! RS : saturation mixing ratio (fice determines if it is over ice or water) -! -! QRSN : saturation mixing ratio for the wet bulb temperature. -! (Kg/Kg) -! ( the function itself is the wet bulb temperature (K) ) - -! Work variables : -! ----------------------------------------------------- -! f : temporary variable , temperature (K) -! dfdt : temporary variable (K/K) -! t2 : temperature used in iteration (K) -! thigh : temperature ( t2 + EPS K ) -! tlow : temperature ( t2 - EPS K ) -! dt : temperature residual (K) -! dqsdt : approximative d(qsat)/d(T) in iteration (1/K) -! b : (latent heat)/(heat capacity for dry air) (K) -! iter : iteration number - -! 1. Declarations. -! ================================================================== -! 1.1 MODULES USED - USE MODD_CST,ONLY : XCPD,XCPV,XLVTT,XLSTT,XRD,XTT,XEPSILO, & - & XALPW,XBETAW,XGAMW,XALPI,XBETAI,XGAMI - USE PARKIND1, ONLY : JPRB - USE YOMHOOK , ONLY : LHOOK, DR_HOOK - IMPLICIT NONE - -! Function name : - REAL :: ARO_TIWMX - -! Input Arguments - REAL, INTENT(IN) :: P,T,QR,FICE,EPS - -! Output Arguments - REAL, INTENT(OUT) :: QRSN,RS - -! Work variables : - REAL :: F,DFDT,T2,DT,QSN,DQSDT,B - REAL :: ZB,ZG,ZES,ZDESDT - INTEGER :: ITER - REAL(KIND=JPRB) :: ZHOOK_HANDLE - IF (LHOOK) CALL DR_HOOK('ARO_TIWMX',0,ZHOOK_HANDLE) - - T2 = T -!! Q = QR !approximation - - B = ( XLVTT*(1.-FICE) + FICE*XLSTT )/XCPD - - ARO_TIWMX = T2 - DO ITER=1,10 - ZB = (XBETAI*FICE + XBETAW*(1.-FICE))/T2 - ZG = XGAMI*FICE + XGAMW*(1.-FICE) - ZES = EXP(XALPI*FICE + XALPW*(1.-FICE) - ZB - ZG*ALOG(T2)) - ZDESDT = ZES*(ZB - ZG)/T2 - IF(ZES >= P)THEN - QSN = 1. - DQSDT = 0. - ELSE - QSN = XEPSILO*ZES/(P-ZES) - DQSDT = QSN*ZDESDT*( 1.0/ZES + 1.0/(P-ZES) ) - ENDIF - IF ( ITER == 1 ) RS = QSN - F = T2 - T + B*(QSN - QR) - DFDT = 1. + B*DQSDT - DT = -F / DFDT - T2 = T2 + DT - IF(ABS(DT) <= EPS)THEN - ARO_TIWMX = T2 - QSN = MIN(1.,QSN+DT*DQSDT) - QRSN = QSN ! approximation - IF (LHOOK) CALL DR_HOOK('ARO_TIWMX',1,ZHOOK_HANDLE) - RETURN - ENDIF - ENDDO - IF (LHOOK) CALL DR_HOOK('ARO_TIWMX',1,ZHOOK_HANDLE) -END FUNCTION ARO_TIWMX -!!!!!!!!!!!! -FUNCTION AROQSATMX(P,T,FICE) - USE MODD_CST,ONLY : XALPW,XBETAW,XGAMW,XALPI,XBETAI,XGAMI,XTT,XEPSILO - IMPLICIT NONE - REAL ZES,ZQS,P,T,FICE,& - &AROQSATMX - - ZES = EXP(XALPI*FICE + XALPW*(1.-FICE) - & - & (XBETAI*FICE + XBETAW*(1.-FICE))/T - & - & (XGAMI*FICE + XGAMW*(1.-FICE))*ALOG(T)) - - IF(ZES >= P)THEN ! temp > boiling point, condensation not possible. - ! Then this function lacks physical meaning, - ! here set to one - ZQS=1. - ELSE -! ZQS=0.622*ZES/(P-0.378*ZES) !q - ZQS=XEPSILO*ZES/(P-ZES) !r - ENDIF - AROQSATMX=ZQS -END FUNCTION AROQSATMX diff --git a/src/arome/ext/dead_code/modi_aro_icecld.F90 b/src/arome/ext/dead_code/modi_aro_icecld.F90 deleted file mode 100644 index 10cf08aa03bfb9005e1f15c12e7b14a561c2637c..0000000000000000000000000000000000000000 --- a/src/arome/ext/dead_code/modi_aro_icecld.F90 +++ /dev/null @@ -1,24 +0,0 @@ -! ######spl - MODULE MODI_ARO_ICECLD -! #################### -! -INTERFACE -SUBROUTINE ARO_ICECLD & - & ( PP,PZ,PDZ,PT,PR,PPBLH,PWCLD,XW2D, & - & SIFRC,SSIO,SSIU,W2D,RSI) -REAL, INTENT(IN) :: PP -REAL, INTENT(IN) :: PZ -REAL, INTENT(IN) :: PDZ -REAL, INTENT(IN) :: PT -REAL, INTENT(IN) :: PR -REAL, INTENT(IN) :: PPBLH -REAL, INTENT(IN) :: PWCLD -REAL, INTENT(IN) :: XW2D -REAL, INTENT(OUT) :: SIFRC -REAL, INTENT(OUT) :: SSIO -REAL, INTENT(OUT) :: SSIU -REAL, INTENT(OUT) :: W2D -REAL, INTENT(OUT) :: RSI -END SUBROUTINE ARO_ICECLD -END INTERFACE -END MODULE MODI_ARO_ICECLD diff --git a/src/arome/ext/dead_code/modi_aro_tiwmx.F90 b/src/arome/ext/dead_code/modi_aro_tiwmx.F90 deleted file mode 100644 index 1f192046abd781192e7779a91094112ac26d0781..0000000000000000000000000000000000000000 --- a/src/arome/ext/dead_code/modi_aro_tiwmx.F90 +++ /dev/null @@ -1,11 +0,0 @@ -! ######spl - MODULE MODI_ARO_TIWMX -! #################### -! -INTERFACE -FUNCTION ARO_TIWMX(P,T,QR,FICE,QRSN,RS,EPS) - REAL, INTENT(IN) :: P,T,QR,FICE,EPS - REAL, INTENT(OUT) :: QRSN,RS -END FUNCTION ARO_TIWMX -END INTERFACE -END MODULE MODI_ARO_TIWMX diff --git a/src/arome/ext/namparar.nam.h b/src/arome/ext/namparar.nam.h index 6f667ceae148f1b5de544b4d20f371dfae738a82..c3c90b342dc2fe3583071ce87a702fd86540e0af 100644 --- a/src/arome/ext/namparar.nam.h +++ b/src/arome/ext/namparar.nam.h @@ -1,9 +1,10 @@ ! ------------------------------------------------------------------ NAMELIST/NAMPARAR/LOSUBG_COND,CSUBG_AUCV_RC,CSUBG_AUCV_RI,LOSIGMAS,NSWB_MNH,NPRINTFR,LSQUALL,& &NREFROI1,NREFROI2,VSQUALL,NPTP,LDIAGWMAX,NDIAGWMAX,CMICRO,CSEDIM,& - &LAROBU_ENABLE,CMF_UPDRAFT,CMF_CLOUD,LMIXUV,LLCRIT,LTOTPREC,LOSEDIC,& - &VSIGQSAT,XLINI,LOLSMC,LOTOWNC,LOCND2,RADGR,RADSN,LHARATU,& - &LGRSN,NPROMICRO,& + &LAROBU_ENABLE,CMF_UPDRAFT,CMF_CLOUD,LMIXUV,LLCRIT,LTOTPREC,& + <OTPRECL,LHGT_QS,LOSEDIC,& + &VSIGQSAT,XLINI,LOLSMC,LOTOWNC,LOCND2,LKOGAN,LMODICEDEP,& + &LICERAD,RFRMIN,RADGR,RADSN,LSTATNW,LHARATU,NPROMICRO,& &XALP_PERT,XABUO,XBENTR,XBDETR,XCMF,XENTR_MF,XCRAD_MF,XENTR_DRY,& &XDETR_DRY,XDETR_LUP,XKCF_MF,XKRC_MF,XTAUSIGMF,XPRES_UV,XFRAC_UP_MAX,& &XALPHA_MF,XSIGMA_MF,XA1,XB,XC,XBETA1,LTHETAS,& @@ -13,5 +14,6 @@ NAMELIST/NAMPARAR/LOSUBG_COND,CSUBG_AUCV_RC,CSUBG_AUCV_RI,LOSIGMAS,NSWB_MNH,NPRI &LFEEDBACKT,LEVLIMIT,LNULLWETG,LWETGPOST,LNULLWETH,LWETHPOST, & &XFRACM90, LCONVHG, LCRFLIMIT, & &CFRAC_ICE_ADJUST, XSPLIT_MAXCFL, CFRAC_ICE_SHALLOW_MF, LSEDIM_AFTER,& - &LDEPOSC, XVDEPOSC, CCONDENS, CLAMBDA3, CSUBG_MF_PDF + &LDEPOSC, XVDEPOSC, CCONDENS, CLAMBDA3, CSUBG_MF_PDF,& + &LDEPSG,RDEPSRED,RDEPGRED ! ------------------------------------------------------------------ diff --git a/src/arome/ext/spp_mod_type.F90 b/src/arome/ext/spp_mod_type.F90 new file mode 100644 index 0000000000000000000000000000000000000000..0758cb3d92373355cdb24825e74e5ac06249a10e --- /dev/null +++ b/src/arome/ext/spp_mod_type.F90 @@ -0,0 +1,122 @@ +MODULE SPP_MOD_TYPE + + USE MODE_MSG, ONLY: PRINT_MSG, NVERB_FATAL + + TYPE TSPP_CONFIG_TYPE + + INTEGER :: MP_SELF=-1 + + LOGICAL :: LPERT=.FALSE. + LOGICAL :: LPRINT=.TRUE. + LOGICAL :: LLNN_MEAN1=.FALSE. + LOGICAL :: LPERT_UNIFORM=.FALSE. + + REAL :: CMPERT + REAL :: UNIFORM_OFFSET + REAL :: SDEV + REAL :: CLIP(2) + REAL, POINTER :: PGP2DSPP(:) => NULL(), & + PTRNDIAG(:) => NULL() + + CHARACTER(LEN=20) :: CTAG = '#' + + END TYPE TSPP_CONFIG_TYPE + + TYPE ALL_SPP_VARS + + ! Gather all parameter holders for convenience + + TYPE(TSPP_CONFIG_TYPE) :: YSPP_RADGR,YSPP_RADSN, & + YSPP_CLDDPTH,YSPP_CLDDPTHDP, & + YSPP_RFAC_TWOC,YSPP_RZC_H,YSPP_RZL_INF, & + YSPP_PSIGQSAT,YSPP_ICE_CLD_WGT, & + YSPP_RSWINHF,YSPP_RLWINHF, & + YSPP_ICENU,YSPP_KGN_ACON,YSPP_KGN_SBGR + + END TYPE ALL_SPP_VARS + + CONTAINS + + ! + !----------------------------------------------------------------------- + ! + + SUBROUTINE CLEAR_SPP_TYPE(TSPP) + IMPLICIT NONE + TYPE(TSPP_CONFIG_TYPE), INTENT(INOUT) :: TSPP + END SUBROUTINE CLEAR_SPP_TYPE + + ! + !----------------------------------------------------------------------- + ! + + SUBROUTINE SET_SPP_TYPE(TSPP,CTAG,LLNN_MEAN1_SELF, & + LPERT_UNIFORM, & + CMPERT,UNIFORM_OFFSET,SDEV,CLIP,MP_SELF, & + KLON,KLEV,NEZDIAG, & + KSTA,KEND, & + PGP2DSPP,PEZDIAG) + IMPLICIT NONE + TYPE(TSPP_CONFIG_TYPE), INTENT(INOUT) :: TSPP + CHARACTER(LEN=*), INTENT(IN ) :: CTAG + LOGICAL, INTENT(IN ) :: LLNN_MEAN1_SELF,LPERT_UNIFORM + REAL , INTENT(IN ) :: CMPERT,UNIFORM_OFFSET,SDEV,CLIP(2) + INTEGER , INTENT(IN ) :: MP_SELF,KLON,KLEV,KSTA,KEND, & + NEZDIAG + REAL , TARGET, INTENT(IN ) :: PGP2DSPP(KLON,0) + REAL , TARGET, INTENT(INOUT) :: PEZDIAG(KLON,KLEV,NEZDIAG) + CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'SPP_MOD_TYPE', 'SET_SPP_TYPE is not implemented in PHYEX') + END SUBROUTINE SET_SPP_TYPE + + ! + !----------------------------------------------------------------------- + ! + + SUBROUTINE APPLY_SPP(TSPP, & + KLON,KSTA,KEND, & + PREFVAL,PFIELD) + IMPLICIT NONE + TYPE(TSPP_CONFIG_TYPE), INTENT(INOUT) :: TSPP + INTEGER , INTENT(IN ) :: KLON,KSTA,KEND + REAL , INTENT(IN ) :: PREFVAL + REAL , INTENT(INOUT) :: PFIELD(KLON) + CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'SPP_MOD_TYPE', 'APPLY_SPP is not implemented in PHYEX') + END SUBROUTINE APPLY_SPP + + ! + !----------------------------------------------------------------------- + ! + + SUBROUTINE DIA_SPP(TSPP,KSTA,KEND) + IMPLICIT NONE + TYPE(TSPP_CONFIG_TYPE), INTENT(IN) :: TSPP + INTEGER , INTENT(IN) :: KSTA,KEND + CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'SPP_MOD_TYPE', 'DIA_SPP is not implemented in PHYEX') + END SUBROUTINE DIA_SPP + + ! + !----------------------------------------------------------------------- + ! + SUBROUTINE SET_ALL_SPP(KLON,KLEV,NGFL_EZDIAG, & + KIDIA,KFDIA,PGP2DSPP,PEZDIAG,YSPP_ALL) + IMPLICIT NONE + INTEGER , INTENT(IN ) :: KLON,KLEV,NGFL_EZDIAG,KIDIA,KFDIA + REAL , TARGET, INTENT(IN ) :: PGP2DSPP(KLON,0) + REAL , INTENT(INOUT) :: PEZDIAG(KLON,KLEV,NGFL_EZDIAG) + TYPE(ALL_SPP_VARS), INTENT(INOUT) :: YSPP_ALL + CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'SPP_MOD_TYPE', 'SET_ALL_SPP is not implemented in PHYEX') + END SUBROUTINE SET_ALL_SPP + + ! + !----------------------------------------------------------------------- + ! + + SUBROUTINE CLEAR_ALL_SPP(YSPP_ALL) + IMPLICIT NONE + TYPE(ALL_SPP_VARS), INTENT(INOUT) :: YSPP_ALL + CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'SPP_MOD_TYPE', 'CLEAR_ALL_SPP is not implemented in PHYEX') + END SUBROUTINE CLEAR_ALL_SPP + +END MODULE SPP_MOD_TYPE + + diff --git a/src/arome/ext/suparar.F90 b/src/arome/ext/suparar.F90 index 286a2edca755160f19a3265b4244e68d07a770f4..08755f90e26f9e0d6b790c64a517940494521edc 100644 --- a/src/arome/ext/suparar.F90 +++ b/src/arome/ext/suparar.F90 @@ -1,14 +1,14 @@ SUBROUTINE SUPARAR(YDGEOMETRY,YGFL,YDML_PHY_MF,KULOUT) -!**** *SUPARAR* - Initialize common parameters used in physics for AROME +!**** *SUPARAR* - Initialize common parameters used in physics for AROME ! and SURFEX ! Purpose. ! -------- ! Initialize MODD_PARAMETERS, MODD_CST, MODD_CONF, -! MODD_RAIN_ICE_DESCR, MODD_RAIN_ICE_PARAM, MODD_BUDGET +! MODD_RAIN_ICE_DESCR, MODD_RAIN_ICE_PARAM, MODD_BUDGET ! parameters used in meso_NH Physics and aladin/meso_NH physics -! interface +! interface !** Interface. ! ---------- @@ -31,7 +31,7 @@ SUBROUTINE SUPARAR(YDGEOMETRY,YGFL,YDML_PHY_MF,KULOUT) ! Reference. ! ---------- -! Documentation AROME +! Documentation AROME ! Author. ! ------- @@ -53,7 +53,7 @@ SUBROUTINE SUPARAR(YDGEOMETRY,YGFL,YDML_PHY_MF,KULOUT) ! 2014-05-27: J.M. Piriou: default values of XCQVR and GQVPLIM. ! Nov. 2014: Y. Seity, add LFPREC3D for MOCAGE ! Nov 2016, S. Riette: New ICE3/ICE4 parameters -! R. El Khatib 24-Aug-2021 NPROMICRO specific cache-blocking factor for microphysics +! Jan 2021, C.Wittmann: add LDEPSG,RDEPSRED+RDEPGRED ! End Modifications !------------------------------------------------------------------------------- @@ -100,7 +100,6 @@ REAL(KIND=JPRB) , POINTER :: XDETR_DRY CHARACTER (LEN=4) :: CMF_UPDRAFT LOGICAL , POINTER :: LMIXUV LOGICAL , POINTER :: LLCRIT -LOGICAL , POINTER :: LTOTPREC INTEGER(KIND=JPIM) , POINTER :: NREFROI1 REAL(KIND=JPRB) , POINTER :: XTAUSIGMF LOGICAL , POINTER :: LCRIAUTI @@ -122,9 +121,16 @@ REAL(KIND=JPRB) , POINTER :: XPRES_UV CHARACTER (LEN=4) :: CSUBG_AUCV_RC CHARACTER (LEN=80) :: CSUBG_AUCV_RI REAL(KIND=JPRB) , POINTER :: XALP_PERT -LOGICAL , POINTER :: LOCND2 -LOGICAL , POINTER :: LHARATU -LOGICAL , POINTER :: LGRSN +LOGICAL , POINTER :: LOCND2 +LOGICAL , POINTER :: LSTATNW +LOGICAL , POINTER :: LHARATU +LOGICAL , POINTER :: LKOGAN +LOGICAL , POINTER :: LHGT_QS +LOGICAL , POINTER :: LMODICEDEP +LOGICAL , POINTER :: LICERAD +LOGICAL , POINTER :: LTOTPREC +LOGICAL , POINTER :: LTOTPRECL +REAL(KIND=JPRB), DIMENSION(:), POINTER :: RFRMIN INTEGER(KIND=JPIM) , POINTER :: NPRINTFR REAL(KIND=JPRB) , POINTER :: XCQVR CHARACTER(LEN=4) :: CMICRO @@ -172,13 +178,16 @@ REAL(KIND=JPRB) , POINTER :: XSPLIT_MAXCFL LOGICAL , POINTER :: LDEPOSC REAL(KIND=JPRB) , POINTER :: XVDEPOSC INTEGER(KIND=JPIM) , POINTER :: NPROMICRO +LOGICAL, POINTER :: LDEPSG +REAL(KIND=JPRB), POINTER :: RDEPSRED +REAL(KIND=JPRB), POINTER :: RDEPGRED #include "namparar.nam.h" #include "abor1.intfb.h" ! ------------------------------------------------------------------ IF (LHOOK) CALL DR_HOOK('SUPARAR',0,ZHOOK_HANDLE) -!Associate for variables not in the include namelists nor allocated in the routine +!Associate for variables not in the include namelists nor allocated in the routine ASSOCIATE(MACPRS=>YDML_PHY_MF%YRPARAR%MACPRS, MACPRR=>YDML_PHY_MF%YRPARAR%MACPRR, & & MINPRR=>YDML_PHY_MF%YRPARAR%MINPRR, MINPRS=>YDML_PHY_MF%YRPARAR%MINPRS, & @@ -223,7 +232,13 @@ LQVTOP => YDPARAR%LQVTOP XBETA1 => YDPARAR%XBETA1 NPTP => YDPARAR%NPTP LOCND2 => YDPARAR%LOCND2 -LGRSN => YDPARAR%LGRSN +LKOGAN => YDPARAR%LKOGAN +LHGT_QS => YDPARAR%LHGT_QS +LMODICEDEP => YDPARAR%LMODICEDEP +LICERAD => YDPARAR%LICERAD +LTOTPREC => YDPARAR%LTOTPREC +LTOTPRECL => YDPARAR%LTOTPRECL +RFRMIN => YDPARAR%RFRMIN XCQVR => YDPARAR%XCQVR XFRAC_UP_MAX => YDPARAR%XFRAC_UP_MAX XB => YDPARAR%XB @@ -245,7 +260,6 @@ LOSIGMAS => YDPARAR%LOSIGMAS GQVTOP => YDPARAR%GQVTOP LMIXUV => YDPARAR%LMIXUV LLCRIT => YDPARAR%LLCRIT -LTOTPREC => YDPARAR%LTOTPREC XALPHA_MF => YDPARAR%XALPHA_MF XPRES_UV => YDPARAR%XPRES_UV LOLSMC => YDPARAR%LOLSMC @@ -253,6 +267,7 @@ NDIAGWMAX => YDPARAR%NDIAGWMAX LOSUBG_COND => YDPARAR%LOSUBG_COND RADGR => YDPARAR%RADGR LFPREC3D => YDPARAR%LFPREC3D +LSTATNW => YDPARAR%LSTATNW LHARATU => YDPARAR%LHARATU XTSTEP_TS => YDPARAR%XTSTEP_TS XMRSTEP => YDPARAR%XMRSTEP @@ -271,6 +286,9 @@ XSPLIT_MAXCFL => YDPARAR%XSPLIT_MAXCFL LDEPOSC => YDPARAR%LDEPOSC XVDEPOSC => YDPARAR%XVDEPOSC NPROMICRO => YDPARAR%NPROMICRO +LDEPSG => YDPARAR%LDEPSG +RDEPSRED => YDPARAR%RDEPSRED +RDEPGRED => YDPARAR%RDEPGRED ! ------------------------------------------------------------------ @@ -313,8 +331,8 @@ CLAMBDA3='CB' ! for squall line academic case LSQUALL=.FALSE. NREFROI1=1 -NREFROI2=1 -VSQUALL=0._JPRB +NREFROI2=1 +VSQUALL=0._JPRB NPTP=1 LDIAGWMAX=.FALSE. NDIAGWMAX=1 @@ -323,10 +341,31 @@ LOLSMC=.FALSE. LOTOWNC=.FALSE. LOCND2=.FALSE. -LGRSN=.FALSE. +LKOGAN=.FALSE. +LHGT_QS=.FALSE. +LMODICEDEP=.FALSE. +LICERAD=.FALSE. RADGR=0._JPRB RADSN=0._JPRB +! Tuning and modication of graupeln etc: +RFRMIN(1:6)=0. +RFRMIN(7:9)=1. +RFRMIN(10) =10. +RFRMIN(11) =1. +RFRMIN(12) =0. +RFRMIN(13) =1.0E-15 +RFRMIN(14) =120. +RFRMIN(15) =1.0E-4 +RFRMIN(16:20)=0. +RFRMIN(21:22)=1. +RFRMIN(23)=0.5 +RFRMIN(24)=1.5 +RFRMIN(25)=30. +RFRMIN(26:38)=0. +RFRMIN(39)=0.25 +RFRMIN(40)=0.15 + ! default option for Mass Flux Scheme (Pergaud et al) CMF_UPDRAFT = 'EDKF' ! DIRE ou STAT @@ -336,25 +375,26 @@ LMIXUV= .TRUE. !default option in EDMFm mass-flux scheme: LLCRIT=.FALSE. LTOTPREC=.FALSE. +LTOTPRECL=.FALSE. ! Default for Mass Flux Scheme tuning variables XALP_PERT = 0.3_JPRB ! coefficient for the perturbation of - ! theta_l and r_t at the first level of + ! theta_l and r_t at the first level of ! the updraft -XABUO = 1._JPRB ! coefficient of the buoyancy term in the w_up equation +XABUO = 1._JPRB ! coefficient of the buoyancy term in the w_up equation XBENTR = 1._JPRB ! coefficient of the entrainment term in the w_up equation XBDETR = 0._JPRB ! coefficient of the detrainment term in the w_up equation -XCMF = 0.065_JPRB! coefficient for the mass flux at the first level - ! of the updraft (closure) +XCMF = 0.065_JPRB! coefficient for the mass flux at the first level + ! of the updraft (closure) XENTR_MF = 0.035_JPRB! entrainment constant (m/Pa) = 0.2 (m) XCRAD_MF = 50._JPRB ! cloud radius in cloudy part -XENTR_DRY = 0.55_JPRB ! coefficient for entrainment in dry part +XENTR_DRY = 0.55_JPRB ! coefficient for entrainment in dry part XDETR_DRY = 10._JPRB ! coefficient for detrainment in dry part XDETR_LUP = 1._JPRB ! coefficient for detrainment in dry part XKCF_MF = 2.75_JPRB ! coefficient for cloud fraction XKRC_MF = 1._JPRB ! coefficient for convective rc -XTAUSIGMF = 600._JPRB +XTAUSIGMF = 600._JPRB XPRES_UV = 0.5_JPRB ! coefficient for pressure term in wind mixing XFRAC_UP_MAX= 0.33_JPRB ! maximum Updraft fraction XALPHA_MF = 2._JPRB ! coefficient for updraft fraction in STA2 cloud scheme @@ -405,8 +445,14 @@ LSEDIM_AFTER=.FALSE. ! Sedimentation done after microphysics XSPLIT_MAXCFL=0.8 LDEPOSC=.FALSE. ! water deposition on vegetation XVDEPOSC=0.02 ! deposition speed (2 cm.s-1) +LDEPSG=.FALSE. ! activate tuning of deposition of snow/graupel (RDEPSRED,RDEPGRED) +RDEPSRED=1.0 +RDEPGRED=1.0 ! +! set up cloud scheme +LSTATNW=.FALSE. + ! for turbulence scheme XLINI=0._JPRB ! 0.1 in Meso-NH LHARATU=.FALSE. @@ -425,6 +471,12 @@ IF (.NOT.LOCND2) THEN RADGR=0._JPRB RADSN=0._JPRB ENDIF +IF (LHARATU .AND. CMF_UPDRAFT == 'EDKF') THEN + CALL ABOR1('Combination LHARATU and EDKF not valid!') +ENDIF +IF (.NOT. LHARATU .AND. LSTATNW ) THEN + CALL ABOR1('LSTATNW only tested in combination with HARATU and EDMFm!') +ENDIF ! Work-around for PGI compiler bug YDPARAR%CMF_UPDRAFT=CMF_UPDRAFT @@ -452,7 +504,7 @@ ENDIF IF ( CMICRO /= 'ICE3' .AND. CMICRO /= 'ICE4' .AND. & & CMICRO /= 'LIMA' .AND. CMICRO /= 'OLD3' .AND. CMICRO /= 'OLD4') THEN CALL ABOR1("AROME Microphysics must be ICE3, ICE4, LIMA, OLD3 or OLD4") -ENDIF +ENDIF IF ( (CMICRO == 'ICE4' .OR. CMICRO == 'OLD4') .AND. .NOT.YH%LACTIVE ) THEN CALL ABOR1("ICE4 and OLD4 microphysics requires activation of YH in NAMGFL") ENDIF @@ -512,6 +564,9 @@ ENDIF IF (LFPREC3D.AND.YGFL%NGFL_EZDIAG < 4) THEN CALL ABOR1 ("With LFPREC3D NGFL_EZDIAG should be >= 4 !") ENDIF +IF (LOCND2 .AND. LDEPSG) THEN + CALL ABOR1 ("LDEPSG must not be activated together with LOCND2") +ENDIF ! 3.Initialisation du buffer contenant les variables pseudo-historiques @@ -562,7 +617,7 @@ IF (LMPA) THEN ENDIF ELSE IF (LMSE) THEN - NGPAR=8 + NGPAR=9 MRAIN=1 MSNOW=2 MVTS=3 @@ -583,7 +638,7 @@ ELSE ENDIF ENDIF -! allocation du buffer +! allocation du buffer IF (NGPAR /= 0) THEN ALLOCATE (GPARBUF (YDGEOMETRY%YRDIM%NPROMA, NGPAR, YDGEOMETRY%YRDIM%NGPBLKS)) ENDIF @@ -600,11 +655,12 @@ WRITE(UNIT=KULOUT,FMT='('' CSUBG_RC_RR_ACCR = '',A80,& WRITE(UNIT=KULOUT,FMT='('' CLAMBDA3 = '',A80)')& & CLAMBDA3 WRITE(UNIT=KULOUT,FMT='('' NREFROI1 = '',I3,& - & '' NREFROI2 = '',I3,'' VSQUALL = '',E13.6)')NREFROI1, NREFROI2,VSQUALL + & '' NREFROI2 = '',I3,'' VSQUALL = '',E13.6)')NREFROI1, NREFROI2,VSQUALL WRITE(UNIT=KULOUT,FMT='('' NGPAR = '',I3,& & '' MINPRR = '',I3,'' MACPRR = '',I3,'' MINPRS = '',I3,& & '' MACPRS = '',I3,'' MINPRG = '',I3,'' MACPRG = '',I3)')& & NGPAR,MINPRR,MACPRR,MINPRS,MACPRS,MINPRG,MACPRG +WRITE(UNIT=KULOUT,FMT='('' MCD = '',I3,'' MRAIN = '',I3,'' MSNOW = '',I3)') MCD, MRAIN, MSNOW WRITE(UNIT=KULOUT,FMT='('' MSWDIR = '',I3,& & '' MSWDIF = '',I3)')MSWDIR,MSWDIF WRITE(UNIT=KULOUT,FMT='('' MALBDIR = '',I3,& @@ -615,7 +671,7 @@ WRITE(UNIT=KULOUT,FMT='('' NPRINTFR = '',I3, '' NPTP = '',I3)')& & NPRINTFR,NPTP WRITE(UNIT=KULOUT,FMT='('' LDIAGWMAX = '',L5,& & '' NDIAGWMAX = '',I3,'' NDTCHEM = '',I3)')& - & LDIAGWMAX, NDIAGWMAX,NDTCHEM + & LDIAGWMAX, NDIAGWMAX,NDTCHEM WRITE(UNIT=KULOUT,FMT='('' NRR = '',I3,& & '' NRRL = '',I3,'' NRRI = '',I3)')& & NRR, NRRL, NRRI @@ -628,7 +684,7 @@ WRITE(UNIT=KULOUT,FMT='(& WRITE(UNIT=KULOUT,FMT='('' CMF_UPDRAFT = '',A4,& & '' CMF_CLOUD = '',A4)')& & CMF_UPDRAFT,CMF_CLOUD - + WRITE(UNIT=KULOUT,FMT='(''Mass Flux Scheme tuning variables :'')') WRITE(UNIT=KULOUT,FMT='(''XALP_PERT = '',F6.3,'' XABUO = '',F6.3,'' XBENTR = '',F6.3,& &'' XBDETR = '',F6.3,'' XCMF = '',F6.3,'' XENTR_MF = '',F6.3,'' XCRAD_MF = '',F6.3,& @@ -658,13 +714,23 @@ WRITE(UNIT=KULOUT,FMT='('' CFRAC_ICE_ADJUST = '',A1,& WRITE(UNIT=KULOUT,FMT='('' XSPLIT_MAXCFL = '',E13.6)') XSPLIT_MAXCFL WRITE(UNIT=KULOUT,FMT='('' LSEDIM_AFTER = '',L5)') LSEDIM_AFTER WRITE(UNIT=KULOUT,FMT=*) 'XCQVR=',XCQVR,' GQVPLIM=',GQVPLIM,' GQVTOP=',GQVTOP,' LQVTOP=',LQVTOP +WRITE(UNIT=KULOUT,FMT='('' LLCRIT = '',L5)') LLCRIT +WRITE(UNIT=KULOUT,FMT='('' LTOTPREC = '',L5)') LTOTPREC +WRITE(UNIT=KULOUT,FMT='('' LTOTPRECL = '',L5)') LTOTPRECL WRITE(UNIT=KULOUT,FMT='('' LOCND2 = '',L5)') LOCND2 -WRITE(UNIT=KULOUT,FMT='('' LGRSN = '',L5)') LGRSN -WRITE(UNIT=KULOUT,FMT='('' RADSN = '',E13.6)') RADSN -WRITE(UNIT=KULOUT,FMT='('' RADGR = '',E13.6)') RADGR +WRITE(UNIT=KULOUT,FMT='('' LKOGAN = '',L5)') LKOGAN +WRITE(UNIT=KULOUT,FMT='('' LHGT_QS = '',L5)') LHGT_QS +WRITE(UNIT=KULOUT,FMT='('' LSTATNW = '',L5)') LSTATNW +WRITE(UNIT=KULOUT,FMT='('' LMODICEDEP = '',L5)') LMODICEDEP +WRITE(UNIT=KULOUT,FMT='('' RADSN = '',f6.2)') RADSN +WRITE(UNIT=KULOUT,FMT='('' RADGR = '',f6.2)') RADGR +WRITE(UNIT=KULOUT,FMT='('' RFRMIN = '',40E10.3)') RFRMIN WRITE(UNIT=KULOUT,FMT='('' LHARATU = '',L2)') LHARATU +WRITE(UNIT=KULOUT,FMT='('' LICERAD = '',L5)') LICERAD WRITE(UNIT=KULOUT,FMT='('' LDEPOSC = '',L5)') LDEPOSC WRITE(UNIT=KULOUT,FMT='('' XVDEPOSC = '',E13.6)') XVDEPOSC +WRITE(UNIT=KULOUT,FMT='('' LDEPSG = '',L2,'' RDEPSRED = '',F6.2,'' RDEPGRED = '',F6.2& +&)') LDEPSG,RDEPSRED,RDEPGRED WRITE(UNIT=KULOUT,FMT='('' NPROMICRO = '',I4)') NPROMICRO @@ -672,3 +738,4 @@ WRITE(UNIT=KULOUT,FMT='('' NPROMICRO = '',I4)') NPROMICRO END ASSOCIATE IF (LHOOK) CALL DR_HOOK('SUPARAR',1,ZHOOK_HANDLE) END SUBROUTINE SUPARAR + diff --git a/src/arome/ext/suphmpa.F90 b/src/arome/ext/suphmpa.F90 index c5ce5a44ed1c82a1a307712563733980545a4ea9..33f631f7fe6d6abf8fd2d03998f74affedd04be0 100644 --- a/src/arome/ext/suphmpa.F90 +++ b/src/arome/ext/suphmpa.F90 @@ -105,12 +105,13 @@ ASSOCIATE(XDETR_LUP=>YDPARAR%XDETR_LUP, XCMF=>YDPARAR%XCMF, & & XKRC_MF=>YDPARAR%XKRC_MF, XALPHA_MF=>YDPARAR%XALPHA_MF, & & XPRES_UV=>YDPARAR%XPRES_UV, NRR=>YDPARAR%NRR, XCRAD_MF=>YDPARAR%XCRAD_MF, & & CMF_UPDRAFT=>YDPARAR%CMF_UPDRAFT, LHARATU=>YDPARAR%LHARATU, & + & LSTATNW=>YDPARAR%LSTATNW, & & LMPA=>YDARPHY%LMPA, LKFBCONV=>YDARPHY%LKFBCONV, LMFSHAL=>YDARPHY%LMFSHAL, & & LGRADHPHY=>YDARPHY%LGRADHPHY, & & NPROMA=>YDDIM%NPROMA, & & LEDKF=>YDPHY%LEDKF, LCVPPKF=>YDPHY%LCVPPKF, & & NFLEVG=>YDDIMV%NFLEVG, & - & LSDDH=>YDLDDH%LSDDH, TSTEP=>YDRIP%TSTEP, & + & LSDDH=>YDLDDH%LSDDH, TSTEP=>YDRIP%TSTEP, RFRMIN=>YDPARAR%RFRMIN, & & XTSTEP_TS=>YDPARAR%XTSTEP_TS, CSNOWRIMING=>YDPARAR%CSNOWRIMING, XMRSTEP=>YDPARAR%XMRSTEP,& & NMAXITER_MICRO=>YDPARAR%NMAXITER_MICRO, LFEEDBACKT=>YDPARAR%LFEEDBACKT, LEVLIMIT=>YDPARAR%LEVLIMIT, & & LNULLWETG=>YDPARAR%LNULLWETG, LWETGPOST=>YDPARAR%LWETGPOST, LNULLWETH=>YDPARAR%LNULLWETH,& @@ -119,7 +120,8 @@ ASSOCIATE(XDETR_LUP=>YDPARAR%XDETR_LUP, XCMF=>YDPARAR%XCMF, & & CSUBG_PR_PDF=>YDPARAR%CSUBG_PR_PDF, LCRFLIMIT=>YDPARAR%LCRFLIMIT, & & CFRAC_ICE_ADJUST=>YDPARAR%CFRAC_ICE_ADJUST, XSPLIT_MAXCFL=>YDPARAR%XSPLIT_MAXCFL,& & CFRAC_ICE_SHALLOW_MF=>YDPARAR%CFRAC_ICE_SHALLOW_MF, LSEDIM_AFTER=>YDPARAR%LSEDIM_AFTER,& - & LDEPOSC=>YDPARAR%LDEPOSC, XVDEPOSC=>YDPARAR%XVDEPOSC) + & LDEPOSC=>YDPARAR%LDEPOSC, XVDEPOSC=>YDPARAR%XVDEPOSC,& + & LDEPSG=>YDPARAR%LDEPSG,RDEPSRED=>YDPARAR%RDEPSRED,RDEPGRED=>YDPARAR%RDEPGRED) ! ------------------------------------------------------------------ ! ------------------------------------------------------------------ ! 1. Initialisation of MesoNH constantes @@ -140,16 +142,18 @@ IF (CMICRO == 'LIMA') THEN & NMAXITER_MICRO, LFEEDBACKT, LEVLIMIT, LNULLWETG, LWETGPOST, LNULLWETH,& & LWETHPOST, XFRACM90, LCONVHG, CSUBG_RC_RR_ACCR, CSUBG_RR_EVAP, CSUBG_PR_PDF,& & LCRFLIMIT, CFRAC_ICE_ADJUST, XSPLIT_MAXCFL,& - & CFRAC_ICE_SHALLOW_MF, LSEDIM_AFTER, LDEPOSC, XVDEPOSC) + & CFRAC_ICE_SHALLOW_MF, LSEDIM_AFTER, LDEPOSC, XVDEPOSC, RFRMIN,& + & LDEPSG,RDEPSRED,RDEPGRED) CALL AROINI_MICRO_LIMA (KULOUT,4,ZTSTEP,LOWARM,CMICRO,NSPLITR,NSPLITG,CSEDIM,LCRIAUTI,& & RCRIAUTI,RT0CRIAUTI,RCRIAUTC) ELSE CALL AROINI_MICRO (KULOUT,ZTSTEP,LOWARM,CMICRO,NSPLITR,CSEDIM,LCRIAUTI,& - & RCRIAUTI,RT0CRIAUTI,RCRIAUTC,XTSTEP_TS, CSNOWRIMING, XMRSTEP,& + & RCRIAUTI,RT0CRIAUTI,RCRIAUTC, XTSTEP_TS, CSNOWRIMING, XMRSTEP,& & NMAXITER_MICRO, LFEEDBACKT, LEVLIMIT, LNULLWETG, LWETGPOST, LNULLWETH,& & LWETHPOST, XFRACM90, LCONVHG, CSUBG_RC_RR_ACCR, CSUBG_RR_EVAP, CSUBG_PR_PDF,& & LCRFLIMIT, CFRAC_ICE_ADJUST, XSPLIT_MAXCFL,& - & CFRAC_ICE_SHALLOW_MF, LSEDIM_AFTER, LDEPOSC, XVDEPOSC) + & CFRAC_ICE_SHALLOW_MF, LSEDIM_AFTER, LDEPOSC, XVDEPOSC, RFRMIN,& + & LDEPSG,RDEPSRED,RDEPGRED) ENDIF ! 3. Initialisation of Budget @@ -160,7 +164,7 @@ CALL AROINI_BUDGET(LAROBU_ENABLE) ! 4. Initialisation of Turbulence scheme -CALL AROINI_TURB(XLINI,LHARATU) +CALL AROINI_TURB(XLINI,LHARATU,LSTATNW) ! 5. Initialisation of Mass Flux Shallow convection scheme diff --git a/src/arome/ext/vdfhghtnhl.F90 b/src/arome/ext/vdfhghtnhl.F90 new file mode 100644 index 0000000000000000000000000000000000000000..169b233f5a1709606bd327726123b2b85fc2fae4 --- /dev/null +++ b/src/arome/ext/vdfhghtnhl.F90 @@ -0,0 +1,1377 @@ +!OPTIONS XOPT(HSFUN) +SUBROUTINE VDFHGHTNHL (YDVDF,YDEPHLI,YDECUMF,YDEPHY,YDPARAR,KIDIA , KFDIA , KLON , KLEV , KDRAFT, PTMST, KSTEP, & + & PUM1 , PVM1 , PTM1 , PQM1 , PLM1 , PIM1 , PAM1,& + & PAPHM1 , PAPM1 , PGEOM1 , PGEOH , & + & PKMFL , PKHFL , PKQFL , PMFLX , PEXNF , PEXNH, & +! DIAGNOSTIC OUTPUT + + & PUUH , PVUH , PSLGUH , PQTUH , PTHTVUH, PFRACB, & + & PZPTOP , KPTOP , PZPLCL , KPLCL , KPLZB , & + & PRICUI , & + & PFPLVL , PFPLVN , PCLFR, & + & PBIR , LDNODECP, LDRUNDRY, KPBLTYPE, & + & YSPP_CLDDPTH,YSPP_CLDDPTHDP, & + & YSPP_RFAC_TWOC,YSPP_RZC_H,YSPP_RZL_INF, & + & ZLENGTH_M, ZLENGTH_H, PTKE) + +! ------------------------------------------------------------------ + +!** * VDFHGHTNHL* - DETERMINES THE PBL-HEIGHT AND STRONG UPDRAFT FIELDS +! USING A ENTRAINING PARCEL ASCENT METHOD. + +! A.P. SIEBESMA 30/06/1999 Original (dry) +! M. Ko"hler 3/12/2004 Moist Version +! Roel Neggers 12/04/2005 Multiple updraft extension +! Wim de Rooy/Geert Lenderink 13/06/2008 and 21/09/2010 Updates to combine TKE turbulence +! with dual updraft EDMF. Lateral mixing according +! to de Rooy & Siebesma MWR 2008 and QJRMS 2010 +! Wim de Rooy July /2015 Implementation LHARATU in Harmonie +! Lisa Bengtsson Feb /2017 Introduce LTOTPREC option +! Karl-Ivar Ivarsson Feb /2018 Code optimation +! R. El Khatib 30-Apr-2019 bugfix +! Wim de Rooy June / 2019 Modifications among which energy +! energy cascade term +! R. El Khatib 27-Aug-2019 Cleaning +! Karl-Ivar Ivarsson April /2020 Introduce LTOTPRECL option +! U. Andrae Dec 2020 Introduce SPP for HARMONIE-AROME +! R. El Khatib 08-Jul-2022 Contribution to the encapsulation of YOMCST and YOETHF + + +! PURPOSE +! ------- + +! DETERMINE PBL HEIGHT AND UPDRAFT FIELDS + +! INTERFACE +! --------- + +! * VDFHGHTNHL* IS CALLED BY *VDFHGHTHL* + +! PARAMETER DESCRIPTION UNITS +! --------- ----------- ----- +! INPUT PARAMETERS (INTEGER): + +! *KIDIA* START POINT +! *KFDIA* END POINT +! *KLEV* NUMBER OF LEVELS +! *KLON* NUMBER OF GRID POINTS PER PACKET +! *KDRAFT* NUMBER OF EXPLICITLY MODELED DRAFTS - CURRENTLY 3: +! 1: test parcel +! 2: rising dry thermals which stop at cloud base or inversion +! 3: rising dry thermals which become cloudy +! (4: downdrafts .. to be done?) + +! INPUT PARAMETERS (REAL): + +! *PTMST* DOUBLE TIME STEP (SINGLE AT 1TH STEP) S +! *PUM1* X-VELOCITY COMPONENT AT T-1 M/S +! *PVM1* Y-VELOCITY COMPONENT AT T-1 M/S +! *PTM1* TEMPERATURE AT T-1 K +! *PQM1* SPECIFIC HUMUDITY AT T-1 KG/KG +! *PLM1* SPECIFIC CLOUD LIQUID WATER AT T-1 KG/KG +! *PIM1* SPECIFIC CLOUD ICE AT T-1 KG/KG +! *PAM1* CLOUD FRACTION AT T-1 KG/KG +! *PAPHM1* PRESSURE AT HALF LEVEL AT T-1 PA +! *PAPM1* PRESSURE AT FULL LEVEL AT T-1 PA +! *PGEOM1* GEOPOTENTIAL AT T-1 M2/S2 +! *PGEOH* GEOPOTENTIAL AT HALF LEVEL M2/S2 +! *PKMFL* SURFACE KINEMATIC MOMENTUM FLUX M2/S2 +! *PKHFL* SURFACE KINEMATIC HEAT FLUX K*M/S +! *PKQFL* SURFACE KINEMATIC MOISTURE FLUX M/S +! *PBIR* BUOYANCY-FLUX INTEGRAL RATIO (-N/P) +! USED FOR DECOUPLING CRITERIA +! *PEXNF* ENXNER FUNCTION FOR FULL PRESSURE LEVELS (FOR OPTIMATION OF CODE) +! *PEXNH* ENXNER FUNCTION FOR HALF PRESSURE LEVELS (FOR OPTIMATION OF CODE), +! = (P / PREF) ** R/CP + +! INPUT PARAMETERS (LOGICAL): + +! *LDNODECP* TRUE: NEVER DECOUPLE +! FALSE: MAYBE DECOUPLE +! *LDRUNDRY* TRUE: RUN PARCEL WITHOUT CONDENSATION +! FALSE: RUN PARCEL WITH CONDENSATION + +! OUTPUT PARAMETERS (REAL): + +! *PFPLVL* PBL PRECIPITATION FLUX AS RAIN KG/(M**2*S) +! *PFPLVN* PBL PRECIPITATION FLUX AS SNOW KG/(M**2*S) + +! *PUUH* UPDRAFT X-MOMENTUM +! *PVUH* UPDRAFT Y-MOMENTUM +! *PSLGUH* UPDRAFT GENERALIZED LIQUID STATIC ENERGY (SLG) +! AT HALF LEVEL M2/S2 +! *PQTUH* UPDRAFT SPECIFIC TOTAL WATER AT HALF LEVEL KG/KG +! *PTHTVUH* UPDRAFT virt potential temp at HALF LEVEL (for TKE) K +! *PMFLX* PBL MASS FLUX M/S +! *PZPLCL* HEIGHT OF LIFTING CONDENSATION LEVEL OF UPDRAFT M +! *PZPTOP* HEIGHT OF LEVEL OF ZERO KINETIC ENERGY (W=0) OF UPDRAFT M +!cstep/GL +! *PBUOY_COR* STABILITY CORRECTION PARAMETER TO BE USED FOR TKE SCHEME +! +! *PWU* VERTICAL VELOCITY OF SECOND UPDRAFT +!cstep/GL +! +! OUTPUT PARAMETERS (INTEGER): + +! *KPLCL* FIRST HALF LEVEL ABOVE REAL HEIGHT OF UPRAFT LCL +! *KPTOP* HIGHEST HALF LEVEL BELOW PZTOP, AND +! UPDRAFT TOP FULL LEVEL (PZTOP IS WITHIN THAT LAYER) +! *KPLZB* LEVEL OF UPRAFT ZERO BUOYANCY (LAST FULL LEVEL THAT IS POS. BUOYANT) +! *KPBLTYPE* -1: not defined yet +! 0: stable PBL +! 1: dry convective PBL (no cloud below parcel top) +! 2: stratocumulus +! 3: shallow cumulus +! 4: deep cumulus + +! METHOD +! ------ + +! SEE DOCUMENTATION + +! ------------------------------------------------------------------ + +USE YOEPHLI , ONLY : TEPHLI +USE PARKIND1 ,ONLY : JPIM ,JPRB + +USE YOMHOOK ,ONLY : LHOOK, DR_HOOK + +USE YOMCST , ONLY : YDCST=>YRCST ! allows use of included functions. REK. +USE YOETHF , ONLY : YDTHF=>YRTHF ! allows use of included functions. REK. +USE PARPHY , ONLY : RKAP +USE YOECUMF , ONLY : TECUMF +USE YOMPARAR , ONLY : TPARAR +USE YOEPHY , ONLY : TEPHY +USE YOEVDF , ONLY : TVDF + +!for optimation +USE MODD_CST +USE MODD_RAIN_ICE_DESCR +USE MODD_RAIN_ICE_PARAM +USE MODE_TIWMX_TAB +USE MODE_TIWMX + +USE SPP_MOD_TYPE, ONLY : TSPP_CONFIG_TYPE, APPLY_SPP + +IMPLICIT NONE + + +!* 0.1 GLOBAL VARIABLES + +TYPE(TVDF) ,INTENT(IN) :: YDVDF +TYPE(TECUMF) ,INTENT(IN) :: YDECUMF +TYPE(TEPHLI) ,INTENT(IN) :: YDEPHLI +TYPE(TEPHY) ,INTENT(IN) :: YDEPHY +TYPE(TPARAR) ,INTENT(IN) :: YDPARAR +INTEGER(KIND=JPIM),INTENT(IN) :: KLON +INTEGER(KIND=JPIM),INTENT(IN) :: KLEV +INTEGER(KIND=JPIM),INTENT(IN) :: KDRAFT +INTEGER(KIND=JPIM),INTENT(IN) :: KIDIA +INTEGER(KIND=JPIM),INTENT(IN) :: KFDIA +INTEGER(KIND=JPIM),INTENT(IN) :: KSTEP +INTEGER(KIND=JPIM),INTENT(INOUT) :: KPLCL(KLON,KDRAFT) +INTEGER(KIND=JPIM),INTENT(INOUT) :: KPTOP(KLON,KDRAFT) +INTEGER(KIND=JPIM),INTENT(INOUT) :: KPLZB(KLON,KDRAFT) +REAL(KIND=JPRB) ,INTENT(IN) :: PTMST +REAL(KIND=JPRB) ,INTENT(IN) :: PUM1(KLON,KLEV) +REAL(KIND=JPRB) ,INTENT(IN) :: PVM1(KLON,KLEV) +REAL(KIND=JPRB) ,INTENT(IN) :: PTM1(KLON,KLEV) +REAL(KIND=JPRB) ,INTENT(IN) :: PQM1(KLON,KLEV) +REAL(KIND=JPRB) ,INTENT(IN) :: PLM1(KLON,KLEV) +REAL(KIND=JPRB) ,INTENT(IN) :: PIM1(KLON,KLEV) +REAL(KIND=JPRB) ,INTENT(IN) :: PAM1(KLON,KLEV) +REAL(KIND=JPRB) ,INTENT(IN) :: PAPHM1(KLON,0:KLEV) +REAL(KIND=JPRB) ,INTENT(IN) :: PAPM1(KLON,KLEV) +REAL(KIND=JPRB) ,INTENT(IN) :: PGEOM1(KLON,KLEV) +REAL(KIND=JPRB) ,INTENT(IN) :: PGEOH(KLON,0:KLEV) +REAL(KIND=JPRB) ,INTENT(IN) :: PKMFL(KLON) +REAL(KIND=JPRB) ,INTENT(IN) :: PKHFL(KLON) +REAL(KIND=JPRB) ,INTENT(IN) :: PKQFL(KLON) +REAL(KIND=JPRB) ,INTENT(INOUT) :: PMFLX(KLON,0:KLEV,KDRAFT) +REAL(KIND=JPRB) ,INTENT(OUT) :: PUUH(KLON,0:KLEV,KDRAFT) +REAL(KIND=JPRB) ,INTENT(OUT) :: PVUH(KLON,0:KLEV,KDRAFT) +REAL(KIND=JPRB) ,INTENT(INOUT) :: PSLGUH(KLON,0:KLEV,KDRAFT) +REAL(KIND=JPRB) ,INTENT(INOUT) :: PQTUH(KLON,0:KLEV,KDRAFT) +REAL(KIND=JPRB) ,INTENT(INOUT) :: PTHTVUH(KLON,0:KLEV,KDRAFT) +REAL(KIND=JPRB) ,INTENT(OUT) :: PFRACB(KLON,KDRAFT) +REAL(KIND=JPRB) ,INTENT(INOUT) :: PZPLCL(KLON,KDRAFT) +REAL(KIND=JPRB) ,INTENT(INOUT) :: PZPTOP(KLON,KDRAFT) +REAL(KIND=JPRB) ,INTENT(INOUT) :: PFPLVL(KLON,0:KLEV) +REAL(KIND=JPRB) ,INTENT(INOUT) :: PFPLVN(KLON,0:KLEV) +REAL(KIND=JPRB) ,INTENT(OUT) :: PCLFR(KLON) +REAL(KIND=JPRB) ,INTENT(IN) :: PBIR(KLON) +REAL(KIND=JPRB) ,INTENT(OUT) :: PRICUI(KLON) +TYPE(TSPP_CONFIG_TYPE),INTENT(INOUT) :: YSPP_CLDDPTH, YSPP_CLDDPTHDP, & + & YSPP_RFAC_TWOC,YSPP_RZC_H,YSPP_RZL_INF +! variables RACMO turbulence scheme +REAL(KIND=JPRB) ,INTENT(OUT) :: ZLENGTH_M(KLON,KLEV) +REAL(KIND=JPRB) ,INTENT(OUT) :: ZLENGTH_H(KLON,KLEV) +REAL(KIND=JPRB) ,INTENT(INOUT) :: PTKE(KLON,KLEV) + +! variables for optimation of code +REAL(KIND=JPRB) ,INTENT(IN) :: PEXNF(KLON,KLEV) +REAL(KIND=JPRB) ,INTENT(IN) :: PEXNH(KLON,0:KLEV) + +LOGICAL ,INTENT(IN) :: LDNODECP(KLON) +!ldrundry not used now +LOGICAL ,INTENT(IN) :: LDRUNDRY(KLON) +INTEGER(KIND=JPIM),INTENT(INOUT) :: KPBLTYPE(KLON) +REAL(KIND=JPRB) :: ZENCASC(KLON,0:KLEV) + +! --- variables associated with Lgeert +REAL(KIND=JPRB) :: PBUOY_COR (KLON,0:KLEV) +REAL(KIND=JPRB) :: ZQCUH(KLON,0:KLEV,KDRAFT) +REAL(KIND=JPRB) :: ZWU2H(KLON,0:KLEV,KDRAFT) + +REAL(KIND=JPRB) :: PWU (KLON,0:KLEV) +REAL(KIND=JPRB) :: ZQSVAR(KLON,KLEV) +REAL(KIND=JPRB) :: ZDQSDTEMP(KLON,KLEV) +REAL(KIND=JPRB) :: ZFACW,ZFACI,ZESDP,ZCOR,ZLAT2CP,& + & ZESW,ZESI,ZES,ZQSAT,ZEL2R,ZEI2R,ZE2R +!cstep/GL --------------------------------------------- + + + +!* 0.2 LOCAL VARIABLES + +!--- mean & environmental properties --- +REAL(KIND=JPRB) :: ZUSTAR (KLON) , ZWSTAR(KLON) , ZKHVFL(KLON) , & + & ZWSIGMA(KLON) , & + & ZSLGENH(KLON,0:KLEV),ZQLENH(KLON,0:KLEV), ZQIENH(KLON,0:KLEV), & + & ZQTENH(KLON,0:KLEV), ZUENH(KLON,0:KLEV) , ZVENH(KLON,0:KLEV) , & + & ZTVEN(KLON,KLEV), ZQTM1 (KLON,KLEV) , & + & ZSLGM1(KLON,KLEV) ,& + & ZTENH(KLON,0:KLEV) , ZRHOH (KLON,0:KLEV), ZTHVEN(KLON,KLEV) + +REAL(KIND=JPRB) :: ZSTAR(KLON), ZCHICRIT(KLON,0:KLEV),ZMEANCHICRIT(KLON) , & + & ZDETRSHALLOW(KLON), ZVARQ(KLON,0:KLEV), & + & ZFRACMB(KLON) , ZMINIMUM(KLON) , & + & ZQVENH(KLON,0:KLEV), & + & ZTHTVENH(KLON,0:KLEV), ZTHTLUH(KLON,0:KLEV), & + & ZTHTENH(KLON,0:KLEV), & + & ZTHTVUH(KLON,0:KLEV), ZTHTLEH(KLON,0:KLEV),& + & ZDQSDTU(KLON,0:KLEV),ZGAMMA(KLON,0:KLEV),ZDUMFUNC(KLON,0:KLEV), & + & ZPRES_0, ZKAPPA,ZQSATU(KLON,0:KLEV) + + +!--- updraft parameters --- +REAL(KIND=JPRB) :: ZWUH,DZH, & + & ZQUH (KLON,0:KLEV,KDRAFT), & + & ZTUH (KLON,0:KLEV,KDRAFT), ZEPS (KLON,0:KLEV,KDRAFT), & + & ZDETR (KLON,0:KLEV,KDRAFT), ZFRAC (KLON,0:KLEV,KDRAFT), & + & ZBUOF (KLON,KLEV,KDRAFT) , & + & ZDELTAMINEPS(KLON,0:KLEV), ZCAPE1(KLON) + +REAL(KIND=JPRB) :: ZQSATM, ZSATDEF, & + & ZUPFLXL(KLON,0:KLEV,KDRAFT), ZUPFLXN(KLON,0:KLEV,KDRAFT), & + & ZUPGENL(KLON,KLEV,KDRAFT), ZUPGENN(KLON,KLEV,KDRAFT), & + & ZDZRHO, ZPFLXTOT, ZPEVAPUP, ZFAC, ZUPMELT, ZUPMELTTEND + +REAL(KIND=JPRB) :: ZFRACB(KLON,KDRAFT), ZMFLXB(KLON,KDRAFT), ZTVEXCSURF(KLON,KDRAFT) + + +REAL(KIND=JPRB) :: ZFRACMAX , ZFACMAXEXC , ZFRACTEST , ZFACTESTEXC , & + & ZFACEXC(KLON,KDRAFT), ZDUMFRAC, ZDUMR, TVEXCSURF, ZWT, ZWL, ZEL, ZET, & + & ZFACCASC(KLON,0:KLEV) + +LOGICAL :: LLDONE(KLON,KDRAFT) + + +INTEGER(KIND=JPIM) :: IS, JK, JL, JD, JKM + +INTEGER(KIND=JPIM) :: IKSTAR(KLON) + +REAL(KIND=JPRB) :: ZQEXC , ZTEXC , ZDZ , & + & ZCONS10 , ZTVMEAN , & + & ZRG , ZMFMAX , ZMFS(KLON,KDRAFT) + +! REMAINING MODEL PARAMETERS + +REAL(KIND=JPRB) :: ZTAUEPS(KLON) , ZCLDDEPTH , & + & ZW2THRESH , ZSTABTHRESH , ZBIRTHRESH , & + & ZCLDDEPTHDP , ZDZCLOUD(KLON), & + & ZREPUST, ZGHM1 + +REAL(KIND=JPRB) :: ZZI(KLON),ZB1(KLON),ZCOUNT(KLON), & + & ZFRMIN(KLON,2),ZMU,ZVAL +INTEGER(KIND=JPIM) :: ITOP, IBASE, JKO,JKE + +!cstep 30082007: introduce two parcel time scales, one for the test parcel (ZTAUEPS_TEST) and one +! : for the actual parcels (ZTAUEPS) +REAL(KIND=JPRB) :: ZTAUEPS_TEST + +INTEGER(KIND=JPIM) :: IZI(KLON,KDRAFT) + + +REAL(KIND=JPRB) :: ZHOOK_HANDLE + + +#include "surf_inq.h" + +#include "vdfparcelhl.intfb.h" +#include "vdfpdftablehl.intfb.h" +#include "vdfexcuhl.intfb.h" +#include "fcttre.func.h" + + + +! ------------------------------------------------------------------ + +!* 1. INITIALIZATION +! -------------- + +IF (LHOOK) CALL DR_HOOK('VDFHGHTNHL',0,ZHOOK_HANDLE) +ASSOCIATE(RTAUMEL=>YDECUMF%RTAUMEL, & + & RG=>YDCST%RG, RCPD=>YDCST%RCPD, RETV=>YDCST%RETV, RLVTT=>YDCST%RLVTT, RLSTT=>YDCST%RLSTT, & + & RATM=>YDCST%RATM, RTT=>YDCST%RTT, RLMLT=>YDCST%RLMLT, RD=>YDCST%RD, & + & R2ES=>YDTHF%R2ES, R3LES=>YDTHF%R3LES, R3IES=>YDTHF%R3IES, R4LES=>YDTHF%R4LES, & + & R4IES=>YDTHF%R4IES, R5LES=>YDTHF%R5LES, R5IES=>YDTHF%R5IES, R5ALVCP=>YDTHF%R5ALVCP, & + & R5ALSCP=>YDTHF%R5ALSCP, RALVDCP=>YDTHF%RALVDCP, RALSDCP=>YDTHF%RALSDCP, & + & RTWAT=>YDTHF%RTWAT, RTICE=>YDTHF%RTICE, RTICECU=>YDTHF%RTICECU, RTWAT_RTICE_R=>YDTHF%RTWAT_RTICE_R, & + & RTWAT_RTICECU_R=>YDTHF%RTWAT_RTICECU_R, & + & YSURF=>YDEPHY%YSURF,LHARATU=>YDPARAR%LHARATU, & + & LTOTPREC=>YDPARAR%LTOTPREC,LTOTPRECL=>YDPARAR%LTOTPRECL) + +ZWL= 200._JPRB +ZWT= 400._JPRB +! typical entrainment values at LCL (L) and TOP (T) +ZEL= 0.002_JPRB +ZET= 0.002_JPRB +ZPRES_0 = 100000._JPRB ! standard pressure consistent with vdfexcu +ZKAPPA = RD / RCPD ! consistent with vdfexcu + +ZFRACTEST = 0.002_JPRB ! top % of the PDF associated with the test parcel +CALL VDFPDFTABLEHL (ZFRACTEST, ZFACTESTEXC, ZDUMR, ZDUMR, 0) ! associated PDF scaling factor + + +ZFRACMAX = 0.1_JPRB ! total convective area fraction that is done with mass flux + +CALL VDFPDFTABLEHL (ZFRACMAX, ZFACMAXEXC, ZDUMR, ZDUMR, 0) ! associated PDF scaling factor + +! eddy turnover time scale used in parcel entrainment [s] (Neggers, Siebesma & Jonker, JAS 2002) +ZTAUEPS_TEST = 400._JPRB ! Roel's original ZTAUEPS value + + +!ZW2THRESH = -1._JPRB ! threshold parcel vertical velocity squared [m2/s2] +!CGL +ZW2THRESH = 0.0_JPRB + +ZCLDDEPTH = 2000._JPRB ! threshold cloud thickness for stcu/cu transition [m] + +ZCLDDEPTHDP = 4000._JPRB ! threshold cloud thickness used in shallow/deep decision [m] + +TVEXCSURF = 0.0_JPRB ! initialisation + +IF(XFRMIN(19)>0.)ZCLDDEPTH = XFRMIN(19) +IF(XFRMIN(20)>0.)ZCLDDEPTHDP = XFRMIN(20) + + +ZSTABTHRESH = 20._JPRB ! threshold stability (Klein & Hartmann criteria) [K] +ZBIRTHRESH = 0.1_JPRB ! threshold BIR (TKE decoupling criteria) [1] + +CALL SURF_INQ(YSURF,PREPUST=ZREPUST) + +! optimization +ZRG = 1.0_JPRB/RG +ZLAT2CP = RLVTT/RCPD +ZEL2R = 0.62198_JPRB*RLVTT/RD +ZEI2R = 0.62198_JPRB*RLSTT/RD + +DO JL=KIDIA,KFDIA + KPBLTYPE(JL) = -1 ! -1 means: yet unknown + + ZZI(JL) = 0._JPRB ! mixed layer scalings + ZWSTAR(JL) = 0._JPRB + + PRICUI(JL) = 1._JPRB ! 1 / cumulus inversion Richardson number + ZCAPE1(JL) = 0._JPRB + +ENDDO + +DO JD=1,KDRAFT + DO JL=KIDIA,KFDIA + PZPLCL(JL,JD) = -100._JPRB ! default value: -100 (no LCL) + PZPTOP(JL,JD) = 0._JPRB + KPLCL(JL,JD) = 0 ! default value: 0 (no PBL cloud) + KPTOP(JL,JD) = 0 + KPLZB(JL,JD) = 0 + LLDONE(JL,JD) = .TRUE. ! default: TRUE (don't launch the parcel) + ZFRACB(JL,JD) = 0._JPRB + PFRACB(JL,JD) = 0._JPRB + ZFACEXC(JL,JD) = 0._JPRB + ZMFLXB(JL,JD) = 0._JPRB + ZTVEXCSURF(JL,JD) = 0._JPRB + ENDDO +ENDDO + +DO JK=0,KLEV + DO JL=KIDIA,KFDIA + ZCHICRIT(JL,JK) = 0._JPRB + ENDDO +ENDDO + +!--- parcel half level parameters --- +DO JD=1,KDRAFT + DO JK=0,KLEV + DO JL=KIDIA,KFDIA + PUUH(JL,JK,JD) = 0.0_JPRB + PVUH(JL,JK,JD) = 0.0_JPRB + PSLGUH(JL,JK,JD) = 0.0_JPRB + PQTUH(JL,JK,JD) = 0.0_JPRB + PTHTVUH(JL,JK,JD) = 0.0_JPRB + PMFLX(JL,JK,JD) = 0.0_JPRB + ZTUH(JL,JK,JD) = 0.0_JPRB + ZQUH(JL,JK,JD) = 0.0_JPRB + ZQCUH(JL,JK,JD) = 0.0_JPRB + ZEPS(JL,JK,JD) = 0.0_JPRB + ZDETR(JL,JK,JD) = 0.0_JPRB + ZWU2H(JL,JK,JD) = 0.0_JPRB + ZFRAC(JL,JK,JD) = 0.0_JPRB + ZUPFLXL(JL,JK,JD) = 0.0_JPRB + ZUPFLXN(JL,JK,JD) = 0.0_JPRB + ZVARQ(JL,JK) = 0.0_JPRB + ZENCASC(JL,JK) =0.0_JPRB + ENDDO + ENDDO +ENDDO + +!--- parcel full level parameters --- +DO JD=1,KDRAFT + DO JK=1,KLEV + DO JL=KIDIA,KFDIA + ZBUOF(JL,JK,JD) = 0.0_JPRB + ZUPGENL(JL,JK,JD) = 0.0_JPRB + ZUPGENN(JL,JK,JD) = 0.0_JPRB + ENDDO + ENDDO +ENDDO + +! Setup SPP patterns +IF (YSPP_CLDDPTH%LPERT) THEN + CALL APPLY_SPP(YSPP_CLDDPTH, & + & KLON,KIDIA,KFDIA, & + & ZCLDDEPTH,ZFRMIN(:,1)) +ELSE + DO JL=KIDIA,KFDIA + ZFRMIN(JL,1) = ZCLDDEPTH + ENDDO +ENDIF + +IF (YSPP_CLDDPTHDP%LPERT) THEN + CALL APPLY_SPP(YSPP_CLDDPTHDP, & + & KLON,KIDIA,KFDIA, & + & ZCLDDEPTHDP,ZFRMIN(:,2)) +ELSE + DO JL=KIDIA,KFDIA + ZFRMIN(JL,2) = ZCLDDEPTHDP + ENDDO +ENDIF + + + +! ----------------------------------------------------------------- + +!* 2. PREPARE FIELDS ON HALF LEVELS BY LINEAR INTERPOLATION +!* OF CONSERVED VARIABLES +! ----------------------------------------------------- + +!* 2.1 full level cpm, slg, qt and Tv +!* + +DO JK=1,KLEV + DO JL=KIDIA,KFDIA + ZSLGM1(JL,JK) = RCPD * PTM1(JL,JK) + PGEOM1(JL,JK)& + & - RLVTT * PLM1(JL,JK) - RLSTT * PIM1(JL,JK) + ZQTM1 (JL,JK) = PQM1(JL,JK) + PLM1(JL,JK) + PIM1(JL,JK) + + ! parcel goes through cloud portion of environment + ! (added ql loading; ql,cld=ql,mean/fc; qv = qsat) + ! safety: fc>0.1; linear interpolation between overcast + ! and cloudy portion for 0<fc<0.1 + ! guaranteed to be < tv from mean conditions + + ! grid box mean virtual effect + ZTVMEAN = PTM1(JL,JK) * ( 1.0_JPRB + RETV * PQM1(JL,JK)& + & - PLM1(JL,JK) - PIM1(JL,JK) ) !qli loading + ZTVEN(JL,JK) = ZTVMEAN + ZTHVEN(JL,JK) = ZTVEN(JL,JK) / PEXNF(JL,JK) !( PAPM1(JL,JK)/RATM )**(-RD/RCPD) * ZTVEN(JL,JK) + ENDDO +ENDDO + + +!* 2.2 half-level environment interpolation (qt, ql, qi, slg) +!* attention: not good to interpolate everything independently +!* better: interpolate conserved variables and derive rest!!! +!* + +DO JK=1,KLEV-1 + DO JL=KIDIA,KFDIA + + IF (JK==1) THEN + ZGHM1 = PGEOH(JL,JK) + 50000._JPRB*RG !avoid using top half level (=inf) + ELSE + ZGHM1 = PGEOH(JL,JK-1) + ENDIF + + ZQTENH(JL,JK) = ( ZQTM1(JL,JK+1) *(ZGHM1-PGEOH(JL,JK )) & + & + ZQTM1(JL,JK) *(PGEOH(JL,JK )-PGEOH(JL,JK+1)) & + & ) /(ZGHM1-PGEOH(JL,JK+1)) + ZQLENH(JL,JK) = ( PLM1(JL,JK+1) *(ZGHM1-PGEOH(JL,JK )) & + & + PLM1(JL,JK) *(PGEOH(JL,JK )-PGEOH(JL,JK+1)) & + & ) /(ZGHM1-PGEOH(JL,JK+1)) + ZQIENH(JL,JK) = ( PIM1(JL,JK+1) *(ZGHM1-PGEOH(JL,JK )) & + & + PIM1(JL,JK) *(PGEOH(JL,JK )-PGEOH(JL,JK+1)) & + & ) /(ZGHM1-PGEOH(JL,JK+1)) + + ZQVENH(JL,JK) = ZQTENH(JL,JK) - ZQLENH(JL,JK) - ZQIENH(JL,JK) + + ZSLGENH(JL,JK)= ( ZSLGM1(JL,JK+1)*(ZGHM1-PGEOH(JL,JK )) & + & + ZSLGM1(JL,JK) *(PGEOH(JL,JK )-PGEOH(JL,JK+1)) & + & ) /(ZGHM1-PGEOH(JL,JK+1)) + ZUENH(JL,JK) = ( PUM1(JL,JK+1) *(ZGHM1-PGEOH(JL,JK )) & + & + PUM1(JL,JK) *(PGEOH(JL,JK )-PGEOH(JL,JK+1)) & + & ) /(ZGHM1-PGEOH(JL,JK+1)) + ZVENH(JL,JK) = ( PVM1(JL,JK+1) *(ZGHM1-PGEOH(JL,JK )) & + & + PVM1(JL,JK) *(PGEOH(JL,JK )-PGEOH(JL,JK+1)) & + & ) /(ZGHM1-PGEOH(JL,JK+1)) + + + ! Calculate T at half levels from sl, for later use in density calculations + ZTENH(JL,JK) = ( PTM1(JL,JK+1) *(ZGHM1-PGEOH(JL,JK )) & + & + PTM1(JL,JK) *(PGEOH(JL,JK )-PGEOH(JL,JK+1)) & + & ) /(ZGHM1-PGEOH(JL,JK+1)) + + ! Determine thetav environment + ZTHTENH(JL,JK) = (ZTENH(JL,JK)/PEXNH(JL,JK)) + ZTHTVENH(JL,JK) = (ZTENH(JL,JK)/PEXNH(JL,JK)) & + & * (1._JPRB + RETV * ZQVENH(JL,JK) & + ! add qice correction + & - ZQLENH(JL,JK) ) + + ! initialize updraft thetav for dry and moist updraft with environment values + PTHTVUH(JL,JK,1)=ZTHTVENH(JL,JK) + PTHTVUH(JL,JK,2)=ZTHTVENH(JL,JK) + PTHTVUH(JL,JK,3)=ZTHTVENH(JL,JK) + PQTUH(JL,JK,1)=ZQTENH(JL,JK) + PQTUH(JL,JK,2)=ZQTENH(JL,JK) + PQTUH(JL,JK,3)=ZQTENH(JL,JK) + PUUH(JL,JK,1)=ZUENH(JL,JK) + PUUH(JL,JK,2)=ZUENH(JL,JK) + PUUH(JL,JK,3)=ZUENH(JL,JK) + PVUH(JL,JK,1)=ZVENH(JL,JK) + PVUH(JL,JK,2)=ZVENH(JL,JK) + PVUH(JL,JK,3)=ZVENH(JL,JK) + PSLGUH(JL,JK,1)=ZSLGENH(JL,JK) + PSLGUH(JL,JK,2)=ZSLGENH(JL,JK) + PSLGUH(JL,JK,3)=ZSLGENH(JL,JK) + + + ZRHOH(JL,JK) = PAPHM1(JL,JK)/(RD*ZTENH(JL,JK)) + + ENDDO +ENDDO + +! +! Initialization lowest updraft level with environment like values +! +DO JD=1,KDRAFT + DO JL=KIDIA,KFDIA + PUUH(JL,KLEV,JD) = PUUH(JL,KLEV-1,JD) + PVUH(JL,KLEV,JD) = PVUH(JL,KLEV-1,JD) + PSLGUH(JL,KLEV,JD)= PSLGUH(JL,KLEV-1,JD) + PQTUH(JL,KLEV,JD) = PQTUH(JL,KLEV-1,JD) + PTHTVUH(JL,KLEV,JD) = PTHTVUH(JL,KLEV-1,JD) + ENDDO +ENDDO + + + +! ----------------------------------------------------------------- +!* 3. RELEASE THE FIRST (TEST) UPDRAFT TO GET PBL HEIGHTS + + +!* set updraft index to 1 +JD = 1 + +DO JL=KIDIA,KFDIA + + ZFRACB(JL,JD) = ZFRACMAX !CGL replaced ZFRACB(JL,JD) = ZFRACTEST + + !* 3.1 Determine stability of BL using the surface buoyancy flux + + ZKHVFL(JL) = ( 1.0_JPRB + RETV * ZQTM1(JL,KLEV) ) * PKHFL(JL) +& + & ( RETV * ZSLGM1(JL,KLEV) / RCPD ) * PKQFL(JL) + + IF ( ZKHVFL(JL) >= 0.0_JPRB ) THEN + + ! stable BL (no updrafts expected/needed) + KPBLTYPE(JL) = 0 + + ELSE + + LLDONE(JL,JD) = .FALSE. !confirm launch + + !* 3.2 Sigma-w-L60 (ignore 1-z/zi term) + + ZUSTAR (JL) = MAX( SQRT(PKMFL(JL)), ZREPUST ) ! u* (repust=10e-4 + + ZWSIGMA(JL) = 1.2_JPRB& + & * ( ZUSTAR(JL)**3& + & - 1.5_JPRB * RKAP * ZKHVFL(JL) * (PGEOH(JL,KLEV-1)-PGEOH(JL,KLEV))& + & / PTM1(JL,KLEV-1)& + & ) ** ( 1.0_JPRB/3._JPRB ) ! Kolmogorov 1/3-power + + + + !* 3.3 Initialize updraft + + !get the constant associated with the top ZFRACTEST % of the PDF + ZFACEXC(JL,1) = ZFACTESTEXC + !calculate the initial excess values + ZWU2H(JL,KLEV-1,JD) = ( ZFACEXC(JL,1) * ZWSIGMA(JL) )**2 + ZTEXC = - ZFACEXC(JL,1) * PKHFL(JL) / ZWSIGMA(JL) + ZQEXC = - ZFACEXC(JL,1) * PKQFL(JL) / ZWSIGMA(JL) + ZTEXC = MAX(ZTEXC, 0.0_JPRB) + ZQEXC = MAX(ZQEXC, 0.0_JPRB) + PQTUH(JL,KLEV-1,JD) = ZQTENH(JL,KLEV-1) + ZQEXC + ZQCUH(JL,KLEV-1,JD) = ZQLENH(JL,KLEV-1) + ZQIENH(JL,KLEV-1) + ZQUH (JL,KLEV-1,JD) = PQTUH(JL,KLEV-1,JD) - ZQCUH(JL,KLEV-1,JD) + PSLGUH(JL,KLEV-1,JD)= ZSLGENH(JL,KLEV-1) + RCPD * ZTEXC + ZTUH (JL,KLEV-1,JD) = ( PSLGUH (JL,KLEV-1,JD) - PGEOH(JL,KLEV-1)& + & + RLVTT*ZQLENH(JL,KLEV-1) + RLSTT*ZQIENH(JL,KLEV-1)& + & ) / RCPD + PUUH(JL,KLEV-1,JD)= ZUENH(JL,KLEV-1) + PVUH(JL,KLEV-1,JD)= ZVENH(JL,KLEV-1) + + ENDIF +ENDDO !JL + + +!* 3.4 Release the test updraft #1 +!* - Mainly used to get a first guess of the heights of cloud base & inversion, +!* and to determine PBL type accordingly. + +ZTAUEPS(:) = 400._JPRB + +! +CALL VDFPARCELHL(YDEPHLI,YDPARAR,KIDIA,KFDIA,KLON,KLEV,KDRAFT,PGEOH,PGEOM1,PAPHM1,PUM1,PVM1,ZQTM1,ZSLGM1,ZTVEN,PUUH,PVUH,& + & PSLGUH,PQTUH,ZWU2H,ZQCUH,ZBUOF,ZQUH,ZTUH,ZEPS,PZPLCL,KPLCL,PZPTOP,KPTOP,KPLZB,JD,ZUPGENL,ZUPGENN,ZTAUEPS,ZW2THRESH,LLDONE,KPBLTYPE) + + + +! ----------------------------------------------------------------- +!* 4. CLASSIFICATION OF THE CONVECTIVE PBL +! ------------------------------------ + + +!* 4.1 Classify the convective PBL +!* + + +DO JL=KIDIA,KFDIA + IF ( KPBLTYPE(JL)/=0 ) THEN + + !CGL loose criterium by 100 m + IF ( PZPLCL(JL,1) > (PZPTOP(JL,1)+100._JPRB) .OR. KPLCL(JL,1) == 0 ) THEN + + !dry convective PBL + KPBLTYPE(JL) = 1 !dry convective PBL + ZDZCLOUD(JL) = 0.0_JPRB !cloud thickness + + ELSE + + !moist convective PBL + ZDZCLOUD(JL) = PZPTOP(JL,1) - PZPLCL(JL,1) !cloud thickness + IF (ZDZCLOUD(JL)>ZFRMIN(JL,2)) THEN + + !deep convection + KPBLTYPE(JL) = 4 + ELSE + +!wc no special stratocumulus regime anymore +! KPBLTYPE(JL) = 2 !set the type to stratocumulus for the moment + KPBLTYPE(JL) = 3 !set the type to stratocumulus for the moment + + ENDIF + + ENDIF + + ENDIF !KPBLTYPE /=0 +ENDDO !JL + + + +!wc no special stratocumulus regime anymore +!* 4.2 Check the stratocumulus/shallow cumulus criterion (trigger function) +!* If shallow cumulus is diagnosed, KPBLTYPE will be set to 3 +!* +!CALL VDFSTCUCRITHL ( KIDIA , KFDIA , KLON , KLEV , KDRAFT ,& +! & PTM1 , ZSLGM1 , ZQTM1 , PAPM1 ,& +! & ZSTABTHRESH, ZCLDDEPTH, ZBIRTHRESH, ZDZCLOUD,& +! & KPTOP , KPBLTYPE, LDNODECP) + + +! ----------------------------------------------------------------- + +!* 5. CLOSURE FOR ORGANIZED UPDRAFTS (JD=2,3) +! --------------------------------------- + + +!* 5.1 Determine some mixed layer scalings +!* + +DO JL=KIDIA,KFDIA + + IF ( KPBLTYPE(JL)/=0 ) THEN !don't do this for stable PBL + + SELECT CASE (KPBLTYPE(JL)) + + CASE(1) + !Dry convective PBL - Inversion height + ZZI(JL) = PZPTOP(JL,1) + + CASE(2) + !Stratocumulus - Inversion height + !CAUTION: During decoupling in the intermediate regime (e.g. ASTEX/ATEX) the + ! relevant ML scaling height changes from PBL inversion to level of minimum + ! buoyancy flux. In the current setup this is not modelled yet! + ZZI(JL) = PZPTOP(JL,1) + + CASE(3) + !Shallow cumulus - Level of minimum buoyancy flux + !Assume that the moist updraft LCL is very close to this level + ZZI(JL) = PZPLCL(JL,1) + + CASE(4) + !Deep cumulus - Only do a dry parcel up to cloud base + ZZI(JL) = PZPLCL(JL,1) + + END SELECT + + !--- Mixed layer convective velocity scale --- + ZWSTAR(JL) = ( -ZKHVFL(JL) * RG * ZZI(JL) / ZTHVEN(JL,KLEV) ) ** (1._JPRB/3._JPRB) + ! CGL for the moment revert back to old constant time scale + ZTAUEPS(JL) = 400._JPRB + + + ENDIF + +ENDDO + + +!* 5.3 Closure of updraft area fractions (JD=2,3) +!* + +DO JL=KIDIA,KFDIA + + IF ( KPBLTYPE(JL)/=0 ) THEN !don't do this for stable PBL + + SELECT CASE (KPBLTYPE(JL)) + + CASE(1) + !Dry convective PBL + ZFRACB(JL,3) = 0._JPRB + ZFRACB(JL,2) = ZFRACMAX - ZFRACB(JL,3) + ! ZFRACB(JL,2) = ZFRACB(JL,2)*(1.-EXP(-ZZI(JL)/400._JPRB)) + CASE(2) + !Stratocumulus + ZFRACB(JL,3) = 0.1_JPRB + ZFRACB(JL,2) = ZFRACMAX - ZFRACB(JL,3) + CASE(3) + !Shallow cumulus + ZFRACB(JL,3) = 0.03_JPRB + ZFRACB(JL,2) = ZFRACMAX - ZFRACB(JL,3) + ! ZFRACB(JL,2) = ZFRACB(JL,2)*(1.-EXP(-ZZI(JL)/400._JPRB) ) + + CASE(4) + !Deep cumulus + ZFRACB(JL,3) = 0._JPRB + ZFRACB(JL,2) = ZFRACMAX - ZFRACB(JL,3) + + END SELECT !KPBLTYPE + + + ENDIF !KPBLTYPE /=0 + +ENDDO !JL + + + +! ----------------------------------------------------------------- + +!* 6. CALCULATE VERTICAL PROFILES OF ALL UPDRAFTS (JD=2,3) +! ---------------------------------------------------- + + +!* 6.1 Calculate the scaling factors of the updraft excess with the surface joint PDFs +!* +DO JD = 2,KDRAFT + DO JL=KIDIA,KFDIA + + IF ( KPBLTYPE(JL)/=0 .AND. ZFRACB(JL,JD)>0._JPRB ) THEN + + !-- Get the PDF scaling factor -- + SELECT CASE (JD) + + CASE(2) + !lower part of top ZFRACMAX % + ZDUMFRAC = ZFRACMAX - ZFRACB(JL,2) + CALL VDFPDFTABLEHL(ZDUMFRAC , ZFACEXC(JL,2), ZDUMR, ZDUMR, 0) + ZFACEXC(JL,2) = ( ZFRACMAX * ZFACMAXEXC - ZDUMFRAC * ZFACEXC(JL,2) ) / ZFRACB(JL,2) + CASE(3) + !upper part of top ZFRACMAX % + ZDUMFRAC = ZFRACB(JL,JD) + CALL VDFPDFTABLEHL(ZDUMFRAC , ZFACEXC(JL,3), ZDUMR, ZDUMR, 0) + + END SELECT + + ENDIF !KPBLTYPE & ZFRACB + + ENDDO !JL +ENDDO !JD + + +!* 6.2 Vertical integration of dry & moist updraft budgets (JD=2,3) +!* +DO JD = 2,KDRAFT + + !-- Initialize updraft -- + DO JL=KIDIA,KFDIA + + IF ( KPBLTYPE(JL)/=0 .AND. ZFRACB(JL,JD)>0._JPRB ) THEN + + LLDONE(JL,JD) = .FALSE. !confirm launch + + ZTEXC = - ZFACEXC(JL,JD) * PKHFL(JL) / ZWSIGMA(JL) + ZQEXC = - ZFACEXC(JL,JD) * PKQFL(JL) / ZWSIGMA(JL) + + ZWU2H(JL,KLEV-1,JD) = (ZWSIGMA(JL))**2 + + ZTEXC = MAX(ZTEXC, 0.0_JPRB) + ZQEXC = MAX(ZQEXC, 0.0_JPRB) + + ! cgl thv excess surface ; used to correct buoyancy flux + ZTVEXCSURF(JL,JD) = ZTEXC + RETV*(ZQEXC*PTM1(JL,KLEV-1) + ZQTENH(JL,KLEV-1)*ZTEXC) + + PQTUH(JL,KLEV-1,JD) = ZQTENH(JL,KLEV-1) + ZQEXC + ZQCUH(JL,KLEV-1,JD) = ZQLENH(JL,KLEV-1) + ZQIENH(JL,KLEV-1) + ZQUH (JL,KLEV-1,JD) = PQTUH(JL,KLEV-1,JD) - ZQCUH(JL,KLEV-1,JD) + PSLGUH(JL,KLEV-1,JD)= ZSLGENH(JL,KLEV-1) + RCPD * ZTEXC + ZTUH (JL,KLEV-1,JD) = ( PSLGUH (JL,KLEV-1,JD) - PGEOH(JL,KLEV-1) & + & + RLVTT*ZQLENH(JL,KLEV-1) + RLSTT*ZQIENH(JL,KLEV-1) & + & ) / RCPD + PUUH(JL,KLEV-1,JD)= ZUENH(JL,KLEV-1) + PVUH(JL,KLEV-1,JD)= ZVENH(JL,KLEV-1) + + ENDIF !KPBLTYPE & ZFRACB + + ENDDO !JL + + + !-- Release the updraft -- + + CALL VDFPARCELHL(YDEPHLI,YDPARAR,KIDIA,KFDIA,KLON,KLEV,KDRAFT,PGEOH,PGEOM1,PAPHM1,PUM1,PVM1,ZQTM1,ZSLGM1,ZTVEN,PUUH, & + & PVUH,PSLGUH,PQTUH,ZWU2H,ZQCUH,ZBUOF,ZQUH,ZTUH,ZEPS,PZPLCL,KPLCL,PZPTOP,KPTOP,KPLZB,JD,ZUPGENL,ZUPGENN,ZTAUEPS,ZW2THRESH, & + & LLDONE,KPBLTYPE) + + +ENDDO !JD + + +!* 6.3. In case no lcl is found in final updraft calculation, do some resque +!* +!* +! CGL made an adjustment in vdfparcel to initialize pzplcl = -100 + +DO JL=KIDIA,KFDIA + + IF ( KPBLTYPE(JL)==2 .OR. KPBLTYPE(JL)==3) THEN + + IF ( PZPLCL(JL,3) < 0._JPRB .OR. KPLCL(JL,3)<KPTOP(JL,3) & + &.OR. KPLCL(JL,3)==0 .OR. KPTOP(JL,3)==0 ) THEN + KPBLTYPE(JL) = 1 + ZFRACB(JL,2) = ZFRACMAX + ZFRACB(JL,3) = 0._JPRB + KPLCL(JL,3) = 0 + ENDIF + + ENDIF + +ENDDO !JL + +!* 6.5 Updraft precipitation fluxes (rain and snow) +!* +DO JD = 3,KDRAFT !moist updrafts only + + DO JK=2,KLEV + DO JL=KIDIA,KFDIA + + ZDZRHO = ZRG * ( PAPHM1(JL,JK)-PAPHM1(JL,JK-1) ) + + !-- Add precip generation to flux [kg /m2 /s: tendency * layer depth * air density] -- + ZUPFLXL(JL,JK,JD) = ZUPFLXL(JL,JK-1,JD) + ZUPGENL(JL,JK,JD) * ZDZRHO + ZUPFLXN(JL,JK,JD) = ZUPFLXN(JL,JK-1,JD) + ZUPGENN(JL,JK,JD) * ZDZRHO + + !-- Do some melting at freezing level (snow->rain) -- + IF (ZUPFLXN(JL,JK,JD)>0._JPRB .AND. PTM1(JL,JK) > RTT) THEN +!wc +! No melting and evaporation in the convection scheme in case LTOTPREC=TRUE +! because this will be done inside microphysics + IF (LTOTPREC) THEN + ZUPMELT = 0._JPRB + ELSE + ZUPMELT = (1.0_JPRB+0.5_JPRB*(PTM1(JL,JK)-RTT)) * & + & (PTM1(JL,JK)-RTT) * RCPD/(RLMLT*RTAUMEL) * ZDZRHO + ZUPMELT = MIN(ZUPFLXN(JL,JK,JD),ZUPMELT) + ENDIF + ZUPFLXL(JL,JK,JD) = ZUPFLXL(JL,JK,JD) + ZUPMELT + ZUPFLXN(JL,JK,JD) = ZUPFLXN(JL,JK,JD) - ZUPMELT + ENDIF + + ZPFLXTOT = ZUPFLXL(JL,JK,JD) + ZUPFLXN(JL,JK,JD) + + IF (ZPFLXTOT>0._JPRB) THEN + + !-- Saturation deficit of mean state T - + ZESW=ESATW(PTM1(JL,JK)) + ZESI=ESATI(PTM1(JL,JK)) + ZFAC = ZUPFLXL(JL,JK,JD) / ZPFLXTOT + ZES = ZESW*ZFAC + ZESI*(1._JPRB-ZFAC) ! Weigting according to precititation type + ZQSAT = 0.62198_JPRB*ZES/(MAX(ZES,PAPM1(JL,JK))-0.37802_JPRB*ZES) + ! Above boiling point for PAPHM1(JL,JK) < ZES --> no condensation. May happen in stratosphere, ZQSATU becomes 1. + ZSATDEF=ZQSAT-PQM1(JL,JK) ! Also allow deposition = negative values + + !-- Precip evaporation tendency [kg/kg /s] (Kessler 1969, Tiedtke 1993) -- +!wc +! No melting and evaporation in the convection scheme in case LTOTPREC=TRUE +! because this will be done inside microphysics + IF (LTOTPREC) THEN + ZPEVAPUP = 0._JPRB + ELSE + ZPEVAPUP = 0.001_JPRB * ZSATDEF * ( & !cy32r1 + & ( ZPFLXTOT / 0.00509_JPRB ) * & + & ( PAPM1(JL,JK)/PAPHM1(JL,KLEV) )**0.5_JPRB & + & )**0.5777_JPRB + + ENDIF + !-- Back-partition evaporation and substract from fluxes -- + ZUPFLXL(JL,JK,JD) = ZUPFLXL(JL,JK,JD) - ZPEVAPUP * ZDZRHO * ZFAC + ZUPFLXN(JL,JK,JD) = ZUPFLXN(JL,JK,JD) - ZPEVAPUP * ZDZRHO * (1._JPRB - ZFAC) + ZUPFLXL(JL,JK,JD) = MAX(0._JPRB,ZUPFLXL(JL,JK,JD)) + ZUPFLXN(JL,JK,JD) = MAX(0._JPRB,ZUPFLXN(JL,JK,JD)) + ENDIF + + ENDDO + ENDDO + + !Add contribution to total flux - weight by updraft area fraction + !(or weighted by the mean cloud fraction in the cloud layer + ! in case of LTOTPREC = TRUE.) + + IF (LTOTPREC .AND. (.NOT.LTOTPRECL)) THEN + + !compute mean cloud-fraction in the convective cloud layer: + + DO JL=KIDIA,KFDIA + PCLFR(JL)=0._JPRB + ENDDO + + DO JL=KIDIA,KFDIA + ZB1(JL)=0.0_JPRB + ZCOUNT(JL)=0.0_JPRB + ITOP=KPTOP(JL,3) + IBASE=KPLCL(JL,3) + IF (ITOP > 0 .AND. IBASE > 0) THEN + DO JK=ITOP,IBASE + ZB1(JL)=ZB1(JL)+PAM1(JL,JK) + ZCOUNT(JL)=ZCOUNT(JL)+1._JPRB + ENDDO + ENDIF + ENDDO + + DO JL=KIDIA,KFDIA + IF (ZB1(JL) > 0.0_JPRB .AND. ZCOUNT(JL) > 0.0_JPRB) THEN + PCLFR(JL)=ZB1(JL)/ZCOUNT(JL) + ENDIF + ENDDO + + DO JK=0,KLEV + DO JL=KIDIA,KFDIA + PFPLVL(JL,JK) = PFPLVL(JL,JK) + PCLFR(JL) * ZUPFLXL(JL,JK,JD) + PFPLVN(JL,JK) = PFPLVN(JL,JK) + PCLFR(JL) * ZUPFLXN(JL,JK,JD) + ENDDO + ENDDO + + ELSE + DO JK=0,KLEV + DO JL=KIDIA,KFDIA + PFPLVL(JL,JK) = PFPLVL(JL,JK) + ZFRACB(JL,JD) * ZUPFLXL(JL,JK,JD) + PFPLVN(JL,JK) = PFPLVN(JL,JK) + ZFRACB(JL,JD) * ZUPFLXN(JL,JK,JD) + ENDDO + ENDDO + ENDIF + +ENDDO !JD + + + +! ----------------------------------------------------------------- + +!* 7. CONSTRUCT MASS FLUX PROFILES (JD=2,3) +! ------------------------------------- + + +!* 7.1 Determine the mixed layer scaling height for JD=2,3 +!* + + +!* 7.2 Construct subcloud / mixed layer mass fluxes +!* - use constant area fraction, and multiply by parcel w +!* +DO JD = 2,KDRAFT + + DO JK=KLEV-1,1,-1 + + DO JL=KIDIA,KFDIA + + IF ( KPBLTYPE(JL)/=0 .AND. ZFRACB(JL,JD)>0._JPRB) THEN + + ZWUH = ZWU2H(JL,JK,JD)**0.5_JPRB + + PMFLX(JL,JK,JD) = ZFRACB(JL,JD) * ZWUH * ZRHOH(JL,JK) + + IF (JD == 3 .AND. JK >= KPLCL(JL,3) ) THEN + ! do only below LCL !! + + PMFLX(JL,JK,JD) = 0.35_JPRB * 0.1_JPRB * ZWSTAR(JL) * & + & ZRHOH(JL,JK)*(PGEOH(JL,JK)-PGEOH(JL,KLEV))/ & + & (PGEOH(JL,KPLCL(JL,3))-PGEOH(JL,KLEV)) + + !CGL cloud depth correction, if cloud thin then limit + ZDZCLOUD(JL) = MAX(PGEOH(JL,KPTOP(JL,3))*ZRG-PGEOH(JL,KPLCL(JL,3))*ZRG,0._JPRB) + IF( ZDZCLOUD(JL)<400._JPRB ) THEN + PMFLX(JL,JK,JD) = PMFLX(JL,JK,JD) * ZDZCLOUD(JL) / 400._JPRB + ENDIF + + ENDIF + + IF (ZWU2H(JL,JK,JD)>0._JPRB) THEN + ZFRAC(JL,JK,JD) = ZFRACB(JL,JD) + ELSE + ZFRAC(JL,JK,JD) = 0._JPRB + ENDIF + + ENDIF + + ENDDO !JL + + ENDDO !JK + +ENDDO !JD + + +! Do computation for Chi critical dpendency +!First, determine chicritmean in lower half of the +! cloud layer. chicritmean is used to determine +! the fractional detrainment coefficient according +! to De Rooy & Siebesma MWR 2008. In the upper +! half of the cloud layer a linear decreasing +! mass flux to 0 at cloud layer top is prescribed. + +DO JL=KIDIA,KFDIA + + ! In between; determine thetavup of dry updraft (2) + ! This can be used for the thetav flux contribution to TKE + + DO JK=KLEV-1,1,-1 + IF (KPTOP(JL,2) <= JK .AND. KPBLTYPE(JL) > 0) THEN + PTHTVUH(JL,JK,2) = (ZTUH(JL,JK,2) / PEXNH(JL,JK))& + & * (1._JPRB + RETV * ZQUH(JL,JK,2) ) + ENDIF + ENDDO + + IF (KPBLTYPE(JL) == 3 .OR. KPBLTYPE(JL) == 2 ) THEN + + ZSTAR(JL) = ((PGEOH(JL,KPTOP(JL,3))-PGEOH(JL,KLEV))*ZRG+& + & (PGEOH(JL,KPLCL(JL,3))-PGEOH(JL,KLEV))*ZRG)/2._JPRB + ZMINIMUM(JL) = 10000._JPRB + ZMEANCHICRIT(JL) = 0._JPRB + + ! Find level half way the cloud layer + + !CGL added security + IKSTAR(JL) = KPTOP(JL,3) + + DO JK=KPLCL(JL,3),KPTOP(JL,3),-1 + + + IF (ABS((PGEOH(JL,JK)-PGEOH(JL,KLEV))*ZRG - ZSTAR(JL)) < ZMINIMUM(JL)) THEN + ZMINIMUM(JL) = ABS((PGEOH(JL,JK)-PGEOH(JL,KLEV))*ZRG - ZSTAR(JL)) + IKSTAR(JL) = JK + ENDIF + + + ! determine chicrit in cloud layer + + ZTHTVENH(JL,JK) = (ZTENH(JL,JK) / PEXNH(JL,JK))& + & * (1._JPRB + RETV * ZQVENH(JL,JK)& + ! add qice correction + & - ZQLENH(JL,JK) -ZQIENH(JL,JK) ) + ZTHTLUH(JL,JK) = (ZTUH(JL,JK,3) / PEXNH(JL,JK)) -& + & (ZLAT2CP/PEXNH(JL,JK)*ZQCUH(JL,JK,3)) + ! N.B. ZQCUH is initialized with ql and qi from the environment!?! + + ZTHTVUH(JL,JK) = (ZTUH(JL,JK,3)/ PEXNH(JL,JK))& + & * (1._JPRB + RETV * ZQUH(JL,JK,3)& + & - ZQCUH(JL,JK,3)) + PTHTVUH(JL,JK,3)=ZTHTVUH(JL,JK) + ZTHTLEH(JL,JK) = (ZTENH(JL,JK) / PEXNH(JL,JK)) -& + & ZLAT2CP/ PEXNH(JL,JK)*& + & ZQLENH(JL,JK) + ZESW=ESATW(ZTUH(JL,JK,3)) + ZESI=ESATI(ZTUH(JL,JK,3)) + ZFAC = ZQIENH(JL,JK) / (ZQLENH(JL,JK) +ZQIENH(JL,JK) + 1.0E-20_JPRB) ! Weighting according to cloud condensate + ZES = ZESI*ZFAC + ZESW*(1._JPRB-ZFAC) + ZQSATU(JL,JK) = 0.62198_JPRB*ZES/(MAX(ZES,PAPHM1(JL,JK))-0.37802_JPRB*ZES) + ! Above boiling point for PAPHM1(JL,JK) < ZES --> no condensation. May happen in stratosphere, ZQSATU becomes 1. + ZDQSDTU(JL,JK) = ZEL2R * ZQSATU(JL,JK)/(ZTUH(JL,JK,3) * ZTUH(JL,JK,3)) + ZGAMMA(JL,JK) = ZLAT2CP*ZDQSDTU(JL,JK) + ZDUMFUNC(JL,JK) = (1._JPRB/(1._JPRB+ZGAMMA(JL,JK)))*& + & ((ZQTENH(JL,JK)-PQTUH(JL,JK,3)) -& + & PEXNH(JL,JK) * ZDQSDTU(JL,JK) *& + & (ZTHTLEH(JL,JK) - ZTHTLUH(JL,JK))) + ZCHICRIT(JL,JK) = (ZTHTVENH(JL,JK)-ZTHTVUH(JL,JK))/& + & (ZTHTLUH(JL,JK)*(RETV*(ZQTENH(JL,JK) -& + & PQTUH(JL,JK,3)) - (1._JPRB +RETV)*& + & ZDUMFUNC(JL,JK)) + (ZTHTLEH(JL,JK) -& + & ZTHTLUH(JL,JK)) * (1._JPRB + RETV*& + & PQTUH(JL,JK,3) - (1._JPRB + RETV)*& + & ZQCUH(JL,JK,3)) + ZLAT2CP/PEXNH(JL,JK)*& + & ZDUMFUNC(JL,JK)) + + !CGL ; do some safety + + ZCHICRIT(JL,JK) = MIN(ZCHICRIT(JL,JK),1._JPRB) + + ENDDO !JK + + ! Calculate weighted mean chicrit over lower half cloud layer + ! Exclude cloud base level (see de Rooy & Siebesma MWR 2008) + + IF (KPLCL(JL,3)-IKSTAR(JL) > 1) THEN + DO JK= KPLCL(JL,3)-1,IKSTAR(JL),-1 + ZMEANCHICRIT(JL)=ZMEANCHICRIT(JL)+ZCHICRIT(JL,JK)*& + & (PGEOM1(JL,JK)*ZRG-PGEOM1(JL,JK+1)*ZRG) + ENDDO + ZMEANCHICRIT(JL)=ZMEANCHICRIT(JL)/(PGEOM1(JL,IKSTAR(JL))*ZRG-& + & PGEOM1(JL,KPLCL(JL,3))*ZRG) + + ! Fraction of mass flux that is left half way the cloud layer (ZFRACMB) + ! is determined using LES based relation between mean chicrit and ZFRACMB + ! Small adjustment to somewhat more active Mass flux profiles + ! Note that the parameterization counteracts changes in the relation, therefore + ! the ultimate differences are small + + ZFRACMB(JL)=MAX(0.05_JPRB,5.24_JPRB*ZMEANCHICRIT(JL)-0.39_JPRB) + ZFRACMB(JL)=MIN(1.0_JPRB,ZFRACMB(JL)) !safety CGL + + + ! Determine (constant) detrainment coefficient + ! with new eps, detr should be adapted + ! However we can also use original detr formulation as long as we also + ! use eps=1/z in the mass flux calculation (the new eps is then only used + ! for the updraft dilution) + ZDETRSHALLOW(JL)=LOG(((PGEOH(JL,IKSTAR(JL))-PGEOH(JL,KLEV))*ZRG)/& + & ((PGEOH(JL,KPLCL(JL,3))-PGEOH(JL,KLEV))*ZRG& + & *ZFRACMB(JL)))/((PGEOH(JL,IKSTAR(JL))-PGEOH(JL,KLEV))*ZRG-& + & (PGEOH(JL,KPLCL(JL,3))-PGEOH(JL,KLEV))*ZRG) + ELSE + ! only for very shallow (less that 2 layers) cloud layers + ZDETRSHALLOW(JL)=0.00275_JPRB + ! the lower assignement only has a meaning if used in combination with + ! extremely thin clouds + ZFRACMB(JL)=0.3_JPRB + ENDIF + + ENDIF ! KPBLTYPE=3 + +ENDDO !JL + + +! end computation by for chicritical + + +!* 7.3 Construct cloudy mass flux profile (JD=3 only) +!* + + +DO JK=KLEV-2,1,-1 + + DO JL=KIDIA,KFDIA + + IF ( KPBLTYPE(JL)/=0 .AND. KPBLTYPE(JL)/=4 .AND. ZFRACB(JL,3)> 0._JPRB ) THEN + + IF (JK>=KPTOP(JL,3) .AND. JK<KPLCL(JL,3)) THEN + + ZWUH = ZWU2H(JL,JK,3)**0.5_JPRB + + ! Cloud layer vertical structure + + ! ZDELTAMINEPS should be named ZEPSMINDELTA + + IF (JK+1 >= IKSTAR(JL)) THEN !lower half cloud layer + + ! With changed eps formulation change zdeltamineps also + + ZDELTAMINEPS(JL,JK+1) = RG/(PGEOH(JL,JK+1)-PGEOH(JL,KLEV))-ZDETRSHALLOW(JL) + + ELSE !upper half cloud layer + ZDELTAMINEPS(JL,JK+1) = -1._JPRB/(PGEOH(JL,KPTOP(JL,3))*ZRG -& + & PGEOH(JL,JK+1)*ZRG) + ENDIF + + ZDZ = (PGEOH(JL,JK) - PGEOH(JL,JK+1))*ZRG + + PMFLX(JL,JK,3) = PMFLX(JL,JK+1,3) * EXP( ZDZ * ( ZDELTAMINEPS(JL,JK+1) ) ) !exact + + ! make a guess at area fraction; + + ZWUH = ZWU2H(JL,JK,3)**0.5_JPRB + ZFRAC(JL,JK,3) = PMFLX(JL,JK,3) / ( ZWUH * ZRHOH(JL,JK) ) + + ENDIF + + ENDIF + + ENDDO !JL + +ENDDO !JK + + + +!* 7.4 Compute some fluxes used in the qt-variance budget in VDFMAIN. +!* + +!* 7.5 Mass flux limit according to CFL criterion +!* (reduce M profiles uniformly by maximum excess) +!* +ZCONS10 = 1.0_JPRB/(RG*PTMST) +DO JD = 2,KDRAFT + DO JL=KIDIA,KFDIA + ZMFS(JL,JD) = 1.0_JPRB ! mass flux scaling value (reduction) + ENDDO +ENDDO + +DO JD = 2,KDRAFT + DO JK=1,KLEV-1 + DO JL=KIDIA,KFDIA + IF ( JK >= KPTOP(JL,JD) .AND. KPTOP(JL,JD)>0) THEN + ZMFMAX = (PAPM1(JL,JK+1)-PAPM1(JL,JK)) * ZCONS10 + IF ( PMFLX(JL,JK,JD) > ZMFMAX ) THEN + ZMFS(JL,JD) = MIN(ZMFS(JL,JD),ZMFMAX/PMFLX(JL,JK,JD)) + ENDIF + ENDIF + ENDDO + ENDDO +ENDDO + +DO JD = 2,KDRAFT + DO JK=1,KLEV + DO JL=KIDIA,KFDIA + PMFLX(JL,JK,JD) = PMFLX(JL,JK,JD)*ZMFS(JL,JD) + ENDDO + ENDDO +ENDDO + + + + +! ----------------------------------------------------------------- + +!* 8. W-SCALE USED IN CLOUD VARIANCE DISSIPATION (VDFMAIN) +! ---------------------------------------------------- + + +!CGL fill this array at the end +PFRACB = ZFRACB + + +! ---------------------------------------------------- +! +! 9. OUTPUT TO BE USED IN VDFEXCU now called from this routine +! to calculate length scale according to Geert Lenderink +! if LHARATU=true +! Call vdfexcuhl to calculate length scales and TKE for use in Harmonie + +IF (LHARATU) THEN + + PBUOY_COR (:,:) = 0.0_JPRB + PWU (:,:) = 0.0_JPRB + DO JL=KIDIA,KFDIA + + DO JK=1,KLEV-1 + PWU (JL,JK) = (MAX( ZWU2H(JL,JK,2),0._JPRB ))**0.5_JPRB + IF (ZWSTAR(JL)*PZPTOP(JL,2).GT.0._JPRB) THEN + ! PBUOY_COR (JL,JK) = ZFRAC(JL,JK,2)* ZWU2H(JL,JK,2)**(1._JPRB/2._JPRB) / ZWSTAR(JL) / PZPTOP(JL,2) + TVEXCSURF = MAX(ZTVEXCSURF(JL,2),0.0_JPRB) + PBUOY_COR (JL,JK) = TVEXCSURF*PWU(JL,JK)& + &/ ZWSTAR(JL) / PZPTOP(JL,2) * RG / PTM1(JL,KLEV) + ENDIF + ENDDO + ENDDO + + DO JK=1,KLEV + JKM=MIN(JK,KLEV-1) + DO JL=KIDIA,KFDIA + ! dqsat/dT correction factor (1+L/cp*dqsat/dT) & alfa + ZESW = ESATW(PTM1(JL,JK)) + ZESI = ESATI(PTM1(JL,JK)) + ZFAC = ZQIENH(JL,JKM) / (ZQLENH(JL,JKM) +ZQIENH(JL,JKM) + 1.0E-20_JPRB) ! Weighting according to cloudcondensate + ZES = ZESI*ZFAC + ZESW*(1._JPRB-ZFAC) + ZE2R = ZEI2R*ZFAC + ZEL2R*(1._JPRB-ZFAC) + ZQSVAR(JL,JK) = 0.62198_JPRB*ZES/(MAX(ZES,PAPM1(JL,JK))-0.37802_JPRB*ZES) + ! Above boiling point for PAPHM1(JL,JK) < ZES --> no condensation. May happen in stratosphere, ZQSATU becomes 1. + ZDQSDTEMP(JL,JK) = ZE2R*ZQSVAR(JL,JK)/PTM1(JL,JK)/PTM1(JL,JK) !dqsat/dT + ! write (913,'(i5,10f14.5)') jk, ZFAC, ZCOR, ZDQSDTEMP(JL,JK), ZDQSDTEMP(JL,JK)/ZQSVAR(JL,JK) + ENDDO + ENDDO + DO JL=KIDIA,KFDIA + DO JK=1,KLEV-1 + +!wc +! energy cascade: Two contributions: 1) subplume turbulence: related to eps +! 2) environmental turbulence: related to decrease M (detr) +! + + IF (KPBLTYPE(JL) == 3 .AND. (KPLCL(JL,3)-KPTOP(JL,3)) > 2) THEN + ZFACCASC(JL,JK) = ZEL*(((PGEOH(JL,JK)-PGEOH(JL,KLEV))*ZRG)/((PGEOH(JL,KPLCL(JL,3))-PGEOH(JL,KLEV))*ZRG))* & + & (1._JPRB/(1._JPRB+(((PGEOH(JL,JK)-PGEOH(JL,KPLCL(JL,3)))*ZRG)/ZWL)**2._JPRB))+ & + & ZET*(1._JPRB/(1._JPRB+(((PGEOH(JL,JK)-PGEOH(JL,KPTOP(JL,3)))*ZRG)/ZWT)**2._JPRB)) + ZFACCASC(JL,JK) = MAX(0._JPRB,(MIN(ZFACCASC(JL,JK),0.01_JPRB))) + ELSE + ZFACCASC(JL,JK) = 0.002_JPRB + ENDIF + + ZENCASC(JL,JK) = 0.5_JPRB*ZEPS(JL,JK,2)*ZWU2H(JL,JK,2)*PMFLX(JL,JK,2) + & + & ZFACCASC(JL,JK)*ZWU2H(JL,JK,3)*PMFLX(JL,JK,3) + + ENDDO + ENDDO + ! + ! if LHARATU=true + ! Call vdfexcuhl to calculate length scales and TKE for use in Harmonie + ! + ! + !* EXCHANGE COEFFICIENTS ABOVE THE SURFACE LAYER + + CALL VDFEXCUHL(YDVDF,YDEPHY,KIDIA,KFDIA,KLON,KLEV,PTMST,PUM1,PVM1,PTM1,PQM1,PLM1,PIM1,ZSLGM1,ZQTM1,PKMFL,PKHFL,PKQFL,PAPHM1,& + & PAPM1,PGEOM1,PGEOH,PEXNF,ZZI,KPBLTYPE,KDRAFT,ZQSVAR,ZDQSDTEMP,PBUOY_COR,ZENCASC,PWU,& + & YSPP_RFAC_TWOC,YSPP_RZC_H,YSPP_RZL_INF, & + & PTKE,PMFLX,ZLENGTH_M,ZLENGTH_H) + +ENDIF ! LHARATU + +END ASSOCIATE +IF (LHOOK) CALL DR_HOOK('VDFHGHTNHL',1,ZHOOK_HANDLE) + +END SUBROUTINE VDFHGHTNHL diff --git a/src/arome/ext/yomparar.F90 b/src/arome/ext/yomparar.F90 index 8c07934b948e9d72b4861a978f0925b6619fe707..808083cd3ba6fd2c3f191e7afe02aaf3f5de40ba 100644 --- a/src/arome/ext/yomparar.F90 +++ b/src/arome/ext/yomparar.F90 @@ -26,7 +26,7 @@ INTEGER(KIND=JPIM) :: NSWB_MNH !number of SW bands for surface ! (must be equal to NSW !!) INTEGER(KIND=JPIM) :: NGPAR !number of fields in the buffer containing ! the 2D pseudo-historical variables. -INTEGER(KIND=JPIM) :: MINPRR !pointer on INPRR +INTEGER(KIND=JPIM) :: MINPRR !pointer on INPRR INTEGER(KIND=JPIM) :: MINPRS !pointer on INPRS INTEGER(KIND=JPIM) :: MINPRG !pointer on INPRG INTEGER(KIND=JPIM) :: MACPRR !pointer on ACPRR @@ -36,10 +36,10 @@ INTEGER(KIND=JPIM) :: MALBDIR !pointer on ALBDIR INTEGER(KIND=JPIM) :: MALBSCA !pointer on ALBSCA INTEGER(KIND=JPIM) :: MRAIN !pointer on surface rain INTEGER(KIND=JPIM) :: MSNOW !pointer on surface snow -INTEGER(KIND=JPIM) :: MGZ0 !pointer on GZ0 -INTEGER(KIND=JPIM) :: MGZ0H !pointer on GZ0H +INTEGER(KIND=JPIM) :: MGZ0 !pointer on GZ0 +INTEGER(KIND=JPIM) :: MGZ0H !pointer on GZ0H INTEGER(KIND=JPIM) :: MVQS !pointer on surface moisture -INTEGER(KIND=JPIM) :: MVTS !pointer on surface temperature +INTEGER(KIND=JPIM) :: MVTS !pointer on surface temperature INTEGER(KIND=JPIM) :: MVEMIS !pointer on surface emissivity INTEGER(KIND=JPIM) :: MSWDIR !pointer on SW direct surface flux INTEGER(KIND=JPIM) :: MSWDIF !pointer on SW surface diffuse flux @@ -53,19 +53,28 @@ LOGICAL :: LOSEDIC ! activate cloud sedimentation LOGICAL :: LOWARM ! see OWARM in mesoNH LOGICAL :: LOSIGMAS ! activate calculation of variance of departure to ! saturation in turb scheme (to be used in subgrid condensation) -LOGICAL :: LOLSMC ! Land/sea mask for cloud droplet number conc. +LOGICAL :: LOLSMC ! Land/sea mask for cloud droplet number conc. LOGICAL :: LOTOWNC ! Town mask for cloud droplet number conc. LOGICAL :: LOCND2 ! Separate solid and liquid phase -LOGICAL :: LGRSN ! Turn graupel to snow for high supersaturation wrt ice +LOGICAL :: LKOGAN ! Use Kogan autocoversion of liquid +LOGICAL :: LMODICEDEP ! Logical switch for alternative dep/evap of ice +LOGICAL :: LICERAD ! Assume higher fraction of condensate for + ! ice/snow/graupel than the actual cloud cover in + ! radiation REAL(KIND=JPRB) :: RADGR ! Tuning of ice for radiation, TO BE REMOVED REAL(KIND=JPRB) :: RADSN ! Tuning of ice for radiation, TO BE REMOVED REAL(KIND=JPRB) :: VSIGQSAT ! coeff applied to qsat variance contribution ! for subgrid condensation +! Constants / tuning parameters for possible modifying some processes related to +! graupeln in RFRMIN(1:8), IN - concentration in RFRMIN(9) and Kogan +! autoconversion in RFRMIN(10:11). +REAL(KIND=JPRB) :: RFRMIN(40) + ! switches for MF scheme (Pergaud et al) -CHARACTER (LEN=4) :: CMF_UPDRAFT ! Type of Mass Flux Scheme +CHARACTER (LEN=4) :: CMF_UPDRAFT ! Type of Mass Flux Scheme ! 'NONE','DUAL', 'EDKF', 'RHCJ' or 'RAHA' CHARACTER (LEN=4) :: CMF_CLOUD ! type of cloud scheme associated with MF Scheme ! 'NONE', 'DIRE' or 'STAT' @@ -76,20 +85,22 @@ LOGICAL :: LLCRIT ! True if temperature dependent LOGICAL :: LTOTPREC ! True if precipitation tendencies ! from the sub-grid scheme are ! added to the total precip tendencies. +LOGICAL :: LTOTPRECL ! As LTOTPREC but updraft fraction untouched +LOGICAL :: LHGT_QS ! Switch for height dependent VQSIGSAT ! Tuning variables for MF scheme REAL(KIND=JPRB) :: XALP_PERT ! coefficient for the perturbation of - ! theta_l and r_t at the first level of + ! theta_l and r_t at the first level of ! the updraft -REAL(KIND=JPRB) :: XABUO ! coefficient of the buoyancy term in the w_up equation +REAL(KIND=JPRB) :: XABUO ! coefficient of the buoyancy term in the w_up equation REAL(KIND=JPRB) :: XBENTR ! coefficient of the entrainment term in the w_up equation REAL(KIND=JPRB) :: XBDETR ! coefficient of the detrainment term in the w_up equation -REAL(KIND=JPRB) :: XCMF ! coefficient for the mass flux at the first level - ! of the updraft (closure) +REAL(KIND=JPRB) :: XCMF ! coefficient for the mass flux at the first level + ! of the updraft (closure) REAL(KIND=JPRB) :: XENTR_MF ! entrainment constant (m/Pa) = 0.2 (m) REAL(KIND=JPRB) :: XCRAD_MF ! cloud radius in cloudy part -REAL(KIND=JPRB) :: XENTR_DRY ! coefficient for entrainment in dry part +REAL(KIND=JPRB) :: XENTR_DRY ! coefficient for entrainment in dry part REAL(KIND=JPRB) :: XDETR_DRY ! coefficient for detrainment in dry part REAL(KIND=JPRB) :: XDETR_LUP ! coefficient for detrainment in dry part REAL(KIND=JPRB) :: XKCF_MF ! coefficient for cloud fraction @@ -127,7 +138,7 @@ INTEGER(KIND=JPIM) :: NPTP ! index in NPROMA paquet where the print will be done INTEGER(KIND=JPIM) :: NPRINTFR !frequency of physical prints in apl_arome !* for other diagnostics -! wmax per vertical level +! wmax per vertical level LOGICAL :: LDIAGWMAX !activate print of WMAX in apl_arome INTEGER(KIND=JPIM) :: NDIAGWMAX ! frequency of preceding prints (in time step) @@ -138,6 +149,8 @@ INTEGER(KIND=JPIM) :: NDTCHEM ! time step factor for chemical scheme LOGICAL :: LAROBU_ENABLE ! for MNH budget anlysis !* for turbulence scheme REAL(KIND=JPRB) :: XLINI ! minimum bl89 mixing length +LOGICAL :: LSTATNW ! updated full statistical cloud scheme + ! (yet only to be used in combination with EDMFm convection (DUAL)) LOGICAL :: LHARATU ! if true RACMO turbulence is used ! (yet only to be used in combination with EDMFm convection (DUAL)) !* Subgrid precipitation scheme @@ -185,6 +198,11 @@ LOGICAL :: LSEDIM_AFTER !Sedimentation done after microphysics (.TRUE.) or befor REAL(KIND=JPRB) :: XSPLIT_MAXCFL ! Maximum CFL number allowed for SPLIT sedimentation scheme REAL(KIND=JPRB) :: XVDEPOSC ! Water deposition speed on vegetation (LDEPOSC) (DEPO_ICE3) ! +! for negative deposition (=sublimation) of qs,qg + LOGICAL :: LDEPSG ! activate namelist read of sublimation factors +REAL(KIND=JPRB) :: RDEPSRED ! tuning factor of sublimation of snow +REAL(KIND=JPRB) :: RDEPGRED ! tuning factor of sublimation of graupel +! !* For total cumulative 3D prec flux for MOCAGE LOGICAL :: LFPREC3D ! Switch on total cumulative 3D prec flux output (for MOCAGE use) !* For radiation : diff --git a/src/arome/micro/ini_rain_ice.F90 b/src/arome/micro/ini_rain_ice.F90 index 4068a1ab9e3d1c6f609b98deee59934a30abfbb2..6e2f1077d6fbc9c0db18b9d922b6c1bfe563bebd 100644 --- a/src/arome/micro/ini_rain_ice.F90 +++ b/src/arome/micro/ini_rain_ice.F90 @@ -399,7 +399,7 @@ XLBDAS_MAX = 100000.0 XLBDAG_MAX = 100000.0 ! ZCONC_MAX = 1.E6 ! Maximal concentration for falling particules set to 1 per cc -XLBDAS_MAX = ( ZCONC_MAX/XCCS )**(1./XCXS) +IF(XCCS>0. .AND. XCXS>0. )XLBDAS_MAX = ( ZCONC_MAX/XCCS )**(1./XCXS) ! IF (HCLOUD == 'ICE4' .OR. HCLOUD == 'OLD4') THEN ALLOCATE( XRTMIN(7) ) @@ -545,16 +545,26 @@ X0DEPS = (4.0*XPI)*XCCS*XC1S*XF0S*MOMG(XALPHAS,XNUS,1.) X1DEPS = (4.0*XPI)*XCCS*XC1S*XF1S*SQRT(XCS)*MOMG(XALPHAS,XNUS,0.5*XDS+1.5) XEX0DEPS = XCXS-1.0 XEX1DEPS = XCXS-0.5*(XDS+3.0) +XRDEPSRED = 1.0 ! X0DEPG = (4.0*XPI)*XCCG*XC1G*XF0G*MOMG(XALPHAG,XNUG,1.) X1DEPG = (4.0*XPI)*XCCG*XC1G*XF1G*SQRT(XCG)*MOMG(XALPHAG,XNUG,0.5*XDG+1.5) XEX0DEPG = XCXG-1.0 XEX1DEPG = XCXG-0.5*(XDG+3.0) +XRDEPGRED = 1.0 ! X0DEPH = (4.0*XPI)*XCCH*XC1H*XF0H*MOMG(XALPHAH,XNUH,1.) X1DEPH = (4.0*XPI)*XCCH*XC1H*XF1H*SQRT(XCH)*MOMG(XALPHAH,XNUH,0.5*XDH+1.5) XEX0DEPH = XCXH-1.0 XEX1DEPH = XCXH-0.5*(XDH+3.0) + +GFLAG = .TRUE. +IF (GFLAG) THEN + WRITE(UNIT=KLUOUT,FMT='(" factors sublimation snow/groupel")') + WRITE(UNIT=KLUOUT,FMT='(" mod sublim snow =",E13.6)') XRDEPSRED + WRITE(UNIT=KLUOUT,FMT='(" mod sublim graupel =",E13.6)') XRDEPGRED +END IF + ! !* 5.3 Constants for pristine ice autoconversion ! @@ -1047,6 +1057,26 @@ IF( (KDRYLBDAG/=NDRYLBDAG) .OR. (KDRYLBDAR/=NDRYLBDAR) .OR. (KND/=IND) .OR. & PFDINFTY,XKER_RDRYG ) WRITE(UNIT=KLUOUT,FMT='(" Read XKER_RDRYG")') END IF + +! 8.2.6 Constants for possible modifying some processes related to +! graupeln in XFRMIN(1:8), IN - concentration in XFRMIN(9) and Kogan +! autoconversion in XFRMIN(10:11). May be used for e.g. ensemble spread + XFRMIN(1:6)=0. + XFRMIN(7:9)=1. + XFRMIN(10) =10. + XFRMIN(11) =1. + XFRMIN(12) =100. !0 in suparar + XFRMIN(13) =1.0E-15 + XFRMIN(14) =120. + XFRMIN(15) =1.0E-4 + XFRMIN(16:20)=0. + XFRMIN(21:22)=1. + XFRMIN(23)=0.5 + XFRMIN(24)=1.5 + XFRMIN(25)=30. + XFRMIN(26:38)=0. + XFRMIN(39)=0.25 + XFRMIN(40)=0.15 ! ! !------------------------------------------------------------------------------- diff --git a/src/arome/micro/modi_rain_ice_old.F90 b/src/arome/micro/modi_rain_ice_old.F90 index 2d09cf14c7b33764be058a18d44b478df3bf8779..81c0c368cdaf3ad7d927d7deaa3bc5a13c0fe701 100644 --- a/src/arome/micro/modi_rain_ice_old.F90 +++ b/src/arome/micro/modi_rain_ice_old.F90 @@ -3,26 +3,27 @@ ! #################### ! INTERFACE - SUBROUTINE RAIN_ICE_OLD ( OSEDIC, OCND2, LGRSN, HSEDIM, HSUBG_AUCV_RC, OWARM, & + SUBROUTINE RAIN_ICE_OLD ( OSEDIC, OCND2, LKOGAN, LMODICEDEP, HSEDIM, HSUBG_AUCV_RC, OWARM, & KKA, KKU, KKL, & KSPLITR, PTSTEP, KRR, & PDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR,& + PICLDFR, PWCLDFR, PSSIO, PSSIU, PIFR, & PTHT, PRVT, PRCT, PRRT, PRIT, PRST, & PRGT, PTHS, PRVS, PRCS, PRRS, PRIS, PRSS, PRGS, & PINPRC, PINPRR, PEVAP3D, & PINPRS, PINPRG, PSIGS, PSEA, PTOWN, & - PRHT, PRHS, PINPRH, PFPR, & YDDDH, YDLDDH, YDMDDH, & - YSPP_ICENU,YSPP_KGN_ACON,YSPP_KGN_SBGR) + PICENU, PKGN_ACON, PKGN_SBGR, & + PRHT, PRHS, PINPRH, PFPR) ! USE DDH_MIX, ONLY : TYP_DDH USE YOMLDDH, ONLY : TLDDH USE YOMMDDH, ONLY : TMDDH -USE MODD_SPP_TYPE, ONLY : TSPP_CONFIG_MPA ! LOGICAL, INTENT(IN) :: OSEDIC ! Switch for droplet sedim. LOGICAL, INTENT(IN) :: OCND2 ! Logical switch to separate liquid and ice -LOGICAL, INTENT(IN) :: LGRSN +LOGICAL, INTENT(IN) :: LKOGAN ! Logical switch for using Kogan autoconversion of liquid. +LOGICAL, INTENT(IN) :: LMODICEDEP ! Logical switch for alternative dep/evap of ice CHARACTER(LEN=4), INTENT(IN) :: HSEDIM ! Sedimentation scheme CHARACTER(LEN=4), INTENT(IN) :: HSUBG_AUCV_RC ! Switch for rc->rr Subgrid autoconversion ! Kind of Subgrid autoconversion method @@ -39,7 +40,7 @@ REAL, INTENT(IN) :: PTSTEP ! Double Time step ! (single if cold start) INTEGER, INTENT(IN) :: KRR ! Number of moist variable ! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZZ ! Layer thikness (m) +REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZZ ! Layer thickness (m) REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! Dry density * Jacobian REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF! Reference density REAL, DIMENSION(:,:,:), INTENT(IN) :: PEXNREF ! Reference Exner function @@ -55,8 +56,16 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PRRT ! Rain water m.r. at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PRIT ! Pristine ice m.r. at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PRST ! Snow/aggregate m.r. at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PRGT ! Graupel/hail m.r. at t -! REAL, DIMENSION(:,:,:), INTENT(IN) :: PSIGS ! Sigma_s at t +! input from aro_adjust / condensation with OCND2, dummy if OCND2 = F +REAL, DIMENSION(:,:,:), INTENT(IN) :: PICLDFR ! ice cloud fraction +REAL, DIMENSION(:,:,:), INTENT(IN) :: PWCLDFR ! water or mixed-phase cloud fraction +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSSIO ! Super-saturation with respect to ice in the + ! supersaturated fraction +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSSIU ! Sub-saturation with respect to ice in the + ! subsaturated fraction +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PIFR ! Ratio cloud ice moist part to dry part +! input from aro_adjust / condensation with OCND2 END. ! REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHS ! Theta source REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRVS ! Water vapor m.r. source @@ -65,7 +74,6 @@ REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRRS ! Rain water m.r. source REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRIS ! Pristine ice m.r. source REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRSS ! Snow/aggregate m.r. source REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRGS ! Graupel m.r. source - ! REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRC! Cloud instant precip REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRR! Rain instant precip @@ -74,16 +82,14 @@ REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRS! Snow instant precip REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRG! Graupel instant precip REAL, DIMENSION(:,:), INTENT(IN) :: PSEA ! Sea Mask REAL, DIMENSION(:,:), INTENT(IN) :: PTOWN! Fraction that is town - -REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(IN) :: PRHT ! Hail m.r. at t -REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(INOUT) :: PRHS ! Hail m.r. source -REAL, DIMENSION(:,:), OPTIONAL, INTENT(INOUT) :: PINPRH! Hail instant precip -REAL, DIMENSION(:,:,:,:), OPTIONAL, INTENT(OUT) :: PFPR ! upper-air precipitation fluxes -TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH -TYPE(TLDDH), INTENT(IN) :: YDLDDH -TYPE(TMDDH), INTENT(IN) :: YDMDDH - -TYPE(TSPP_CONFIG_MPA), OPTIONAL, INTENT(IN) :: YSPP_ICENU,YSPP_KGN_ACON,YSPP_KGN_SBGR +TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH +TYPE(TLDDH), INTENT(IN) :: YDLDDH +TYPE(TMDDH), INTENT(IN) :: YDMDDH +REAL, DIMENSION(:,:), INTENT(IN) :: PICENU, PKGN_ACON, PKGN_SBGR +REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(IN) :: PRHT ! Hail m.r. at t +REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(INOUT) :: PRHS ! Hail m.r. source +REAL, DIMENSION(:,:), OPTIONAL, INTENT(INOUT) :: PINPRH ! Hail instant precip +REAL, DIMENSION(:,:,:,:), OPTIONAL, INTENT(OUT) :: PFPR ! upper-air precipitation fluxes ! END SUBROUTINE RAIN_ICE_OLD END INTERFACE diff --git a/src/arome/micro/rain_ice_old.F90 b/src/arome/micro/rain_ice_old.F90 index c1ac467d1833cbb0ac48973016fd45e58e0e6b9f..e7b5994e23cda700e473725afa0ac7ea66e9fbcc 100644 --- a/src/arome/micro/rain_ice_old.F90 +++ b/src/arome/micro/rain_ice_old.F90 @@ -1,15 +1,16 @@ ! ######spl - SUBROUTINE RAIN_ICE_OLD ( OSEDIC, OCND2, LGRSN, HSEDIM, HSUBG_AUCV, OWARM, & + SUBROUTINE RAIN_ICE_OLD ( OSEDIC, OCND2, LKOGAN, LMODICEDEP, HSEDIM, HSUBG_AUCV_RC, OWARM, & KKA,KKU,KKL, & KSPLITR, PTSTEP, KRR, & PDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR,& + PICLDFR, PWCLDFR, PSSIO, PSSIU, PIFR, & PTHT, PRVT, PRCT, PRRT, PRIT, PRST, & PRGT, PTHS, PRVS, PRCS, PRRS, PRIS, PRSS, PRGS, & PINPRC, PINPRR, PEVAP3D, & PINPRS, PINPRG, PSIGS, PSEA, PTOWN, & - PRHT, PRHS, PINPRH, PFPR, & YDDDH, YDLDDH, YDMDDH, & - YSPP_ICENU,YSPP_KGN_ACON,YSPP_KGN_SBGR) + PICENU, PKGN_ACON, PKGN_SBGR, & + PRHT, PRHS, PINPRH, PFPR) USE PARKIND1, ONLY : JPRB USE YOMHOOK , ONLY : LHOOK, DR_HOOK @@ -154,7 +155,11 @@ !! (C. Abiven, Y. Léauté, V. Seigner, S. Riette) Phasing of Turner rain subgrid param !! (K.I Ivarsson 2014) OCND2-option, possible to use derived cloud dropelt conc for cloudphysics, !! replace XMV/XMD with XEPSILO +!! (K.I Ivarsson 2016) LKOGAN-option, possible to use Kogan autoconversion of liquid regardless of OCND2 option. +!! (K.I Ivarsson 2018-02 New varibles for input/ output mainly for optimation. Some updates of OCND2 option. +!! Sedimented ice should be preciptation !! (U. Andrae Dec 2020) Introduce SPP for HARMONIE-AROME +!! (C. Wittmann Jan 2021) Introduce sublimation factor tuning ! ! !* 0. DECLARATIONS @@ -167,7 +172,6 @@ USE MODD_RAIN_ICE_DESCR USE MODD_RAIN_ICE_PARAM USE MODD_PARAM_ICE USE MODD_BUDGET -USE MODD_SPP_TYPE USE MODD_LES USE MODE_BUDGET, ONLY: BUDGET_DDH USE MODI_GAMMA @@ -177,6 +181,7 @@ USE MODE_TIWMX_TAB, ONLY : TIWMX_TAB USE DDH_MIX, ONLY : TYP_DDH USE YOMLDDH, ONLY : TLDDH USE YOMMDDH, ONLY : TMDDH + ! IMPLICIT NONE ! @@ -186,9 +191,10 @@ IMPLICIT NONE ! LOGICAL, INTENT(IN) :: OSEDIC ! Switch for droplet sedim. LOGICAL, INTENT(IN) :: OCND2 ! Logical switch to separate liquid and ice -LOGICAL, INTENT(IN) :: LGRSN +LOGICAL, INTENT(IN) :: LKOGAN ! Logical switch for using Kogan autoconversion of liquid. +LOGICAL, INTENT(IN) :: LMODICEDEP ! Logical switch for alternative dep/evap of ice CHARACTER(LEN=4), INTENT(IN) :: HSEDIM ! Sedimentation scheme -CHARACTER(LEN=4), INTENT(IN) :: HSUBG_AUCV +CHARACTER(LEN=4), INTENT(IN) :: HSUBG_AUCV_RC ! Switch for rc->rr Subgrid autoconversion ! Kind of Subgrid autoconversion method LOGICAL, INTENT(IN) :: OWARM ! .TRUE. allows raindrops to ! form by warm processes @@ -203,14 +209,14 @@ REAL, INTENT(IN) :: PTSTEP ! Double Time step ! (single if cold start) INTEGER, INTENT(IN) :: KRR ! Number of moist variable ! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZZ ! Layer thikness (m) +REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZZ ! Layer thickness (m) REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! Dry density * Jacobian REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF! Reference density REAL, DIMENSION(:,:,:), INTENT(IN) :: PEXNREF ! Reference Exner function REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABST ! absolute pressure at t ! REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCIT ! Pristine ice n.c. at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PCLDFR! Convective Mass Flux Cloud fraction +REAL, DIMENSION(:,:,:), INTENT(IN) :: PCLDFR ! Cloud fraction ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHT ! Theta at time t REAL, DIMENSION(:,:,:), INTENT(IN) :: PRVT ! Water vapor m.r. at t @@ -220,6 +226,15 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PRIT ! Pristine ice m.r. at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PRST ! Snow/aggregate m.r. at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PRGT ! Graupel/hail m.r. at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PSIGS ! Sigma_s at t +! input from aro_adjust / condensation with OCND2, dummy if OCND2 = F +REAL, DIMENSION(:,:,:), INTENT(IN) :: PICLDFR ! ice cloud fraction +REAL, DIMENSION(:,:,:), INTENT(IN) :: PWCLDFR ! water or mixed-phase cloud fraction +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSSIO ! Super-saturation with respect to ice in the + ! supersaturated fraction +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSSIU ! Sub-saturation with respect to ice in the + ! subsaturated fraction +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PIFR ! Ratio cloud ice moist part to dry part +! input from aro_adjust / condensation with OCND2 END. ! REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHS ! Theta source REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRVS ! Water vapor m.r. source @@ -236,15 +251,14 @@ REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRS! Snow instant precip REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRG! Graupel instant precip REAL, DIMENSION(:,:), INTENT(IN) :: PSEA ! Sea Mask REAL, DIMENSION(:,:), INTENT(IN) :: PTOWN! Fraction that is town -REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(IN) :: PRHT ! Hail m.r. at t -REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(INOUT) :: PRHS ! Hail m.r. source -REAL, DIMENSION(:,:), OPTIONAL, INTENT(INOUT) :: PINPRH! Hail instant precip -REAL, DIMENSION(:,:,:,:), OPTIONAL, INTENT(OUT) :: PFPR ! upper-air precipitation fluxes -TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH -TYPE(TLDDH), INTENT(IN) :: YDLDDH -TYPE(TMDDH), INTENT(IN) :: YDMDDH - -TYPE(TSPP_CONFIG_MPA), OPTIONAL, INTENT(IN) :: YSPP_ICENU,YSPP_KGN_ACON,YSPP_KGN_SBGR +TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH +TYPE(TLDDH), INTENT(IN) :: YDLDDH +TYPE(TMDDH), INTENT(IN) :: YDMDDH +REAL, DIMENSION(:,:), INTENT(IN) :: PICENU, PKGN_ACON, PKGN_SBGR +REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(IN) :: PRHT ! Hail m.r. at t +REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(INOUT) :: PRHS ! Hail m.r. source +REAL, DIMENSION(:,:), OPTIONAL, INTENT(INOUT) :: PINPRH ! Hail instant precip +REAL, DIMENSION(:,:,:,:), OPTIONAL, INTENT(OUT) :: PFPR ! upper-air precipitation fluxes ! !* 0.2 Declarations of local variables : @@ -393,6 +407,8 @@ REAL, DIMENSION(:), ALLOCATABLE & ZSSIU, & ! Sub-saturation with respect to ice in the ! sub-saturated fraction of gridbox ZW2D, & ! Factor for subgridscale calculations + ZXW2D, & ! Ratio cloud ice moist part to dry part + ZXW2D13, & ! ZXW2D**0.333 or other expression for LMODICEDEP=T ZCRYSHA, & ! Ice crystal habit factor ZCI2S, & ! factor to turn cloud ice with few lagre crystals into snow ZCOLF, & ! collision factor cloud liquid to snow / graupel @@ -406,6 +422,7 @@ REAL, DIMENSION(:), ALLOCATABLE & ZBB3W, & ! as ZBB3 but for liquid ZAM3, & ! Meyers IN concentration function ZREDIN, & ! Reduction of IN concentration between 0 and -25 C + ZTIW, & ! Wet bulb temperature ZARTMP, & ! temporary work array ! ******* end logical switch OCND2 ******* ZCC, & ! terminal velocity @@ -422,19 +439,23 @@ REAL :: ZINVTSTEP REAL :: ZRVSOLD,ZTSP,& &ZRSP,ZRISOLD,ZRSSOLD,ZRGSOLD,& ! Function,old ice &ZRISFRC,ZRSSFRC,ZRGSFRC,ZRFRAC,ZRSA,ZRSTS,ZRSB,ZRSDIF,ZR20, & - &ZRSI,ZXW2D,ZXW2D13,ZTC,ZHU,ZTMP,ZQIMAX,ZDICRIT,ZCITRED23,ZCITRED,ZRCW,ZVT,ZST, & + &ZRSI,ZRSW,ZTC,ZHU,ZTMP,ZQIMAX,ZDICRIT,ZCITRED23,ZCITRED,ZRCW,ZVT,ZST, & &ZREDGR,ZREDSN, & ! Possible reduction of the rate of graupel,snow growth ZRSPO, &! Mixing ratio for saturation point for ! supersaturated part of gridbox - ZRSPU ! Mixing ratio for saturation point for - ! subsaturated part of gridbox + ZRSPU, &! Mixing ratio for saturation point for + ! subsaturated part of gridbox + ZKVO, &! factor used for caluclate maximum mass in the ice + ! distubution. + ZTIMESC ! Timescale for conversion lagre ice crystals to snow. + ! distubution. ! ******* end logical switch OCND2 ******* ! SPP arrays REAL, DIMENSION(:), ALLOCATABLE :: ZZICENU,ZZKGN_ACON,ZZKGN_SBGR -REAL, DIMENSION(SIZE(PEXNREF,1)) :: ZICENU,ZKGN_ACON,ZKGN_SBGR - +! Tuning of sublimation (neg. sublimation) +REAL :: ZRDEPSRED, ZRDEPGRED !internal fractions etc, finally saturation ratio over ice 'source' value @@ -448,6 +469,8 @@ CHARACTER (LEN=100) :: YCOMMENT ! Comment string in LFIFM file CHARACTER (LEN=16) :: YRECFM ! Name of the desired field in LFIFM file REAL :: ZCOEFFRCM,ZMU LOGICAL LTEST ! Only for test ! +LOGICAL LCHECKNOISE ! Noise check on/off +LOGICAL LTIW ! Use TIW for graupel melting ( set by XFRMIN(18) ~ 1) ! !------------------------------------------------------------------------------- ! @@ -457,6 +480,7 @@ LOGICAL LTEST ! Only for test ! REAL(KIND=JPRB) :: ZHOOK_HANDLE IF (LHOOK) CALL DR_HOOK('RAIN_ICE_OLD',0,ZHOOK_HANDLE) LTEST=.FALSE. +LCHECKNOISE=.TRUE. IIB=1+JPHEXT IIE=SIZE(PDZZ,1) - JPHEXT IJB=1+JPHEXT @@ -467,113 +491,86 @@ IKT=SIZE(PDZZ,3) IKTB=1+JPVEXT IKTE=IKT-JPVEXT - -!ZICENU(:) = XFRMIN( 9) -!ZKGN_ACON(:) = XFRMIN(10) -!ZKGN_SBGR(:) = XFRMIN(11) - -IF (PRESENT(YSPP_ICENU)) THEN - ! - ! Perturb ICENU - ! - IF (YSPP_ICENU%LPERT) THEN - IF (YSPP_ICENU%LLNN_MEAN1.OR.YSPP_ICENU%LLNN_MEAN1_SELF) THEN - ZMU = -0.5 * (YSPP_ICENU%CMPERT * YSPP_ICENU%SDEV)**2 - ELSE - ZMU = 0.0 - ENDIF -! ZICENU(:) = & -! XFRMIN(9)*EXP(ZMU+YSPP_ICENU%CMPERT*YSPP_ICENU%PGP2DSPP(:)) - WHERE (ZICENU(:) < YSPP_ICENU%CLIP(1) ) ZICENU(:) = YSPP_ICENU%CLIP(1) - WHERE (ZICENU(:) > YSPP_ICENU%CLIP(2) ) ZICENU(:) = YSPP_ICENU%CLIP(2) - ENDIF -ENDIF - -IF (PRESENT(YSPP_KGN_ACON)) THEN - ! - ! Perturb KGN_ACON - ! - IF (YSPP_KGN_ACON%LPERT) THEN - IF (YSPP_KGN_ACON%LLNN_MEAN1.OR.YSPP_KGN_ACON%LLNN_MEAN1_SELF) THEN - ZMU = -0.5 * (YSPP_KGN_ACON%CMPERT * YSPP_KGN_ACON%SDEV)**2 - ELSE - ZMU = 0.0 - ENDIF -! ZKGN_ACON(:) = & -! XFRMIN(10)*EXP(ZMU+YSPP_KGN_ACON%CMPERT*YSPP_KGN_ACON%PGP2DSPP(:)) - WHERE (ZKGN_ACON(:) < YSPP_KGN_ACON%CLIP(1) ) ZKGN_ACON(:) = YSPP_KGN_ACON%CLIP(1) - WHERE (ZKGN_ACON(:) > YSPP_KGN_ACON%CLIP(2) ) ZKGN_ACON(:) = YSPP_KGN_ACON%CLIP(2) - ENDIF -ENDIF - -IF (PRESENT(YSPP_KGN_SBGR)) THEN - ! - ! Perturb KGN_SBGR - ! - IF (YSPP_KGN_SBGR%LPERT) THEN - IF (YSPP_KGN_SBGR%LLNN_MEAN1.OR.YSPP_KGN_SBGR%LLNN_MEAN1_SELF) THEN - ZMU = -0.5 * (YSPP_KGN_SBGR%CMPERT * YSPP_KGN_SBGR%SDEV)**2 - ELSE - ZMU = 0.0 - ENDIF -! ZKGN_SBGR(:) = & -! XFRMIN(11)*EXP(ZMU+YSPP_KGN_SBGR%CMPERT*YSPP_KGN_SBGR%PGP2DSPP(:)) - WHERE (ZKGN_SBGR(:) < YSPP_KGN_SBGR%CLIP(1) ) ZKGN_SBGR(:) = YSPP_KGN_SBGR%CLIP(1) - WHERE (ZKGN_SBGR(:) > YSPP_KGN_SBGR%CLIP(2) ) ZKGN_SBGR(:) = YSPP_KGN_SBGR%CLIP(2) - ENDIF -ENDIF - ! !* 1.2 COMPUTE SOME CONSTANT PARAMETERS ! ZINVTSTEP=1./PTSTEP -ZXW2D = 10. ! ratio of cloud ice water mixing ratio wet to dry - ! part of a gridbox -ZXW2D13 = ZXW2D**0.333 ZCITRED = 0.1 ! ratio of ice crystal concentration wet to dry ! part of a gridbox +ZDICRIT = XFRMIN(15) ! Critical diameter of ice crystal to define what + ! is cloud ice and what is snow (m) + ZCITRED23 = ZCITRED**0.667 +IF (LMODICEDEP) THEN + ZCITRED = 1. + ZTIMESC = XFRMIN(14) + ZDICRIT = (700.*XPI/XAI/6.)**(1./XBI)*ZDICRIT**(3./XBI) ! from spherical diameter to maximum diameter + ZCITRED23 = ZCITRED**(1.+ XLBEXI) + ZKVO = ((XALPHAI*XNUI + XBI -1.)/XALPHAI)**(1./XALPHAI) + ZKVO = ZKVO/ZDICRIT/ZTIMESC + PIFR = 1. +ENDIF -ZDICRIT = 0.0001 ! Critical diameter of ice crystal to define what - ! is cloud ice and what is snow (m) ZREDGR = 1. ! Tuning of the deposition of graupel, 1. is ref. value -ZREDSN = 1. ! Tuning of the deposition of graupel, 1. is ref. value +ZREDSN = 1. ! Tuning of the deposition of snow, 1. is ref. value IF(OCND2) THEN - ZREDGR = 0.25 ! Tuning factor, may be /= 1. - ZREDSN = 0.1 ! Tuning factor, may be /= 1. + IF (.NOT. LMODICEDEP) THEN + ZREDGR = XFRMIN(39) ! Tuning factor, may be /= 1. + ZREDSN = XFRMIN(40) ! Tuning factor, may be /= 1. + ENDIF ENDIF +LTIW=.FALSE. +IF (NINT(XFRMIN(18)) == 1) LTIW=.TRUE. + +ZRDEPSRED = XRDEPSRED +ZRDEPGRED = XRDEPGRED + + ! !* 1.3 COMPUTE THE DROPLET NUMBER CONCENTRATION ! ---------------------------------------- -! (Do it alreay here, since also used with OCND2=T ) +! (Do it already here, since also used with OCND2=T ) IF (OSEDIC.OR.OCND2) THEN ZRAY(:,:,:) = 0. ZZZZ(:,:,IKTE) = PDZZ(:,:,IKTE)*0.5 ZZZT(:,:,IKTE) = PDZZ(:,:,IKTE) - ZCONC_TMP(:,:)=PSEA(:,:)*XCONC_SEA+(1.-PSEA(:,:))*XCONC_LAND - - DO JK=IKTB,IKTE - ZLBC(:,:,JK) = PSEA(:,:)*XLBC(2)+(1.-PSEA(:,:))*XLBC(1) - ZFSEDC(:,:,JK) = (PSEA(:,:)*XFSEDC(2)+(1.-PSEA(:,:))*XFSEDC(1)) - ZFSEDC(:,:,JK) = MAX(MIN(XFSEDC(1),XFSEDC(2)),ZFSEDC(:,:,JK)) - ZCONC3D(:,:,JK)= (1.-PTOWN(:,:))*ZCONC_TMP(:,:)+PTOWN(:,:)*XCONC_URBAN - ZRAY(:,:,JK) = 0.5*((1.-PSEA(:,:))*GAMMA(XNUC+1.0/XALPHAC)/(GAMMA(XNUC)) + & + IF (XFRMIN(26)>0.001) THEN ! Use alternative concentration given by (XFRMIN(26) + ZCONC_TMP(:,:) = XFRMIN(26) + DO JK=IKTB,IKTE + ZLBC(:,:,JK) = 0.5* (XLBC(2)+XLBC(1)) ! Assume "average" distr. func for simplicity + ZFSEDC(:,:,JK) = 0.5* (XFSEDC(2)+XFSEDC(1)) + ZFSEDC(:,:,JK) = MAX(MIN(XFSEDC(1),XFSEDC(2)),ZFSEDC(:,:,JK)) + ZCONC3D(:,:,JK)= ZCONC_TMP(:,:)*PPABST(:,:,JK)/XP00 ! Let it be diluted with decreasing pressure + ZRAY(:,:,JK) = 0.5*( 0.5*GAMMA(XNUC+1.0/XALPHAC)/(GAMMA(XNUC)) + & + 0.5*GAMMA(XNUC2+1.0/XALPHAC2)/(GAMMA(XNUC2))) + ENDDO + ELSE + ZCONC_TMP(:,:)=PSEA(:,:)*XCONC_SEA+(1.-PSEA(:,:))*XCONC_LAND + + DO JK=IKTB,IKTE + ZLBC(:,:,JK) = PSEA(:,:)*XLBC(2)+(1.-PSEA(:,:))*XLBC(1) + ZFSEDC(:,:,JK) = (PSEA(:,:)*XFSEDC(2)+(1.-PSEA(:,:))*XFSEDC(1)) + ZFSEDC(:,:,JK) = MAX(MIN(XFSEDC(1),XFSEDC(2)),ZFSEDC(:,:,JK)) + ZCONC3D(:,:,JK)= (1.-PTOWN(:,:))*ZCONC_TMP(:,:)+PTOWN(:,:)*XCONC_URBAN + ZRAY(:,:,JK) = 0.5*((1.-PSEA(:,:))*GAMMA(XNUC+1.0/XALPHAC)/(GAMMA(XNUC)) + & PSEA(:,:)*GAMMA(XNUC2+1.0/XALPHAC2)/(GAMMA(XNUC2))) - END DO + ENDDO + ENDIF + ZCONC3D(:,:,IKTE)= ZCONC3D(:,:,IKTE)*MAX(0.001,XFRMIN(22)) ZRAY(:,:,:) = MAX(1.,ZRAY(:,:,:)) - ZLBC(:,:,:) = MAX(MIN(XLBC(1),XLBC(2)),ZLBC(:,:,:)) + ZLBC(:,:,:) = MAX(MIN(XLBC(1),XLBC(2)),ZLBC(:,:,:)) DO JK=IKTE-1,IKTB,-1 ZZZT(:,:,JK) = ZZZT(:,:,JK+1) + PDZZ(:,:,JK) ZZZZ(:,:,JK) = ZZZT(:,:,JK) - 0.5*PDZZ(:,:,JK) - END DO + ENDDO ENDIF CALL RAIN_ICE_NUCLEATION @@ -584,25 +581,45 @@ CALL RAIN_ICE_NUCLEATION ! GMICRO(:,:,:) = .FALSE. - IF ( KRR == 7 ) THEN - GMICRO(IIB:IIE,IJB:IJE,IKTB:IKTE) = & +IF (OCND2) THEN + IF ( KRR == 7 ) THEN + GMICRO(IIB:IIE,IJB:IJE,IKTB:IKTE) = & + PSSIO(IIB:IIE,IJB:IJE,IKTB:IKTE)>XFRMIN(12) .OR. & + PRCT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XFRMIN(13) .OR. & + PRRT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XFRMIN(13) .OR. & + PRIT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XFRMIN(13) .OR. & + PRST(IIB:IIE,IJB:IJE,IKTB:IKTE)>XFRMIN(13) .OR. & + PRGT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XFRMIN(13) .OR. & + PRHT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XFRMIN(13) + ELSEIF ( KRR == 6 ) THEN + GMICRO(IIB:IIE,IJB:IJE,IKTB:IKTE) = & + PSSIO(IIB:IIE,IJB:IJE,IKTB:IKTE)>XFRMIN(12) .OR. & + PRCT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XFRMIN(13) .OR. & + PRRT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XFRMIN(13) .OR. & + PRIT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XFRMIN(13) .OR. & + PRST(IIB:IIE,IJB:IJE,IKTB:IKTE)>XFRMIN(13) .OR. & + PRGT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XFRMIN(13) + ENDIF +ELSE + IF ( KRR == 7 ) THEN + GMICRO(IIB:IIE,IJB:IJE,IKTB:IKTE) = & PRCT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(2) .OR. & PRRT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(3) .OR. & PRIT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(4) .OR. & PRST(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(5) .OR. & PRGT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(6) .OR. & PRHT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(7) - ELSE IF( KRR == 6 ) THEN - GMICRO(IIB:IIE,IJB:IJE,IKTB:IKTE) = & + ELSEIF ( KRR == 6 ) THEN + GMICRO(IIB:IIE,IJB:IJE,IKTB:IKTE) = & PRCT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(2) .OR. & PRRT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(3) .OR. & PRIT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(4) .OR. & PRST(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(5) .OR. & PRGT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(6) - END IF - + ENDIF +ENDIF IMICRO = COUNTJV( GMICRO(:,:,:),I1(:),I2(:),I3(:)) -IF( IMICRO >= 0 ) THEN +IF ( IMICRO >= 0 ) THEN ALLOCATE(ZRVT(IMICRO)) ALLOCATE(ZRCT(IMICRO)) ALLOCATE(ZRRT(IMICRO)) @@ -639,23 +656,39 @@ IF( IMICRO >= 0 ) THEN ALLOCATE(ZCOLF(IMICRO)) ALLOCATE(ZACRF(IMICRO)) ALLOCATE(ZCONCM(IMICRO)) + ALLOCATE(ZZKGN_ACON(IMICRO)) + ALLOCATE(ZZKGN_SBGR(IMICRO)) + IF (LTIW) ALLOCATE(ZTIW(IMICRO)) IF (OCND2) THEN - ALLOCATE(ZZZ(IMICRO)) - ALLOCATE(ZDZ(IMICRO)) + ALLOCATE(ZESI(IMICRO)) + ALLOCATE(ZESW(IMICRO)) ALLOCATE(ZSIFRC(IMICRO)) ALLOCATE(ZSSIO(IMICRO)) ALLOCATE(ZSSIU(IMICRO)) ALLOCATE(ZZWC(IMICRO)) ALLOCATE(ZW2D(IMICRO)) + ALLOCATE(ZXW2D(IMICRO)) + ALLOCATE(ZXW2D13(IMICRO)) ALLOCATE(ZCRYSHA(IMICRO)) ALLOCATE(ZCI2S(IMICRO)) - ALLOCATE(ZARTMP(IMICRO)) + IF (LTEST) ALLOCATE(ZARTMP(IMICRO)) ALLOCATE(ZAA2(IMICRO)) ALLOCATE(ZBB3(IMICRO)) ALLOCATE(ZAA2W(IMICRO)) ALLOCATE(ZBB3W(IMICRO)) - ALLOCATE(ZESI(IMICRO)) - ALLOCATE(ZESW(IMICRO)) + ENDIF + IF (OCND2) THEN + IF (LMODICEDEP) THEN + DO JL=1,IMICRO + ZXW2D(JL) = PIFR(I1(JL),I2(JL),I3(JL)) + ZXW2D13(JL)=ZXW2D(JL)**(-XLBEXI) + ENDDO + ELSE + DO JL=1,IMICRO + ZXW2D(JL) = PIFR(I1(JL),I2(JL),I3(JL)) + ZXW2D13(JL)=ZXW2D(JL)**0.333 + ENDDO + ENDIF ENDIF DO JL=1,IMICRO @@ -668,7 +701,7 @@ IF( IMICRO >= 0 ) THEN IF ( KRR == 7 ) ZRHT(JL) = PRHT(I1(JL),I2(JL),I3(JL)) ZCIT(JL) = PCIT(I1(JL),I2(JL),I3(JL)) ZCF(JL) = PCLDFR(I1(JL),I2(JL),I3(JL)) - IF ( HSUBG_AUCV == 'PDF ' .AND. CSUBG_PR_PDF == 'SIGM' ) THEN + IF ( HSUBG_AUCV_RC == 'PDF ' .AND. CSUBG_PR_PDF == 'SIGM' ) THEN ZSIGMA_RC(JL) = PSIGS(I1(JL),I2(JL),I3(JL)) * 2. END IF ZRVS(JL) = PRVS(I1(JL),I2(JL),I3(JL)) @@ -689,6 +722,9 @@ IF( IMICRO >= 0 ) THEN ZCOLF(JL)=1. ! No change from orignal when OCND2 = .FALSE. ZACRF(JL)=1. ! " " " " " ZCONCM(JL)=ZCONC3D(I1(JL),I2(JL),I3(JL))*0.000001 ! From m-3 to cm-3 + IF (LTIW) ZTIW(JL)=TIWMX_TAB(ZPRES(JL),ZZT(JL), ZRVS(JL)*PTSTEP,0._JPRB,ZRSP,ZRSW,0.1_JPRB) + ZZKGN_ACON(JL)=PKGN_ACON(I1(JL),I2(JL)) + ZZKGN_SBGR(JL)=PKGN_SBGR(I1(JL),I2(JL)) IF (OCND2) THEN ZESI(JL) = ESATI(ZZT(JL)) ZESW(JL) = ESATW(ZZT(JL)) @@ -696,8 +732,10 @@ IF( IMICRO >= 0 ) THEN ZBB3(JL) = BB3(ZZT(JL)) ZAA2W(JL)= AA2W(ZZT(JL)) ZBB3W(JL)= BB3W(ZZT(JL)) - ZZZ(JL) = ZZZZ(I1(JL),I2(JL),I3(JL)) - ZDZ(JL) = PDZZ(I1(JL),I2(JL),I3(JL)) + ZSIFRC(JL) = PICLDFR(I1(JL),I2(JL),I3(JL)) + ZSSIO(JL) = PSSIO(I1(JL),I2(JL),I3(JL)) + ZSSIU(JL) = PSSIU(I1(JL),I2(JL),I3(JL)) + ZW2D(JL) = 1./(ZXW2D(JL)*ZSIFRC(JL) + 1. -ZSIFRC(JL)) ZCOLF(JL)=0.00001 ZACRF(JL)=0.00001 IF(ZRCT(JL)>1.0E-10)THEN @@ -768,7 +806,7 @@ IF( IMICRO >= 0 ) THEN !Cloud water split between high and low content part is done here !according to autoconversion option ZRCRAUTC(:) = XCRIAUTC/ZRHODREF(:) ! Autoconversion rc threshold - IF (HSUBG_AUCV == 'NONE') THEN + IF (HSUBG_AUCV_RC == 'NONE') THEN !Cloud water is entirely in low or high part WHERE (ZRCT(:) > ZRCRAUTC(:)) ZHLC_HCF(:) = 1. @@ -790,7 +828,7 @@ IF( IMICRO >= 0 ) THEN ZRF(:) = 0. END WHERE - ELSEIF (HSUBG_AUCV == 'CLFR') THEN + ELSEIF (HSUBG_AUCV_RC == 'CLFR') THEN !Cloud water is only in the cloudy part and entirely in low or high part WHERE (ZCF(:) > 0. ) WHERE (ZRCT(:)/ZCF(:) > ZRCRAUTC(:)) @@ -820,7 +858,7 @@ IF( IMICRO >= 0 ) THEN ZRF(:) = 0. END WHERE - ELSEIF (HSUBG_AUCV == 'PDF ') THEN + ELSEIF (HSUBG_AUCV_RC == 'PDF ') THEN !Cloud water is split between high and low part according to a PDF ! 'HLCRECTPDF' : rectangular PDF form ! 'HLCTRIANGPDF' : triangular PDF form @@ -948,9 +986,9 @@ IF( IMICRO >= 0 ) THEN STOP 'wrong CSUBG_PR_PDF case' ENDIF ELSE - !wrong HSUBG_AUCV case + !wrong HSUBG_AUCV_RC case CALL ABORT - STOP 'wrong HSUBG_AUCV case' + STOP 'wrong HSUBG_AUCV_RC case' ENDIF !Diagnostic of precipitation fraction @@ -1022,7 +1060,7 @@ IF( IMICRO >= 0 ) THEN ! CALL RAIN_ICE_FAST_RI - IF(OCND2)THEN + IF (OCND2.AND.LCHECKNOISE) THEN !* 8 This check is mainly for noise reduction: ! ---------------------------------------- ! Do not override saturation point over ice for temperatures below freezing. @@ -1174,23 +1212,25 @@ IF( IMICRO >= 0 ) THEN DEALLOCATE(ZCOLF) DEALLOCATE(ZACRF) DEALLOCATE(ZCONCM) + DEALLOCATE(ZZKGN_ACON,ZZKGN_SBGR) + IF (LTIW) DEALLOCATE(ZTIW) IF (OCND2) THEN - DEALLOCATE(ZARTMP) - DEALLOCATE(ZZZ) - DEALLOCATE(ZDZ) + DEALLOCATE(ZESI) + DEALLOCATE(ZESW) DEALLOCATE(ZSIFRC) DEALLOCATE(ZSSIO) DEALLOCATE(ZSSIU) DEALLOCATE(ZZWC) DEALLOCATE(ZW2D) + DEALLOCATE(ZXW2D) + DEALLOCATE(ZXW2D13) DEALLOCATE(ZCRYSHA) - DEALLOCATE(ZCI2S) + DEALLOCATE(ZCI2S) DEALLOCATE(ZAA2) DEALLOCATE(ZBB3) DEALLOCATE(ZAA2W) DEALLOCATE(ZBB3W) - DEALLOCATE(ZESI) - DEALLOCATE(ZESW) + IF (LTEST) DEALLOCATE(ZARTMP) ENDIF ! @@ -2030,6 +2070,8 @@ END DO PRIS(:,:,:) = PRIS(:,:,:) * ZINVTSTEP + PINPRS(:,:) = ZWSED(:,:,IKB)/XRHOLW + ! !* 2.4 for aggregates/snow ! @@ -2085,7 +2127,7 @@ END DO ENDDO ENDIF - PINPRS(:,:) = ZWSED(:,:,IKB)/XRHOLW ! in m/s + PINPRS(:,:) = ZWSED(:,:,IKB)/XRHOLW + PINPRS(:,:) ! in m/s (add ice fall) PRSS(:,:,:) = PRSS(:,:,:) * ZINVTSTEP @@ -2262,16 +2304,11 @@ IF( INEGT >= 1 ) THEN ALLOCATE(ZCIT(INEGT)) ; ALLOCATE(ZZT(INEGT)) ; ALLOCATE(ZPRES(INEGT)); + ALLOCATE(ZZICENU(INEGT)); IF (OCND2) THEN ALLOCATE(ZZZ(INEGT)) - ALLOCATE(ZDZ(INEGT)) ALLOCATE(ZSIFRC(INEGT)) - ALLOCATE(ZSSIO(INEGT)) - ALLOCATE(ZSSIU(INEGT)) - ALLOCATE(ZW2D(INEGT)) - ALLOCATE(ZRVS(INEGT)) ALLOCATE(ZAM3(INEGT)) - ALLOCATE(ZARTMP(INEGT)) ALLOCATE(ZREDIN(INEGT)) ALLOCATE(ZESI(INEGT)) ALLOCATE(ZESW(INEGT)) @@ -2281,14 +2318,14 @@ IF( INEGT >= 1 ) THEN ZCIT(JL) = PCIT(I1(JL),I2(JL),I3(JL)) ZZT(JL) = ZT(I1(JL),I2(JL),I3(JL)) ZPRES(JL) = PPABST(I1(JL),I2(JL),I3(JL)) + ZZICENU(JL) = PICENU(I1(JL),I2(JL)) IF (OCND2) THEN - ZRVS(JL)= PRVS(I1(JL),I2(JL),I3(JL)) ZZZ(JL) = ZZZZ(I1(JL),I2(JL),I3(JL)) - ZDZ(JL) = PDZZ(I1(JL),I2(JL),I3(JL)) ZESI(JL) = ESATI(ZZT(JL)) ZESW(JL) = ESATW(ZZT(JL)) - ZAM3(JL) = AM3(ZZT(JL)) + ZAM3(JL) = AM3(MAX(XFRMIN(27),ZZT(JL))) ! Avoid too high IN for very low temp. ZREDIN(JL) = REDIN(ZZT(JL)) + ZSIFRC(JL) = PICLDFR(I1(JL),I2(JL),I3(JL)) ENDIF ENDDO ALLOCATE(ZZW(INEGT)) @@ -2320,12 +2357,13 @@ IF( INEGT >= 1 ) THEN ZZW(:) = 0.0 ZSSI(:) = MIN( ZSSI(:), ZUSW(:) ) ! limitation of SSi according to SSw=0 IF(OCND2)THEN - ZARTMP(:) = -1. - CALL ICECLOUD(INEGT,ZPRES,ZZZ,ZDZ,ZZT,ZRVS,PTSTEP,-1.,ZARTMP, & - & ZXW2D,ZSIFRC,ZSSIO,ZSSIU,ZW2D,ZZW) !note: ZZW is dummy here, not used - - ZZW(:) = ZREDIN(:)* MAX(0.1,((20000.- MIN(20000.,ZZZ(:)))/20000.)**4) & + IF (LMODICEDEP) THEN + ZZW(:) = 5.*EXP(0.304*(XTT-ZZT(:))) + ZZW(:) = MIN(1.,MAX(ZSSI(:)*10.,0.01))*ZZW(:) + ELSE + ZZW(:) = ZREDIN(:)* MAX(0.1,((20000.- MIN(20000.,ZZZ(:)))/20000.)**4) & & *ZAM3(:)*(0.0001 + 0.9999*ZSIFRC(:)) + ENDIF ELSE WHERE( (ZZT(:)<XTT-5.0) .AND. (ZSSI(:)>0.0) ) ZZW(:) = XNU20 * EXP( XALPHA2*ZSSI(:)-XBETA2 ) @@ -2336,8 +2374,7 @@ IF( INEGT >= 1 ) THEN ( ZSSI(:)/ZUSW(:) )**XALPHA1 ) END WHERE ENDIF - - ZZW(:) = ZZW(:) - ZCIT(:) + ZZW(:) = ZZW(:)*ZZICENU(:) - ZCIT(:) IF( MAXVAL(ZZW(:)) > 0.0 ) THEN ! !* 3.1.2 update the r_i and r_v mixing ratios @@ -2371,17 +2408,12 @@ IF( INEGT >= 1 ) THEN DEALLOCATE(ZZT) DEALLOCATE(ZCIT) DEALLOCATE(ZRVT) + DEALLOCATE(ZZICENU) IF (OCND2) THEN DEALLOCATE(ZZZ) - DEALLOCATE(ZDZ) DEALLOCATE(ZSIFRC) - DEALLOCATE(ZSSIO) - DEALLOCATE(ZSSIU) - DEALLOCATE(ZW2D) - DEALLOCATE(ZRVS) DEALLOCATE(ZAM3) DEALLOCATE(ZREDIN) - DEALLOCATE(ZARTMP) DEALLOCATE(ZESI) DEALLOCATE(ZESW) ENDIF @@ -2395,6 +2427,80 @@ IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HENU_BU_RRI',YDDDH ! IF (LHOOK) CALL DR_HOOK('RAIN_ICE_OLD:RAIN_ICE_NUCLEATION',1,ZHOOK_HANDLE) END SUBROUTINE RAIN_ICE_NUCLEATION + REAL FUNCTION ICENUMBER2 (Q_ICE, T3D) + + IMPLICIT NONE + REAL, PARAMETER:: ICE_DENSITY = 890.0 + REAL, PARAMETER:: PI = 3.1415926536 + INTEGER IDX_REI + REAL CORR, REICE, DEICE, Q_ICE, T3D + DOUBLE PRECISION LAMBDA + +!+---+-----------------------------------------------------------------+ +!..Table of lookup values of radiative effective radius of ice crystals +!.. as a function of Temperature from -94C to 0C. Taken from WRF RRTMG +!.. radiation code where it is attributed to Jon Egill Kristjansson +!.. and coauthors. +!+---+-----------------------------------------------------------------+ + + REAL RETAB(95) + DATA RETAB / & + 5.92779, 6.26422, 6.61973, 6.99539, 7.39234, & + 7.81177, 8.25496, 8.72323, 9.21800, 9.74075, 10.2930, & + 10.8765, 11.4929, 12.1440, 12.8317, 13.5581, 14.2319, & + 15.0351, 15.8799, 16.7674, 17.6986, 18.6744, 19.6955, & + 20.7623, 21.8757, 23.0364, 24.2452, 25.5034, 26.8125, & + 27.7895, 28.6450, 29.4167, 30.1088, 30.7306, 31.2943, & + 31.8151, 32.3077, 32.7870, 33.2657, 33.7540, 34.2601, & + 34.7892, 35.3442, 35.9255, 36.5316, 37.1602, 37.8078, & + 38.4720, 39.1508, 39.8442, 40.5552, 41.2912, 42.0635, & + 42.8876, 43.7863, 44.7853, 45.9170, 47.2165, 48.7221, & + 50.4710, 52.4980, 54.8315, 57.4898, 60.4785, 63.7898, & + 65.5604, 71.2885, 75.4113, 79.7368, 84.2351, 88.8833, & + 93.6658, 98.5739, 103.603, 108.752, 114.025, 119.424, & + 124.954, 130.630, 136.457, 142.446, 148.608, 154.956, & + 161.503, 168.262, 175.248, 182.473, 189.952, 197.699, & + 205.728, 214.055, 222.694, 231.661, 240.971, 250.639/ + +!+---+-----------------------------------------------------------------+ +!..From the model 3D temperature field, subtract 179K for which +!.. index value of retab as a start. Value of corr is for +!.. interpolating between neighboring values in the table. +!+---+-----------------------------------------------------------------+ + + IDX_REI = INT(T3D-179.) + IDX_REI = MIN(MAX(IDX_REI,1),95) + CORR = T3D - INT(T3D) + REICE = RETAB(IDX_REI)*(1.-CORR) + RETAB(MIN(95,IDX_REI+1))*CORR + DEICE = 2.*REICE * 1.E-6 + +!+---+-----------------------------------------------------------------+ +!..Now we have the final radiative effective size of ice (as function +!.. of temperature only). This size represents 3rd moment divided by +!.. second moment of the ice size distribution, so we can compute a +!.. number concentration from the mean size and mass mixing ratio. +!.. The mean (radiative effective) diameter is 3./Slope for an inverse +!.. exponential size distribution. So, starting with slope, work +!.. backwords to get number concentration. +!+---+-----------------------------------------------------------------+ + + LAMBDA = 3.0 / DEICE + ICENUMBER2 = Q_ICE * LAMBDA*LAMBDA*LAMBDA / (PI*ICE_DENSITY) + +!+---+-----------------------------------------------------------------+ +!..Example1: Common ice size coming from Thompson scheme is about 30 microns. +!.. An example ice mixing ratio could be 0.001 g/kg for a temperature of -50C. +!.. Remember to convert both into MKS units. This gives N_ice=357652 per kg. +!..Example2: Lower in atmosphere at T=-10C matching ~162 microns in retab, +!.. and assuming we have 0.1 g/kg mixing ratio, then N_ice=28122 per kg, +!.. which is 28 crystals per liter of air if the air density is 1.0. +!+---+-----------------------------------------------------------------+ + + RETURN + END + +! +! ! !------------------------------------------------------------------------------- ! @@ -2504,6 +2610,9 @@ IMPLICIT NONE ( X0DEPS*ZLBDAS(:)**XEX0DEPS + X1DEPS*ZCJ(:)*ZLBDAS(:)**XEX1DEPS ) ZZW(:) = MIN( ZRVS(:),ZZW(:) )*(0.5+SIGN(0.5,ZZW(:))) & - MIN( ZRSS(:),ABS(ZZW(:)) )*(0.5-SIGN(0.5,ZZW(:))) + WHERE (ZZW(:) < 0.0 ) + ZZW(:) = ZZW(:) * ZRDEPSRED + END WHERE ZRSS(:) = ZRSS(:) + ZZW(:) ZRVS(:) = ZRVS(:) - ZZW(:) ZTHS(:) = ZTHS(:) + ZZW(:)*ZLSFACT(:) @@ -2551,14 +2660,11 @@ IMPLICIT NONE ZRIS(:) = ZRIS(:) - ZZW(:) END WHERE - IF(OCND2)THEN ! 3.4.5 B: + IF (OCND2 .AND. .NOT. LMODICEDEP) THEN ! 3.4.5 B: ! Turn ice crystals lagrer than a precribed size into snow: ! (For the moment sperical ice crystals are assumed) ALLOCATE(ZBFT(IMICRO)) - ZZW(:)=0._JPRB - ZZW(:) = MIN(ZPRES(:)/2._JPRB, ZESI(:)) ! es_i, safety limitation - WHERE ( (ZRIS(:)>0.0_JPRB) .AND.(ZSSI(:)>0.001_JPRB) ) ZBFT(:) = 0.5_JPRB*87.5_JPRB*(ZDICRIT)**2*ZAI(:)/ ZSSI(:) ZBFT(:) = PTSTEP/ MAX(PTSTEP,ZBFT(:)*2._JPRB) @@ -2569,6 +2675,33 @@ IMPLICIT NONE DEALLOCATE(ZBFT) ENDIF + IF (OCND2 .AND. LMODICEDEP) THEN ! 3.4.5 B: + ! Turn ice to snow if ice crystal distrubution is such that + ! the ice crystal diameter for the (mass x N_i) maximum + ! is lagrer than a precribed size. + ! (ZDICRIT) The general gamma function is assumed + ALLOCATE(ZBFT(IMICRO)) + DO JL=1,IMICRO + ZZW2(JL) = & + MAX(ZCIT(JL),ICENUMBER2(ZRIS(JL)*PTSTEP,ZZT(JL))*ZRHODREF(JL)) + ENDDO + + WHERE ( ZRIS(:)>XFRMIN(13) .AND.ZCIT(:) > 0. ) + ZZW2(:) = MIN(1.E8,XLBI*( ZRHODREF(:)*ZRIS(:)* PTSTEP/ZZW2(:) )**XLBEXI) ! LAMBDA for ICE + ZBFT(:) = 1. - 0.5**( ZKVO /ZZW2(:)) + ZBFT(:) = MIN(0.9*ZRIS(:)*PTSTEP, ZBFT(:)*ZRIS(:)*PTSTEP) + ZRSS(:) = ZRSS(:) + ZBFT(:) + ZRIS(:) = ZRIS(:) - ZBFT(:) + END WHERE +! DO JL=1,IMICRO + +! IF(ZRIS(JL)>XFRMIN(13) .AND.ZCIT(JL) > 0. ) THEN +! print*,'345JL', ZZW2(JL),ZRIS(JL),ZBFT(JL),ZZT(JL)-XTT +! ENDIF +! ENDDO + DEALLOCATE(ZBFT) + ENDIF + DEALLOCATE(ZCRIAUTI) IF (LBUDGET_RI) CALL BUDGET_DDH ( & UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & @@ -2580,40 +2713,33 @@ IMPLICIT NONE !* 3.4.6 compute the deposition on r_g: RVDEPG ! ! - ZZW2(:) = 0.0 - IF(LGRSN) ZZW2(:) = MAX(0., MIN(1., (1.0E-7 - ZRGS(:))/1.0E-7))* & - & MAX(0.,MIN(1.,ZSSI(:)/0.15)) - + IF (XFRMIN(5)> 1.0E-12 .AND. XFRMIN(6) > 0.01) & + & ZZW2(:) = MAX(0., MIN(1., (XFRMIN(5) - ZRGS(:))/XFRMIN(5)))* & + & MAX(0.,MIN(1.,ZSSI(:)/XFRMIN(6))) + + WHERE ( ZRGT(:)>0.0 ) ZLBDAG(:) = XLBG*( ZRHODREF(:)*MAX( ZRGT(:),XRTMIN(6) ) )**XLBEXG END WHERE ZZW(:) = 0.0 - - IF(LGRSN)THEN - WHERE ( (ZRGT(:)>XRTMIN(6)) .AND. (ZRGS(:)>0.0) ) + WHERE ( (ZRGT(:)>XRTMIN(6)) .AND. (ZRGS(:)>0.0) ) ZZW(:) = ( ZSSI(:)/(ZRHODREF(:)*ZAI(:)) ) * & ( X0DEPG*ZLBDAG(:)**XEX0DEPG + X1DEPG*ZCJ(:)*ZLBDAG(:)**XEX1DEPG ) ZZW(:) = MIN( ZRVS(:),ZZW(:) )*(0.5+SIGN(0.5,ZZW(:))) & - MIN( ZRGS(:),ABS(ZZW(:)) )*(0.5-SIGN(0.5,ZZW(:))) ZZW(:) = ZZW(:)*ZREDGR + WHERE (ZZW(:) < 0.0 ) + ZZW(:) = ZZW(:) * ZRDEPGRED + END WHERE ZRSS(:) = (ZZW(:) + ZRGS(:))* ZZW2(:) + ZRSS(:) ZRGS(:) = (ZZW(:) + ZRGS(:))*(1. - ZZW2(:)) ZRVS(:) = ZRVS(:) - ZZW(:) ZTHS(:) = ZTHS(:) + ZZW(:)*ZLSFACT(:) - END WHERE - ELSE - WHERE ( (ZRGT(:)>XRTMIN(6)) .AND. (ZRGS(:)>0.0) ) - ZZW(:) = ( ZSSI(:)/(ZRHODREF(:)*ZAI(:)) ) * & - ( X0DEPG*ZLBDAG(:)**XEX0DEPG + X1DEPG*ZCJ(:)*ZLBDAG(:)**XEX1DEPG ) - ZZW(:) = MIN( ZRVS(:),ZZW(:) )*(0.5+SIGN(0.5,ZZW(:))) & - - MIN( ZRGS(:),ABS(ZZW(:)) )*(0.5-SIGN(0.5,ZZW(:))) - ZZW(:) = ZZW(:)*ZREDGR - ZRGS(:) = ZRGS(:) + ZZW(:) - ZRVS(:) = ZRVS(:) - ZZW(:) - ZTHS(:) = ZTHS(:) + ZZW(:)*ZLSFACT(:) - END WHERE - END IF + END WHERE + WHERE (ZZW(:) < 0.0 ) + ZZW(:) = ZZW(:) * ZRDEPGRED + END WHERE IF (LBUDGET_TH) CALL BUDGET_DDH ( & @@ -2644,15 +2770,14 @@ IMPLICIT NONE ! !* 4.2 compute the autoconversion of r_c for r_r production: RCAUTR ! - REAL :: ZINHOMFACT REAL(KIND=JPRB) :: ZHOOK_HANDLE IF (LHOOK) CALL DR_HOOK('RAIN_ICE_OLD:RAIN_ICE_WARM',0,ZHOOK_HANDLE) - ZINHOMFACT=10. - - IF(OCND2)THEN + IF (LKOGAN) THEN WHERE( ZRCT(:) > 1.0E-8) ! Closely following Kogan autoconversion - ZZW(:) = 1350.0*ZINHOMFACT* ZCONCM(:)**(-1.79) * ZRCT(:)**2.47 + ZZW(:) = 1350.0*ZZKGN_ACON(:)* ZCONCM(:)**(-1.79) * & + & (ZRCT(:)/(MAX(ZZKGN_SBGR(:),ZCF(:))))**2.47 + ZZW(:) = ZZW(:)*MAX(ZZKGN_SBGR(:),ZCF(:)) ZZW(:) = MIN( ZRCS(:),ZZW(:)) ZRCS(:) = ZRCS(:) - ZZW(:) ZRRS(:) = ZRRS(:) + ZZW(:) @@ -2664,7 +2789,7 @@ IMPLICIT NONE ZRCS(:) = ZRCS(:) - ZZW(:) ZRRS(:) = ZRRS(:) + ZZW(:) END WHERE - ENDIF + ENDIF ! IF (LBUDGET_RC) CALL BUDGET_DDH ( & UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & @@ -2678,7 +2803,7 @@ IMPLICIT NONE IF (CSUBG_RC_RR_ACCR=='NONE') THEN !CLoud water and rain are diluted over the grid box WHERE( ZRCT(:)>XRTMIN(2) .AND. ZRRT(:)>XRTMIN(3) .AND. ZRCS(:)>0.0 ) - ZZW(:) = MIN( ZRCS(:), XFCACCR * ZRCT(:) & + ZZW(:) = MIN( ZRCS(:), XFCACCR * ZRCT(:)*ZACRF(:) & * ZLBDAR(:)**XEXCACCR & * ZRHODREF(:)**(-XCEXVT) ) ZRCS(:) = ZRCS(:) - ZZW(:) @@ -2906,27 +3031,15 @@ IMPLICIT NONE ! ! 5.1.4 riming of the small sized aggregates ! - IF(OCND2)THEN - WHERE ( GRIM(:) ) - ZZW1(:,1) = MIN( ZRCS(:), & + WHERE ( GRIM(:) ) + ZZW1(:,1) = MIN( ZRCS(:), & XCRIMSS * ZZW(:) * ZRCT(:)*ZCOLF(:) & ! RCRIMSS * ZLBDAS(:)**XEXCRIMSS & * ZRHODREF(:)**(-XCEXVT) ) - ZRCS(:) = ZRCS(:) - ZZW1(:,1) - ZRSS(:) = ZRSS(:) + ZZW1(:,1) - ZTHS(:) = ZTHS(:) + ZZW1(:,1)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RCRIMSS)) - END WHERE - ELSE - WHERE ( GRIM(:) ) - ZZW1(:,1) = MIN( ZRCS(:), & - XCRIMSS * ZZW(:) * ZRCT(:) & ! RCRIMSS - * ZLBDAS(:)**XEXCRIMSS & - * ZRHODREF(:)**(-XCEXVT) ) - ZRCS(:) = ZRCS(:) - ZZW1(:,1) - ZRSS(:) = ZRSS(:) + ZZW1(:,1) - ZTHS(:) = ZTHS(:) + ZZW1(:,1)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RCRIMSS)) - END WHERE - ENDIF + ZRCS(:) = ZRCS(:) - ZZW1(:,1) + ZRSS(:) = ZRSS(:) + ZZW1(:,1) + ZTHS(:) = ZTHS(:) + ZZW1(:,1)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RCRIMSS)) + END WHERE ! ! 5.1.5 perform the linear interpolation of the normalized ! "XBS"-moment of the incomplete gamma function @@ -2938,37 +3051,20 @@ IMPLICIT NONE ! 5.1.6 riming-conversion of the large sized aggregates into graupeln ! ! - IF(OCND2)THEN - WHERE ( GRIM(:) .AND. (ZRSS(:)>0.0) ) - ZZW1(:,2) = MIN( ZRCS(:), & + WHERE ( GRIM(:) .AND. (ZRSS(:)>0.0) ) + ZZW1(:,2) = MIN( ZRCS(:), & XCRIMSG * ZRCT(:)*ZCOLF(:) & ! RCRIMSG * ZLBDAS(:)**XEXCRIMSG & * ZRHODREF(:)**(-XCEXVT) & - ZZW1(:,1) ) - ZZW1(:,3) = MIN( ZRSS(:), & - XSRIMCG * ZLBDAS(:)**XEXSRIMCG & ! RSRIMCG - * (1.0 - ZZW(:) )/(PTSTEP*ZRHODREF(:)) ) - ZRCS(:) = ZRCS(:) - ZZW1(:,2) - ZRSS(:) = ZRSS(:) - ZZW1(:,3) - ZRGS(:) = ZRGS(:) + ZZW1(:,2)+ZZW1(:,3) - ZTHS(:) = ZTHS(:) + ZZW1(:,2)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RCRIMSG)) - END WHERE - ELSE - WHERE ( GRIM(:) .AND. (ZRSS(:)>0.0) ) - ZZW1(:,2) = MIN( ZRCS(:), & - XCRIMSG * ZRCT(:) & ! RCRIMSG - * ZLBDAS(:)**XEXCRIMSG & - * ZRHODREF(:)**(-XCEXVT) & - - ZZW1(:,1) ) - ZZW1(:,3) = MIN( ZRSS(:), & + ZZW1(:,3) = MIN( ZRSS(:), & XSRIMCG * ZLBDAS(:)**XEXSRIMCG & ! RSRIMCG * (1.0 - ZZW(:) )/(PTSTEP*ZRHODREF(:)) ) - ZRCS(:) = ZRCS(:) - ZZW1(:,2) - ZRSS(:) = ZRSS(:) - ZZW1(:,3) - ZRGS(:) = ZRGS(:) + ZZW1(:,2)+ZZW1(:,3) - ZTHS(:) = ZTHS(:) + ZZW1(:,2)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RCRIMSG)) - END WHERE - ENDIF + ZRCS(:) = ZRCS(:) - ZZW1(:,2) + ZRSS(:) = ZRSS(:) - ZZW1(:,3) + ZRGS(:) = ZRGS(:) + ZZW1(:,2)+ZZW1(:,3) + ZTHS(:) = ZTHS(:) + ZZW1(:,2)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RCRIMSG)) + END WHERE DEALLOCATE(IVEC2) DEALLOCATE(IVEC1) DEALLOCATE(ZVEC2) @@ -3047,9 +3143,9 @@ IMPLICIT NONE XLBRACCS2/( ZLBDAS(:) * ZLBDAR(:) ) + & XLBRACCS3/( (ZLBDAR(:)**2)) )/ZLBDAR(:)**4 ZZW1(:,4) = MIN( ZRRS(:),ZZW1(:,2)*ZZW(:) ) ! RRACCSS - ZRRS(:) = ZRRS(:) - ZZW1(:,4) - ZRSS(:) = ZRSS(:) + ZZW1(:,4) - ZTHS(:) = ZTHS(:) + ZZW1(:,4)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RRACCSS)) + ZRRS(:) = ZRRS(:) - ZZW1(:,4)*XFRMIN(7) + ZRSS(:) = ZRSS(:) + ZZW1(:,4)*XFRMIN(7) + ZTHS(:) = ZTHS(:) + ZZW1(:,4)*(ZLSFACT(:)-ZLVFACT(:))*XFRMIN(7) ! f(L_f*(RRACCSS)) END WHERE ! ! 5.2.4b perform the bilinear interpolation of the normalized @@ -3084,7 +3180,7 @@ IMPLICIT NONE WHERE ( GACC(:) .AND. (ZRSS(:)>0.0) ) ZZW1(:,2) = MAX( MIN( ZRRS(:),ZZW1(:,2)-ZZW1(:,4) ),0.0 ) ! RRACCSG END WHERE - WHERE ( GACC(:) .AND. (ZRSS(:)>0.0) .AND. ZZW1(:,2)>0.0 ) + WHERE ( GACC(:) .AND. (ZRSS(:)>0.0) .AND. ZZW1(:,2)>0.0 .AND. ZRSS(:)>XFRMIN(1)/PTSTEP ) ZZW1(:,3) = MIN( ZRSS(:),XFSACCRG*ZZW(:)* & ! RSACCRG ( ZLBDAS(:)**(XCXS-XBS) )*( ZRHODREF(:)**(-XCEXVT-1.) ) & *( XLBSACCR1/((ZLBDAR(:)**2) ) + & @@ -3167,7 +3263,7 @@ IMPLICIT NONE REAL(KIND=JPRB) :: ZHOOK_HANDLE IF (LHOOK) CALL DR_HOOK('RAIN_ICE_OLD:RAIN_ICE_FAST_RG',0,ZHOOK_HANDLE) ZZW1(:,3:4) = 0.0 - WHERE( (ZRIT(:)>XRTMIN(4)) .AND. (ZRRT(:)>XRTMIN(3)) .AND. & + WHERE( (ZRIT(:)>XRTMIN(4) .AND. ZRIT(:)>XFRMIN(2)) .AND. (ZRRT(:)>XRTMIN(3)) .AND. & (ZRIS(:)>0.0) .AND. (ZRRS(:)>0.0) ) ZZW1(:,3) = MIN( ZRIS(:),XICFRR * ZRIT(:) & ! RICFRRG * ZLBDAR(:)**XEXICFRR & @@ -3254,15 +3350,19 @@ IMPLICIT NONE END DO ZZW(:) = UNPACK( VECTOR=ZVEC3(:),MASK=GDRY,FIELD=0.0 ) ! - WHERE( GDRY(:) ) - ZZW1(:,3) = MIN( ZRSS(:),XFSDRYG*ZZW(:) & ! RSDRYG - * EXP( XCOLEXSG*(ZZT(:)-XTT) ) & - *( ZLBDAS(:)**(XCXS-XBS) )*( ZLBDAG(:)**XCXG ) & - *( ZRHODREF(:)**(-XCEXVT-1.) ) & - *( XLBSDRYG1/( ZLBDAG(:)**2 ) + & - XLBSDRYG2/( ZLBDAG(:) * ZLBDAS(:) ) + & - XLBSDRYG3/( ZLBDAS(:)**2) ) ) - END WHERE + IF (OCND2) THEN + ZZW1(:,3) = 0. + ELSE + WHERE( GDRY(:) ) + ZZW1(:,3) = MIN( ZRSS(:),XFSDRYG*ZZW(:) & ! RSDRYG + * EXP( XCOLEXSG*(ZZT(:)-XTT) ) & + *( ZLBDAS(:)**(XCXS-XBS) )*( ZLBDAG(:)**XCXG ) & + *( ZRHODREF(:)**(-XCEXVT-1.) ) & + *( XLBSDRYG1/( ZLBDAG(:)**2 ) + & + XLBSDRYG2/( ZLBDAG(:) * ZLBDAS(:) ) + & + XLBSDRYG3/( ZLBDAS(:)**2) ) ) + END WHERE + ENDIF DEALLOCATE(IVEC2) DEALLOCATE(IVEC1) DEALLOCATE(ZVEC3) @@ -3393,7 +3493,8 @@ IMPLICIT NONE ! f(L_f*(RCWETG+RRWETG)) END WHERE ELSE IF( KRR == 6 ) THEN - WHERE( ZRGT(:)>XRTMIN(6) .AND. ZZT(:)<XTT & + WHERE( ZRGT(:)>XRTMIN(6) .AND. ZRGT(:)>XFRMIN(3) .AND. & + ZRIS(:)*PTSTEP>XFRMIN(3) .AND. ZZT(:)<XTT & .AND. & ! Wet ZRDRYG(:)>=ZRWETG(:) .AND. ZRWETG(:)>0.0 ) ! case ZZW(:) = ZRWETG(:) @@ -3432,7 +3533,8 @@ IMPLICIT NONE END IF ! - WHERE( ZRGT(:)>XRTMIN(6) .AND. ZZT(:)<XTT & + WHERE( ZRGT(:)>XRTMIN(6) .AND. ZRGT(:)>XFRMIN(4) .AND. & + ZRIS(:)*PTSTEP>XFRMIN(4) .AND. ZZT(:)<XTT & .AND. & ZRDRYG(:)<ZRWETG(:) .AND. ZRDRYG(:)>0.0 ) ! Dry ZRCS(:) = ZRCS(:) - ZZW1(:,1) @@ -3470,24 +3572,50 @@ IMPLICIT NONE !* 6.5 Melting of the graupeln ! ZZW(:) = 0.0 - WHERE( (ZRGT(:)>XRTMIN(6)) .AND. (ZRGS(:)>0.0) .AND. (ZZT(:)>XTT) ) - ZZW(:) = ZRVT(:)*ZPRES(:)/(XEPSILO+ZRVT(:)) ! Vapor pressure - ZZW(:) = ZKA(:)*(XTT-ZZT(:)) + & - ( ZDV(:)*(XLVTT + ( XCPV - XCL ) * ( ZZT(:) - XTT )) & - *(XESTT-ZZW(:))/(XRV*ZZT(:)) ) + IF (LTIW) THEN + + WHERE( (ZRGT(:)>XRTMIN(6)) .AND. (ZRGS(:)>0.0) .AND. (ZTIW(:)>XTT) ) + ZZW(:) = ZRVT(:)*ZPRES(:)/(XEPSILO+ZRVT(:)) ! Vapor pressure + ZZW(:) = ZKA(:)*(XTT-ZTIW(:)) + & + ( ZDV(:)*(XLVTT + ( XCPV - XCL ) * ( ZTIW(:) - XTT )) & + *(XESTT-ZZW(:))/(XRV*ZTIW(:)) ) ! ! compute RGMLTR ! - ZZW(:) = MIN( ZRGS(:), MAX( 0.0,( -ZZW(:) * & - ( X0DEPG* ZLBDAG(:)**XEX0DEPG + & - X1DEPG*ZCJ(:)*ZLBDAG(:)**XEX1DEPG ) - & - ( ZZW1(:,1)+ZZW1(:,4) ) * & - ( ZRHODREF(:)*XCL*(XTT-ZZT(:))) ) / & - ( ZRHODREF(:)*XLMTT ) ) ) - ZRRS(:) = ZRRS(:) + ZZW(:) - ZRGS(:) = ZRGS(:) - ZZW(:) - ZTHS(:) = ZTHS(:) - ZZW(:)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(-RGMLTR)) - END WHERE + ZZW(:) = XFRMIN(8)*MIN( ZRGS(:), MAX( 0.0,( -ZZW(:) * & + ( X0DEPG* ZLBDAG(:)**XEX0DEPG + & + X1DEPG*ZCJ(:)*ZLBDAG(:)**XEX1DEPG ) - & + ( ZZW1(:,1)+ZZW1(:,4) ) * & + ( ZRHODREF(:)*XCL*(XTT-ZTIW(:))) ) / & + ( ZRHODREF(:)*XLMTT ) ) ) + + + ZRRS(:) = ZRRS(:) + ZZW(:) + ZRGS(:) = ZRGS(:) - ZZW(:) + ZTHS(:) = ZTHS(:) - ZZW(:)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(-RGMLTR)) + END WHERE + ELSE + + WHERE( (ZRGT(:)>XRTMIN(6)) .AND. (ZRGS(:)>0.0) .AND. (ZZT(:)>XTT) ) + ZZW(:) = ZRVT(:)*ZPRES(:)/(XEPSILO+ZRVT(:)) ! Vapor pressure + ZZW(:) = ZKA(:)*(XTT-ZZT(:)) + & + ( ZDV(:)*(XLVTT + ( XCPV - XCL ) * ( ZZT(:) - XTT )) & + *(XESTT-ZZW(:))/(XRV*ZZT(:)) ) +! +! compute RGMLTR +! + ZZW(:) = XFRMIN(8)*MIN( ZRGS(:), MAX( 0.0,( -ZZW(:) * & + ( X0DEPG* ZLBDAG(:)**XEX0DEPG + & + X1DEPG*ZCJ(:)*ZLBDAG(:)**XEX1DEPG ) - & + ( ZZW1(:,1)+ZZW1(:,4) ) * & + ( ZRHODREF(:)*XCL*(XTT-ZZT(:))) ) / & + ( ZRHODREF(:)*XLMTT ) ) ) + ZRRS(:) = ZRRS(:) + ZZW(:) + ZRGS(:) = ZRGS(:) - ZZW(:) + ZTHS(:) = ZTHS(:) - ZZW(:)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(-RGMLTR)) + END WHERE + ENDIF + IF (LBUDGET_TH) CALL BUDGET_DDH ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & 4,'GMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH) @@ -3834,10 +3962,26 @@ IMPLICIT NONE ! Sub gridscale decomposition into a supersaturation part of the gridbox, ! ZSIFRC with a superaturation ZSSIO and a subsaturated part (1.- ZSIFRC) ! with a (negative) superaturation of ZSSIU - ZARTMP(:) = -1. - CALL ICECLOUD(IMICRO,ZPRES,ZZZ,ZDZ,ZZT,ZRVS,PTSTEP,-1.,ZARTMP, & - & ZXW2D,ZSIFRC,ZSSIO,ZSSIU,ZW2D,ZCI2S) !note: ZCI2S is dummy here, not used - DO JK=1,IMICRO + + + IF (LMODICEDEP) THEN + DO JL=1,IMICRO + ZZW2(JL) = MAX(ZCIT(JL),ICENUMBER2(ZRIS(JL)*PTSTEP,ZZT(JL))* & + ZRHODREF(JL)) + ENDDO + WHERE( ZZW2(:)>0.0 .AND. ZESI(:) < ZPRES(:)*0.5) + ZZW(:)= X0DEPI/(XLBI*ZAI(:)) *(ZZW2(:)/ZRHODREF(:))**(1.+XLBEXI) * & + & (PTSTEP*MAX(XRTMIN(4)/PTSTEP,ZRIS(:))*ZW2D(:) )**(-XLBEXI) + ZZW(:)= MAX(-ZRIS(:)*ZW2D(:)*(1.-ZSIFRC(:))+ZZW(:)*ZSSIO(:)* ZSIFRC(:)* ZXW2D13(:), & + & ZZW(:)* ( ZSSIO(:)* ZSIFRC(:)* ZXW2D13(:) + ZCITRED23*ZSSIU(:)* (1.-ZSIFRC(:)) )) + + ZRIS(:) = ZRIS(:) + ZZW(:) + ZRVS(:) = ZRVS(:) - ZZW(:) ! Budget here: ! cloud ice + vapor = const + ZTHS(:) = ZTHS(:) + ZZW(:)*ZLSFACT(:) ! f(L_f*(RCBERI)) + + END WHERE + ELSE + DO JK=1,IMICRO ZTC = MAX(-18.,MIN(-1.,ZZT(JK)-XTT)) ZHU = MIN(0.15,MAX(0.,ZSSI(JK))) @@ -3847,7 +3991,7 @@ IMPLICIT NONE ZCI2S(JK) = 0. IF(ZRIS(JK)*PTSTEP > 1.0e-12)THEN ZCI2S(JK) = ZRIS(JK)*(1. - MIN(1., 0.5*ZQIMAX /ZRIS(JK)/PTSTEP))* & - & (1.-ZSIFRC(JK))/( ZXW2D*ZSIFRC(JK) + 1.-ZSIFRC(JK)) + & (1.-ZSIFRC(JK))*ZW2D(JK) ! 0.5*ZQIMAX /ZRIS(JK)/PTSTEP reduce ice wich a factot of 0.5 when ! ZQIMAX = cloud ice content. ! (1.-ZSIFRC(JK))/( ZXW2D*ZSIFRC(JK) + 1.-ZSIFRC(JK)) is the ratio for cloudice @@ -3855,13 +3999,13 @@ IMPLICIT NONE ENDIF - ENDDO - WHERE( ZRIT(:)>XRTMIN(4) .AND. ZCIT(:)>0.0 .AND. ZESI(:) < ZPRES(:)*0.5 ) + ENDDO + WHERE( ZCIT(:)>0.0 .AND. ZESI(:) < ZPRES(:)*0.5) ZZWC(:)=ZCRYSHA(:)*0.878/ZAI(:)*(ZCIT(:)/ZRHODREF(:))**0.667 & - &*(ZRIS(:)*PTSTEP*ZW2D(:))**0.333 + &*(MAX(XRTMIN(4)/PTSTEP,ZRIS(:))*PTSTEP*ZW2D(:))**0.333 ! Ice supersaturated part of grid box: WHERE( ZSSIO(:)>0. .AND. ZSIFRC(:) > 0.02_JPRB ) - ZZW(:) = ZZWC(:)*ZXW2D13*ZSSIO(:) + ZZW(:) = ZZWC(:)*ZXW2D13(:)*ZSSIO(:) ZRIS(:) = ZRIS(:) + ZZW(:)*ZSIFRC(:) ZRVS(:) = ZRVS(:) - ZZW(:)*ZSIFRC(:) ! Budget here: ! cloud ice + vapor = const ZTHS(:) = ZTHS(:) + ZZW(:)*ZLSFACT(:)*ZSIFRC(:) ! f(L_f*(RCBERI)) @@ -3876,7 +4020,8 @@ IMPLICIT NONE ZRVS(:) = ZRVS(:) - ZZW(:)*(1.-ZSIFRC(:)) ZTHS(:) = ZTHS(:) + ZZW(:)*ZLSFACT(:)*(1.-ZSIFRC(:)) END WHERE - END WHERE + END WHERE + ENDIF ELSE ! End OCND2 WHERE( (ZRCS(:)>0.0) .AND. (ZSSI(:)>0.0) .AND. & (ZRIT(:)>XRTMIN(4)) .AND. (ZCIT(:)>0.0) ) diff --git a/src/arome/turb/ini_cturb.F90 b/src/arome/turb/ini_cturb.F90 index 1847d0fdaa16277c181230c08f4b43093856b0a7..8880cce0bdda185c5af3f11e65656d457a1cb2a0 100644 --- a/src/arome/turb/ini_cturb.F90 +++ b/src/arome/turb/ini_cturb.F90 @@ -65,7 +65,6 @@ IF (LHOOK) CALL DR_HOOK('INI_CTURB',0,ZHOOK_HANDLE) ! 1.1 Constant for dissipation of Tke ! ! -LHARAT=.FALSE. ! !XCED = 0.70 XCED = 0.85 @@ -118,7 +117,12 @@ XCTD = 1.2 ! ! 1.7 Constant for temperature and vapor pressure-correlations ! -XCTP = 4.65 +!wc in STATNW consistent use of Redelsperger-Sommeria for (co)variances +IF (LSTATNW) THEN + XCTP = 4.0 + ELSE + XCTP = 4.65 +ENDIF ! Redelsperger-Sommeria (1981) = 4. ! Schmidt-Schumann (1989) = 3.25 ! Cheng-Canuto-Howard (2002) = 4.65 diff --git a/src/common/micro/condensation.F90 b/src/common/micro/condensation.F90 index c1e03b3b9691e5f6c2e2a5a40c6acfc241591871..e950151e34b44dda03b895a6bb8c4f5177b82b37 100644 --- a/src/common/micro/condensation.F90 +++ b/src/common/micro/condensation.F90 @@ -4,14 +4,15 @@ !MNH_LIC for details. version 1. !----------------------------------------------------------------- ! ######spl - SUBROUTINE CONDENSATION( KIU, KJU, KKU, KIB, KIE, KJB, KJE, KKB, KKE, KKL, & - HFRAC_ICE, HCONDENS, HLAMBDA3, & - PPABS, PZZ, PRHODREF, PT, PRV_IN, PRV_OUT, PRC_IN, PRC_OUT, PRI_IN, PRI_OUT, & - PRR, PRS, PRG, PSIGS, PMFCONV, PCLDFR, PSIGRC, OUSERI, & - OSIGMAS, OCND2, PSIGQSAT, & - PLV, PLS, PCPH, & - PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF, & - PICE_CLD_WGT) + SUBROUTINE CONDENSATION( KIU, KJU, KKU, KIB, KIE, KJB, KJE, KKB, KKE, KKL,& + HFRAC_ICE, HCONDENS, HLAMBDA3, & + PPABS, PZZ, PRHODREF, PT, PRV_IN, PRV_OUT, PRC_IN, PRC_OUT, PRI_IN, PRI_OUT, & + PRR, PRS, PRG, PSIGS, PMFCONV, PCLDFR, & + PSIGRC, OUSERI, OSIGMAS, OCND2, LHGT_QS, & + PICLDFR, PWCLDFR, PSSIO, PSSIU, PIFR, PSIGQSAT, & + PLV, PLS, PCPH, & + PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF, & + PICE_CLD_WGT) ! ################################################################################ ! !! @@ -74,6 +75,9 @@ !! 2014-11 K.I Ivarsson add possibility to run with OCND2 option !! 2016 S.Riette Change INQ1 !! 2016-11 S. Riette: use HFRAC_ICE, output adjusted state +!! 2018-02 K.I Ivarsson: Some modificatons of OCND2 option, mainly for optimation - new outputs +!! 2019-06 W.C. de Rooy: Mods for new set up statistical cloud scheme +!! 2019-07 K.I.Ivarsson: Switch for height dependent VQSIGSAT: LHGT_QS !! 2020-12 U. Andrae : Introduce SPP for HARMONIE-AROME !! R. El Khatib 24-Aug-2021 Optimizations !! 2021-01: SPP computations moved in aro_adjust (AROME/HARMONIE) @@ -86,9 +90,10 @@ USE PARKIND1, ONLY : JPRB USE YOMHOOK , ONLY : LHOOK, DR_HOOK USE MODD_CST USE MODD_PARAMETERS -USE MODD_RAIN_ICE_PARAM, ONLY : XCRIAUTC, XCRIAUTI, XACRIAUTI, XBCRIAUTI +USE MODD_RAIN_ICE_PARAM, ONLY : XCRIAUTC, XCRIAUTI, XACRIAUTI, XBCRIAUTI, XFRMIN USE MODE_TIWMX, ONLY : ESATW, ESATI USE MODE_ICECLOUD, ONLY : ICECLOUD +USE MODD_CTURB, ONLY : LSTATNW ! IMPLICIT NONE ! @@ -118,22 +123,31 @@ REAL, DIMENSION(KIU,KJU,KKU), INTENT(IN) :: PRC_IN ! grid scale r_c mixing ra REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT) :: PRC_OUT! grid scale r_c mixing ratio (kg/kg) in output REAL, DIMENSION(KIU,KJU,KKU), INTENT(IN) :: PRI_IN ! grid scale r_i (kg/kg) in input REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT) :: PRI_OUT! grid scale r_i (kg/kg) in output +REAL, DIMENSION(KIU,KJU,KKU), INTENT(IN) :: PRR ! grid scale mixing ration of rain (kg/kg) +REAL, DIMENSION(KIU,KJU,KKU), INTENT(IN) :: PRS ! grid scale mixing ration of snow (kg/kg) +REAL, DIMENSION(KIU,KJU,KKU), INTENT(IN) :: PRG ! grid scale mixing ration of graupel (kg/kg) +REAL, DIMENSION(KIU,KJU,KKU), INTENT(IN) :: PSIGS ! Sigma_s from turbulence scheme +REAL, DIMENSION(:,:,:), INTENT(IN) :: PMFCONV! convective mass flux (kg /s m^2) +REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT) :: PCLDFR ! cloud fraction +REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT) :: PSIGRC ! s r_c / sig_s^2 + LOGICAL, INTENT(IN) :: OUSERI ! logical switch to compute both ! liquid and solid condensate (OUSERI=.TRUE.) ! or only solid condensate (OUSERI=.FALSE.) LOGICAL, INTENT(IN) :: OSIGMAS! use present global Sigma_s values ! or that from turbulence scheme LOGICAL, INTENT(IN) :: OCND2 ! logical switch to sparate liquid and ice - ! more rigid (DEFALT value : .FALSE.) + ! more rigid (DEFAULT value : .FALSE.) +LOGICAL, INTENT(IN) :: LHGT_QS! logical switch for height dependent VQSIGSAT +REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT) :: PICLDFR! ice cloud fraction +REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT) :: PWCLDFR! water or mixed-phase cloud fraction +REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT) :: PSSIO ! Super-saturation with respect to ice in the + ! supersaturated fraction +REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT) :: PSSIU ! Sub-saturation with respect to ice in the + ! subsaturated fraction +REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT) :: PIFR ! Ratio cloud ice moist part REAL, DIMENSION(KIU,KJU), INTENT(IN) :: PSIGQSAT ! use an extra "qsat" variance contribution (OSIGMAS case) ! multiplied by PSIGQSAT -REAL, DIMENSION(KIU,KJU,KKU), INTENT(IN) :: PRR ! grid scale mixing ration of rain (kg/kg) -REAL, DIMENSION(KIU,KJU,KKU), INTENT(IN) :: PRS ! grid scale mixing ration of snow (kg/kg) -REAL, DIMENSION(KIU,KJU,KKU), INTENT(IN) :: PRG ! grid scale mixing ration of graupel (kg/kg) -REAL, DIMENSION(KIU,KJU,KKU), INTENT(IN) :: PSIGS ! Sigma_s from turbulence scheme -REAL, DIMENSION(:,:,:), INTENT(IN) :: PMFCONV! convective mass flux (kg /s m^2) -REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT) :: PCLDFR ! cloud fraction -REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT) :: PSIGRC ! s r_c / sig_s^2 REAL, DIMENSION(KIU,KJU,KKU), OPTIONAL, INTENT(IN) :: PLV ! Latent heat L_v REAL, DIMENSION(KIU,KJU,KKU), OPTIONAL, INTENT(IN) :: PLS ! Latent heat L_s @@ -142,7 +156,7 @@ REAL, DIMENSION(KIU,KJU,KKU), OPTIONAL, INTENT(OUT) :: PHLC_HRC REAL, DIMENSION(KIU,KJU,KKU), OPTIONAL, INTENT(OUT) :: PHLC_HCF ! cloud fraction REAL, DIMENSION(KIU,KJU,KKU), OPTIONAL, INTENT(OUT) :: PHLI_HRI REAL, DIMENSION(KIU,KJU,KKU), OPTIONAL, INTENT(OUT) :: PHLI_HCF -REAL, DIMENSION(KIU,KJU), OPTIONAL, INTENT(IN) :: PICE_CLD_WGT +REAL, DIMENSION(KIU,KJU), OPTIONAL, INTENT(IN) :: PICE_CLD_WGT ! ! !* 0.2 Declarations of local variables : @@ -150,14 +164,14 @@ REAL, DIMENSION(KIU,KJU), OPTIONAL, INTENT(IN) :: PICE_CLD_WGT INTEGER :: JI, JJ, JK, JKP, JKM, IKTB, IKTE ! loop index REAL, DIMENSION(KIU,KJU,KKU) :: ZTLK, ZRT ! work arrays for T_l and total water mixing ratio REAL, DIMENSION(KIU,KJU,KKU) :: ZL ! length scale -INTEGER, DIMENSION(KIU,KJU) :: ITPL ! top levels of troposphere +INTEGER, DIMENSION(KIU,KJU) :: ITPL ! top levels of troposphere REAL, DIMENSION(KIU,KJU) :: ZTMIN ! minimum Temp. related to ITPL ! REAL, DIMENSION(KIU,KJU,KKU) :: ZLV, ZLS, ZCPD REAL :: ZGCOND, ZAUTC, ZAUTI, ZGAUV, ZGAUC, ZGAUI, ZGAUTC, ZGAUTI, ZCRIAUTI ! Used for Gaussian PDF integration REAL :: ZLVS ! thermodynamics REAL, DIMENSION(KIU) :: ZPV, ZPIV, ZQSL, ZQSI ! thermodynamics -REAL :: ZLL, DZZ, ZZZ ! used for length scales +REAL :: ZLL, DZZ, ZZZ ! used for length scales REAL :: ZAH, ZDRW, ZDTL, ZSIG_CONV ! related to computation of Sig_s REAL, DIMENSION(KIU) :: ZA, ZB, ZSBAR, ZSIGMA, ZQ1 ! related to computation of Sig_s REAL, DIMENSION(KIU) :: ZCOND @@ -168,10 +182,14 @@ REAL :: ZINC REAL :: ZRSP, ZRSW, ZRFRAC, ZRSDIF, ZRCOLD ! related to OCND2 ice cloud calulation : REAL, DIMENSION(KIU) :: ESATW_T -REAL :: ZDUM1,ZDUM2,ZDUM3,ZDUM4,ZPRIFACT -REAL, DIMENSION(KIU,KJU,KKU) :: TCLD -REAL :: ZDZ(KIU), ZARDUM(KIU),ZCLDUM(KIU) +REAL :: ZDUM1,ZDUM2,ZDUM3,ZDUM4,ZPRIFACT,ZLWINC +REAL :: ZDZ(KIU), ZARDUM(KIU),ZARDUM2(KIE-KIB+1),ZCLDINI(KIB:KIE) ! end OCND2 + +! LHGT_QS: +REAL :: ZDZFACT,ZDZREF +! LHGT_QS END + REAL(KIND=JPRB) :: ZHOOK_HANDLE INTEGER, DIMENSION(KIU) :: IERR ! @@ -206,12 +224,20 @@ IKTE=KKU-JPVEXT PCLDFR(:,:,:) = 0. ! Initialize values PSIGRC(:,:,:) = 0. ! Initialize values ZPRIFACT = 1. ! Initialize value -ZCLDUM=-1. ! Initialize value +ZARDUM2 = 0. ! Initialize values +ZCLDINI = -1. ! Dummy Initialized cloud input to icecloud routine +PIFR = 10. ! ratio of cloud ice water mixing ratio wet to dry + ! part of a gridbox +ZDZREF = XFRMIN(25) ! Thickness for unchanged vqsigsat (only used for LHGT_QS) ! Init of the HALO (should be on HALO points only) #ifdef REPRO55 PRC_OUT = PRC_IN PRV_OUT = PRV_IN PRI_OUT = PRI_IN +PHLC_HRC = 0. +PHLC_HCF = 0. +PHLI_HRI = 0. +PHLI_HCF = 0. #endif IF(OCND2)ZPRIFACT = 0. ! @@ -317,8 +343,8 @@ DO JK=IKTB,IKTE ZDZ(KIB:KIE) = PZZ(KIB:KIE,JJ,JKP) - PZZ(KIB:KIE,JJ,JKP-KKL) CALL ICECLOUD(KIE-KIB+1,PPABS(KIB,JJ,JK),PZZ(KIB,JJ,JK),ZDZ(KIB), & & PT(KIB,JJ,JK),PRV_IN(KIB,JJ,JK),1.,-1., & - & ZCLDUM(KIB:KIE),1.,TCLD(KIB,JJ,JK), & - & ZARDUM(KIB:KIE),ZARDUM(KIB:KIE),ZARDUM(KIB:KIE),ZARDUM(KIB:KIE)) + & ZCLDINI,PIFR(KIB,JJ,JK),PICLDFR(KIB,JJ,JK), & + & PSSIO(KIB,JJ,JK),PSSIU(KIB,JJ,JK),ZARDUM2,ZARDUM) ! latent heats ! saturated water vapor mixing ratio over liquid water and ice DO JI=KIB,KIE @@ -365,9 +391,23 @@ DO JK=IKTB,IKTE IF ( OSIGMAS ) THEN DO JI=KIB,KIE IF (PSIGQSAT(JI,JJ)/=0.) THEN - ZSIGMA(JI) = SQRT((2*PSIGS(JI,JJ,JK))**2 + (PSIGQSAT(JI,JJ)*ZQSL(JI)*ZA(JI))**2) + ZDZFACT = 1. + IF(LHGT_QS .AND. JK+1 <= IKTE)THEN + ZDZFACT= MAX(XFRMIN(23),MIN(XFRMIN(24),(PZZ(JI,JJ,JK) - PZZ(JI,JJ,JK+1))/ZDZREF)) + ELSEIF(LHGT_QS)THEN + ZDZFACT= MAX(XFRMIN(23),MIN(XFRMIN(24),((PZZ(JI,JJ,JK-1) - PZZ(JI,JJ,JK)))*0.8/ZDZREF)) + ENDIF + IF (LSTATNW) THEN + ZSIGMA(JI) = SQRT((PSIGS(JI,JJ,JK))**2 + (PSIGQSAT(JI,JJ)*ZDZFACT*ZQSL(JI)*ZA(JI))**2) + ELSE + ZSIGMA(JI) = SQRT((2*PSIGS(JI,JJ,JK))**2 + (PSIGQSAT(JI,JJ)*ZQSL(JI)*ZA(JI))**2) + ENDIF ELSE - ZSIGMA(JI) = 2*PSIGS(JI,JJ,JK) + IF (LSTATNW) THEN + ZSIGMA(JI) = PSIGS(JI,JJ,JK) + ELSE + ZSIGMA(JI) = 2*PSIGS(JI,JJ,JK) + ENDIF END IF END DO ELSE @@ -497,34 +537,33 @@ DO JK=IKTB,IKTE ELSE DO JI=KIB,KIE PRC_OUT(JI,JJ,JK) = (1.-ZFRAC(JI)) * ZCOND(JI) ! liquid condensate + ZLWINC = PRC_OUT(JI,JJ,JK) - PRC_IN(JI,JJ,JK) ! ! This check is mainly for noise reduction : ! ------------------------- - IF(ABS(PRC_IN(JI,JJ,JK)-PRC_OUT(JI,JJ,JK))>1.0E-12 .AND. ESATW_T(JI) < PPABS(JI,JJ,JK)*0.5)THEN + IF(ABS(ZLWINC)>1.0E-12 .AND. ESATW(PT(JI,JJ,JK)) < PPABS(JI,JJ,JK)*0.5 )THEN ZRCOLD = PRC_OUT(JI,JJ,JK) - ZRFRAC = PRV_IN(JI,JJ,JK) - ZCOND(JI) + PRC_OUT(JI,JJ,JK) + ZRFRAC = PRV_IN(JI,JJ,JK) - ZLWINC IF( PRV_IN(JI,JJ,JK) < ZRSW )THEN ! sub - saturation over water: ! Avoid drying of cloudwater leading to supersaturation with ! respect to water ZRSDIF= MIN(0.,ZRSP-ZRFRAC) ELSE ! super - saturation over water: - ! Avoid depostition of water leading to sub-saturation with + ! Avoid deposition of water leading to sub-saturation with ! respect to water ! ZRSDIF= MAX(0.,ZRSP-ZRFRAC) - ZRSDIF= MAX(0.,ZRSP*PCLDFR(JI,JJ,JK) - ZRFRAC) + ZRSDIF= 0. ! t7 ENDIF PRC_OUT(JI,JJ,JK) = ZCOND(JI) - ZRSDIF ELSE ZRCOLD = PRC_IN(JI,JJ,JK) ENDIF - ! end check + ! end check ! compute separate ice cloud: - ZDUM1 = MIN(1.0,20.* PRC_OUT(JI,JJ,JK)*SQRT(ZDZ(JI))/ZQSL(JI)) ! clould liquid water - ! factor - - ZDUM3 = MAX(0.,TCLD(JI,JJ,JK)-PCLDFR(JI,JJ,JK)) ! pure ice cloud part - + PWCLDFR(JI,JJ,JK) = PCLDFR(JI,JJ,JK) + ZDUM1 = MIN(1.0,20.* PRC_OUT(JI,JJ,JK)*SQRT(ZDZ(JI))/ZQSL(JI)) ! cloud liquid water factor + ZDUM3 = MAX(0.,PICLDFR(JI,JJ,JK)-PWCLDFR(JI,JJ,JK)) ! pure ice cloud part IF (JK==IKTB) THEN ZDUM4 = PRI_IN(JI,JJ,JK) ELSE @@ -537,7 +576,7 @@ DO JK=IKTB,IKTE ZDUM2 = (0.8*PCLDFR(JI,JJ,JK)+0.2)*MIN(1.,ZDUM1 + ZDUM4*PCLDFR(JI,JJ,JK)) ! water cloud, use 'statistical' cloud, but reduce it in case of low liquid content - PCLDFR(JI,JJ,JK) = MIN(1., ZDUM2 + (0.9*ZDUM3+0.1)*ZDUM4) ! Rad cloud + PCLDFR(JI,JJ,JK) = MIN(1., ZDUM2 + (0.5*ZDUM3+0.5)*ZDUM4) ! Rad cloud ! Reduce ice cloud part in case of low ice water content PRI_OUT(JI,JJ,JK) = PRI_IN(JI,JJ,JK) PT(JI,JJ,JK) = PT(JI,JJ,JK) + ((PRC_OUT(JI,JJ,JK)-ZRCOLD)*ZLV(JI,JJ,JK) + & diff --git a/src/common/micro/ice_adjust.F90 b/src/common/micro/ice_adjust.F90 index d395b149324783c53aeb8d88f8f1a0d0ed3c9b7f..1fcf3de24c90e3a92d424bd81e364c9c1e0527a4 100644 --- a/src/common/micro/ice_adjust.F90 +++ b/src/common/micro/ice_adjust.F90 @@ -5,16 +5,18 @@ !----------------------------------------------------------------- ! ########################################################################## SUBROUTINE ICE_ADJUST (KKA, KKU, KKL, KRR, HFRAC_ICE, HCONDENS, HLAMBDA3,& - HBUNAME, OSUBG_COND, OSIGMAS, OCND2, HSUBG_MF_PDF,& - PTSTEP, PSIGQSAT, & + HBUNAME, OSUBG_COND, OSIGMAS, OCND2, LHGT_QS, & + HSUBG_MF_PDF, PTSTEP, PSIGQSAT, & PRHODJ, PEXNREF, PRHODREF, PSIGS, PMFCONV, & PPABST, PZZ, & PEXN, PCF_MF, PRC_MF, PRI_MF, & + PICLDFR, PWCLDFR, PSSIO, PSSIU, PIFR, & PRV, PRC, PRVS, PRCS, PTH, PTHS, PSRCS, PCLDFR, & - PRR, PRI, PRIS, PRS, PRG, TBUDGETS, KBUDGETS, PRH,& + PRR, PRI, PRIS, PRS, PRG, TBUDGETS, KBUDGETS, & + PICE_CLD_WGT, & + PRH, & POUT_RV, POUT_RC, POUT_RI, POUT_TH, & - PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF, & - PICE_CLD_WGT) + PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF) ! ######################################################################### ! !!**** *ICE_ADJUST* - compute the ajustment of water vapor in mixed-phase @@ -95,6 +97,7 @@ !! or to call it on S variables !! 2016-11 S. Riette: all-or-nothing adjustment now uses condensation ! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O +!! 2018-02 K.I.Ivarsson : More outputs for OCND2 option ! P. Wautelet 02/2020: use the new data structures and subroutines for budgets !! 2020-12 U. Andrae : Introduce SPP for HARMONIE-AROME !! R. El Khatib 24-Aug-2021 Optimizations @@ -124,23 +127,24 @@ IMPLICIT NONE !* 0.1 Declarations of dummy arguments : ! ! -INTEGER, INTENT(IN) :: KKA !near ground array index -INTEGER, INTENT(IN) :: KKU !uppest atmosphere array index -INTEGER, INTENT(IN) :: KKL !vert. levels type 1=MNH -1=ARO +INTEGER, INTENT(IN) :: KKA !near ground array index +INTEGER, INTENT(IN) :: KKU !uppest atmosphere array index +INTEGER, INTENT(IN) :: KKL !vert. levels type 1=MNH -1=ARO INTEGER, INTENT(IN) :: KRR ! Number of moist variables CHARACTER(LEN=1), INTENT(IN) :: HFRAC_ICE CHARACTER(LEN=80), INTENT(IN) :: HCONDENS CHARACTER(LEN=4), INTENT(IN) :: HLAMBDA3 ! formulation for lambda3 coeff CHARACTER(LEN=4), INTENT(IN) :: HBUNAME ! Name of the budget -LOGICAL, INTENT(IN) :: OSUBG_COND ! Switch for Subgrid +LOGICAL, INTENT(IN) :: OSUBG_COND ! Switch for Subgrid ! Condensation -LOGICAL :: OSIGMAS ! Switch for Sigma_s: +LOGICAL, INTENT(IN) :: OSIGMAS ! Switch for Sigma_s: ! use values computed in CONDENSATION ! or that from turbulence scheme -LOGICAL :: OCND2 ! logical switch to sparate liquid +LOGICAL, INTENT(IN) :: OCND2 ! logical switch to separate liquid ! and ice - ! more rigid (DEFALT value : .FALSE.) -CHARACTER(LEN=80), INTENT(IN) :: HSUBG_MF_PDF + ! more rigid (DEFAULT value : .FALSE.) +LOGICAL, INTENT(IN) :: LHGT_QS ! logical switch for height dependent VQSIGSAT +CHARACTER(LEN=80), INTENT(IN) :: HSUBG_MF_PDF REAL, INTENT(IN) :: PTSTEP ! Double Time step ! (single if cold start) REAL, DIMENSION(:,:), INTENT(IN) :: PSIGQSAT ! coeff applied to qsat variance contribution @@ -151,16 +155,16 @@ REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PRHODREF ! REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PSIGS ! Sigma_s at time t REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PMFCONV ! convective mass flux -REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PPABST ! Absolute Pressure at t +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PPABST ! Absolute Pressure at t REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PZZ ! height of model layer REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PEXN ! Exner function ! -REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PCF_MF! Convective Mass Flux Cloud fraction -REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PRC_MF! Convective Mass Flux liquid mixing ratio -REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PRI_MF! Convective Mass Flux ice mixing ratio +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PCF_MF ! Convective Mass Flux Cloud fraction +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PRC_MF ! Convective Mass Flux liquid mixing ratio +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PRI_MF ! Convective Mass Flux ice mixing ratio ! -REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PRV ! Water vapor m.r. to adjust -REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PRC ! Cloud water m.r. to adjust +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PRV ! Water vapor m.r. to adjust +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PRC ! Cloud water m.r. to adjust REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(INOUT) :: PRVS ! Water vapor m.r. source REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(INOUT) :: PRCS ! Cloud water m.r. source REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PTH ! Theta to adjust @@ -168,13 +172,23 @@ REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(INOUT) :: PTHS ! Theta source REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(OUT) :: PSRCS ! Second-order flux ! s'rc'/2Sigma_s2 at time t+1 ! multiplied by Lambda_3 -REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(OUT) :: PCLDFR ! Cloud fraction -! -REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(INOUT):: PRIS ! Cloud ice m.r. at t+1 -REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PRR ! Rain water m.r. to adjust -REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PRI ! Cloud ice m.r. to adjust -REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PRS ! Aggregate m.r. to adjust -REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PRG ! Graupel m.r. to adjust +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(OUT) :: PCLDFR ! Cloud fraction +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(OUT) :: PICLDFR ! ice cloud fraction +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(OUT) :: PWCLDFR ! water or mixed-phase cloud fraction +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(OUT) :: PSSIO ! Super-saturation with respect to ice in the + ! supersaturated fraction +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(OUT) :: PSSIU ! Sub-saturation with respect to ice in the + ! subsaturated fraction +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(OUT) :: PIFR ! Ratio cloud ice moist part to dry part +! +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(INOUT) :: PRIS ! Cloud ice m.r. at t+1 +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PRR ! Rain water m.r. to adjust +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PRI ! Cloud ice m.r. to adjust +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PRS ! Aggregate m.r. to adjust +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PRG ! Graupel m.r. to adjust +TYPE(TBUDGETDATA), DIMENSION(KBUDGETS), INTENT(INOUT) :: TBUDGETS +INTEGER, INTENT(IN) :: KBUDGETS +REAL, DIMENSION(:,:), CONTIGUOUS, OPTIONAL, INTENT(IN) :: PICE_CLD_WGT REAL, DIMENSION(:,:,:), CONTIGUOUS, OPTIONAL, INTENT(IN) :: PRH ! Hail m.r. to adjust REAL, DIMENSION(:,:,:), CONTIGUOUS, OPTIONAL, INTENT(OUT) :: POUT_RV ! Adjusted value REAL, DIMENSION(:,:,:), CONTIGUOUS, OPTIONAL, INTENT(OUT) :: POUT_RC ! Adjusted value @@ -184,9 +198,6 @@ REAL, DIMENSION(:,:,:), CONTIGUOUS, OPTIONAL, INTENT(OUT) :: PHLC_HRC REAL, DIMENSION(:,:,:), CONTIGUOUS, OPTIONAL, INTENT(OUT) :: PHLC_HCF REAL, DIMENSION(:,:,:), CONTIGUOUS, OPTIONAL, INTENT(OUT) :: PHLI_HRI REAL, DIMENSION(:,:,:), CONTIGUOUS, OPTIONAL, INTENT(OUT) :: PHLI_HCF -TYPE(TBUDGETDATA), DIMENSION(KBUDGETS), INTENT(INOUT) :: TBUDGETS -INTEGER, INTENT(IN) :: KBUDGETS -REAL, DIMENSION(:,:), CONTIGUOUS, OPTIONAL, INTENT(IN) :: PICE_CLD_WGT ! !* 0.2 Declarations of local variables : ! @@ -471,8 +482,8 @@ IF ( OSUBG_COND ) THEN HFRAC_ICE, HCONDENS, HLAMBDA3, & PPABST, PZZ, PRHODREF, ZT, PRV_IN, PRV_OUT, PRC_IN, PRC_OUT, PRI_IN, PRI_OUT, & PRR, PRS, PRG, PSIGS, PMFCONV, PCLDFR, & - PSRCS, .TRUE., OSIGMAS, & - OCND2, PSIGQSAT, & + PSRCS, .TRUE., OSIGMAS, OCND2, LHGT_QS, & + PICLDFR, PWCLDFR, PSSIO, PSSIU, PIFR, PSIGQSAT, & PLV=ZLV, PLS=ZLS, PCPH=ZCPH, & PHLC_HRC=PHLC_HRC, PHLC_HCF=PHLC_HCF, PHLI_HRI=PHLI_HRI, PHLI_HCF=PHLI_HCF,& PICE_CLD_WGT=PICE_CLD_WGT) @@ -489,9 +500,9 @@ ELSE CALL CONDENSATION(IIU, IJU, IKU, IIB, IIE, IJB, IJE, IKB, IKE, KKL, & HFRAC_ICE, HCONDENS, HLAMBDA3, & PPABST, PZZ, PRHODREF, ZT, PRV_IN, PRV_OUT, PRC_IN, PRC_OUT, PRI_IN, PRI_OUT, & - PRR, PRS, PRG, ZSIGS, PMFCONV, PCLDFR, & - ZSRCS, .TRUE., OSIGMAS=.TRUE., & - OCND2=OCND2, PSIGQSAT=ZSIGQSAT, & + PRR, PRS, PRG, ZSIGS, PMFCONV, PCLDFR, & + ZSRCS, .TRUE., .TRUE., OCND2, LHGT_QS, & + PICLDFR, PWCLDFR, PSSIO, PSSIU, PIFR, ZSIGQSAT, & PLV=ZLV, PLS=ZLS, PCPH=ZCPH, & PHLC_HRC=PHLC_HRC, PHLC_HCF=PHLC_HCF, PHLI_HRI=PHLI_HRI, PHLI_HCF=PHLI_HCF,& PICE_CLD_WGT=PICE_CLD_WGT) diff --git a/src/common/micro/ini_rain_ice.F90 b/src/common/micro/ini_rain_ice.F90 index 85eb2f09357327c31fa63dca37d906c739fe8db9..4929d778addcf8112fb7ea6937412f941546ab5d 100644 --- a/src/common/micro/ini_rain_ice.F90 +++ b/src/common/micro/ini_rain_ice.F90 @@ -368,7 +368,7 @@ XLBDAS_MAX = 100000.0 XLBDAG_MAX = 100000.0 ! ZCONC_MAX = 1.E6 ! Maximal concentration for falling particules set to 1 per cc -XLBDAS_MAX = ( ZCONC_MAX/XCCS )**(1./XCXS) +IF(XCCS>0. .AND. XCXS>0. )XLBDAS_MAX = ( ZCONC_MAX/XCCS )**(1./XCXS) ! IF (HCLOUD == 'ICE4') THEN ALLOCATE( XRTMIN(7) ) @@ -514,16 +514,26 @@ X0DEPS = (4.0*XPI)*XCCS*XC1S*XF0S*MOMG(XALPHAS,XNUS,1.) X1DEPS = (4.0*XPI)*XCCS*XC1S*XF1S*SQRT(XCS)*MOMG(XALPHAS,XNUS,0.5*XDS+1.5) XEX0DEPS = XCXS-1.0 XEX1DEPS = XCXS-0.5*(XDS+3.0) +XRDEPSRED = 1.0 ! X0DEPG = (4.0*XPI)*XCCG*XC1G*XF0G*MOMG(XALPHAG,XNUG,1.) X1DEPG = (4.0*XPI)*XCCG*XC1G*XF1G*SQRT(XCG)*MOMG(XALPHAG,XNUG,0.5*XDG+1.5) XEX0DEPG = XCXG-1.0 XEX1DEPG = XCXG-0.5*(XDG+3.0) +XRDEPGRED = 1.0 ! X0DEPH = (4.0*XPI)*XCCH*XC1H*XF0H*MOMG(XALPHAH,XNUH,1.) X1DEPH = (4.0*XPI)*XCCH*XC1H*XF1H*SQRT(XCH)*MOMG(XALPHAH,XNUH,0.5*XDH+1.5) XEX0DEPH = XCXH-1.0 XEX1DEPH = XCXH-0.5*(XDH+3.0) + +GFLAG = .TRUE. +IF (GFLAG) THEN + WRITE(UNIT=KLUOUT,FMT='(" factors sublimation snow/groupel")') + WRITE(UNIT=KLUOUT,FMT='(" mod sublim snow =",E13.6)') XRDEPSRED + WRITE(UNIT=KLUOUT,FMT='(" mod sublim graupel =",E13.6)') XRDEPGRED +END IF + ! !* 5.3 Constants for pristine ice autoconversion ! @@ -1016,6 +1026,20 @@ IF( (KDRYLBDAG/=NDRYLBDAG) .OR. (KDRYLBDAR/=NDRYLBDAR) .OR. (KND/=IND) .OR. & PFDINFTY,XKER_RDRYG ) WRITE(UNIT=KLUOUT,FMT='(" Read XKER_RDRYG")') END IF + +! 8.2.6 Constants for possible modifying some processes related to +! graupeln in XFRMIN(1:8), IN - concentration in XFRMIN(9) and Kogan +! autoconversion in XFRMIN(10:11). May be used for e.g. ensemble spread + XFRMIN(1:6)=0. + XFRMIN(7:9)=1. + XFRMIN(10) =10. + XFRMIN(11) =1. + XFRMIN(12) =100. + XFRMIN(13) =1.0E-15 + XFRMIN(14) =120. + XFRMIN(15) =1.0E-4 + XFRMIN(16:20)=0. + XFRMIN(21)=1. ! ! !------------------------------------------------------------------------------- diff --git a/src/common/micro/ini_snow.F90 b/src/common/micro/ini_snow.F90 new file mode 100644 index 0000000000000000000000000000000000000000..b1d284f630aa6d1ae402895f8a0c3a4071ba4ba2 --- /dev/null +++ b/src/common/micro/ini_snow.F90 @@ -0,0 +1,170 @@ +! ######spl + SUBROUTINE INI_SNOW ( KLUOUT ) + USE PARKIND1, ONLY : JPRB + USE YOMHOOK , ONLY : LHOOK, DR_HOOK +! ########################################################### +! +!!**** *INI_SNOW * - re-initialize the constants based on snow-size distubutio +!! cold microphysical schemes. +!! +!! PURPOSE +!! ------- +!! The purpose of this routine is to reinitialize the constants for snow used to +!! resolve the mixed phase microphysical scheme. +!! EXTERNAL +!! -------- +!! GAMMA : gamma function +!! +!! +!! IMPLICIT ARGUMENTS +!! ------------------ +!! Module MODD_CST +!! XPI ! +!! XP00 ! Reference pressure +!! XRD ! Gaz constant for dry air +!! XRHOLW ! Liquid water density +!! Module MODD_REF +!! XTHVREFZ ! Reference virtual pot.temp. without orography +!! Module MODD_PARAMETERS +!! JPVEXT ! +!! Module MODD_RAIN_ICE_DESCR +!! Module MODD_RAIN_ICE_PARAM +!! +!! REFERENCE +!! --------- +!! Book2 of documentation ( routine INI_RAIN_ICE ) +!! +!! ORIGINAL AUTHOR (from ini_rain_ice) +!! -------------- +!! J.-P. Pinty * Laboratoire d'Aerologie* +!! +!! MODIFICATIONS +!! ------------- +!! 2018-02 +!! Karl-Ivar Ivarsson +!* 0. DECLARATIONS +! ------------ +! +USE MODD_CST +USE MODD_LUNIT +USE MODD_PARAMETERS +USE MODD_PARAM_ICE +USE MODD_RAIN_ICE_DESCR +USE MODD_RAIN_ICE_PARAM +USE MODD_REF +! +USE MODI_GAMMA +USE MODI_GAMMA_INC +USE MODE_RRCOLSS +USE MODE_RZCOLX +USE MODE_RSCOLRG +USE MODE_READ_XKER_RACCS +USE MODE_READ_XKER_SDRYG +USE MODE_READ_XKER_RDRYG +USE MODE_READ_XKER_SWETH +USE MODE_READ_XKER_GWETH + + +IMPLICIT NONE +! +!* 0.1 Declarations of dummy arguments : +! +! +INTEGER, INTENT(IN) :: KLUOUT ! Logical unit number for prints + +!* 0.2 Declarations of local variables : +! +INTEGER :: IKB ! Coordinates of the first physical + ! points along z + +REAL :: ZRHO00 ! Surface reference air density + +REAL :: ZCONC_MAX ! Maximal concentration for snow + + +REAL(KIND=JPRB) :: ZHOOK_HANDLE +IF (LHOOK) CALL DR_HOOK('INI_RAIN_ICE',0,ZHOOK_HANDLE) + + +XCCS = XFRMIN(16) +XCXS = XFRMIN(17) +IKB = 1 + JPVEXT +ZRHO00 = XP00/(XRD*XTHVREFZ(IKB)) +! recalculate ini_rain_ice stuff: + +! 3.4 Constants for shape parameter +XLBEXS = 1.0/(XCXS-XBS) +XLBS = ( XAS*XCCS*MOMG(XALPHAS,XNUS,XBS) )**(-XLBEXS) +ZCONC_MAX = 1.E6 ! Maximal concentration for falling particules set to 1 per cc +IF(XCCS>0. .AND. XCXS>0. )XLBDAS_MAX = ( ZCONC_MAX/XCCS )**(1./XCXS) + +! 4.2 Constants for sedimentation +XEXSEDS = (XBS+XDS-XCXS)/(XBS-XCXS) + +XFSEDS = XCS*XAS*XCCS*MOMG(XALPHAS,XNUS,XBS+XDS)* & + (XAS*XCCS*MOMG(XALPHAS,XNUS,XBS))**(-XEXSEDS)*(ZRHO00)**XCEXVT + +! 5.2 Constants for vapor deposition on ice +X0DEPS = (4.0*XPI)*XCCS*XC1S*XF0S*MOMG(XALPHAS,XNUS,1.) +X1DEPS = (4.0*XPI)*XCCS*XC1S*XF1S*SQRT(XCS)*MOMG(XALPHAS,XNUS,0.5*XDS+1.5) +XEX0DEPS = XCXS-1.0 +XEX1DEPS = XCXS-0.5*(XDS+3.0) + +! 5.4 Constants for snow aggregation +XFIAGGS = (XPI/4.0)*XCOLIS*XCCS*XCS*(ZRHO00**XCEXVT)*MOMG(XALPHAS,XNUS,XDS+2.0) +XEXIAGGS = XCXS-XDS-2.0 + +! 7.1 Constants for the riming of the aggregates +XEXCRIMSS= XCXS-XDS-2.0 +XCRIMSS = (XPI/4.0)*XCOLCS*XCCS*XCS*(ZRHO00**XCEXVT)*MOMG(XALPHAS,XNUS,XDS+2.0) +XEXCRIMSG= XEXCRIMSS +XCRIMSG = XCRIMSS +XSRIMCG = XCCS*XAS*MOMG(XALPHAS,XNUS,XBS) +XEXSRIMCG= XCXS-XBS + +! 7.2 Constants for the accretion of raindrops onto aggregates + +XFRACCSS = ((XPI**2)/24.0)*XCCS*XCCR*XRHOLW*(ZRHO00**XCEXVT) + +XFSACCRG = (XPI/4.0)*XAS*XCCS*XCCR*(ZRHO00**XCEXVT) + +! 8.2.3 Constants for the aggregate collection by the graupeln +XFSDRYG = (XPI/4.0)*XCOLSG*XCCG*XCCS*XAS*(ZRHO00**XCEXVT) + +! 9.2.2 Constants for the aggregate collection by the hailstones +XFSWETH = (XPI/4.0)*XCCH*XCCS*XAS*(ZRHO00**XCEXVT) + +WRITE(UNIT=KLUOUT,FMT='(" updated snow concentration:C=",E13.6," x=",E13.6)') & + XCCS,XCXS + +IF (LHOOK) CALL DR_HOOK('INI_SNOW',1,ZHOOK_HANDLE) + +CONTAINS +! +!------------------------------------------------------------------------------ +! + FUNCTION MOMG(PALPHA,PNU,PP) RESULT (PMOMG) +! +! auxiliary routine used to compute the Pth moment order of the generalized +! gamma law +! + USE MODI_GAMMA +! + IMPLICIT NONE +! + REAL :: PALPHA ! first shape parameter of the dimensionnal distribution + REAL :: PNU ! second shape parameter of the dimensionnal distribution + REAL :: PP ! order of the moment + REAL :: PMOMG ! result: moment of order ZP +! +!------------------------------------------------------------------------------ +! +! + PMOMG = GAMMA(PNU+PP/PALPHA)/GAMMA(PNU) +! + END FUNCTION MOMG +! +!------------------------------------------------------------------------------- +! +! +END SUBROUTINE INI_SNOW diff --git a/src/common/micro/ini_tiwmx.F90 b/src/common/micro/ini_tiwmx.F90 new file mode 100644 index 0000000000000000000000000000000000000000..2e3209a38d5bd88f21ac0fa68d98172da3692d99 --- /dev/null +++ b/src/common/micro/ini_tiwmx.F90 @@ -0,0 +1,55 @@ +SUBROUTINE INI_TIWMX + USE PARKIND1, ONLY : JPRB + USE MODD_CST, ONLY : XALPW,XBETAW,XGAMW,XALPI,XBETAI,XGAMI, & + & XTT,XRV,XLVTT,XLSTT +! Include function definitions + USE MODE_TIWMX_FUN, ONLY : ESATW,DESDTW,ESATI,DESDTI,AA2,AA2W,AM3,AF3,BB3,BB3W,REDIN +! Only the tables, _NOT_ the functions! + USE MODE_TIWMX, ONLY : XNDEGR,NSTART,NSTOP,ESTABW,DESTABW,ESTABI,DESTABI, & + & A2TAB,BB3TAB,AM3TAB,AF3TAB,A2WTAB,BB3WTAB,REDINTAB + USE YOMHOOK, ONLY : LHOOK, DR_HOOK + IMPLICIT NONE + + INTEGER :: JK + REAL :: ZTEMP + + REAL(KIND=JPRB) :: ZHOOK_HANDLE + + IF (LHOOK) CALL DR_HOOK('INI_TIWMX',0,ZHOOK_HANDLE) + + DO JK=NSTART,NSTOP + ZTEMP = REAL(JK)/XNDEGR + + ESTABW(JK) = ESATW(ZTEMP) + DESTABW(JK) = DESDTW(ZTEMP) + + ESTABI(JK) = ESATI(ZTEMP) + DESTABI(JK) = DESDTI(ZTEMP) + +! Functions for ice crystals or water droplets: + A2TAB(JK) = AA2(ZTEMP) + A2WTAB(JK) = AA2W(ZTEMP) + AM3TAB(JK) = AM3(ZTEMP) + AF3TAB(JK) = AF3(ZTEMP) + BB3TAB(JK) = BB3(ZTEMP) + BB3WTAB(JK) = BB3W(ZTEMP) + REDINTAB(JK) = REDIN(ZTEMP) + + IF (ZTEMP.GT.273.15) THEN +! Avoid ice calculation above freezing level: + ESTABI(JK) = ESATW(ZTEMP) + DESTABI(JK) = DESDTW(ZTEMP) + +! Functions for ice crystal growth: + A2TAB(JK) = AA2(ZTEMP) + A2WTAB(JK) = AA2W(ZTEMP) + AM3TAB(JK) = 0. + AF3TAB(JK) = 0. + BB3TAB(JK) = BB3(ZTEMP) + BB3WTAB(JK) = BB3W(ZTEMP) + ENDIF + END DO + + IF (LHOOK) CALL DR_HOOK('INI_TIWMX',1,ZHOOK_HANDLE) + +END SUBROUTINE INI_TIWMX diff --git a/src/common/micro/modd_rain_ice_param.F90 b/src/common/micro/modd_rain_ice_param.F90 index 7568e2a68efc91b9081f88ca55d426724038c3fc..8fdcd71e8159369a4a9097d0c29eca7ba5169123 100644 --- a/src/common/micro/modd_rain_ice_param.F90 +++ b/src/common/micro/modd_rain_ice_param.F90 @@ -57,7 +57,9 @@ REAL,SAVE :: XSCFAC, & ! Constants for raindrop X0EVAR,X1EVAR,XEX0EVAR,XEX1EVAR, & ! evaporation: EVA and for X0DEPI,X2DEPI, & ! deposition : DEP on I, X0DEPS,X1DEPS,XEX0DEPS,XEX1DEPS, & ! on S and - X0DEPG,X1DEPG,XEX0DEPG,XEX1DEPG ! on G + XRDEPSRED,& + X0DEPG,X1DEPG,XEX0DEPG,XEX1DEPG, & ! on G + XRDEPGRED ! REAL,SAVE :: XTIMAUTI,XTEXAUTI,XCRIAUTI, & ! Constants for pristine ice XT0CRIAUTI,XACRIAUTI,XBCRIAUTI ! autoconversion : AUT @@ -181,5 +183,6 @@ REAL,DIMENSION(:,:), SAVE, ALLOCATABLE & :: XKER_SWETH, & ! Normalized kernel for SWETH XKER_GWETH, & ! Normalized kernel for GWETH XKER_RWETH ! Normalized kernel for RWETH +REAL,SAVE :: XFRMIN(40) ! Parmeters to modify melt and growth of graupels etc. ! END MODULE MODD_RAIN_ICE_PARAM diff --git a/src/common/micro/mode_ice4_slow.F90 b/src/common/micro/mode_ice4_slow.F90 index 8487ef858eeeecf520aca51905ef4f64f1dd3903..64ae21ff71ac7b6da32e3ea65b93160884355f70 100644 --- a/src/common/micro/mode_ice4_slow.F90 +++ b/src/common/micro/mode_ice4_slow.F90 @@ -100,13 +100,8 @@ IF(LDSOFT) THEN ELSE PRCHONI(:) = 0. WHERE(ZMASK(:)==1.) -#ifdef REPRO48 - PRCHONI(:) = XHON*PRHODREF(:)*PRCT(:) & - *EXP( XALPHA3*(PT(:)-XTT)-XBETA3 ) -#else PRCHONI(:) = MIN(1000.,XHON*PRHODREF(:)*PRCT(:) & *EXP( XALPHA3*(PT(:)-XTT)-XBETA3 )) -#endif ENDWHERE ENDIF ! diff --git a/src/common/micro/mode_icecloud.F90 b/src/common/micro/mode_icecloud.F90 index 774dd688734a27d00b2fa1caaebe32d83ad07011..e53841902b6281c4328ade465488ee0ce736e188 100644 --- a/src/common/micro/mode_icecloud.F90 +++ b/src/common/micro/mode_icecloud.F90 @@ -11,8 +11,7 @@ SUBROUTINE ICECLOUD & USE YOMHOOK , ONLY : LHOOK, DR_HOOK USE MODD_CST,ONLY : XCPD,XCPV,XLVTT,XLSTT,XG,XRD,XEPSILO USE MODE_TIWMX, ONLY: ESATW, ESATI - USE MODE_QSATMX_TAB -! USE MODI_TIWMX + USE MODE_QSATMX_TAB, ONLY: QSATMX_TAB IMPLICIT NONE !----------------------------------------------------------------------- ! @@ -77,15 +76,12 @@ REAL :: ZSIGMAX,ZSIGMAY,ZSIGMAZ,ZXDIST,ZYDIST,& & ZRHDIF,ZWCLD,ZI2W,ZRHLIMICE,ZRHLIMINV,ZA,ZRHI,ZR INTEGER :: JK -! External function -!REAL :: QSATMX_TAB - REAL(KIND=JPRB) :: ZHOOK_HANDLE IF (LHOOK) CALL DR_HOOK('ICECLOUD',0,ZHOOK_HANDLE) ZSIGMAX=3.E-4 ! assumed rh variation in x axis direction ZSIGMAY=ZSIGMAX ! assumed rh variation in y axis direction -ZSIGMAZ=1.6E-2 ! t5 +ZSIGMAZ=1.E-2 !ZXDIST=DTHETA*110000. ZXDIST=2500. diff --git a/src/common/micro/mode_tiwmx_fun.F90 b/src/common/micro/mode_tiwmx_fun.F90 new file mode 100644 index 0000000000000000000000000000000000000000..7a708b85990e271b4aad7bf0296383ff2073623d --- /dev/null +++ b/src/common/micro/mode_tiwmx_fun.F90 @@ -0,0 +1,108 @@ +!@no_insert_drhook +! ######spl + MODULE MODE_TIWMX_FUN +! ############### +! +!!**** *MODD_TIWMX_FUN* - +!! +!! PURPOSE +!! ------- +! The purpose of this ... +! +!! +!! REFERENCE +!! --------- +!! Book2 of documentation of Meso-NH (ha ha) +!! +!! AUTHOR +!! ------ +!! K. I. Ivarsson *SMHI* +!! +!! MODIFICATIONS +!! ------------- +!! Original 20/11/14 +!------------------------------------------------------------------------------- +! +!* 0. DECLARATIONS +! ------------ +! +USE MODD_CST, ONLY : XALPW,XBETAW,XGAMW,XTT,XALPI,XBETAI,XGAMI,XLSTT,XRV,XLVTT,& + &XLSTT,XP00,XCPV,XCI,XCL + +IMPLICIT NONE + +CONTAINS +! + REAL FUNCTION ESATW(TT) + REAL,INTENT(IN) :: TT + ESATW = EXP( XALPW - XBETAW/TT - XGAMW*ALOG(TT) ) + END FUNCTION ESATW +! +! pure saturation pressure over ice for tt <0 C, +! esatw otherwise. +! + REAL FUNCTION ESATI(TT) + REAL,INTENT(IN) :: TT + ESATI = ( 0.5 + SIGN(0.5,TT-XTT) )*EXP( XALPW - XBETAW/TT - XGAMW*ALOG(TT) ) - & + & ( SIGN(0.5,TT-XTT) - 0.5)*EXP( XALPI - XBETAI/TT - XGAMI*ALOG(TT) ) + END FUNCTION ESATI +! +! pure saturation pressure over water + REAL FUNCTION DESDTW(TT) + REAL,INTENT(IN) :: TT + DESDTW = ESATW(TT)*(XBETAW/TT - XGAMW)/TT + END FUNCTION DESDTW + + REAL FUNCTION DESDTI(TT) + REAL,INTENT(IN) :: TT + DESDTI = ( 0.5 + SIGN(0.5,TT-XTT) )*DESDTW(TT) - & + & ( SIGN(0.5,TT-XTT) - 0.5)*ESATI(TT)*(XBETAI/TT - XGAMI)/TT + END FUNCTION DESDTI + +! Ice crystal function: + REAL FUNCTION AA2(TT) + REAL,INTENT(IN) :: TT + AA2 = ( XLSTT + (XCPV-XCI)*(TT-XTT) )**2 / & + & (2.38E-2 + 0.0071E-2 *(TT - XTT))/(TT**2*XRV) + END FUNCTION AA2 + +! Water droplet function: + REAL FUNCTION AA2W(TT) + REAL,INTENT(IN) :: TT + AA2W = ( (XLVTT+ (XCPV-XCL)*(TT-XTT))**2)/ & + & (2.38E-2 + 0.0071E-2 *(TT - XTT))/(TT**2*XRV) + END FUNCTION AA2W + +! Ice crystal function: + REAL FUNCTION BB3(TT) + REAL,INTENT(IN) :: TT + BB3 = XRV/(0.211E-4 * (TT/XTT)**1.94 * XP00)*TT/ESATI(TT) + END FUNCTION BB3 + +! Water droplet function: + REAL FUNCTION BB3W(TT) + REAL,INTENT(IN) :: TT + BB3W = XRV/(0.211E-4 * (TT/XTT)**1.94 * XP00)*TT/ESATW(TT) + END FUNCTION BB3W + +! Meyers IN concentration function: + REAL FUNCTION AM3(TT) + REAL,INTENT(IN) :: TT + AM3 = 1000.*EXP(12.96*(ESATW(TT)/ESATI(TT) -1.) -0.639) + END FUNCTION AM3 + +! Fletchers IN concentration function: + REAL FUNCTION AF3(TT) + REAL,INTENT(IN) :: TT + AF3 = 0.01*EXP(0.6*(XTT-TT)) + END FUNCTION AF3 + +! Function for IN concentration reduction between 0 and -20 C: + REAL FUNCTION REDIN(TT) + REAL,INTENT(IN) :: TT + REAL ZZT + ZZT = MAX(0., MIN(1.,(XTT - TT)/20.)) + REDIN = 1.- (1.-ZZT)/(ZZT**3 + (1.-ZZT)**3)**.333 + END FUNCTION REDIN + +END MODULE MODE_TIWMX_FUN diff --git a/src/common/micro/modi_condensation.F90 b/src/common/micro/modi_condensation.F90 index 32d53731b9a1a45bc0fbfb9ff62808beb7fb6771..790f62fe50504ae7b86baf499679aecc9e266ee2 100644 --- a/src/common/micro/modi_condensation.F90 +++ b/src/common/micro/modi_condensation.F90 @@ -7,10 +7,12 @@ INTERFACE SUBROUTINE CONDENSATION( KIU, KJU, KKU, KIB, KIE, KJB, KJE, KKB, KKE, KKL,& HFRAC_ICE, HCONDENS, HLAMBDA3, & PPABS, PZZ, PRHODREF, PT, PRV_IN, PRV_OUT, PRC_IN, PRC_OUT, PRI_IN, PRI_OUT, & - PRR, PRS, PRG, PSIGS, PMFCONV, PCLDFR, PSIGRC, OUSERI,& - OSIGMAS, OCND2, PSIGQSAT, & + PRR, PRS, PRG, PSIGS, PMFCONV, PCLDFR, & + PSIGRC, OUSERI, OSIGMAS, OCND2, LHGT_QS, & + PICLDFR, PWCLDFR, PSSIO, PSSIU, PIFR, PSIGQSAT, & PLV, PLS, PCPH, & - PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF, PICE_CLD_WGT) + PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF, & + PICE_CLD_WGT) ! ! INTEGER, INTENT(IN) :: KIU ! horizontal dimension in x @@ -32,15 +34,6 @@ REAL, DIMENSION(KIU,KJU,KKU), INTENT(IN) :: PRHODREF REAL, DIMENSION(KIU,KJU,KKU), INTENT(INOUT) :: PT ! grid scale T (K) REAL, DIMENSION(KIU,KJU,KKU), INTENT(IN) :: PRV_IN ! grid scale water vapor mixing ratio (kg/kg) in input REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT) :: PRV_OUT! grid scale water vapor mixing ratio (kg/kg) in output -LOGICAL, INTENT(IN) :: OUSERI ! logical switch to compute both - ! liquid and solid condensate (OUSERI=.TRUE.) - ! or only solid condensate (OUSERI=.FALSE.) -LOGICAL, INTENT(IN) :: OSIGMAS! use present global Sigma_s values - ! or that from turbulence scheme -LOGICAL, INTENT(IN) :: OCND2 ! logical switch to sparate liquid and ice - ! more rigid (DEFALT value : .FALSE.) -REAL, DIMENSION(KIU,KJU), INTENT(IN) :: PSIGQSAT ! use an extra "qsat" variance contribution (OSIGMAS case) - ! multiplied by PSIGQSAT REAL, DIMENSION(KIU,KJU,KKU), INTENT(IN) :: PRC_IN ! grid scale r_c mixing ratio (kg/kg) in input REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT) :: PRC_OUT! grid scale r_c mixing ratio (kg/kg) in output REAL, DIMENSION(KIU,KJU,KKU), INTENT(IN) :: PRI_IN ! grid scale r_i (kg/kg) in input @@ -53,6 +46,24 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PMFCONV! convective mass flux (kg REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT) :: PCLDFR ! cloud fraction REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT) :: PSIGRC ! s r_c / sig_s^2 +LOGICAL, INTENT(IN) :: OUSERI ! logical switch to compute both + ! liquid and solid condensate (OUSERI=.TRUE.) + ! or only solid condensate (OUSERI=.FALSE.) +LOGICAL, INTENT(IN) :: OSIGMAS! use present global Sigma_s values + ! or that from turbulence scheme +LOGICAL, INTENT(IN) :: OCND2 ! logical switch to sparate liquid and ice + ! more rigid (DEFAULT value : .FALSE.) +LOGICAL, INTENT(IN) :: LHGT_QS! logical switch for height dependent VQSIGSAT +REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT) :: PICLDFR! ice cloud fraction +REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT) :: PWCLDFR! water or mixed-phase cloud fraction +REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT) :: PSSIO ! Super-saturation with respect to ice in the + ! supersaturated fraction +REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT) :: PSSIU ! Sub-saturation with respect to ice in the + ! subsaturated fraction +REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT) :: PIFR ! Ratio cloud ice moist part +REAL, DIMENSION(KIU,KJU), INTENT(IN) :: PSIGQSAT ! use an extra "qsat" variance contribution (OSIGMAS case) + ! multiplied by PSIGQSAT + REAL, DIMENSION(KIU,KJU,KKU), OPTIONAL, INTENT(IN) :: PLV ! Latent heat L_v REAL, DIMENSION(KIU,KJU,KKU), OPTIONAL, INTENT(IN) :: PLS ! Latent heat L_s REAL, DIMENSION(KIU,KJU,KKU), OPTIONAL, INTENT(IN) :: PCPH ! Specific heat C_ph diff --git a/src/common/micro/modi_ice_adjust.F90 b/src/common/micro/modi_ice_adjust.F90 index 147a971cde73d72b10db6551860a4ff42c1fa037..b955c80958528a238039c86eafbecf16271f1d37 100644 --- a/src/common/micro/modi_ice_adjust.F90 +++ b/src/common/micro/modi_ice_adjust.F90 @@ -5,16 +5,19 @@ INTERFACE ! SUBROUTINE ICE_ADJUST (KKA, KKU, KKL, KRR, HFRAC_ICE, HCONDENS, HLAMBDA3,& - HBUNAME, OSUBG_COND, OSIGMAS, OCND2, HSUBG_MF_PDF,& - PTSTEP, PSIGQSAT, & + HBUNAME, OSUBG_COND, OSIGMAS, OCND2, LHGT_QS, & + HSUBG_MF_PDF, PTSTEP, PSIGQSAT, & PRHODJ, PEXNREF, PRHODREF, PSIGS, PMFCONV, & PPABST, PZZ, & PEXN, PCF_MF, PRC_MF, PRI_MF, & + PICLDFR, PWCLDFR, PSSIO, PSSIU, PIFR, & PRV, PRC, PRVS, PRCS, PTH, PTHS, PSRCS, PCLDFR, & - PRR, PRI, PRIS, PRS, PRG, TBUDGETS, KBUDGETS, PRH,& + PRR, PRI, PRIS, PRS, PRG, TBUDGETS, KBUDGETS, & + PICE_CLD_WGT, & + PRH, & POUT_RV, POUT_RC, POUT_RI, POUT_TH, & - PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF, & - PICE_CLD_WGT) + PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF) +! USE MODD_BUDGET, ONLY: TBUDGETDATA IMPLICIT NONE ! @@ -22,9 +25,9 @@ IMPLICIT NONE !* 0.1 Declarations of dummy arguments : ! ! -INTEGER, INTENT(IN) :: KKA !near ground array index -INTEGER, INTENT(IN) :: KKU !uppest atmosphere array index -INTEGER, INTENT(IN) :: KKL !vert. levels type 1=MNH -1=ARO +INTEGER, INTENT(IN) :: KKA !near ground array index +INTEGER, INTENT(IN) :: KKU !uppest atmosphere array index +INTEGER, INTENT(IN) :: KKL !vert. levels type 1=MNH -1=ARO INTEGER, INTENT(IN) :: KRR ! Number of moist variables CHARACTER(LEN=1), INTENT(IN) :: HFRAC_ICE CHARACTER(LEN=80), INTENT(IN) :: HCONDENS @@ -32,59 +35,67 @@ CHARACTER(LEN=4), INTENT(IN) :: HLAMBDA3 ! formulation for lambda3 co CHARACTER(LEN=4), INTENT(IN) :: HBUNAME ! Name of the budget LOGICAL, INTENT(IN) :: OSUBG_COND ! Switch for Subgrid ! Condensation -LOGICAL :: OSIGMAS ! Switch for Sigma_s: +LOGICAL, INTENT(IN) :: OSIGMAS ! Switch for Sigma_s: ! use values computed in CONDENSATION ! or that from turbulence scheme -LOGICAL :: OCND2 ! logical switch to sparate liquid +LOGICAL, INTENT(IN) :: OCND2 ! logical switch to separate liquid ! and ice - ! more rigid (DEFALT value : .FALSE.) -CHARACTER(LEN=80), INTENT(IN) :: HSUBG_MF_PDF + ! more rigid (DEFAULT value : .FALSE.) +LOGICAL, INTENT(IN) :: LHGT_QS ! logical switch for height dependent VQSIGSAT +CHARACTER(LEN=80), INTENT(IN) :: HSUBG_MF_PDF REAL, INTENT(IN) :: PTSTEP ! Double Time step ! (single if cold start) REAL, DIMENSION(:,:), INTENT(IN) :: PSIGQSAT ! coeff applied to qsat variance contribution ! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! Dry density * Jacobian -REAL, DIMENSION(:,:,:), INTENT(IN) :: PEXNREF ! Reference Exner function -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PRHODJ ! Dry density * Jacobian +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PEXNREF ! Reference Exner function +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PRHODREF ! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSIGS ! Sigma_s at time t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PMFCONV ! convective mass flux -REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABST ! Absolute Pressure at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! height of model layer -REAL, DIMENSION(:,:,:), INTENT(IN) :: PEXN ! Exner function +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PSIGS ! Sigma_s at time t +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PMFCONV ! convective mass flux +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PPABST ! Absolute Pressure at t +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PZZ ! height of model layer +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PEXN ! Exner function ! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PCF_MF! Convective Mass Flux Cloud fraction -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRC_MF! Convective Mass Flux liquid mixing ratio -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRI_MF! Convective Mass Flux ice mixing ratio +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PCF_MF ! Convective Mass Flux Cloud fraction +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PRC_MF ! Convective Mass Flux liquid mixing ratio +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PRI_MF ! Convective Mass Flux ice mixing ratio ! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRV ! Water vapor m.r. to adjust -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRC ! Cloud water m.r. to adjust -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRVS ! Water vapor m.r. source -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRCS ! Cloud water m.r. source -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTH ! Theta to adjust -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHS ! Theta source -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSRCS ! Second-order flux +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PRV ! Water vapor m.r. to adjust +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PRC ! Cloud water m.r. to adjust +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(INOUT) :: PRVS ! Water vapor m.r. source +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(INOUT) :: PRCS ! Cloud water m.r. source +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PTH ! Theta to adjust +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(INOUT) :: PTHS ! Theta source +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(OUT) :: PSRCS ! Second-order flux ! s'rc'/2Sigma_s2 at time t+1 ! multiplied by Lambda_3 -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PCLDFR ! Cloud fraction +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(OUT) :: PCLDFR ! Cloud fraction +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(OUT) :: PICLDFR ! ice cloud fraction +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(OUT) :: PWCLDFR ! water or mixed-phase cloud fraction +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(OUT) :: PSSIO ! Super-saturation with respect to ice in the + ! supersaturated fraction +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(OUT) :: PSSIU ! Sub-saturation with respect to ice in the + ! subsaturated fraction +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(OUT) :: PIFR ! Ratio cloud ice moist part to dry part ! -REAL, DIMENSION(:,:,:), INTENT(INOUT):: PRIS ! Cloud ice m.r. at t+1 -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRR ! Rain water m.r. to adjust -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRI ! Cloud ice m.r. to adjust -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRS ! Aggregate m.r. to adjust -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRG ! Graupel m.r. to adjust -REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(IN) :: PRH ! Hail m.r. to adjust -REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(OUT) :: POUT_RV ! Adjusted value -REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(OUT) :: POUT_RC ! Adjusted value -REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(OUT) :: POUT_RI ! Adjusted value -REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(OUT) :: POUT_TH ! Adjusted value -REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(OUT) :: PHLC_HRC -REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(OUT) :: PHLC_HCF -REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(OUT) :: PHLI_HRI -REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(OUT) :: PHLI_HCF +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(INOUT) :: PRIS ! Cloud ice m.r. at t+1 +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PRR ! Rain water m.r. to adjust +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PRI ! Cloud ice m.r. to adjust +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PRS ! Aggregate m.r. to adjust +REAL, DIMENSION(:,:,:), CONTIGUOUS, INTENT(IN) :: PRG ! Graupel m.r. to adjust TYPE(TBUDGETDATA), DIMENSION(KBUDGETS), INTENT(INOUT) :: TBUDGETS -INTEGER, INTENT(IN) :: KBUDGETS -REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PICE_CLD_WGT +INTEGER, INTENT(IN) :: KBUDGETS +REAL, DIMENSION(:,:), CONTIGUOUS, OPTIONAL, INTENT(IN) :: PICE_CLD_WGT +REAL, DIMENSION(:,:,:), CONTIGUOUS, OPTIONAL, INTENT(IN) :: PRH ! Hail m.r. to adjust +REAL, DIMENSION(:,:,:), CONTIGUOUS, OPTIONAL, INTENT(OUT) :: POUT_RV ! Adjusted value +REAL, DIMENSION(:,:,:), CONTIGUOUS, OPTIONAL, INTENT(OUT) :: POUT_RC ! Adjusted value +REAL, DIMENSION(:,:,:), CONTIGUOUS, OPTIONAL, INTENT(OUT) :: POUT_RI ! Adjusted value +REAL, DIMENSION(:,:,:), CONTIGUOUS, OPTIONAL, INTENT(OUT) :: POUT_TH ! Adjusted value +REAL, DIMENSION(:,:,:), CONTIGUOUS, OPTIONAL, INTENT(OUT) :: PHLC_HRC +REAL, DIMENSION(:,:,:), CONTIGUOUS, OPTIONAL, INTENT(OUT) :: PHLC_HCF +REAL, DIMENSION(:,:,:), CONTIGUOUS, OPTIONAL, INTENT(OUT) :: PHLI_HRI +REAL, DIMENSION(:,:,:), CONTIGUOUS, OPTIONAL, INTENT(OUT) :: PHLI_HCF ! END SUBROUTINE ICE_ADJUST ! diff --git a/src/common/micro/modi_ini_snow.F90 b/src/common/micro/modi_ini_snow.F90 new file mode 100644 index 0000000000000000000000000000000000000000..788ec7c9a8f216a921b5ddcbba27ab78195188b0 --- /dev/null +++ b/src/common/micro/modi_ini_snow.F90 @@ -0,0 +1,15 @@ +! ######spl + MODULE MODI_INI_SNOW +! ######################## +! +INTERFACE + SUBROUTINE INI_SNOW ( KLUOUT ) +! +INTEGER, INTENT(IN) :: KLUOUT ! Logical unit number for prints + +! +END SUBROUTINE INI_SNOW +! +END INTERFACE +! +END MODULE MODI_INI_SNOW diff --git a/src/common/micro/modi_ini_tiwmx.F90 b/src/common/micro/modi_ini_tiwmx.F90 new file mode 100644 index 0000000000000000000000000000000000000000..9ef7e6409e537b13fe57af01140bc353dddfe029 --- /dev/null +++ b/src/common/micro/modi_ini_tiwmx.F90 @@ -0,0 +1,16 @@ +!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC for details. version 1. +! ######spl + MODULE MODI_INI_TIWMX +! ##################### +! +INTERFACE +! +SUBROUTINE INI_TIWMX +END SUBROUTINE INI_TIWMX +! +END INTERFACE +! +END MODULE MODI_INI_TIWMX diff --git a/src/common/turb/modd_cturb.F90 b/src/common/turb/modd_cturb.F90 index a446914f779a1f5aa6d72c4c24b7b9a2960261e5..75d4a5948b9a10399fd04e986cef957f21050856 100644 --- a/src/common/turb/modd_cturb.F90 +++ b/src/common/turb/modd_cturb.F90 @@ -82,5 +82,6 @@ REAL,SAVE :: XPHI_LIM ! Threshold value for Phi3 and Psi3 REAL,SAVE :: XSBL_O_BL ! SBL height / BL height ratio REAL,SAVE :: XFTOP_O_FSURF! Fraction of surface (heat or momentum) flux used to define top of BL LOGICAL,SAVE :: LHARAT ! SWITCH HARATU +LOGICAL,SAVE :: LSTATNW ! SWITCH LSTATNW ! END MODULE MODD_CTURB diff --git a/src/common/turb/modd_turbn.f90 b/src/common/turb/modd_turbn.F90 similarity index 100% rename from src/common/turb/modd_turbn.f90 rename to src/common/turb/modd_turbn.F90 diff --git a/src/common/turb/mode_coefj.f90 b/src/common/turb/mode_coefj.F90 similarity index 100% rename from src/common/turb/mode_coefj.f90 rename to src/common/turb/mode_coefj.F90 diff --git a/src/common/turb/mode_compute_function_thermo_mf.F90 b/src/common/turb/mode_compute_function_thermo_mf.F90 index 64cc93462a8539820657547cf78cff60ce859fb9..92d46fae9efe4fad66545ef8beaf97df70e8b130 100644 --- a/src/common/turb/mode_compute_function_thermo_mf.F90 +++ b/src/common/turb/mode_compute_function_thermo_mf.F90 @@ -1,6 +1,6 @@ !MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. ! ######spl MODULE MODE_COMPUTE_FUNCTION_THERMO_MF @@ -14,14 +14,14 @@ CONTAINS ! ################################################################# ! !! -!!**** *COMPUTE_FUNCTION_THERMO_MF* - +!!**** *COMPUTE_FUNCTION_THERMO_MF* - !! !! PURPOSE !! ------- !! !!** METHOD !! ------ -!! +!! !! !! EXTERNAL !! -------- @@ -35,7 +35,7 @@ CONTAINS !! !! AUTHOR !! ------ -!! +!! !! JP Pinty *LA* !! !! MODIFICATIONS @@ -44,13 +44,15 @@ CONTAINS !! Externalisation of computations done in TURB and MF_TURB (Malardel and Pergaud, fev. 2007) !! Optimization : V.Masson, 09/2010 !! S. Riette Sept 2011 : remove of unused PL?OCPEXN, use of received ice fraction +!! Wim de Rooy June 2019: update statistical cloud scheme !! !! -------------------------------------------------------------------------- -! +! !* 0. DECLARATIONS ! ------------ ! USE MODD_CST +USE MODD_CTURB, ONLY : LSTATNW USE PARKIND1, ONLY : JPRB USE YOMHOOK , ONLY : LHOOK, DR_HOOK ! @@ -73,12 +75,12 @@ REAL, DIMENSION(:,:), INTENT(OUT) :: PT ! temperature REAL, DIMENSION(:,:), INTENT(OUT) :: PAMOIST,PATHETA ! !------------------------------------------------------------------------------- -! +! !* 0.2 Declarations of local variables ! REAL :: ZEPS ! XMV / XMD REAL, DIMENSION(SIZE(PTH,1),SIZE(PTH,2)) :: & - ZCP, & ! Cp + ZCP, & ! Cp ZE, & ! Saturation mixing ratio ZDEDT, & ! Saturation mixing ratio derivative ZAMOIST_W, & ! Coefficients for s = f (Thetal,Rnp) @@ -103,11 +105,11 @@ ZCP=XCPD IF (KRR > 0) ZCP(:,:) = ZCP(:,:) + XCPV * PR(:,:,1) -DO JRR = 2,1+KRRL ! loop on the liquid components +DO JRR = 2,1+KRRL ! loop on the liquid components ZCP(:,:) = ZCP(:,:) + XCL * PR(:,:,JRR) END DO -DO JRR = 2+KRRL,1+KRRL+KRRI ! loop on the solid components +DO JRR = 2+KRRL,1+KRRL+KRRI ! loop on the solid components ZCP(:,:) = ZCP(:,:) + XCI * PR(:,:,JRR) END DO @@ -118,9 +120,9 @@ PT(:,:) = PTH(:,:) * PEXN(:,:) ! !! Liquid water ! -IF ( KRRL >= 1 ) THEN +IF ( KRRL >= 1 ) THEN ! -!* Lv/Cph +!* Lv/Cph ! ZLVOCP(:,:) = (XLVTT + (XCPV-XCL) * (PT(:,:)-XTT) ) / ZCP(:,:) ! @@ -137,31 +139,32 @@ IF ( KRRL >= 1 ) THEN ZDEDT(:,:) = ( XBETAW / PT(:,:) - XGAMW ) / PT(:,:) & * ZE(:,:) * ( 1. + ZE(:,:) / ZEPS ) ! -!* Compute Amoist -! - ZAMOIST_W(:,:)= 0.5 / ( 1.0 + ZDEDT(:,:) * ZLVOCP(:,:) ) -! -!* Compute Atheta +!* Compute Amoist and Atheta ! - ZATHETA_W(:,:)= ZAMOIST_W(:,:) * PEXN(:,:) * & - ( ( ZE(:,:) - PR(:,:,1) ) * ZLVOCP(:,:) / & - ( 1. + ZDEDT(:,:) * ZLVOCP(:,:) ) * & - ( & - ZE(:,:) * (1. + ZE(:,:)/ZEPS) & - * ( -2.*XBETAW/PT(:,:) + XGAMW ) / PT(:,:)**2 & - +ZDEDT(:,:) * (1. + 2. * ZE(:,:)/ZEPS) & - * ( XBETAW/PT(:,:) - XGAMW ) / PT(:,:) & - ) & - - ZDEDT(:,:) & - ) - + IF (LSTATNW) THEN + ZAMOIST_W(:,:)= 1.0 / ( 1.0 + ZDEDT(:,:) * ZLVOCP(:,:) ) + ZATHETA_W(:,:)= ZAMOIST_W(:,:) * PEXN(:,:) * ZDEDT(:,:) + ELSE + ZAMOIST_W(:,:)= 0.5 / ( 1.0 + ZDEDT(:,:) * ZLVOCP(:,:) ) + ZATHETA_W(:,:)= ZAMOIST_W(:,:) * PEXN(:,:) * & + ( ( ZE(:,:) - PR(:,:,1) ) * ZLVOCP(:,:) / & + ( 1. + ZDEDT(:,:) * ZLVOCP(:,:) ) * & + ( & + ZE(:,:) * (1. + ZE(:,:)/ZEPS) & + * ( -2.*XBETAW/PT(:,:) + XGAMW ) / PT(:,:)**2 & + +ZDEDT(:,:) * (1. + 2. * ZE(:,:)/ZEPS) & + * ( XBETAW/PT(:,:) - XGAMW ) / PT(:,:) & + ) & + - ZDEDT(:,:) & + ) + ENDIF ! !! Solid water ! - IF ( KRRI >= 1 ) THEN + IF ( KRRI >= 1 ) THEN ! -!* Ls/Cph +!* Ls/Cph ! ZLSOCP(:,:) = (XLSTT + (XCPV-XCI) * (PT(:,:)-XTT) ) / ZCP(:,:) ! @@ -178,23 +181,25 @@ IF ( KRRL >= 1 ) THEN ZDEDT(:,:) = ( XBETAI / PT(:,:) - XGAMI ) / PT(:,:) & * ZE(:,:) * ( 1. + ZE(:,:) / ZEPS ) ! -!* Compute Amoist -! - ZAMOIST_I(:,:)= 0.5 / ( 1.0 + ZDEDT(:,:) * ZLSOCP(:,:) ) -! -!* Compute Atheta -! - ZATHETA_I(:,:)= ZAMOIST_I(:,:) * PEXN(:,:) * & - ( ( ZE(:,:) - PR(:,:,1) ) * ZLSOCP(:,:) / & - ( 1. + ZDEDT(:,:) * ZLSOCP(:,:) ) * & - ( & - ZE(:,:) * (1. + ZE(:,:)/ZEPS) & - * ( -2.*XBETAI/PT(:,:) + XGAMI ) / PT(:,:)**2 & - +ZDEDT(:,:) * (1. + 2. * ZE(:,:)/ZEPS) & - * ( XBETAI/PT(:,:) - XGAMI ) / PT(:,:) & - ) & - - ZDEDT(:,:) & - ) +!* Compute Amoist and Atheta +! + IF (LSTATNW) THEN + ZAMOIST_I(:,:)= 1.0 / ( 1.0 + ZDEDT(:,:) * ZLSOCP(:,:) ) + ZATHETA_I(:,:)= ZAMOIST_I(:,:) * PEXN(:,:) * ZDEDT(:,:) + ELSE + ZAMOIST_I(:,:)= 0.5 / ( 1.0 + ZDEDT(:,:) * ZLSOCP(:,:) ) + ZATHETA_I(:,:)= ZAMOIST_I(:,:) * PEXN(:,:) * & + ( ( ZE(:,:) - PR(:,:,1) ) * ZLSOCP(:,:) / & + ( 1. + ZDEDT(:,:) * ZLSOCP(:,:) ) * & + ( & + ZE(:,:) * (1. + ZE(:,:)/ZEPS) & + * ( -2.*XBETAI/PT(:,:) + XGAMI ) / PT(:,:)**2 & + +ZDEDT(:,:) * (1. + 2. * ZE(:,:)/ZEPS) & + * ( XBETAI/PT(:,:) - XGAMI ) / PT(:,:) & + ) & + - ZDEDT(:,:) & + ) + ENDIF ELSE ZAMOIST_I(:,:)=0. diff --git a/src/common/turb/mode_compute_mf_cloud_stat.F90 b/src/common/turb/mode_compute_mf_cloud_stat.F90 index 12fcce462fef6b0eb2c4b73fec8b6058a78ada08..7f670d5b6e4650225975d52650c648ffcff41287 100644 --- a/src/common/turb/mode_compute_mf_cloud_stat.F90 +++ b/src/common/turb/mode_compute_mf_cloud_stat.F90 @@ -48,10 +48,13 @@ CONTAINS !! ------------- !! Original 25 Aug 2011 !! S. Riette Jan 2012: support for both order of vertical levels +!! Wim de Rooy June 2019: update statistical cloud scheme (now including +!! covariance term for MF contribution) !! -------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ +USE MODD_CTURB, ONLY : LSTATNW, XCTV USE MODD_PARAM_MFSHALL_n, ONLY : XTAUSIGMF USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT ! @@ -113,8 +116,13 @@ IF (KRRL > 0) THEN ! ! - ZFLXZ(:,:) = -2 * XTAUSIGMF * PEMF(:,:)*(PTHL_UP(:,:)-MZM_MF(PTHLM(:,:), KKA, KKU, KKL)) * & - GZ_M_W_MF(PTHLM(:,:),PDZZ(:,:), KKA, KKU, KKL) + IF (LSTATNW) THEN + ZFLXZ(:,:) = -2 * XCTV * XTAUSIGMF * PEMF(:,:)*(PTHL_UP(:,:)-MZM_MF(PTHLM(:,:), KKA, KKU, KKL)) * & + GZ_M_W_MF(PTHLM(:,:),PDZZ(:,:), KKA, KKU, KKL) + ELSE + ZFLXZ(:,:) = -2 * XTAUSIGMF * PEMF(:,:)*(PTHL_UP(:,:)-MZM_MF(PTHLM(:,:), KKA, KKU, KKL)) * & + GZ_M_W_MF(PTHLM(:,:),PDZZ(:,:), KKA, KKU, KKL) + ENDIF ! ! Avoid negative values ZFLXZ(:,:) = MAX(0.,ZFLXZ(:,:)) @@ -129,14 +137,30 @@ IF (KRRL > 0) THEN ! ! ! - ZFLXZ(:,:) = -2 * XTAUSIGMF * PEMF(:,:)*(PRT_UP(:,:)-MZM_MF(PRTM(:,:), KKA, KKU, KKL)) * & - GZ_M_W_MF(PRTM(:,:),PDZZ(:,:), KKA, KKU, KKL) + IF (LSTATNW) THEN + ZFLXZ(:,:) = -2 * XCTV * XTAUSIGMF * PEMF(:,:)*(PRT_UP(:,:)-MZM_MF(PRTM(:,:), KKA, KKU, KKL)) * & + GZ_M_W_MF(PRTM(:,:),PDZZ(:,:), KKA, KKU, KKL) + ELSE + ZFLXZ(:,:) = -2 * XTAUSIGMF * PEMF(:,:)*(PRT_UP(:,:)-MZM_MF(PRTM(:,:), KKA, KKU, KKL)) * & + GZ_M_W_MF(PRTM(:,:),PDZZ(:,:), KKA, KKU, KKL) + ENDIF ! ! Avoid negative values ZFLXZ(:,:) = MAX(0.,ZFLXZ(:,:)) ! PSIGMF(:,:) = PSIGMF(:,:) + ZAMOIST(:,:) **2 * MZF_MF(ZFLXZ(:,:), KKA, KKU, KKL) + IF (LSTATNW) THEN + !wc Now including convection covariance contribution in case of LSTATNW=TRUE + ! + ! 1.2.2 contribution from <Rnp Thl> + ZFLXZ(:,:) = - XCTV * XTAUSIGMF * (PEMF(:,:)*(PRT_UP(:,:)-MZM_MF(PRTM(:,:), KKA, KKU, KKL)) * & + GZ_M_W_MF(PTHLM(:,:),PDZZ(:,:), KKA, KKU, KKL) + & + PEMF(:,:)*(PTHL_UP(:,:)-MZM_MF(PTHLM(:,:), KKA, KKU, KKL)) * & + GZ_M_W_MF(PRTM(:,:),PDZZ(:,:), KKA, KKU, KKL)) + + PSIGMF(:,:) = PSIGMF(:,:) - MIN(0.,2.*ZAMOIST(:,:)*ZATHETA(:,:)*MZF_MF(ZFLXZ(:,:), KKA, KKU, KKL)) + ENDIF ! ! 1.3 Vertical part of Sigma_s ! diff --git a/src/common/turb/mode_tke_eps_sources.F90 b/src/common/turb/mode_tke_eps_sources.F90 index b2bcf0fe16e3365a0708939a151cc665ffd32f56..1e1e4bc400e6903c7e5d4f4d989efd646f195460 100644 --- a/src/common/turb/mode_tke_eps_sources.F90 +++ b/src/common/turb/mode_tke_eps_sources.F90 @@ -8,10 +8,10 @@ CONTAINS SUBROUTINE TKE_EPS_SOURCES(KKA,KKU,KKL,KMI,PTKEM,PLM,PLEPS,PDP, & & PTRH,PRHODJ,PDZZ,PDXX,PDYY,PDZX,PDZY,PZZ, & & PTSTEP,PIMPL,PEXPL, & - & HTURBLEN,HTURBDIM, & - & TPFILE,OTURB_DIAG,ODIAG_IN_RUN, & + & HTURBLEN,HTURBDIM,OOCEAN, & + & TPFILE,OTURB_DIAG,ODIAG_IN_RUN,PSFUM,PSFVM, & & PTP,PRTKES,PRTHLS,PCOEF_DISS,PTDIFF,PTDISS,PRTKEMS,& - & TBUDGETS, KBUDGETS, & + & TBUDGETS, KBUDGETS, & & PEDR, PTR,PDISS, PCURRENT_TKE_DISS ) ! ################################################################## ! @@ -178,8 +178,10 @@ CHARACTER(LEN=4), INTENT(IN) :: HTURBDIM ! dimensionality of the CHARACTER(LEN=4), INTENT(IN) :: HTURBLEN ! kind of mixing length TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file LOGICAL, INTENT(IN) :: OTURB_DIAG ! switch to write some -LOGICAL, INTENT(IN) :: ODIAG_IN_RUN ! switch to activate online diagnostics (mesonh) - ! diagnostic fields in the syncronous FM-file + ! diagnostic fields in the syncronous FM-file +LOGICAL, INTENT(IN) :: ODIAG_IN_RUN ! switch to activate online diagnostics (mesonh) +LOGICAL, INTENT(IN) :: OOCEAN ! switch to activate LES OCEAN version + REAL, DIMENSION(:,:,:), INTENT(INOUT):: PDP ! Dyn. prod. of TKE REAL, DIMENSION(:,:,:), INTENT(IN) :: PTRH REAL, DIMENSION(:,:,:), INTENT(IN) :: PTP ! Ther. prod. of TKE @@ -196,6 +198,7 @@ REAL, DIMENSION(:,:,:), INTENT(OUT), OPTIONAL :: PTR ! Transport pro REAL, DIMENSION(:,:,:), INTENT(OUT), OPTIONAL :: PDISS ! Dissipation of TKE REAL, DIMENSION(:,:,:), INTENT(OUT), OPTIONAL :: PEDR ! EDR REAL, DIMENSION(:,:,:), INTENT(INOUT), OPTIONAL :: PCURRENT_TKE_DISS ! if ODIAG_IN_RUN in mesonh +REAL, DIMENSION(:,:), INTENT(IN) :: PSFUM,PSFVM ! momentum sfc flux ! ! ! @@ -263,8 +266,13 @@ END IF !* 2.2 Explicit TKE sources except horizontal turbulent transport ! ! extrapolate the dynamic production with a 1/Z law from its value at the -! W(IKB+1) value stored in PDP(IKB) to the mass localization tke(IKB) -PDP(:,:,IKB) = PDP(:,:,IKB) * (1. + PDZZ(:,:,IKB+KKL)/PDZZ(:,:,IKB)) +IF (OOCEAN) THEN + ! W(IKE) value stored in PDP(IKE) to the mass localization of tke(IKE) + PDP(:,:,IKE) = PDP(:,:,IKE) * (1. + PDZZ(:,:,IKE)/PDZZ(:,:,IKE+1)) +ELSE + ! W(IKB+1) value stored in PDP(IKB) to the mass localization tke(IKB) + PDP(:,:,IKB) = PDP(:,:,IKB) * (1. + PDZZ(:,:,IKB+KKL)/PDZZ(:,:,IKB)) +END IF ! ! Compute the source terms for TKE: ( ADVECtion + NUMerical DIFFusion + ..) ! + (Dynamical Production) + (Thermal Production) - (dissipation) @@ -276,6 +284,12 @@ ZSOURCE(:,:,:) = ( PRTKES(:,:,:) + PRTKEMS(:,:,:) ) / PRHODJ(:,:,:) & !* 2.2 implicit vertical TKE transport ! ! +! To add here in ZSOURCE surface flux of TKE +!(assumed to be 0 for ATM, +IF (OOCEAN) THEN + !for ocean:wave breaking simple/very rough param wE = 100 Ustar**3 where ustar is the Tau_atmi/rhocea + ZSOURCE (:,:,IKE)=ZSOURCE(:,:,IKE)-1.E2*((PSFUM(:,:)**2 + PSFVM(:,:)**2)**1.5) /PDZZ(:,:,IKE) +END IF ! Compute the vector giving the elements just under the diagonal for the ! matrix inverted in TRIDIAG ! @@ -350,9 +364,18 @@ END IF !Store the previous source terms in prtkes before initializing the next one !Should be in IF LBUDGET_TKE only. Was removed out for a correct comput. of PTDIFF in case of LBUDGET_TKE=F in AROME +#ifdef REPRO48 +IF (LBUDGET_TKE) THEN +PRTKES(:,:,:) = PRTKES(:,:,:) + PDP(:,:,:) * PRHODJ(:,:,:) +PRTKES(:,:,:) = PRTKES(:,:,:) + PTP(:,:,:) * PRHODJ(:,:,:) +PRTKES(:,:,:) = PRTKES(:,:,:) - XCED * SQRT(PTKEM(:,:,:)) / PLEPS(:,:,:) * & + (PEXPL*PTKEM(:,:,:) + PIMPL*ZRES(:,:,:)) * PRHODJ(:,:,:) +END IF +#else PRTKES(:,:,:) = PRTKES(:,:,:) + PRHODJ(:,:,:) * & ( PDP(:,:,:) + PTP(:,:,:) & - XCED * SQRT(PTKEM(:,:,:)) / PLEPS(:,:,:) * ( PEXPL*PTKEM(:,:,:) + PIMPL*ZRES(:,:,:) ) ) +#endif ! PTDIFF(:,:,:) = ZRES(:,:,:) / PTSTEP - PRTKES(:,:,:)/PRHODJ(:,:,:) & & - PDP(:,:,:)- PTP(:,:,:) - PTDISS(:,:,:) diff --git a/src/common/turb/mode_turb_ver.F90 b/src/common/turb/mode_turb_ver.F90 index 49ed101bb374d335175ae8b26f446b5bdf427f44..393377797d4a4af6e802590439c6089404d96c7e 100644 --- a/src/common/turb/mode_turb_ver.F90 +++ b/src/common/turb/mode_turb_ver.F90 @@ -11,7 +11,7 @@ SUBROUTINE TURB_VER(KKA,KKU,KKL,KRR,KRRL,KRRI, & PTSTEP, TPFILE, & PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,PZZ, & PCOSSLOPE,PSINSLOPE, & - PRHODJ,PTHVREF, & + PRHODJ,PTHVREF,PSFUM,PSFVM, & PSFTHM,PSFRM,PSFSVM,PSFTHP,PSFRP,PSFSVP, & PCDUEFF,PTAU11M,PTAU12M,PTAU33M, & PUM,PVM,PWM,PUSLOPEM,PVSLOPEM,PTHLM,PRM,PSVM, & @@ -275,6 +275,7 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: MFMOIST ! moist mass flux dual sc REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHVREF ! ref. state Virtual ! Potential Temperature ! +REAL, DIMENSION(:,:), INTENT(IN) :: PSFUM,PSFVM ! surface fluxe REAL, DIMENSION(:,:), INTENT(IN) :: PSFTHM,PSFRM ! surface fluxes at time REAL, DIMENSION(:,:,:), INTENT(IN) :: PSFSVM ! t - deltat ! @@ -556,7 +557,7 @@ CALL TURB_VER_DYN_FLUX(KKA,KKU,KKL, & TPFILE, & PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,PZZ, & PCOSSLOPE,PSINSLOPE, & - PRHODJ, & + PRHODJ,PSFUM,PSFVM, & PCDUEFF,PTAU11M,PTAU12M,PTAU33M, & PTHLM,PRM,PSVM,PUM,PVM,PWM,PUSLOPEM,PVSLOPEM, & PTKEM,ZLM,MFMOIST,ZWU,ZWV, & diff --git a/src/common/turb/mode_turb_ver_dyn_flux.F90 b/src/common/turb/mode_turb_ver_dyn_flux.F90 index 12915e63529d9791f97de93bbb1fe0f9cad3846b..9d018ff6e338b1a090d65ed8f0e0fbf17d94d871 100644 --- a/src/common/turb/mode_turb_ver_dyn_flux.F90 +++ b/src/common/turb/mode_turb_ver_dyn_flux.F90 @@ -13,6 +13,7 @@ SUBROUTINE TURB_VER_DYN_FLUX(KKA,KKU,KKL, & PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,PZZ, & PCOSSLOPE,PSINSLOPE, & PRHODJ, & + PSFUM,PSFVM, & PCDUEFF,PTAU11M,PTAU12M,PTAU33M, & PTHLM,PRM,PSVM,PUM,PVM,PWM,PUSLOPEM,PVSLOPEM, & PTKEM,PLM,MFMOIST,PWU,PWV, & @@ -27,13 +28,13 @@ SUBROUTINE TURB_VER_DYN_FLUX(KKA,KKU,KKL, & !! PURPOSE !! ------- ! The purpose of this routine is to compute the vertical turbulent -! fluxes of the evolutive variables and give back the source +! fluxes of the evolutive variables and give back the source ! terms to the main program. In the case of large horizontal meshes, ! the divergence of these vertical turbulent fluxes represent the whole ! effect of the turbulence but when the three-dimensionnal version of ! the turbulence scheme is activated (CTURBDIM="3DIM"), these divergences -! are completed in the next routine TURB_HOR. -! An arbitrary degree of implicitness has been implemented for the +! are completed in the next routine TURB_HOR. +! An arbitrary degree of implicitness has been implemented for the ! temporal treatment of these diffusion terms. ! The vertical boundary conditions are as follows: ! * at the bottom, the surface fluxes are prescribed at the same @@ -41,8 +42,8 @@ SUBROUTINE TURB_VER_DYN_FLUX(KKA,KKU,KKL, & ! * at the top, the turbulent fluxes are set to 0. ! It should be noted that the condensation has been implicitely included ! in this turbulence scheme by using conservative variables and computing -! the subgrid variance of a statistical variable s indicating the presence -! or not of condensation in a given mesh. +! the subgrid variance of a statistical variable s indicating the presence +! or not of condensation in a given mesh. ! !!** METHOD !! ------ @@ -51,27 +52,27 @@ SUBROUTINE TURB_VER_DYN_FLUX(KKA,KKU,KKL, & !! implicit scheme (a Crank-Nicholson type with coefficients different !! than 0.5), which allows to vary the degree of implicitness of the !! formulation. -!! The different prognostic variables are treated one by one. -!! The contributions of each turbulent fluxes are cumulated into the -!! tendency PRvarS, and into the dynamic and thermal production of +!! The different prognostic variables are treated one by one. +!! The contributions of each turbulent fluxes are cumulated into the +!! tendency PRvarS, and into the dynamic and thermal production of !! TKE if necessary. -!! +!! !! In section 2 and 3, the thermodynamical fields are considered. !! Only the turbulent fluxes of the conservative variables -!! (Thetal and Rnp stored in PRx(:,:,:,1)) are computed. -!! Note that the turbulent fluxes at the vertical +!! (Thetal and Rnp stored in PRx(:,:,:,1)) are computed. +!! Note that the turbulent fluxes at the vertical !! boundaries are given either by the soil scheme for the surface one -!! ( at the same instant as the others fluxes) and equal to 0 at the -!! top of the model. The thermal production is computed by vertically +!! ( at the same instant as the others fluxes) and equal to 0 at the +!! top of the model. The thermal production is computed by vertically !! averaging the turbulent flux and multiply this flux at the mass point by !! a function ETHETA or EMOIST, which preform the transformation from the -!! conservative variables to the virtual potential temperature. -!! +!! conservative variables to the virtual potential temperature. +!! !! In section 4, the variance of the statistical variable -!! s indicating presence or not of condensation, is determined in function +!! s indicating presence or not of condensation, is determined in function !! of the turbulent moments of the conservative variables and its -!! squarred root is stored in PSIGS. This information will be completed in -!! the horizontal turbulence if the turbulence dimensionality is not +!! squarred root is stored in PSIGS. This information will be completed in +!! the horizontal turbulence if the turbulence dimensionality is not !! equal to "1DIM". !! !! In section 5, the x component of the stress tensor is computed. @@ -82,50 +83,50 @@ SUBROUTINE TURB_VER_DYN_FLUX(KKA,KKU,KKL, & !! j" is also parallel to the surface and in the normal direction of !! the maximum slope !! k" is the normal to the surface -!! In order to prevent numerical instability, the implicit scheme has -!! been extended to the surface flux regarding to its dependence in -!! function of U. The dependence in function of the other components +!! In order to prevent numerical instability, the implicit scheme has +!! been extended to the surface flux regarding to its dependence in +!! function of U. The dependence in function of the other components !! introduced by the different rotations is only explicit. -!! The turbulent fluxes are used to compute the dynamic production of +!! The turbulent fluxes are used to compute the dynamic production of !! TKE. For the last TKE level ( located at PDZZ(:,:,IKB)/2 from the -!! ground), an harmonic extrapolation from the dynamic production at +!! ground), an harmonic extrapolation from the dynamic production at !! PDZZ(:,:,IKB) is used to avoid an evaluation of the gradient of U !! in the surface layer. !! !! In section 6, the same steps are repeated but for the y direction -!! and in section 7, a diagnostic computation of the W variance is +!! and in section 7, a diagnostic computation of the W variance is !! performed. !! -!! In section 8, the turbulent fluxes for the scalar variables are +!! In section 8, the turbulent fluxes for the scalar variables are !! computed by the same way as the conservative thermodynamical variables !! -!! +!! !! EXTERNAL !! -------- -!! GX_U_M, GY_V_M, GZ_W_M : cartesian gradient operators +!! GX_U_M, GY_V_M, GZ_W_M : cartesian gradient operators !! GX_U_UW,GY_V_VW (X,Y,Z) represent the direction of the gradient -!! _(M,U,...)_ represent the localization of the +!! _(M,U,...)_ represent the localization of the !! field to be derivated -!! _(M,UW,...) represent the localization of the +!! _(M,UW,...) represent the localization of the !! field derivated -!! +!! !! !! MXM,MXF,MYM,MYF,MZM,MZF -!! : Shuman functions (mean operators) +!! : Shuman functions (mean operators) !! DXF,DYF,DZF,DZM -!! : Shuman functions (difference operators) -!! +!! : Shuman functions (difference operators) +!! !! SUBROUTINE TRIDIAG_WIND: to compute the split implicit evolution !! of a variable located at a wind point !! -!! FUNCTIONs ETHETA and EMOIST : +!! FUNCTIONs ETHETA and EMOIST : !! allows to compute: !! - the coefficients for the turbulent correlation between -!! any variable and the virtual potential temperature, of its -!! correlations with the conservative potential temperature and +!! any variable and the virtual potential temperature, of its +!! correlations with the conservative potential temperature and !! the humidity conservative variable: !! ------- ------- ------- -!! A' Thv' = ETHETA A' Thl' + EMOIST A' Rnp' +!! A' Thv' = ETHETA A' Thl' + EMOIST A' Rnp' !! !! !! IMPLICIT ARGUMENTS @@ -159,34 +160,34 @@ SUBROUTINE TURB_VER_DYN_FLUX(KKA,KKU,KKL, & !! MODIFICATIONS !! ------------- !! Original August 19, 1994 -!! Modifications: February 14, 1995 (J.Cuxart and J.Stein) +!! Modifications: February 14, 1995 (J.Cuxart and J.Stein) !! Doctorization and Optimization -!! Modifications: March 21, 1995 (J.M. Carriere) +!! Modifications: March 21, 1995 (J.M. Carriere) !! Introduction of cloud water -!! Modifications: June 14, 1995 (J.Cuxart and J. Stein) +!! Modifications: June 14, 1995 (J.Cuxart and J. Stein) !! Phi3 and Psi3 at w-point + bug in the all -!! or nothing condens. -!! Modifications: Sept 15, 1995 (J.Cuxart and J. Stein) +!! or nothing condens. +!! Modifications: Sept 15, 1995 (J.Cuxart and J. Stein) !! Change the DP computation at the ground -!! Modifications: October 10, 1995 (J.Cuxart and J. Stein) +!! Modifications: October 10, 1995 (J.Cuxart and J. Stein) !! Psi for scal var and LES tools !! Modifications: November 10, 1995 (J. Stein) -!! change the surface relations +!! change the surface relations !! Modifications: February 20, 1995 (J. Stein) optimization -!! Modifications: May 21, 1996 (J. Stein) -!! bug in the vertical flux of the V wind +!! Modifications: May 21, 1996 (J. Stein) +!! bug in the vertical flux of the V wind !! component for explicit computation -!! Modifications: May 21, 1996 (N. wood) +!! Modifications: May 21, 1996 (N. wood) !! modify the computation of the vertical !! part or the surface tangential flux !! Modifications: May 21, 1996 (P. Jabouille) !! same modification in the Y direction -!! +!! !! Modifications: Sept 17, 1996 (J. Stein) change the moist case by using !! Pi instead of Piref + use Atheta and Amoist !! -!! Modifications: Nov 24, 1997 (V. Masson) removes the DO loops -!! Modifications: Mar 31, 1998 (V. Masson) splits the routine TURB_VER_DYN_FLUX +!! Modifications: Nov 24, 1997 (V. Masson) removes the DO loops +!! Modifications: Mar 31, 1998 (V. Masson) splits the routine TURB_VER_DYN_FLUX !! Modifications: Oct 18, 2000 (J. Stein) Bug in some computations for IKB level !! Modifications: Oct 18, 2000 (V. Masson) LES computations + LFLAT switch !! Nov 06, 2002 (V. Masson) LES budgets @@ -194,12 +195,14 @@ SUBROUTINE TURB_VER_DYN_FLUX(KKA,KKU,KKL, & !! change of YCOMMENT !! 2012-02 Y. Seity, add possibility to run with reversed vertical levels !! Modifications July 2015 (Wim de Rooy) LHARATU switch -!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O !! Q. Rodier 17/01/2019 : cleaning : remove cyclic conditions on DP and ZA +!! Modification June 2019 (Wim de Rooy) 50*MF term can be removed with +!! inclusion of energy cascade !! JL Redelsperger 03/2021 : Add Ocean & O-A Autocoupling LES Cases !!-------------------------------------------------------------------------- -! +! !* 0. DECLARATIONS ! ------------ ! @@ -215,7 +218,6 @@ USE MODD_LES USE MODD_NSV USE MODD_OCEANH USE MODD_PARAMETERS -USE MODD_REF, ONLY : LCOUPLES USE MODD_TURB_n ! ! @@ -238,7 +240,7 @@ IMPLICIT NONE ! ! ! -INTEGER, INTENT(IN) :: KKA !near ground array index +INTEGER, INTENT(IN) :: KKA !near ground array index INTEGER, INTENT(IN) :: KKU !uppest atmosphere array index INTEGER, INTENT(IN) :: KKL !vert. levels type 1=MNH -1=ARO LOGICAL, INTENT(IN) :: OTURB_FLX ! switch to write the @@ -251,23 +253,24 @@ REAL, INTENT(IN) :: PIMPL, PEXPL ! Coef. for temporal disc. REAL, INTENT(IN) :: PTSTEP ! Double Time Step TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file ! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDXX, PDYY, PDZZ, PDZX, PDZY +REAL, DIMENSION(:,:,:), INTENT(IN) :: PDXX, PDYY, PDZZ, PDZX, PDZY ! Metric coefficients REAL, DIMENSION(:,:), INTENT(IN) :: PDIRCOSZW ! Director Cosinus of the ! normal to the ground surface REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! altitude of flux points -REAL, DIMENSION(:,:), INTENT(IN) :: PCOSSLOPE ! cosinus of the angle +REAL, DIMENSION(:,:), INTENT(IN) :: PCOSSLOPE ! cosinus of the angle ! between i and the slope vector -REAL, DIMENSION(:,:), INTENT(IN) :: PSINSLOPE ! sinus of the angle +REAL, DIMENSION(:,:), INTENT(IN) :: PSINSLOPE ! sinus of the angle ! between i and the slope vector ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! dry density * grid volum REAL, DIMENSION(:,:,:), INTENT(IN) :: MFMOIST ! moist mass flux dual scheme ! +REAL, DIMENSION(:,:), INTENT(IN) :: PSFUM,PSFVM ! normal momentum sfc flux REAL, DIMENSION(:,:), INTENT(IN) :: PCDUEFF ! Cd * || u || at time t -REAL, DIMENSION(:,:), INTENT(IN) :: PTAU11M ! <uu> in the axes linked - ! to the maximum slope direction and the surface normal and the binormal +REAL, DIMENSION(:,:), INTENT(IN) :: PTAU11M ! <uu> in the axes linked + ! to the maximum slope direction and the surface normal and the binormal ! at time t - dt REAL, DIMENSION(:,:), INTENT(IN) :: PTAU12M ! <uv> in the same axes REAL, DIMENSION(:,:), INTENT(IN) :: PTAU33M ! <ww> in the same axes @@ -276,13 +279,13 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PUM,PVM,PWM, PTHLM ! Wind at t-Delta t REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRM REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVM -REAL, DIMENSION(:,:), INTENT(IN) :: PUSLOPEM ! wind component along the +REAL, DIMENSION(:,:), INTENT(IN) :: PUSLOPEM ! wind component along the ! maximum slope direction -REAL, DIMENSION(:,:), INTENT(IN) :: PVSLOPEM ! wind component along the +REAL, DIMENSION(:,:), INTENT(IN) :: PVSLOPEM ! wind component along the ! direction normal to the maximum slope one ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKEM ! TKE at time t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM ! Turb. mixing length +REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM ! Turb. mixing length REAL, DIMENSION(:,:,:), INTENT(OUT) :: PWU ! momentum flux u'w' REAL, DIMENSION(:,:,:), INTENT(OUT) :: PWV ! momentum flux v'w' ! @@ -300,7 +303,7 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PTP ! Thermal TKE production t ! REAL, DIMENSION(SIZE(PUM,1),SIZE(PUM,2)) :: ZDIRSINZW ! sinus of the angle ! between the normal and the vertical at the surface -REAL, DIMENSION(SIZE(PUM,1),SIZE(PUM,2),1):: ZCOEFS ! coeff. for the +REAL, DIMENSION(SIZE(PUM,1),SIZE(PUM,2),1):: ZCOEFS ! coeff. for the ! implicit scheme for the wind at the surface REAL, DIMENSION(SIZE(PUM,1),SIZE(PUM,2),SIZE(PUM,3)) :: & ZA, & ! under diagonal elements of the tri-diagonal matrix involved @@ -308,7 +311,7 @@ REAL, DIMENSION(SIZE(PUM,1),SIZE(PUM,2),SIZE(PUM,3)) :: & ! J in Section 5) ZRES, & ! guess of the treated variable at t+ deltat when the turbu- ! lence is the only source of evolution added to the ones - ! considered in ZSOURCE + ! considered in ZSOURCE ZFLXZ, & ! vertical flux of the treated variable ZSOURCE, & ! source of evolution for the treated variable ZKEFF ! effectif diffusion coeff = LT * SQRT( TKE ) @@ -322,7 +325,8 @@ REAL, DIMENSION(SIZE(PDZZ,1),SIZE(PDZZ,2),1) :: ZCOEFFLXU, & ZCOEFFLXV, ZUSLOPEM, ZVSLOPEM ! coefficients for the surface flux ! evaluation and copy of PUSLOPEM and - ! PVSLOPEM in local 3D arrays + ! PVSLOPEM in local 3D arrays +REAL, DIMENSION(SIZE(PDZZ,1),SIZE(PDZZ,2),1) :: ZFLUXSFCU,ZFLUXSFCV INTEGER :: IIU,IJU ! size of array in x,y,z directions ! REAL :: ZTIME1, ZTIME2, ZCMFS @@ -344,8 +348,8 @@ IKB=KKA+JPVEXT_TURB*KKL IKE=KKU-JPVEXT_TURB*KKL IKB=KKA+JPVEXT_TURB*KKL IKE=KKU-JPVEXT_TURB*KKL -IKT=SIZE(PUM,3) -IKTB=1+JPVEXT_TURB +IKT=SIZE(PUM,3) +IKTB=1+JPVEXT_TURB IKTE=IKT-JPVEXT_TURB ! ZSOURCE = 0. @@ -354,44 +358,48 @@ ZCMFS = XCMFS IF (LHARAT) ZCMFS=1. ! ZDIRSINZW(:,:) = SQRT(1.-PDIRCOSZW(:,:)**2) -! compute the coefficients for the uncentred gradient computation near the +! compute the coefficients for the uncentred gradient computation near the ! ground ! ! With LHARATU length scale and TKE are at half levels so remove MZM ! IF (LHARAT) THEN - ZKEFF(:,:,:) = PLM(:,:,:) * SQRT(PTKEM(:,:,:)) + 50*MFMOIST(:,:,:) -ELSE + !wc with energy cascade 50*MF no longer necessary + !ZKEFF(:,:,:) = PLM(:,:,:) * SQRT(PTKEM(:,:,:)) + 50*MFMOIST(:,:,:) + ZKEFF(:,:,:) = PLM(:,:,:) * SQRT(PTKEM(:,:,:)) +ELSE ZKEFF(:,:,:) = MZM(PLM(:,:,:) * SQRT(PTKEM(:,:,:)), KKA, KKU, KKL) ENDIF ! ZUSLOPEM(:,:,1)=PUSLOPEM(:,:) ZVSLOPEM(:,:,1)=PVSLOPEM(:,:) +ZFLUXSFCU(:,:,1)=PSFUM(:,:) +ZFLUXSFCV(:,:,1)=PSFVM(:,:) ! !---------------------------------------------------------------------------- ! ! -!* 5. SOURCES OF U,W WIND COMPONENTS AND PARTIAL DYNAMIC PRODUCTION +!* 5. SOURCES OF U,W WIND COMPONENTS AND PARTIAL DYNAMIC PRODUCTION ! ------------------------------------------------------------- ! !* 5.1 Source of U wind component ! -! Preparation of the arguments for TRIDIAG_WIND +! Preparation of the arguments for TRIDIAG_WIND ! ZA(:,:,:) = -PTSTEP * ZCMFS * & MXM( ZKEFF ) * MXM(MZM(PRHODJ, KKA, KKU, KKL)) / & MXM( PDZZ )**2 ! ! -! Compute the source of U wind component +! Compute the source of U wind component ! -! compute the coefficient between the vertical flux and the 2 components of the +! compute the coefficient between the vertical flux and the 2 components of the ! wind following the slope ZCOEFFLXU(:,:,1) = PCDUEFF(:,:) * (PDIRCOSZW(:,:)**2 - ZDIRSINZW(:,:)**2) & * PCOSSLOPE(:,:) ZCOEFFLXV(:,:,1) = PCDUEFF(:,:) * PDIRCOSZW(:,:) * PSINSLOPE(:,:) - +! ! prepare the implicit scheme coefficients for the surface flux ZCOEFS(:,:,1)= ZCOEFFLXU(:,:,1) * PCOSSLOPE(:,:) * PDIRCOSZW(:,:) & +ZCOEFFLXV(:,:,1) * PSINSLOPE(:,:) @@ -399,32 +407,20 @@ ZCOEFS(:,:,1)= ZCOEFFLXU(:,:,1) * PCOSSLOPE(:,:) * PDIRCOSZW(:,:) & ! average this flux to be located at the U,W vorticity point ZCOEFS(:,:,1:1)=MXM(ZCOEFS(:,:,1:1) / PDZZ(:,:,IKB:IKB) ) ! -! -! ZSOURCE= FLUX /DZ -IF (OOCEAN) THEN ! OCEAN MODEL ONLY - ! Sfx flux assumed to be in SI & at vorticity point - IF (LCOUPLES) THEN - ZSOURCE(:,:,IKE:IKE) = XSSUFL_C(:,:,1:1)/PDZZ(:,:,IKE:IKE) & - *0.5 * ( 1. + MXM(PRHODJ(:,:,KKU:KKU)) / MXM(PRHODJ(:,:,IKE:IKE))) - ELSE - ZSOURCE(:,:,IKE) = XSSUFL(:,:) - ZSOURCE(:,:,IKE:IKE) = ZSOURCE (:,:,IKE:IKE) /PDZZ(:,:,IKE:IKE) & - *0.5 * ( 1. + MXM(PRHODJ(:,:,KKU:KKU)) / MXM(PRHODJ(:,:,IKE:IKE)) ) - ENDIF - !No flux at the ocean domain bottom + ZSOURCE(:,:,IKTB+1:IKTE-1) = 0 +! ZSOURCE= sfc FLUX /DZ +! Sfx flux assumed to be in SI & at vorticity point +IF (OOCEAN) THEN ! Ocean model + ZSOURCE(:,:,IKE:IKE) =MXM( ZFLUXSFCU(:,:,1:1) / PDZZ(:,:,IKE:IKE) ) & + * 0.5 * ( 1. + MXM(PRHODJ(:,:,KKU:KKU)) / MXM(PRHODJ(:,:,IKE:IKE)) ) + ! Zero flux at the ocean domain bottom ZSOURCE(:,:,IKB) = 0. - ZSOURCE(:,:,IKTB+1:IKTE-1) = 0 -! -ELSE !ATMOS MODEL ONLY - IF (LCOUPLES) THEN - ZSOURCE(:,:,IKB:IKB) = XSSUFL_C(:,:,1:1)/PDZZ(:,:,IKB:IKB) & - * 0.5 * ( 1. + MXM(PRHODJ(:,:,KKA:KKA)) / MXM(PRHODJ(:,:,IKB:IKB)) ) - ELSE - ! compute the explicit tangential flux at the W point +ELSE ! Atmosphere + ! Compute the explicit tangential flux at the W point ZSOURCE(:,:,IKB) = & PTAU11M(:,:) * PCOSSLOPE(:,:) * PDIRCOSZW(:,:) * ZDIRSINZW(:,:) & -PTAU12M(:,:) * PSINSLOPE(:,:) * ZDIRSINZW(:,:) & - -PTAU33M(:,:) * PCOSSLOPE(:,:) * ZDIRSINZW(:,:) * PDIRCOSZW(:,:) + -PTAU33M(:,:) * PCOSSLOPE(:,:) * ZDIRSINZW(:,:) * PDIRCOSZW(:,:) ! ! add the vertical part or the surface flux at the U,W vorticity point ! @@ -436,42 +432,34 @@ ELSE !ATMOS MODEL ONLY *ZVSLOPEM(:,:,1:1) ) & - ZCOEFS(:,:,1:1) * PUM(:,:,IKB:IKB) * PIMPL & ) * 0.5 * ( 1. + MXM(PRHODJ(:,:,KKA:KKA)) / MXM(PRHODJ(:,:,IKB:IKB)) ) - ENDIF -! - ZSOURCE(:,:,IKTB+1:IKTE-1) = 0. + ! Zero flux at upper BC for atmos case ZSOURCE(:,:,IKE) = 0. -ENDIF !end ocean or atmosphere cases +ENDIF ! -! Obtention of the split U at t+ deltat +! Obtention of the split U at t+ deltat ! CALL TRIDIAG_WIND(KKA,KKU,KKL,PUM,ZA,ZCOEFS(:,:,1),PTSTEP,PEXPL,PIMPL, & MXM(PRHODJ),ZSOURCE,ZRES) -! +! ! Compute the equivalent tendency for the U wind component ! PRUS(:,:,:)=PRUS(:,:,:)+MXM(PRHODJ(:,:,:))*(ZRES(:,:,:)-PUM(:,:,:))/PTSTEP ! -! -!* 5.2 Partial Dynamic Production +!* 5.2 Partial TKE Dynamic Production ! ! vertical flux of the U wind component ! ZFLXZ(:,:,:) = -ZCMFS * MXM(ZKEFF) * & DZM(PIMPL*ZRES + PEXPL*PUM, KKA, KKU, KKL) / MXM(PDZZ) -! -! surface flux -ZFLXZ(:,:,IKB:IKB) = MXM(PDZZ(:,:,IKB:IKB)) * & +IF (OOCEAN) THEN + ZFLXZ(:,:,IKE+1) = ZFLUXSFCU(:,:,1) +ELSE + ZFLXZ(:,:,IKB:IKB) = MXM(PDZZ(:,:,IKB:IKB)) * & ( ZSOURCE(:,:,IKB:IKB) & - +ZCOEFS(:,:,1:1) * ZRES(:,:,IKB:IKB) * PIMPL & + +ZCOEFS(:,:,1:1) * ZRES(:,:,IKB:IKB) * PIMPL & ) / 0.5 / ( 1. + MXM(PRHODJ(:,:,KKA:KKA)) / MXM(PRHODJ(:,:,IKB:IKB)) ) ! -ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) - -IF (OOCEAN) THEN !ocean model at phys sfc (ocean domain top) - ZFLXZ(:,:,IKE:IKE) = MXM(PDZZ(:,:,IKE:IKE)) * & - ZSOURCE(:,:,IKE:IKE) & - / 0.5 / ( 1. + MXM(PRHODJ(:,:,KKU:KKU)) / MXM(PRHODJ(:,:,IKE:IKE)) ) - ZFLXZ(:,:,KKU) = ZFLXZ(:,:,IKE) + ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) END IF ! IF ( OTURB_FLX .AND. TPFILE%LOPENED ) THEN @@ -493,30 +481,32 @@ END IF ! PWU(:,:,:) = ZFLXZ(:,:,:) ! -! Contribution to the dynamic production of TKE -! compute the dynamic production at the mass point +! Contribution to the TKE dynamic production of TKE +! (computed at mass point) ! PDP(:,:,:) = - MZF(MXF(ZFLXZ * GZ_U_UW(PUM,PDZZ, KKA, KKU, KKL)), KKA, KKU, KKL) ! +! Special cases near surface +IF (OOCEAN) THEN +! evaluate the dynamic production at w(IKE) and store in PDP(IKE) +! before to be extrapolated in tke_eps routine + PDP(:,:,IKE:IKE) = - MXF ( & + ZFLXZ(:,:,IKE:IKE) * (PUM(:,:,IKE:IKE)-PUM(:,:,IKE-1:IKE-1)) & + / MXM(PDZZ(:,:,IKE-1:IKE-1)) & + ) +ELSE ! Atmosphere ! evaluate the dynamic production at w(IKB+KKL) in PDP(IKB) -PDP(:,:,IKB:IKB) = - MXF ( & - ZFLXZ(:,:,IKB+KKL:IKB+KKL) * (PUM(:,:,IKB+KKL:IKB+KKL)-PUM(:,:,IKB:IKB)) & + PDP(:,:,IKB:IKB) = - MXF ( & + ZFLXZ(:,:,IKB+KKL:IKB+KKL) * (PUM(:,:,IKB+KKL:IKB+KKL)-PUM(:,:,IKB:IKB)) & / MXM(PDZZ(:,:,IKB+KKL:IKB+KKL)) & ) -! -IF (OOCEAN) THEN - ! evaluate the dynamic production at w(IKE-KKL) in PDP(IKE) - PDP(:,:,IKE:IKE) = - MXF ( & - ZFLXZ(:,:,IKE-KKL:IKE-KKL) * (PUM(:,:,IKE:IKE)-PUM(:,:,IKE-KKL:IKE-KKL)) & - / MXM(PDZZ(:,:,IKE-KKL:IKE-KKL)) & - ) END IF ! ! Storage in the LES configuration -! +! IF (LLES_CALL) THEN CALL SECOND_MNH(ZTIME1) - CALL LES_MEAN_SUBGRID(MZF(MXF(ZFLXZ), KKA, KKU, KKL), X_LES_SUBGRID_WU ) + CALL LES_MEAN_SUBGRID(MZF(MXF(ZFLXZ), KKA, KKU, KKL), X_LES_SUBGRID_WU ) CALL LES_MEAN_SUBGRID(MZF(MXF(GZ_U_UW(PUM,PDZZ, KKA, KKU, KKL) & & *ZFLXZ), KKA, KKU, KKL), X_LES_RES_ddxa_U_SBG_UaU ) CALL LES_MEAN_SUBGRID( ZCMFS * ZKEFF, X_LES_SUBGRID_Km ) @@ -530,11 +520,8 @@ END IF IF(HTURBDIM=='3DIM') THEN ! Compute the source for the W wind component ! used to compute the W source at the ground - ZFLXZ(:,:,KKA) = 2 * ZFLXZ(:,:,IKB) - ZFLXZ(:,:,IKB+KKL) ! extrapolation - IF (OOCEAN) THEN - ZFLXZ(:,:,KKU) = 2 * ZFLXZ(:,:,IKE) - ZFLXZ(:,:,IKE-KKL) ! extrapolation - END IF - + ZFLXZ(:,:,KKA) = 2 * ZFLXZ(:,:,IKB) - ZFLXZ(:,:,IKB+KKL) ! extrapolation + IF (OOCEAN) ZFLXZ(:,:,KKU) = 2 * ZFLXZ(:,:,IKE) - ZFLXZ(:,:,IKE-KKL) ! extrapolation ! IF (.NOT. LFLAT) THEN PRWS(:,:,:)= PRWS & @@ -546,11 +533,19 @@ IF(HTURBDIM=='3DIM') THEN PRWS(:,:,:)= PRWS -DXF(MZM(MXM(PRHODJ) /PDXX, KKA, KKU, KKL) * ZFLXZ ) END IF ! - ! Complete the Dynamical production with the W wind component + ! Complete the TKE dynamical production with the W wind contribution ! ZA(:,:,:)=-MZF(MXF(ZFLXZ * GX_W_UW(PWM,PDXX,PDZZ,PDZX, KKA, KKU, KKL)), KKA, KKU, KKL) ! - ! +! Special cases near surface + IF (OOCEAN) THEN + ! evaluate the dynamic production at w(IKE) and stored in PDP(IKE) + ZA(:,:,IKE:IKE) = - MXF ( & + ZFLXZ(:,:,IKE:IKE) * & + DXM( PWM(:,:,IKE:IKE) ) & + / (0.5*(PDXX(:,:,IKE-1:IKE-1)+PDXX(:,:,IKE:IKE))) & + ) + ELSE !Atmosphere ! evaluate the dynamic production at w(IKB+KKL) in PDP(IKB) ZA(:,:,IKB:IKB) = - MXF ( & ZFLXZ(:,:,IKB+KKL:IKB+KKL) * & @@ -563,26 +558,12 @@ IF(HTURBDIM=='3DIM') THEN * PDZX(:,:,IKB+KKL:IKB+KKL) & ) / (0.5*(PDXX(:,:,IKB+KKL:IKB+KKL)+PDXX(:,:,IKB:IKB))) & ) + END IF ! -IF (OOCEAN) THEN - ! evaluate the dynamic production at w(IKE-KKL) in PDP(IKE) - ZA(:,:,IKE:IKE) = - MXF ( & - ZFLXZ(:,:,IKE-KKL:IKE-KKL) * & - ( DXM( PWM(:,:,IKE-KKL:IKE-KKL) ) & - -MXM( (PWM(:,:,IKE-2*KKL:IKE-2*KKL )-PWM(:,:,IKE-KKL:IKE-KKL)) & - /(PDZZ(:,:,IKE-2*KKL:IKE-2*KKL)+PDZZ(:,:,IKE-KKL:IKE-KKL)) & - +(PWM(:,:,IKE-KKL:IKE-KKL)-PWM(:,:,IKE:IKE )) & - /(PDZZ(:,:,IKE-KKL:IKE-KKL)+PDZZ(:,:,IKE:IKE )) & - ) & - * PDZX(:,:,IKE-KKL:IKE-KKL) & - ) / (0.5*(PDXX(:,:,IKE-KKL:IKE-KKL)+PDXX(:,:,IKE:IKE))) & - ) -END IF - ! - PDP(:,:,:)=PDP(:,:,:)+ZA(:,:,:) + PDP(:,:,:)=PDP(:,:,:)+ZA(:,:,:) ! ! Storage in the LES configuration - ! + ! IF (LLES_CALL) THEN CALL SECOND_MNH(ZTIME1) CALL LES_MEAN_SUBGRID(MZF(MXF(GX_W_UW(PWM,PDXX,& @@ -605,7 +586,7 @@ END IF !---------------------------------------------------------------------------- ! ! -!* 6. SOURCES OF V,W WIND COMPONENTS AND COMPLETE 1D DYNAMIC PRODUCTION +!* 6. SOURCES OF V,W WIND COMPONENTS AND COMPLETE 1D TKE DYNAMIC PRODUCTION ! ----------------------------------------------------------------- ! !* 6.1 Source of V wind component @@ -619,7 +600,7 @@ ZA(:,:,:) = - PTSTEP * ZCMFS * & ! ! ! Compute the source of V wind component -! compute the coefficient between the vertical flux and the 2 components of the +! compute the coefficient between the vertical flux and the 2 components of the ! wind following the slope ZCOEFFLXU(:,:,1) = PCDUEFF(:,:) * (PDIRCOSZW(:,:)**2 - ZDIRSINZW(:,:)**2) & * PSINSLOPE(:,:) @@ -632,24 +613,28 @@ ZCOEFS(:,:,1)= ZCOEFFLXU(:,:,1) * PSINSLOPE(:,:) * PDIRCOSZW(:,:) & ! average this flux to be located at the V,W vorticity point ZCOEFS(:,:,1:1)=MYM(ZCOEFS(:,:,1:1) / PDZZ(:,:,IKB:IKB) ) ! + +! No flux in SOURCE TERM NULL OUTSIDE BC +ZSOURCE(:,:,IKB+1:IKE-1) = 0. +! Surface case IF (OOCEAN) THEN ! Ocean case - IF (LCOUPLES) THEN - ZSOURCE(:,:,IKE:IKE) = XSSVFL_C(:,:,1:1)/PDZZ(:,:,IKE:IKE) & - *0.5 * ( 1. + MYM(PRHODJ(:,:,KKU:KKU)) / MYM(PRHODJ(:,:,IKE:IKE)) ) - ELSE - ZSOURCE(:,:,IKE) = XSSVFL(:,:) - ZSOURCE(:,:,IKE:IKE) = ZSOURCE(:,:,IKE:IKE)/PDZZ(:,:,IKE:IKE) & - *0.5 * ( 1. + MYM(PRHODJ(:,:,KKU:KKU)) / MYM(PRHODJ(:,:,IKE:IKE)) ) - END IF - !No flux at the ocean domain bottom - ZSOURCE(:,:,IKB) = 0. + ZCOEFFLXU(:,:,1) = PCDUEFF(:,:) + ZCOEFFLXV(:,:,1) = PCDUEFF(:,:) + ZCOEFS(:,:,1)=ZCOEFFLXU(:,:,1) +! average this flux to be located at the U,W vorticity point + ZCOEFS(:,:,1:1)=MYM(ZCOEFS(:,:,1:1) / PDZZ(:,:,IKE:IKE) ) + ZSOURCE(:,:,IKE:IKE) = MYM( ZFLUXSFCV(:,:,1:1) / PDZZ(:,:,IKE:IKE) ) & + * 0.5 * ( 1. + MYM(PRHODJ(:,:,KKU:KKU)) / MYM(PRHODJ(:,:,IKE:IKE)) ) +!No flux at the ocean domain bottom + ZSOURCE(:,:,IKB) = 0. +!!!!!!!!!!!!!!!!!!!!!! ELSE ! Atmos case - IF (.NOT.LCOUPLES) THEN ! only atmosp without coupling +!!!!!!!!!!!!!!!!!!!!! ! compute the explicit tangential flux at the W point ZSOURCE(:,:,IKB) = & PTAU11M(:,:) * PSINSLOPE(:,:) * PDIRCOSZW(:,:) * ZDIRSINZW(:,:) & +PTAU12M(:,:) * PCOSSLOPE(:,:) * ZDIRSINZW(:,:) & - -PTAU33M(:,:) * PSINSLOPE(:,:) * ZDIRSINZW(:,:) * PDIRCOSZW(:,:) + -PTAU33M(:,:) * PSINSLOPE(:,:) * ZDIRSINZW(:,:) * PDIRCOSZW(:,:) ! ! add the vertical part or the surface flux at the V,W vorticity point ZSOURCE(:,:,IKB:IKB) = & @@ -661,15 +646,9 @@ ELSE ! Atmos case - ZCOEFS(:,:,1:1) * PVM(:,:,IKB:IKB) * PIMPL & ) * 0.5 * ( 1. + MYM(PRHODJ(:,:,KKA:KKA)) / MYM(PRHODJ(:,:,IKB:IKB)) ) ! - ELSE !atmosphere when coupling - ! input flux assumed to be in SI and at vorticity point - ZSOURCE(:,:,IKB:IKB) = -XSSVFL_C(:,:,1:1)/(1.*PDZZ(:,:,IKB:IKB)) & - * 0.5 * ( 1. + MYM(PRHODJ(:,:,KKA:KKA)) / MYM(PRHODJ(:,:,IKB:IKB)) ) - ENDIF - !No flux at the atmosphere top +!No flux at the atmosphere top ZSOURCE(:,:,IKE) = 0. -ENDIF ! End of Ocean or Atmospher Cases -ZSOURCE(:,:,IKTB+1:IKTE-1) = 0. +ENDIF ! End of Ocean or Atmospheric Cases ! ! Obtention of the split V at t+ deltat CALL TRIDIAG_WIND(KKA,KKU,KKL,PVM,ZA,ZCOEFS(:,:,1),PTSTEP,PEXPL,PIMPL, & @@ -687,20 +666,17 @@ PRVS(:,:,:)=PRVS(:,:,:)+MYM(PRHODJ(:,:,:))*(ZRES(:,:,:)-PVM(:,:,:))/PTSTEP ZFLXZ(:,:,:) = -ZCMFS * MYM(ZKEFF) * & DZM(PIMPL*ZRES + PEXPL*PVM, KKA, KKU, KKL) / MYM(PDZZ) ! -ZFLXZ(:,:,IKB:IKB) = MYM(PDZZ(:,:,IKB:IKB)) * & +! +IF (OOCEAN) THEN + ZFLXZ(:,:,IKE+1) = ZFLUXSFCV(:,:,1) +ELSE + ZFLXZ(:,:,IKB:IKB) = MYM(PDZZ(:,:,IKB:IKB)) * & ( ZSOURCE(:,:,IKB:IKB) & - +ZCOEFS(:,:,1:1) * ZRES(:,:,IKB:IKB) * PIMPL & + +ZCOEFS(:,:,1:1) * ZRES(:,:,IKB:IKB) * PIMPL & ) / 0.5 / ( 1. + MYM(PRHODJ(:,:,KKA:KKA)) / MYM(PRHODJ(:,:,IKB:IKB)) ) -! ! -ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) -! -IF (OOCEAN) THEN - ZFLXZ(:,:,IKE:IKE) = MYM(PDZZ(:,:,IKE:IKE)) * & - ZSOURCE(:,:,IKE:IKE) & - / 0.5 / ( 1. + MYM(PRHODJ(:,:,KKU:KKU)) / MYM(PRHODJ(:,:,IKE:IKE)) ) - ZFLXZ(:,:,KKU) = ZFLXZ(:,:,IKE) -END IF + ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) + END IF ! IF ( OTURB_FLX .AND. TPFILE%LOPENED ) THEN ! stores the V wind component vertical flux @@ -721,24 +697,25 @@ END IF ! PWV(:,:,:) = ZFLXZ(:,:,:) ! -! Contribution to the dynamic production of TKE -! compute the dynamic production contribution at the mass point +! Contribution to the TKE dynamical production +! computed at mass point ! ZA(:,:,:) = - MZF(MYF(ZFLXZ * GZ_V_VW(PVM,PDZZ, KKA, KKU, KKL)), KKA, KKU, KKL) ! -! evaluate the dynamic production at w(IKB+KKL) in PDP(IKB) -ZA(:,:,IKB:IKB) = & - - MYF ( & -ZFLXZ(:,:,IKB+KKL:IKB+KKL) * (PVM(:,:,IKB+KKL:IKB+KKL)-PVM(:,:,IKB:IKB)) & - / MYM(PDZZ(:,:,IKB+KKL:IKB+KKL)) & - ) -! +! Special cases at surface IF (OOCEAN) THEN - ! evaluate the dynamic production at w(IKE-KKL) in PDP(IKE) +! evaluate the dynamic production at w(IKE) and stored in PDP(IKE) + ! before extrapolation done in routine tke_eps_source ZA(:,:,IKE:IKE) = - MYF ( & - ZFLXZ(:,:,IKE-KKL:IKE-KKL) * (PVM(:,:,IKE:IKE)-PVM(:,:,IKE-KKL:IKE-KKL)) & - / MYM(PDZZ(:,:,IKE-KKL:IKE-KKL)) & + ZFLXZ(:,:,IKE:IKE) * (PVM(:,:,IKE:IKE)-PVM(:,:,IKE-1:IKE-1)) & + / MYM(PDZZ(:,:,IKE-1:IKE-1)) & ) +ELSE ! Atmosphere +! evaluate the dynamic production at w(IKB+KL) and stored in PDP(IKB) + ZA(:,:,IKB:IKB) = - MYF ( & + ZFLXZ(:,:,IKB+KKL:IKB+KKL) * (PVM(:,:,IKB+KKL:IKB+KKL)-PVM(:,:,IKB:IKB)) & + / MYM(PDZZ(:,:,IKB+KKL:IKB+KKL)) & + ) END IF ! PDP(:,:,:)=PDP(:,:,:)+ZA(:,:,:) @@ -747,7 +724,7 @@ PDP(:,:,:)=PDP(:,:,:)+ZA(:,:,:) ! IF (LLES_CALL) THEN CALL SECOND_MNH(ZTIME1) - CALL LES_MEAN_SUBGRID(MZF(MYF(ZFLXZ), KKA, KKU, KKL), X_LES_SUBGRID_WV ) + CALL LES_MEAN_SUBGRID(MZF(MYF(ZFLXZ), KKA, KKU, KKL), X_LES_SUBGRID_WV ) CALL LES_MEAN_SUBGRID(MZF(MYF(GZ_V_VW(PVM,PDZZ, KKA, KKU, KKL)*& & ZFLXZ), KKA, KKU, KKL), X_LES_RES_ddxa_V_SBG_UaV ) CALL SECOND_MNH(ZTIME2) @@ -755,16 +732,17 @@ IF (LLES_CALL) THEN END IF ! ! -!* 6.3 Source of W wind component +!* 6.3 Source of W wind component ! IF(HTURBDIM=='3DIM') THEN ! Compute the source for the W wind component - ZFLXZ(:,:,KKA) = 2 * ZFLXZ(:,:,IKB) - ZFLXZ(:,:,IKB+KKL) ! extrapolation - IF (OOCEAN) THEN - ZFLXZ(:,:,KKU) = 2 * ZFLXZ(:,:,IKE) - ZFLXZ(:,:,IKE-KKL) ! extrapolation - END IF + IF (OOCEAN) THEN + ZFLXZ(:,:,IKE+1) = 2 * ZFLXZ(:,:,IKE) - ZFLXZ(:,:,IKE-1) ! extrapolation + ELSE + ZFLXZ(:,:,KKA) = 2 * ZFLXZ(:,:,IKB) - ZFLXZ(:,:,IKB+KKL) ! extrapolation + END IF ! - IF (.NOT. L2D) THEN + IF (.NOT. L2D) THEN IF (.NOT. LFLAT) THEN PRWS(:,:,:)= PRWS(:,:,:) & -DYF( MZM(MYM(PRHODJ) /PDYY, KKA, KKU, KKL) * ZFLXZ ) & @@ -775,12 +753,19 @@ IF(HTURBDIM=='3DIM') THEN PRWS(:,:,:)= PRWS(:,:,:) -DYF(MZM(MYM(PRHODJ) /PDYY, KKA, KKU, KKL) * ZFLXZ ) END IF END IF - ! - ! Complete the Dynamical production with the W wind component + ! + ! Complete the TKE dynamical production with the W wind component IF (.NOT. L2D) THEN ZA(:,:,:) = - MZF(MYF(ZFLXZ * GY_W_VW(PWM,PDYY,PDZZ,PDZY, KKA, KKU, KKL)), KKA, KKU, KKL) - ! - ! evaluate the dynamic production at w(IKB+KKL) in PDP(IKB) + ! Special case near surface + IF (OOCEAN) THEN + ! evaluate the dynamic production at w(IKE) and stored in PDP(IKE) + ZA(:,:,IKE:IKE) = - MYF ( & + ZFLXZ(:,:,IKE:IKE) * DYM( PWM(:,:,IKE:IKE) ) & + / (0.5*(PDYY(:,:,IKE-1:IKE-1)+PDYY(:,:,IKE:IKE))) & + ) + ELSE ! Atmosphere + ! evaluate the dynamic production at w(IKB+KKL) and stored in PDP(IKB) ZA(:,:,IKB:IKB) = - MYF ( & ZFLXZ(:,:,IKB+KKL:IKB+KKL) * & ( DYM( PWM(:,:,IKB+KKL:IKB+KKL) ) & @@ -793,20 +778,8 @@ IF(HTURBDIM=='3DIM') THEN ) / (0.5*(PDYY(:,:,IKB+KKL:IKB+KKL)+PDYY(:,:,IKB:IKB))) & ) ! - IF (OOCEAN) THEN - ZA(:,:,IKE:IKE) = - MYF ( & - ZFLXZ(:,:,IKE-KKL:IKE-KKL) * & - ( DYM( PWM(:,:,IKE-KKL:IKE-KKL) ) & - -MYM( (PWM(:,:,IKE-2*KKL:IKE-2*KKL)-PWM(:,:,IKE-KKL:IKE-KKL)) & - /(PDZZ(:,:,IKE-2*KKL:IKE-2*KKL)+PDZZ(:,:,IKE-KKL:IKE-KKL)) & - +(PWM(:,:,IKE-KKL:IKE-KKL)-PWM(:,:,IKE:IKE )) & - /(PDZZ(:,:,IKE-KKL:IKE-KKL)+PDZZ(:,:,IKE:IKE )) & - ) & - * PDZY(:,:,IKE-KKL:IKE-KKL) & - ) / (0.5*(PDYY(:,:,IKE-KKL:IKE-KKL)+PDYY(:,:,IKE:IKE))) & - ) END IF -! +! PDP(:,:,:)=PDP(:,:,:)+ZA(:,:,:) ! END IF @@ -842,7 +815,7 @@ IF ( OTURB_FLX .AND. TPFILE%LOPENED .AND. HTURBDIM == '1DIM') THEN ZFLXZ(:,:,:)= (2./3.) * PTKEM(:,:,:) & -ZCMFS*PLM(:,:,:)*SQRT(PTKEM(:,:,:))*GZ_W_M(PWM,PDZZ, KKA, KKU, KKL) ! to be tested & - ! +XCMFB*(4./3.)*PLM(:,:,:)/SQRT(PTKEM(:,:,:))*PTP(:,:,:) + ! +XCMFB*(4./3.)*PLM(:,:,:)/SQRT(PTKEM(:,:,:))*PTP(:,:,:) ! stores the W variance TZFIELD%CMNHNAME = 'W_VVAR' TZFIELD%CSTDNAME = '' diff --git a/src/common/turb/mode_turb_ver_sv_flux.F90 b/src/common/turb/mode_turb_ver_sv_flux.F90 index 271ee734e6aabd3d2cda09b7eba343113fa6e402..e7c47ec8323c67ce0b6e3352e788b450bcba1fda 100644 --- a/src/common/turb/mode_turb_ver_sv_flux.F90 +++ b/src/common/turb/mode_turb_ver_sv_flux.F90 @@ -25,13 +25,13 @@ SUBROUTINE TURB_VER_SV_FLUX(KKA,KKU,KKL, & !! PURPOSE !! ------- ! The purpose of this routine is to compute the vertical turbulent -! fluxes of the evolutive variables and give back the source +! fluxes of the evolutive variables and give back the source ! terms to the main program. In the case of large horizontal meshes, ! the divergence of these vertical turbulent fluxes represent the whole ! effect of the turbulence but when the three-dimensionnal version of ! the turbulence scheme is activated (CTURBDIM="3DIM"), these divergences -! are completed in the next routine TURB_HOR. -! An arbitrary degree of implicitness has been implemented for the +! are completed in the next routine TURB_HOR. +! An arbitrary degree of implicitness has been implemented for the ! temporal treatment of these diffusion terms. ! The vertical boundary conditions are as follows: ! * at the bottom, the surface fluxes are prescribed at the same @@ -39,8 +39,8 @@ SUBROUTINE TURB_VER_SV_FLUX(KKA,KKU,KKL, & ! * at the top, the turbulent fluxes are set to 0. ! It should be noted that the condensation has been implicitely included ! in this turbulence scheme by using conservative variables and computing -! the subgrid variance of a statistical variable s indicating the presence -! or not of condensation in a given mesh. +! the subgrid variance of a statistical variable s indicating the presence +! or not of condensation in a given mesh. ! !!** METHOD !! ------ @@ -49,27 +49,27 @@ SUBROUTINE TURB_VER_SV_FLUX(KKA,KKU,KKL, & !! implicit scheme (a Crank-Nicholson type with coefficients different !! than 0.5), which allows to vary the degree of implicitness of the !! formulation. -!! The different prognostic variables are treated one by one. -!! The contributions of each turbulent fluxes are cumulated into the -!! tendency PRvarS, and into the dynamic and thermal production of +!! The different prognostic variables are treated one by one. +!! The contributions of each turbulent fluxes are cumulated into the +!! tendency PRvarS, and into the dynamic and thermal production of !! TKE if necessary. -!! +!! !! In section 2 and 3, the thermodynamical fields are considered. !! Only the turbulent fluxes of the conservative variables -!! (Thetal and Rnp stored in PRx(:,:,:,1)) are computed. -!! Note that the turbulent fluxes at the vertical +!! (Thetal and Rnp stored in PRx(:,:,:,1)) are computed. +!! Note that the turbulent fluxes at the vertical !! boundaries are given either by the soil scheme for the surface one -!! ( at the same instant as the others fluxes) and equal to 0 at the -!! top of the model. The thermal production is computed by vertically +!! ( at the same instant as the others fluxes) and equal to 0 at the +!! top of the model. The thermal production is computed by vertically !! averaging the turbulent flux and multiply this flux at the mass point by !! a function ETHETA or EMOIST, which preform the transformation from the -!! conservative variables to the virtual potential temperature. -!! +!! conservative variables to the virtual potential temperature. +!! !! In section 4, the variance of the statistical variable -!! s indicating presence or not of condensation, is determined in function +!! s indicating presence or not of condensation, is determined in function !! of the turbulent moments of the conservative variables and its -!! squarred root is stored in PSIGS. This information will be completed in -!! the horizontal turbulence if the turbulence dimensionality is not +!! squarred root is stored in PSIGS. This information will be completed in +!! the horizontal turbulence if the turbulence dimensionality is not !! equal to "1DIM". !! !! In section 5, the x component of the stress tensor is computed. @@ -80,53 +80,53 @@ SUBROUTINE TURB_VER_SV_FLUX(KKA,KKU,KKL, & !! j" is also parallel to the surface and in the normal direction of !! the maximum slope !! k" is the normal to the surface -!! In order to prevent numerical instability, the implicit scheme has -!! been extended to the surface flux regarding to its dependence in -!! function of U. The dependence in function of the other components +!! In order to prevent numerical instability, the implicit scheme has +!! been extended to the surface flux regarding to its dependence in +!! function of U. The dependence in function of the other components !! introduced by the different rotations is only explicit. -!! The turbulent fluxes are used to compute the dynamic production of +!! The turbulent fluxes are used to compute the dynamic production of !! TKE. For the last TKE level ( located at PDZZ(:,:,IKB)/2 from the -!! ground), an harmonic extrapolation from the dynamic production at +!! ground), an harmonic extrapolation from the dynamic production at !! PDZZ(:,:,IKB) is used to avoid an evaluation of the gradient of U !! in the surface layer. !! !! In section 6, the same steps are repeated but for the y direction -!! and in section 7, a diagnostic computation of the W variance is +!! and in section 7, a diagnostic computation of the W variance is !! performed. !! -!! In section 8, the turbulent fluxes for the scalar variables are +!! In section 8, the turbulent fluxes for the scalar variables are !! computed by the same way as the conservative thermodynamical variables !! -!! +!! !! EXTERNAL !! -------- -!! GX_U_M, GY_V_M, GZ_W_M : cartesian gradient operators +!! GX_U_M, GY_V_M, GZ_W_M : cartesian gradient operators !! GX_U_UW,GY_V_VW (X,Y,Z) represent the direction of the gradient -!! _(M,U,...)_ represent the localization of the +!! _(M,U,...)_ represent the localization of the !! field to be derivated -!! _(M,UW,...) represent the localization of the +!! _(M,UW,...) represent the localization of the !! field derivated -!! +!! !! !! MXM,MXF,MYM,MYF,MZM,MZF -!! : Shuman functions (mean operators) +!! : Shuman functions (mean operators) !! DXF,DYF,DZF,DZM -!! : Shuman functions (difference operators) -!! +!! : Shuman functions (difference operators) +!! !! SUBROUTINE TRIDIAG : to compute the split implicit evolution !! of a variable located at a mass point !! !! SUBROUTINE TRIDIAG_WIND: to compute the split implicit evolution !! of a variable located at a wind point !! -!! FUNCTIONs ETHETA and EMOIST : +!! FUNCTIONs ETHETA and EMOIST : !! allows to compute: !! - the coefficients for the turbulent correlation between -!! any variable and the virtual potential temperature, of its -!! correlations with the conservative potential temperature and +!! any variable and the virtual potential temperature, of its +!! correlations with the conservative potential temperature and !! the humidity conservative variable: !! ------- ------- ------- -!! A' Thv' = ETHETA A' Thl' + EMOIST A' Rnp' +!! A' Thv' = ETHETA A' Thl' + EMOIST A' Rnp' !! !! !! IMPLICIT ARGUMENTS @@ -160,34 +160,34 @@ SUBROUTINE TURB_VER_SV_FLUX(KKA,KKU,KKL, & !! MODIFICATIONS !! ------------- !! Original August 19, 1994 -!! Modifications: February 14, 1995 (J.Cuxart and J.Stein) +!! Modifications: February 14, 1995 (J.Cuxart and J.Stein) !! Doctorization and Optimization -!! Modifications: March 21, 1995 (J.M. Carriere) +!! Modifications: March 21, 1995 (J.M. Carriere) !! Introduction of cloud water -!! Modifications: June 14, 1995 (J.Cuxart and J. Stein) +!! Modifications: June 14, 1995 (J.Cuxart and J. Stein) !! Phi3 and Psi3 at w-point + bug in the all -!! or nothing condens. -!! Modifications: Sept 15, 1995 (J.Cuxart and J. Stein) +!! or nothing condens. +!! Modifications: Sept 15, 1995 (J.Cuxart and J. Stein) !! Change the DP computation at the ground -!! Modifications: October 10, 1995 (J.Cuxart and J. Stein) +!! Modifications: October 10, 1995 (J.Cuxart and J. Stein) !! Psi for scal var and LES tools !! Modifications: November 10, 1995 (J. Stein) -!! change the surface relations +!! change the surface relations !! Modifications: February 20, 1995 (J. Stein) optimization -!! Modifications: May 21, 1996 (J. Stein) -!! bug in the vertical flux of the V wind +!! Modifications: May 21, 1996 (J. Stein) +!! bug in the vertical flux of the V wind !! component for explicit computation -!! Modifications: May 21, 1996 (N. wood) +!! Modifications: May 21, 1996 (N. wood) !! modify the computation of the vertical !! part or the surface tangential flux !! Modifications: May 21, 1996 (P. Jabouille) !! same modification in the Y direction -!! +!! !! Modifications: Sept 17, 1996 (J. Stein) change the moist case by using !! Pi instead of Piref + use Atheta and Amoist !! !! Modifications: Nov 24, 1997 (V. Masson) removes the DO loops -!! Modifications: Mar 31, 1998 (V. Masson) splits the routine TURB_VER_SV_FLUX +!! Modifications: Mar 31, 1998 (V. Masson) splits the routine TURB_VER_SV_FLUX !! Modifications: Dec 01, 2000 (V. Masson) conservation of scalar emission !! from surface in 1DIM case !! when slopes are present @@ -195,15 +195,17 @@ SUBROUTINE TURB_VER_SV_FLUX(KKA,KKU,KKL, & !! Nov 06, 2002 (V. Masson) LES budgets !! October 2009 (G. Tanguy) add ILENCH=LEN(YCOMMENT) after !! change of YCOMMENT -!! Feb 2012(Y. Seity) add possibility to run with reversed +!! Feb 2012(Y. Seity) add possibility to run with reversed !! vertical levels !! Modifications: July 2015 (Wim de Rooy) LHARAT switch !! Feb 2017(M. Leriche) add initialisation of ZSOURCE !! to avoid unknwon values outside physical domain !! and avoid negative values in sv tendencies !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +!! Modifications: June 2019 (Wim de Rooy) with energycascade, 50MF nog +!! longer necessary !!-------------------------------------------------------------------------- -! +! !* 0. DECLARATIONS ! ------------ ! @@ -238,7 +240,7 @@ IMPLICIT NONE !* 0.1 declarations of arguments ! ! -INTEGER, INTENT(IN) :: KKA !near ground array index +INTEGER, INTENT(IN) :: KKA !near ground array index INTEGER, INTENT(IN) :: KKU !uppest atmosphere array index INTEGER, INTENT(IN) :: KKL !vert. levels type 1=MNH -1=ARO LOGICAL, INTENT(IN) :: OTURB_FLX ! switch to write the @@ -258,15 +260,15 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! dry density * grid volum REAL, DIMENSION(:,:,:), INTENT(IN) :: MFMOIST ! moist mf dual scheme ! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSFSVM ! t - deltat +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSFSVM ! t - deltat ! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSFSVP ! t + deltat +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSFSVP ! t + deltat ! REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVM ! scalar var. at t-Delta t ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PWM ! vertical wind REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKEM ! TKE at time t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM ! Turb. mixing length +REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM ! Turb. mixing length REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PPSI_SV ! Inv.Turb.Sch.for scalars ! REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRSVS @@ -285,14 +287,14 @@ REAL, DIMENSION(SIZE(PSVM,1),SIZE(PSVM,2),SIZE(PSVM,3)) :: & ! J in Section 5) ZRES, & ! guess of the treated variable at t+ deltat when the turbu- ! lence is the only source of evolution added to the ones - ! considered in ZSOURCE + ! considered in ZSOURCE ZFLXZ, & ! vertical flux of the treated variable ZSOURCE, & ! source of evolution for the treated variable ZKEFF ! effectif diffusion coeff = LT * SQRT( TKE ) INTEGER :: IKB,IKE ! I index values for the Beginning and End ! mass points of the domain in the 3 direct. INTEGER :: IKT ! array size in k direction -INTEGER :: IKTB,IKTE ! start, end of k loops in physical domain +INTEGER :: IKTB,IKTE ! start, end of k loops in physical domain INTEGER :: JSV ! loop counters INTEGER :: JK ! loop INTEGER :: ISV ! number of scalar var. @@ -314,19 +316,21 @@ IF (LHOOK) CALL DR_HOOK('TURB_VER_SV_FLUX',0,ZHOOK_HANDLE) IKB=KKA+JPVEXT_TURB*KKL IKE=KKU-JPVEXT_TURB*KKL IKT=SIZE(PSVM,3) -IKTE =IKT-JPVEXT_TURB -IKTB =1+JPVEXT_TURB +IKTE =IKT-JPVEXT_TURB +IKTB =1+JPVEXT_TURB ! ISV=SIZE(PSVM,4) ! IF (LHARAT) THEN - ZKEFF(:,:,:) = PLM(:,:,:) * SQRT(PTKEM(:,:,:)) + 50.*MFMOIST(:,:,:) + !wc 50MF can be omitted with energy cascade included + !ZKEFF(:,:,:) = PLM(:,:,:) * SQRT(PTKEM(:,:,:)) + 50.*MFMOIST(:,:,:) + ZKEFF(:,:,:) = PLM(:,:,:) * SQRT(PTKEM(:,:,:)) ELSE ZKEFF(:,:,:) = MZM(PLM(:,:,:) * SQRT(PTKEM(:,:,:)), KKA, KKU, KKL) ENDIF ! IF(LBLOWSNOW) THEN -! See Vionnet (PhD, 2012) for a complete discussion around the value of the Schmidt number for blowing snow variables +! See Vionnet (PhD, 2012) for a complete discussion around the value of the Schmidt number for blowing snow variables ZCSV= XCHF/XRSNOW ELSE ZCSV= XCHF @@ -340,7 +344,7 @@ DO JSV=1,ISV ! IF (LNOMIXLG .AND. JSV >= NSV_LGBEG .AND. JSV<= NSV_LGEND) CYCLE ! -! Preparation of the arguments for TRIDIAG +! Preparation of the arguments for TRIDIAG IF (LHARAT) THEN ZA(:,:,:) = -PTSTEP* & ZKEFF * MZM(PRHODJ, KKA, KKU, KKL) / & @@ -361,7 +365,7 @@ DO JSV=1,ISV IF (HTURBDIM=='3DIM') THEN ZSOURCE(:,:,IKB) = (PIMPL*PSFSVP(:,:,JSV) + PEXPL*PSFSVM(:,:,JSV)) / & PDZZ(:,:,IKB) * PDIRCOSZW(:,:) & - * 0.5 * (1. + PRHODJ(:,:,KKA) / PRHODJ(:,:,IKB)) + * 0.5 * (1. + PRHODJ(:,:,KKA) / PRHODJ(:,:,IKB)) ELSE ZSOURCE(:,:,IKB) = (PIMPL*PSFSVP(:,:,JSV) + PEXPL*PSFSVM(:,:,JSV)) / & @@ -371,7 +375,7 @@ DO JSV=1,ISV ZSOURCE(:,:,IKTB+1:IKTE-1) = 0. ZSOURCE(:,:,IKE) = 0. ! -! Obtention of the split JSV scalar variable at t+ deltat +! Obtention of the split JSV scalar variable at t+ deltat CALL TRIDIAG(KKA,KKU,KKL,PSVM(:,:,:,JSV),ZA,PTSTEP,PEXPL,PIMPL,PRHODJ,ZSOURCE,ZRES) ! ! Compute the equivalent tendency for the JSV scalar variable @@ -390,7 +394,7 @@ DO JSV=1,ISV ! is taken into account in the vertical part IF (HTURBDIM=='3DIM') THEN ZFLXZ(:,:,IKB) = (PIMPL*PSFSVP(:,:,JSV) + PEXPL*PSFSVM(:,:,JSV)) & - * PDIRCOSZW(:,:) + * PDIRCOSZW(:,:) ELSE ZFLXZ(:,:,IKB) = (PIMPL*PSFSVP(:,:,JSV) + PEXPL*PSFSVM(:,:,JSV)) & / PDIRCOSZW(:,:) @@ -437,7 +441,7 @@ DO JSV=1,ISV XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1 END IF ! -END DO ! end of scalar loop +END DO ! end of scalar loop ! !---------------------------------------------------------------------------- ! diff --git a/src/common/turb/mode_turb_ver_thermo_corr.F90 b/src/common/turb/mode_turb_ver_thermo_corr.F90 index db08f0ce62947783ab09870fd2b49ff4d4245f2d..596c8c7b3af1c5b37fdd8759aa026b5aaf9cd99f 100644 --- a/src/common/turb/mode_turb_ver_thermo_corr.F90 +++ b/src/common/turb/mode_turb_ver_thermo_corr.F90 @@ -4,7 +4,7 @@ !MNH_LIC for details. version 1. MODULE MODE_TURB_VER_THERMO_CORR IMPLICIT NONE -CONTAINS +CONTAINS SUBROUTINE TURB_VER_THERMO_CORR(KKA,KKU,KKL,KRR,KRRL,KRRI, & OTURB_FLX,HTURBDIM,HTOM, & PIMPL,PEXPL, & @@ -29,13 +29,13 @@ SUBROUTINE TURB_VER_THERMO_CORR(KKA,KKU,KKL,KRR,KRRL,KRRI, & !! PURPOSE !! ------- ! The purpose of this routine is to compute the vertical turbulent -! fluxes of the evolutive variables and give back the source +! fluxes of the evolutive variables and give back the source ! terms to the main program. In the case of large horizontal meshes, ! the divergence of these vertical turbulent fluxes represent the whole ! effect of the turbulence but when the three-dimensionnal version of ! the turbulence scheme is activated (CTURBDIM="3DIM"), these divergences -! are completed in the next routine TURB_HOR. -! An arbitrary degree of implicitness has been implemented for the +! are completed in the next routine TURB_HOR. +! An arbitrary degree of implicitness has been implemented for the ! temporal treatment of these diffusion terms. ! The vertical boundary conditions are as follows: ! * at the bottom, the surface fluxes are prescribed at the same @@ -43,8 +43,8 @@ SUBROUTINE TURB_VER_THERMO_CORR(KKA,KKU,KKL,KRR,KRRL,KRRI, & ! * at the top, the turbulent fluxes are set to 0. ! It should be noted that the condensation has been implicitely included ! in this turbulence scheme by using conservative variables and computing -! the subgrid variance of a statistical variable s indicating the presence -! or not of condensation in a given mesh. +! the subgrid variance of a statistical variable s indicating the presence +! or not of condensation in a given mesh. ! !!** METHOD !! ------ @@ -53,27 +53,27 @@ SUBROUTINE TURB_VER_THERMO_CORR(KKA,KKU,KKL,KRR,KRRL,KRRI, & !! implicit scheme (a Crank-Nicholson type with coefficients different !! than 0.5), which allows to vary the degree of implicitness of the !! formulation. -!! The different prognostic variables are treated one by one. -!! The contributions of each turbulent fluxes are cumulated into the -!! tendency PRvarS, and into the dynamic and thermal production of +!! The different prognostic variables are treated one by one. +!! The contributions of each turbulent fluxes are cumulated into the +!! tendency PRvarS, and into the dynamic and thermal production of !! TKE if necessary. -!! +!! !! In section 2 and 3, the thermodynamical fields are considered. !! Only the turbulent fluxes of the conservative variables -!! (Thetal and Rnp stored in PRx(:,:,:,1)) are computed. -!! Note that the turbulent fluxes at the vertical +!! (Thetal and Rnp stored in PRx(:,:,:,1)) are computed. +!! Note that the turbulent fluxes at the vertical !! boundaries are given either by the soil scheme for the surface one -!! ( at the same instant as the others fluxes) and equal to 0 at the -!! top of the model. The thermal production is computed by vertically +!! ( at the same instant as the others fluxes) and equal to 0 at the +!! top of the model. The thermal production is computed by vertically !! averaging the turbulent flux and multiply this flux at the mass point by !! a function ETHETA or EMOIST, which preform the transformation from the -!! conservative variables to the virtual potential temperature. -!! +!! conservative variables to the virtual potential temperature. +!! !! In section 4, the variance of the statistical variable -!! s indicating presence or not of condensation, is determined in function +!! s indicating presence or not of condensation, is determined in function !! of the turbulent moments of the conservative variables and its -!! squarred root is stored in PSIGS. This information will be completed in -!! the horizontal turbulence if the turbulence dimensionality is not +!! squarred root is stored in PSIGS. This information will be completed in +!! the horizontal turbulence if the turbulence dimensionality is not !! equal to "1DIM". !! !! In section 5, the x component of the stress tensor is computed. @@ -84,47 +84,47 @@ SUBROUTINE TURB_VER_THERMO_CORR(KKA,KKU,KKL,KRR,KRRL,KRRI, & !! j" is also parallel to the surface and in the normal direction of !! the maximum slope !! k" is the normal to the surface -!! In order to prevent numerical instability, the implicit scheme has -!! been extended to the surface flux regarding to its dependence in -!! function of U. The dependence in function of the other components +!! In order to prevent numerical instability, the implicit scheme has +!! been extended to the surface flux regarding to its dependence in +!! function of U. The dependence in function of the other components !! introduced by the different rotations is only explicit. -!! The turbulent fluxes are used to compute the dynamic production of +!! The turbulent fluxes are used to compute the dynamic production of !! TKE. For the last TKE level ( located at PDZZ(:,:,IKB)/2 from the -!! ground), an harmonic extrapolation from the dynamic production at +!! ground), an harmonic extrapolation from the dynamic production at !! PDZZ(:,:,IKB) is used to avoid an evaluation of the gradient of U !! in the surface layer. !! !! In section 6, the same steps are repeated but for the y direction -!! and in section 7, a diagnostic computation of the W variance is +!! and in section 7, a diagnostic computation of the W variance is !! performed. !! -!! In section 8, the turbulent fluxes for the scalar variables are +!! In section 8, the turbulent fluxes for the scalar variables are !! computed by the same way as the conservative thermodynamical variables !! -!! +!! !! EXTERNAL !! -------- -!! GX_U_M, GY_V_M, GZ_W_M : cartesian gradient operators +!! GX_U_M, GY_V_M, GZ_W_M : cartesian gradient operators !! GX_U_UW,GY_V_VW (X,Y,Z) represent the direction of the gradient -!! _(M,U,...)_ represent the localization of the +!! _(M,U,...)_ represent the localization of the !! field to be derivated -!! _(M,UW,...) represent the localization of the +!! _(M,UW,...) represent the localization of the !! field derivated -!! +!! !! !! MXM,MXF,MYM,MYF,MZM,MZF -!! : Shuman functions (mean operators) +!! : Shuman functions (mean operators) !! DXF,DYF,DZF,DZM -!! : Shuman functions (difference operators) -!! -!! FUNCTIONs ETHETA and EMOIST : +!! : Shuman functions (difference operators) +!! +!! FUNCTIONs ETHETA and EMOIST : !! allows to compute: !! - the coefficients for the turbulent correlation between -!! any variable and the virtual potential temperature, of its -!! correlations with the conservative potential temperature and +!! any variable and the virtual potential temperature, of its +!! correlations with the conservative potential temperature and !! the humidity conservative variable: !! ------- ------- ------- -!! A' Thv' = ETHETA A' Thl' + EMOIST A' Rnp' +!! A' Thv' = ETHETA A' Thl' + EMOIST A' Rnp' !! !! !! IMPLICIT ARGUMENTS @@ -158,34 +158,34 @@ SUBROUTINE TURB_VER_THERMO_CORR(KKA,KKU,KKL,KRR,KRRL,KRRI, & !! MODIFICATIONS !! ------------- !! Original August 19, 1994 -!! Modifications: February 14, 1995 (J.Cuxart and J.Stein) +!! Modifications: February 14, 1995 (J.Cuxart and J.Stein) !! Doctorization and Optimization -!! Modifications: March 21, 1995 (J.M. Carriere) +!! Modifications: March 21, 1995 (J.M. Carriere) !! Introduction of cloud water -!! Modifications: June 14, 1995 (J.Cuxart and J. Stein) +!! Modifications: June 14, 1995 (J.Cuxart and J. Stein) !! Phi3 and Psi3 at w-point + bug in the all -!! or nothing condens. -!! Modifications: Sept 15, 1995 (J.Cuxart and J. Stein) +!! or nothing condens. +!! Modifications: Sept 15, 1995 (J.Cuxart and J. Stein) !! Change the DP computation at the ground -!! Modifications: October 10, 1995 (J.Cuxart and J. Stein) +!! Modifications: October 10, 1995 (J.Cuxart and J. Stein) !! Psi for scal var and LES tools !! Modifications: November 10, 1995 (J. Stein) -!! change the surface relations +!! change the surface relations !! Modifications: February 20, 1995 (J. Stein) optimization -!! Modifications: May 21, 1996 (J. Stein) -!! bug in the vertical flux of the V wind +!! Modifications: May 21, 1996 (J. Stein) +!! bug in the vertical flux of the V wind !! component for explicit computation -!! Modifications: May 21, 1996 (N. wood) +!! Modifications: May 21, 1996 (N. wood) !! modify the computation of the vertical !! part or the surface tangential flux !! Modifications: May 21, 1996 (P. Jabouille) !! same modification in the Y direction -!! +!! !! Modifications: Sept 17, 1996 (J. Stein) change the moist case by using !! Pi instead of Piref + use Atheta and Amoist !! -!! Modifications: Nov 24, 1997 (V. Masson) removes the DO loops -!! Modifications: Mar 31, 1998 (V. Masson) splits the routine TURB_VER_THERMO_FLUX +!! Modifications: Nov 24, 1997 (V. Masson) removes the DO loops +!! Modifications: Mar 31, 1998 (V. Masson) splits the routine TURB_VER_THERMO_FLUX !! Modifications: Oct 18, 2000 (V. Masson) LES computations !! Modifications: Dec 01, 2000 (V. Masson) conservation of energy from !! surface flux in 1DIM case @@ -193,12 +193,13 @@ SUBROUTINE TURB_VER_THERMO_CORR(KKA,KKU,KKL,KRR,KRRL,KRRI, & !! Nov 06, 2002 (V. Masson) LES budgets !! October 2009 (G. Tanguy) add ILENCH=LEN(YCOMMENT) after !! change of YCOMMENT -!! 2012-02 (Y. Seity) add possibility to run with reversed +!! 2012-02 (Y. Seity) add possibility to run with reversed !! vertical levels !! Modifications July 2015 (Wim de Rooy) LHARAT switch !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +!! Modifications June 2019 (Wim de Rooy) New set up cloud scheme !!-------------------------------------------------------------------------- -! +! !* 0. DECLARATIONS ! ------------ ! @@ -230,7 +231,7 @@ IMPLICIT NONE ! ! ! -INTEGER, INTENT(IN) :: KKA !near ground array index +INTEGER, INTENT(IN) :: KKA !near ground array index INTEGER, INTENT(IN) :: KKU !uppest atmosphere array index INTEGER, INTENT(IN) :: KKL !vert. levels type 1=MNH -1=ARO INTEGER, INTENT(IN) :: KRR ! number of moist var. @@ -252,31 +253,31 @@ REAL, DIMENSION(:,:), INTENT(IN) :: PDIRCOSZW ! Director Cosinus of the REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! dry density * grid volum REAL, DIMENSION(:,:,:), INTENT(IN) :: MFMOIST ! moist mass flux dual scheme -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHVREF ! ref. state Virtual - ! Potential Temperature +REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHVREF ! ref. state Virtual + ! Potential Temperature ! REAL, DIMENSION(:,:), INTENT(IN) :: PSFTHM,PSFRM ! surface fluxes at time -! ! t - deltat +! ! t - deltat ! REAL, DIMENSION(:,:), INTENT(IN) :: PSFTHP,PSFRP ! surface fluxes at time -! ! t + deltat +! ! t + deltat ! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PWM +REAL, DIMENSION(:,:,:), INTENT(IN) :: PWM ! Vertical wind -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHLM +REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHLM ! potential temperature at t-Delta t -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRM ! Mixing ratios +REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRM ! Mixing ratios ! at t-Delta t -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVM ! Mixing ratios +REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVM ! Mixing ratios ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKEM ! TKE at time t ! In case LHARATU=TRUE, PLM already includes all stability corrections -REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM ! Turb. mixing length -REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS ! dissipative length +REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM ! Turb. mixing length +REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS ! dissipative length REAL, DIMENSION(:,:,:), INTENT(IN) :: PLOCPEXNM ! Lv(T)/Cp/Exnref at time t-1 -REAL, DIMENSION(:,:,:), INTENT(IN) :: PATHETA ! coefficients between +REAL, DIMENSION(:,:,:), INTENT(IN) :: PATHETA ! coefficients between REAL, DIMENSION(:,:,:), INTENT(IN) :: PAMOIST ! s and Thetal and Rnp -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSRCM ! normalized +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSRCM ! normalized ! 2nd-order flux s'r'c/2Sigma_s2 at t-1 multiplied by Lambda_3 REAL, DIMENSION(:,:,:), INTENT(IN) :: PBETA ! buoyancy coefficient REAL, DIMENSION(:,:,:), INTENT(IN) :: PSQRT_TKE ! sqrt(e) @@ -322,8 +323,8 @@ REAL, DIMENSION(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3)) :: & PLMF, & ! estimate full level length scale from half levels (sub optimal) PLEPSF ! estimate full level diss length scale from half levels (sub optimal) -INTEGER :: IRESP ! Return code of FM routines -INTEGER :: IGRID ! C-grid indicator in LFIFM file +INTEGER :: IRESP ! Return code of FM routines +INTEGER :: IGRID ! C-grid indicator in LFIFM file INTEGER :: ILENCH ! Length of comment string in LFIFM file INTEGER :: IKB,IKE ! I index values for the Beginning and End INTEGER :: IKU ! array sizes @@ -333,7 +334,7 @@ INTEGER :: I1,I2 ! For ZCOEFF allocation CHARACTER (LEN=100) :: YCOMMENT ! comment string in LFIFM file CHARACTER (LEN=16) :: YRECFM ! Name of the desired field in LFIFM file REAL, DIMENSION(:,:,:),ALLOCATABLE :: ZCOEFF - ! coefficients for the uncentred gradient + ! coefficients for the uncentred gradient ! computation near the ground ! REAL :: ZTIME1, ZTIME2 @@ -363,7 +364,7 @@ ALLOCATE(ZCOEFF(SIZE(PDZZ,1),SIZE(PDZZ,2),I1:I2)) ! GUSERV = (KRR/=0) ! -! compute the coefficients for the uncentred gradient computation near the +! compute the coefficients for the uncentred gradient computation near the ! ground ZCOEFF(:,:,IKB+2*KKL)= - PDZZ(:,:,IKB+KKL) / & ( (PDZZ(:,:,IKB+2*KKL)+PDZZ(:,:,IKB+KKL)) * PDZZ(:,:,IKB+2*KKL) ) @@ -374,15 +375,22 @@ ZCOEFF(:,:,IKB)= - (PDZZ(:,:,IKB+2*KKL)+2.*PDZZ(:,:,IKB+KKL)) / & ! ! IF (LHARAT) THEN -PLMF=MZF(PLM, KKA, KKU, KKL) -PLEPSF=PLMF -! function MZF produces -999 for level IKU (82 for 80 levels) -! so put these to normal value as this level (82) is indeed calculated -PLMF(:,:,IKU)=0.001 -PLEPSF(:,:,IKU)=0.001 -ZKEFF(:,:,:) = PLM(:,:,:) * SQRT(PTKEM(:,:,:)) + 50*MFMOIST(:,:,:) + PLMF=MZF(PLM, KKA, KKU, KKL) + !wc Part of the new statistical cloud scheme set up + IF (LSTATNW) THEN + PLEPSF=MZF(PLEPS, KKA, KKU, KKL) + ELSE + PLEPSF=PLMF + ENDIF + ! function MZF produces -999 for level IKU (82 for 80 levels) + ! so put these to normal value as this level (82) is indeed calculated + PLMF(:,:,IKU)=0.001 + PLEPSF(:,:,IKU)=0.001 + ! with energy cascade contribution 50MF term can be omitted + !ZKEFF(:,:,:) = PLM(:,:,:) * SQRT(PTKEM(:,:,:)) + 50*MFMOIST(:,:,:) + ZKEFF(:,:,:) = PLM(:,:,:) * SQRT(PTKEM(:,:,:)) ELSE -ZKEFF(:,:,:) = MZM(PLM(:,:,:) * SQRT(PTKEM(:,:,:)), KKA, KKU, KKL) + ZKEFF(:,:,:) = MZM(PLM(:,:,:) * SQRT(PTKEM(:,:,:)), KKA, KKU, KKL) ENDIF ! @@ -409,15 +417,19 @@ END IF ! -------------------------------------------------------- ! ! -!* 4.2 <THl THl> +!* 4.2 <THl THl> ! ! Compute the turbulent variance F and F' at time t-dt. ! -IF (LHARAT) THEN - ZF (:,:,:) = PLMF*PLEPSF*MZF(PDTH_DZ**2, KKA, KKU, KKL) -ELSE - ZF (:,:,:) = XCTV*PLM*PLEPS*MZF(PPHI3*PDTH_DZ**2, KKA, KKU, KKL) -ENDIF + IF (LHARAT) THEN + IF (LSTATNW) THEN + ZF (:,:,:) = XCTV*PLMF*PLEPSF*MZF(PDTH_DZ**2, KKA, KKU, KKL) + ELSE + ZF (:,:,:) = PLMF*PLEPSF*MZF(PDTH_DZ**2, KKA, KKU, KKL) + ENDIF + ELSE + ZF (:,:,:) = XCTV*PLM*PLEPS*MZF(PPHI3*PDTH_DZ**2, KKA, KKU, KKL) + ENDIF ZDFDDTDZ(:,:,:) = 0. ! this term, because of discretization, is treated separately ! ! Effect of 3rd order terms in temperature flux (at mass point) @@ -473,41 +485,63 @@ ENDIF ! ! special case near the ground ( uncentred gradient ) IF (LHARAT) THEN - ZFLXZ(:,:,IKB) = PLMF(:,:,IKB) & - * PLEPSF(:,:,IKB) & - *( PEXPL * & - ( ZCOEFF(:,:,IKB+2*KKL)*PTHLM(:,:,IKB+2*KKL) & - +ZCOEFF(:,:,IKB+KKL )*PTHLM(:,:,IKB+KKL ) & - +ZCOEFF(:,:,IKB )*PTHLM(:,:,IKB ) )**2 & - +PIMPL * & - ( ZCOEFF(:,:,IKB+2*KKL)*PTHLP(:,:,IKB+2*KKL) & - +ZCOEFF(:,:,IKB+KKL )*PTHLP(:,:,IKB+KKL ) & - +ZCOEFF(:,:,IKB )*PTHLP(:,:,IKB ) )**2 & - ) - ELSE - ZFLXZ(:,:,IKB) = XCTV * PPHI3(:,:,IKB+KKL) * PLM(:,:,IKB) & - * PLEPS(:,:,IKB) & - *( PEXPL * & - ( ZCOEFF(:,:,IKB+2*KKL)*PTHLM(:,:,IKB+2*KKL) & - +ZCOEFF(:,:,IKB+KKL )*PTHLM(:,:,IKB+KKL ) & - +ZCOEFF(:,:,IKB )*PTHLM(:,:,IKB ) )**2 & - +PIMPL * & - ( ZCOEFF(:,:,IKB+2*KKL)*PTHLP(:,:,IKB+2*KKL) & - +ZCOEFF(:,:,IKB+KKL )*PTHLP(:,:,IKB+KKL ) & - +ZCOEFF(:,:,IKB )*PTHLP(:,:,IKB ) )**2 & - ) - ENDIF + IF (LSTATNW) THEN + ZFLXZ(:,:,IKB) = XCTV * PLMF(:,:,IKB) & + * PLEPSF(:,:,IKB) & + *( PEXPL * & + ( ZCOEFF(:,:,IKB+2*KKL)*PTHLM(:,:,IKB+2*KKL) & + +ZCOEFF(:,:,IKB+KKL )*PTHLM(:,:,IKB+KKL ) & + +ZCOEFF(:,:,IKB )*PTHLM(:,:,IKB ) )**2 & + +PIMPL * & + ( ZCOEFF(:,:,IKB+2*KKL)*PTHLP(:,:,IKB+2*KKL) & + +ZCOEFF(:,:,IKB+KKL )*PTHLP(:,:,IKB+KKL ) & + +ZCOEFF(:,:,IKB )*PTHLP(:,:,IKB ) )**2 & + ) + ELSE + ZFLXZ(:,:,IKB) = PLMF(:,:,IKB) & + * PLEPSF(:,:,IKB) & + *( PEXPL * & + ( ZCOEFF(:,:,IKB+2*KKL)*PTHLM(:,:,IKB+2*KKL) & + +ZCOEFF(:,:,IKB+KKL )*PTHLM(:,:,IKB+KKL ) & + +ZCOEFF(:,:,IKB )*PTHLM(:,:,IKB ) )**2 & + +PIMPL * & + ( ZCOEFF(:,:,IKB+2*KKL)*PTHLP(:,:,IKB+2*KKL) & + +ZCOEFF(:,:,IKB+KKL )*PTHLP(:,:,IKB+KKL ) & + +ZCOEFF(:,:,IKB )*PTHLP(:,:,IKB ) )**2 & + ) + ENDIF + ELSE + ZFLXZ(:,:,IKB) = XCTV * PPHI3(:,:,IKB+KKL) * PLM(:,:,IKB) & + * PLEPS(:,:,IKB) & + *( PEXPL * & + ( ZCOEFF(:,:,IKB+2*KKL)*PTHLM(:,:,IKB+2*KKL) & + +ZCOEFF(:,:,IKB+KKL )*PTHLM(:,:,IKB+KKL ) & + +ZCOEFF(:,:,IKB )*PTHLM(:,:,IKB ) )**2 & + +PIMPL * & + ( ZCOEFF(:,:,IKB+2*KKL)*PTHLP(:,:,IKB+2*KKL) & + +ZCOEFF(:,:,IKB+KKL )*PTHLP(:,:,IKB+KKL ) & + +ZCOEFF(:,:,IKB )*PTHLP(:,:,IKB ) )**2 & + ) + ENDIF ! - ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) + ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) ! - ZFLXZ = MAX(0., ZFLXZ) + IF (LSTATNW) THEN + !wc The variance from the budget eq should be multiplied by 2 here + ! thl'2=2*L*LEPS*(dthl/dz**2) + ZFLXZ = MAX(0., 2.*ZFLXZ) + ELSE + ZFLXZ = MAX(0., ZFLXZ) + ENDIF ! IF (KRRL > 0) THEN - PSIGS(:,:,:) = ZFLXZ(:,:,:) * PATHETA(:,:,:)**2 + PSIGS(:,:,:) = ZFLXZ(:,:,:) * PATHETA(:,:,:)**2 + ELSE + PSIGS(:,:,:) = 0. END IF ! ! - ! stores <THl THl> + ! stores <THl THl> IF ( OTURB_FLX .AND. TPFILE%LOPENED ) THEN TZFIELD%CMNHNAME = 'THL_VVAR' TZFIELD%CSTDNAME = '' @@ -526,26 +560,30 @@ ENDIF ! IF (LLES_CALL) THEN CALL SECOND_MNH(ZTIME1) - CALL LES_MEAN_SUBGRID(ZFLXZ, X_LES_SUBGRID_Thl2 ) + CALL LES_MEAN_SUBGRID(ZFLXZ, X_LES_SUBGRID_Thl2 ) CALL LES_MEAN_SUBGRID(MZF(PWM, KKA, KKU, KKL)*ZFLXZ, X_LES_RES_W_SBG_Thl2 ) - CALL LES_MEAN_SUBGRID(-2.*XCTD*PSQRT_TKE*ZFLXZ/PLEPS, X_LES_SUBGRID_DISS_Thl2 ) - CALL LES_MEAN_SUBGRID(PETHETA*ZFLXZ, X_LES_SUBGRID_ThlThv ) - CALL LES_MEAN_SUBGRID(-XA3*PBETA*PETHETA*ZFLXZ, X_LES_SUBGRID_ThlPz, .TRUE. ) + CALL LES_MEAN_SUBGRID(-2.*XCTD*PSQRT_TKE*ZFLXZ/PLEPS, X_LES_SUBGRID_DISS_Thl2 ) + CALL LES_MEAN_SUBGRID(PETHETA*ZFLXZ, X_LES_SUBGRID_ThlThv ) + CALL LES_MEAN_SUBGRID(-XA3*PBETA*PETHETA*ZFLXZ, X_LES_SUBGRID_ThlPz, .TRUE. ) CALL SECOND_MNH(ZTIME2) XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1 END IF ! IF ( KRR /= 0 ) THEN ! -!* 4.3 <THl Rnp> +!* 4.3 <THl Rnp> ! ! ! Compute the turbulent variance F and F' at time t-dt. -IF (LHARAT) THEN - ZF (:,:,:) = PLMF*PLEPSF*MZF(PDTH_DZ*PDR_DZ, KKA, KKU, KKL) -ELSE - ZF (:,:,:) = XCTV*PLM*PLEPS*MZF(0.5*(PPHI3+PPSI3)*PDTH_DZ*PDR_DZ, KKA, KKU, KKL) -ENDIF + IF (LHARAT) THEN + IF (LSTATNW) THEN + ZF (:,:,:) = XCTV*PLMF*PLEPSF*MZF(PDTH_DZ*PDR_DZ, KKA, KKU, KKL) + ELSE + ZF (:,:,:) = PLMF*PLEPSF*MZF(PDTH_DZ*PDR_DZ, KKA, KKU, KKL) + ENDIF + ELSE + ZF (:,:,:) = XCTV*PLM*PLEPS*MZF(0.5*(PPHI3+PPSI3)*PDTH_DZ*PDR_DZ, KKA, KKU, KKL) + ENDIF ZDFDDTDZ(:,:,:) = 0. ! this term, because of discretization, is treated separately ZDFDDRDZ(:,:,:) = 0. ! this term, because of discretization, is treated separately ! @@ -602,79 +640,119 @@ ENDIF END IF ! IF (LHARAT) THEN - ZFLXZ(:,:,:) = ZF & - + PIMPL * PLMF*PLEPSF*0.5 & - * MZF(( 2. & - ) *PDR_DZ *DZM(PTHLP - PTHLM, KKA, KKU, KKL ) / PDZZ & - +( 2. & - ) *PDTH_DZ *DZM(PRP - PRM(:,:,:,1), KKA, KKU, KKL) / PDZZ & - , KKA, KKU, KKL) & - + PIMPL * ZDFDDTDZ * MZF(DZM(PTHLP - PTHLM(:,:,:), KKA, KKU, KKL) / PDZZ, KKA, KKU, KKL) & - + PIMPL * ZDFDDRDZ * MZF(DZM(PRP - PRM(:,:,:,1), KKA, KKU, KKL) / PDZZ, KKA, KKU, KKL) + IF (LSTATNW) THEN + ZFLXZ(:,:,:) = ZF & + + PIMPL * XCTV*PLMF*PLEPSF*0.5 & + * MZF(( 2. & + ) *PDR_DZ *DZM(PTHLP - PTHLM, KKA, KKU, KKL ) / PDZZ & + +( 2. & + ) *PDTH_DZ *DZM(PRP - PRM(:,:,:,1), KKA, KKU, KKL) / PDZZ & + , KKA, KKU, KKL) & + + PIMPL * ZDFDDTDZ * MZF(DZM(PTHLP - PTHLM(:,:,:), KKA, KKU, KKL) / PDZZ, KKA, KKU, KKL) & + + PIMPL * ZDFDDRDZ * MZF(DZM(PRP - PRM(:,:,:,1), KKA, KKU, KKL) / PDZZ, KKA, KKU, KKL) + ELSE + ZFLXZ(:,:,:) = ZF & + + PIMPL * PLMF*PLEPSF*0.5 & + * MZF(( 2. & + ) *PDR_DZ *DZM(PTHLP - PTHLM, KKA, KKU, KKL ) / PDZZ & + +( 2. & + ) *PDTH_DZ *DZM(PRP - PRM(:,:,:,1), KKA, KKU, KKL) / PDZZ & + , KKA, KKU, KKL) & + + PIMPL * ZDFDDTDZ * MZF(DZM(PTHLP - PTHLM(:,:,:), KKA, KKU, KKL) / PDZZ, KKA, KKU, KKL) & + + PIMPL * ZDFDDRDZ * MZF(DZM(PRP - PRM(:,:,:,1), KKA, KKU, KKL) / PDZZ, KKA, KKU, KKL) + ENDIF ELSE - ZFLXZ(:,:,:) = ZF & - + PIMPL * XCTV*PLM*PLEPS*0.5 & - * MZF(( D_PHI3DTDZ_O_DDTDZ(PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,GUSERV) & ! d(phi3*dthdz)/ddthdz term - +D_PSI3DTDZ_O_DDTDZ(PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,GUSERV) & ! d(psi3*dthdz)/ddthdz term - ) *PDR_DZ *DZM(PTHLP - PTHLM, KKA, KKU, KKL) / PDZZ & - +( D_PHI3DRDZ_O_DDRDZ(PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,GUSERV) & ! d(phi3*drdz )/ddrdz term - +D_PSI3DRDZ_O_DDRDZ(PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,GUSERV) & ! d(psi3*drdz )/ddrdz term - ) *PDTH_DZ *DZM(PRP - PRM(:,:,:,1), KKA, KKU, KKL) / PDZZ & - , KKA, KKU, KKL) & - + PIMPL * ZDFDDTDZ * MZF(DZM(PTHLP - PTHLM(:,:,:), KKA, KKU, KKL) / PDZZ, KKA, KKU, KKL) & - + PIMPL * ZDFDDRDZ * MZF(DZM(PRP - PRM(:,:,:,1), KKA, KKU, KKL) / PDZZ, KKA, KKU, KKL) + ZFLXZ(:,:,:) = ZF & + + PIMPL * XCTV*PLM*PLEPS*0.5 & + * MZF(( D_PHI3DTDZ_O_DDTDZ(PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,GUSERV) & ! d(phi3*dthdz)/ddthdz term + +D_PSI3DTDZ_O_DDTDZ(PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,GUSERV) & ! d(psi3*dthdz)/ddthdz term + ) *PDR_DZ *DZM(PTHLP - PTHLM, KKA, KKU, KKL) / PDZZ & + +( D_PHI3DRDZ_O_DDRDZ(PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,GUSERV) & ! d(phi3*drdz )/ddrdz term + +D_PSI3DRDZ_O_DDRDZ(PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,GUSERV) & ! d(psi3*drdz )/ddrdz term + ) *PDTH_DZ *DZM(PRP - PRM(:,:,:,1), KKA, KKU, KKL) / PDZZ & + , KKA, KKU, KKL) & + + PIMPL * ZDFDDTDZ * MZF(DZM(PTHLP - PTHLM(:,:,:), KKA, KKU, KKL) / PDZZ, KKA, KKU, KKL) & + + PIMPL * ZDFDDRDZ * MZF(DZM(PRP - PRM(:,:,:,1), KKA, KKU, KKL) / PDZZ, KKA, KKU, KKL) ENDIF ! ! special case near the ground ( uncentred gradient ) IF (LHARAT) THEN - ZFLXZ(:,:,IKB) = & - (1. ) & - *( PEXPL * & - ( ZCOEFF(:,:,IKB+2*KKL)*PTHLM(:,:,IKB+2*KKL) & - +ZCOEFF(:,:,IKB+KKL )*PTHLM(:,:,IKB+KKL ) & - +ZCOEFF(:,:,IKB )*PTHLM(:,:,IKB )) & - *( ZCOEFF(:,:,IKB+2*KKL)*PRM(:,:,IKB+2*KKL,1) & - +ZCOEFF(:,:,IKB+KKL )*PRM(:,:,IKB+KKL,1 ) & - +ZCOEFF(:,:,IKB )*PRM(:,:,IKB ,1 )) & - +PIMPL * & - ( ZCOEFF(:,:,IKB+2*KKL)*PTHLP(:,:,IKB+2*KKL) & - +ZCOEFF(:,:,IKB+KKL )*PTHLP(:,:,IKB+KKL ) & - +ZCOEFF(:,:,IKB )*PTHLP(:,:,IKB )) & - *( ZCOEFF(:,:,IKB+2*KKL)*PRP(:,:,IKB+2*KKL ) & - +ZCOEFF(:,:,IKB+KKL )*PRP(:,:,IKB+KKL ) & - +ZCOEFF(:,:,IKB )*PRP(:,:,IKB )) & - ) - ELSE - ZFLXZ(:,:,IKB) = & - (XCHT1 * PPHI3(:,:,IKB+KKL) + XCHT2 * PPSI3(:,:,IKB+KKL)) & - *( PEXPL * & - ( ZCOEFF(:,:,IKB+2*KKL)*PTHLM(:,:,IKB+2*KKL) & - +ZCOEFF(:,:,IKB+KKL )*PTHLM(:,:,IKB+KKL ) & - +ZCOEFF(:,:,IKB )*PTHLM(:,:,IKB )) & - *( ZCOEFF(:,:,IKB+2*KKL)*PRM(:,:,IKB+2*KKL,1) & - +ZCOEFF(:,:,IKB+KKL )*PRM(:,:,IKB+KKL,1 ) & - +ZCOEFF(:,:,IKB )*PRM(:,:,IKB ,1 )) & - +PIMPL * & - ( ZCOEFF(:,:,IKB+2*KKL)*PTHLP(:,:,IKB+2*KKL) & - +ZCOEFF(:,:,IKB+KKL )*PTHLP(:,:,IKB+KKL ) & - +ZCOEFF(:,:,IKB )*PTHLP(:,:,IKB )) & - *( ZCOEFF(:,:,IKB+2*KKL)*PRP(:,:,IKB+2*KKL ) & - +ZCOEFF(:,:,IKB+KKL )*PRP(:,:,IKB+KKL ) & - +ZCOEFF(:,:,IKB )*PRP(:,:,IKB )) & - ) + IF (LSTATNW) THEN + ZFLXZ(:,:,IKB) = & + (XCHT1 + XCHT2 ) & + *( PEXPL * & + ( ZCOEFF(:,:,IKB+2*KKL)*PTHLM(:,:,IKB+2*KKL) & + +ZCOEFF(:,:,IKB+KKL )*PTHLM(:,:,IKB+KKL ) & + +ZCOEFF(:,:,IKB )*PTHLM(:,:,IKB )) & + *( ZCOEFF(:,:,IKB+2*KKL)*PRM(:,:,IKB+2*KKL,1) & + +ZCOEFF(:,:,IKB+KKL )*PRM(:,:,IKB+KKL,1 ) & + +ZCOEFF(:,:,IKB )*PRM(:,:,IKB ,1 )) & + +PIMPL * & + ( ZCOEFF(:,:,IKB+2*KKL)*PTHLP(:,:,IKB+2*KKL) & + +ZCOEFF(:,:,IKB+KKL )*PTHLP(:,:,IKB+KKL ) & + +ZCOEFF(:,:,IKB )*PTHLP(:,:,IKB )) & + *( ZCOEFF(:,:,IKB+2*KKL)*PRP(:,:,IKB+2*KKL ) & + +ZCOEFF(:,:,IKB+KKL )*PRP(:,:,IKB+KKL ) & + +ZCOEFF(:,:,IKB )*PRP(:,:,IKB )) & + ) + ELSE + ZFLXZ(:,:,IKB) = & + (1. ) & + *( PEXPL * & + ( ZCOEFF(:,:,IKB+2*KKL)*PTHLM(:,:,IKB+2*KKL) & + +ZCOEFF(:,:,IKB+KKL )*PTHLM(:,:,IKB+KKL ) & + +ZCOEFF(:,:,IKB )*PTHLM(:,:,IKB )) & + *( ZCOEFF(:,:,IKB+2*KKL)*PRM(:,:,IKB+2*KKL,1) & + +ZCOEFF(:,:,IKB+KKL )*PRM(:,:,IKB+KKL,1 ) & + +ZCOEFF(:,:,IKB )*PRM(:,:,IKB ,1 )) & + +PIMPL * & + ( ZCOEFF(:,:,IKB+2*KKL)*PTHLP(:,:,IKB+2*KKL) & + +ZCOEFF(:,:,IKB+KKL )*PTHLP(:,:,IKB+KKL ) & + +ZCOEFF(:,:,IKB )*PTHLP(:,:,IKB )) & + *( ZCOEFF(:,:,IKB+2*KKL)*PRP(:,:,IKB+2*KKL ) & + +ZCOEFF(:,:,IKB+KKL )*PRP(:,:,IKB+KKL ) & + +ZCOEFF(:,:,IKB )*PRP(:,:,IKB )) & + ) + ENDIF + ELSE + ZFLXZ(:,:,IKB) = & + (XCHT1 * PPHI3(:,:,IKB+KKL) + XCHT2 * PPSI3(:,:,IKB+KKL)) & + *( PEXPL * & + ( ZCOEFF(:,:,IKB+2*KKL)*PTHLM(:,:,IKB+2*KKL) & + +ZCOEFF(:,:,IKB+KKL )*PTHLM(:,:,IKB+KKL ) & + +ZCOEFF(:,:,IKB )*PTHLM(:,:,IKB )) & + *( ZCOEFF(:,:,IKB+2*KKL)*PRM(:,:,IKB+2*KKL,1) & + +ZCOEFF(:,:,IKB+KKL )*PRM(:,:,IKB+KKL,1 ) & + +ZCOEFF(:,:,IKB )*PRM(:,:,IKB ,1 )) & + +PIMPL * & + ( ZCOEFF(:,:,IKB+2*KKL)*PTHLP(:,:,IKB+2*KKL) & + +ZCOEFF(:,:,IKB+KKL )*PTHLP(:,:,IKB+KKL ) & + +ZCOEFF(:,:,IKB )*PTHLP(:,:,IKB )) & + *( ZCOEFF(:,:,IKB+2*KKL)*PRP(:,:,IKB+2*KKL ) & + +ZCOEFF(:,:,IKB+KKL )*PRP(:,:,IKB+KKL ) & + +ZCOEFF(:,:,IKB )*PRP(:,:,IKB )) & + ) ENDIF - ! - ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) ! - IF ( KRRL > 0 ) THEN -! -! -! NB PATHETA is -b in Chaboureau Bechtold 2002 which explains the + sign here - - PSIGS(:,:,:) = PSIGS(:,:,:) + & + ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) + ! + IF (LSTATNW) THEN + !wc The variance from the budget eq should be multiplied by 2 here + ! e.g. thl'2=2*L*LEPS*(cab)^-1 *(dthl/dz**2) + ZFLXZ = MIN(0., 2.*ZFLXZ) + ENDIF + IF ( KRRL > 0 ) THEN + IF (LSTATNW) THEN + !wc Part of the new statistical cloud scheme set up. Normal notation so - sign + PSIGS(:,:,:) = PSIGS(:,:,:) - & 2. * PATHETA(:,:,:) * PAMOIST(:,:,:) * ZFLXZ(:,:,:) + ELSE + ! NB PATHETA is -b in Chaboureau Bechtold 2002 which explains the + sign here + PSIGS(:,:,:) = PSIGS(:,:,:) + & + 2. * PATHETA(:,:,:) * PAMOIST(:,:,:) * ZFLXZ(:,:,:) + ENDIF END IF - ! stores <THl Rnp> + ! stores <THl Rnp> IF ( OTURB_FLX .AND. TPFILE%LOPENED ) THEN TZFIELD%CMNHNAME = 'THLRCONS_VCOR' TZFIELD%CSTDNAME = '' @@ -693,27 +771,31 @@ ENDIF ! IF (LLES_CALL) THEN CALL SECOND_MNH(ZTIME1) - CALL LES_MEAN_SUBGRID(ZFLXZ, X_LES_SUBGRID_THlRt ) + CALL LES_MEAN_SUBGRID(ZFLXZ, X_LES_SUBGRID_THlRt ) CALL LES_MEAN_SUBGRID(MZF(PWM, KKA, KKU, KKL)*ZFLXZ, X_LES_RES_W_SBG_ThlRt ) - CALL LES_MEAN_SUBGRID(-2.*XCTD*PSQRT_TKE*ZFLXZ/PLEPS, X_LES_SUBGRID_DISS_ThlRt ) - CALL LES_MEAN_SUBGRID(PETHETA*ZFLXZ, X_LES_SUBGRID_RtThv ) - CALL LES_MEAN_SUBGRID(-XA3*PBETA*PETHETA*ZFLXZ, X_LES_SUBGRID_RtPz, .TRUE. ) - CALL LES_MEAN_SUBGRID(PEMOIST*ZFLXZ, X_LES_SUBGRID_ThlThv , .TRUE. ) - CALL LES_MEAN_SUBGRID(-XA3*PBETA*PEMOIST*ZFLXZ, X_LES_SUBGRID_ThlPz, .TRUE. ) + CALL LES_MEAN_SUBGRID(-2.*XCTD*PSQRT_TKE*ZFLXZ/PLEPS, X_LES_SUBGRID_DISS_ThlRt ) + CALL LES_MEAN_SUBGRID(PETHETA*ZFLXZ, X_LES_SUBGRID_RtThv ) + CALL LES_MEAN_SUBGRID(-XA3*PBETA*PETHETA*ZFLXZ, X_LES_SUBGRID_RtPz, .TRUE. ) + CALL LES_MEAN_SUBGRID(PEMOIST*ZFLXZ, X_LES_SUBGRID_ThlThv , .TRUE. ) + CALL LES_MEAN_SUBGRID(-XA3*PBETA*PEMOIST*ZFLXZ, X_LES_SUBGRID_ThlPz, .TRUE. ) CALL SECOND_MNH(ZTIME2) XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1 END IF -! +! ! !* 4.4 <Rnp Rnp> ! ! ! Compute the turbulent variance F and F' at time t-dt. -IF (LHARAT) THEN - ZF (:,:,:) = PLMF*PLEPSF*MZF(PDR_DZ**2, KKA, KKU, KKL) - ELSE - ZF (:,:,:) = XCTV*PLM*PLEPS*MZF(PPSI3*PDR_DZ**2, KKA, KKU, KKL) -ENDIF + IF (LHARAT) THEN + IF (LSTATNW) THEN + ZF (:,:,:) = XCTV*PLMF*PLEPSF*MZF(PDR_DZ**2, KKA, KKU, KKL) + ELSE + ZF (:,:,:) = PLMF*PLEPSF*MZF(PDR_DZ**2, KKA, KKU, KKL) + ENDIF + ELSE + ZF (:,:,:) = XCTV*PLM*PLEPS*MZF(PPSI3*PDR_DZ**2, KKA, KKU, KKL) + ENDIF ZDFDDRDZ(:,:,:) = 0. ! this term, because of discretization, is treated separately ! ! Effect of 3rd order terms in temperature flux (at mass point) @@ -758,56 +840,83 @@ ENDIF ZDFDDRDZ = ZDFDDRDZ + D_M3_R2_WTHR_O_DDRDZ(KKA,KKU,KKL,PREDR1,PREDTH1,& & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDR_DZ) * PFTHR END IF - + END IF ! - IF (LHARAT) THEN - ZFLXZ(:,:,:) = ZF & - + PIMPL * PLMF*PLEPSF & - *MZF(2.*PDR_DZ* & - DZM(PRP - PRM(:,:,:,1), KKA, KKU, KKL) / PDZZ, KKA, KKU, KKL) & - + PIMPL * ZDFDDRDZ * MZF(DZM(PRP - PRM(:,:,:,1), KKA, KKU, KKL) / PDZZ, KKA, KKU, KKL) - ELSE - ZFLXZ(:,:,:) = ZF & - + PIMPL * XCTV*PLM*PLEPS & - *MZF(D_PSI3DRDZ2_O_DDRDZ(PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,PDR_DZ,HTURBDIM,GUSERV) & - *DZM(PRP - PRM(:,:,:,1), KKA, KKU, KKL) / PDZZ, KKA, KKU, KKL) & - + PIMPL * ZDFDDRDZ * MZF(DZM(PRP - PRM(:,:,:,1), KKA, KKU, KKL) / PDZZ, KKA, KKU, KKL) - ENDIF + IF (LHARAT) THEN + IF (LSTATNW) THEN + ZFLXZ(:,:,:) = ZF & + + PIMPL * XCTV*PLMF*PLEPSF & + *MZF(2.*PDR_DZ* & + DZM(PRP - PRM(:,:,:,1), KKA, KKU, KKL) / PDZZ, KKA, KKU, KKL) & + + PIMPL * ZDFDDRDZ * MZF(DZM(PRP - PRM(:,:,:,1), KKA, KKU, KKL) / PDZZ, KKA, KKU, KKL) + ELSE + ZFLXZ(:,:,:) = ZF & + + PIMPL * PLMF*PLEPSF & + *MZF(2.*PDR_DZ* & + DZM(PRP - PRM(:,:,:,1), KKA, KKU, KKL) / PDZZ, KKA, KKU, KKL) & + + PIMPL * ZDFDDRDZ * MZF(DZM(PRP - PRM(:,:,:,1), KKA, KKU, KKL) / PDZZ, KKA, KKU, KKL) + ENDIF + ELSE + ZFLXZ(:,:,:) = ZF & + + PIMPL * XCTV*PLM*PLEPS & + *MZF(D_PSI3DRDZ2_O_DDRDZ(PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,PDR_DZ,HTURBDIM,GUSERV) & + *DZM(PRP - PRM(:,:,:,1), KKA, KKU, KKL) / PDZZ, KKA, KKU, KKL) & + + PIMPL * ZDFDDRDZ * MZF(DZM(PRP - PRM(:,:,:,1), KKA, KKU, KKL) / PDZZ, KKA, KKU, KKL) + ENDIF ! ! special case near the ground ( uncentred gradient ) - IF (LHARAT) THEN - ZFLXZ(:,:,IKB) = PLMF(:,:,IKB) & - * PLEPSF(:,:,IKB) & - *( PEXPL * & - ( ZCOEFF(:,:,IKB+2*KKL)*PRM(:,:,IKB+2*KKL,1) & - +ZCOEFF(:,:,IKB+KKL )*PRM(:,:,IKB+KKL,1 ) & - +ZCOEFF(:,:,IKB )*PRM(:,:,IKB ,1 ))**2 & - +PIMPL * & - ( ZCOEFF(:,:,IKB+2*KKL)*PRP(:,:,IKB+2*KKL) & - +ZCOEFF(:,:,IKB+KKL )*PRP(:,:,IKB+KKL ) & - +ZCOEFF(:,:,IKB )*PRP(:,:,IKB ))**2 & - ) - ELSE - ZFLXZ(:,:,IKB) = XCHV * PPSI3(:,:,IKB+KKL) * PLM(:,:,IKB) & - * PLEPS(:,:,IKB) & - *( PEXPL * & - ( ZCOEFF(:,:,IKB+2*KKL)*PRM(:,:,IKB+2*KKL,1) & - +ZCOEFF(:,:,IKB+KKL )*PRM(:,:,IKB+KKL,1 ) & - +ZCOEFF(:,:,IKB )*PRM(:,:,IKB ,1 ))**2 & - +PIMPL * & - ( ZCOEFF(:,:,IKB+2*KKL)*PRP(:,:,IKB+2*KKL) & - +ZCOEFF(:,:,IKB+KKL )*PRP(:,:,IKB+KKL ) & - +ZCOEFF(:,:,IKB )*PRP(:,:,IKB ))**2 & - ) - ENDIF + IF (LHARAT) THEN + IF (LSTATNW) THEN + ZFLXZ(:,:,IKB) = XCHV * PLMF(:,:,IKB) & + * PLEPSF(:,:,IKB) & + *( PEXPL * & + ( ZCOEFF(:,:,IKB+2*KKL)*PRM(:,:,IKB+2*KKL,1) & + +ZCOEFF(:,:,IKB+KKL )*PRM(:,:,IKB+KKL,1 ) & + +ZCOEFF(:,:,IKB )*PRM(:,:,IKB ,1 ))**2 & + +PIMPL * & + ( ZCOEFF(:,:,IKB+2*KKL)*PRP(:,:,IKB+2*KKL) & + +ZCOEFF(:,:,IKB+KKL )*PRP(:,:,IKB+KKL ) & + +ZCOEFF(:,:,IKB )*PRP(:,:,IKB ))**2 & + ) + ELSE + ZFLXZ(:,:,IKB) = PLMF(:,:,IKB) & + * PLEPSF(:,:,IKB) & + *( PEXPL * & + ( ZCOEFF(:,:,IKB+2*KKL)*PRM(:,:,IKB+2*KKL,1) & + +ZCOEFF(:,:,IKB+KKL )*PRM(:,:,IKB+KKL,1 ) & + +ZCOEFF(:,:,IKB )*PRM(:,:,IKB ,1 ))**2 & + +PIMPL * & + ( ZCOEFF(:,:,IKB+2*KKL)*PRP(:,:,IKB+2*KKL) & + +ZCOEFF(:,:,IKB+KKL )*PRP(:,:,IKB+KKL ) & + +ZCOEFF(:,:,IKB )*PRP(:,:,IKB ))**2 & + ) + ENDIF + ELSE + ZFLXZ(:,:,IKB) = XCHV * PPSI3(:,:,IKB+KKL) * PLM(:,:,IKB) & + * PLEPS(:,:,IKB) & + *( PEXPL * & + ( ZCOEFF(:,:,IKB+2*KKL)*PRM(:,:,IKB+2*KKL,1) & + +ZCOEFF(:,:,IKB+KKL )*PRM(:,:,IKB+KKL,1 ) & + +ZCOEFF(:,:,IKB )*PRM(:,:,IKB ,1 ))**2 & + +PIMPL * & + ( ZCOEFF(:,:,IKB+2*KKL)*PRP(:,:,IKB+2*KKL) & + +ZCOEFF(:,:,IKB+KKL )*PRP(:,:,IKB+KKL ) & + +ZCOEFF(:,:,IKB )*PRP(:,:,IKB ))**2 & + ) + ENDIF ! - ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) + ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) + IF (LSTATNW) THEN + !wc The variance from the budget eq should be multiplied by 2 here + ! thl'2=2*L*LEPS*(dthl/dz**2) + ZFLXZ = MAX(0., 2.*ZFLXZ) + ENDIF ! IF ( KRRL > 0 ) THEN PSIGS(:,:,:) = PSIGS(:,:,:) + PAMOIST(:,:,:) **2 * ZFLXZ(:,:,:) END IF - ! stores <Rnp Rnp> + ! stores <Rnp Rnp> IF ( OTURB_FLX .AND. TPFILE%LOPENED ) THEN TZFIELD%CMNHNAME = 'RTOT_VVAR' TZFIELD%CSTDNAME = '' @@ -826,11 +935,11 @@ ENDIF ! IF (LLES_CALL) THEN CALL SECOND_MNH(ZTIME1) - CALL LES_MEAN_SUBGRID(ZFLXZ, X_LES_SUBGRID_Rt2 ) + CALL LES_MEAN_SUBGRID(ZFLXZ, X_LES_SUBGRID_Rt2 ) CALL LES_MEAN_SUBGRID(MZF(PWM, KKA, KKU, KKL)*ZFLXZ, X_LES_RES_W_SBG_Rt2 ) - CALL LES_MEAN_SUBGRID(PEMOIST*ZFLXZ, X_LES_SUBGRID_RtThv , .TRUE. ) + CALL LES_MEAN_SUBGRID(PEMOIST*ZFLXZ, X_LES_SUBGRID_RtThv , .TRUE. ) CALL LES_MEAN_SUBGRID(-XA3*PBETA*PEMOIST*ZFLXZ, X_LES_SUBGRID_RtPz, .TRUE. ) - CALL LES_MEAN_SUBGRID(-2.*XCTD*PSQRT_TKE*ZFLXZ/PLEPS, X_LES_SUBGRID_DISS_Rt2 ) + CALL LES_MEAN_SUBGRID(-2.*XCTD*PSQRT_TKE*ZFLXZ/PLEPS, X_LES_SUBGRID_DISS_Rt2 ) CALL SECOND_MNH(ZTIME2) XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1 END IF diff --git a/src/common/turb/mode_turb_ver_thermo_flux.F90 b/src/common/turb/mode_turb_ver_thermo_flux.F90 index e8966c17f42f22b2a492a7502316d08693e6ebda..ae6faa452abe03daa215f4bcceab3935dada304d 100644 --- a/src/common/turb/mode_turb_ver_thermo_flux.F90 +++ b/src/common/turb/mode_turb_ver_thermo_flux.F90 @@ -5,7 +5,7 @@ MODULE MODE_TURB_VER_THERMO_FLUX IMPLICIT NONE CONTAINS - + SUBROUTINE TURB_VER_THERMO_FLUX(KKA,KKU,KKL,KRR,KRRL,KRRI, & OTURB_FLX,HTURBDIM,HTOM,OOCEAN, & PIMPL,PEXPL, & @@ -31,13 +31,13 @@ SUBROUTINE TURB_VER_THERMO_FLUX(KKA,KKU,KKL,KRR,KRRL,KRRI, & !! PURPOSE !! ------- ! The purpose of this routine is to compute the vertical turbulent -! fluxes of the evolutive variables and give back the source +! fluxes of the evolutive variables and give back the source ! terms to the main program. In the case of large horizontal meshes, ! the divergence of these vertical turbulent fluxes represent the whole ! effect of the turbulence but when the three-dimensionnal version of ! the turbulence scheme is activated (CTURBDIM="3DIM"), these divergences -! are completed in the next routine TURB_HOR. -! An arbitrary degree of implicitness has been implemented for the +! are completed in the next routine TURB_HOR. +! An arbitrary degree of implicitness has been implemented for the ! temporal treatment of these diffusion terms. ! The vertical boundary conditions are as follows: ! * at the bottom, the surface fluxes are prescribed at the same @@ -45,8 +45,8 @@ SUBROUTINE TURB_VER_THERMO_FLUX(KKA,KKU,KKL,KRR,KRRL,KRRI, & ! * at the top, the turbulent fluxes are set to 0. ! It should be noted that the condensation has been implicitely included ! in this turbulence scheme by using conservative variables and computing -! the subgrid variance of a statistical variable s indicating the presence -! or not of condensation in a given mesh. +! the subgrid variance of a statistical variable s indicating the presence +! or not of condensation in a given mesh. ! !!** METHOD !! ------ @@ -55,27 +55,27 @@ SUBROUTINE TURB_VER_THERMO_FLUX(KKA,KKU,KKL,KRR,KRRL,KRRI, & !! implicit scheme (a Crank-Nicholson type with coefficients different !! than 0.5), which allows to vary the degree of implicitness of the !! formulation. -!! The different prognostic variables are treated one by one. -!! The contributions of each turbulent fluxes are cumulated into the -!! tendency PRvarS, and into the dynamic and thermal production of +!! The different prognostic variables are treated one by one. +!! The contributions of each turbulent fluxes are cumulated into the +!! tendency PRvarS, and into the dynamic and thermal production of !! TKE if necessary. -!! +!! !! In section 2 and 3, the thermodynamical fields are considered. !! Only the turbulent fluxes of the conservative variables -!! (Thetal and Rnp stored in PRx(:,:,:,1)) are computed. -!! Note that the turbulent fluxes at the vertical +!! (Thetal and Rnp stored in PRx(:,:,:,1)) are computed. +!! Note that the turbulent fluxes at the vertical !! boundaries are given either by the soil scheme for the surface one -!! ( at the same instant as the others fluxes) and equal to 0 at the -!! top of the model. The thermal production is computed by vertically +!! ( at the same instant as the others fluxes) and equal to 0 at the +!! top of the model. The thermal production is computed by vertically !! averaging the turbulent flux and multiply this flux at the mass point by !! a function ETHETA or EMOIST, which preform the transformation from the -!! conservative variables to the virtual potential temperature. -!! +!! conservative variables to the virtual potential temperature. +!! !! In section 4, the variance of the statistical variable -!! s indicating presence or not of condensation, is determined in function +!! s indicating presence or not of condensation, is determined in function !! of the turbulent moments of the conservative variables and its -!! squarred root is stored in PSIGS. This information will be completed in -!! the horizontal turbulence if the turbulence dimensionality is not +!! squarred root is stored in PSIGS. This information will be completed in +!! the horizontal turbulence if the turbulence dimensionality is not !! equal to "1DIM". !! !! In section 5, the x component of the stress tensor is computed. @@ -86,53 +86,53 @@ SUBROUTINE TURB_VER_THERMO_FLUX(KKA,KKU,KKL,KRR,KRRL,KRRI, & !! j" is also parallel to the surface and in the normal direction of !! the maximum slope !! k" is the normal to the surface -!! In order to prevent numerical instability, the implicit scheme has -!! been extended to the surface flux regarding to its dependence in -!! function of U. The dependence in function of the other components +!! In order to prevent numerical instability, the implicit scheme has +!! been extended to the surface flux regarding to its dependence in +!! function of U. The dependence in function of the other components !! introduced by the different rotations is only explicit. -!! The turbulent fluxes are used to compute the dynamic production of +!! The turbulent fluxes are used to compute the dynamic production of !! TKE. For the last TKE level ( located at PDZZ(:,:,IKB)/2 from the -!! ground), an harmonic extrapolation from the dynamic production at +!! ground), an harmonic extrapolation from the dynamic production at !! PDZZ(:,:,IKB) is used to avoid an evaluation of the gradient of U !! in the surface layer. !! !! In section 6, the same steps are repeated but for the y direction -!! and in section 7, a diagnostic computation of the W variance is +!! and in section 7, a diagnostic computation of the W variance is !! performed. !! -!! In section 8, the turbulent fluxes for the scalar variables are +!! In section 8, the turbulent fluxes for the scalar variables are !! computed by the same way as the conservative thermodynamical variables !! -!! +!! !! EXTERNAL !! -------- -!! GX_U_M, GY_V_M, GZ_W_M : cartesian gradient operators +!! GX_U_M, GY_V_M, GZ_W_M : cartesian gradient operators !! GX_U_UW,GY_V_VW (X,Y,Z) represent the direction of the gradient -!! _(M,U,...)_ represent the localization of the +!! _(M,U,...)_ represent the localization of the !! field to be derivated -!! _(M,UW,...) represent the localization of the +!! _(M,UW,...) represent the localization of the !! field derivated -!! +!! !! !! MXM,MXF,MYM,MYF,MZM,MZF -!! : Shuman functions (mean operators) +!! : Shuman functions (mean operators) !! DXF,DYF,DZF,DZM -!! : Shuman functions (difference operators) -!! -!! SUBROUTINE TRIDIAG : to compute the split implicit evolution +!! : Shuman functions (difference operators) +!! +!! SUBROUTINE TRIDIAG : to compute the splitted implicit evolution !! of a variable located at a mass point !! -!! SUBROUTINE TRIDIAG_WIND: to compute the split implicit evolution +!! SUBROUTINE TRIDIAG_WIND: to compute the splitted implicit evolution !! of a variable located at a wind point !! -!! FUNCTIONs ETHETA and EMOIST : +!! FUNCTIONs ETHETA and EMOIST : !! allows to compute: !! - the coefficients for the turbulent correlation between -!! any variable and the virtual potential temperature, of its -!! correlations with the conservative potential temperature and +!! any variable and the virtual potential temperature, of its +!! correlations with the conservative potential temperature and !! the humidity conservative variable: !! ------- ------- ------- -!! A' Thv' = ETHETA A' Thl' + EMOIST A' Rnp' +!! A' Thv' = ETHETA A' Thl' + EMOIST A' Rnp' !! !! !! IMPLICIT ARGUMENTS @@ -166,34 +166,34 @@ SUBROUTINE TURB_VER_THERMO_FLUX(KKA,KKU,KKL,KRR,KRRL,KRRI, & !! MODIFICATIONS !! ------------- !! Original August 19, 1994 -!! Modifications: February 14, 1995 (J.Cuxart and J.Stein) +!! Modifications: February 14, 1995 (J.Cuxart and J.Stein) !! Doctorization and Optimization -!! Modifications: March 21, 1995 (J.M. Carriere) +!! Modifications: March 21, 1995 (J.M. Carriere) !! Introduction of cloud water -!! Modifications: June 14, 1995 (J.Cuxart and J. Stein) +!! Modifications: June 14, 1995 (J.Cuxart and J. Stein) !! Phi3 and Psi3 at w-point + bug in the all -!! or nothing condens. -!! Modifications: Sept 15, 1995 (J.Cuxart and J. Stein) +!! or nothing condens. +!! Modifications: Sept 15, 1995 (J.Cuxart and J. Stein) !! Change the DP computation at the ground -!! Modifications: October 10, 1995 (J.Cuxart and J. Stein) +!! Modifications: October 10, 1995 (J.Cuxart and J. Stein) !! Psi for scal var and LES tools !! Modifications: November 10, 1995 (J. Stein) -!! change the surface relations +!! change the surface relations !! Modifications: February 20, 1995 (J. Stein) optimization -!! Modifications: May 21, 1996 (J. Stein) -!! bug in the vertical flux of the V wind +!! Modifications: May 21, 1996 (J. Stein) +!! bug in the vertical flux of the V wind !! component for explicit computation -!! Modifications: May 21, 1996 (N. wood) +!! Modifications: May 21, 1996 (N. wood) !! modify the computation of the vertical !! part or the surface tangential flux !! Modifications: May 21, 1996 (P. Jabouille) !! same modification in the Y direction -!! +!! !! Modifications: Sept 17, 1996 (J. Stein) change the moist case by using !! Pi instead of Piref + use Atheta and Amoist !! -!! Modifications: Nov 24, 1997 (V. Masson) removes the DO loops -!! Modifications: Mar 31, 1998 (V. Masson) splits the routine TURB_VER_THERMO_FLUX +!! Modifications: Nov 24, 1997 (V. Masson) removes the DO loops +!! Modifications: Mar 31, 1998 (V. Masson) splits the routine TURB_VER_THERMO_FLUX !! Modifications: Oct 18, 2000 (V. Masson) LES computations !! Modifications: Dec 01, 2000 (V. Masson) conservation of energy from !! surface flux in 1DIM case @@ -216,11 +216,13 @@ SUBROUTINE TURB_VER_THERMO_FLUX(KKA,KKU,KKL,KRR,KRRL,KRRI, & !! applied to vertical fluxes of r_np and Thl !! for implicit version of turbulence scheme !! corrections and cleaning +!! Modifications: June 2019 (Wim de Rooy) with energycascade, 50MF nog +!! longer necessary !! June 2020 (B. Vie) Patch preventing negative rc and ri in 2.3 and 3.3 !! JL Redelsperger : 03/2021: Ocean and Autocoupling O-A LES Cases !! Sfc flux shape for LDEEPOC Case !!-------------------------------------------------------------------------- -! +! !* 0. DECLARATIONS ! ------------ ! @@ -239,7 +241,6 @@ USE MODD_TURB_n, ONLY: LHGRAD, XCOEFHGRADTHL, XCOEFHGRADRM, XALTHGRAD, X USE MODD_CONF USE MODD_LES USE MODD_OCEANH -USE MODD_REF, ONLY: LCOUPLES USE MODD_TURB_n ! USE MODI_GRADIENT_U @@ -263,7 +264,7 @@ IMPLICIT NONE ! ! ! -INTEGER, INTENT(IN) :: KKA !near ground array index +INTEGER, INTENT(IN) :: KKA !near ground array index INTEGER, INTENT(IN) :: KKU !uppest atmosphere array index INTEGER, INTENT(IN) :: KKL !vert. levels type 1=MNH -1=ARO INTEGER, INTENT(IN) :: KRR ! number of moist var. @@ -287,32 +288,32 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! altitudes ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! dry density * grid volum REAL, DIMENSION(:,:,:), INTENT(IN) :: MFMOIST ! moist mass flux dual scheme -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHVREF ! ref. state Virtual - ! Potential Temperature +REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHVREF ! ref. state Virtual + ! Potential Temperature ! REAL, DIMENSION(:,:), INTENT(IN) :: PSFTHM,PSFRM ! surface fluxes at time -! ! t - deltat +! ! t - deltat ! REAL, DIMENSION(:,:), INTENT(IN) :: PSFTHP,PSFRP ! surface fluxes at time -! ! t + deltat +! ! t + deltat ! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PWM +REAL, DIMENSION(:,:,:), INTENT(IN) :: PWM ! Vertical wind -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHLM +REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHLM ! potential temperature at t-Delta t -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRM ! Mixing ratios +REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRM ! Mixing ratios ! at t-Delta t -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVM ! Mixing ratios +REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVM ! Mixing ratios ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKEM ! TKE at time t ! ! In case LHARAT=TRUE, PLM already includes all stability corrections -REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM ! Turb. mixing length -REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS ! dissipative length +REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM ! Turb. mixing length +REAL, DIMENSION(:,:,:), INTENT(IN) :: PLEPS ! dissipative length REAL, DIMENSION(:,:,:), INTENT(IN) :: PLOCPEXNM ! Lv(T)/Cp/Exnref at time t-1 -REAL, DIMENSION(:,:,:), INTENT(IN) :: PATHETA ! coefficients between +REAL, DIMENSION(:,:,:), INTENT(IN) :: PATHETA ! coefficients between REAL, DIMENSION(:,:,:), INTENT(IN) :: PAMOIST ! s and Thetal and Rnp -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSRCM ! normalized +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSRCM ! normalized ! 2nd-order flux s'r'c/2Sigma_s2 at t-1 multiplied by Lambda_3 REAL, DIMENSION(:,:,:), INTENT(IN) :: PFRAC_ICE ! ri fraction of rc+ri REAL, DIMENSION(:,:,:), INTENT(IN) :: PBETA ! buoyancy coefficient @@ -372,8 +373,8 @@ REAL,DIMENSION(SIZE(XZS,1),SIZE(XZS,2),KKU) :: ZALT INTEGER :: IKB,IKE ! I index values for the Beginning and End ! mass points of the domain in the 3 direct. INTEGER :: IKT ! array size in k direction -INTEGER :: IKTB,IKTE ! start, end of k loops in physical domain -INTEGER :: JI, JJ ! loop indexes +INTEGER :: IKTB,IKTE ! start, end of k loops in physical domain +INTEGER :: JI, JJ ! loop indexes ! INTEGER :: IIB,IJB ! Lower bounds of the physical ! sub-domain in x and y directions @@ -404,23 +405,24 @@ TYPE(TFIELDDATA) :: TZFIELD REAL(KIND=JPRB) :: ZHOOK_HANDLE IF (LHOOK) CALL DR_HOOK('TURB_VER_THERMO_FLUX',0,ZHOOK_HANDLE) ! -! Size for a given proc & a given model -IIU=SIZE(PTHLM,1) +! Size for a given proc & a given model +IIU=SIZE(PTHLM,1) IJU=SIZE(PTHLM,2) -IKT =SIZE(PTHLM,3) -IKTE =IKT-JPVEXT_TURB -IKTB =1+JPVEXT_TURB +IKT =SIZE(PTHLM,3) +IKTE =IKT-JPVEXT_TURB +IKTB =1+JPVEXT_TURB IKB=KKA+JPVEXT_TURB*KKL IKE=KKU-JPVEXT_TURB*KKL ! GUSERV = (KRR/=0) ! -! compute the coefficients for the uncentred gradient computation near the -! ground +! compute the coefficients for the uncentred gradient computation near the ground ! IF (LHARAT) THEN -! LHARAT so TKE and length scales at half levels! - ZKEFF(:,:,:) = PLM(:,:,:) * SQRT(PTKEM(:,:,:)) +50.*MFMOIST(:,:,:) + ! LHARAT so TKE and length scales at half levels! + !wc 50MF can be omitted with energy cascade included + !ZKEFF(:,:,:) = PLM(:,:,:) * SQRT(PTKEM(:,:,:)) +50.*MFMOIST(:,:,:) + ZKEFF(:,:,:) = PLM(:,:,:) * SQRT(PTKEM(:,:,:)) ELSE ZKEFF(:,:,:) = MZM(PLM(:,:,:) * SQRT(PTKEM(:,:,:)), KKA, KKU, KKL) ENDIF @@ -454,8 +456,8 @@ IF (HTOM/='NONE') THEN END IF !---------------------------------------------------------------------------- ! -!* 2. SOURCES OF CONSERVATIVE POTENTIAL TEMPERATURE AND -! PARTIAL THERMAL PRODUCTION +!* 2. SOURCES OF CONSERVATIVE POTENTIAL TEMPERATURE AND +! PARTIAL THERMAL PRODUCTION ! --------------------------------------------------------------- ! !* 2.1 Splitted value for cons. potential temperature at t+deltat @@ -525,18 +527,10 @@ IF (GFTHR) THEN ZDFDDTDZ = ZDFDDTDZ + D_M3_WTH_WTHR_O_DDTDZ(Z3RDMOMENT,PREDTH1,& & PREDR1,PD,PBLL_O_E,PETHETA) * MZM(PFTHR, KKA, KKU, KKL) END IF -! compute interface flux -IF (LCOUPLES) THEN ! Autocoupling O-A LES - IF (OOCEAN) THEN ! ocean model in coupled case - ZF(:,:,IKE) = (XSSTFL_C(:,:,1)+XSSRFL_C(:,:,1)) & - *0.5* ( 1. + PRHODJ(:,:,KKU)/PRHODJ(:,:,IKE) ) - ELSE ! atmosph model in coupled case - ZF(:,:,IKB) = XSSTFL_C(:,:,1) & - *0.5* ( 1. + PRHODJ(:,:,KKA)/PRHODJ(:,:,IKB) ) - ENDIF -! -ELSE ! No coupling O and A cases - ! atmosp bottom +! specialcase for surface +IF (OOCEAN) THEN ! ocean sfc (domain top) + ZF(:,:,IKE+1) = PSFTHM(:,:) *0.5*(1. + PRHODJ(:,:,KKU) / PRHODJ(:,:,IKE)) +ELSE ! atmosp bottom !*In 3D, a part of the flux goes vertically, ! and another goes horizontally (in presence of slopes) !*In 1D, part of energy released in horizontal flux is taken into account in the vertical part @@ -549,17 +543,14 @@ ELSE ! No coupling O and A cases / PDIRCOSZW(:,:) & * 0.5 * (1. + PRHODJ(:,:,KKA) / PRHODJ(:,:,IKB)) END IF -! - IF (OOCEAN) THEN - ZF(:,:,IKE) = XSSTFL(:,:) *0.5*(1. + PRHODJ(:,:,KKU) / PRHODJ(:,:,IKE)) - ELSE !end ocean case (in nocoupled case) ! atmos top #ifdef REPRO48 #else ZF(:,:,IKE)=0. + !TODO merge : the following solution must be kept : + !ZF(:,:,IKE+1)=0. #endif END IF -END IF !end no coupled cases ! ! Compute the split conservative potential temperature at t+deltat CALL TRIDIAG_THERMO(KKA,KKU,KKL,PTHLM,ZF,ZDFDDTDZ,PTSTEP,PIMPL,PDZZ,& @@ -583,7 +574,7 @@ PRTHLS(:,:,:)= PRTHLS(:,:,:) + ZRWTHL(:,:,:) ! !* 2.2 Partial Thermal Production ! -! Conservative potential temperature flux : +! Conservative potential temperature flux : ! ZFLXZ(:,:,:) = ZF & + PIMPL * ZDFDDTDZ * DZM(PTHLP - PTHLM, KKA, KKU, KKL) / PDZZ @@ -594,21 +585,22 @@ IF (LHGRAD) THEN END WHERE END IF ! -ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) IF (OOCEAN) THEN - ZFLXZ(:,:,KKU) = ZFLXZ(:,:,IKE) + ZFLXZ(:,:,IKE+1) = ZFLXZ(:,:,IKE) +ELSE ! ATMOS + ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) END IF -! +! DO JK=IKTB+1,IKTE-1 PWTH(:,:,JK)=0.5*(ZFLXZ(:,:,JK)+ZFLXZ(:,:,JK+KKL)) END DO ! -PWTH(:,:,IKB)=0.5*(ZFLXZ(:,:,IKB)+ZFLXZ(:,:,IKB+KKL)) +PWTH(:,:,IKB)=0.5*(ZFLXZ(:,:,IKB)+ZFLXZ(:,:,IKB+KKL)) ! IF (OOCEAN) THEN PWTH(:,:,IKE)=0.5*(ZFLXZ(:,:,IKE)+ZFLXZ(:,:,IKE+KKL)) PWTH(:,:,KKA)=0. - PWTH(:,:,KKU)=ZFLXZ(:,:,KKU) + PWTH(:,:,KKU)=PWTH(:,:,IKE)! not used ELSE PWTH(:,:,KKA)=0.5*(ZFLXZ(:,:,KKA)+ZFLXZ(:,:,KKA+KKL)) PWTH(:,:,IKE)=PWTH(:,:,IKE-KKL) @@ -640,19 +632,19 @@ ELSE ELSE PTP(:,:,:)= PBETA * MZF( ZFLXZ,KKA, KKU, KKL ) END IF -END IF +END IF ! ! Buoyancy flux at flux points -! +! PWTHV = MZM(PETHETA, KKA, KKU, KKL) * ZFLXZ PWTHV(:,:,IKB) = PETHETA(:,:,IKB) * ZFLXZ(:,:,IKB) ! IF (OOCEAN) THEN - ! temperature contribution to Buy flux + ! temperature contribution to Buy flux PWTHV(:,:,IKE) = PETHETA(:,:,IKE) * ZFLXZ(:,:,IKE) END IF !* 2.3 Partial vertical divergence of the < Rc w > flux -! Correction for qc and qi negative in AROME +! Correction for qc and qi negative in AROME IF(CPROGRAM/='AROME ') THEN IF ( KRRL >= 1 ) THEN IF ( KRRI >= 1 ) THEN @@ -670,16 +662,16 @@ IF(CPROGRAM/='AROME ') THEN END IF ! !* 2.4 Storage in LES configuration -! +! IF (LLES_CALL) THEN CALL SECOND_MNH(ZTIME1) - CALL LES_MEAN_SUBGRID(MZF(ZFLXZ, KKA, KKU, KKL), X_LES_SUBGRID_WThl ) + CALL LES_MEAN_SUBGRID(MZF(ZFLXZ, KKA, KKU, KKL), X_LES_SUBGRID_WThl ) CALL LES_MEAN_SUBGRID(MZF(PWM*ZFLXZ, KKA, KKU, KKL), X_LES_RES_W_SBG_WThl ) CALL LES_MEAN_SUBGRID(GZ_W_M(PWM,PDZZ, KKA, KKU, KKL)*MZF(ZFLXZ, KKA, KKU, KKL),& & X_LES_RES_ddxa_W_SBG_UaThl ) CALL LES_MEAN_SUBGRID(MZF(PDTH_DZ*ZFLXZ, KKA, KKU, KKL), X_LES_RES_ddxa_Thl_SBG_UaThl ) - CALL LES_MEAN_SUBGRID(-XCTP*PSQRT_TKE/PLM*MZF(ZFLXZ, KKA, KKU, KKL), X_LES_SUBGRID_ThlPz ) - CALL LES_MEAN_SUBGRID(MZF(MZM(PETHETA, KKA, KKU, KKL)*ZFLXZ, KKA, KKU, KKL), X_LES_SUBGRID_WThv ) + CALL LES_MEAN_SUBGRID(-XCTP*PSQRT_TKE/PLM*MZF(ZFLXZ, KKA, KKU, KKL), X_LES_SUBGRID_ThlPz ) + CALL LES_MEAN_SUBGRID(MZF(MZM(PETHETA, KKA, KKU, KKL)*ZFLXZ, KKA, KKU, KKL), X_LES_SUBGRID_WThv ) IF (KRR>=1) THEN CALL LES_MEAN_SUBGRID(MZF(PDR_DZ*ZFLXZ, KKA, KKU, KKL), X_LES_RES_ddxa_Rt_SBG_UaThl ) END IF @@ -690,21 +682,21 @@ IF (LLES_CALL) THEN ZA(:,:,IKB) = XCSHF*PPHI3(:,:,IKB)*ZKEFF(:,:,IKB) ZA = MZF(ZA, KKA, KKU, KKL) ZA = MIN(MAX(ZA,-1000.),1000.) - CALL LES_MEAN_SUBGRID( ZA, X_LES_SUBGRID_Kh ) + CALL LES_MEAN_SUBGRID( ZA, X_LES_SUBGRID_Kh ) ! CALL SECOND_MNH(ZTIME2) XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1 END IF ! !* 2.5 New boundary layer depth for TOMs -! +! IF (HTOM=='TM06') CALL TM06_H(IKB,IKTB,IKTE,PTSTEP,PZZ,ZFLXZ,PBL_DEPTH) ! !---------------------------------------------------------------------------- ! ! -!* 3. SOURCES OF CONSERVATIVE AND CLOUD MIXING RATIO AND -! COMPLETE THERMAL PRODUCTION +!* 3. SOURCES OF CONSERVATIVE AND CLOUD MIXING RATIO AND +! COMPLETE THERMAL PRODUCTION ! ------------------------------------------------------ ! !* 3.1 Splitted value for cons. mixing ratio at t+deltat @@ -755,7 +747,7 @@ IF (KRR /= 0) THEN IF (GFWTH) THEN ZF = ZF + M3_WR_W2TH(KKA,KKU,KKL,PD,ZKEFF,& & PTKEM,PBLL_O_E,PETHETA,PDR_DZ) * PFWTH - ZDFDDRDZ = ZDFDDRDZ + D_M3_WR_W2TH_O_DDRDZ(KKA,KKU,KKL,PREDR1,PREDTH1,& + ZDFDDRDZ = ZDFDDRDZ + D_M3_WR_W2TH_O_DDRDZ(KKA,KKU,KKL,PREDR1,PREDTH1,& & PD,ZKEFF,PTKEM,PBLL_O_E,PETHETA) * PFWTH END IF ! @@ -777,17 +769,12 @@ IF (KRR /= 0) THEN & PREDTH1,PD,PBLL_O_E,PEMOIST) * MZM(PFTHR, KKA, KKU, KKL) END IF ! - ! compute interface flux - IF (LCOUPLES) THEN ! coupling NH O-A - IF (OOCEAN) THEN ! ocean model in coupled case - ! evap effect on salinity to be added later !!! - ZF(:,:,IKE) = 0. - ELSE ! atmosph model in coupled case - ZF(:,:,IKB) = 0. - ! AJOUTER FLUX EVAP SUR MODELE ATMOS - ENDIF - ! - ELSE ! No coupling NH OA case + !special case at sfc + IF (OOCEAN) THEN + ! General ocean case + ! salinity/evap effect to be added later !!!!! + ZF(:,:,IKE) = 0. + ELSE ! atmosp case ! atmosp bottom !* in 3DIM case, a part of the flux goes vertically, and another goes horizontally ! (in presence of slopes) @@ -803,19 +790,12 @@ IF (KRR /= 0) THEN / PDIRCOSZW(:,:) & * 0.5 * (1. + PRHODJ(:,:,KKA) / PRHODJ(:,:,IKB)) END IF - ! - IF (OOCEAN) THEN - ! General ocean case - ! salinity/evap effect to be added later !!!!! - ZF(:,:,IKE) = 0. - ELSE !end ocean case (in nocoupled case) ! atmos top #ifdef REPRO48 #else ZF(:,:,IKE)=0. #endif END IF - END IF!end no coupled cases ! Compute the split conservative potential temperature at t+deltat CALL TRIDIAG_THERMO(KKA,KKU,KKL,PRM(:,:,:,1),ZF,ZDFDDRDZ,PTSTEP,PIMPL,& PDZZ,PRHODJ,PRP) @@ -841,7 +821,7 @@ IF (KRR /= 0) THEN ! cons. mixing ratio flux : ! ZFLXZ(:,:,:) = ZF & - + PIMPL * ZDFDDRDZ * DZM(PRP - PRM(:,:,:,1), KKA, KKU, KKL) / PDZZ + + PIMPL * ZDFDDRDZ * DZM(PRP - PRM(:,:,:,1), KKA, KKU, KKL) / PDZZ ! ! replace the flux by the Leonard terms above ZALT and ZCLD_THOLD IF (LHGRAD) THEN @@ -850,15 +830,25 @@ IF (KRR /= 0) THEN END WHERE END IF ! - ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) + ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) + ! + IF (OOCEAN) THEN + ZFLXZ(:,:,KKU) = ZFLXZ(:,:,IKE) + END IF ! DO JK=IKTB+1,IKTE-1 PWRC(:,:,JK)=0.5*(ZFLXZ(:,:,JK)+ZFLXZ(:,:,JK+KKL)) END DO PWRC(:,:,IKB)=0.5*(ZFLXZ(:,:,IKB)+ZFLXZ(:,:,IKB+KKL)) - PWRC(:,:,KKA)=0.5*(ZFLXZ(:,:,KKA)+ZFLXZ(:,:,KKA+KKL)) - PWRC(:,:,IKE)=PWRC(:,:,IKE-KKL) ! + IF (OOCEAN) THEN + PWRC(:,:,IKE)=0.5*(ZFLXZ(:,:,IKE)+ZFLXZ(:,:,IKE+KKL)) + PWRC(:,:,KKA)=0. + PWRC(:,:,IKE+1)=ZFLXZ(:,:,IKE+1) + ELSE + PWRC(:,:,KKA)=0.5*(ZFLXZ(:,:,KKA)+ZFLXZ(:,:,KKA+KKL)) + PWRC(:,:,IKE)=PWRC(:,:,IKE-KKL) + ENDIF ! IF ( OTURB_FLX .AND. TPFILE%LOPENED ) THEN ! stores the conservative mixing ratio vertical flux @@ -886,12 +876,12 @@ IF (KRR /= 0) THEN END IF ! ! Buoyancy flux at flux points - ! + ! PWTHV = PWTHV + MZM(PEMOIST, KKA, KKU, KKL) * ZFLXZ PWTHV(:,:,IKB) = PWTHV(:,:,IKB) + PEMOIST(:,:,IKB) * ZFLXZ(:,:,IKB) IF (OOCEAN) THEN PWTHV(:,:,IKE) = PWTHV(:,:,IKE) + PEMOIST(:,:,IKE)* ZFLXZ(:,:,IKE) - END IF + END IF ! !* 3.3 Complete vertical divergence of the < Rc w > flux ! Correction of qc and qi negative for AROME @@ -912,17 +902,17 @@ IF(CPROGRAM/='AROME ') THEN END IF ! !* 3.4 Storage in LES configuration -! +! IF (LLES_CALL) THEN CALL SECOND_MNH(ZTIME1) - CALL LES_MEAN_SUBGRID(MZF(ZFLXZ, KKA, KKU, KKL), X_LES_SUBGRID_WRt ) + CALL LES_MEAN_SUBGRID(MZF(ZFLXZ, KKA, KKU, KKL), X_LES_SUBGRID_WRt ) CALL LES_MEAN_SUBGRID(MZF(PWM*ZFLXZ, KKA, KKU, KKL), X_LES_RES_W_SBG_WRt ) CALL LES_MEAN_SUBGRID(GZ_W_M(PWM,PDZZ, KKA, KKU, KKL)*MZF(ZFLXZ, KKA, KKU, KKL),& & X_LES_RES_ddxa_W_SBG_UaRt ) CALL LES_MEAN_SUBGRID(MZF(PDTH_DZ*ZFLXZ, KKA, KKU, KKL), X_LES_RES_ddxa_Thl_SBG_UaRt ) CALL LES_MEAN_SUBGRID(MZF(PDR_DZ*ZFLXZ, KKA, KKU, KKL), X_LES_RES_ddxa_Rt_SBG_UaRt ) - CALL LES_MEAN_SUBGRID(MZF(MZM(PEMOIST, KKA, KKU, KKL)*ZFLXZ, KKA, KKU, KKL), X_LES_SUBGRID_WThv , .TRUE. ) - CALL LES_MEAN_SUBGRID(-XCTP*PSQRT_TKE/PLM*MZF(ZFLXZ, KKA, KKU, KKL), X_LES_SUBGRID_RtPz ) + CALL LES_MEAN_SUBGRID(MZF(MZM(PEMOIST, KKA, KKU, KKL)*ZFLXZ, KKA, KKU, KKL), X_LES_SUBGRID_WThv , .TRUE. ) + CALL LES_MEAN_SUBGRID(-XCTP*PSQRT_TKE/PLM*MZF(ZFLXZ, KKA, KKU, KKL), X_LES_SUBGRID_RtPz ) CALL SECOND_MNH(ZTIME2) XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1 END IF @@ -936,28 +926,28 @@ END IF ! ------------------------------- ! ! -!* 4.1 <w Rc> +!* 4.1 <w Rc> ! IF ( ((OTURB_FLX .AND. TPFILE%LOPENED) .OR. LLES_CALL) .AND. (KRRL > 0) ) THEN -! -! recover the Conservative potential temperature flux : +! +! recover the Conservative potential temperature flux : ! With LHARAT is true tke and length scales at half levels ! yet modify to use length scale and tke at half levels from vdfexcuhl IF (LHARAT) THEN ZA(:,:,:) = DZM(PIMPL * PTHLP + PEXPL * PTHLM, KKA, KKU, KKL) / PDZZ * & - (-PLM*PSQRT_TKE) + (-PLM*PSQRT_TKE) ELSE ZA(:,:,:) = DZM(PIMPL * PTHLP + PEXPL * PTHLM, KKA, KKU, KKL) / PDZZ * & - (-PPHI3*MZM(PLM*PSQRT_TKE, KKA, KKU, KKL)) * XCSHF + (-PPHI3*MZM(PLM*PSQRT_TKE, KKA, KKU, KKL)) * XCSHF ENDIF ZA(:,:,IKB) = ( PIMPL*PSFTHP(:,:) + PEXPL*PSFTHM(:,:) ) & * PDIRCOSZW(:,:) - ! + ! ! compute <w Rc> ZFLXZ(:,:,:) = MZM(PAMOIST * 2.* PSRCM, KKA, KKU, KKL) * ZFLXZ(:,:,:) + & MZM(PATHETA * 2.* PSRCM, KKA, KKU, KKL) * ZA(:,:,:) - ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) - ! + ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) + ! ! store the liquid water mixing ratio vertical flux IF ( OTURB_FLX .AND. TPFILE%LOPENED ) THEN TZFIELD%CMNHNAME = 'RCW_FLX' @@ -972,12 +962,12 @@ IF ( ((OTURB_FLX .AND. TPFILE%LOPENED) .OR. LLES_CALL) .AND. (KRRL > 0) ) THEN TZFIELD%LTIMEDEP = .TRUE. CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZ) END IF - ! + ! ! and we store in LES configuration this subgrid flux <w'rc'> ! IF (LLES_CALL) THEN CALL SECOND_MNH(ZTIME1) - CALL LES_MEAN_SUBGRID( MZF(ZFLXZ, KKA, KKU, KKL), X_LES_SUBGRID_WRc ) + CALL LES_MEAN_SUBGRID( MZF(ZFLXZ, KKA, KKU, KKL), X_LES_SUBGRID_WRc ) CALL SECOND_MNH(ZTIME2) XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1 END IF diff --git a/src/common/turb/turb.F90 b/src/common/turb/turb.F90 index f66202783fd688fb91f30dedf586653e4e546d11..ace7ca393fe23c64b35fe4fea93090cee9c6cd75 100644 --- a/src/common/turb/turb.F90 +++ b/src/common/turb/turb.F90 @@ -24,26 +24,26 @@ & PEDR,PLEM,PRTKEMS,PTPMF, & & PDRUS_TURB,PDRVS_TURB, & & PDRTHLS_TURB,PDRRTS_TURB,PDRSVS_TURB,PTR,PDISS, & - & PCURRENT_TKE_DISS ) + & PCURRENT_TKE_DISS ) ! ################################################################# ! ! !!**** *TURB* - computes the turbulent source terms for the prognostic -!! variables. +!! variables. !! !! PURPOSE !! ------- -!!**** The purpose of this routine is to compute the source terms in -!! the evolution equations due to the turbulent mixing. +!!**** The purpose of this routine is to compute the source terms in +!! the evolution equations due to the turbulent mixing. !! The source term is computed as the divergence of the turbulent fluxes. !! The cartesian fluxes are obtained by a one and a half order closure, based -!! on a prognostic equation for the Turbulence Kinetic Energy( TKE ). The -!! system is closed by prescribing a turbulent mixing length. Different -!! choices are available for this length. +!! on a prognostic equation for the Turbulence Kinetic Energy( TKE ). The +!! system is closed by prescribing a turbulent mixing length. Different +!! choices are available for this length. ! !!** METHOD !! ------ -!! +!! !! The dimensionality of the turbulence parameterization can be chosen by !! means of the parameter HTURBDIM: !! * HTURBDIM='1DIM' the parameterization is 1D but can be used in @@ -51,7 +51,7 @@ !! turbulent fluxes are taken into account. !! * HTURBDIM='3DIM' the parameterization is fully 2D or 3D depending !! on the model dimensionality. Of course, it does not make any sense to -!! activate this option with a 1D model. +!! activate this option with a 1D model. !! !! The following steps are made: !! 1- Preliminary computations. @@ -62,39 +62,39 @@ !! original level of an air particule having an initial internal !! energy equal to its TKE and stopped by the buoyancy forces. !! The discrete formulation is second order accurate. -!! * HTURBLEN='DELT' the mixing length is given by the mesh size -!! depending on the model dimensionality, this length is limited +!! * HTURBLEN='DELT' the mixing length is given by the mesh size +!! depending on the model dimensionality, this length is limited !! with the ground distance. -!! * HTURBLEN='DEAR' the mixing length is given by the mesh size -!! depending on the model dimensionality, this length is limited +!! * HTURBLEN='DEAR' the mixing length is given by the mesh size +!! depending on the model dimensionality, this length is limited !! with the ground distance and also by the Deardorff mixing length !! pertinent in the stable cases. -!! * HTURBLEN='KEPS' the mixing length is deduced from the TKE +!! * HTURBLEN='KEPS' the mixing length is deduced from the TKE !! dissipation, which becomes a prognostic variable of the model ( -!! Duynkerke formulation). +!! Duynkerke formulation). !! 3'- The cloud mixing length is computed according to HTURBLEN_CLOUD !! and emphasized following the CEI index !! 4- The conservative variables are computed along with Lv/Cp. !! 5- The turbulent Prandtl numbers are computed from the resolved fields -!! and TKE +!! and TKE !! 6- The sources associated to the vertical turbulent fluxes are computed -!! with a temporal scheme allowing a degree of implicitness given by +!! with a temporal scheme allowing a degree of implicitness given by !! PIMPL, varying from PIMPL=0. ( purely explicit scheme) to PIMPL=1. !! ( purely implicit scheme) !! The sources associated to the horizontal fluxes are computed with a !! purely explicit temporal scheme. These sources are only computed when !! the turbulence parameterization is 2D or 3D( HTURBDIM='3DIM' ). -!! 7- The sources for TKE are computed, along with the dissipation of TKE +!! 7- The sources for TKE are computed, along with the dissipation of TKE !! if HTURBLEN='KEPS'. -!! 8- Some turbulence-related quantities are stored in the synchronous +!! 8- Some turbulence-related quantities are stored in the synchronous !! FM-file. -!! 9- The non-conservative variables are retrieved. -!! -!! +!! 9- The non-conservative variables are retrieved. +!! +!! !! The saving of the fields in the synchronous FM-file is controlled by: !! * OTURB_FLX => saves all the turbulent fluxes and correlations !! * OTURB_DIAG=> saves the turbulent Prandtl and Schmidt numbers, the -!! source terms of TKE and dissipation of TKE +!! source terms of TKE and dissipation of TKE !! !! EXTERNAL !! -------- @@ -121,24 +121,24 @@ !! !! MODD_CTURB : contains turbulence scheme constants !! XCMFS,XCED to compute the dissipation mixing length -!! XTKEMIN minimum values for the TKE -!! XLINI,XLINF to compute Bougeault-Lacarrere mixing +!! XTKEMIN minimum values for the TKE +!! XLINI,XLINF to compute Bougeault-Lacarrere mixing !! length !! Module MODD_BUDGET: -!! NBUMOD -!! CBUTYPE -!! LBU_RU -!! LBU_RV -!! LBU_RW -!! LBU_RTH -!! LBU_RSV1 -!! LBU_RRV -!! LBU_RRC -!! LBU_RRR -!! LBU_RRI -!! LBU_RRS -!! LBU_RRG -!! LBU_RRH +!! NBUMOD +!! CBUTYPE +!! LBU_RU +!! LBU_RV +!! LBU_RW +!! LBU_RTH +!! LBU_RSV1 +!! LBU_RRV +!! LBU_RRC +!! LBU_RRR +!! LBU_RRI +!! LBU_RRS +!! LBU_RRG +!! LBU_RRH !! !! REFERENCE !! --------- @@ -152,11 +152,11 @@ !! MODIFICATIONS !! ------------- !! Original 05/10/94 -!! Modifications: Feb 14, 1995 (J.Cuxart and J.Stein) +!! Modifications: Feb 14, 1995 (J.Cuxart and J.Stein) !! Doctorization and Optimization -!! Modifications: March 21, 1995 (J.M. Carriere) +!! Modifications: March 21, 1995 (J.M. Carriere) !! Introduction of cloud water -!! Modifications: June 1, 1995 (J.Cuxart ) +!! Modifications: June 1, 1995 (J.Cuxart ) !! take min(Kz,delta) !! Modifications: June 1, 1995 (J.Stein J.Cuxart) !! remove unnecessary arrays and change Prandtl @@ -164,18 +164,18 @@ !! Modifications: July 20, 1995 (J.Stein) remove MODI_ground_ocean + !! TZDTCUR + MODD_TIME because they are not used !! change RW in RNP for the outputs -!! Modifications: August 21, 1995 (Ph. Bougeault) +!! Modifications: August 21, 1995 (Ph. Bougeault) !! take min(K(z-zsol),delta) !! Modifications: Sept 14, 1995 (Ph Bougeault, J. Cuxart) -!! second order BL89 mixing length computations + add Deardorff length +!! second order BL89 mixing length computations + add Deardorff length !! in the Delta case for stable cases !! Modifications: Sept 19, 1995 (J. Stein, J. Cuxart) !! define a DEAR case for the mixing length, add MODI_BUDGET and change !! some BUDGET calls, add LES tools !! Modifications: Oct 16, 1995 (J. Stein) change the budget calls -!! Modifications: Feb 28, 1996 (J. Stein) optimization + +!! Modifications: Feb 28, 1996 (J. Stein) optimization + !! remove min(K(z-zsol),delta)+ -!! bug in the tangential fluxes +!! bug in the tangential fluxes !! Modifications: Oct 16, 1996 (J. Stein) change the subgrid condensation !! scheme + temporal discretization !! Modifications: Dec 19, 1996 (J.-P. Pinty) update the budget calls @@ -198,7 +198,7 @@ !! Feb 20, 2003 (J.-P. Pinty) Add reversible ice processes !! May,26 2004 (P Jabouille) coef for computing dissipative heating !! Sept 2004 (M.Tomasini) Cloud Mixing length modification -!! following the instability +!! following the instability !! criterium CEI calculated in modeln !! May 2006 Remove KEPS !! Sept.2006 (I.Sandu): Modification of the stability criterion for @@ -220,6 +220,7 @@ ! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O ! Q. Rodier 01/2018: introduction of RM17 ! P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine +!! June 2019 (Wim de Rooy) update statistical cloud scheme ! P. Wautelet 02/2020: use the new data structures and subroutines for budgets ! B. Vie 03/2020: LIMA negativity checks after turbulence, advection and microphysics budgets ! P. Wautelet 11/06/2020: bugfix: correct PRSVS array indices @@ -283,10 +284,10 @@ IMPLICIT NONE ! ! ! -INTEGER, INTENT(IN) :: KKA !near ground array index +INTEGER, INTENT(IN) :: KKA !near ground array index INTEGER, INTENT(IN) :: KKU !uppest atmosphere array index INTEGER, INTENT(IN) :: KKL !vert. levels type 1=MNH -1=ARO -INTEGER, INTENT(IN) :: KMI ! model index number +INTEGER, INTENT(IN) :: KMI ! model index number INTEGER, INTENT(IN) :: KRR ! number of moist var. INTEGER, INTENT(IN) :: KRRL ! number of liquid water var. INTEGER, INTENT(IN) :: KRRI ! number of ice water var. @@ -297,7 +298,7 @@ LOGICAL, INTENT(IN) :: OTURB_FLX ! switch to write the ! turbulent fluxes in the syncronous FM-file LOGICAL, INTENT(IN) :: OTURB_DIAG ! switch to write some ! diagnostic fields in the syncronous FM-file -LOGICAL, INTENT(IN) :: OSUBG_COND ! switch for SUBGrid +LOGICAL, INTENT(IN) :: OSUBG_COND ! switch for SUBGrid ! CONDensation LOGICAL, INTENT(IN) :: ORMC01 ! switch for RMC01 lengths in SBL LOGICAL, INTENT(IN) :: OOCEAN ! switch for Ocean model version @@ -309,12 +310,12 @@ CHARACTER(LEN=4), INTENT(IN) :: HTOM ! kind of Third Order Mome CHARACTER(LEN=4), INTENT(IN) :: HTURBLEN_CL ! kind of cloud mixing length REAL, INTENT(IN) :: PIMPL ! degree of implicitness CHARACTER (LEN=4), INTENT(IN) :: HCLOUD ! Kind of microphysical scheme -REAL, INTENT(IN) :: PTSTEP ! timestep +REAL, INTENT(IN) :: PTSTEP ! timestep TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PDXX,PDYY,PDZZ,PDZX,PDZY ! metric coefficients -REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! physical distance +REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! physical distance ! between 2 succesive grid points along the K direction REAL, DIMENSION(:,:), INTENT(IN) :: PDIRCOSXW, PDIRCOSYW, PDIRCOSZW ! Director Cosinus along x, y and z directions at surface w-point @@ -328,11 +329,11 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHVREF ! Virtual Potential ! Temperature of the reference state ! REAL, DIMENSION(:,:), INTENT(IN) :: PSFTH,PSFRV, & -! normal surface fluxes of theta and Rv +! normal surface fluxes of theta and Rv PSFU,PSFV ! normal surface fluxes of (u,v) parallel to the orography REAL, DIMENSION(:,:,:), INTENT(IN) :: PSFSV -! normal surface fluxes of Scalar var. +! normal surface fluxes of Scalar var. ! ! prognostic variables at t- deltat REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABST ! Pressure at time t @@ -346,7 +347,7 @@ REAL, DIMENSION(:,:), INTENT(INOUT) :: PSBL_DEPTH ! SBL depth for RMC01 ! ! variables for cloud mixing length REAL, DIMENSION(:,:,:), INTENT(IN) :: PCEI ! Cloud Entrainment instability - ! index to emphasize localy + ! index to emphasize localy ! turbulent fluxes REAL, INTENT(IN) :: PCEI_MIN ! minimum threshold for the instability index CEI REAL, INTENT(IN) :: PCEI_MAX ! maximum threshold for the instability index CEI @@ -354,10 +355,10 @@ REAL, INTENT(IN) :: PCOEF_AMPL_SAT ! saturation of the amplification coeff ! ! thermodynamical variables which are transformed in conservative var. REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHLT ! conservative pot. temp. -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRT ! water var. where - ! PRT(:,:,:,1) is the conservative mixing ratio +REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRT ! water var. where + ! PRT(:,:,:,1) is the conservative mixing ratio ! -! sources of momentum, conservative potential temperature, Turb. Kin. Energy, +! sources of momentum, conservative potential temperature, Turb. Kin. Energy, ! TKE dissipation REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRUS,PRVS,PRWS,PRTHLS,PRTKES ! Source terms for all water kinds, PRRS(:,:,:,1) is used for the conservative @@ -366,7 +367,7 @@ REAL, DIMENSION(:,:,:), INTENT(IN),OPTIONAL :: PRTKEMS REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRRS ! Source terms for all passive scalar variables REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRSVS -! Sigma_s at time t+1 : square root of the variance of the deviation to the +! Sigma_s at time t+1 : square root of the variance of the deviation to the ! saturation REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSIGS REAL, DIMENSION(:,:,:), INTENT(OUT),OPTIONAL :: PDRUS_TURB ! evolution of rhoJ*U by turbulence only @@ -374,7 +375,7 @@ REAL, DIMENSION(:,:,:), INTENT(OUT),OPTIONAL :: PDRVS_TURB ! evolution of REAL, DIMENSION(:,:,:), INTENT(OUT),OPTIONAL :: PDRTHLS_TURB ! evolution of rhoJ*thl by turbulence only REAL, DIMENSION(:,:,:), INTENT(OUT),OPTIONAL :: PDRRTS_TURB ! evolution of rhoJ*rt by turbulence only REAL, DIMENSION(:,:,:,:), INTENT(OUT),OPTIONAL :: PDRSVS_TURB ! evolution of rhoJ*Sv by turbulence only -REAL, DIMENSION(:,:,:), INTENT(IN) :: PFLXZTHVMF +REAL, DIMENSION(:,:,:), INTENT(IN) :: PFLXZTHVMF ! MF contribution for vert. turb. transport ! used in the buoy. prod. of TKE REAL, DIMENSION(:,:,:), INTENT(OUT) :: PWTH ! heat flux @@ -412,7 +413,7 @@ REAL, DIMENSION(SIZE(PTHLT,1),SIZE(PTHLT,2),SIZE(PTHLT,3)) :: & ZLOCPEXNM, & ! Lv/Cp/EXNREF at t-1 ZLM,ZLMW, & ! Turbulent mixing length (+ work array) ZLEPS, & ! Dissipative length - ZTRH, & ! + ZTRH, & ! ZATHETA,ZAMOIST, & ! coefficients for s = f (Thetal,Rnp) ZCOEF_DISS, & ! 1/(Cph*Exner) for dissipative heating ZFRAC_ICE, & ! ri fraction of rc+ri @@ -420,15 +421,15 @@ REAL, DIMENSION(SIZE(PTHLT,1),SIZE(PTHLT,2),SIZE(PTHLT,3)) :: & ZFWTH,ZFWR,ZFTH2,ZFR2,ZFTHR,& ! opposite of verticale derivate of 3rd order moments ZTHLM,ZRTKEMS ! initial potential temp; TKE advective source REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),SIZE(PRT,4)) :: & - ZRM ! initial mixing ratio + ZRM ! initial mixing ratio REAL, DIMENSION(SIZE(PTHLT,1),SIZE(PTHLT,2)) :: ZTAU11M,ZTAU12M, & ZTAU22M,ZTAU33M, & ! tangential surface fluxes in the axes following the orography ZUSLOPE,ZVSLOPE, & - ! wind components at the first mass level parallel - ! to the orography + ! wind components at the first mass level parallel + ! to the orography ZCDUEFF, & - ! - Cd*||u|| where ||u|| is the module of the wind tangential to + ! - Cd*||u|| where ||u|| is the module of the wind tangential to ! orography (ZUSLOPE,ZVSLOPE) at the surface. ZUSTAR, ZLMO, & ZRVM, ZSFRV @@ -436,7 +437,7 @@ REAL, DIMENSION(SIZE(PTHLT,1),SIZE(PTHLT,2)) :: ZTAU11M,ZTAU12M, & ! ! Virtual Potential Temp. used ! in the Deardorff mixing length computation -REAL, DIMENSION(:,:,:), ALLOCATABLE :: & +REAL, DIMENSION(:,:,:), ALLOCATABLE :: & ZLVOCPEXNM,ZLSOCPEXNM, & ! Lv/Cp/EXNREF and Ls/Cp/EXNREF at t-1 ZATHETA_ICE,ZAMOIST_ICE ! coefficients for s = f (Thetal,Rnp) ! @@ -446,12 +447,12 @@ REAL :: ZRVORD ! RV/RD INTEGER :: IKB,IKE ! index value for the ! Beginning and the End of the physical domain for the mass points INTEGER :: IKT ! array size in k direction -INTEGER :: IKTB,IKTE ! start, end of k loops in physical domain +INTEGER :: IKTB,IKTE ! start, end of k loops in physical domain INTEGER :: JRR,JK,JSV ! loop counters INTEGER :: JI,JJ ! loop counters REAL :: ZL0 ! Max. Mixing Length in Blakadar formula -REAL :: ZALPHA ! work coefficient : - ! - proportionnality constant between Dz/2 and +REAL :: ZALPHA ! work coefficient : + ! - proportionnality constant between Dz/2 and ! ! BL89 mixing length near the surface ! REAL :: ZTIME1, ZTIME2 @@ -461,7 +462,7 @@ TYPE(TFIELDDATA) :: TZFIELD !* 1.PRELIMINARIES ! ------------- ! -!* 1.1 Set the internal domains, ZEXPL +!* 1.1 Set the internal domains, ZEXPL ! ! REAL(KIND=JPRB) :: ZHOOK_HANDLE @@ -474,8 +475,8 @@ IF (LHARAT .AND. LLES_CALL) THEN CALL ABOR1('LHARATU not implemented for option LLES_CALL') ENDIF -IKT=SIZE(PTHLT,3) -IKTB=1+JPVEXT_TURB +IKT=SIZE(PTHLT,3) +IKTB=1+JPVEXT_TURB IKTE=IKT-JPVEXT_TURB IKB=KKA+JPVEXT_TURB*KKL IKE=KKU-JPVEXT_TURB*KKL @@ -502,11 +503,11 @@ END IF ZCP(:,:,:)=XCPD ! IF (KRR > 0) ZCP(:,:,:) = ZCP(:,:,:) + XCPV * PRT(:,:,:,1) -DO JRR = 2,1+KRRL ! loop on the liquid components +DO JRR = 2,1+KRRL ! loop on the liquid components ZCP(:,:,:) = ZCP(:,:,:) + XCL * PRT(:,:,:,JRR) END DO ! -DO JRR = 2+KRRL,1+KRRL+KRRI ! loop on the solid components +DO JRR = 2+KRRL,1+KRRL+KRRI ! loop on the solid components ZCP(:,:,:) = ZCP(:,:,:) + XCI * PRT(:,:,:,JRR) END DO ! @@ -520,7 +521,7 @@ END IF ! !* 2.3 dissipative heating coeff a t ! -ZCOEF_DISS(:,:,:) = 1/(ZCP(:,:,:) * ZEXN(:,:,:)) +ZCOEF_DISS(:,:,:) = 1/(ZCP(:,:,:) * ZEXN(:,:,:)) ! ! ZFRAC_ICE(:,:,:) = 0.0 @@ -535,16 +536,26 @@ IF (KRRL >=1) THEN ! !* 2.5 Lv/Cph/Exn ! - IF ( KRRI >= 1 ) THEN + IF ( KRRI >= 1 ) THEN ALLOCATE(ZLVOCPEXNM(SIZE(PTHLT,1),SIZE(PTHLT,2),SIZE(PTHLT,3))) ALLOCATE(ZLSOCPEXNM(SIZE(PTHLT,1),SIZE(PTHLT,2),SIZE(PTHLT,3))) ALLOCATE(ZAMOIST_ICE(SIZE(PTHLT,1),SIZE(PTHLT,2),SIZE(PTHLT,3))) ALLOCATE(ZATHETA_ICE(SIZE(PTHLT,1),SIZE(PTHLT,2),SIZE(PTHLT,3))) ! - CALL COMPUTE_FUNCTION_THERMO(XALPW,XBETAW,XGAMW,XLVTT,XCL,ZT,ZEXN,ZCP, & +! + !wc call new functions depending on statnew + IF (LSTATNW) THEN + CALL COMPUTE_FUNCTION_THERMO_NEW_STAT(XALPW,XBETAW,XGAMW,XLVTT,XCL,ZT,ZEXN,ZCP, & ZLVOCPEXNM,ZAMOIST,ZATHETA) - CALL COMPUTE_FUNCTION_THERMO(XALPI,XBETAI,XGAMI,XLSTT,XCI,ZT,ZEXN,ZCP, & + CALL COMPUTE_FUNCTION_THERMO_NEW_STAT(XALPI,XBETAI,XGAMI,XLSTT,XCI,ZT,ZEXN,ZCP, & ZLSOCPEXNM,ZAMOIST_ICE,ZATHETA_ICE) + ELSE + + CALL COMPUTE_FUNCTION_THERMO(XALPW,XBETAW,XGAMW,XLVTT,XCL,ZT,ZEXN,ZCP, & + ZLVOCPEXNM,ZAMOIST,ZATHETA) + CALL COMPUTE_FUNCTION_THERMO(XALPI,XBETAI,XGAMI,XLSTT,XCI,ZT,ZEXN,ZCP, & + ZLSOCPEXNM,ZAMOIST_ICE,ZATHETA_ICE) + ENDIF ! WHERE(PRT(:,:,:,2)+PRT(:,:,:,4)>0.0) ZFRAC_ICE(:,:,:) = PRT(:,:,:,4) / ( PRT(:,:,:,2)+PRT(:,:,:,4) ) @@ -560,8 +571,14 @@ IF (KRRL >=1) THEN DEALLOCATE(ZAMOIST_ICE) DEALLOCATE(ZATHETA_ICE) ELSE - CALL COMPUTE_FUNCTION_THERMO(XALPW,XBETAW,XGAMW,XLVTT,XCL,ZT,ZEXN,ZCP, & + !wc call new stat functions or not + IF (LSTATNW) THEN + CALL COMPUTE_FUNCTION_THERMO_NEW_STAT(XALPW,XBETAW,XGAMW,XLVTT,XCL,ZT,ZEXN,ZCP, & ZLOCPEXNM,ZAMOIST,ZATHETA) + ELSE + CALL COMPUTE_FUNCTION_THERMO(XALPW,XBETAW,XGAMW,XLVTT,XCL,ZT,ZEXN,ZCP, & + ZLOCPEXNM,ZAMOIST,ZATHETA) + ENDIF END IF ! ! @@ -577,7 +594,7 @@ IF (KRRL >=1) THEN TZFIELD%NDIMS = 3 TZFIELD%LTIMEDEP = .TRUE. CALL IO_FIELD_WRITE(TPFILE,TZFIELD,ZATHETA) -! +! TZFIELD%CMNHNAME = 'AMOIST' TZFIELD%CSTDNAME = '' TZFIELD%CLONGNAME = 'AMOIST' @@ -609,7 +626,7 @@ IF ( KRRL >= 1 ) THEN - ZLSOCPEXNM(:,:,:) * PRRS(:,:,:,4) ELSE ! Rnp at t - PRT(:,:,:,1) = PRT(:,:,:,1) + PRT(:,:,:,2) + PRT(:,:,:,1) = PRT(:,:,:,1) + PRT(:,:,:,2) PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,2) ! Theta_l at t PTHLT(:,:,:) = PTHLT(:,:,:) - ZLOCPEXNM(:,:,:) * PRT(:,:,:,2) @@ -651,7 +668,7 @@ SELECT CASE (HTURBLEN) ZSHEAR = SQRT(ZDUDZ*ZDUDZ + ZDVDZ*ZDVDZ) CALL BL89(KKA,KKU,KKL,PZZ,PDZZ,PTHVREF,ZTHLM,KRR,ZRM,PTKET,ZSHEAR,ZLM,OOCEAN) ! -!* 3.3 Grey-zone combined RM17 & Deardorff mixing lengths +!* 3.3 Grey-zone combined RM17 & Deardorff mixing lengths ! -------------------------------------------------- CASE ('ADAP') @@ -663,7 +680,7 @@ SELECT CASE (HTURBLEN) CALL DELT(ZLMW,ODZ=.FALSE.) ! The minimum mixing length is chosen between Horizontal grid mesh (not taking into account the vertical grid mesh) and RM17. ! For large horizontal grid meshes, this is equal to RM17 - ! For LES grid meshes, this is equivalent to Deardorff : the base mixing lentgh is the horizontal grid mesh, + ! For LES grid meshes, this is equivalent to Deardorff : the base mixing lentgh is the horizontal grid mesh, ! and it is limited by a stability-based length (RM17), as was done in Deardorff length (but taking into account shear as well) ! For grid meshes in the grey zone, then this is the smaller of the two. ZLM = MIN(ZLM,XCADAP*ZLMW) @@ -743,7 +760,7 @@ IF (HTURBDIM=="3DIM") THEN CALL UPDATE_LM(HLBCX,HLBCY,ZLM,ZLEPS) END IF ! -!* 3.9 Mixing length correction if immersed walls +!* 3.9 Mixing length correction if immersed walls ! ------------------------------------------ ! IF (LIBM) THEN @@ -771,6 +788,10 @@ ELSE ZUSLOPE=PUT(:,:,KKA) ZVSLOPE=PVT(:,:,KKA) END IF +IF (OOCEAN) THEN + ZUSLOPE=PUT(:,:,KKU-1) + ZVSLOPE=PVT(:,:,KKU-1) +END IF ! ! !* 4.2 compute the proportionality coefficient between wind and stress @@ -780,15 +801,19 @@ ZCDUEFF(:,:) =-SQRT ( (PSFU(:,:)**2 + PSFV(:,:)**2) / & (1.E-60 + ZUSLOPE(:,:)**2 + ZVSLOPE(:,:)**2 ) ) #else (XMNH_TINY + ZUSLOPE(:,:)**2 + ZVSLOPE(:,:)**2 ) ) -#endif +#endif ! !* 4.6 compute the surface tangential fluxes ! -ZTAU11M(:,:) =2./3.*( (1.+ (PZZ (:,:,IKB+KKL)-PZZ (:,:,IKB)) & - /(PDZZ(:,:,IKB+KKL)+PDZZ(:,:,IKB)) & - ) *PTKET(:,:,IKB) & - -0.5 *PTKET(:,:,IKB+KKL) & - ) +IF (OOCEAN) THEN + ZTAU11M(:,:)=0. +ELSE + ZTAU11M(:,:) =2./3.*( (1.+ (PZZ (:,:,IKB+KKL)-PZZ (:,:,IKB)) & + /(PDZZ(:,:,IKB+KKL)+PDZZ(:,:,IKB)) & + ) *PTKET(:,:,IKB) & + -0.5 *PTKET(:,:,IKB+KKL) & + ) +END IF ZTAU12M(:,:) =0.0 ZTAU22M(:,:) =ZTAU11M(:,:) ZTAU33M(:,:) =ZTAU11M(:,:) @@ -878,7 +903,7 @@ CALL TURB_VER(KKA,KKU,KKL,KRR, KRRL, KRRI, & PTSTEP,TPFILE, & PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,PZZ, & PCOSSLOPE,PSINSLOPE, & - PRHODJ,PTHVREF, & + PRHODJ,PTHVREF,PSFU,PSFV, & PSFTH,PSFRV,PSFSV,PSFTH,PSFRV,PSFSV, & ZCDUEFF,ZTAU11M,ZTAU12M,ZTAU33M, & PUT,PVT,PWT,ZUSLOPE,ZVSLOPE,PTHLT,PRT,PSVT, & @@ -925,8 +950,8 @@ END IF ! !Les budgets des termes horizontaux de la turb sont présents dans AROME ! alors que ces termes ne sont pas calculés -#ifdef REPRO48 -#else +#ifdef REPRO48 +#else IF( HTURBDIM == '3DIM' ) THEN #endif IF( LBUDGET_U ) CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_U ), 'HTURB', PRUS (:, :, :) ) @@ -1020,11 +1045,11 @@ END IF #endif !---------------------------------------------------------------------------- ! -!* 6. EVOLUTION OF THE TKE AND ITS DISSIPATION +!* 6. EVOLUTION OF THE TKE AND ITS DISSIPATION ! ---------------------------------------- ! -! 6.1 Contribution of mass-flux in the TKE buoyancy production if -! cloud computation is not statistical +! 6.1 Contribution of mass-flux in the TKE buoyancy production if +! cloud computation is not statistical PTP = PTP + XG / PTHVREF * MZF(PFLXZTHVMF,KKA, KKU, KKL) IF(PRESENT(PTPMF)) PTPMF=XG / PTHVREF * MZF(PFLXZTHVMF, KKA, KKU, KKL) @@ -1053,8 +1078,8 @@ END IF CALL TKE_EPS_SOURCES(KKA,KKU,KKL,KMI,PTKET,ZLM,ZLEPS,PDP,ZTRH, & & PRHODJ,PDZZ,PDXX,PDYY,PDZX,PDZY,PZZ, & & PTSTEP,PIMPL,ZEXPL, & - & HTURBLEN,HTURBDIM, & - & TPFILE,OTURB_DIAG,ODIAG_IN_RUN, & + & HTURBLEN,HTURBDIM,OOCEAN, & + & TPFILE,OTURB_DIAG,ODIAG_IN_RUN,PSFU,PSFV, & & PTP,PRTKES,PRTHLS,ZCOEF_DISS,PTDIFF,PTDISS,ZRTKEMS,& & TBUDGETS,KBUDGETS, PEDR=PEDR, PTR=PTR,PDISS=PDISS, & & PCURRENT_TKE_DISS=PCURRENT_TKE_DISS ) @@ -1077,9 +1102,9 @@ ENDIF ! --------------------------------------------------------- ! IF ( OTURB_DIAG .AND. TPFILE%LOPENED ) THEN -! +! ! stores the mixing length -! +! TZFIELD%CMNHNAME = 'LM' TZFIELD%CSTDNAME = '' TZFIELD%CLONGNAME = 'LM' @@ -1129,7 +1154,7 @@ IF(PRESENT(PDRUS_TURB)) THEN PDRUS_TURB = PRUS - PDRUS_TURB PDRVS_TURB = PRVS - PDRVS_TURB PDRTHLS_TURB = PRTHLS - PDRTHLS_TURB - PDRRTS_TURB = PRRS(:,:,:,1) - PDRRTS_TURB + PDRRTS_TURB = PRRS(:,:,:,1) - PDRRTS_TURB PDRSVS_TURB = PRSVS - PDRSVS_TURB END IF !---------------------------------------------------------------------------- @@ -1149,7 +1174,7 @@ IF ( KRRL >= 1 ) THEN DEALLOCATE(ZLVOCPEXNM) DEALLOCATE(ZLSOCPEXNM) ELSE - PRT(:,:,:,1) = PRT(:,:,:,1) - PRT(:,:,:,2) + PRT(:,:,:,1) = PRT(:,:,:,1) - PRT(:,:,:,2) PRRS(:,:,:,1) = PRRS(:,:,:,1) - PRRS(:,:,:,2) PTHLT(:,:,:) = PTHLT(:,:,:) + ZLOCPEXNM(:,:,:) * PRT(:,:,:,2) PRTHLS(:,:,:) = PRTHLS(:,:,:) + ZLOCPEXNM(:,:,:) * PRRS(:,:,:,2) @@ -1333,14 +1358,14 @@ USE MODD_CST ! IMPLICIT NONE ! -!* 0.1 Declarations of dummy arguments +!* 0.1 Declarations of dummy arguments ! REAL, INTENT(IN) :: PALP,PBETA,PGAM,PLTT,PC REAL, DIMENSION(:,:,:), INTENT(IN) :: PT,PEXN,PCP ! REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLOCPEXN REAL, DIMENSION(:,:,:), INTENT(OUT) :: PAMOIST,PATHETA -! +! !* 0.2 Declarations of local variables ! REAL :: ZEPS ! XMV / XMD @@ -1394,6 +1419,84 @@ REAL, DIMENSION(SIZE(PEXN,1),SIZE(PEXN,2),SIZE(PEXN,3)) :: ZDRVSATDT ! IF (LHOOK) CALL DR_HOOK('TURB:COMPUTE_FUNCTION_THERMO',1,ZHOOK_HANDLE) END SUBROUTINE COMPUTE_FUNCTION_THERMO + +! ######################################################################## + SUBROUTINE COMPUTE_FUNCTION_THERMO_NEW_STAT(PALP,PBETA,PGAM,PLTT,PC,PT,PEXN,PCP,& + PLOCPEXN,PAMOIST,PATHETA ) +! ######################################################################## +!! +!!**** *COMPUTE_FUNCTION_THERMO* routine to compute several thermo functions +! +!! AUTHOR +!! ------ +!! +!! JP Pinty *LA* +!! +!! MODIFICATIONS +!! ------------- +!! Original 24/02/03 +!! Modified: Wim de Rooy 06-02-2019 +!! +!------------------------------------------------------------------------------- +! +!* 0. DECLARATIONS +! ------------ +USE MODD_CST +! +IMPLICIT NONE +! +!* 0.1 Declarations of dummy arguments +! +REAL, INTENT(IN) :: PALP,PBETA,PGAM,PLTT,PC +REAL, DIMENSION(:,:,:), INTENT(IN) :: PT,PEXN,PCP +! +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLOCPEXN +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PAMOIST,PATHETA +! +!* 0.2 Declarations of local variables +! +REAL :: ZEPS ! XMV / XMD +REAL, DIMENSION(SIZE(PEXN,1),SIZE(PEXN,2),SIZE(PEXN,3)) :: ZRVSAT +REAL, DIMENSION(SIZE(PEXN,1),SIZE(PEXN,2),SIZE(PEXN,3)) :: ZDRVSATDT +! +!------------------------------------------------------------------------------- +! + REAL(KIND=JPRB) :: ZHOOK_HANDLE + IF (LHOOK) CALL DR_HOOK('TURB:COMPUTE_FUNCTION_THERMO_NEW_STAT',0,ZHOOK_HANDLE) + ZEPS = XMV / XMD +! +!* 1.1 Lv/Cph at t +! + PLOCPEXN(:,:,:) = ( PLTT + (XCPV-PC) * (PT(:,:,:)-XTT) ) / PCP(:,:,:) +! +!* 1.2 Saturation vapor pressure at t +! + ZRVSAT(:,:,:) = EXP( PALP - PBETA/PT(:,:,:) - PGAM*ALOG( PT(:,:,:) ) ) +! +!* 1.3 saturation mixing ratio at t +! + ZRVSAT(:,:,:) = ZRVSAT(:,:,:) * ZEPS / ( PPABST(:,:,:) - ZRVSAT(:,:,:) ) +! +!* 1.4 compute the saturation mixing ratio derivative (rvs') +! + ZDRVSATDT(:,:,:) = ( PBETA / PT(:,:,:) - PGAM ) / PT(:,:,:) & + * ZRVSAT(:,:,:) * ( 1. + ZRVSAT(:,:,:) / ZEPS ) +! +!* 1.5 compute Amoist +! + PAMOIST(:,:,:)= 1.0 / ( 1.0 + ZDRVSATDT(:,:,:) * PLOCPEXN(:,:,:) ) +! +!* 1.6 compute Atheta +! + PATHETA(:,:,:)= PAMOIST(:,:,:) * PEXN(:,:,:) * ZDRVSATDT(:,:,:) +! +!* 1.7 Lv/Cph/Exner at t-1 +! + PLOCPEXN(:,:,:) = PLOCPEXN(:,:,:) / PEXN(:,:,:) +! +IF (LHOOK) CALL DR_HOOK('TURB:COMPUTE_FUNCTION_THERMO_NEW_STAT',1,ZHOOK_HANDLE) +END SUBROUTINE COMPUTE_FUNCTION_THERMO_NEW_STAT + ! ! #################### SUBROUTINE DELT(PLM,ODZ) @@ -1415,7 +1518,7 @@ END SUBROUTINE COMPUTE_FUNCTION_THERMO !* 0. DECLARATIONS ! ------------ ! -!* 0.1 Declarations of dummy arguments +!* 0.1 Declarations of dummy arguments ! REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLM LOGICAL, INTENT(IN) :: ODZ @@ -1437,7 +1540,7 @@ IF (ODZ) THEN PLM(:,:,KKA) = PZZ(:,:,IKB) - PZZ(:,:,KKA) IF ( HTURBDIM /= '1DIM' ) THEN ! 3D turbulence scheme IF ( L2D) THEN - PLM(:,:,:) = SQRT( PLM(:,:,:)*MXF(PDXX(:,:,:)) ) + PLM(:,:,:) = SQRT( PLM(:,:,:)*MXF(PDXX(:,:,:)) ) ELSE PLM(:,:,:) = (PLM(:,:,:)*MXF(PDXX(:,:,:))*MYF(PDYY(:,:,:)) ) ** (1./3.) END IF @@ -1454,7 +1557,7 @@ ELSE END IF END IF ! -! mixing length limited by the distance normal to the surface +! mixing length limited by the distance normal to the surface ! (with the same factor as for BL89) ! IF (.NOT. ORMC01) THEN @@ -1481,7 +1584,7 @@ IF (.NOT. ORMC01) THEN EXIT ENDIF END DO - ENDIF + ENDIF END DO END DO END IF @@ -1514,7 +1617,7 @@ END SUBROUTINE DELT !* 0. DECLARATIONS ! ------------ ! -!* 0.1 Declarations of dummy arguments +!* 0.1 Declarations of dummy arguments ! REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLM ! @@ -1526,7 +1629,7 @@ REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2)) :: ZWORK2D ! REAL, DIMENSION(SIZE(PTHLT,1),SIZE(PTHLT,2),SIZE(PTHLT,3)) :: & ZDTHLDZ,ZDRTDZ, &!dtheta_l/dz, drt_dz used for computing the stablity -! ! criterion +! ! criterion ZETHETA,ZEMOIST !coef ETHETA and EMOIST !---------------------------------------------------------------------------- ! @@ -1593,7 +1696,7 @@ ELSE! For dry atmos or unsalted ocean runs END DO END DO END IF -! special case near the surface +! special case near the surface ZDTHLDZ(:,:,IKB)=(PTHLT(:,:,IKB+KKL)-PTHLT(:,:,IKB))/PDZZ(:,:,IKB+KKL) ! For dry simulations IF (KRR>0) THEN @@ -1639,7 +1742,7 @@ IF (.NOT. ORMC01) THEN EXIT ENDIF END DO - ENDIF + ENDIF END DO END DO END IF @@ -1707,7 +1810,7 @@ REAL :: ZCOEF_AMPL_CEI_NUL! Ordonnate at the origin of the ! amplification straight line REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3)) :: ZCOEF_AMPL ! Amplification coefficient of the mixing length - ! when the instability criterium is verified + ! when the instability criterium is verified REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3)) :: ZLM_CLOUD ! Turbulent mixing length in the clouds ! @@ -1718,7 +1821,7 @@ REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3)) :: ZLM_CLOUD ! REAL(KIND=JPRB) :: ZHOOK_HANDLE IF (LHOOK) CALL DR_HOOK('TURB:CLOUD_MODIF_LM',0,ZHOOK_HANDLE) -ZPENTE = ( PCOEF_AMPL_SAT - 1. ) / ( PCEI_MAX - PCEI_MIN ) +ZPENTE = ( PCOEF_AMPL_SAT - 1. ) / ( PCEI_MAX - PCEI_MIN ) ZCOEF_AMPL_CEI_NUL = 1. - ZPENTE * PCEI_MIN ! ZCOEF_AMPL(:,:,:) = 1. @@ -1735,7 +1838,7 @@ WHERE ( PCEI(:,:,:)>=PCEI_MAX ) ZCOEF_AMPL(:,:,:)=PCOEF_AMPL_SAT ! WHERE ( PCEI(:,:,:) < PCEI_MAX .AND. & PCEI(:,:,:) > PCEI_MIN ) & - ZCOEF_AMPL(:,:,:) = ZPENTE * PCEI(:,:,:) + ZCOEF_AMPL_CEI_NUL + ZCOEF_AMPL(:,:,:) = ZPENTE * PCEI(:,:,:) + ZCOEF_AMPL_CEI_NUL ! ! !* 3. CALCULATION OF THE MIXING LENGTH IN CLOUDS @@ -1824,4 +1927,4 @@ ENDIF IF (LHOOK) CALL DR_HOOK('TURB:CLOUD_MODIF_LM',1,ZHOOK_HANDLE) END SUBROUTINE CLOUD_MODIF_LM ! -END SUBROUTINE TURB +END SUBROUTINE TURB diff --git a/src/mesonh/ext/phys_paramn.f90 b/src/mesonh/ext/phys_paramn.f90 index e77c51456e785de14018acab81cfbdb27fbb1052..9ad4e40a4ec0c238e5a823d914d64b8bb99de2c7 100644 --- a/src/mesonh/ext/phys_paramn.f90 +++ b/src/mesonh/ext/phys_paramn.f90 @@ -828,28 +828,34 @@ END IF !* 1.6 Ocean case: ! Sfc turbulent fluxes & Radiative tendency due to SW penetrating ocean ! -IF (LOCEAN .AND. (.NOT.LCOUPLES)) THEN +IF (LCOUPLES) THEN +ZSFU(:,:)= XSSUFL_C(:,:,1) +ZSFV(:,:)= XSSVFL_C(:,:,1) +ZSFTH(:,:)= XSSTFL_C(:,:,1) +ZSFRV(:,:)=XSSRFL_C(:,:,1) +ELSE +IF (LOCEAN) THEN ! ALLOCATE( ZIZOCE(IKU)); ZIZOCE(:)=0. ALLOCATE( ZPROSOL1(IKU)) ALLOCATE( ZPROSOL2(IKU)) - ALLOCATE(XSSUFL(IIU,IJU)) - ALLOCATE(XSSVFL(IIU,IJU)) - ALLOCATE(XSSTFL(IIU,IJU)) ALLOCATE(XSSOLA(IIU,IJU)) ! Time interpolation JSW = INT(TDTCUR%xtime/REAL(NINFRT)) ZSWA = TDTCUR%xtime/REAL(NINFRT)-REAL(JSW) - XSSTFL = (XSSTFL_T(JSW+1)*(1.-ZSWA)+XSSTFL_T(JSW+2)*ZSWA) - XSSUFL = (XSSUFL_T(JSW+1)*(1.-ZSWA)+XSSUFL_T(JSW+2)*ZSWA) - XSSVFL = (XSSVFL_T(JSW+1)*(1.-ZSWA)+XSSVFL_T(JSW+2)*ZSWA) + ZSFRV = 0. + ZSFTH = (XSSTFL_T(JSW+1)*(1.-ZSWA)+XSSTFL_T(JSW+2)*ZSWA) + ZSFU = (XSSUFL_T(JSW+1)*(1.-ZSWA)+XSSUFL_T(JSW+2)*ZSWA) + ZSFV = (XSSVFL_T(JSW+1)*(1.-ZSWA)+XSSVFL_T(JSW+2)*ZSWA) ! ZIZOCE(IKU) = XSSOLA_T(JSW+1)*(1.-ZSWA)+XSSOLA_T(JSW+2)*ZSWA ZPROSOL1(IKU) = XROC*ZIZOCE(IKU) ZPROSOL2(IKU) = (1.-XROC)*ZIZOCE(IKU) IF(NVERB >= 5 ) THEN - WRITE(ILUOUT,*)'ZSWA JSW TDTCUR XTSTEP FT FU FV SolarR(IKU)', NINFRT, ZSWA,JSW,& - TDTCUR%xtime, XTSTEP, XSSTFL(2,2), XSSUFL(2,2),XSSVFL(2,2),ZIZOCE(IKU) +! WRITE(ILUOUT,*)'ZSWA JSW TDTCUR XTSTEP FT FU FV SolarR(IKU)', NINFRT, ZSWA,JSW,& +! TDTCUR%xtime, XTSTEP, ZSFTH(2,2), ZSFU(2,2),ZSFV(2,2),ZIZOCE(IKU) + WRITE(ILUOUT,*)'XSSTP1,XSSTP,NINFRT,ZSWA,JSW,TDTCUR%xtime,ZSFT', & + XSSTFL_T(JSW+1),XSSTFL_T(JSW),NINFRT,ZSWA,JSW, TDTCUR%xtime,ZSFTH(2,2) END IF if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'OCEAN', xrths(:, :, :) ) DO JKM=IKU-1,2,-1 @@ -860,10 +866,12 @@ IF (LOCEAN .AND. (.NOT.LCOUPLES)) THEN XRTHS(:,:,JKM) = XRTHS(:,:,JKM) + XRHODJ(:,:,JKM)*ZIZOCE(JKM) END DO if ( lbudget_th ) call Budget_store_end ( tbudgets(NBUDGET_TH), 'OCEAN', xrths(:, :, :) ) + DEALLOCATE (XSSOLA) DEALLOCATE( ZIZOCE) DEALLOCATE (ZPROSOL1) DEALLOCATE (ZPROSOL2) -END IF +END IF! LOCEAN NO LCOUPLES +END IF!NO LCOUPLES ! ! CALL SECOND_MNH2(ZTIME2) @@ -1266,14 +1274,18 @@ IF (CSURF=='EXTE') THEN XVT(:,:,1+JPVEXT) = XVT(:,:,1+JPVEXT) - XVTRANS END IF ! -ELSE - ZSFTH = 0. - ZSFRV = 0. +ELSE ! case no SURFEX (CSURF logical) ZSFSV = 0. ZSFCO2 = 0. - ZSFU = 0. - ZSFV = 0. -END IF + IF (.NOT.LOCEAN) THEN + ZSFTH = 0. + ZSFRV = 0. + ZSFSV = 0. + ZSFCO2 = 0. + ZSFU = 0. + ZSFV = 0. + END IF +END IF !CSURF ! CALL SECOND_MNH2(ZTIME2) ! @@ -1516,7 +1528,7 @@ IF (LOCEAN .AND. LDEEPOC) THEN END DO DO JJ=IJB,IJE DO JI=IIB,IIE - IF ( ZDIST(JI,JJ) > 1.) XSSTFL(JI,JJ)=0. + IF ( ZDIST(JI,JJ) > 1.) ZSFTH(JI,JJ)=0. END DO END DO END IF !END DEEP OCEAN CONV CASE @@ -1603,7 +1615,6 @@ CALL SECOND_MNH2(ZTIME4) XUT(:,:,:) = XUT(:,:,:) - XUTRANS XVT(:,:,:) = XVT(:,:,:) - XVTRANS END IF - IF (CMF_CLOUD == 'STAT') THEN XSIGS =SQRT( XSIGS**2 + ZSIGMF**2 ) ENDIF @@ -1625,14 +1636,6 @@ PMAFL = PMAFL + ZTIME4 - ZTIME3 - ZTIME_LES_MF PTIME_BU = PTIME_BU + XTIME_LES_BU_PROCESS + XTIME_BU_PROCESS ! ! -!* deallocate sf flux array for ocean model (in grid nesting, dimensions can vary) -! -IF (LOCEAN .AND. (.NOT. LCOUPLES)) THEN - DEALLOCATE(XSSUFL) - DEALLOCATE(XSSVFL) - DEALLOCATE(XSSTFL) - DEALLOCATE(XSSOLA) -END IF !------------------------------------------------------------------------------- ! !* deallocation of variables used in more than one parameterization diff --git a/src/mesonh/ext/resolved_cloud.f90 b/src/mesonh/ext/resolved_cloud.f90 index a425fe89cb0e566ad8701834891c16b9a16cea3e..e087afdec129c240e4a6d5e7bec7183d37de366e 100644 --- a/src/mesonh/ext/resolved_cloud.f90 +++ b/src/mesonh/ext/resolved_cloud.f90 @@ -478,6 +478,7 @@ REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: ZICEFR REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: ZPRCFR REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: ZTM REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2)) :: ZSIGQSAT2D +REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: ZDUM ZSIGQSAT2D(:,:) = PSIGQSAT ! !------------------------------------------------------------------------------ @@ -743,10 +744,11 @@ SELECT CASE ( HCLOUD ) ZZZ = MZF( PZZ ) IF(LRED .AND. LADJ_BEFORE) THEN CALL ICE_ADJUST (1, IKU, 1, KRR, CFRAC_ICE_ADJUST, CCONDENS, CLAMBDA3, & - 'ADJU', OSUBG_COND, OSIGMAS, .FALSE., CSUBG_MF_PDF, & - PTSTEP, ZSIGQSAT2D, & + 'ADJU', OSUBG_COND, OSIGMAS, .FALSE., .FALSE., & + CSUBG_MF_PDF, PTSTEP, ZSIGQSAT2D, & PRHODJ, PEXNREF, PRHODREF, PSIGS, PMFCONV, PPABST, ZZZ, & ZEXN, PCF_MF, PRC_MF, PRI_MF, & + ZDUM, ZDUM, ZDUM, ZDUM, ZDUM, & PRV=PRS(:,:,:,1)*PTSTEP, PRC=PRS(:,:,:,2)*PTSTEP, & PRVS=PRS(:,:,:,1), PRCS=PRS(:,:,:,2), & PTH=PTHS*PTSTEP, PTHS=PTHS, PSRCS=PSRCS, PCLDFR=PCLDFR, & @@ -795,10 +797,11 @@ SELECT CASE ( HCLOUD ) ! IF (.NOT. LRED .OR. (LRED .AND. LADJ_AFTER) ) THEN CALL ICE_ADJUST (1, IKU, 1, KRR, CFRAC_ICE_ADJUST, CCONDENS, CLAMBDA3, & - 'DEPI', OSUBG_COND, OSIGMAS, .FALSE.,CSUBG_MF_PDF, & - PTSTEP, ZSIGQSAT2D, & + 'DEPI', OSUBG_COND, OSIGMAS, .FALSE., .FALSE., & + CSUBG_MF_PDF, PTSTEP, ZSIGQSAT2D, & PRHODJ, PEXNREF, PRHODREF, PSIGS, PMFCONV, PPABST, ZZZ, & ZEXN, PCF_MF, PRC_MF, PRI_MF, & + ZDUM, ZDUM, ZDUM, ZDUM, ZDUM, & PRV=PRS(:,:,:,1)*PTSTEP, PRC=PRS(:,:,:,2)*PTSTEP, & PRVS=PRS(:,:,:,1), PRCS=PRS(:,:,:,2), & PTH=PTHS*PTSTEP, PTHS=PTHS, PSRCS=PSRCS, PCLDFR=PCLDFR, & @@ -830,10 +833,11 @@ SELECT CASE ( HCLOUD ) ZZZ = MZF( PZZ ) IF(LRED .AND. LADJ_BEFORE) THEN CALL ICE_ADJUST (1, IKU, 1, KRR, CFRAC_ICE_ADJUST, CCONDENS, CLAMBDA3, & - 'ADJU', OSUBG_COND, OSIGMAS, .FALSE., CSUBG_MF_PDF, & - PTSTEP, ZSIGQSAT2D, & + 'ADJU', OSUBG_COND, OSIGMAS, .FALSE., .FALSE., & + CSUBG_MF_PDF, PTSTEP, ZSIGQSAT2D, & PRHODJ, PEXNREF, PRHODREF, PSIGS, PMFCONV, PPABST, ZZZ, & ZEXN, PCF_MF, PRC_MF, PRI_MF, & + ZDUM, ZDUM, ZDUM, ZDUM, ZDUM, & PRV=PRS(:,:,:,1)*PTSTEP, PRC=PRS(:,:,:,2)*PTSTEP, & PRVS=PRS(:,:,:,1), PRCS=PRS(:,:,:,2), & PTH=PTHS*PTSTEP, PTHS=PTHS, PSRCS=PSRCS, PCLDFR=PCLDFR, & @@ -887,10 +891,11 @@ SELECT CASE ( HCLOUD ) ! IF (.NOT. LRED .OR. (LRED .AND. LADJ_AFTER) ) THEN CALL ICE_ADJUST (1, IKU, 1, KRR, CFRAC_ICE_ADJUST, CCONDENS, CLAMBDA3, & - 'DEPI', OSUBG_COND, OSIGMAS, .FALSE., CSUBG_MF_PDF, & - PTSTEP, ZSIGQSAT2D, & + 'DEPI', OSUBG_COND, OSIGMAS, .FALSE., .FALSE., & + CSUBG_MF_PDF, PTSTEP, ZSIGQSAT2D, & PRHODJ, PEXNREF, PRHODREF, PSIGS, PMFCONV, PPABST, ZZZ, & ZEXN, PCF_MF, PRC_MF, PRI_MF, & + ZDUM, ZDUM, ZDUM, ZDUM, ZDUM, & PRV=PRS(:,:,:,1)*PTSTEP, PRC=PRS(:,:,:,2)*PTSTEP, & PRVS=PRS(:,:,:,1), PRCS=PRS(:,:,:,2), & PTH=PTHS*PTSTEP, PTHS=PTHS, PSRCS=PSRCS, PCLDFR=PCLDFR, & diff --git a/src/mesonh/micro/ice_adjust_elec.f90 b/src/mesonh/micro/ice_adjust_elec.f90 index 19ac78f72bec3358142b66047634bbf5a363e7e3..a44b468c02c96731714366f5e4462239fc9f6aa9 100644 --- a/src/mesonh/micro/ice_adjust_elec.f90 +++ b/src/mesonh/micro/ice_adjust_elec.f90 @@ -263,7 +263,7 @@ REAL, DIMENSION(SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3)) & ZLV, & ! guess of the Lv at t+1 ZLS, & ! guess of the Ls at t+1 ZW1,ZW2,ZW3,ZW4,ZW5,ZW6,ZW7,& ! Work arrays for intermediate fields - ZW1_IN, ZW2_IN, ZW3_IN, & + ZW1_IN, ZW2_IN, ZW3_IN, ZDUM, & ZCND ! CND=(T-T00)/(T0-T00) cf sc doc and TAO etal (89) REAL, DIMENSION(SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3)) & :: ZWE1, & @@ -377,11 +377,13 @@ DO JITER = 1, ITERMAX ZSIGQSAT2D(:,:)=PSIGQSAT ZW4 = 1. ! PRODREF is not used if HL variables are not present ! - CALL CONDENSATION( IIU, IJU, IKU, IIB, IIE, IJB, IJE, IKB, IKE,1, 'T', 'CB02', 'CB', & + CALL CONDENSATION( IIU, IJU, IKU, IIB, IIE, IJB, IJE, IKB, IKE,1, & + 'T', 'CB02', 'CB', & PPABST, PZZ, ZW4, ZT, ZW3_IN, ZW3, ZW1_IN, ZW1, ZW2_IN, ZW2, & - PRRS*PTSTEP, PRSS*PTSTEP, PRGS*PTSTEP, & - PSIGS, PMFCONV, PCLDFR, PSRCS, .TRUE., & - OSIGMAS, .FALSE., ZSIGQSAT2D, PLV=ZLV, PLS=ZLS, PCPH=ZCPH ) + PRRS*PTSTEP, PRSS*PTSTEP, PRGS*PTSTEP, PSIGS, PMFCONV, PCLDFR, & + PSRCS, .TRUE., OSIGMAS, .FALSE., .FALSE., & + ZDUM, ZDUM, ZDUM, ZDUM, ZDUM, ZSIGQSAT2D, & + PLV=ZLV, PLS=ZLS, PCPH=ZCPH ) ! !* 3.2 compute the variation of mixing ratio ! diff --git a/src/mesonh/micro/ini_rain_ice.f90 b/src/mesonh/micro/ini_rain_ice.f90 index 9ee20cc3fd2ba6bc478e99e409fcccd5f455c616..ab29fbc6800d64ec44468df35b66d2d802c1ed48 100644 --- a/src/mesonh/micro/ini_rain_ice.f90 +++ b/src/mesonh/micro/ini_rain_ice.f90 @@ -397,7 +397,7 @@ XLBH = ( XAH*XCCH*MOMG(XALPHAH,XNUH,XBH) )**(-XLBEXH) XLBDAS_MAX = 100000.0 ! ZCONC_MAX = 1.E6 ! Maximal concentration for falling particules set to 1 per cc -XLBDAS_MAX = ( ZCONC_MAX/XCCS )**(1./XCXS) +IF(XCCS>0. .AND. XCXS>0. )XLBDAS_MAX = ( ZCONC_MAX/XCCS )**(1./XCXS) ! IF (HCLOUD == 'ICE4') THEN ALLOCATE( XRTMIN(7) ) @@ -543,16 +543,26 @@ X0DEPS = (4.0*XPI)*XCCS*XC1S*XF0S*MOMG(XALPHAS,XNUS,1.) X1DEPS = (4.0*XPI)*XCCS*XC1S*XF1S*SQRT(XCS)*MOMG(XALPHAS,XNUS,0.5*XDS+1.5) XEX0DEPS = XCXS-1.0 XEX1DEPS = XCXS-0.5*(XDS+3.0) +XRDEPSRED = 1.0 ! X0DEPG = (4.0*XPI)*XCCG*XC1G*XF0G*MOMG(XALPHAG,XNUG,1.) X1DEPG = (4.0*XPI)*XCCG*XC1G*XF1G*SQRT(XCG)*MOMG(XALPHAG,XNUG,0.5*XDG+1.5) XEX0DEPG = XCXG-1.0 XEX1DEPG = XCXG-0.5*(XDG+3.0) +XRDEPGRED = 1.0 ! X0DEPH = (4.0*XPI)*XCCH*XC1H*XF0H*MOMG(XALPHAH,XNUH,1.) X1DEPH = (4.0*XPI)*XCCH*XC1H*XF1H*SQRT(XCH)*MOMG(XALPHAH,XNUH,0.5*XDH+1.5) XEX0DEPH = XCXH-1.0 XEX1DEPH = XCXH-0.5*(XDH+3.0) + +GFLAG = .TRUE. +IF (GFLAG) THEN + WRITE(UNIT=KLUOUT,FMT='(" factors sublimation snow/groupel")') + WRITE(UNIT=KLUOUT,FMT='(" mod sublim snow =",E13.6)') XRDEPSRED + WRITE(UNIT=KLUOUT,FMT='(" mod sublim graupel =",E13.6)') XRDEPGRED +END IF + ! !* 5.3 Constants for pristine ice autoconversion ! @@ -1045,6 +1055,20 @@ IF( (KDRYLBDAG/=NDRYLBDAG) .OR. (KDRYLBDAR/=NDRYLBDAR) .OR. (KND/=IND) .OR. & PFDINFTY,XKER_RDRYG ) WRITE(UNIT=KLUOUT,FMT='(" Read XKER_RDRYG")') END IF + +! 8.2.6 Constants for possible modifying some processes related to +! graupeln in XFRMIN(1:8), IN - concentration in XFRMIN(9) and Kogan +! autoconversion in XFRMIN(10:11). May be used for e.g. ensemble spread + XFRMIN(1:6)=0. + XFRMIN(7:9)=1. + XFRMIN(10) =10. + XFRMIN(11) =1. + XFRMIN(12) =100. + XFRMIN(13) =1.0E-15 + XFRMIN(14) =120. + XFRMIN(15) =1.0E-4 + XFRMIN(16:20)=0. + XFRMIN(21)=1. ! ! !------------------------------------------------------------------------------- diff --git a/src/mesonh/micro/lima_adjust_split.f90 b/src/mesonh/micro/lima_adjust_split.f90 index 7534a193ad633d0584c16c1d348c0736ad8555bd..ebe680c80f6ca34373085633971e384f4d07c43a 100644 --- a/src/mesonh/micro/lima_adjust_split.f90 +++ b/src/mesonh/micro/lima_adjust_split.f90 @@ -275,7 +275,7 @@ REAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) & ZRI, ZRI_IN, & ZSIGS, & ZW_MF -REAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2)) :: ZSIGQSAT2D +REAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2)) :: ZSIGQSAT2D, ZDUM LOGICAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) & :: GMICRO ! Test where to compute cond/dep proc. INTEGER :: IMICRO @@ -510,12 +510,13 @@ DO JITER =1,ITERMAX ZRI=0. ZSIGS=PSIGS ZSIGQSAT2D(:,:)=PSIGQSAT - CALL CONDENSATION(IIU, IJU, IKU, IIB, IIE, IJB, IJE, IKB, IKE, 1, 'S', & - HCONDENS, HLAMBDA3, & + CALL CONDENSATION(IIU, IJU, IKU, IIB, IIE, IJB, IJE, IKB, IKE, 1, & + 'S', HCONDENS, HLAMBDA3, & PPABST, PZZ, PRHODREF, ZT, ZRV_IN, ZRV, ZRC_IN, ZRC, ZRI_IN, ZRI,& - PRRS*PTSTEP, PRSS*PTSTEP, PRGS*PTSTEP, & - ZSIGS, PMFCONV, PCLDFR, PSRCS, .FALSE., OSIGMAS, .FALSE., & - ZSIGQSAT2D, PLV=ZLV, PLS=ZLS, PCPH=ZCPH ) + PRRS*PTSTEP, PRSS*PTSTEP, PRGS*PTSTEP, ZSIGS, PMFCONV, PCLDFR, & + PSRCS, .FALSE., OSIGMAS, .FALSE., .FALSE., & + ZDUM, ZDUM, ZDUM, ZDUM, ZDUM, ZSIGQSAT2D, & + PLV=ZLV, PLS=ZLS, PCPH=ZCPH ) PCLDFR(:,:,:) = MIN(PCLDFR(:,:,:) + PCF_MF(:,:,:) , 1.) ZRV(:,:,:) = ZRV(:,:,:) - MAX(MIN(PRC_MF(:,:,:), ZRV(:,:,:)),0.) ZRC(:,:,:) = ZRC(:,:,:) + MAX(MIN(PRC_MF(:,:,:), ZRV(:,:,:)),0.) diff --git a/src/mesonh/micro/radtr_satel.f90 b/src/mesonh/micro/radtr_satel.f90 index dbc0cd4e60f55a2a6d2b5483b15a615183d51dc3..48115b4c440146e3e91de52876af83fdcb6a5173 100644 --- a/src/mesonh/micro/radtr_satel.f90 +++ b/src/mesonh/micro/radtr_satel.f90 @@ -258,7 +258,7 @@ REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRC_IN, ZRC_OUT ! grid scale r_c mixing REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRI_IN, ZRI_OUT ! grid scale r_i (kg/kg) REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRV_IN, ZRV_OUT ! grid scale r_v (kg/kg) REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRHO -REAL, DIMENSION(SIZE(PPABST,1),SIZE(PPABST,2)) :: ZSIGQSAT2D +REAL, DIMENSION(SIZE(PPABST,1),SIZE(PPABST,2)) :: ZSIGQSAT2D, ZDUM !---------------------------------------------------------------------------- ! !* 1. INITIALIZATION OF CONSTANTS FOR TRANSFERT CODE @@ -484,10 +484,12 @@ IF( SIZE(PRT(:,:,:,:),4) >= 2 ) THEN ALLOCATE(ZRHO(IIU,IJU,IKU)) ZRHO=1. !unused ZSIGQSAT2D(:,:)=PSIGQSAT - CALL CONDENSATION( IIU, IJU, IKU, IIB, IIE, IJB, IJE, IKB, IKE, 1, 'T', 'CB02', 'CB',& + CALL CONDENSATION( IIU, IJU, IKU, IIB, IIE, IJB, IJE, IKB, IKE, 1, & + 'T', 'CB02', 'CB',& PPABST, PZZ, ZRHO, ZTEMP, ZRV_IN, ZRV_OUT, ZRC_IN, ZRC_OUT, ZRI_IN, ZRI_OUT, & - PRT(:,:,:,2), PRT(:,:,:,5), PRT(:,:,:,6), PSIGS,& - PMFCONV, ZNCLD, ZSIGRC, OUSERI, OSIGMAS, .FALSE., PSIGQSAT=ZSIGQSAT2D ) + PRT(:,:,:,2), PRT(:,:,:,5), PRT(:,:,:,6), PSIGS, PMFCONV, ZNCLD, & + ZSIGRC, OUSERI, OSIGMAS, .FALSE., .FALSE., & + ZDUM, ZDUM, ZDUM, ZDUM, ZDUM, ZSIGQSAT2D ) DEALLOCATE(ZTEMP,ZSIGRC) DEALLOCATE(ZRV_OUT) ELSE diff --git a/tools/INSTALL_pack_ial.md b/tools/INSTALL_pack_ial.md index 60e553f070e584767b60f990390523182c4b0177..539958fc9c61c0f06266164e26360788bb5d13a3 100644 --- a/tools/INSTALL_pack_ial.md +++ b/tools/INSTALL_pack_ial.md @@ -20,6 +20,7 @@ is now automatically performed with the prep\_code.sh script. The same installation guide applies to sxphynh and belenos except for some commands. The directory in which the repository lies is designated by the TRUNK variable. The $TRUNK dir can be put on a shared directory to share this installation among several users. +Tools are designed and tested with TRUNK=\<git repository\>/tools/pack/ ## REFERENCE PACK CREATION @@ -27,33 +28,34 @@ The $TRUNK dir can be put on a shared directory to share this installation among ``` version=01 +cycle=48t1 or cy48t3 (after commit XXX on 22 September 2022) compiler=MPIGFORTRAN920DBL on ubuntu, MIMPIIFC1805 on belenos gmkfile=${compiler}.GMAP on ubuntu, ${compiler}.EPONA on belenos option=xfftw on ubuntu, 2y on belenos -getpack 48t1_main.01.${compiler}.${option} #get source code on ubuntu, is it really necessary? +getpack ${cycle}_main.01.${compiler}.${option} #get source code on ubuntu, is it really necessary? export GMKTMP=/dev/shm (. berootpack) -gmkpack -a -r 48t1 -b phyex -n $version -l ${compiler} -o ${option} -p masterodb -h $TRUNK/tools/pack/ #create main pack +gmkpack -a -r ${cycle} -b phyex -n $version -l ${compiler} -o ${option} -p masterodb -h $TRUNK/tools/pack/ #create main pack ``` ### Populate main pack with source code ``` -cd $TRUNK/tools/pack/48t1_phyex.${version}.${compiler}.${option}/src/local +cd $TRUNK/tools/pack/${cycle}_phyex.${version}.${compiler}.${option}/src/local if sxphynh; then - wget http://anonymous:mto@webdav.cnrm.meteo.fr/public/algo/khatib/src/48t1_main.01.tgz #only available at MF but equivalent must exist elsewhere + wget http://anonymous:mto@webdav.cnrm.meteo.fr/public/algo/khatib/src/${cycle}_main.01.tgz #only available at MF but equivalent must exist elsewhere else - ssh sxphynh.cnrm.meteo.fr "wget http://anonymous:mto@webdav.cnrm.meteo.fr/public/algo/khatib/src/48t1_main.01.tgz -O -" > 48t1_main.01.tgz + ssh sxphynh.cnrm.meteo.fr "wget http://anonymous:mto@webdav.cnrm.meteo.fr/public/algo/khatib/src/${cycle}_main.01.tgz -O -" > ${cycle}_main.01.tgz fi -tar xf 48t1_main.01.tgz -rm -f 48t1_main.01.tgz +tar xf ${cycle}_main.01.tgz +rm -f ${cycle}_main.01.tgz for rep in turb micro conv; do mkdir -p phyex/$rep - mv mpa/$rep/internals/* phyex/$rep/ - mv mpa/$rep/module/* phyex/$rep/ + mv -f mpa/$rep/internals/* phyex/$rep/ + mv -f mpa/$rep/module/* phyex/$rep/ rmdir mpa/$rep/internals mpa/$rep/module done -tar xf /cnrm/algo/khatib/drhook.c_for_ubuntu.tar #only on ubuntu +[ $cycle == 48t1 ] && tar xf /cnrm/algo/khatib/drhook.c_for_ubuntu.tar #only on ubuntu ``` ### Apply some bug corrections @@ -62,7 +64,7 @@ tar xf /cnrm/algo/khatib/drhook.c_for_ubuntu.tar #only on ubuntu sed -i 's/IF (LBUDGET_RH)/IF (LBUDGET_RH .AND. KRR==7)/' mpa/micro/externals/aro_rain_ice.F90 ``` -Edition of arpifs/phys\_dmn/apl\_arome.F90 to modift (line 1573): +Edition of arpifs/phys\_dmn/apl\_arome.F90 to modify (line 1573 in 48t1, 1496 in 48t3): ``` IF (LMFSHAL .AND. (CMF_CLOUD=='DIRE'.OR.CMF_CLOUD=='BIGA')) THEN @@ -71,7 +73,7 @@ Edition of arpifs/phys\_dmn/apl\_arome.F90 to modift (line 1573): ENDIF ``` -into: +into (48t1): ``` IF (LMFSHAL .AND. (CMF_CLOUD=='DIRE'.OR.CMF_CLOUD=='BIGA')) THEN @@ -86,12 +88,27 @@ into: ENDIF ``` -Edition of apl\_arome.F90 to modify (line 1406): +or (48t3): + + ``` + IF (LMFSHAL .AND. (CMF_CLOUD=='DIRE'.OR.CMF_CLOUD=='BIGA')) THEN + IOFF_MFSHAL=IOFF_MFSHAL+3 + ... + ELSE + DO JLEV = 1, YDCPG_OPTS%KFLEVG + ZRC_MF_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=0._JPRB + ZRI_MF_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=0._JPRB + ZCF_MF_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=0._JPRB + ENDDO + ENDIF + ``` + +Edition of apl\_arome.F90 to modify (line 1406 in 48t1, 1329 in 48t3): ``` IF ( LKFBCONV.AND.LOSUBG_COND.AND..NOT.LOSIGMAS) THEN DO JLEV = 1, KLEV - ZMFM_(KIDIA:KFDIA,JLEV)=PSIGM(KIDIA:KFDIA,JLEV) + ZMFM_(... ENDDO ENDIF ``` @@ -102,20 +119,91 @@ into: IF (LOSUBG_COND.AND..NOT.LOSIGMAS) THEN IF (LKFBCONV) THEN DO JLEV = 1, KLEV - ZMFM_(KIDIA:KFDIA,JLEV)=PSIGM(KIDIA:KFDIA,JLEV) + ZMFM_(... ENDDO ELSE DO JLEV = 1, KLEV - ZMFM_(KIDIA:KFDIA,JLEV)=0._JPRB + ZMFM_(...)=0._JPRB ENDDO ENDIF ENDIF ``` +If cycle is 48t3, edition of apl\_arome.F90 to modify (line 3616) + + ``` + ZTMP2(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,:)=ZFPR(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,:,2)+ZFPR(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,:,3) + CALL NEW_ADD_FIELD_3D(YDMODEL%YRML_DIAG%YRMDDH,ZTMP2(:,:),'FQTPRECISTL',YDDDH) + ZTMP2(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,:)=ZFPR(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,:,4)+ZFPR(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,:,5) + CALL NEW_ADD_FIELD_3D(YDMODEL%YRML_DIAG%YRMDDH,ZTMP2(:,:),'FQTPRECISTN',YDDDH) + ``` + +into: + + ``` + ZTMP2(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,0)=0._JPRB + DO JLEV=1,YDCPG_OPTS%KFLEVG + ZTMP2(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=ZPFPR_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV,2)+ZPFPR_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV,4) + ENDDO + !ZTMP2(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,:)=ZFPR(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,:,2)+ZFPR(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,:,3) + CALL NEW_ADD_FIELD_3D(YDMODEL%YRML_DIAG%YRMDDH,ZTMP2(:,:),'FQTPRECISTL',YDDDH) + DO JLEV=1,YDCPG_OPTS%KFLEVG + ZTMP2(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=ZPFPR_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV,4)+ZPFPR_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV,5) + ENDDO + !ZTMP2(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,:)=ZFPR(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,:,4)+ZFPR(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,:,5) + CALL NEW_ADD_FIELD_3D(YDMODEL%YRML_DIAG%YRMDDH,ZTMP2(:,:),'FQTPRECISTN',YDDDH) + ``` + +If cycle is 48t3, edition of apl\_arome.F90 to: + +add the folowing lines after the line 236 (YOMTRAJ use statement): + + ``` + #ifdef REPRO48 + !To compensate a bug introduced in 48t3 + !Must be suppressed as soon as the bug is corrected + USE MODD_BUDGET + #endif + ``` + +and add the folowing lines at line 912 (to be one of the first execution statement but exact emplacement is not sensitive): + + ``` + #ifdef REPRO48 + !see comment associated to the MODD_BUDGET use statement + LBU_ENABLE = YDMODEL%YRML_DIAG%YRLDDH%LSDDH + LBUDGET_U =LBU_ENABLE + LBUDGET_V =LBU_ENABLE + LBUDGET_W =LBU_ENABLE + LBUDGET_TH=LBU_ENABLE + LBUDGET_TKE=LBU_ENABLE + LBUDGET_RV=LBU_ENABLE + LBUDGET_RC=LBU_ENABLE + LBUDGET_RR =LBU_ENABLE + LBUDGET_RI =LBU_ENABLE + LBUDGET_RS =LBU_ENABLE + LBUDGET_RG =LBU_ENABLE + LBUDGET_RH =LBU_ENABLE + LBUDGET_SV=LBU_ENABLE + #endif + ``` + +Edition of phyex/turb/compute\_mf\_cloud\_bigaus.F90 to modify (line 120): + + ``` + DO JK=KKB,KKE,KKL + ``` + +into: + + ``` + DO JK=KKB,KKE-KKL,KKL + ``` + ### Compilation ``` -cd $TRUNK/tools/pack/48t1_phyex.${version}.${compiler}.${option} +cd $TRUNK/tools/pack/${cycle}_phyex.${version}.${compiler}.${option} #Not needed anymore: grep MPA .gmkfile/${compiler}.GMAP | sed 's/MPA/PHYEX/g' >> .gmkfile/${gmkfile} Edition of .gmkfile/${gmkfile} to add -DREPRO48 to the MACROS_FRT variable in order to suppress bug corrections and be able to reproduce the original cy48 #Not needed anymore: Edition of .gmkfile/${gmkfile} to suppress on ubuntu -ftree-vectorize @@ -132,11 +220,11 @@ version=01 compiler=MPIGFORTRAN920DBL on ubuntu, MIMPIIFC1805 on belenos gmkfile=${compiler}.GMAP on ubuntu, ${compiler}.EPONA on belenos option=xfftw on ubuntu, 2y on belenos -getpack 48t1_main.01.${compiler}.${option} #get source code on ubuntu, is it really necessary? +getpack ${cycle}_main.01.${compiler}.${option} #get source code on ubuntu, is it really necessary? commit=9ce8119430dd603d35308d8ae94cf18636157473 #exemple of commit to test against the reference pack -gmkpack -r 48t1 -b phyex -v ${version} -l ${compiler} -o ${option} -p masterodb -f $TRUNK/tools/pack/ -u PHYEX/$commit +gmkpack -r ${cycle} -b phyex -v ${version} -l ${compiler} -o ${option} -p masterodb -f $TRUNK/tools/pack/ -u PHYEX/$commit cd $HOMEPACK/PHYEX/$commit/src/local/phyex git clone git@github.com:QuentinRodier/PHYEX.git diff --git a/tools/check_commit_ial.sh b/tools/check_commit_ial.sh index 6dce25678510156170da852334566d25e512fcb3..39a480a6a48f1c9590a73534641350de0ed2bf1f 100755 --- a/tools/check_commit_ial.sh +++ b/tools/check_commit_ial.sh @@ -23,7 +23,7 @@ set -e #The small_3D_alt9 is not included in the list of available tests because it cannot be run before 21 September (commit edc3f88). -specialPack="ori split recompil" +specialPack="ori split split_48t1 split_48t3 recompil" availTests="small_3D,small_3D_np2,small_3D_alt1,small_3D_alt2,small_3D_alt3,small_3D_alt4,small_3D_alt5,small_3D_alt6,small_3D_alt7" defaultTest="small_3D" separator='_' #- be carrefull, gmkpack (at least on belenos) has multiple allergies (':', '.', '@') @@ -38,14 +38,14 @@ if [ $(hostname | cut -c 1-7) == 'belenos' -o $(hostname | cut -c 1-7) == 'taran gmkpack_l=MIMPIIFC1805 gmkpack_o=2y defaultMainPackVersion=01 - defaultRef=split + defaultRef='split_${cycle}' availTests="${availTests},big_3D" else HPC=0 gmkpack_l=MPIGFORTRAN920DBL gmkpack_o=xfftw defaultMainPackVersion=01 - defaultRef=split + defaultRef='split_${cycle}' fi mainPackVersion=${mainPackVersion:-${defaultMainPackVersion}} @@ -63,6 +63,7 @@ function usage { echo " or ALL to execute all tests" echo "--noexpand do not use mnh_expand (code will be in array-syntax)" echo "-f full compilation (do not use pre-compiled pack)" + echo "--cycle CYCLE to force using CYCLE" echo "" echo "If nothing is asked (compilation, running, check) everything is done" echo @@ -73,6 +74,8 @@ function usage { echo "The directory (for commit only, not ref) can take the form server:directory" echo echo "If using a directory (for commit or reference) it must contain at least one '/'" + echo + echo "The cycle will be guessed from the source code" } compilation=0 @@ -84,6 +87,7 @@ tests="" suppress=0 useexpand=1 fullcompilation=0 +cycle="" while [ -n "$1" ]; do case "$1" in @@ -95,6 +99,7 @@ while [ -n "$1" ]; do '-t') tests="$2"; shift;; '--noexpand') useexpand=0;; '-f') fullcompilation=1;; + '--cycle') cycle="$2"; shift;; #--) shift; break ;; *) if [ -z "${commit-}" ]; then commit=$1 @@ -148,30 +153,52 @@ if [ $check -eq 1 -a -z "${reference-}" ]; then exit 3 fi -#Name is choosen such as it can be produced with a main pack: PHYEX/48t1_XXXXXXXXX.01.${gmkpack_l}.${gmkpack_o} +function content2cycle { + # variable content_apl_arome must contain the source code of apl_arome.F90 + if grep CPG_DYN_TYPE <(echo $content_apl_arome) > /dev/null; then + echo 48t3 + else + echo 48t1 + fi +} + +#Name is choosen such as it can be produced with a main pack: PHYEX/${cycle}_XXXXXXXXX.01.${gmkpack_l}.${gmkpack_o} fromdir='' if echo $commit | grep '/' > /dev/null; then fromdir=$commit + if [ "$cycle" == "" ]; then + content_apl_arome=$(scp $commit/src/arome/ext/apl_arome.F90 /dev/stdout) + cycle=$(content2cycle) + fi packBranch=$(echo $commit | sed 's/\//'${separator}'/g' | sed 's/:/'${separator}'/g' | sed 's/\./'${separator}'/g') - name="PHYEX/48t1_${packBranch}.01.${gmkpack_l}.${gmkpack_o}" + name="PHYEX/${cycle}_${packBranch}.01.${gmkpack_l}.${gmkpack_o}" [ $suppress -eq 1 -a -d $HOMEPACK/$name ] && rm -rf $HOMEPACK/$name elif echo $specialPack | grep -w $commit > /dev/null; then name="PHYEX/$commit" + if [ $commit == split_48t3 ]; then + cycle=48t3 + else + cycle=48t1 + fi else packBranch="COMMIT$commit" - name="PHYEX/48t1_${packBranch}.01.${gmkpack_l}.${gmkpack_o}" + if [ "$cycle" == "" ]; then + content_apl_arome=$(wget https://raw.githubusercontent.com/QuentinRodier/PHYEX/${commit}/src/arome/ext/apl_arome.F90 -O - 2>/dev/null) + cycle=$(content2cycle) + fi + name="PHYEX/${cycle}_${packBranch}.01.${gmkpack_l}.${gmkpack_o}" [ $suppress -eq 1 -a -d $HOMEPACK/$name ] && rm -rf $HOMEPACK/$name fi if [ ! -z "${reference-}" ]; then - [ $reference == 'REF' ] && reference=$defaultRef + [ $reference == 'REF' ] && reference=$(eval echo $defaultRef) #echo to replace ${cycle} by value reffromdir='' if echo $reference | grep '/' > /dev/null; then reffromdir=$reference - refname="PHYEX/48t1_$(echo $reference | sed 's/\//'${separator}'/g' | sed 's/:/'${separator}'/g' | sed 's/\./'${separator}'/g').01.${gmkpack_l}.${gmkpack_o}" + refname="PHYEX/*_$(echo $reference | sed 's/\//'${separator}'/g' | sed 's/:/'${separator}'/g' | sed 's/\./'${separator}'/g').01.${gmkpack_l}.${gmkpack_o}" elif echo $specialPack | grep -w $reference > /dev/null; then refname="PHYEX/$reference" else - refname="PHYEX/48t1_COMMIT${reference}.01.${gmkpack_l}.${gmkpack_o}" + refname="PHYEX/*_COMMIT${reference}.01.${gmkpack_l}.${gmkpack_o}" fi fi @@ -191,24 +218,24 @@ if [ $compilation -eq 1 ]; then export GMKTMP=/dev/shm if [ $fullcompilation == 0 ]; then - basepack=48t1_main.01.${gmkpack_l}.${gmkpack_o} - [ $HPC -eq 0 -a ! -d $ROOTPACK/$basepack ] && getpack $basepack - gmkpack -r 48t1 -b phyex -v $mainPackVersion -l ${gmkpack_l} -o ${gmkpack_o} -p masterodb \ + basepack=${cycle}_main.01.${gmkpack_l}.${gmkpack_o} + #[ $HPC -eq 0 -a ! -d $ROOTPACK/$basepack ] && getpack $basepack + gmkpack -r ${cycle} -b phyex -v $mainPackVersion -l ${gmkpack_l} -o ${gmkpack_o} -p masterodb \ -f $dirpack/ \ -u $name reftree='main' else #Create main pack - gmkpack -a -r 48t1 -b ${packBranch} -n 01 -l ${gmkpack_l} -o ${gmkpack_o} -p masterodb -h $HOMEPACK/PHYEX + gmkpack -a -r ${cycle} -b ${packBranch} -n 01 -l ${gmkpack_l} -o ${gmkpack_o} -p masterodb -h $HOMEPACK/PHYEX #Populate (we keep everything from the official source code except internals and module subdirectories of mpa) cd $HOMEPACK/$name/src/local/ if [ $HPC -eq 1 ]; then - ssh sxphynh.cnrm.meteo.fr "wget http://anonymous:mto@webdav.cnrm.meteo.fr/public/algo/khatib/src/48t1_main.01.tgz -O -" > 48t1_main.01.tgz + ssh sxphynh.cnrm.meteo.fr "wget http://anonymous:mto@webdav.cnrm.meteo.fr/public/algo/khatib/src/${cycle}_main.01.tgz -O -" > ${cycle}_main.01.tgz else - wget http://anonymous:mto@webdav.cnrm.meteo.fr/public/algo/khatib/src/48t1_main.01.tgz + wget http://anonymous:mto@webdav.cnrm.meteo.fr/public/algo/khatib/src/${cycle}_main.01.tgz fi - tar xf 48t1_main.01.tgz - rm -f 48t1_main.01.tgz + tar xf ${cycle}_main.01.tgz + rm -f ${cycle}_main.01.tgz for rep in turb micro conv; do mkdir -p phyex/$rep rm -rf mpa/$rep/internals mpa/$rep/module @@ -220,7 +247,7 @@ if [ $compilation -eq 1 ]; then #Special modification of the compilation configuration file and script sed -i 's/-ftree-vectorize//' $HOMEPACK/$name/.gmkfile/${gmkpack_l}.* sed -i "/MACROS_FRT/s/$/ -DREPRO48/" $HOMEPACK/$name/.gmkfile/${gmkpack_l}.* - #sed -i "s/PHYEX\/48t1_$$.01.${gmkpack_l}.${gmkpack_o}/$(echo $name | sed 's/\//\\\//')/" $HOMEPACK/$name/ics_masterodb #this line could be used if pack was renamed before compilation but it does not work on belenos + #sed -i "s/PHYEX\/${cycle}_$$.01.${gmkpack_l}.${gmkpack_o}/$(echo $name | sed 's/\//\\\//')/" $HOMEPACK/$name/ics_masterodb #this line could be used if pack was renamed before compilation but it does not work on belenos resetpack -f #Is it really useful? reftree='local' @@ -269,7 +296,7 @@ if [ $compilation -eq 1 ]; then fi fi - EXT=PHYEX/ext/ + EXT=PHYEX/ext [ ! -d $EXT ] && EXT=PHYEX/externals #old name for ext/aux if [ -d $EXT ]; then #Move manually files outside of mpa (a find on the whole repository would take too much a long time) @@ -278,6 +305,7 @@ if [ $compilation -eq 1 ]; then [ -f $EXT/suparar.F90 ] && mv $EXT/suparar.F90 ../arpifs/phys_dmn/ [ -f $EXT/apl_arome.F90 ] && mv $EXT/apl_arome.F90 ../arpifs/phys_dmn/ [ -f $EXT/suphmpa.F90 ] && mv $EXT/suphmpa.F90 ../arpifs/phys_dmn/ + [ -f $EXT/vdfhghtnhl.F90 ] && mv $EXT/vdfhghtnhl.F90 ../arpifs/phys_dmn/ #Special mpa case [ -f $EXT/modd_spp_type.F90 ] && mv $EXT/modd_spp_type.F90 ../mpa/micro/externals/ [ -f $EXT/spp_mod_type.F90 ] && mv $EXT/spp_mod_type.F90 ../mpa/micro/externals/ @@ -346,7 +374,7 @@ if [ $run -ge 1 ]; then cd $HOMEPACK/$name mkdir -p conf_tests/$t cd conf_tests/$t - MYLIB=$name TESTDIR=$dirconf/$t exescript Output_run $dirconf/$t/aro48t1.sh + MYLIB=$name TESTDIR=$dirconf/$t exescript Output_run $dirconf/$t/aro${cycle}.sh done fi @@ -367,7 +395,7 @@ if [ $check -eq 1 ]; then tag=$(echo $tag_file | cut -d, -f1) file=$(echo $tag_file | cut -d, -f2) file1=$HOMEPACK/$name/$file - file2=$HOMEPACK/$refname/$file + file2=$(echo $HOMEPACK/$refname/$file) #echo to enable shell substitution mess="" t=0 diff --git a/tools/comp_DDH.py b/tools/comp_DDH.py index ea0b116e8d9e8ad3e3745d68959aee99ba0074d6..8a5bdb74a8ac3ca55147f9fdee994b06c81cbc07 100755 --- a/tools/comp_DDH.py +++ b/tools/comp_DDH.py @@ -22,6 +22,9 @@ def comp_DDH(filename1, filename2, output_fig, tol_ad=1.2E-7, tol_rd=1.E-6, verb toplt = False if not t: if verbose: print(fid, ':') + if numpy.array(v1).ndim == 0: + v1 = numpy.array([v1]) + v2 = numpy.array([v2]) for i in range(len(v1)): if v1[i] - v2[i] != 0.: ad = v1[i] - v2[i] @@ -30,7 +33,7 @@ def comp_DDH(filename1, filename2, output_fig, tol_ad=1.2E-7, tol_rd=1.E-6, verb if abs(ad) > tol_ad and abs(rd) > tol_rd: toplt = True return fid if toplt else None toplt = [] - for fid in l1.intersection(l2): + for fid in [fid for fid in l1.intersection(l2) if fid != 'DOCFICHIER']: v1 = r1.readfield(fid) v2 = r2.readfield(fid) if isinstance(v1, epygram.base.FieldSet): diff --git a/tools/conf_tests/big_3D/aro48t3.sh b/tools/conf_tests/big_3D/aro48t3.sh new file mode 100644 index 0000000000000000000000000000000000000000..4663a7184bbbee85922b83a16d966b5cbc780451 --- /dev/null +++ b/tools/conf_tests/big_3D/aro48t3.sh @@ -0,0 +1,602 @@ +#!/bin/bash +#SBATCH -p normal256 +#SBATCH --export=MYLIB,HOMEPACK,TESTDIR +#SBATCH -n 1280 +#SBATCH -c 4 +#SBATCH -N 40 +#SBATCH -t 00:40:00 +#SBATCH --mem=247000 +#SBATCH --exclusiv + +# Job management : +# -------------- +JOB_INITDIR=$SLURM_SUBMIT_DIR +export JOB_NAME=arome_e700 +export JOB_ID=$SLURM_JOB_ID + +echo JOB_INITDIR=$JOB_INITDIR +echo JOB_NAME=$JOB_NAME +echo JOB_ID=$JOB_ID + +# ============================================================================= + +# RESOURCES ALLOCATIONS +# ===================== + +# Number of nodes/mpi-tasks/omp-threads: +# ------------------------------------- +NNODES=$SLURM_JOB_NUM_NODES +# Number of MPI tasks per node: +MPITASKS_PER_NODE=$((SLURM_NTASKS/SLURM_JOB_NUM_NODES)) +# Number of OPEN-MP threads per MPI task: +export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK +# Total number of MPI tasks: +MPI_TASKS=$SLURM_NTASKS +# Number of tasks reserved for the I/O server : 2 (hyperthreaded) nodes +NTASKS_IO=$(($(grep processor /proc/cpuinfo | wc -l)/1/$OMP_NUM_THREADS)) + +echo NNODES=$NNODES +echo MPITASKS_PER_NODE=$MPITASKS_PER_NODE +echo +# Number of MPI tasks and OMP threads used in the application : +echo MPI_TASKS=$MPI_TASKS +echo OMP_NUM_THREADS=$OMP_NUM_THREADS + +# ============================================================================= + +# SYSTEM PREFERENCES +# ================== + +# OMP/MPI submission management : +# ----------------------------- +# LOCAL_MPI_WRAPPER : could be "mpiauto", "mpdrun", "mpiexec" ... or empty string +# LOCAL_STACK_LIMIT : could be "unlimited" or empty string + +set -x +#LOCAL_MPI_WRAPPER="/opt/softs/mpiauto/mpiauto --wrap --wrap-stdeo --wrap-stdeo-pack" +LOCAL_MPI_WRAPPER="/opt/softs/mpiauto/mpiauto" +LOCAL_STACK_LIMIT=unlimited +ulimit -l unlimited +set +x + +# Specific environment variables : +# ------------------------------ +set -x +export OMP_STACKSIZE=4G +export KMP_STACKSIZE=4G +export KMP_MONITOR_STACKSIZE=4G +export I_MPI_HARD_FINALIZE=1 +export I_MPI_SCALABLE_OPTIMIZATION=0 +export I_MPI_DAPL_UD_RNDV_EP_NUM=4 +export I_MPI_SHM_SPIN_COUNT=10 +export I_MPI_SPIN_COUNT=10 +set +x + +# File systems : +# ------------ +# Global file system: +export TMPGFS=$TMPDIR +export WORKGFS=$WORKDIR/benchmarks +#MTOOL export TMPGFS=$MTOOL_STEP_WORKSPACE +# Local file system (if preferred): +export TMPLOC=$TMPGFS +echo TMPGFS=$TMPGFS +echo TMPLOC=$TMPLOC + +# Local disks synchronization : +# --------------------------- +export ISYNC=0 +if [ "$MTOOL_IS" = "ON" ] ; then +# synchronization is needed anyway between the steps + export ISYNC=1 +elif [ $NNODES -gt 1 ] && [ "$TMPLOC" != "$TMPGFS" ] ; then +# Local disk synchronization needed: + export ISYNC=1 +fi +echo ISYNC=$ISYNC + +# Miscellaneous : +# ------------- + +# ============================================================================= + +# USER PREFERENCES +# ================ + +#export NAMELDIR=/home/gmap/mrpm/khatib/pack/48t1_main.01#myref/run/cy47.forecast_arome_e700/Namelists +export NAMELDIR=$TESTDIR/Namelists + +HOMEPACK=${HOMEPACK:=$HOME/pack} +export BINDIR=$HOMEPACK/$MYLIB/bin +#export BINDIR=/home/gmap/mrpm/khatib/pack/48t1_main.01#myref/bin +OUTPUTDIR=${OUTPUTDIR:-$PWD} #No cd command have been done before this line + + + +export DATADIR=/scratch/work/khatib/data/cy47.forecast_arome_e700 +#export REFDIR=/home/gmap/mrpm/khatib/benchmarks/apps/modules/cy47.forecast_arome_e700/References +export TOOLSDIR=/home/gmap/mrpm/khatib/benchmarks/tools +#export ROOTDIR_ODB=/home/gmap/mrpm/khatib/odbpools/36t1_bench/cy47.forecast_arome_e700 + +# Check reliability of auxilary directories : +# ----------------------------------------- +ierr=0 +#for var in NAMELDIR BINDIR DATADIR REFDIR TOOLSDIR ; do +for var in NAMELDIR BINDIR DATADIR TOOLSDIR ; do + eval "dir=\$$var" + if [ ! "$dir" ] ; then + echo "$var is not set." + ierr=1 + fi + if [ $ierr -ne 0 ] ; then + exit 1 + fi +done +ierr=0 +for dir in $NAMELDIR $BINDIR $REFDIR $TOOLSDIR ; do + if [ ! -d $dir ] ; then + echo "$dir does not exists." + ierr=1 + fi + if [ $ierr -ne 0 ] ; then + exit 1 + fi +done + +echo TOOLSDIR=$TOOLSDIR +echo NAMELDIR=$NAMELDIR +echo DATADIR=$DATADIR +#echo REFDIR=$REFDIR +echo BINDIR=$BINDIR +#echo ROOTDIR_ODB=$ROOTDIR_ODB + +export PATH=$TOOLSDIR:$PATH +export TOOLSDIR +export DATADIR + +# Software default environment variables : +# -------------------------------------- +set -x +export DR_HOOK=0 +export DR_HOOK_IGNORE_SIGNALS=-1 +export DR_HOOK_SILENT=1 +export DR_HOOK_SHOW_PROCESS_OPTIONS=0 +export MPL_MBX_SIZE=2048000000 +export EC_PROFILE_HEAP=0 +export EC_PROFILE_MEM=0 +export EC_MPI_ATEXIT=0 +export EC_MEMINFO=0 +export OPENBLAS_NUM_THREADS=1 +export MKL_CBWR="AUTO,STRICT" +export MKL_NUM_THREADS=1 +export MKL_DEBUG_CPU_TYPE=5 +set +x + +# Profilers management : +# -------------------- +# FTRACE_JOB : profiler switch +# =0 : no profiler +# =1 : integrated DrHook profiler +# =2 : specific profiler +# +export FTRACE_JOB=1 +echo "FTRACE_JOB=$FTRACE_JOB" + +if [ $FTRACE_JOB -ne 0 ] ; then +# profilings main directory: + if [ -d $JOB_INITDIR ] ; then +# Use the initial job's dir + FTRACE_DIR=$JOB_INITDIR + else +# Set one : + FTRACEDIR= + if [ ! "$FTRACEDIR" ] ; then + echo "FTRACEDIR is not set." + exit 1 + fi + if [ ! -d $FTRACEDIR ] ; then + mkdir -p $FTRACEDIR + if [ $? -ne 0 ] ; then + echo "Can't make directory $FTRACEDIR" + exit 1 + fi + fi + FTRACE_DIR=$FTRACEDIR + fi + SCRATCH_FTRACE_DIR=$TMPGFS +# SCRATCH_FTRACE_DIR=$FTRACE_DIR + if [ $FTRACE_JOB -eq 1 ] ; then + set -x + export DR_HOOK=1 + export DR_HOOK_OPT=prof +# Directory of individual profiles : + export PROFDIR=$SCRATCH_FTRACE_DIR/${JOB_NAME}.d${JOB_ID} +# Merged profiles report filename : + export PROFMRG=$FTRACE_DIR/${JOB_NAME}.h${JOB_ID} + set +x + elif [ $FTRACE_JOB -ge 2 ] ; then + set -x +# Directory of individual profiles : + export PROFDIR=$SCRATCH_FTRACE_DIR/${JOB_NAME}.f${JOB_ID} +# Merged profiles report filename : + export PROFMRG=$FTRACE_DIR/${JOB_NAME}.t${JOB_ID} + set +x + fi +fi + +set +x + +# Listings : +# -------- +set -x +export ECHO_MPSH=OFF +export OUTPUT_LISTING=YES +export LOGDIR=$JOB_INITDIR/${JOB_NAME}.l${JOB_ID} +set +x + +# ODB archives : +# ------------ +# if set to 1, archived Odbs will be gzipped : +set -x +export ARCHIVE_AND_ZIP_ODB=0 +set +x + +# Directory for application output data files : +# ------------------------------------------- +echo +OUTDIR= +OUTDIR=${OUTDIR:=$TMPGFS} +if [ "$TMPGFS" != "$TMPLOC" ] ; then + if [ "$OUTDIR" = "$TMPLOC" ] ; then + echo "Output files on LOCAL file system" + elif [ "$OUTDIR" = "$TMPGFS" ] ; then + echo "Output files on GLOBAL file system" + else + echo "Output files on directory : $OUTDIR" + fi +else + echo "Output files on directory : $OUTDIR" +fi + +# NFS temporary directory for small I/Os +echo +TMPNFS=$(mktemp -d --tmpdir=/tmp/$LOGNAME) +if [ -d $TMPNFS ] ; then + echo "temporary directory on NFS for small I/Os : $TMPNFS" +else + TMPNFS="." +fi + +# ============================================================================= + +# APPLICATION TUNING +# ================== + +# ARPEGE : Forecast +# ***************** + +mkdir -p $TMPLOC +if [ $ISYNC -gt 0 ] ; then + mkdir -p $TMPGFS + cd $TMPGFS +else + cd $TMPLOC +fi + +# Driver-specific environment variables : +# ------------------------------------- +set -x +NAMELIST=namel_previ.48 +CTRLLIST=extra_namelists48.list +LINKS=links_inline48.scpt +EXECUTABLE=MASTERODB +#REFLIST=$REFDIR/forecast.out +EXPLIST=./NODE.001_01 +set +x + +#MTOOL common join=step_2 + +# Namelists modifications : +# ----------------------- + +set -x + +# Number of MPI tasks for the I/O server : +NPROC_IO=$NTASKS_IO + +# Remaining number of MPI tasks : +NPROC=$((MPI_TASKS-NPROC_IO)) + +# Memory cache optimisation: +NPROMA=-16 +NFPROMA=-24 + +# Overall scalar optimisation: +LOPT_SCALAR=.TRUE. + +# Output packing distribution: +NSTROUT=${NPROC} +NSTRIN=${NPROC} + +NPRGPEW=16 +#NPRGPNS=((NPROC/NPRGPEW)) +NPRTRV=16 +#NPRTRW=((NPROC/NPRTRV)) + +set +x + +cat > namelist_mods2 <<EOF + &NAMPARAR + / + &NAMTRANS + LFFTW=.TRUE., + / + &NAMPAR0 + NPRINTLEV=1, + LOPT_SCALAR=${LOPT_SCALAR}, + MBX_SIZE=2048000000, + NPROC=${NPROC}, + NPRGPNS=-, + NPRGPEW=-, + NPRTRW=-, + NPRTRV=-, + / + &NAMDIM + NPROMA=$NPROMA, + / + &NAMFPSC2 + NFPROMA=$NFPROMA, + / + &NAMFPSC2_DEP + NFPROMA_DEP=$NFPROMA, + / + &NAMPAR1 + LSPLIT=.TRUE., + NSTRIN=${NSTRIN}, + NSTROUT=${NSTROUT}, + / + &NAMFA + CMODEL=' ', + / + &NAMIAU + LIAU=.FALSE., + / + &NAMARG + CNMEXP='0000', + / + &NAMCT0 + CSCRIPT_LAMRTC=' ', + CSCRIPT_PPSERVER=' ', + CFPNCF='ECHFP', + NSDITS(0)=0, + NFRSDI=4, + NFPOS=1, + / + &NAMCT1 + N1POS=1, + / + &NAMFPC + CFPDIR='${OUTDIR}/PF', + / + &NAMOPH + CFNHWF='${OUTDIR}/ECHIS', + CFPATH='${OUTDIR}/', + / + &NAMIO_SERV + NPROC_IO=${NPROC_IO}, + NMSG_LEVEL_SERVER=1, + NMSG_LEVEL_CLIENT=1, + NPROCESS_LEVEL=5, + / + &NAMRIP + CSTOP='h24', + TSTEP=50., + / +EOF +cat namelist_mods2 > namelist_modset +\rm -f namelist_mods2 +echo +echo Namelists adaptations : +cat namelist_modset +echo + +set +x +cp $NAMELDIR/$NAMELIST namelist +perl -w $TOOLSDIR/xpnam namelist --dfile=namelist_modset +set -x +echo +/bin/cat namelist.new +set +x +\rm -f namelist_modset namelist +\mv namelist.new fort.4 +set -x + +#MTOOL common + +# ============================================================================= + +# DRIVER +# ====== + +# ****************************** +# * fetch initial data files * +# ****************************** + +#MTOOL common join=step_1 + +set -x +$TOOLSDIR/getdata.sh +set +x + +#MTOOL common + +#MTOOL common join=step_2 + +for file in $(cat $NAMELDIR/$CTRLLIST) ; do + set -x + cp $NAMELDIR/$file . + set +x +done +if [ -s $NAMELDIR/$LINKS ] ; then + set -x + cp $NAMELDIR/$LINKS . + chmod 755 $LINKS + . ./$LINKS + \rm $LINKS + set +x +fi + +#MTOOL common + +# *************** +# * Executable * +# *************** + +#MTOOL common join=step_1 + +echo +set -x +cp $BINDIR/$EXECUTABLE . +set +x +if [ ! -f $EXECUTABLE ] ; then + echo "executable $BINDIR/$EXECUTABLE could not be copied." + exit 1 +fi + +#MTOOL common + +# ******************************** +# * Prepare parallel executions * +# ******************************** + +#MTOOL common join=step_2 + +if [ "$LOCAL_STACK_LIMIT" ] ; then + set -x + ulimit -s $LOCAL_STACK_LIMIT + set +x +fi +# for mpsh : +export MPSH_NPES=$NNODES + +# grib_api environment variables may be determined by the executable : +. grib_api_profile $EXECUTABLE + +# Intel mpi fabric setup depending on what is found in the executable : +. intel_mpi_fabric $EXECUTABLE + +#MTOOL common + +set -x +cd $TMPLOC +set +x +. rttov_profile + +# ******************************************************* +# * Unarchive datasets and local disks Synchronisation * +# ******************************************************* + +if [ $ISYNC -eq 0 ] ; then + set -x +#MTOOL common join=step_1 + $TOOLSDIR/input_sync.sh +#MTOOL common + set +x +else + set -x +#MTOOL common join=step_2 + $TOOLSDIR/input_sync.sh +#MTOOL common + set +x +fi + +# *************** +# * Execution * +# *************** + +#MTOOL common join=step_2 + +mkdir -p $OUTDIR +echo +if [ $(echo $LOCAL_MPI_WRAPPER | grep -c mpiauto) -ne 0 ] ; then + set -x + time $LOCAL_MPI_WRAPPER -np $MPI_TASKS -nnp $MPITASKS_PER_NODE -- ./$EXECUTABLE </dev/null \ + errorcode=$? + 2>&1 | grep -v "FA[DC]GR[AM]: Field .* is not declared in \`faFieldName.def'" + set +x +elif [ "$LOCAL_MPI_WRAPPER" = "srun" ] ; then + set -x + time $LOCAL_MPI_WRAPPER ./$EXECUTABLE </dev/null \ + errorcode=$? + 2>&1 | grep -v "FA[DC]GR[AM]: Field .* is not declared in \`faFieldName.def'" + set +x +elif [ "$LOCAL_MPI_WRAPPER" ] ; then + set -x + time $LOCAL_MPI_WRAPPER -np $MPI_TASKS ./$EXECUTABLE </dev/null \ + errorcode=$? + 2>&1 | grep -v "FA[DC]GR[AM]: Field .* is not declared in \`faFieldName.def'" + set +x +else + set -x + time ./$EXECUTABLE \ + errorcode=$? + 2>&1 | grep -v "FA[DC]GR[AM]: Field .* is not declared in \`faFieldName.def'" + set +x +fi + +# ********************** +# * Post-processings * +# ********************** + +echo +if [ "$OUTPUT_LISTING" = "YES" ] ; then + set -x + $TOOLSDIR/outsync.sh + set +x +fi + +if [ $FTRACE_JOB -gt 0 ] ; then + set -x + $TOOLSDIR/profsync.sh + set +x +fi + +set -x +ls -l $OUTDIR +set +x + +set -x +#errorcode returned by executable is not reliable (always different from 0) +if grep " NSTEP = 1728 CNT0" NODE.001_01 > /dev/null; then + cp $EXPLIST $OUTPUTDIR/ +else + mkdir $OUTPUTDIR/error + cp $EXPLIST $OUTPUTDIR/error/ +fi +#if [ -f $REFLIST ] && [ -f $EXPLIST ] ; then $TOOLSDIR/diffNODE.001_01 $EXPLIST $REFLIST ; fi +set +x +# **************** +# * Cleanups * +# **************** + +set -x +cd $TMPGFS +$TOOLSDIR/cleansync.sh +set +x + +#MTOOL common + +# **************** +# * Epilogue * +# **************** + +set -x +$TOOLSDIR/epilog.sh +set +x +if [ "$MTOOL_IS" != "ON" ] && [ "$AUTO_CLEAN" = "ON" ] ; then + cd $HOME + \rm -rf $TMPGFS +fi + +#MTOOL step id=step_1 target=FRONTEND +#MTOOL step id=step_2 target=SUPERCOMPUTER diff --git a/tools/conf_tests/small_3D/aro48t3.sh b/tools/conf_tests/small_3D/aro48t3.sh new file mode 100755 index 0000000000000000000000000000000000000000..e4dee94ab7fedf14b4354eef27618864b8095488 --- /dev/null +++ b/tools/conf_tests/small_3D/aro48t3.sh @@ -0,0 +1,1208 @@ +#!/bin/bash +#SBATCH -n 4 +#SBATCH --mem=20000 +#SBATCH --export=MYLIB,HOME,HOMEPACK,TMPDIR,OUTPUTDIR,TESTDIR +#SBATCH -t 00:10:00 +#SBATCH -N 1 +#SBATCH -p normal256 + +#The MYLIB variable must contain the gmkpack pack name +#The TESTDIR variable must contain the test directory +#Results will be stored in the local directory + +#Other environment varaibles that can be set: +#OUTPUTDIR + +date + +OUTPUTDIR=${OUTPUTDIR:-$PWD} +case=riette2 +#rekchemin="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" #Resources for the run must be in the same directory as this script +rekchemin=$TESTDIR + +NPROC=4 +NSTRIN=$NPROC +NSTROUT=1 +NPRTRW_NPRTRV="" +NPRTRW_NPRTRV=" NPRTRW=$NPROC, + NPRTRV=1," +export OMP_NUM_THREADS=1 + +#MYLIB=48t1_main.01%jpdup + +export DR_HOOK=1 +#export DR_HOOK_IGNORE_SIGNALS=-1 +export DR_HOOK_NOT_MPI=1 +export DR_HOOK_SILENT=1 +export DR_HOOK_OPT= + +export EC_PROFILE_HEAP=0 +export EC_PROFILE_MEM=0 +export EC_MPI_ATEXIT=0 +export DR_HOOK_SHOW_PROCESS_OPTIONS=0 +export EC_MEMINFO=0 +export TVSEARCHPATH=$SOURCE + +HOMEPACK=${HOMEPACK:=$HOME/pack} +SOURCE=$HOMEPACK/$MYLIB/src/local +LOADIR=$HOMEPACK/$MYLIB/bin + +TMPDIR=${TMPDIR:=$HOME/tmp} +TMPLOC=$TMPDIR/rundir.$$ +TMPWAIT=$TMPDIR/wait_queue.$$ +mkdir $TMPWAIT +mkdir $TMPLOC +cd $TMPLOC + +export RTTOV_COEFDIR=$PWD + +# ************************** +# * Saisie des NAMELISTS * +# ************************** + +CNMEXP='FPOS' + +echo +/bin/cat <<FIN > fort.4 + &NACIETEO + / + &NACOBS + / + &NACTAN + / + &NACTEX + / + &NACVEG + / + &NADOCK + / + &NAEAEM7 + / + &NAEAER + / + &NAECOAPHY + / + &NAEPHLI + / + &NAEPHY + / + &NAERAD + LRRTM=.TRUE., + LSRTM=.FALSE., + NAER=1, + NICEOPT=3, + NLIQOPT=3, + NOVLP=6, + NOZOCL=2, + NRADFR=18, + NRADIP=3, + NRADLP=2, + NSW=6, + RLWINHF=1, + RRE2DE=0.64952, + RSWINHF=1, + / + &NAERCLI + / + &NAEVOL + / + &NAIMPO + / + &NALORI + / + &NAMAFN + GFP_CLSG%CLNAME='SURFACCGRAUPEL', + GFP_CLSP%CLNAME='SURFACCPLUIE', + GFP_CLSS%CLNAME='SURFACCNEIGE', + GFP_SFIS%IBITS=16, + GFP_ST%CLNAME='SURFTEMPERATURE', + GFP_ST%IANO=0, + GFP_ST%IBITS=12, + GFP_X10U%CLNAME='CLSVENT.ZONAL', + GFP_X10U%IANO=0, + GFP_X10U%IBITS=12, + GFP_X10V%CLNAME='CLSVENT.MERIDIEN', + GFP_X10V%IANO=0, + GFP_X10V%IBITS=12, + GFP_X2RH%CLNAME='CLSHUMI.RELATIVE', + GFP_X2RH%IANO=0, + GFP_X2RH%IBITS=12, + GFP_X2T%CLNAME='CLSTEMPERATURE', + GFP_X2T%IANO=1, + GFP_XCCC%IBITS=8, + GFP_XHCC%IBITS=8, + GFP_XLCC%IBITS=8, + GFP_XLSG%CLNAME='SURFINSGRAUPEL', + GFP_XLSP%CLNAME='SURFINSPLUIE', + GFP_XLSS%CLNAME='SURFINSNEIGE', + GFP_XMCC%IBITS=8, + GFP_XN2T%IBITS=12, + GFP_XTCC%IBITS=8, + GFP_XUGST%CLNAME='CLSU.RAF60M.XFU', + GFP_XUGST%IANO=0, + GFP_XUGST%IBITS=12, + GFP_XVGST%CLNAME='CLSV.RAF60M.XFU', + GFP_XVGST%IANO=0, + GFP_XVGST%IBITS=12, + GFP_XX2T%IBITS=12, + GFP_XXDIAGH%IBITS=12, + TFP_ABS%ZFK=32., + TFP_CLF%IBITS=6, + TFP_EDR%CLNAME='EDR', + TFP_EDR%IBITS=16, + TFP_EDR%IGRIB=136, + TFP_GR%IBITS=12, + TFP_HL%IBITS=12, + TFP_HTB%IBITS=16, + TFP_HTB%LLGP=.TRUE., + TFP_HU%IBITS=12, + TFP_MSAT9C2%IBITS=12, + TFP_MSAT9C6%IBITS=12, + TFP_MSLNH%IBITS=12, + TFP_PV%ZFK=64., + TFP_RCLS%IBITS=12, + TFP_RR%IBITS=12, + TFP_SN%IBITS=12, + TFP_T%IBITS=12, + TFP_TCLS%IBITS=12, + TFP_TH%IBITS=12, + TFP_THPW%IBITS=12, + TFP_THV%IBITS=12, + TFP_TN%IBITS=12, + TFP_TWV%IBITS=12, + TFP_TX%IBITS=12, + TFP_U%IBITS=12, + TFP_V%IBITS=12, + TFP_VOR%ZFK=32., + TFP_VV%ZFK=32., + / + &NAMARG + CNMEXP='${CNMEXP}', + LECMWF=.FALSE., + LELAM=.TRUE., + LSLAG=.TRUE., + NCONF=1, + NSUPERSEDE=1, + / + &NAMARPHY + LKFBCONV=.FALSE., + LKFBD=.FALSE., + LKFBS=.FALSE., + LMFSHAL=.TRUE., + LMICRO=.TRUE., + LMPA=.TRUE., + LMSE=.TRUE., + LTURB=.TRUE., + / + &NAMCA + / + &NAMCAPE + / + &NAMCFU + LCUMFU=.TRUE., + LFPLS=.TRUE., + LFPLSG=.TRUE., + LFR=.TRUE., + LFRRC=.TRUE., + LFSF=.TRUE., + LNEBPAR=.TRUE., + LNEBTT=.TRUE., + LRAYD=.TRUE., + LRAYS=.TRUE., + / + &NAMCHEM + / + &NAMCHET + / + &NAMCHK + / + &NAMCLA + / + &NAMCLDP + / + &NAMCLI + / + &NAMCLOP15 + / + &NAMCLTC + / + &NAMCOK + / + &NAMCOM + / + &NAMCOSJO + / + &NAMCOUPLO4 + / + &NAMCT0 + CFPNCF='ECHFP', + CNPPATH=' ', + LAROME=.TRUE., + LNHEE=.TRUE., + LSCREEN_OPENMP=.FALSE., + LSPRT=.TRUE., + LTWOTL=.TRUE., + NFPOS=1, + NFRSDI=18, + NSDITS(0)=0, + NFRHIS=72, + NHISTS(0)=0, + NFRPOS=72, + NPOSTS(0)=0, + NFRSFXHIS=72, + NSFXHISTS(0)=0, + NFRDHFD=72, + NDHFDTS(0)=0, + / + &NAMCT1 + LRFILAF=.FALSE., + N1HIS=1, + N1POS=1, + N1RES=0, + N1SDI=1, + N1SFXHIS=1, + N1GDI=0, + / + &NAMCUMF + / + &NAMCUMFS + / + &NAMCVER + / + &NAMCVMNH + / + &NAMDDH + LDDH_OMP=.TRUE., + LHDDOP=.TRUE., + LHDHKS=.TRUE., + LHDEFD=.TRUE., + LFLEXDIA=.TRUE., + BDEDDH(1,1)=3, + BDEDDH(2,1)=1, + BDEDDH(3,1)=358.8 + BDEDDH(4,1)=45.1 + BDEDDH(5,1)=360.3 + BDEDDH(6,1)=44.5 + / + &NAMDFI + / + &NAMDIM + NPROMA=-50, + / + &NAMDIMO + / + &NAMDIM_TRAJ + / + &NAMDPHY + / + &NAMDPRECIPS + / + &NAMDYN + LADVF=.TRUE., + LQMPD=.FALSE., + LQMT=.FALSE., + LQMVD=.FALSE., + LRHDI_LASTITERPC=.TRUE., + NITMP=4, + NSITER=1, + NSPDLAG=3, + NSVDLAG=3, + NTLAG=3, + NVLAG=3, + NWLAG=3, + RDAMPDIV=20., + RDAMPPD=20., + RDAMPQ=0., + RDAMPT=0., + RDAMPVD=20., + RDAMPVOR=20., + REPS1=0., + REPS2=0., + REPSM1=0., + REPSM2=0., + REPSP1=0., + SDRED=1., + SIPR=90000., + SITR=350., + SITRA=100., + SLHDA0=0.25, + SLHDD00=0.000065, + VESL=0.05, + XIDT=0., + ZSLHDP1=1.7, + ZSLHDP3=0.6, + / + &NAMDYNA + LCOMADH=.TRUE., + LCOMADV=.FALSE., + LCOMAD_GFL=.TRUE., + LCOMAD_SP=.TRUE., + LCOMAD_SPD=.TRUE., + LCOMAD_SVD=.TRUE., + LCOMAD_T=.TRUE., + LCOMAD_W=.TRUE., + LGWADV=.TRUE., + LNESC=.TRUE., + LPC_CHEAP=.TRUE., + LPC_FULL=.TRUE., + LRDBBC=.FALSE., + LSETTLS=.FALSE., + LSETTLST=.TRUE., + LSLHD_GFL=.TRUE., + LSLHD_OLD=.FALSE., + LSLHD_SPD=.FALSE., + LSLHD_SVD=.FALSE., + LSLHD_T=.FALSE., + LSLHD_W=.FALSE., + ND4SYS=2, + NDLNPR=1, + NPDVAR=2, + NVDVAR=4, + SLHDEPSH=0.08, + SLHDKMAX=6, + / + &NAMDYNCORE + / + &NAMEMIS_CONF + / + &NAMENKF + / + &NAMFA + CMODEL='OUTPUTID', + LEXTERN=.TRUE., + LSUPPDATE=.FALSE., + NBITCS=-1, + NBITPG=-1, + NSTRON=-1, + / + &NAMFAINIT + JPXTRO=2000, + / + &NAMFPC + CFP2DF(1)='SURFPRESSION', + CFP2DF(2)='MSL_NHPRESSURE', + CFP2DF(3)='SURFTOT.WAT.VAPO', + CFP2DF(4)='SURFISOTPW0.MALT', + CFP2DF(5)='SURFCAPE.POS.F00', + CFP2DF(6)='C002_METEOSAT_09_SEVIRI.POS', + CFP2DF(7)='C006_METEOSAT_09_SEVIRI.POS', + CFP2DF(8)='SURFREFLECT.MAX', + CFP2DF(9)='SURFISOTPW1.MALT', + CFP2DF(10)='SURFISOTPW2.MALT', + CFP3DF(1)='GEOPOTENTIEL', + CFP3DF(2)='TEMPERATURE', + CFP3DF(3)='VENT_ZONAL', + CFP3DF(4)='VENT_MERIDIEN', + CFP3DF(5)='HUMI_RELATIVE', + CFP3DF(6)='THETA_PRIM_W', + CFP3DF(7)='PRESSURE', + CFP3DF(8)='ABS_VORTICITY', + CFP3DF(9)='VITESSE_VERTICALE', + CFP3DF(10)='TEMPE_POTENT', + CFP3DF(11)='POT_VORTICIT', + CFP3DF(12)='SIM_REFLECTI', + CFP3DF(13)='RAIN', + CFP3DF(14)='SNOW', + CFP3DF(15)='GRAUPEL', + CFP3DF(16)='ICE_CRYSTAL', + CFP3DF(17)='CLOUD_WATER', + CFP3DF(18)='VERT.VELOCIT', + CFP3DF(19)='DIVERGENCE', + CFP3DF(20)='THETA_VIRTUA', + CFP3DF(21)='TKE', + CFP3DF(22)='CLOUD_FRACTI', + CFP3DF(23)='ISOT_ALTIT', + CFP3DF(24)='EDR', + CFPCFU(1)='SURFTENS.TOTA.ZO', + CFPCFU(2)='SURFTENS.TOTA.ME', + CFPCFU(3)='SURFACCPLUIE', + CFPCFU(4)='SURFACCNEIGE', + CFPCFU(5)='SURFACCGRAUPEL', + CFPCFU(6)='SOMMFLU.RAY.SOLA', + CFPCFU(7)='SURFFLU.RAY.SOLA', + CFPCFU(8)='SOMMFLU.RAY.THER', + CFPCFU(9)='SURFFLU.RAY.THER', + CFPCFU(10)='SURFFLU.LAT.MTOT', + CFPCFU(11)='SURFFLU.MTOTA.NE', + CFPCFU(12)='SURFFLU.CHA.SENS', + CFPCFU(13)='SURFRAYT SOLA DE', + CFPCFU(14)='SURFRAYT THER DE', + CFPCFU(15)='SURFRAYT SOL CL', + CFPCFU(16)='SURFRAYT THER CL', + CFPCFU(17)='SURFRAYT DIR SUR', + CFPDOM(1)='FRANGP0025', + CFPFMT='LALON', + CFPPHY(1)='SURFTEMPERATURE', + CFPPHY(2)='INTSURFGEOPOTENT', + CFPPHY(3)='SURFRESERV.NEIGE', + CFPXFU(1)='CLSTEMPERATURE', + CFPXFU(2)='CLSHUMI.RELATIVE', + CFPXFU(3)='CLSVENT.ZONAL', + CFPXFU(4)='CLSVENT.MERIDIEN', + CFPXFU(5)='SURFNEBUL.TOTALE', + CFPXFU(6)='SURFNEBUL.HAUTE', + CFPXFU(7)='SURFNEBUL.MOYENN', + CFPXFU(8)='SURFNEBUL.BASSE', + CFPXFU(9)='CLSMAXI.TEMPERAT', + CFPXFU(10)='CLSMINI.TEMPERAT', + CFPXFU(11)='CLPMHAUT.MOD.XFU', + CFPXFU(12)='SURFDIAGHAIL', + LCRITSNOWTEMP=.FALSE., + LFPCAPEX=.TRUE., + LFPMOIS=.TRUE., + LFPPACKING=.FALSE., + LWIDER_DOM=.TRUE., + L_READ_MODEL_DATE=.TRUE., + NFITI=1, + NFITV=1, + NFPCAPE=5, + NFPCLI=1, + NFPGRIB=1, + NFPINPHY=4, + NITERPV=8, + RENTRA=0.0001, + RFP3H(1)=10., + RFP3H(2)=20., + RFP3H(3)=35., + RFP3H(4)=50., + RFP3H(5)=75., + RFP3H(6)=100., + RFP3H(7)=150., + RFP3H(8)=200., + RFP3H(9)=250., + RFP3H(10)=375., + RFP3H(11)=500., + RFP3H(12)=625., + RFP3H(13)=750., + RFP3H(14)=875., + RFP3H(15)=1000., + RFP3H(16)=1125., + RFP3H(17)=1250., + RFP3H(18)=1375., + RFP3H(19)=1500., + RFP3H(20)=1750., + RFP3H(21)=2000., + RFP3H(22)=2250., + RFP3H(23)=2500., + RFP3H(24)=2750., + RFP3H(25)=3000., + RFP3I(1)=-273.15, + RFP3I(2)=-263.15, + RFP3I(3)=-261.15, + RFP3I(4)=-253.15, + RFP3P(1)=10000., + RFP3P(2)=12500., + RFP3P(3)=15000., + RFP3P(4)=17500., + RFP3P(5)=20000., + RFP3P(6)=22500., + RFP3P(7)=25000., + RFP3P(8)=27500., + RFP3P(9)=30000., + RFP3P(10)=35000., + RFP3P(11)=40000., + RFP3P(12)=45000., + RFP3P(13)=50000., + RFP3P(14)=55000., + RFP3P(15)=60000., + RFP3P(16)=65000., + RFP3P(17)=70000., + RFP3P(18)=75000., + RFP3P(19)=80000., + RFP3P(20)=85000., + RFP3P(21)=90000., + RFP3P(22)=92500., + RFP3P(23)=95000., + RFP3P(24)=100000., + RFP3PV(1)=0.0000015, + RFP3PV(2)=0.000002, + RFPCD2=5., + RFPCSAB=50., + RFPVCAP=7000., + / + &NAMFPD + NLAT(1)=41, + NLON(1)=41, + RLONC(1)=-0.71, + RLATC(1)=44.8, + RDELX(1)=0.025, + RDELY(1)=0.025, + / + &NAMFPDY2 + / + &NAMFPDYF + / + &NAMFPDYH + / + &NAMFPDYI + / + &NAMFPDYP + / + &NAMFPDYS + / + &NAMFPDYT + / + &NAMFPDYV + / + &NAMFPF + NFMAX(1)=60, + NFMAX(2)=80, + / + &NAMFPG + NFPDISTRIB=1, + / + &NAMFPIOS + / + &NAMFPMOVE + / + &NAMFPPHY + / + &NAMFPSC2 + NFPROMA=-50, + / + &NAMFPSC2_DEP + NFPROMA_DEP=-50, + / + &NAMGEM + / + &NAMGFL + NGFL_EZDIAG=4, + YEZDIAG_NL(1)%CNAME='EZDIAG01', + YEZDIAG_NL(1)%LREQOUT=.FALSE., + YEZDIAG_NL(2)%CNAME='EZDIAG02', + YEZDIAG_NL(2)%LREQOUT=.FALSE., + YEZDIAG_NL(3)%CNAME='EZDIAG03', + YEZDIAG_NL(3)%LREQOUT=.FALSE., + YEZDIAG_NL(4)%CNAME='INPRRTOT3D', + YEZDIAG_NL(4)%LREQOUT=.TRUE., + YG_NL%LQM=.TRUE., + YG_NL%LSLHD=.TRUE., + YG_NL%NCOUPLING=-1, + YG_NL%NREQIN=1, + YG_NL%REFVALC=0., + YIRAD_NL%LGP=.TRUE., + YI_NL%LQM=.TRUE., + YI_NL%LSLHD=.TRUE., + YI_NL%NCOUPLING=-1, + YI_NL%NREQIN=1, + YI_NL%REFVALC=0., + YLRAD_NL%LGP=.TRUE., + YL_NL%LQM=.TRUE., + YL_NL%LSLHD=.TRUE., + YL_NL%NCOUPLING=-1, + YL_NL%NREQIN=1, + YL_NL%REFVALC=0., + YQ_NL%LCOMAD=.TRUE., + YQ_NL%LQM=.TRUE., + YQ_NL%LSLHD=.FALSE., + YQ_NL%NREQIN=1, + YR_NL%LQM=.TRUE., + YR_NL%LSLHD=.TRUE., + YR_NL%NCOUPLING=-1, + YR_NL%NREQIN=1, + YR_NL%REFVALC=0., + YS_NL%LQM=.TRUE., + YS_NL%LSLHD=.TRUE., + YS_NL%NCOUPLING=-1, + YS_NL%NREQIN=1, + YS_NL%REFVALC=0., + YTKE_NL%NCOUPLING=0, + YTKE_NL%NREQIN=1, + / + &NAMGRIB + / + &NAMGWD + / + &NAMGWDIAG + / + &NAMGWWMS + / + &NAMIAU + ALPHAIAU=0.5, + LIAU=.FALSE., + TSTARTIAU=1800, + TSTOPIAU=5340, + / + &NAMICE + / + &NAMINI + LDFI=.FALSE., + / + &NAMINTFLEX + / + &NAMIOMI + / + &NAMIOS + / + &NAMIO_SERV + NIO_SERV_BUF_MAXSIZE=20, + NIO_SERV_METHOD=2, + NMSG_LEVEL_CLIENT=0, + NMSG_LEVEL_SERVER=0, + NPROCESS_LEVEL=5, + NPROC_IO=0, + / + &NAMJBCODES + / + &NAMJFH + / + &NAMJG + / + &NAMLCZ + / + &NAMLSFORC + / + &NAMMARS + / + &NAMMCC + / + &NAMMCUF + / + &NAMMKODB + / + &NAMMODERR + / + &NAMMTS + / + &NAMMWAVE + / + &NAMNPROF + / + &NAMNUD + / + &NAMOBS + / + &NAMONEDVAR + / + &NAMOOPS + / + &NAMOPH + CFNHWF='ECHIS', + LINC=.TRUE., + NTIMEFMT=1, + / + &NAMOPTCMEM + / + &NAMPAR0 + LOPT_SCALAR=.TRUE., + NPRINTLEV=1, + LMPOFF=.FALSE., + MBX_SIZE=2048000000, + MP_TYPE=2, + NOUTPUT=1, + NPROC=$NPROC, +$NPRTRW_NPRTRV + / + &NAMPAR1 + LEQ_REGIONS=.FALSE., + LSLONDEM=.TRUE., + LSPLIT=.TRUE., + LSYNC_SLCOM=.FALSE., + LSYNC_TRANS=.FALSE., + L_GATHERV_WRGP=.FALSE., + NCOMBFLEN=1800000, + NSTRIN=$NSTRIN, + NSTROUT=$NSTROUT, + / + &NAMPARAR + CFRAC_ICE_ADJUST='S', + CFRAC_ICE_SHALLOW_MF='S', + CMICRO='ICE3', + CSEDIM='STAT', + CSNOWRIMING='M90', + LCONVHG=.TRUE., + LCRFLIMIT=.TRUE., + LCRIAUTI=.TRUE., + LEVLIMIT=.TRUE., + LFEEDBACKT=.TRUE., + LFPREC3D=.TRUE., + LNULLWETG=.TRUE., + LNULLWETH=.TRUE., + LOLSMC=.TRUE., + LOSEDIC=.TRUE., + LOSIGMAS=.TRUE., + LOSUBG_COND=.TRUE., + LSEDIM_AFTER=.FALSE., + LWETGPOST=.TRUE., + LWETHPOST=.TRUE., + NMAXITER_MICRO=1, + NPRINTFR=10000, + NPTP=1, + RCRIAUTC=0.001, + RCRIAUTI=0.0002, + RT0CRIAUTI=-5., + VSIGQSAT=0.02, + XFRACM90=0.1, + XMRSTEP=0.00005, + XSPLIT_MAXCFL=0.8, + XTSTEP_TS=0., + / + &NAMPHMSE + LPGDFWR=.FALSE., + / + &NAMPHY + LAERODES=.TRUE., + LAEROLAN=.TRUE., + LAEROSEA=.TRUE., + LAEROSOO=.TRUE., + LEDR=.TRUE., + LMPHYS=.TRUE., + LO3ABC=.TRUE., + LRAYFM=.TRUE., + / + &NAMPHY0 + ALMAV=300., + BEDIFV=0.05, + ECMNP=3000., + GCCSV=0., + GCVADS=0.8, + GCVALFA=0.000045, + GCVBETA=0.2, + GCVMLT=0.00016, + GCVNU=0.000025, + GCVPSI=1., + GCVPSIE=1., + GDDEVA=0.25, + GDDSDE=0.5, + GWDCD=6., + HUCOE=0.5, + HUTIL=1.8, + QSSC=400., + QSSUSC=0.75, + QSSUSS=0.4, + QSSUSV=250., + QSUSXC=0.0002, + QSUSXS=0.0003, + QXRAL=130., + QXRDEL=0.49, + QXRHX=0.99, + QXRR=0.25, + RCVEVAP=0.25, + REFLKUO=5000., + REVGSL=15., + SCO=-20., + TDDGP=0.8, + TENTR=0.0000025, + TENTRX=0.00008, + TUDGP=0.8, + UHDIFV=0.0008, + USURIC=0.175, + USURICE=0.5, + USURICL=1., + USURID=0.1, + USURIDE=0.25, + VZ0CM=0.00015, + XMAXLM=5000., + XMINLM=10., + / + &NAMPHY1 + ALBMIN=0.65, + ALCRIN=0.75, + GCGEL=0.00003, + GCGELS=0.00005, + GNEIMX=1.8, + GNEIMXS=1.8, + RCTVEG(3)=0.000012, + RCTVEG(4)=0.00001, + / + &NAMPHY2 + FACRAF=3.8, + HTKERAF=20., + LMULAF=.TRUE., + LRAFTKE=.TRUE., + LRAFTUR=.TRUE., + XDAMP=1., + XMULAF=-1.85, + / + &NAMPHY3 + / + &NAMPHYDS + / + &NAMPONG + / + &NAMPPC + / + &NAMPPVI + / + &NAMPRE + / + &NAMRAD15 + / + &NAMRADCMEM + / + &NAMRCF + / + &NAMRCOEF + / + &NAMRES + / + &NAMRGRI + / + &NAMRINC + / + &NAMRIP + TSTEP=50., + CSTOP='h2', + / + &NAMRIP0 + / + &NAMRLX + / + &NAMSATS + LPARTIAL_COEF_FILES=.TRUE., + / + &NAMSCC + / + &NAMSCEN + / + &NAMSCM + / + &NAMSEKF + / + &NAMSENS + / + &NAMSFXCMP + CFLDNAME(1)='????????????????', + NBBITS(1)=24, + / + &NAMSIMPHL + / + &NAMSPNG + / + &NAMSPSDT + / + &NAMSTA + / + &NAMSTOPH + / + &NAMSWE + / + &NAMTESTVAR + / + &NAMTHLIM + / + &NAMTOPH + ETCVIM=5000., + ETNEBU=5000., + ETPLUI=5000., + XDRMTK=6.0D-7, + XDRMTP=800., + XDRMUK=3.0D-7, + XDRMUP=800., + / + &NAMTRAJP + / + &NAMTRANS + / + &NAMTRANS0 + / + &NAMTS + / + &NAMVAR + / + &NAMVARBC + / + &NAMVARBC_AIREP + / + &NAMVARBC_ALLSKY + / + &NAMVARBC_GBRAD + / + &NAMVARBC_RAD + / + &NAMVARBC_SFCOBS + / + &NAMVARBC_TCWV + / + &NAMVARBC_TO3 + / + &NAMVAREPS + / + &NAMVDF + / + &NAMVDOZ + / + &NAMVOLCANO + / + &NAMVRTL + / + &NAMVV0 + / + &NAMVV1 + / + &NAMVWRK + / + &NAMWAVELETJB + / + &NAMXFU + LXCLP=.TRUE., + LXCLS=.TRUE., + LXFU=.TRUE., + LXNEBPA=.TRUE., + LXNEBTT=.TRUE., + LXNUVCLS=.TRUE., + LXPLS=.TRUE., + LXPLSG=.TRUE., + LXQCLS=.TRUE., + LXR=.TRUE., + LXSOIL=.FALSE., + LXTHW=.TRUE., + LXTRT=.TRUE., + LXTTCLS=.TRUE., + LXXDIAGH=.TRUE., + LXXGST=.TRUE., + NFRRAZ=72, + NRAZTS(0)=0, + / + &NAM_CANAPE + / + &NAM_DISTRIBUTED_VECTORS + / + &NAPHLC + / + &NEMCT0 + / + &NEMDIM + / + &NEMDYN + / + &NEMELBC0A + LESPCPL=.TRUE., + NBICNHX=2, + NBICOP=2, + NBICOT=2, + NBICOU=2, + NBICPD=2, + NBICVD=2, + NECRIPL=1, + / + &NEMELBC0B + NEFRSPCPL=1, + NEK0=20, + NEK1=30, + NEN1=4, + NEN2=8, + SPNUDDIV=0.01, + SPNUDQ=0., + SPNUDT=0.01, + SPNUDVOR=0.01, + TEFRCL=3600., + / + &NEMFPEZO + / + &NEMGEO + / + &NEMJK + / + &NEMVAR + / + &NEMWAVELET + / + &NAETLDIAG + / + &NAMMETHOX + / + &NAMSPP + / + &NAMACV + / + &NAMFPOBJ + / + &NAMNORGWD + / + &NAMTRAJ + / + &NAMSATSIM + / + &NAMDVISI + / + &NAMNUDGLH + / + &NAMPERTPAR + / +FIN +/bin/cat fort.4 + +/bin/cat <<FIN > EXSEG1.nam + &NAM_DIAG_ISBAN + LPGD=.TRUE., + LSURF_MISC_BUDGET=.TRUE., + / + &NAM_DIAG_SURFN + LCOEF=.TRUE., + LSURF_BUDGET=.TRUE., + N2M=2, + / + &NAM_ISBAN + CSCOND='NP89', + / + &NAM_REPROD_OPER + LREPROD_OPER=.TRUE., + / + &NAM_SEAFLUXN + CSEA_FLUX='ECUME', + LPWG=.FALSE., + LPRECIP=.FALSE., + LPWEBB=.FALSE., + / + &NAM_SSON + CROUGH='Z01D', + XFRACZ0=5., + LDSV=.FALSE., + / + &NAM_SURF_ATM + XRIMAX=0.2, + LNOSOF=.TRUE., + / + &NAM_SURF_CSTS + XZ0SN=0.01, + XZ0HSN=0.001, + XEMISSN=0.99, + / + &NAM_WRITE_DIAG_SURFN + LPROVAR_TO_DIAG=.FALSE., + LSELECT=.TRUE., +CSELECT(1)='T2M','HU2M','XX','YY','DX','DY','SST','Z0SEA','TS_WATER','Z0WATER','TG1','TG2','TG3','WG1','WG2','WG3','WGI1','WGI2','WGI3','WR','WSN_VEG1','RSN_VEG1','ASN_VEG','TSRAD_NAT','RESA','TROOF1','TROOF2','TROOF3','TROOF4','TROOF5','WS_ROOF','TROAD1','TROAD2','TROAD3','TROAD4','TROAD5','WS_ROAD','TWALL1','TWALL2','TWALL3','TWALL4','TWALL5','TI_BLD','T_WIN1','TI_ROAD','WSN_RF1','RSN_RF1','TSN_RF1','ASN_RF','WSN_RD1','RSN_RD1','TSN_RD1','ASN_RD','TCANYON','QCANYON','STORAGE_TYPE','MASDEV','VERSION','BUG','DIM_FULL','DTCUR','LAT0','LON0','RPK','BETA','LATORI','LONORI','IMAX','JMAX','RW_PRECIP','BUDC','SEA_OCEAN','SEA_SBL','WAT_SBL','SN_VEG_N','SN_VEG','LSNOW_FRAC_T','GLACIER','TEMPARP','NLITTER','NLITTLEVS','NSOILCARB','ISBA_CANOPY','SN_RF_N','SN_RF','SN_RD_N','SN_RD','SN_RD_TYP','SN_RF_TYP','TEB_CANOPY','STORAGETYPE','CARTESIAN','GRID_TYPE','SN_VEG_TYP','RESPSL','ROAD_DIR','WALL_OPT','LAI','VEG','RSMIN','DG2','_FBUF_SIZE','_FBUF_DIM1','_FBUF_DIM2','_FBUF_NAME','_FBUF_TYPE','_FBUF_MASK','LCPL_GCM','HANDLE_SIC','SSS', + / + &NAM_WRITE_SURF_ATM + LNOWRITE_TEXFILE=.TRUE., + / +FIN +/bin/cat EXSEG1.nam + +# ***************************************** +# * Acquisition du fichier de demarrage * +# ***************************************** + +echo +for hh in 0 1 2 3 4 5 6 ; do + N=`expr $hh / 1 ` + set -x + ln -s $rekchemin/data/aro/$case/ELSCFFCSTALBC000${N}_l15 ELSCF${CNMEXP}ALBC00${N} + set +x +done +set -x +ln -s $rekchemin/data/aro/$case/ICMSHFCSTINIT_l15 ICMSH${CNMEXP}INIT +ln -s $rekchemin/data/aro/$case/ICMSHFCSTINIT.sfx ICMSH${CNMEXP}INIT.sfx +ln -s $rekchemin/data/surfex/v8/ecoclimapI_covers_param.bin . +ln -s $rekchemin/data/surfex/v8/ecoclimapII_eu_covers_param.bin . +ln -s $rekchemin/data/surfex/v8/ecoclimapII_af_covers_param.bin . +ln -s $rekchemin/data/aro/$case/Const.Clim Const.Clim +ln -s $rekchemin/data/aro/$case/Const.Clim.sfx Const.Clim.sfx +ln -s $rekchemin/data/aro/$case/const.clim.FRANGP0025 const.clim.FRANGP0025 +ln -s $rekchemin/data/rttov12/rtcoef_meteosat_9_seviri.dat . +ln -s $rekchemin/data/rttov12/rtcoef_meteosat_10_seviri.dat . +ln -s $rekchemin/data/rttov12/sccldcoef_meteosat_9_seviri.dat . +set +x +tar xfz $rekchemin/data/rtm/radiation_params.47r1_light.tgz + +# *************** +# * Chargement * +# *************** + +echo +set -x +\ln -s $LOADIR/MASTERODB MASTER +set +x +if ldd MASTER | grep openmpi > /dev/null; then + #On est sur PC + MPILIB=$(ldd MASTER | grep openmpi | tail -1 | awk '{print $3}' | awk -F "/" '{print $(NF-2)}') + MPIRUN="$(echo $(dirname $(dirname $(ldd MASTER | grep openmpi| tail -1 | awk '{print $3}'))))/bin/orterun --oversubscribe -np $NPROC" + GRIB_API=$(dirname $(dirname $(ldd MASTER | grep grib_api | head -1 | awk '{print $3}') 2>/dev/null) 2>/dev/null) + ECCODES=$(dirname $(dirname $(ldd MASTER | grep eccodes | head -1 | awk '{print $3}') 2>/dev/null) 2>/dev/null) + export GRIB_SAMPLES_PATH=$GRIB_API/share/grib_api/ifs_samples/grib1 + export GRIB_DEFINITION_PATH=$GRIB_API/share/grib_api/definitions + export ECCODES_SAMPLES_PATH=$ECCODES/share/eccodes/ifs_samples/grib1 + export ECCODES_DEFINITION_PATH=$rekchemin/data/eccodes_extras_definitions:$ECCODES/share/eccodes/definitions +else + #On est sur HPC + #MPIRUN="$(echo $(dirname $(dirname $(ldd MASTER | grep libmpi| tail -1 | awk '{print $3}'))))/bin/mpirun -wdir $PWD" + NNODES=$SLURM_JOB_NUM_NODES + MPITASKS_PER_NODE=$((SLURM_NTASKS/SLURM_JOB_NUM_NODES)) + MPI_TASKS=$SLURM_NTASKS + MPIRUN="/opt/softs/mpiauto/mpiauto -np $MPI_TASKS -nnp $MPITASKS_PER_NODE --" + export OMP_STACKSIZE=4G + export KMP_STACKSIZE=4G + export KMP_MONITOR_STACKSIZE=4G + export DR_HOOK=1 + export DR_HOOK_IGNORE_SIGNALS=-1 + export DR_HOOK_SILENT=1 + export DR_HOOK_SHOW_PROCESS_OPTIONS=0 + export MPL_MBX_SIZE=2048000000 + export EC_PROFILE_HEAP=0 + export EC_PROFILE_MEM=0 + export EC_MPI_ATEXIT=0 + export EC_MEMINFO=0 + export OPENBLAS_NUM_THREADS=1 + export MKL_CBWR="AUTO,STRICT" + export MKL_NUM_THREADS=1 + export MKL_DEBUG_CPU_TYPE=5 + export ECCODES_SAMPLES_PATH=/opt/softs/libraries/ICC_2018.5.274/eccodes-2.17.0/share/eccodes/ifs_samples/grib1 + export ECCODES_DEFINITION_PATH=/opt/softs/libraries/ICC_2018.5.274/eccodes-2.17.0/share/eccodes/definitions +fi +echo $MPIRUN +set +x +if [ ! -f MASTER ] ; then echo No executable MASTER;exit 1;fi + +# *************** +# * Execution * +# *************** + +echo +echo OMP_NUM_THREADS=$OMP_NUM_THREADS +set -x +ulimit -s unlimited +$MPIRUN $PWD/MASTER >lola +set +x +echo +##if [ -f lola ] ; then +## echo;echo Standard output :;echo;cat lola +##fi +##if [ -f stderr.* ] ; then +## for file in stderr.* ; do +## echo;echo $file :;cat $file +## done +##fi +##if [ -f stdout.* ] ; then +##echo;echo stdout :;echo;cat stdout.* +##fi +##if [ -a NODE.001_01 ] ; then +## for file in NODE* ; do +## echo;echo Listing $file;echo +## cat $file +## done +##fi +##if [ $(find . -name "drhook.prof.*" | wc -l) -ne 0 ] ; then +### Top 25 for each MPI task : +## for file in drhook.prof.* ; do +## echo;echo $file :;head -38 $file +## done +##fi +#cat drhook.prof.* | perl -w $HOME/bin/drhook_merge_walltime_max.pl + +# ******************* +# * Sauvegardes * +# ******************* + +ls +#if [ -f PFFPOS000+0000 ] ; then +# cp PFFPOS000+0000 $WAIT_QUEUE/PFFPOS000+0000.$PBS_JOBID +#fi +cp lola NODE.001_01 ICMSHFPOS+00* DHFDLFPOS+00* $OUTPUTDIR/ +mv *.dat $OUTPUTDIR/ +/bin/rm fort.4 EXSEG1.nam lola ICMSHFPOS+0000* PFFPOSFRANGP0025+0000* ICMSHFPOS+0001* +/bin/rm PFFPOSFRANGP0025+0001* ICMSHFPOS+0002* ECHIS PFFPOSFRANGP0025+0002* DHFDLFPOS+00* +/bin/rm ECHFP NODE.001_01 ifs.stat $(tar tfz $rekchemin/data/rtm/radiation_params.47r1_light.tgz) + +# **************** +# * Epilogue * +# **************** + +ls -ltr | grep -v "\->" +echo Wait_queue : +ls -ltr $TMPWAIT +cd $TMPDIR +\rm -rf rundir.$$ +\rm -rf wait_queue.$$ +date +set +x diff --git a/tools/conf_tests/small_3D_alt1/aro48t3.sh b/tools/conf_tests/small_3D_alt1/aro48t3.sh new file mode 100755 index 0000000000000000000000000000000000000000..62c8078f80366bf944c86f07a8c0c8a36ed0f8c3 --- /dev/null +++ b/tools/conf_tests/small_3D_alt1/aro48t3.sh @@ -0,0 +1,1207 @@ +#!/bin/bash +#SBATCH -n 4 +#SBATCH --mem=20000 +#SBATCH --export=MYLIB,HOME,HOMEPACK,TMPDIR,OUTPUTDIR,TESTDIR +#SBATCH -t 00:10:00 +#SBATCH -N 1 +#SBATCH -p normal256 + +#The MYLIB varibale must contain the gmkpack pack name +#The TESTDIR variable must contain the test directory +#Results will be stored in the local directory + +#Other environment varaibles that can be set: +#OUTPUTDIR + +date + +OUTPUTDIR=${OUTPUTDIR:-$PWD} +case=riette2 +#rekchemin="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" #Resources for the run must be in the same directory as this script +rekchemin=$TESTDIR + +NPROC=4 +NSTRIN=$NPROC +NSTROUT=1 +NPRTRW_NPRTRV="" +NPRTRW_NPRTRV=" NPRTRW=$NPROC, + NPRTRV=1," +export OMP_NUM_THREADS=1 + +#MYLIB=48t1_main.01%jpdup + +export DR_HOOK=1 +#export DR_HOOK_IGNORE_SIGNALS=-1 +export DR_HOOK_NOT_MPI=1 +export DR_HOOK_SILENT=1 +export DR_HOOK_OPT= + +export EC_PROFILE_HEAP=0 +export EC_PROFILE_MEM=0 +export EC_MPI_ATEXIT=0 +export DR_HOOK_SHOW_PROCESS_OPTIONS=0 +export EC_MEMINFO=0 +export TVSEARCHPATH=$SOURCE + +HOMEPACK=${HOMEPACK:=$HOME/pack} +SOURCE=$HOMEPACK/$MYLIB/src/local +LOADIR=$HOMEPACK/$MYLIB/bin + +TMPDIR=${TMPDIR:=$HOME/tmp} +TMPLOC=$TMPDIR/rundir.$$ +TMPWAIT=$TMPDIR/wait_queue.$$ +mkdir $TMPWAIT +mkdir $TMPLOC +cd $TMPLOC + +export RTTOV_COEFDIR=$PWD + +# ************************** +# * Saisie des NAMELISTS * +# ************************** + +CNMEXP='FPOS' + +echo +/bin/cat <<FIN > fort.4 + &NACIETEO + / + &NACOBS + / + &NACTAN + / + &NACTEX + / + &NACVEG + / + &NADOCK + / + &NAEAEM7 + / + &NAEAER + / + &NAECOAPHY + / + &NAEPHLI + / + &NAEPHY + / + &NAERAD + LRRTM=.TRUE., + LSRTM=.FALSE., + NAER=1, + NICEOPT=3, + NLIQOPT=3, + NOVLP=6, + NOZOCL=2, + NRADFR=18, + NRADIP=3, + NRADLP=2, + NSW=6, + RLWINHF=1, + RRE2DE=0.64952, + RSWINHF=1, + / + &NAERCLI + / + &NAEVOL + / + &NAIMPO + / + &NALORI + / + &NAMAFN + GFP_CLSG%CLNAME='SURFACCGRAUPEL', + GFP_CLSP%CLNAME='SURFACCPLUIE', + GFP_CLSS%CLNAME='SURFACCNEIGE', + GFP_SFIS%IBITS=16, + GFP_ST%CLNAME='SURFTEMPERATURE', + GFP_ST%IANO=0, + GFP_ST%IBITS=12, + GFP_X10U%CLNAME='CLSVENT.ZONAL', + GFP_X10U%IANO=0, + GFP_X10U%IBITS=12, + GFP_X10V%CLNAME='CLSVENT.MERIDIEN', + GFP_X10V%IANO=0, + GFP_X10V%IBITS=12, + GFP_X2RH%CLNAME='CLSHUMI.RELATIVE', + GFP_X2RH%IANO=0, + GFP_X2RH%IBITS=12, + GFP_X2T%CLNAME='CLSTEMPERATURE', + GFP_X2T%IANO=1, + GFP_XCCC%IBITS=8, + GFP_XHCC%IBITS=8, + GFP_XLCC%IBITS=8, + GFP_XLSG%CLNAME='SURFINSGRAUPEL', + GFP_XLSP%CLNAME='SURFINSPLUIE', + GFP_XLSS%CLNAME='SURFINSNEIGE', + GFP_XMCC%IBITS=8, + GFP_XN2T%IBITS=12, + GFP_XTCC%IBITS=8, + GFP_XUGST%CLNAME='CLSU.RAF60M.XFU', + GFP_XUGST%IANO=0, + GFP_XUGST%IBITS=12, + GFP_XVGST%CLNAME='CLSV.RAF60M.XFU', + GFP_XVGST%IANO=0, + GFP_XVGST%IBITS=12, + GFP_XX2T%IBITS=12, + GFP_XXDIAGH%IBITS=12, + TFP_ABS%ZFK=32., + TFP_CLF%IBITS=6, + TFP_EDR%CLNAME='EDR', + TFP_EDR%IBITS=16, + TFP_EDR%IGRIB=136, + TFP_GR%IBITS=12, + TFP_HL%IBITS=12, + TFP_HTB%IBITS=16, + TFP_HTB%LLGP=.TRUE., + TFP_HU%IBITS=12, + TFP_MSAT9C2%IBITS=12, + TFP_MSAT9C6%IBITS=12, + TFP_MSLNH%IBITS=12, + TFP_PV%ZFK=64., + TFP_RCLS%IBITS=12, + TFP_RR%IBITS=12, + TFP_SN%IBITS=12, + TFP_T%IBITS=12, + TFP_TCLS%IBITS=12, + TFP_TH%IBITS=12, + TFP_THPW%IBITS=12, + TFP_THV%IBITS=12, + TFP_TN%IBITS=12, + TFP_TWV%IBITS=12, + TFP_TX%IBITS=12, + TFP_U%IBITS=12, + TFP_V%IBITS=12, + TFP_VOR%ZFK=32., + TFP_VV%ZFK=32., + / + &NAMARG + CNMEXP='${CNMEXP}', + LECMWF=.FALSE., + LELAM=.TRUE., + LSLAG=.TRUE., + NCONF=1, + NSUPERSEDE=1, + / + &NAMARPHY + LKFBCONV=.FALSE., + LKFBD=.FALSE., + LKFBS=.FALSE., + LMFSHAL=.TRUE., + LMICRO=.TRUE., + LMPA=.TRUE., + LMSE=.TRUE., + LTURB=.TRUE., + / + &NAMCA + / + &NAMCAPE + / + &NAMCFU + LCUMFU=.TRUE., + LFPLS=.TRUE., + LFPLSG=.TRUE., + LFR=.TRUE., + LFRRC=.TRUE., + LFSF=.TRUE., + LNEBPAR=.TRUE., + LNEBTT=.TRUE., + LRAYD=.TRUE., + LRAYS=.TRUE., + / + &NAMCHEM + / + &NAMCHET + / + &NAMCHK + / + &NAMCLA + / + &NAMCLDP + / + &NAMCLI + / + &NAMCLOP15 + / + &NAMCLTC + / + &NAMCOK + / + &NAMCOM + / + &NAMCOSJO + / + &NAMCOUPLO4 + / + &NAMCT0 + CFPNCF='ECHFP', + CNPPATH=' ', + LAROME=.TRUE., + LNHEE=.TRUE., + LSCREEN_OPENMP=.FALSE., + LSPRT=.TRUE., + LTWOTL=.TRUE., + NFPOS=1, + NFRSDI=18, + NSDITS(0)=0, + NFRHIS=72, + NHISTS(0)=0, + NFRPOS=72, + NPOSTS(0)=0, + NFRSFXHIS=72, + NSFXHISTS(0)=0, + NFRDHFD=72, + NDHFDTS(0)=0, + / + &NAMCT1 + LRFILAF=.FALSE., + N1HIS=1, + N1POS=1, + N1RES=0, + N1SDI=1, + N1SFXHIS=1, + N1GDI=0, + / + &NAMCUMF + / + &NAMCUMFS + / + &NAMCVER + / + &NAMCVMNH + / + &NAMDDH + LDDH_OMP=.TRUE., + LHDDOP=.TRUE., + LHDHKS=.TRUE., + LHDEFD=.TRUE., + LFLEXDIA=.TRUE., + BDEDDH(1,1)=3, + BDEDDH(2,1)=1, + BDEDDH(3,1)=358.8 + BDEDDH(4,1)=45.1 + BDEDDH(5,1)=360.3 + BDEDDH(6,1)=44.5 + / + &NAMDFI + / + &NAMDIM + NPROMA=-50, + / + &NAMDIMO + / + &NAMDIM_TRAJ + / + &NAMDPHY + / + &NAMDPRECIPS + / + &NAMDYN + LADVF=.TRUE., + LQMPD=.FALSE., + LQMT=.FALSE., + LQMVD=.FALSE., + LRHDI_LASTITERPC=.TRUE., + NITMP=4, + NSITER=1, + NSPDLAG=3, + NSVDLAG=3, + NTLAG=3, + NVLAG=3, + NWLAG=3, + RDAMPDIV=20., + RDAMPPD=20., + RDAMPQ=0., + RDAMPT=0., + RDAMPVD=20., + RDAMPVOR=20., + REPS1=0., + REPS2=0., + REPSM1=0., + REPSM2=0., + REPSP1=0., + SDRED=1., + SIPR=90000., + SITR=350., + SITRA=100., + SLHDA0=0.25, + SLHDD00=0.000065, + VESL=0.05, + XIDT=0., + ZSLHDP1=1.7, + ZSLHDP3=0.6, + / + &NAMDYNA + LCOMADH=.TRUE., + LCOMADV=.FALSE., + LCOMAD_GFL=.TRUE., + LCOMAD_SP=.TRUE., + LCOMAD_SPD=.TRUE., + LCOMAD_SVD=.TRUE., + LCOMAD_T=.TRUE., + LCOMAD_W=.TRUE., + LGWADV=.TRUE., + LNESC=.TRUE., + LPC_CHEAP=.TRUE., + LPC_FULL=.TRUE., + LRDBBC=.FALSE., + LSETTLS=.FALSE., + LSETTLST=.TRUE., + LSLHD_GFL=.TRUE., + LSLHD_OLD=.FALSE., + LSLHD_SPD=.FALSE., + LSLHD_SVD=.FALSE., + LSLHD_T=.FALSE., + LSLHD_W=.FALSE., + ND4SYS=2, + NDLNPR=1, + NPDVAR=2, + NVDVAR=4, + SLHDEPSH=0.08, + SLHDKMAX=6, + / + &NAMDYNCORE + / + &NAMEMIS_CONF + / + &NAMENKF + / + &NAMFA + CMODEL='OUTPUTID', + LEXTERN=.TRUE., + LSUPPDATE=.FALSE., + NBITCS=-1, + NBITPG=-1, + NSTRON=-1, + / + &NAMFAINIT + JPXTRO=2000, + / + &NAMFPC + CFP2DF(1)='SURFPRESSION', + CFP2DF(2)='MSL_NHPRESSURE', + CFP2DF(3)='SURFTOT.WAT.VAPO', + CFP2DF(4)='SURFISOTPW0.MALT', + CFP2DF(5)='SURFCAPE.POS.F00', + CFP2DF(6)='C002_METEOSAT_09_SEVIRI.POS', + CFP2DF(7)='C006_METEOSAT_09_SEVIRI.POS', + CFP2DF(8)='SURFREFLECT.MAX', + CFP2DF(9)='SURFISOTPW1.MALT', + CFP2DF(10)='SURFISOTPW2.MALT', + CFP3DF(1)='GEOPOTENTIEL', + CFP3DF(2)='TEMPERATURE', + CFP3DF(3)='VENT_ZONAL', + CFP3DF(4)='VENT_MERIDIEN', + CFP3DF(5)='HUMI_RELATIVE', + CFP3DF(6)='THETA_PRIM_W', + CFP3DF(7)='PRESSURE', + CFP3DF(8)='ABS_VORTICITY', + CFP3DF(9)='VITESSE_VERTICALE', + CFP3DF(10)='TEMPE_POTENT', + CFP3DF(11)='POT_VORTICIT', + CFP3DF(12)='SIM_REFLECTI', + CFP3DF(13)='RAIN', + CFP3DF(14)='SNOW', + CFP3DF(15)='GRAUPEL', + CFP3DF(16)='ICE_CRYSTAL', + CFP3DF(17)='CLOUD_WATER', + CFP3DF(18)='VERT.VELOCIT', + CFP3DF(19)='DIVERGENCE', + CFP3DF(20)='THETA_VIRTUA', + CFP3DF(21)='TKE', + CFP3DF(22)='CLOUD_FRACTI', + CFP3DF(23)='ISOT_ALTIT', + CFP3DF(24)='EDR', + CFPCFU(1)='SURFTENS.TOTA.ZO', + CFPCFU(2)='SURFTENS.TOTA.ME', + CFPCFU(3)='SURFACCPLUIE', + CFPCFU(4)='SURFACCNEIGE', + CFPCFU(5)='SURFACCGRAUPEL', + CFPCFU(6)='SOMMFLU.RAY.SOLA', + CFPCFU(7)='SURFFLU.RAY.SOLA', + CFPCFU(8)='SOMMFLU.RAY.THER', + CFPCFU(9)='SURFFLU.RAY.THER', + CFPCFU(10)='SURFFLU.LAT.MTOT', + CFPCFU(11)='SURFFLU.MTOTA.NE', + CFPCFU(12)='SURFFLU.CHA.SENS', + CFPCFU(13)='SURFRAYT SOLA DE', + CFPCFU(14)='SURFRAYT THER DE', + CFPCFU(15)='SURFRAYT SOL CL', + CFPCFU(16)='SURFRAYT THER CL', + CFPCFU(17)='SURFRAYT DIR SUR', + CFPDOM(1)='FRANGP0025', + CFPFMT='LALON', + CFPPHY(1)='SURFTEMPERATURE', + CFPPHY(2)='INTSURFGEOPOTENT', + CFPPHY(3)='SURFRESERV.NEIGE', + CFPXFU(1)='CLSTEMPERATURE', + CFPXFU(2)='CLSHUMI.RELATIVE', + CFPXFU(3)='CLSVENT.ZONAL', + CFPXFU(4)='CLSVENT.MERIDIEN', + CFPXFU(5)='SURFNEBUL.TOTALE', + CFPXFU(6)='SURFNEBUL.HAUTE', + CFPXFU(7)='SURFNEBUL.MOYENN', + CFPXFU(8)='SURFNEBUL.BASSE', + CFPXFU(9)='CLSMAXI.TEMPERAT', + CFPXFU(10)='CLSMINI.TEMPERAT', + CFPXFU(11)='CLPMHAUT.MOD.XFU', + CFPXFU(12)='SURFDIAGHAIL', + LCRITSNOWTEMP=.FALSE., + LFPCAPEX=.TRUE., + LFPMOIS=.TRUE., + LFPPACKING=.FALSE., + LWIDER_DOM=.TRUE., + L_READ_MODEL_DATE=.TRUE., + NFITI=1, + NFITV=1, + NFPCAPE=5, + NFPCLI=1, + NFPGRIB=1, + NFPINPHY=4, + NITERPV=8, + RENTRA=0.0001, + RFP3H(1)=10., + RFP3H(2)=20., + RFP3H(3)=35., + RFP3H(4)=50., + RFP3H(5)=75., + RFP3H(6)=100., + RFP3H(7)=150., + RFP3H(8)=200., + RFP3H(9)=250., + RFP3H(10)=375., + RFP3H(11)=500., + RFP3H(12)=625., + RFP3H(13)=750., + RFP3H(14)=875., + RFP3H(15)=1000., + RFP3H(16)=1125., + RFP3H(17)=1250., + RFP3H(18)=1375., + RFP3H(19)=1500., + RFP3H(20)=1750., + RFP3H(21)=2000., + RFP3H(22)=2250., + RFP3H(23)=2500., + RFP3H(24)=2750., + RFP3H(25)=3000., + RFP3I(1)=-273.15, + RFP3I(2)=-263.15, + RFP3I(3)=-261.15, + RFP3I(4)=-253.15, + RFP3P(1)=10000., + RFP3P(2)=12500., + RFP3P(3)=15000., + RFP3P(4)=17500., + RFP3P(5)=20000., + RFP3P(6)=22500., + RFP3P(7)=25000., + RFP3P(8)=27500., + RFP3P(9)=30000., + RFP3P(10)=35000., + RFP3P(11)=40000., + RFP3P(12)=45000., + RFP3P(13)=50000., + RFP3P(14)=55000., + RFP3P(15)=60000., + RFP3P(16)=65000., + RFP3P(17)=70000., + RFP3P(18)=75000., + RFP3P(19)=80000., + RFP3P(20)=85000., + RFP3P(21)=90000., + RFP3P(22)=92500., + RFP3P(23)=95000., + RFP3P(24)=100000., + RFP3PV(1)=0.0000015, + RFP3PV(2)=0.000002, + RFPCD2=5., + RFPCSAB=50., + RFPVCAP=7000., + / + &NAMFPD + NLAT(1)=41, + NLON(1)=41, + RLONC(1)=-0.71, + RLATC(1)=44.8, + RDELX(1)=0.025, + RDELY(1)=0.025, + / + &NAMFPDY2 + / + &NAMFPDYF + / + &NAMFPDYH + / + &NAMFPDYI + / + &NAMFPDYP + / + &NAMFPDYS + / + &NAMFPDYT + / + &NAMFPDYV + / + &NAMFPF + NFMAX(1)=60, + NFMAX(2)=80, + / + &NAMFPG + NFPDISTRIB=1, + / + &NAMFPIOS + / + &NAMFPMOVE + / + &NAMFPPHY + / + &NAMFPSC2 + NFPROMA=-50, + / + &NAMFPSC2_DEP + NFPROMA_DEP=-50, + / + &NAMGEM + / + &NAMGFL + NGFL_EZDIAG=4, + YEZDIAG_NL(1)%CNAME='EZDIAG01', + YEZDIAG_NL(1)%LREQOUT=.FALSE., + YEZDIAG_NL(2)%CNAME='EZDIAG02', + YEZDIAG_NL(2)%LREQOUT=.FALSE., + YEZDIAG_NL(3)%CNAME='EZDIAG03', + YEZDIAG_NL(3)%LREQOUT=.FALSE., + YEZDIAG_NL(4)%CNAME='INPRRTOT3D', + YEZDIAG_NL(4)%LREQOUT=.TRUE., + YG_NL%LQM=.TRUE., + YG_NL%LSLHD=.TRUE., + YG_NL%NCOUPLING=-1, + YG_NL%NREQIN=1, + YG_NL%REFVALC=0., + YIRAD_NL%LGP=.TRUE., + YI_NL%LQM=.TRUE., + YI_NL%LSLHD=.TRUE., + YI_NL%NCOUPLING=-1, + YI_NL%NREQIN=1, + YI_NL%REFVALC=0., + YLRAD_NL%LGP=.TRUE., + YL_NL%LQM=.TRUE., + YL_NL%LSLHD=.TRUE., + YL_NL%NCOUPLING=-1, + YL_NL%NREQIN=1, + YL_NL%REFVALC=0., + YQ_NL%LCOMAD=.TRUE., + YQ_NL%LQM=.TRUE., + YQ_NL%LSLHD=.FALSE., + YQ_NL%NREQIN=1, + YR_NL%LQM=.TRUE., + YR_NL%LSLHD=.TRUE., + YR_NL%NCOUPLING=-1, + YR_NL%NREQIN=1, + YR_NL%REFVALC=0., + YS_NL%LQM=.TRUE., + YS_NL%LSLHD=.TRUE., + YS_NL%NCOUPLING=-1, + YS_NL%NREQIN=1, + YS_NL%REFVALC=0., + YTKE_NL%NCOUPLING=0, + YTKE_NL%NREQIN=1, + / + &NAMGRIB + / + &NAMGWD + / + &NAMGWDIAG + / + &NAMGWWMS + / + &NAMIAU + ALPHAIAU=0.5, + LIAU=.FALSE., + TSTARTIAU=1800, + TSTOPIAU=5340, + / + &NAMICE + / + &NAMINI + LDFI=.FALSE., + / + &NAMINTFLEX + / + &NAMIOMI + / + &NAMIOS + / + &NAMIO_SERV + NIO_SERV_BUF_MAXSIZE=20, + NIO_SERV_METHOD=2, + NMSG_LEVEL_CLIENT=0, + NMSG_LEVEL_SERVER=0, + NPROCESS_LEVEL=5, + NPROC_IO=0, + / + &NAMJBCODES + / + &NAMJFH + / + &NAMJG + / + &NAMLCZ + / + &NAMLSFORC + / + &NAMMARS + / + &NAMMCC + / + &NAMMCUF + / + &NAMMKODB + / + &NAMMODERR + / + &NAMMTS + / + &NAMMWAVE + / + &NAMNPROF + / + &NAMNUD + / + &NAMOBS + / + &NAMONEDVAR + / + &NAMOOPS + / + &NAMOPH + CFNHWF='ECHIS', + LINC=.TRUE., + NTIMEFMT=1, + / + &NAMOPTCMEM + / + &NAMPAR0 + LOPT_SCALAR=.TRUE., + NPRINTLEV=1, + LMPOFF=.FALSE., + MBX_SIZE=2048000000, + MP_TYPE=2, + NOUTPUT=1, + NPROC=$NPROC, +$NPRTRW_NPRTRV + / + &NAMPAR1 + LEQ_REGIONS=.FALSE., + LSLONDEM=.TRUE., + LSPLIT=.TRUE., + LSYNC_SLCOM=.FALSE., + LSYNC_TRANS=.FALSE., + L_GATHERV_WRGP=.FALSE., + NCOMBFLEN=1800000, + NSTRIN=$NSTRIN, + NSTROUT=$NSTROUT, + / + &NAMPARAR + CFRAC_ICE_ADJUST='T', + CFRAC_ICE_SHALLOW_MF='T', + CMICRO='ICE3', + CSEDIM='SPLI', + CSNOWRIMING='M90', + LCONVHG=.TRUE., + LCRFLIMIT=.TRUE., + LCRIAUTI=.TRUE., + LEVLIMIT=.TRUE., + LFEEDBACKT=.TRUE., + LFPREC3D=.TRUE., + LNULLWETG=.TRUE., + LNULLWETH=.TRUE., + LOLSMC=.TRUE., + LOSEDIC=.TRUE., + LOSIGMAS=.TRUE., + LOSUBG_COND=.TRUE., + LSEDIM_AFTER=.TRUE., + LWETGPOST=.TRUE., + LWETHPOST=.TRUE., + NMAXITER_MICRO=10, + NPRINTFR=10000, + NPTP=1, + RCRIAUTC=0.001, + RCRIAUTI=0.0002, + RT0CRIAUTI=-5., + VSIGQSAT=0.02, + XFRACM90=0.1, + XMRSTEP=0.00005, + XSPLIT_MAXCFL=0.8, + XTSTEP_TS=25., + / + &NAMPHMSE + LPGDFWR=.FALSE., + / + &NAMPHY + LAERODES=.TRUE., + LAEROLAN=.TRUE., + LAEROSEA=.TRUE., + LAEROSOO=.TRUE., + LEDR=.TRUE., + LMPHYS=.TRUE., + LO3ABC=.TRUE., + LRAYFM=.TRUE., + / + &NAMPHY0 + ALMAV=300., + BEDIFV=0.05, + ECMNP=3000., + GCCSV=0., + GCVADS=0.8, + GCVALFA=0.000045, + GCVBETA=0.2, + GCVMLT=0.00016, + GCVNU=0.000025, + GCVPSI=1., + GCVPSIE=1., + GDDEVA=0.25, + GDDSDE=0.5, + GWDCD=6., + HUCOE=0.5, + HUTIL=1.8, + QSSC=400., + QSSUSC=0.75, + QSSUSS=0.4, + QSSUSV=250., + QSUSXC=0.0002, + QSUSXS=0.0003, + QXRAL=130., + QXRDEL=0.49, + QXRHX=0.99, + QXRR=0.25, + RCVEVAP=0.25, + REFLKUO=5000., + REVGSL=15., + SCO=-20., + TDDGP=0.8, + TENTR=0.0000025, + TENTRX=0.00008, + TUDGP=0.8, + UHDIFV=0.0008, + USURIC=0.175, + USURICE=0.5, + USURICL=1., + USURID=0.1, + USURIDE=0.25, + VZ0CM=0.00015, + XMAXLM=5000., + XMINLM=10., + / + &NAMPHY1 + ALBMIN=0.65, + ALCRIN=0.75, + GCGEL=0.00003, + GCGELS=0.00005, + GNEIMX=1.8, + GNEIMXS=1.8, + RCTVEG(3)=0.000012, + RCTVEG(4)=0.00001, + / + &NAMPHY2 + FACRAF=3.8, + HTKERAF=20., + LMULAF=.TRUE., + LRAFTKE=.TRUE., + LRAFTUR=.TRUE., + XDAMP=1., + XMULAF=-1.85, + / + &NAMPHY3 + / + &NAMPHYDS + / + &NAMPONG + / + &NAMPPC + / + &NAMPPVI + / + &NAMPRE + / + &NAMRAD15 + / + &NAMRADCMEM + / + &NAMRCF + / + &NAMRCOEF + / + &NAMRES + / + &NAMRGRI + / + &NAMRINC + / + &NAMRIP + TSTEP=50., + CSTOP='h2', + / + &NAMRIP0 + / + &NAMRLX + / + &NAMSATS + LPARTIAL_COEF_FILES=.TRUE., + / + &NAMSCC + / + &NAMSCEN + / + &NAMSCM + / + &NAMSEKF + / + &NAMSENS + / + &NAMSFXCMP + CFLDNAME(1)='????????????????', + NBBITS(1)=24, + / + &NAMSIMPHL + / + &NAMSPNG + / + &NAMSPSDT + / + &NAMSTA + / + &NAMSTOPH + / + &NAMSWE + / + &NAMTESTVAR + / + &NAMTHLIM + / + &NAMTOPH + ETCVIM=5000., + ETNEBU=5000., + ETPLUI=5000., + XDRMTK=6.0D-7, + XDRMTP=800., + XDRMUK=3.0D-7, + XDRMUP=800., + / + &NAMTRAJP + / + &NAMTRANS + / + &NAMTRANS0 + / + &NAMTS + / + &NAMVAR + / + &NAMVARBC + / + &NAMVARBC_AIREP + / + &NAMVARBC_ALLSKY + / + &NAMVARBC_GBRAD + / + &NAMVARBC_RAD + / + &NAMVARBC_SFCOBS + / + &NAMVARBC_TCWV + / + &NAMVARBC_TO3 + / + &NAMVAREPS + / + &NAMVDF + / + &NAMVDOZ + / + &NAMVOLCANO + / + &NAMVRTL + / + &NAMVV0 + / + &NAMVV1 + / + &NAMVWRK + / + &NAMWAVELETJB + / + &NAMXFU + LXCLP=.TRUE., + LXCLS=.TRUE., + LXFU=.TRUE., + LXNEBPA=.TRUE., + LXNEBTT=.TRUE., + LXNUVCLS=.TRUE., + LXPLS=.TRUE., + LXPLSG=.TRUE., + LXQCLS=.TRUE., + LXR=.TRUE., + LXSOIL=.FALSE., + LXTHW=.TRUE., + LXTRT=.TRUE., + LXTTCLS=.TRUE., + LXXDIAGH=.TRUE., + LXXGST=.TRUE., + NFRRAZ=72, + NRAZTS(0)=0, + / + &NAM_CANAPE + / + &NAM_DISTRIBUTED_VECTORS + / + &NAPHLC + / + &NEMCT0 + / + &NEMDIM + / + &NEMDYN + / + &NEMELBC0A + LESPCPL=.TRUE., + NBICNHX=2, + NBICOP=2, + NBICOT=2, + NBICOU=2, + NBICPD=2, + NBICVD=2, + NECRIPL=1, + / + &NEMELBC0B + NEFRSPCPL=1, + NEK0=20, + NEK1=30, + NEN1=4, + NEN2=8, + SPNUDDIV=0.01, + SPNUDQ=0., + SPNUDT=0.01, + SPNUDVOR=0.01, + TEFRCL=3600., + / + &NEMFPEZO + / + &NEMGEO + / + &NEMJK + / + &NEMVAR + / + &NEMWAVELET + / + &NAETLDIAG + / + &NAMMETHOX + / + &NAMSPP + / + &NAMACV + / + &NAMFPOBJ + / + &NAMNORGWD + / + &NAMTRAJ + / + &NAMSATSIM + / + &NAMDVISI + / + &NAMNUDGLH + / + &NAMPERTPAR + / +FIN +/bin/cat fort.4 + +/bin/cat <<FIN > EXSEG1.nam + &NAM_DIAG_ISBAN + LPGD=.TRUE., + LSURF_MISC_BUDGET=.TRUE., + / + &NAM_DIAG_SURFN + LCOEF=.TRUE., + LSURF_BUDGET=.TRUE., + N2M=2, + / + &NAM_ISBAN + CSCOND='NP89', + / + &NAM_REPROD_OPER + LREPROD_OPER=.TRUE., + / + &NAM_SEAFLUXN + CSEA_FLUX='ECUME', + LPWG=.FALSE., + LPRECIP=.FALSE., + LPWEBB=.FALSE., + / + &NAM_SSON + CROUGH='Z01D', + XFRACZ0=5., + LDSV=.FALSE., + / + &NAM_SURF_ATM + XRIMAX=0.2, + LNOSOF=.TRUE., + / + &NAM_SURF_CSTS + XZ0SN=0.01, + XZ0HSN=0.001, + XEMISSN=0.99, + / + &NAM_WRITE_DIAG_SURFN + LPROVAR_TO_DIAG=.FALSE., + LSELECT=.TRUE., +CSELECT(1)='T2M','HU2M','XX','YY','DX','DY','SST','Z0SEA','TS_WATER','Z0WATER','TG1','TG2','TG3','WG1','WG2','WG3','WGI1','WGI2','WGI3','WR','WSN_VEG1','RSN_VEG1','ASN_VEG','TSRAD_NAT','RESA','TROOF1','TROOF2','TROOF3','TROOF4','TROOF5','WS_ROOF','TROAD1','TROAD2','TROAD3','TROAD4','TROAD5','WS_ROAD','TWALL1','TWALL2','TWALL3','TWALL4','TWALL5','TI_BLD','T_WIN1','TI_ROAD','WSN_RF1','RSN_RF1','TSN_RF1','ASN_RF','WSN_RD1','RSN_RD1','TSN_RD1','ASN_RD','TCANYON','QCANYON','STORAGE_TYPE','MASDEV','VERSION','BUG','DIM_FULL','DTCUR','LAT0','LON0','RPK','BETA','LATORI','LONORI','IMAX','JMAX','RW_PRECIP','BUDC','SEA_OCEAN','SEA_SBL','WAT_SBL','SN_VEG_N','SN_VEG','LSNOW_FRAC_T','GLACIER','TEMPARP','NLITTER','NLITTLEVS','NSOILCARB','ISBA_CANOPY','SN_RF_N','SN_RF','SN_RD_N','SN_RD','SN_RD_TYP','SN_RF_TYP','TEB_CANOPY','STORAGETYPE','CARTESIAN','GRID_TYPE','SN_VEG_TYP','RESPSL','ROAD_DIR','WALL_OPT','LAI','VEG','RSMIN','DG2','_FBUF_SIZE','_FBUF_DIM1','_FBUF_DIM2','_FBUF_NAME','_FBUF_TYPE','_FBUF_MASK','LCPL_GCM','HANDLE_SIC','SSS', + / + &NAM_WRITE_SURF_ATM + LNOWRITE_TEXFILE=.TRUE., + / +FIN +/bin/cat EXSEG1.nam + +# ***************************************** +# * Acquisition du fichier de demarrage * +# ***************************************** + +echo +for hh in 0 1 2 3 4 5 6 ; do + N=`expr $hh / 1 ` + set -x + ln -s $rekchemin/data/aro/$case/ELSCFFCSTALBC000${N}_l15 ELSCF${CNMEXP}ALBC00${N} + set +x +done +set -x +ln -s $rekchemin/data/aro/$case/ICMSHFCSTINIT_l15 ICMSH${CNMEXP}INIT +ln -s $rekchemin/data/aro/$case/ICMSHFCSTINIT.sfx ICMSH${CNMEXP}INIT.sfx +ln -s $rekchemin/data/surfex/v8/ecoclimapI_covers_param.bin . +ln -s $rekchemin/data/surfex/v8/ecoclimapII_eu_covers_param.bin . +ln -s $rekchemin/data/surfex/v8/ecoclimapII_af_covers_param.bin . +ln -s $rekchemin/data/aro/$case/Const.Clim Const.Clim +ln -s $rekchemin/data/aro/$case/Const.Clim.sfx Const.Clim.sfx +ln -s $rekchemin/data/aro/$case/const.clim.FRANGP0025 const.clim.FRANGP0025 +ln -s $rekchemin/data/rttov12/rtcoef_meteosat_9_seviri.dat . +ln -s $rekchemin/data/rttov12/rtcoef_meteosat_10_seviri.dat . +ln -s $rekchemin/data/rttov12/sccldcoef_meteosat_9_seviri.dat . +set +x +tar xfz $rekchemin/data/rtm/radiation_params.47r1_light.tgz + +# *************** +# * Chargement * +# *************** + +echo +set -x +\ln -s $LOADIR/MASTERODB MASTER +set +x +if ldd MASTER | grep openmpi > /dev/null; then + #On est sur PC + MPILIB=$(ldd MASTER | grep openmpi | tail -1 | awk '{print $3}' | awk -F "/" '{print $(NF-2)}') + MPIRUN="$(echo $(dirname $(dirname $(ldd MASTER | grep openmpi| tail -1 | awk '{print $3}'))))/bin/orterun --oversubscribe -np $NPROC" + GRIB_API=$(dirname $(dirname $(ldd MASTER | grep grib_api | head -1 | awk '{print $3}') 2>/dev/null) 2>/dev/null) + ECCODES=$(dirname $(dirname $(ldd MASTER | grep eccodes | head -1 | awk '{print $3}') 2>/dev/null) 2>/dev/null) + export GRIB_SAMPLES_PATH=$GRIB_API/share/grib_api/ifs_samples/grib1 + export GRIB_DEFINITION_PATH=$GRIB_API/share/grib_api/definitions + export ECCODES_SAMPLES_PATH=$ECCODES/share/eccodes/ifs_samples/grib1 + export ECCODES_DEFINITION_PATH=$rekchemin/data/eccodes_extras_definitions:$ECCODES/share/eccodes/definitions +else + #On est sur HPC + #MPIRUN="$(echo $(dirname $(dirname $(ldd MASTER | grep libmpi| tail -1 | awk '{print $3}'))))/bin/mpirun -wdir $PWD" + NNODES=$SLURM_JOB_NUM_NODES + MPITASKS_PER_NODE=$((SLURM_NTASKS/SLURM_JOB_NUM_NODES)) + MPI_TASKS=$SLURM_NTASKS + MPIRUN="/opt/softs/mpiauto/mpiauto -np $MPI_TASKS -nnp $MPITASKS_PER_NODE --" + export OMP_STACKSIZE=4G + export KMP_STACKSIZE=4G + export KMP_MONITOR_STACKSIZE=4G + export DR_HOOK=1 + export DR_HOOK_IGNORE_SIGNALS=-1 + export DR_HOOK_SILENT=1 + export DR_HOOK_SHOW_PROCESS_OPTIONS=0 + export MPL_MBX_SIZE=2048000000 + export EC_PROFILE_HEAP=0 + export EC_PROFILE_MEM=0 + export EC_MPI_ATEXIT=0 + export EC_MEMINFO=0 + export OPENBLAS_NUM_THREADS=1 + export MKL_CBWR="AUTO,STRICT" + export MKL_NUM_THREADS=1 + export MKL_DEBUG_CPU_TYPE=5 + export ECCODES_SAMPLES_PATH=/opt/softs/libraries/ICC_2018.5.274/eccodes-2.17.0/share/eccodes/ifs_samples/grib1 + export ECCODES_DEFINITION_PATH=/opt/softs/libraries/ICC_2018.5.274/eccodes-2.17.0/share/eccodes/definitions +fi +echo $MPIRUN +set +x +if [ ! -f MASTER ] ; then echo No executable MASTER;exit 1;fi + +# *************** +# * Execution * +# *************** + +echo +echo OMP_NUM_THREADS=$OMP_NUM_THREADS +set -x +ulimit -s unlimited +$MPIRUN $PWD/MASTER >lola +set +x +echo +##if [ -f lola ] ; then +## echo;echo Standard output :;echo;cat lola +##fi +##if [ -f stderr.* ] ; then +## for file in stderr.* ; do +## echo;echo $file :;cat $file +## done +##fi +##if [ -f stdout.* ] ; then +##echo;echo stdout :;echo;cat stdout.* +##fi +##if [ -a NODE.001_01 ] ; then +## for file in NODE* ; do +## echo;echo Listing $file;echo +## cat $file +## done +##fi +##if [ $(find . -name "drhook.prof.*" | wc -l) -ne 0 ] ; then +### Top 25 for each MPI task : +## for file in drhook.prof.* ; do +## echo;echo $file :;head -38 $file +## done +##fi +#cat drhook.prof.* | perl -w $HOME/bin/drhook_merge_walltime_max.pl + +# ******************* +# * Sauvegardes * +# ******************* + +ls +#if [ -f PFFPOS000+0000 ] ; then +# cp PFFPOS000+0000 $WAIT_QUEUE/PFFPOS000+0000.$PBS_JOBID +#fi +cp lola NODE.001_01 ICMSHFPOS+00* DHFDLFPOS+00* $OUTPUTDIR/ +/bin/rm fort.4 EXSEG1.nam lola ICMSHFPOS+0000* PFFPOSFRANGP0025+0000* ICMSHFPOS+0001* +/bin/rm PFFPOSFRANGP0025+0001* ICMSHFPOS+0002* ECHIS PFFPOSFRANGP0025+0002* DHFDLFPOS+00* +/bin/rm ECHFP NODE.001_01 ifs.stat $(tar tfz $rekchemin/data/rtm/radiation_params.47r1_light.tgz) + +# **************** +# * Epilogue * +# **************** + +ls -ltr | grep -v "\->" +echo Wait_queue : +ls -ltr $TMPWAIT +cd $TMPDIR +\rm -rf rundir.$$ +\rm -rf wait_queue.$$ +date +set +x diff --git a/tools/conf_tests/small_3D_alt2/aro48t3.sh b/tools/conf_tests/small_3D_alt2/aro48t3.sh new file mode 100755 index 0000000000000000000000000000000000000000..8928589a282adb723fd05cc8487109e78acbd982 --- /dev/null +++ b/tools/conf_tests/small_3D_alt2/aro48t3.sh @@ -0,0 +1,1207 @@ +#!/bin/bash +#SBATCH -n 4 +#SBATCH --mem=20000 +#SBATCH --export=MYLIB,HOME,HOMEPACK,TMPDIR,OUTPUTDIR,TESTDIR +#SBATCH -t 00:10:00 +#SBATCH -N 1 +#SBATCH -p normal256 + +#The MYLIB varibale must contain the gmkpack pack name +#The TESTDIR variable must contain the test directory +#Results will be stored in the local directory + +#Other environment varaibles that can be set: +#OUTPUTDIR + +date + +OUTPUTDIR=${OUTPUTDIR:-$PWD} +case=riette2 +#rekchemin="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" #Resources for the run must be in the same directory as this script +rekchemin=$TESTDIR + +NPROC=4 +NSTRIN=$NPROC +NSTROUT=1 +NPRTRW_NPRTRV="" +NPRTRW_NPRTRV=" NPRTRW=$NPROC, + NPRTRV=1," +export OMP_NUM_THREADS=1 + +#MYLIB=48t1_main.01%jpdup + +export DR_HOOK=1 +#export DR_HOOK_IGNORE_SIGNALS=-1 +export DR_HOOK_NOT_MPI=1 +export DR_HOOK_SILENT=1 +export DR_HOOK_OPT= + +export EC_PROFILE_HEAP=0 +export EC_PROFILE_MEM=0 +export EC_MPI_ATEXIT=0 +export DR_HOOK_SHOW_PROCESS_OPTIONS=0 +export EC_MEMINFO=0 +export TVSEARCHPATH=$SOURCE + +HOMEPACK=${HOMEPACK:=$HOME/pack} +SOURCE=$HOMEPACK/$MYLIB/src/local +LOADIR=$HOMEPACK/$MYLIB/bin + +TMPDIR=${TMPDIR:=$HOME/tmp} +TMPLOC=$TMPDIR/rundir.$$ +TMPWAIT=$TMPDIR/wait_queue.$$ +mkdir $TMPWAIT +mkdir $TMPLOC +cd $TMPLOC + +export RTTOV_COEFDIR=$PWD + +# ************************** +# * Saisie des NAMELISTS * +# ************************** + +CNMEXP='FPOS' + +echo +/bin/cat <<FIN > fort.4 + &NACIETEO + / + &NACOBS + / + &NACTAN + / + &NACTEX + / + &NACVEG + / + &NADOCK + / + &NAEAEM7 + / + &NAEAER + / + &NAECOAPHY + / + &NAEPHLI + / + &NAEPHY + / + &NAERAD + LRRTM=.TRUE., + LSRTM=.FALSE., + NAER=1, + NICEOPT=3, + NLIQOPT=3, + NOVLP=6, + NOZOCL=2, + NRADFR=18, + NRADIP=3, + NRADLP=2, + NSW=6, + RLWINHF=1, + RRE2DE=0.64952, + RSWINHF=1, + / + &NAERCLI + / + &NAEVOL + / + &NAIMPO + / + &NALORI + / + &NAMAFN + GFP_CLSG%CLNAME='SURFACCGRAUPEL', + GFP_CLSP%CLNAME='SURFACCPLUIE', + GFP_CLSS%CLNAME='SURFACCNEIGE', + GFP_SFIS%IBITS=16, + GFP_ST%CLNAME='SURFTEMPERATURE', + GFP_ST%IANO=0, + GFP_ST%IBITS=12, + GFP_X10U%CLNAME='CLSVENT.ZONAL', + GFP_X10U%IANO=0, + GFP_X10U%IBITS=12, + GFP_X10V%CLNAME='CLSVENT.MERIDIEN', + GFP_X10V%IANO=0, + GFP_X10V%IBITS=12, + GFP_X2RH%CLNAME='CLSHUMI.RELATIVE', + GFP_X2RH%IANO=0, + GFP_X2RH%IBITS=12, + GFP_X2T%CLNAME='CLSTEMPERATURE', + GFP_X2T%IANO=1, + GFP_XCCC%IBITS=8, + GFP_XHCC%IBITS=8, + GFP_XLCC%IBITS=8, + GFP_XLSG%CLNAME='SURFINSGRAUPEL', + GFP_XLSP%CLNAME='SURFINSPLUIE', + GFP_XLSS%CLNAME='SURFINSNEIGE', + GFP_XMCC%IBITS=8, + GFP_XN2T%IBITS=12, + GFP_XTCC%IBITS=8, + GFP_XUGST%CLNAME='CLSU.RAF60M.XFU', + GFP_XUGST%IANO=0, + GFP_XUGST%IBITS=12, + GFP_XVGST%CLNAME='CLSV.RAF60M.XFU', + GFP_XVGST%IANO=0, + GFP_XVGST%IBITS=12, + GFP_XX2T%IBITS=12, + GFP_XXDIAGH%IBITS=12, + TFP_ABS%ZFK=32., + TFP_CLF%IBITS=6, + TFP_EDR%CLNAME='EDR', + TFP_EDR%IBITS=16, + TFP_EDR%IGRIB=136, + TFP_GR%IBITS=12, + TFP_HL%IBITS=12, + TFP_HTB%IBITS=16, + TFP_HTB%LLGP=.TRUE., + TFP_HU%IBITS=12, + TFP_MSAT9C2%IBITS=12, + TFP_MSAT9C6%IBITS=12, + TFP_MSLNH%IBITS=12, + TFP_PV%ZFK=64., + TFP_RCLS%IBITS=12, + TFP_RR%IBITS=12, + TFP_SN%IBITS=12, + TFP_T%IBITS=12, + TFP_TCLS%IBITS=12, + TFP_TH%IBITS=12, + TFP_THPW%IBITS=12, + TFP_THV%IBITS=12, + TFP_TN%IBITS=12, + TFP_TWV%IBITS=12, + TFP_TX%IBITS=12, + TFP_U%IBITS=12, + TFP_V%IBITS=12, + TFP_VOR%ZFK=32., + TFP_VV%ZFK=32., + / + &NAMARG + CNMEXP='${CNMEXP}', + LECMWF=.FALSE., + LELAM=.TRUE., + LSLAG=.TRUE., + NCONF=1, + NSUPERSEDE=1, + / + &NAMARPHY + LKFBCONV=.FALSE., + LKFBD=.FALSE., + LKFBS=.FALSE., + LMFSHAL=.TRUE., + LMICRO=.TRUE., + LMPA=.TRUE., + LMSE=.TRUE., + LTURB=.TRUE., + / + &NAMCA + / + &NAMCAPE + / + &NAMCFU + LCUMFU=.TRUE., + LFPLS=.TRUE., + LFPLSG=.TRUE., + LFR=.TRUE., + LFRRC=.TRUE., + LFSF=.TRUE., + LNEBPAR=.TRUE., + LNEBTT=.TRUE., + LRAYD=.TRUE., + LRAYS=.TRUE., + / + &NAMCHEM + / + &NAMCHET + / + &NAMCHK + / + &NAMCLA + / + &NAMCLDP + / + &NAMCLI + / + &NAMCLOP15 + / + &NAMCLTC + / + &NAMCOK + / + &NAMCOM + / + &NAMCOSJO + / + &NAMCOUPLO4 + / + &NAMCT0 + CFPNCF='ECHFP', + CNPPATH=' ', + LAROME=.TRUE., + LNHEE=.TRUE., + LSCREEN_OPENMP=.FALSE., + LSPRT=.TRUE., + LTWOTL=.TRUE., + NFPOS=1, + NFRSDI=18, + NSDITS(0)=0, + NFRHIS=72, + NHISTS(0)=0, + NFRPOS=72, + NPOSTS(0)=0, + NFRSFXHIS=72, + NSFXHISTS(0)=0, + NFRDHFD=72, + NDHFDTS(0)=0, + / + &NAMCT1 + LRFILAF=.FALSE., + N1HIS=1, + N1POS=1, + N1RES=0, + N1SDI=1, + N1SFXHIS=1, + N1GDI=0, + / + &NAMCUMF + / + &NAMCUMFS + / + &NAMCVER + / + &NAMCVMNH + / + &NAMDDH + LDDH_OMP=.TRUE., + LHDDOP=.TRUE., + LHDHKS=.TRUE., + LHDEFD=.TRUE., + LFLEXDIA=.TRUE., + BDEDDH(1,1)=3, + BDEDDH(2,1)=1, + BDEDDH(3,1)=358.8 + BDEDDH(4,1)=45.1 + BDEDDH(5,1)=360.3 + BDEDDH(6,1)=44.5 + / + &NAMDFI + / + &NAMDIM + NPROMA=-50, + / + &NAMDIMO + / + &NAMDIM_TRAJ + / + &NAMDPHY + / + &NAMDPRECIPS + / + &NAMDYN + LADVF=.TRUE., + LQMPD=.FALSE., + LQMT=.FALSE., + LQMVD=.FALSE., + LRHDI_LASTITERPC=.TRUE., + NITMP=4, + NSITER=1, + NSPDLAG=3, + NSVDLAG=3, + NTLAG=3, + NVLAG=3, + NWLAG=3, + RDAMPDIV=20., + RDAMPPD=20., + RDAMPQ=0., + RDAMPT=0., + RDAMPVD=20., + RDAMPVOR=20., + REPS1=0., + REPS2=0., + REPSM1=0., + REPSM2=0., + REPSP1=0., + SDRED=1., + SIPR=90000., + SITR=350., + SITRA=100., + SLHDA0=0.25, + SLHDD00=0.000065, + VESL=0.05, + XIDT=0., + ZSLHDP1=1.7, + ZSLHDP3=0.6, + / + &NAMDYNA + LCOMADH=.TRUE., + LCOMADV=.FALSE., + LCOMAD_GFL=.TRUE., + LCOMAD_SP=.TRUE., + LCOMAD_SPD=.TRUE., + LCOMAD_SVD=.TRUE., + LCOMAD_T=.TRUE., + LCOMAD_W=.TRUE., + LGWADV=.TRUE., + LNESC=.TRUE., + LPC_CHEAP=.TRUE., + LPC_FULL=.TRUE., + LRDBBC=.FALSE., + LSETTLS=.FALSE., + LSETTLST=.TRUE., + LSLHD_GFL=.TRUE., + LSLHD_OLD=.FALSE., + LSLHD_SPD=.FALSE., + LSLHD_SVD=.FALSE., + LSLHD_T=.FALSE., + LSLHD_W=.FALSE., + ND4SYS=2, + NDLNPR=1, + NPDVAR=2, + NVDVAR=4, + SLHDEPSH=0.08, + SLHDKMAX=6, + / + &NAMDYNCORE + / + &NAMEMIS_CONF + / + &NAMENKF + / + &NAMFA + CMODEL='OUTPUTID', + LEXTERN=.TRUE., + LSUPPDATE=.FALSE., + NBITCS=-1, + NBITPG=-1, + NSTRON=-1, + / + &NAMFAINIT + JPXTRO=2000, + / + &NAMFPC + CFP2DF(1)='SURFPRESSION', + CFP2DF(2)='MSL_NHPRESSURE', + CFP2DF(3)='SURFTOT.WAT.VAPO', + CFP2DF(4)='SURFISOTPW0.MALT', + CFP2DF(5)='SURFCAPE.POS.F00', + CFP2DF(6)='C002_METEOSAT_09_SEVIRI.POS', + CFP2DF(7)='C006_METEOSAT_09_SEVIRI.POS', + CFP2DF(8)='SURFREFLECT.MAX', + CFP2DF(9)='SURFISOTPW1.MALT', + CFP2DF(10)='SURFISOTPW2.MALT', + CFP3DF(1)='GEOPOTENTIEL', + CFP3DF(2)='TEMPERATURE', + CFP3DF(3)='VENT_ZONAL', + CFP3DF(4)='VENT_MERIDIEN', + CFP3DF(5)='HUMI_RELATIVE', + CFP3DF(6)='THETA_PRIM_W', + CFP3DF(7)='PRESSURE', + CFP3DF(8)='ABS_VORTICITY', + CFP3DF(9)='VITESSE_VERTICALE', + CFP3DF(10)='TEMPE_POTENT', + CFP3DF(11)='POT_VORTICIT', + CFP3DF(12)='SIM_REFLECTI', + CFP3DF(13)='RAIN', + CFP3DF(14)='SNOW', + CFP3DF(15)='GRAUPEL', + CFP3DF(16)='ICE_CRYSTAL', + CFP3DF(17)='CLOUD_WATER', + CFP3DF(18)='VERT.VELOCIT', + CFP3DF(19)='DIVERGENCE', + CFP3DF(20)='THETA_VIRTUA', + CFP3DF(21)='TKE', + CFP3DF(22)='CLOUD_FRACTI', + CFP3DF(23)='ISOT_ALTIT', + CFP3DF(24)='EDR', + CFPCFU(1)='SURFTENS.TOTA.ZO', + CFPCFU(2)='SURFTENS.TOTA.ME', + CFPCFU(3)='SURFACCPLUIE', + CFPCFU(4)='SURFACCNEIGE', + CFPCFU(5)='SURFACCGRAUPEL', + CFPCFU(6)='SOMMFLU.RAY.SOLA', + CFPCFU(7)='SURFFLU.RAY.SOLA', + CFPCFU(8)='SOMMFLU.RAY.THER', + CFPCFU(9)='SURFFLU.RAY.THER', + CFPCFU(10)='SURFFLU.LAT.MTOT', + CFPCFU(11)='SURFFLU.MTOTA.NE', + CFPCFU(12)='SURFFLU.CHA.SENS', + CFPCFU(13)='SURFRAYT SOLA DE', + CFPCFU(14)='SURFRAYT THER DE', + CFPCFU(15)='SURFRAYT SOL CL', + CFPCFU(16)='SURFRAYT THER CL', + CFPCFU(17)='SURFRAYT DIR SUR', + CFPDOM(1)='FRANGP0025', + CFPFMT='LALON', + CFPPHY(1)='SURFTEMPERATURE', + CFPPHY(2)='INTSURFGEOPOTENT', + CFPPHY(3)='SURFRESERV.NEIGE', + CFPXFU(1)='CLSTEMPERATURE', + CFPXFU(2)='CLSHUMI.RELATIVE', + CFPXFU(3)='CLSVENT.ZONAL', + CFPXFU(4)='CLSVENT.MERIDIEN', + CFPXFU(5)='SURFNEBUL.TOTALE', + CFPXFU(6)='SURFNEBUL.HAUTE', + CFPXFU(7)='SURFNEBUL.MOYENN', + CFPXFU(8)='SURFNEBUL.BASSE', + CFPXFU(9)='CLSMAXI.TEMPERAT', + CFPXFU(10)='CLSMINI.TEMPERAT', + CFPXFU(11)='CLPMHAUT.MOD.XFU', + CFPXFU(12)='SURFDIAGHAIL', + LCRITSNOWTEMP=.FALSE., + LFPCAPEX=.TRUE., + LFPMOIS=.TRUE., + LFPPACKING=.FALSE., + LWIDER_DOM=.TRUE., + L_READ_MODEL_DATE=.TRUE., + NFITI=1, + NFITV=1, + NFPCAPE=5, + NFPCLI=1, + NFPGRIB=1, + NFPINPHY=4, + NITERPV=8, + RENTRA=0.0001, + RFP3H(1)=10., + RFP3H(2)=20., + RFP3H(3)=35., + RFP3H(4)=50., + RFP3H(5)=75., + RFP3H(6)=100., + RFP3H(7)=150., + RFP3H(8)=200., + RFP3H(9)=250., + RFP3H(10)=375., + RFP3H(11)=500., + RFP3H(12)=625., + RFP3H(13)=750., + RFP3H(14)=875., + RFP3H(15)=1000., + RFP3H(16)=1125., + RFP3H(17)=1250., + RFP3H(18)=1375., + RFP3H(19)=1500., + RFP3H(20)=1750., + RFP3H(21)=2000., + RFP3H(22)=2250., + RFP3H(23)=2500., + RFP3H(24)=2750., + RFP3H(25)=3000., + RFP3I(1)=-273.15, + RFP3I(2)=-263.15, + RFP3I(3)=-261.15, + RFP3I(4)=-253.15, + RFP3P(1)=10000., + RFP3P(2)=12500., + RFP3P(3)=15000., + RFP3P(4)=17500., + RFP3P(5)=20000., + RFP3P(6)=22500., + RFP3P(7)=25000., + RFP3P(8)=27500., + RFP3P(9)=30000., + RFP3P(10)=35000., + RFP3P(11)=40000., + RFP3P(12)=45000., + RFP3P(13)=50000., + RFP3P(14)=55000., + RFP3P(15)=60000., + RFP3P(16)=65000., + RFP3P(17)=70000., + RFP3P(18)=75000., + RFP3P(19)=80000., + RFP3P(20)=85000., + RFP3P(21)=90000., + RFP3P(22)=92500., + RFP3P(23)=95000., + RFP3P(24)=100000., + RFP3PV(1)=0.0000015, + RFP3PV(2)=0.000002, + RFPCD2=5., + RFPCSAB=50., + RFPVCAP=7000., + / + &NAMFPD + NLAT(1)=41, + NLON(1)=41, + RLONC(1)=-0.71, + RLATC(1)=44.8, + RDELX(1)=0.025, + RDELY(1)=0.025, + / + &NAMFPDY2 + / + &NAMFPDYF + / + &NAMFPDYH + / + &NAMFPDYI + / + &NAMFPDYP + / + &NAMFPDYS + / + &NAMFPDYT + / + &NAMFPDYV + / + &NAMFPF + NFMAX(1)=60, + NFMAX(2)=80, + / + &NAMFPG + NFPDISTRIB=1, + / + &NAMFPIOS + / + &NAMFPMOVE + / + &NAMFPPHY + / + &NAMFPSC2 + NFPROMA=-50, + / + &NAMFPSC2_DEP + NFPROMA_DEP=-50, + / + &NAMGEM + / + &NAMGFL + NGFL_EZDIAG=4, + YEZDIAG_NL(1)%CNAME='EZDIAG01', + YEZDIAG_NL(1)%LREQOUT=.FALSE., + YEZDIAG_NL(2)%CNAME='EZDIAG02', + YEZDIAG_NL(2)%LREQOUT=.FALSE., + YEZDIAG_NL(3)%CNAME='EZDIAG03', + YEZDIAG_NL(3)%LREQOUT=.FALSE., + YEZDIAG_NL(4)%CNAME='INPRRTOT3D', + YEZDIAG_NL(4)%LREQOUT=.TRUE., + YG_NL%LQM=.TRUE., + YG_NL%LSLHD=.TRUE., + YG_NL%NCOUPLING=-1, + YG_NL%NREQIN=1, + YG_NL%REFVALC=0., + YIRAD_NL%LGP=.TRUE., + YI_NL%LQM=.TRUE., + YI_NL%LSLHD=.TRUE., + YI_NL%NCOUPLING=-1, + YI_NL%NREQIN=1, + YI_NL%REFVALC=0., + YLRAD_NL%LGP=.TRUE., + YL_NL%LQM=.TRUE., + YL_NL%LSLHD=.TRUE., + YL_NL%NCOUPLING=-1, + YL_NL%NREQIN=1, + YL_NL%REFVALC=0., + YQ_NL%LCOMAD=.TRUE., + YQ_NL%LQM=.TRUE., + YQ_NL%LSLHD=.FALSE., + YQ_NL%NREQIN=1, + YR_NL%LQM=.TRUE., + YR_NL%LSLHD=.TRUE., + YR_NL%NCOUPLING=-1, + YR_NL%NREQIN=1, + YR_NL%REFVALC=0., + YS_NL%LQM=.TRUE., + YS_NL%LSLHD=.TRUE., + YS_NL%NCOUPLING=-1, + YS_NL%NREQIN=1, + YS_NL%REFVALC=0., + YTKE_NL%NCOUPLING=0, + YTKE_NL%NREQIN=1, + / + &NAMGRIB + / + &NAMGWD + / + &NAMGWDIAG + / + &NAMGWWMS + / + &NAMIAU + ALPHAIAU=0.5, + LIAU=.FALSE., + TSTARTIAU=1800, + TSTOPIAU=5340, + / + &NAMICE + / + &NAMINI + LDFI=.FALSE., + / + &NAMINTFLEX + / + &NAMIOMI + / + &NAMIOS + / + &NAMIO_SERV + NIO_SERV_BUF_MAXSIZE=20, + NIO_SERV_METHOD=2, + NMSG_LEVEL_CLIENT=0, + NMSG_LEVEL_SERVER=0, + NPROCESS_LEVEL=5, + NPROC_IO=0, + / + &NAMJBCODES + / + &NAMJFH + / + &NAMJG + / + &NAMLCZ + / + &NAMLSFORC + / + &NAMMARS + / + &NAMMCC + / + &NAMMCUF + / + &NAMMKODB + / + &NAMMODERR + / + &NAMMTS + / + &NAMMWAVE + / + &NAMNPROF + / + &NAMNUD + / + &NAMOBS + / + &NAMONEDVAR + / + &NAMOOPS + / + &NAMOPH + CFNHWF='ECHIS', + LINC=.TRUE., + NTIMEFMT=1, + / + &NAMOPTCMEM + / + &NAMPAR0 + LOPT_SCALAR=.TRUE., + NPRINTLEV=1, + LMPOFF=.FALSE., + MBX_SIZE=2048000000, + MP_TYPE=2, + NOUTPUT=1, + NPROC=$NPROC, +$NPRTRW_NPRTRV + / + &NAMPAR1 + LEQ_REGIONS=.FALSE., + LSLONDEM=.TRUE., + LSPLIT=.TRUE., + LSYNC_SLCOM=.FALSE., + LSYNC_TRANS=.FALSE., + L_GATHERV_WRGP=.FALSE., + NCOMBFLEN=1800000, + NSTRIN=$NSTRIN, + NSTROUT=$NSTROUT, + / + &NAMPARAR + CFRAC_ICE_ADJUST='S', + CFRAC_ICE_SHALLOW_MF='S', + CMICRO='OLD3', + CSEDIM='STAT', + CSNOWRIMING='M90', + LCONVHG=.TRUE., + LCRFLIMIT=.TRUE., + LCRIAUTI=.TRUE., + LEVLIMIT=.TRUE., + LFEEDBACKT=.TRUE., + LFPREC3D=.TRUE., + LNULLWETG=.TRUE., + LNULLWETH=.TRUE., + LOLSMC=.TRUE., + LOSEDIC=.TRUE., + LOSIGMAS=.TRUE., + LOSUBG_COND=.TRUE., + LSEDIM_AFTER=.FALSE., + LWETGPOST=.TRUE., + LWETHPOST=.TRUE., + NMAXITER_MICRO=1, + NPRINTFR=10000, + NPTP=1, + RCRIAUTC=0.001, + RCRIAUTI=0.0002, + RT0CRIAUTI=-5., + VSIGQSAT=0.02, + XFRACM90=0.1, + XMRSTEP=0.00005, + XSPLIT_MAXCFL=0.8, + XTSTEP_TS=0., + / + &NAMPHMSE + LPGDFWR=.FALSE., + / + &NAMPHY + LAERODES=.TRUE., + LAEROLAN=.TRUE., + LAEROSEA=.TRUE., + LAEROSOO=.TRUE., + LEDR=.TRUE., + LMPHYS=.TRUE., + LO3ABC=.TRUE., + LRAYFM=.TRUE., + / + &NAMPHY0 + ALMAV=300., + BEDIFV=0.05, + ECMNP=3000., + GCCSV=0., + GCVADS=0.8, + GCVALFA=0.000045, + GCVBETA=0.2, + GCVMLT=0.00016, + GCVNU=0.000025, + GCVPSI=1., + GCVPSIE=1., + GDDEVA=0.25, + GDDSDE=0.5, + GWDCD=6., + HUCOE=0.5, + HUTIL=1.8, + QSSC=400., + QSSUSC=0.75, + QSSUSS=0.4, + QSSUSV=250., + QSUSXC=0.0002, + QSUSXS=0.0003, + QXRAL=130., + QXRDEL=0.49, + QXRHX=0.99, + QXRR=0.25, + RCVEVAP=0.25, + REFLKUO=5000., + REVGSL=15., + SCO=-20., + TDDGP=0.8, + TENTR=0.0000025, + TENTRX=0.00008, + TUDGP=0.8, + UHDIFV=0.0008, + USURIC=0.175, + USURICE=0.5, + USURICL=1., + USURID=0.1, + USURIDE=0.25, + VZ0CM=0.00015, + XMAXLM=5000., + XMINLM=10., + / + &NAMPHY1 + ALBMIN=0.65, + ALCRIN=0.75, + GCGEL=0.00003, + GCGELS=0.00005, + GNEIMX=1.8, + GNEIMXS=1.8, + RCTVEG(3)=0.000012, + RCTVEG(4)=0.00001, + / + &NAMPHY2 + FACRAF=3.8, + HTKERAF=20., + LMULAF=.TRUE., + LRAFTKE=.TRUE., + LRAFTUR=.TRUE., + XDAMP=1., + XMULAF=-1.85, + / + &NAMPHY3 + / + &NAMPHYDS + / + &NAMPONG + / + &NAMPPC + / + &NAMPPVI + / + &NAMPRE + / + &NAMRAD15 + / + &NAMRADCMEM + / + &NAMRCF + / + &NAMRCOEF + / + &NAMRES + / + &NAMRGRI + / + &NAMRINC + / + &NAMRIP + TSTEP=50., + CSTOP='h2', + / + &NAMRIP0 + / + &NAMRLX + / + &NAMSATS + LPARTIAL_COEF_FILES=.TRUE., + / + &NAMSCC + / + &NAMSCEN + / + &NAMSCM + / + &NAMSEKF + / + &NAMSENS + / + &NAMSFXCMP + CFLDNAME(1)='????????????????', + NBBITS(1)=24, + / + &NAMSIMPHL + / + &NAMSPNG + / + &NAMSPSDT + / + &NAMSTA + / + &NAMSTOPH + / + &NAMSWE + / + &NAMTESTVAR + / + &NAMTHLIM + / + &NAMTOPH + ETCVIM=5000., + ETNEBU=5000., + ETPLUI=5000., + XDRMTK=6.0D-7, + XDRMTP=800., + XDRMUK=3.0D-7, + XDRMUP=800., + / + &NAMTRAJP + / + &NAMTRANS + / + &NAMTRANS0 + / + &NAMTS + / + &NAMVAR + / + &NAMVARBC + / + &NAMVARBC_AIREP + / + &NAMVARBC_ALLSKY + / + &NAMVARBC_GBRAD + / + &NAMVARBC_RAD + / + &NAMVARBC_SFCOBS + / + &NAMVARBC_TCWV + / + &NAMVARBC_TO3 + / + &NAMVAREPS + / + &NAMVDF + / + &NAMVDOZ + / + &NAMVOLCANO + / + &NAMVRTL + / + &NAMVV0 + / + &NAMVV1 + / + &NAMVWRK + / + &NAMWAVELETJB + / + &NAMXFU + LXCLP=.TRUE., + LXCLS=.TRUE., + LXFU=.TRUE., + LXNEBPA=.TRUE., + LXNEBTT=.TRUE., + LXNUVCLS=.TRUE., + LXPLS=.TRUE., + LXPLSG=.TRUE., + LXQCLS=.TRUE., + LXR=.TRUE., + LXSOIL=.FALSE., + LXTHW=.TRUE., + LXTRT=.TRUE., + LXTTCLS=.TRUE., + LXXDIAGH=.TRUE., + LXXGST=.TRUE., + NFRRAZ=72, + NRAZTS(0)=0, + / + &NAM_CANAPE + / + &NAM_DISTRIBUTED_VECTORS + / + &NAPHLC + / + &NEMCT0 + / + &NEMDIM + / + &NEMDYN + / + &NEMELBC0A + LESPCPL=.TRUE., + NBICNHX=2, + NBICOP=2, + NBICOT=2, + NBICOU=2, + NBICPD=2, + NBICVD=2, + NECRIPL=1, + / + &NEMELBC0B + NEFRSPCPL=1, + NEK0=20, + NEK1=30, + NEN1=4, + NEN2=8, + SPNUDDIV=0.01, + SPNUDQ=0., + SPNUDT=0.01, + SPNUDVOR=0.01, + TEFRCL=3600., + / + &NEMFPEZO + / + &NEMGEO + / + &NEMJK + / + &NEMVAR + / + &NEMWAVELET + / + &NAETLDIAG + / + &NAMMETHOX + / + &NAMSPP + / + &NAMACV + / + &NAMFPOBJ + / + &NAMNORGWD + / + &NAMTRAJ + / + &NAMSATSIM + / + &NAMDVISI + / + &NAMNUDGLH + / + &NAMPERTPAR + / +FIN +/bin/cat fort.4 + +/bin/cat <<FIN > EXSEG1.nam + &NAM_DIAG_ISBAN + LPGD=.TRUE., + LSURF_MISC_BUDGET=.TRUE., + / + &NAM_DIAG_SURFN + LCOEF=.TRUE., + LSURF_BUDGET=.TRUE., + N2M=2, + / + &NAM_ISBAN + CSCOND='NP89', + / + &NAM_REPROD_OPER + LREPROD_OPER=.TRUE., + / + &NAM_SEAFLUXN + CSEA_FLUX='ECUME', + LPWG=.FALSE., + LPRECIP=.FALSE., + LPWEBB=.FALSE., + / + &NAM_SSON + CROUGH='Z01D', + XFRACZ0=5., + LDSV=.FALSE., + / + &NAM_SURF_ATM + XRIMAX=0.2, + LNOSOF=.TRUE., + / + &NAM_SURF_CSTS + XZ0SN=0.01, + XZ0HSN=0.001, + XEMISSN=0.99, + / + &NAM_WRITE_DIAG_SURFN + LPROVAR_TO_DIAG=.FALSE., + LSELECT=.TRUE., +CSELECT(1)='T2M','HU2M','XX','YY','DX','DY','SST','Z0SEA','TS_WATER','Z0WATER','TG1','TG2','TG3','WG1','WG2','WG3','WGI1','WGI2','WGI3','WR','WSN_VEG1','RSN_VEG1','ASN_VEG','TSRAD_NAT','RESA','TROOF1','TROOF2','TROOF3','TROOF4','TROOF5','WS_ROOF','TROAD1','TROAD2','TROAD3','TROAD4','TROAD5','WS_ROAD','TWALL1','TWALL2','TWALL3','TWALL4','TWALL5','TI_BLD','T_WIN1','TI_ROAD','WSN_RF1','RSN_RF1','TSN_RF1','ASN_RF','WSN_RD1','RSN_RD1','TSN_RD1','ASN_RD','TCANYON','QCANYON','STORAGE_TYPE','MASDEV','VERSION','BUG','DIM_FULL','DTCUR','LAT0','LON0','RPK','BETA','LATORI','LONORI','IMAX','JMAX','RW_PRECIP','BUDC','SEA_OCEAN','SEA_SBL','WAT_SBL','SN_VEG_N','SN_VEG','LSNOW_FRAC_T','GLACIER','TEMPARP','NLITTER','NLITTLEVS','NSOILCARB','ISBA_CANOPY','SN_RF_N','SN_RF','SN_RD_N','SN_RD','SN_RD_TYP','SN_RF_TYP','TEB_CANOPY','STORAGETYPE','CARTESIAN','GRID_TYPE','SN_VEG_TYP','RESPSL','ROAD_DIR','WALL_OPT','LAI','VEG','RSMIN','DG2','_FBUF_SIZE','_FBUF_DIM1','_FBUF_DIM2','_FBUF_NAME','_FBUF_TYPE','_FBUF_MASK','LCPL_GCM','HANDLE_SIC','SSS', + / + &NAM_WRITE_SURF_ATM + LNOWRITE_TEXFILE=.TRUE., + / +FIN +/bin/cat EXSEG1.nam + +# ***************************************** +# * Acquisition du fichier de demarrage * +# ***************************************** + +echo +for hh in 0 1 2 3 4 5 6 ; do + N=`expr $hh / 1 ` + set -x + ln -s $rekchemin/data/aro/$case/ELSCFFCSTALBC000${N}_l15 ELSCF${CNMEXP}ALBC00${N} + set +x +done +set -x +ln -s $rekchemin/data/aro/$case/ICMSHFCSTINIT_l15 ICMSH${CNMEXP}INIT +ln -s $rekchemin/data/aro/$case/ICMSHFCSTINIT.sfx ICMSH${CNMEXP}INIT.sfx +ln -s $rekchemin/data/surfex/v8/ecoclimapI_covers_param.bin . +ln -s $rekchemin/data/surfex/v8/ecoclimapII_eu_covers_param.bin . +ln -s $rekchemin/data/surfex/v8/ecoclimapII_af_covers_param.bin . +ln -s $rekchemin/data/aro/$case/Const.Clim Const.Clim +ln -s $rekchemin/data/aro/$case/Const.Clim.sfx Const.Clim.sfx +ln -s $rekchemin/data/aro/$case/const.clim.FRANGP0025 const.clim.FRANGP0025 +ln -s $rekchemin/data/rttov12/rtcoef_meteosat_9_seviri.dat . +ln -s $rekchemin/data/rttov12/rtcoef_meteosat_10_seviri.dat . +ln -s $rekchemin/data/rttov12/sccldcoef_meteosat_9_seviri.dat . +set +x +tar xfz $rekchemin/data/rtm/radiation_params.47r1_light.tgz + +# *************** +# * Chargement * +# *************** + +echo +set -x +\ln -s $LOADIR/MASTERODB MASTER +set +x +if ldd MASTER | grep openmpi > /dev/null; then + #On est sur PC + MPILIB=$(ldd MASTER | grep openmpi | tail -1 | awk '{print $3}' | awk -F "/" '{print $(NF-2)}') + MPIRUN="$(echo $(dirname $(dirname $(ldd MASTER | grep openmpi| tail -1 | awk '{print $3}'))))/bin/orterun --oversubscribe -np $NPROC" + GRIB_API=$(dirname $(dirname $(ldd MASTER | grep grib_api | head -1 | awk '{print $3}') 2>/dev/null) 2>/dev/null) + ECCODES=$(dirname $(dirname $(ldd MASTER | grep eccodes | head -1 | awk '{print $3}') 2>/dev/null) 2>/dev/null) + export GRIB_SAMPLES_PATH=$GRIB_API/share/grib_api/ifs_samples/grib1 + export GRIB_DEFINITION_PATH=$GRIB_API/share/grib_api/definitions + export ECCODES_SAMPLES_PATH=$ECCODES/share/eccodes/ifs_samples/grib1 + export ECCODES_DEFINITION_PATH=$rekchemin/data/eccodes_extras_definitions:$ECCODES/share/eccodes/definitions +else + #On est sur HPC + #MPIRUN="$(echo $(dirname $(dirname $(ldd MASTER | grep libmpi| tail -1 | awk '{print $3}'))))/bin/mpirun -wdir $PWD" + NNODES=$SLURM_JOB_NUM_NODES + MPITASKS_PER_NODE=$((SLURM_NTASKS/SLURM_JOB_NUM_NODES)) + MPI_TASKS=$SLURM_NTASKS + MPIRUN="/opt/softs/mpiauto/mpiauto -np $MPI_TASKS -nnp $MPITASKS_PER_NODE --" + export OMP_STACKSIZE=4G + export KMP_STACKSIZE=4G + export KMP_MONITOR_STACKSIZE=4G + export DR_HOOK=1 + export DR_HOOK_IGNORE_SIGNALS=-1 + export DR_HOOK_SILENT=1 + export DR_HOOK_SHOW_PROCESS_OPTIONS=0 + export MPL_MBX_SIZE=2048000000 + export EC_PROFILE_HEAP=0 + export EC_PROFILE_MEM=0 + export EC_MPI_ATEXIT=0 + export EC_MEMINFO=0 + export OPENBLAS_NUM_THREADS=1 + export MKL_CBWR="AUTO,STRICT" + export MKL_NUM_THREADS=1 + export MKL_DEBUG_CPU_TYPE=5 + export ECCODES_SAMPLES_PATH=/opt/softs/libraries/ICC_2018.5.274/eccodes-2.17.0/share/eccodes/ifs_samples/grib1 + export ECCODES_DEFINITION_PATH=/opt/softs/libraries/ICC_2018.5.274/eccodes-2.17.0/share/eccodes/definitions +fi +echo $MPIRUN +set +x +if [ ! -f MASTER ] ; then echo No executable MASTER;exit 1;fi + +# *************** +# * Execution * +# *************** + +echo +echo OMP_NUM_THREADS=$OMP_NUM_THREADS +set -x +ulimit -s unlimited +$MPIRUN $PWD/MASTER >lola +set +x +echo +##if [ -f lola ] ; then +## echo;echo Standard output :;echo;cat lola +##fi +##if [ -f stderr.* ] ; then +## for file in stderr.* ; do +## echo;echo $file :;cat $file +## done +##fi +##if [ -f stdout.* ] ; then +##echo;echo stdout :;echo;cat stdout.* +##fi +##if [ -a NODE.001_01 ] ; then +## for file in NODE* ; do +## echo;echo Listing $file;echo +## cat $file +## done +##fi +##if [ $(find . -name "drhook.prof.*" | wc -l) -ne 0 ] ; then +### Top 25 for each MPI task : +## for file in drhook.prof.* ; do +## echo;echo $file :;head -38 $file +## done +##fi +#cat drhook.prof.* | perl -w $HOME/bin/drhook_merge_walltime_max.pl + +# ******************* +# * Sauvegardes * +# ******************* + +ls +#if [ -f PFFPOS000+0000 ] ; then +# cp PFFPOS000+0000 $WAIT_QUEUE/PFFPOS000+0000.$PBS_JOBID +#fi +cp lola NODE.001_01 ICMSHFPOS+00* DHFDLFPOS+00* $OUTPUTDIR/ +/bin/rm fort.4 EXSEG1.nam lola ICMSHFPOS+0000* PFFPOSFRANGP0025+0000* ICMSHFPOS+0001* +/bin/rm PFFPOSFRANGP0025+0001* ICMSHFPOS+0002* ECHIS PFFPOSFRANGP0025+0002* DHFDLFPOS+00* +/bin/rm ECHFP NODE.001_01 ifs.stat $(tar tfz $rekchemin/data/rtm/radiation_params.47r1_light.tgz) + +# **************** +# * Epilogue * +# **************** + +ls -ltr | grep -v "\->" +echo Wait_queue : +ls -ltr $TMPWAIT +cd $TMPDIR +\rm -rf rundir.$$ +\rm -rf wait_queue.$$ +date +set +x diff --git a/tools/conf_tests/small_3D_alt3/aro48t3.sh b/tools/conf_tests/small_3D_alt3/aro48t3.sh new file mode 100755 index 0000000000000000000000000000000000000000..74b175583b629d090492e0ace4e1b052b36c1026 --- /dev/null +++ b/tools/conf_tests/small_3D_alt3/aro48t3.sh @@ -0,0 +1,1209 @@ +#!/bin/bash +#SBATCH -n 4 +#SBATCH --mem=20000 +#SBATCH --export=MYLIB,HOME,HOMEPACK,TMPDIR,OUTPUTDIR,TESTDIR +#SBATCH -t 00:10:00 +#SBATCH -N 1 +#SBATCH -p normal256 + +#The MYLIB varibale must contain the gmkpack pack name +#The TESTDIR variable must contain the test directory +#Results will be stored in the local directory + +#Other environment varaibles that can be set: +#OUTPUTDIR + +date + +OUTPUTDIR=${OUTPUTDIR:-$PWD} +case=riette2 +#rekchemin="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" #Resources for the run must be in the same directory as this script +rekchemin=$TESTDIR + +NPROC=4 +NSTRIN=$NPROC +NSTROUT=1 +NPRTRW_NPRTRV="" +NPRTRW_NPRTRV=" NPRTRW=$NPROC, + NPRTRV=1," +export OMP_NUM_THREADS=1 + +#MYLIB=48t1_main.01%jpdup + +export DR_HOOK=1 +#export DR_HOOK_IGNORE_SIGNALS=-1 +export DR_HOOK_NOT_MPI=1 +export DR_HOOK_SILENT=1 +export DR_HOOK_OPT= + +export EC_PROFILE_HEAP=0 +export EC_PROFILE_MEM=0 +export EC_MPI_ATEXIT=0 +export DR_HOOK_SHOW_PROCESS_OPTIONS=0 +export EC_MEMINFO=0 +export TVSEARCHPATH=$SOURCE + +HOMEPACK=${HOMEPACK:=$HOME/pack} +SOURCE=$HOMEPACK/$MYLIB/src/local +LOADIR=$HOMEPACK/$MYLIB/bin + +TMPDIR=${TMPDIR:=$HOME/tmp} +TMPLOC=$TMPDIR/rundir.$$ +TMPWAIT=$TMPDIR/wait_queue.$$ +mkdir $TMPWAIT +mkdir $TMPLOC +cd $TMPLOC + +export RTTOV_COEFDIR=$PWD + +# ************************** +# * Saisie des NAMELISTS * +# ************************** + +CNMEXP='FPOS' + +echo +/bin/cat <<FIN > fort.4 + &NACIETEO + / + &NACOBS + / + &NACTAN + / + &NACTEX + / + &NACVEG + / + &NADOCK + / + &NAEAEM7 + / + &NAEAER + / + &NAECOAPHY + / + &NAEPHLI + / + &NAEPHY + / + &NAERAD + LRRTM=.TRUE., + LSRTM=.FALSE., + NAER=1, + NICEOPT=3, + NLIQOPT=3, + NOVLP=6, + NOZOCL=2, + NRADFR=18, + NRADIP=3, + NRADLP=2, + NSW=6, + RLWINHF=1, + RRE2DE=0.64952, + RSWINHF=1, + / + &NAERCLI + / + &NAEVOL + / + &NAIMPO + / + &NALORI + / + &NAMAFN + GFP_CLSG%CLNAME='SURFACCGRAUPEL', + GFP_CLSP%CLNAME='SURFACCPLUIE', + GFP_CLSS%CLNAME='SURFACCNEIGE', + GFP_SFIS%IBITS=16, + GFP_ST%CLNAME='SURFTEMPERATURE', + GFP_ST%IANO=0, + GFP_ST%IBITS=12, + GFP_X10U%CLNAME='CLSVENT.ZONAL', + GFP_X10U%IANO=0, + GFP_X10U%IBITS=12, + GFP_X10V%CLNAME='CLSVENT.MERIDIEN', + GFP_X10V%IANO=0, + GFP_X10V%IBITS=12, + GFP_X2RH%CLNAME='CLSHUMI.RELATIVE', + GFP_X2RH%IANO=0, + GFP_X2RH%IBITS=12, + GFP_X2T%CLNAME='CLSTEMPERATURE', + GFP_X2T%IANO=1, + GFP_XCCC%IBITS=8, + GFP_XHCC%IBITS=8, + GFP_XLCC%IBITS=8, + GFP_XLSG%CLNAME='SURFINSGRAUPEL', + GFP_XLSP%CLNAME='SURFINSPLUIE', + GFP_XLSS%CLNAME='SURFINSNEIGE', + GFP_XMCC%IBITS=8, + GFP_XN2T%IBITS=12, + GFP_XTCC%IBITS=8, + GFP_XUGST%CLNAME='CLSU.RAF60M.XFU', + GFP_XUGST%IANO=0, + GFP_XUGST%IBITS=12, + GFP_XVGST%CLNAME='CLSV.RAF60M.XFU', + GFP_XVGST%IANO=0, + GFP_XVGST%IBITS=12, + GFP_XX2T%IBITS=12, + GFP_XXDIAGH%IBITS=12, + TFP_ABS%ZFK=32., + TFP_CLF%IBITS=6, + TFP_EDR%CLNAME='EDR', + TFP_EDR%IBITS=16, + TFP_EDR%IGRIB=136, + TFP_GR%IBITS=12, + TFP_HL%IBITS=12, + TFP_HTB%IBITS=16, + TFP_HTB%LLGP=.TRUE., + TFP_HU%IBITS=12, + TFP_MSAT9C2%IBITS=12, + TFP_MSAT9C6%IBITS=12, + TFP_MSLNH%IBITS=12, + TFP_PV%ZFK=64., + TFP_RCLS%IBITS=12, + TFP_RR%IBITS=12, + TFP_SN%IBITS=12, + TFP_T%IBITS=12, + TFP_TCLS%IBITS=12, + TFP_TH%IBITS=12, + TFP_THPW%IBITS=12, + TFP_THV%IBITS=12, + TFP_TN%IBITS=12, + TFP_TWV%IBITS=12, + TFP_TX%IBITS=12, + TFP_U%IBITS=12, + TFP_V%IBITS=12, + TFP_VOR%ZFK=32., + TFP_VV%ZFK=32., + / + &NAMARG + CNMEXP='${CNMEXP}', + LECMWF=.FALSE., + LELAM=.TRUE., + LSLAG=.TRUE., + NCONF=1, + NSUPERSEDE=1, + / + &NAMARPHY + LKFBCONV=.FALSE., + LKFBD=.FALSE., + LKFBS=.FALSE., + LMFSHAL=.TRUE., + LMICRO=.TRUE., + LMPA=.TRUE., + LMSE=.TRUE., + LTURB=.TRUE., + / + &NAMCA + / + &NAMCAPE + / + &NAMCFU + LCUMFU=.TRUE., + LFPLS=.TRUE., + LFPLSG=.TRUE., + LFR=.TRUE., + LFRRC=.TRUE., + LFSF=.TRUE., + LNEBPAR=.TRUE., + LNEBTT=.TRUE., + LRAYD=.TRUE., + LRAYS=.TRUE., + / + &NAMCHEM + / + &NAMCHET + / + &NAMCHK + / + &NAMCLA + / + &NAMCLDP + / + &NAMCLI + / + &NAMCLOP15 + / + &NAMCLTC + / + &NAMCOK + / + &NAMCOM + / + &NAMCOSJO + / + &NAMCOUPLO4 + / + &NAMCT0 + CFPNCF='ECHFP', + CNPPATH=' ', + LAROME=.TRUE., + LNHEE=.TRUE., + LSCREEN_OPENMP=.FALSE., + LSPRT=.TRUE., + LTWOTL=.TRUE., + NFPOS=1, + NFRSDI=18, + NSDITS(0)=0, + NFRHIS=72, + NHISTS(0)=0, + NFRPOS=72, + NPOSTS(0)=0, + NFRSFXHIS=72, + NSFXHISTS(0)=0, + NFRDHFD=72, + NDHFDTS(0)=0, + / + &NAMCT1 + LRFILAF=.FALSE., + N1HIS=1, + N1POS=1, + N1RES=0, + N1SDI=1, + N1SFXHIS=1, + N1GDI=0, + / + &NAMCUMF + / + &NAMCUMFS + / + &NAMCVER + / + &NAMCVMNH + / + &NAMDDH + LDDH_OMP=.TRUE., + LHDDOP=.TRUE., + LHDHKS=.TRUE., + LHDEFD=.TRUE., + LFLEXDIA=.TRUE., + BDEDDH(1,1)=3, + BDEDDH(2,1)=1, + BDEDDH(3,1)=358.8 + BDEDDH(4,1)=45.1 + BDEDDH(5,1)=360.3 + BDEDDH(6,1)=44.5 + / + &NAMDFI + / + &NAMDIM + NPROMA=-50, + / + &NAMDIMO + / + &NAMDIM_TRAJ + / + &NAMDPHY + / + &NAMDPRECIPS + / + &NAMDYN + LADVF=.TRUE., + LQMPD=.FALSE., + LQMT=.FALSE., + LQMVD=.FALSE., + LRHDI_LASTITERPC=.TRUE., + NITMP=4, + NSITER=1, + NSPDLAG=3, + NSVDLAG=3, + NTLAG=3, + NVLAG=3, + NWLAG=3, + RDAMPDIV=20., + RDAMPPD=20., + RDAMPQ=0., + RDAMPT=0., + RDAMPVD=20., + RDAMPVOR=20., + REPS1=0., + REPS2=0., + REPSM1=0., + REPSM2=0., + REPSP1=0., + SDRED=1., + SIPR=90000., + SITR=350., + SITRA=100., + SLHDA0=0.25, + SLHDD00=0.000065, + VESL=0.05, + XIDT=0., + ZSLHDP1=1.7, + ZSLHDP3=0.6, + / + &NAMDYNA + LCOMADH=.TRUE., + LCOMADV=.FALSE., + LCOMAD_GFL=.TRUE., + LCOMAD_SP=.TRUE., + LCOMAD_SPD=.TRUE., + LCOMAD_SVD=.TRUE., + LCOMAD_T=.TRUE., + LCOMAD_W=.TRUE., + LGWADV=.TRUE., + LNESC=.TRUE., + LPC_CHEAP=.TRUE., + LPC_FULL=.TRUE., + LRDBBC=.FALSE., + LSETTLS=.FALSE., + LSETTLST=.TRUE., + LSLHD_GFL=.TRUE., + LSLHD_OLD=.FALSE., + LSLHD_SPD=.FALSE., + LSLHD_SVD=.FALSE., + LSLHD_T=.FALSE., + LSLHD_W=.FALSE., + ND4SYS=2, + NDLNPR=1, + NPDVAR=2, + NVDVAR=4, + SLHDEPSH=0.08, + SLHDKMAX=6, + / + &NAMDYNCORE + / + &NAMEMIS_CONF + / + &NAMENKF + / + &NAMFA + CMODEL='OUTPUTID', + LEXTERN=.TRUE., + LSUPPDATE=.FALSE., + NBITCS=-1, + NBITPG=-1, + NSTRON=-1, + / + &NAMFAINIT + JPXTRO=2000, + / + &NAMFPC + CFP2DF(1)='SURFPRESSION', + CFP2DF(2)='MSL_NHPRESSURE', + CFP2DF(3)='SURFTOT.WAT.VAPO', + CFP2DF(4)='SURFISOTPW0.MALT', + CFP2DF(5)='SURFCAPE.POS.F00', + CFP2DF(6)='C002_METEOSAT_09_SEVIRI.POS', + CFP2DF(7)='C006_METEOSAT_09_SEVIRI.POS', + CFP2DF(8)='SURFREFLECT.MAX', + CFP2DF(9)='SURFISOTPW1.MALT', + CFP2DF(10)='SURFISOTPW2.MALT', + CFP3DF(1)='GEOPOTENTIEL', + CFP3DF(2)='TEMPERATURE', + CFP3DF(3)='VENT_ZONAL', + CFP3DF(4)='VENT_MERIDIEN', + CFP3DF(5)='HUMI_RELATIVE', + CFP3DF(6)='THETA_PRIM_W', + CFP3DF(7)='PRESSURE', + CFP3DF(8)='ABS_VORTICITY', + CFP3DF(9)='VITESSE_VERTICALE', + CFP3DF(10)='TEMPE_POTENT', + CFP3DF(11)='POT_VORTICIT', + CFP3DF(12)='SIM_REFLECTI', + CFP3DF(13)='RAIN', + CFP3DF(14)='SNOW', + CFP3DF(15)='GRAUPEL', + CFP3DF(16)='ICE_CRYSTAL', + CFP3DF(17)='CLOUD_WATER', + CFP3DF(18)='VERT.VELOCIT', + CFP3DF(19)='DIVERGENCE', + CFP3DF(20)='THETA_VIRTUA', + CFP3DF(21)='TKE', + CFP3DF(22)='CLOUD_FRACTI', + CFP3DF(23)='ISOT_ALTIT', + CFP3DF(24)='EDR', + CFPCFU(1)='SURFTENS.TOTA.ZO', + CFPCFU(2)='SURFTENS.TOTA.ME', + CFPCFU(3)='SURFACCPLUIE', + CFPCFU(4)='SURFACCNEIGE', + CFPCFU(5)='SURFACCGRAUPEL', + CFPCFU(6)='SOMMFLU.RAY.SOLA', + CFPCFU(7)='SURFFLU.RAY.SOLA', + CFPCFU(8)='SOMMFLU.RAY.THER', + CFPCFU(9)='SURFFLU.RAY.THER', + CFPCFU(10)='SURFFLU.LAT.MTOT', + CFPCFU(11)='SURFFLU.MTOTA.NE', + CFPCFU(12)='SURFFLU.CHA.SENS', + CFPCFU(13)='SURFRAYT SOLA DE', + CFPCFU(14)='SURFRAYT THER DE', + CFPCFU(15)='SURFRAYT SOL CL', + CFPCFU(16)='SURFRAYT THER CL', + CFPCFU(17)='SURFRAYT DIR SUR', + CFPDOM(1)='FRANGP0025', + CFPFMT='LALON', + CFPPHY(1)='SURFTEMPERATURE', + CFPPHY(2)='INTSURFGEOPOTENT', + CFPPHY(3)='SURFRESERV.NEIGE', + CFPXFU(1)='CLSTEMPERATURE', + CFPXFU(2)='CLSHUMI.RELATIVE', + CFPXFU(3)='CLSVENT.ZONAL', + CFPXFU(4)='CLSVENT.MERIDIEN', + CFPXFU(5)='SURFNEBUL.TOTALE', + CFPXFU(6)='SURFNEBUL.HAUTE', + CFPXFU(7)='SURFNEBUL.MOYENN', + CFPXFU(8)='SURFNEBUL.BASSE', + CFPXFU(9)='CLSMAXI.TEMPERAT', + CFPXFU(10)='CLSMINI.TEMPERAT', + CFPXFU(11)='CLPMHAUT.MOD.XFU', + CFPXFU(12)='SURFDIAGHAIL', + LCRITSNOWTEMP=.FALSE., + LFPCAPEX=.TRUE., + LFPMOIS=.TRUE., + LFPPACKING=.FALSE., + LWIDER_DOM=.TRUE., + L_READ_MODEL_DATE=.TRUE., + NFITI=1, + NFITV=1, + NFPCAPE=5, + NFPCLI=1, + NFPGRIB=1, + NFPINPHY=4, + NITERPV=8, + RENTRA=0.0001, + RFP3H(1)=10., + RFP3H(2)=20., + RFP3H(3)=35., + RFP3H(4)=50., + RFP3H(5)=75., + RFP3H(6)=100., + RFP3H(7)=150., + RFP3H(8)=200., + RFP3H(9)=250., + RFP3H(10)=375., + RFP3H(11)=500., + RFP3H(12)=625., + RFP3H(13)=750., + RFP3H(14)=875., + RFP3H(15)=1000., + RFP3H(16)=1125., + RFP3H(17)=1250., + RFP3H(18)=1375., + RFP3H(19)=1500., + RFP3H(20)=1750., + RFP3H(21)=2000., + RFP3H(22)=2250., + RFP3H(23)=2500., + RFP3H(24)=2750., + RFP3H(25)=3000., + RFP3I(1)=-273.15, + RFP3I(2)=-263.15, + RFP3I(3)=-261.15, + RFP3I(4)=-253.15, + RFP3P(1)=10000., + RFP3P(2)=12500., + RFP3P(3)=15000., + RFP3P(4)=17500., + RFP3P(5)=20000., + RFP3P(6)=22500., + RFP3P(7)=25000., + RFP3P(8)=27500., + RFP3P(9)=30000., + RFP3P(10)=35000., + RFP3P(11)=40000., + RFP3P(12)=45000., + RFP3P(13)=50000., + RFP3P(14)=55000., + RFP3P(15)=60000., + RFP3P(16)=65000., + RFP3P(17)=70000., + RFP3P(18)=75000., + RFP3P(19)=80000., + RFP3P(20)=85000., + RFP3P(21)=90000., + RFP3P(22)=92500., + RFP3P(23)=95000., + RFP3P(24)=100000., + RFP3PV(1)=0.0000015, + RFP3PV(2)=0.000002, + RFPCD2=5., + RFPCSAB=50., + RFPVCAP=7000., + / + &NAMFPD + NLAT(1)=41, + NLON(1)=41, + RLONC(1)=-0.71, + RLATC(1)=44.8, + RDELX(1)=0.025, + RDELY(1)=0.025, + / + &NAMFPDY2 + / + &NAMFPDYF + / + &NAMFPDYH + / + &NAMFPDYI + / + &NAMFPDYP + / + &NAMFPDYS + / + &NAMFPDYT + / + &NAMFPDYV + / + &NAMFPF + NFMAX(1)=60, + NFMAX(2)=80, + / + &NAMFPG + NFPDISTRIB=1, + / + &NAMFPIOS + / + &NAMFPMOVE + / + &NAMFPPHY + / + &NAMFPSC2 + NFPROMA=-50, + / + &NAMFPSC2_DEP + NFPROMA_DEP=-50, + / + &NAMGEM + / + &NAMGFL + NGFL_EZDIAG=4, + YEZDIAG_NL(1)%CNAME='EZDIAG01', + YEZDIAG_NL(1)%LREQOUT=.FALSE., + YEZDIAG_NL(2)%CNAME='EZDIAG02', + YEZDIAG_NL(2)%LREQOUT=.FALSE., + YEZDIAG_NL(3)%CNAME='EZDIAG03', + YEZDIAG_NL(3)%LREQOUT=.FALSE., + YEZDIAG_NL(4)%CNAME='INPRRTOT3D', + YEZDIAG_NL(4)%LREQOUT=.TRUE., + YG_NL%LQM=.TRUE., + YG_NL%LSLHD=.TRUE., + YG_NL%NCOUPLING=-1, + YG_NL%NREQIN=1, + YG_NL%REFVALC=0., + YIRAD_NL%LGP=.TRUE., + YI_NL%LQM=.TRUE., + YI_NL%LSLHD=.TRUE., + YI_NL%NCOUPLING=-1, + YI_NL%NREQIN=1, + YI_NL%REFVALC=0., + YLRAD_NL%LGP=.TRUE., + YL_NL%LQM=.TRUE., + YL_NL%LSLHD=.TRUE., + YL_NL%NCOUPLING=-1, + YL_NL%NREQIN=1, + YL_NL%REFVALC=0., + YQ_NL%LCOMAD=.TRUE., + YQ_NL%LQM=.TRUE., + YQ_NL%LSLHD=.FALSE., + YQ_NL%NREQIN=1, + YR_NL%LQM=.TRUE., + YR_NL%LSLHD=.TRUE., + YR_NL%NCOUPLING=-1, + YR_NL%NREQIN=1, + YR_NL%REFVALC=0., + YS_NL%LQM=.TRUE., + YS_NL%LSLHD=.TRUE., + YS_NL%NCOUPLING=-1, + YS_NL%NREQIN=1, + YS_NL%REFVALC=0., + YTKE_NL%NCOUPLING=0, + YTKE_NL%NREQIN=1, + / + &NAMGRIB + / + &NAMGWD + / + &NAMGWDIAG + / + &NAMGWWMS + / + &NAMIAU + ALPHAIAU=0.5, + LIAU=.FALSE., + TSTARTIAU=1800, + TSTOPIAU=5340, + / + &NAMICE + / + &NAMINI + LDFI=.FALSE., + / + &NAMINTFLEX + / + &NAMIOMI + / + &NAMIOS + / + &NAMIO_SERV + NIO_SERV_BUF_MAXSIZE=20, + NIO_SERV_METHOD=2, + NMSG_LEVEL_CLIENT=0, + NMSG_LEVEL_SERVER=0, + NPROCESS_LEVEL=5, + NPROC_IO=0, + / + &NAMJBCODES + / + &NAMJFH + / + &NAMJG + / + &NAMLCZ + / + &NAMLSFORC + / + &NAMMARS + / + &NAMMCC + / + &NAMMCUF + / + &NAMMKODB + / + &NAMMODERR + / + &NAMMTS + / + &NAMMWAVE + / + &NAMNPROF + / + &NAMNUD + / + &NAMOBS + / + &NAMONEDVAR + / + &NAMOOPS + / + &NAMOPH + CFNHWF='ECHIS', + LINC=.TRUE., + NTIMEFMT=1, + / + &NAMOPTCMEM + / + &NAMPAR0 + LOPT_SCALAR=.TRUE., + NPRINTLEV=1, + LMPOFF=.FALSE., + MBX_SIZE=2048000000, + MP_TYPE=2, + NOUTPUT=1, + NPROC=$NPROC, +$NPRTRW_NPRTRV + / + &NAMPAR1 + LEQ_REGIONS=.FALSE., + LSLONDEM=.TRUE., + LSPLIT=.TRUE., + LSYNC_SLCOM=.FALSE., + LSYNC_TRANS=.FALSE., + L_GATHERV_WRGP=.FALSE., + NCOMBFLEN=1800000, + NSTRIN=$NSTRIN, + NSTROUT=$NSTROUT, + / + &NAMPARAR + CFRAC_ICE_ADJUST='S', + CFRAC_ICE_SHALLOW_MF='S', + CMICRO='ICE3', + CSEDIM='STAT', + CSNOWRIMING='M90', + LCONVHG=.TRUE., + LCRFLIMIT=.TRUE., + LCRIAUTI=.TRUE., + LEVLIMIT=.TRUE., + LFEEDBACKT=.TRUE., + LFPREC3D=.TRUE., + LNULLWETG=.TRUE., + LNULLWETH=.TRUE., + LOLSMC=.TRUE., + LOSEDIC=.TRUE., + LOSIGMAS=.TRUE., + LOSUBG_COND=.TRUE., + LSEDIM_AFTER=.FALSE., + LWETGPOST=.TRUE., + LWETHPOST=.TRUE., + NMAXITER_MICRO=1, + NPRINTFR=10000, + NPTP=1, + RCRIAUTC=0.001, + RCRIAUTI=0.0002, + RT0CRIAUTI=-5., + VSIGQSAT=0.02, + XFRACM90=0.1, + XMRSTEP=0.00005, + XSPLIT_MAXCFL=0.8, + XTSTEP_TS=0., + CSUBG_RC_RR_ACCR='PRFR', + CSUBG_RR_EVAP='PRFR', + / + &NAMPHMSE + LPGDFWR=.FALSE., + / + &NAMPHY + LAERODES=.TRUE., + LAEROLAN=.TRUE., + LAEROSEA=.TRUE., + LAEROSOO=.TRUE., + LEDR=.TRUE., + LMPHYS=.TRUE., + LO3ABC=.TRUE., + LRAYFM=.TRUE., + / + &NAMPHY0 + ALMAV=300., + BEDIFV=0.05, + ECMNP=3000., + GCCSV=0., + GCVADS=0.8, + GCVALFA=0.000045, + GCVBETA=0.2, + GCVMLT=0.00016, + GCVNU=0.000025, + GCVPSI=1., + GCVPSIE=1., + GDDEVA=0.25, + GDDSDE=0.5, + GWDCD=6., + HUCOE=0.5, + HUTIL=1.8, + QSSC=400., + QSSUSC=0.75, + QSSUSS=0.4, + QSSUSV=250., + QSUSXC=0.0002, + QSUSXS=0.0003, + QXRAL=130., + QXRDEL=0.49, + QXRHX=0.99, + QXRR=0.25, + RCVEVAP=0.25, + REFLKUO=5000., + REVGSL=15., + SCO=-20., + TDDGP=0.8, + TENTR=0.0000025, + TENTRX=0.00008, + TUDGP=0.8, + UHDIFV=0.0008, + USURIC=0.175, + USURICE=0.5, + USURICL=1., + USURID=0.1, + USURIDE=0.25, + VZ0CM=0.00015, + XMAXLM=5000., + XMINLM=10., + / + &NAMPHY1 + ALBMIN=0.65, + ALCRIN=0.75, + GCGEL=0.00003, + GCGELS=0.00005, + GNEIMX=1.8, + GNEIMXS=1.8, + RCTVEG(3)=0.000012, + RCTVEG(4)=0.00001, + / + &NAMPHY2 + FACRAF=3.8, + HTKERAF=20., + LMULAF=.TRUE., + LRAFTKE=.TRUE., + LRAFTUR=.TRUE., + XDAMP=1., + XMULAF=-1.85, + / + &NAMPHY3 + / + &NAMPHYDS + / + &NAMPONG + / + &NAMPPC + / + &NAMPPVI + / + &NAMPRE + / + &NAMRAD15 + / + &NAMRADCMEM + / + &NAMRCF + / + &NAMRCOEF + / + &NAMRES + / + &NAMRGRI + / + &NAMRINC + / + &NAMRIP + TSTEP=50., + CSTOP='h2', + / + &NAMRIP0 + / + &NAMRLX + / + &NAMSATS + LPARTIAL_COEF_FILES=.TRUE., + / + &NAMSCC + / + &NAMSCEN + / + &NAMSCM + / + &NAMSEKF + / + &NAMSENS + / + &NAMSFXCMP + CFLDNAME(1)='????????????????', + NBBITS(1)=24, + / + &NAMSIMPHL + / + &NAMSPNG + / + &NAMSPSDT + / + &NAMSTA + / + &NAMSTOPH + / + &NAMSWE + / + &NAMTESTVAR + / + &NAMTHLIM + / + &NAMTOPH + ETCVIM=5000., + ETNEBU=5000., + ETPLUI=5000., + XDRMTK=6.0D-7, + XDRMTP=800., + XDRMUK=3.0D-7, + XDRMUP=800., + / + &NAMTRAJP + / + &NAMTRANS + / + &NAMTRANS0 + / + &NAMTS + / + &NAMVAR + / + &NAMVARBC + / + &NAMVARBC_AIREP + / + &NAMVARBC_ALLSKY + / + &NAMVARBC_GBRAD + / + &NAMVARBC_RAD + / + &NAMVARBC_SFCOBS + / + &NAMVARBC_TCWV + / + &NAMVARBC_TO3 + / + &NAMVAREPS + / + &NAMVDF + / + &NAMVDOZ + / + &NAMVOLCANO + / + &NAMVRTL + / + &NAMVV0 + / + &NAMVV1 + / + &NAMVWRK + / + &NAMWAVELETJB + / + &NAMXFU + LXCLP=.TRUE., + LXCLS=.TRUE., + LXFU=.TRUE., + LXNEBPA=.TRUE., + LXNEBTT=.TRUE., + LXNUVCLS=.TRUE., + LXPLS=.TRUE., + LXPLSG=.TRUE., + LXQCLS=.TRUE., + LXR=.TRUE., + LXSOIL=.FALSE., + LXTHW=.TRUE., + LXTRT=.TRUE., + LXTTCLS=.TRUE., + LXXDIAGH=.TRUE., + LXXGST=.TRUE., + NFRRAZ=72, + NRAZTS(0)=0, + / + &NAM_CANAPE + / + &NAM_DISTRIBUTED_VECTORS + / + &NAPHLC + / + &NEMCT0 + / + &NEMDIM + / + &NEMDYN + / + &NEMELBC0A + LESPCPL=.TRUE., + NBICNHX=2, + NBICOP=2, + NBICOT=2, + NBICOU=2, + NBICPD=2, + NBICVD=2, + NECRIPL=1, + / + &NEMELBC0B + NEFRSPCPL=1, + NEK0=20, + NEK1=30, + NEN1=4, + NEN2=8, + SPNUDDIV=0.01, + SPNUDQ=0., + SPNUDT=0.01, + SPNUDVOR=0.01, + TEFRCL=3600., + / + &NEMFPEZO + / + &NEMGEO + / + &NEMJK + / + &NEMVAR + / + &NEMWAVELET + / + &NAETLDIAG + / + &NAMMETHOX + / + &NAMSPP + / + &NAMACV + / + &NAMFPOBJ + / + &NAMNORGWD + / + &NAMTRAJ + / + &NAMSATSIM + / + &NAMDVISI + / + &NAMNUDGLH + / + &NAMPERTPAR + / +FIN +/bin/cat fort.4 + +/bin/cat <<FIN > EXSEG1.nam + &NAM_DIAG_ISBAN + LPGD=.TRUE., + LSURF_MISC_BUDGET=.TRUE., + / + &NAM_DIAG_SURFN + LCOEF=.TRUE., + LSURF_BUDGET=.TRUE., + N2M=2, + / + &NAM_ISBAN + CSCOND='NP89', + / + &NAM_REPROD_OPER + LREPROD_OPER=.TRUE., + / + &NAM_SEAFLUXN + CSEA_FLUX='ECUME', + LPWG=.FALSE., + LPRECIP=.FALSE., + LPWEBB=.FALSE., + / + &NAM_SSON + CROUGH='Z01D', + XFRACZ0=5., + LDSV=.FALSE., + / + &NAM_SURF_ATM + XRIMAX=0.2, + LNOSOF=.TRUE., + / + &NAM_SURF_CSTS + XZ0SN=0.01, + XZ0HSN=0.001, + XEMISSN=0.99, + / + &NAM_WRITE_DIAG_SURFN + LPROVAR_TO_DIAG=.FALSE., + LSELECT=.TRUE., +CSELECT(1)='T2M','HU2M','XX','YY','DX','DY','SST','Z0SEA','TS_WATER','Z0WATER','TG1','TG2','TG3','WG1','WG2','WG3','WGI1','WGI2','WGI3','WR','WSN_VEG1','RSN_VEG1','ASN_VEG','TSRAD_NAT','RESA','TROOF1','TROOF2','TROOF3','TROOF4','TROOF5','WS_ROOF','TROAD1','TROAD2','TROAD3','TROAD4','TROAD5','WS_ROAD','TWALL1','TWALL2','TWALL3','TWALL4','TWALL5','TI_BLD','T_WIN1','TI_ROAD','WSN_RF1','RSN_RF1','TSN_RF1','ASN_RF','WSN_RD1','RSN_RD1','TSN_RD1','ASN_RD','TCANYON','QCANYON','STORAGE_TYPE','MASDEV','VERSION','BUG','DIM_FULL','DTCUR','LAT0','LON0','RPK','BETA','LATORI','LONORI','IMAX','JMAX','RW_PRECIP','BUDC','SEA_OCEAN','SEA_SBL','WAT_SBL','SN_VEG_N','SN_VEG','LSNOW_FRAC_T','GLACIER','TEMPARP','NLITTER','NLITTLEVS','NSOILCARB','ISBA_CANOPY','SN_RF_N','SN_RF','SN_RD_N','SN_RD','SN_RD_TYP','SN_RF_TYP','TEB_CANOPY','STORAGETYPE','CARTESIAN','GRID_TYPE','SN_VEG_TYP','RESPSL','ROAD_DIR','WALL_OPT','LAI','VEG','RSMIN','DG2','_FBUF_SIZE','_FBUF_DIM1','_FBUF_DIM2','_FBUF_NAME','_FBUF_TYPE','_FBUF_MASK','LCPL_GCM','HANDLE_SIC','SSS', + / + &NAM_WRITE_SURF_ATM + LNOWRITE_TEXFILE=.TRUE., + / +FIN +/bin/cat EXSEG1.nam + +# ***************************************** +# * Acquisition du fichier de demarrage * +# ***************************************** + +echo +for hh in 0 1 2 3 4 5 6 ; do + N=`expr $hh / 1 ` + set -x + ln -s $rekchemin/data/aro/$case/ELSCFFCSTALBC000${N}_l15 ELSCF${CNMEXP}ALBC00${N} + set +x +done +set -x +ln -s $rekchemin/data/aro/$case/ICMSHFCSTINIT_l15 ICMSH${CNMEXP}INIT +ln -s $rekchemin/data/aro/$case/ICMSHFCSTINIT.sfx ICMSH${CNMEXP}INIT.sfx +ln -s $rekchemin/data/surfex/v8/ecoclimapI_covers_param.bin . +ln -s $rekchemin/data/surfex/v8/ecoclimapII_eu_covers_param.bin . +ln -s $rekchemin/data/surfex/v8/ecoclimapII_af_covers_param.bin . +ln -s $rekchemin/data/aro/$case/Const.Clim Const.Clim +ln -s $rekchemin/data/aro/$case/Const.Clim.sfx Const.Clim.sfx +ln -s $rekchemin/data/aro/$case/const.clim.FRANGP0025 const.clim.FRANGP0025 +ln -s $rekchemin/data/rttov12/rtcoef_meteosat_9_seviri.dat . +ln -s $rekchemin/data/rttov12/rtcoef_meteosat_10_seviri.dat . +ln -s $rekchemin/data/rttov12/sccldcoef_meteosat_9_seviri.dat . +set +x +tar xfz $rekchemin/data/rtm/radiation_params.47r1_light.tgz + +# *************** +# * Chargement * +# *************** + +echo +set -x +\ln -s $LOADIR/MASTERODB MASTER +set +x +if ldd MASTER | grep openmpi > /dev/null; then + #On est sur PC + MPILIB=$(ldd MASTER | grep openmpi | tail -1 | awk '{print $3}' | awk -F "/" '{print $(NF-2)}') + MPIRUN="$(echo $(dirname $(dirname $(ldd MASTER | grep openmpi| tail -1 | awk '{print $3}'))))/bin/orterun --oversubscribe -np $NPROC" + GRIB_API=$(dirname $(dirname $(ldd MASTER | grep grib_api | head -1 | awk '{print $3}') 2>/dev/null) 2>/dev/null) + ECCODES=$(dirname $(dirname $(ldd MASTER | grep eccodes | head -1 | awk '{print $3}') 2>/dev/null) 2>/dev/null) + export GRIB_SAMPLES_PATH=$GRIB_API/share/grib_api/ifs_samples/grib1 + export GRIB_DEFINITION_PATH=$GRIB_API/share/grib_api/definitions + export ECCODES_SAMPLES_PATH=$ECCODES/share/eccodes/ifs_samples/grib1 + export ECCODES_DEFINITION_PATH=$rekchemin/data/eccodes_extras_definitions:$ECCODES/share/eccodes/definitions +else + #On est sur HPC + #MPIRUN="$(echo $(dirname $(dirname $(ldd MASTER | grep libmpi| tail -1 | awk '{print $3}'))))/bin/mpirun -wdir $PWD" + NNODES=$SLURM_JOB_NUM_NODES + MPITASKS_PER_NODE=$((SLURM_NTASKS/SLURM_JOB_NUM_NODES)) + MPI_TASKS=$SLURM_NTASKS + MPIRUN="/opt/softs/mpiauto/mpiauto -np $MPI_TASKS -nnp $MPITASKS_PER_NODE --" + export OMP_STACKSIZE=4G + export KMP_STACKSIZE=4G + export KMP_MONITOR_STACKSIZE=4G + export DR_HOOK=1 + export DR_HOOK_IGNORE_SIGNALS=-1 + export DR_HOOK_SILENT=1 + export DR_HOOK_SHOW_PROCESS_OPTIONS=0 + export MPL_MBX_SIZE=2048000000 + export EC_PROFILE_HEAP=0 + export EC_PROFILE_MEM=0 + export EC_MPI_ATEXIT=0 + export EC_MEMINFO=0 + export OPENBLAS_NUM_THREADS=1 + export MKL_CBWR="AUTO,STRICT" + export MKL_NUM_THREADS=1 + export MKL_DEBUG_CPU_TYPE=5 + export ECCODES_SAMPLES_PATH=/opt/softs/libraries/ICC_2018.5.274/eccodes-2.17.0/share/eccodes/ifs_samples/grib1 + export ECCODES_DEFINITION_PATH=/opt/softs/libraries/ICC_2018.5.274/eccodes-2.17.0/share/eccodes/definitions +fi +echo $MPIRUN +set +x +if [ ! -f MASTER ] ; then echo No executable MASTER;exit 1;fi + +# *************** +# * Execution * +# *************** + +echo +echo OMP_NUM_THREADS=$OMP_NUM_THREADS +set -x +ulimit -s unlimited +$MPIRUN $PWD/MASTER >lola +set +x +echo +##if [ -f lola ] ; then +## echo;echo Standard output :;echo;cat lola +##fi +##if [ -f stderr.* ] ; then +## for file in stderr.* ; do +## echo;echo $file :;cat $file +## done +##fi +##if [ -f stdout.* ] ; then +##echo;echo stdout :;echo;cat stdout.* +##fi +##if [ -a NODE.001_01 ] ; then +## for file in NODE* ; do +## echo;echo Listing $file;echo +## cat $file +## done +##fi +##if [ $(find . -name "drhook.prof.*" | wc -l) -ne 0 ] ; then +### Top 25 for each MPI task : +## for file in drhook.prof.* ; do +## echo;echo $file :;head -38 $file +## done +##fi +#cat drhook.prof.* | perl -w $HOME/bin/drhook_merge_walltime_max.pl + +# ******************* +# * Sauvegardes * +# ******************* + +ls +#if [ -f PFFPOS000+0000 ] ; then +# cp PFFPOS000+0000 $WAIT_QUEUE/PFFPOS000+0000.$PBS_JOBID +#fi +cp lola NODE.001_01 ICMSHFPOS+00* DHFDLFPOS+00* $OUTPUTDIR/ +/bin/rm fort.4 EXSEG1.nam lola ICMSHFPOS+0000* PFFPOSFRANGP0025+0000* ICMSHFPOS+0001* +/bin/rm PFFPOSFRANGP0025+0001* ICMSHFPOS+0002* ECHIS PFFPOSFRANGP0025+0002* DHFDLFPOS+00* +/bin/rm ECHFP NODE.001_01 ifs.stat $(tar tfz $rekchemin/data/rtm/radiation_params.47r1_light.tgz) + +# **************** +# * Epilogue * +# **************** + +ls -ltr | grep -v "\->" +echo Wait_queue : +ls -ltr $TMPWAIT +cd $TMPDIR +\rm -rf rundir.$$ +\rm -rf wait_queue.$$ +date +set +x diff --git a/tools/conf_tests/small_3D_alt4/aro48t3.sh b/tools/conf_tests/small_3D_alt4/aro48t3.sh new file mode 100755 index 0000000000000000000000000000000000000000..d74e8b71259c7858589b9a305517a8bebc18a924 --- /dev/null +++ b/tools/conf_tests/small_3D_alt4/aro48t3.sh @@ -0,0 +1,1207 @@ +#!/bin/bash +#SBATCH -n 4 +#SBATCH --mem=20000 +#SBATCH --export=MYLIB,HOME,HOMEPACK,TMPDIR,OUTPUTDIR,TESTDIR +#SBATCH -t 00:10:00 +#SBATCH -N 1 +#SBATCH -p normal256 + +#The MYLIB varibale must contain the gmkpack pack name +#The TESTDIR variable must contain the test directory +#Results will be stored in the local directory + +#Other environment varaibles that can be set: +#OUTPUTDIR + +date + +OUTPUTDIR=${OUTPUTDIR:-$PWD} +case=riette2 +#rekchemin="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" #Resources for the run must be in the same directory as this script +rekchemin=$TESTDIR + +NPROC=4 +NSTRIN=$NPROC +NSTROUT=1 +NPRTRW_NPRTRV="" +NPRTRW_NPRTRV=" NPRTRW=$NPROC, + NPRTRV=1," +export OMP_NUM_THREADS=1 + +#MYLIB=48t1_main.01%jpdup + +export DR_HOOK=1 +#export DR_HOOK_IGNORE_SIGNALS=-1 +export DR_HOOK_NOT_MPI=1 +export DR_HOOK_SILENT=1 +export DR_HOOK_OPT= + +export EC_PROFILE_HEAP=0 +export EC_PROFILE_MEM=0 +export EC_MPI_ATEXIT=0 +export DR_HOOK_SHOW_PROCESS_OPTIONS=0 +export EC_MEMINFO=0 +export TVSEARCHPATH=$SOURCE + +HOMEPACK=${HOMEPACK:=$HOME/pack} +SOURCE=$HOMEPACK/$MYLIB/src/local +LOADIR=$HOMEPACK/$MYLIB/bin + +TMPDIR=${TMPDIR:=$HOME/tmp} +TMPLOC=$TMPDIR/rundir.$$ +TMPWAIT=$TMPDIR/wait_queue.$$ +mkdir $TMPWAIT +mkdir $TMPLOC +cd $TMPLOC + +export RTTOV_COEFDIR=$PWD + +# ************************** +# * Saisie des NAMELISTS * +# ************************** + +CNMEXP='FPOS' + +echo +/bin/cat <<FIN > fort.4 + &NACIETEO + / + &NACOBS + / + &NACTAN + / + &NACTEX + / + &NACVEG + / + &NADOCK + / + &NAEAEM7 + / + &NAEAER + / + &NAECOAPHY + / + &NAEPHLI + / + &NAEPHY + / + &NAERAD + LRRTM=.TRUE., + LSRTM=.FALSE., + NAER=1, + NICEOPT=3, + NLIQOPT=3, + NOVLP=6, + NOZOCL=2, + NRADFR=18, + NRADIP=3, + NRADLP=2, + NSW=6, + RLWINHF=1, + RRE2DE=0.64952, + RSWINHF=1, + / + &NAERCLI + / + &NAEVOL + / + &NAIMPO + / + &NALORI + / + &NAMAFN + GFP_CLSG%CLNAME='SURFACCGRAUPEL', + GFP_CLSP%CLNAME='SURFACCPLUIE', + GFP_CLSS%CLNAME='SURFACCNEIGE', + GFP_SFIS%IBITS=16, + GFP_ST%CLNAME='SURFTEMPERATURE', + GFP_ST%IANO=0, + GFP_ST%IBITS=12, + GFP_X10U%CLNAME='CLSVENT.ZONAL', + GFP_X10U%IANO=0, + GFP_X10U%IBITS=12, + GFP_X10V%CLNAME='CLSVENT.MERIDIEN', + GFP_X10V%IANO=0, + GFP_X10V%IBITS=12, + GFP_X2RH%CLNAME='CLSHUMI.RELATIVE', + GFP_X2RH%IANO=0, + GFP_X2RH%IBITS=12, + GFP_X2T%CLNAME='CLSTEMPERATURE', + GFP_X2T%IANO=1, + GFP_XCCC%IBITS=8, + GFP_XHCC%IBITS=8, + GFP_XLCC%IBITS=8, + GFP_XLSG%CLNAME='SURFINSGRAUPEL', + GFP_XLSP%CLNAME='SURFINSPLUIE', + GFP_XLSS%CLNAME='SURFINSNEIGE', + GFP_XMCC%IBITS=8, + GFP_XN2T%IBITS=12, + GFP_XTCC%IBITS=8, + GFP_XUGST%CLNAME='CLSU.RAF60M.XFU', + GFP_XUGST%IANO=0, + GFP_XUGST%IBITS=12, + GFP_XVGST%CLNAME='CLSV.RAF60M.XFU', + GFP_XVGST%IANO=0, + GFP_XVGST%IBITS=12, + GFP_XX2T%IBITS=12, + GFP_XXDIAGH%IBITS=12, + TFP_ABS%ZFK=32., + TFP_CLF%IBITS=6, + TFP_EDR%CLNAME='EDR', + TFP_EDR%IBITS=16, + TFP_EDR%IGRIB=136, + TFP_GR%IBITS=12, + TFP_HL%IBITS=12, + TFP_HTB%IBITS=16, + TFP_HTB%LLGP=.TRUE., + TFP_HU%IBITS=12, + TFP_MSAT9C2%IBITS=12, + TFP_MSAT9C6%IBITS=12, + TFP_MSLNH%IBITS=12, + TFP_PV%ZFK=64., + TFP_RCLS%IBITS=12, + TFP_RR%IBITS=12, + TFP_SN%IBITS=12, + TFP_T%IBITS=12, + TFP_TCLS%IBITS=12, + TFP_TH%IBITS=12, + TFP_THPW%IBITS=12, + TFP_THV%IBITS=12, + TFP_TN%IBITS=12, + TFP_TWV%IBITS=12, + TFP_TX%IBITS=12, + TFP_U%IBITS=12, + TFP_V%IBITS=12, + TFP_VOR%ZFK=32., + TFP_VV%ZFK=32., + / + &NAMARG + CNMEXP='${CNMEXP}', + LECMWF=.FALSE., + LELAM=.TRUE., + LSLAG=.TRUE., + NCONF=1, + NSUPERSEDE=1, + / + &NAMARPHY + LKFBCONV=.FALSE., + LKFBD=.FALSE., + LKFBS=.FALSE., + LMFSHAL=.TRUE., + LMICRO=.TRUE., + LMPA=.TRUE., + LMSE=.TRUE., + LTURB=.TRUE., + / + &NAMCA + / + &NAMCAPE + / + &NAMCFU + LCUMFU=.TRUE., + LFPLS=.TRUE., + LFPLSG=.TRUE., + LFR=.TRUE., + LFRRC=.TRUE., + LFSF=.TRUE., + LNEBPAR=.TRUE., + LNEBTT=.TRUE., + LRAYD=.TRUE., + LRAYS=.TRUE., + / + &NAMCHEM + / + &NAMCHET + / + &NAMCHK + / + &NAMCLA + / + &NAMCLDP + / + &NAMCLI + / + &NAMCLOP15 + / + &NAMCLTC + / + &NAMCOK + / + &NAMCOM + / + &NAMCOSJO + / + &NAMCOUPLO4 + / + &NAMCT0 + CFPNCF='ECHFP', + CNPPATH=' ', + LAROME=.TRUE., + LNHEE=.TRUE., + LSCREEN_OPENMP=.FALSE., + LSPRT=.TRUE., + LTWOTL=.TRUE., + NFPOS=1, + NFRSDI=18, + NSDITS(0)=0, + NFRHIS=72, + NHISTS(0)=0, + NFRPOS=72, + NPOSTS(0)=0, + NFRSFXHIS=72, + NSFXHISTS(0)=0, + NFRDHFD=72, + NDHFDTS(0)=0, + / + &NAMCT1 + LRFILAF=.FALSE., + N1HIS=1, + N1POS=1, + N1RES=0, + N1SDI=1, + N1SFXHIS=1, + N1GDI=0, + / + &NAMCUMF + / + &NAMCUMFS + / + &NAMCVER + / + &NAMCVMNH + / + &NAMDDH + LDDH_OMP=.TRUE., + LHDDOP=.TRUE., + LHDHKS=.TRUE., + LHDEFD=.TRUE., + LFLEXDIA=.TRUE., + BDEDDH(1,1)=3, + BDEDDH(2,1)=1, + BDEDDH(3,1)=358.8 + BDEDDH(4,1)=45.1 + BDEDDH(5,1)=360.3 + BDEDDH(6,1)=44.5 + / + &NAMDFI + / + &NAMDIM + NPROMA=-50, + / + &NAMDIMO + / + &NAMDIM_TRAJ + / + &NAMDPHY + / + &NAMDPRECIPS + / + &NAMDYN + LADVF=.TRUE., + LQMPD=.FALSE., + LQMT=.FALSE., + LQMVD=.FALSE., + LRHDI_LASTITERPC=.TRUE., + NITMP=4, + NSITER=1, + NSPDLAG=3, + NSVDLAG=3, + NTLAG=3, + NVLAG=3, + NWLAG=3, + RDAMPDIV=20., + RDAMPPD=20., + RDAMPQ=0., + RDAMPT=0., + RDAMPVD=20., + RDAMPVOR=20., + REPS1=0., + REPS2=0., + REPSM1=0., + REPSM2=0., + REPSP1=0., + SDRED=1., + SIPR=90000., + SITR=350., + SITRA=100., + SLHDA0=0.25, + SLHDD00=0.000065, + VESL=0.05, + XIDT=0., + ZSLHDP1=1.7, + ZSLHDP3=0.6, + / + &NAMDYNA + LCOMADH=.TRUE., + LCOMADV=.FALSE., + LCOMAD_GFL=.TRUE., + LCOMAD_SP=.TRUE., + LCOMAD_SPD=.TRUE., + LCOMAD_SVD=.TRUE., + LCOMAD_T=.TRUE., + LCOMAD_W=.TRUE., + LGWADV=.TRUE., + LNESC=.TRUE., + LPC_CHEAP=.TRUE., + LPC_FULL=.TRUE., + LRDBBC=.FALSE., + LSETTLS=.FALSE., + LSETTLST=.TRUE., + LSLHD_GFL=.TRUE., + LSLHD_OLD=.FALSE., + LSLHD_SPD=.FALSE., + LSLHD_SVD=.FALSE., + LSLHD_T=.FALSE., + LSLHD_W=.FALSE., + ND4SYS=2, + NDLNPR=1, + NPDVAR=2, + NVDVAR=4, + SLHDEPSH=0.08, + SLHDKMAX=6, + / + &NAMDYNCORE + / + &NAMEMIS_CONF + / + &NAMENKF + / + &NAMFA + CMODEL='OUTPUTID', + LEXTERN=.TRUE., + LSUPPDATE=.FALSE., + NBITCS=-1, + NBITPG=-1, + NSTRON=-1, + / + &NAMFAINIT + JPXTRO=2000, + / + &NAMFPC + CFP2DF(1)='SURFPRESSION', + CFP2DF(2)='MSL_NHPRESSURE', + CFP2DF(3)='SURFTOT.WAT.VAPO', + CFP2DF(4)='SURFISOTPW0.MALT', + CFP2DF(5)='SURFCAPE.POS.F00', + CFP2DF(6)='C002_METEOSAT_09_SEVIRI.POS', + CFP2DF(7)='C006_METEOSAT_09_SEVIRI.POS', + CFP2DF(8)='SURFREFLECT.MAX', + CFP2DF(9)='SURFISOTPW1.MALT', + CFP2DF(10)='SURFISOTPW2.MALT', + CFP3DF(1)='GEOPOTENTIEL', + CFP3DF(2)='TEMPERATURE', + CFP3DF(3)='VENT_ZONAL', + CFP3DF(4)='VENT_MERIDIEN', + CFP3DF(5)='HUMI_RELATIVE', + CFP3DF(6)='THETA_PRIM_W', + CFP3DF(7)='PRESSURE', + CFP3DF(8)='ABS_VORTICITY', + CFP3DF(9)='VITESSE_VERTICALE', + CFP3DF(10)='TEMPE_POTENT', + CFP3DF(11)='POT_VORTICIT', + CFP3DF(12)='SIM_REFLECTI', + CFP3DF(13)='RAIN', + CFP3DF(14)='SNOW', + CFP3DF(15)='GRAUPEL', + CFP3DF(16)='ICE_CRYSTAL', + CFP3DF(17)='CLOUD_WATER', + CFP3DF(18)='VERT.VELOCIT', + CFP3DF(19)='DIVERGENCE', + CFP3DF(20)='THETA_VIRTUA', + CFP3DF(21)='TKE', + CFP3DF(22)='CLOUD_FRACTI', + CFP3DF(23)='ISOT_ALTIT', + CFP3DF(24)='EDR', + CFPCFU(1)='SURFTENS.TOTA.ZO', + CFPCFU(2)='SURFTENS.TOTA.ME', + CFPCFU(3)='SURFACCPLUIE', + CFPCFU(4)='SURFACCNEIGE', + CFPCFU(5)='SURFACCGRAUPEL', + CFPCFU(6)='SOMMFLU.RAY.SOLA', + CFPCFU(7)='SURFFLU.RAY.SOLA', + CFPCFU(8)='SOMMFLU.RAY.THER', + CFPCFU(9)='SURFFLU.RAY.THER', + CFPCFU(10)='SURFFLU.LAT.MTOT', + CFPCFU(11)='SURFFLU.MTOTA.NE', + CFPCFU(12)='SURFFLU.CHA.SENS', + CFPCFU(13)='SURFRAYT SOLA DE', + CFPCFU(14)='SURFRAYT THER DE', + CFPCFU(15)='SURFRAYT SOL CL', + CFPCFU(16)='SURFRAYT THER CL', + CFPCFU(17)='SURFRAYT DIR SUR', + CFPDOM(1)='FRANGP0025', + CFPFMT='LALON', + CFPPHY(1)='SURFTEMPERATURE', + CFPPHY(2)='INTSURFGEOPOTENT', + CFPPHY(3)='SURFRESERV.NEIGE', + CFPXFU(1)='CLSTEMPERATURE', + CFPXFU(2)='CLSHUMI.RELATIVE', + CFPXFU(3)='CLSVENT.ZONAL', + CFPXFU(4)='CLSVENT.MERIDIEN', + CFPXFU(5)='SURFNEBUL.TOTALE', + CFPXFU(6)='SURFNEBUL.HAUTE', + CFPXFU(7)='SURFNEBUL.MOYENN', + CFPXFU(8)='SURFNEBUL.BASSE', + CFPXFU(9)='CLSMAXI.TEMPERAT', + CFPXFU(10)='CLSMINI.TEMPERAT', + CFPXFU(11)='CLPMHAUT.MOD.XFU', + CFPXFU(12)='SURFDIAGHAIL', + LCRITSNOWTEMP=.FALSE., + LFPCAPEX=.TRUE., + LFPMOIS=.TRUE., + LFPPACKING=.FALSE., + LWIDER_DOM=.TRUE., + L_READ_MODEL_DATE=.TRUE., + NFITI=1, + NFITV=1, + NFPCAPE=5, + NFPCLI=1, + NFPGRIB=1, + NFPINPHY=4, + NITERPV=8, + RENTRA=0.0001, + RFP3H(1)=10., + RFP3H(2)=20., + RFP3H(3)=35., + RFP3H(4)=50., + RFP3H(5)=75., + RFP3H(6)=100., + RFP3H(7)=150., + RFP3H(8)=200., + RFP3H(9)=250., + RFP3H(10)=375., + RFP3H(11)=500., + RFP3H(12)=625., + RFP3H(13)=750., + RFP3H(14)=875., + RFP3H(15)=1000., + RFP3H(16)=1125., + RFP3H(17)=1250., + RFP3H(18)=1375., + RFP3H(19)=1500., + RFP3H(20)=1750., + RFP3H(21)=2000., + RFP3H(22)=2250., + RFP3H(23)=2500., + RFP3H(24)=2750., + RFP3H(25)=3000., + RFP3I(1)=-273.15, + RFP3I(2)=-263.15, + RFP3I(3)=-261.15, + RFP3I(4)=-253.15, + RFP3P(1)=10000., + RFP3P(2)=12500., + RFP3P(3)=15000., + RFP3P(4)=17500., + RFP3P(5)=20000., + RFP3P(6)=22500., + RFP3P(7)=25000., + RFP3P(8)=27500., + RFP3P(9)=30000., + RFP3P(10)=35000., + RFP3P(11)=40000., + RFP3P(12)=45000., + RFP3P(13)=50000., + RFP3P(14)=55000., + RFP3P(15)=60000., + RFP3P(16)=65000., + RFP3P(17)=70000., + RFP3P(18)=75000., + RFP3P(19)=80000., + RFP3P(20)=85000., + RFP3P(21)=90000., + RFP3P(22)=92500., + RFP3P(23)=95000., + RFP3P(24)=100000., + RFP3PV(1)=0.0000015, + RFP3PV(2)=0.000002, + RFPCD2=5., + RFPCSAB=50., + RFPVCAP=7000., + / + &NAMFPD + NLAT(1)=41, + NLON(1)=41, + RLONC(1)=-0.71, + RLATC(1)=44.8, + RDELX(1)=0.025, + RDELY(1)=0.025, + / + &NAMFPDY2 + / + &NAMFPDYF + / + &NAMFPDYH + / + &NAMFPDYI + / + &NAMFPDYP + / + &NAMFPDYS + / + &NAMFPDYT + / + &NAMFPDYV + / + &NAMFPF + NFMAX(1)=60, + NFMAX(2)=80, + / + &NAMFPG + NFPDISTRIB=1, + / + &NAMFPIOS + / + &NAMFPMOVE + / + &NAMFPPHY + / + &NAMFPSC2 + NFPROMA=-50, + / + &NAMFPSC2_DEP + NFPROMA_DEP=-50, + / + &NAMGEM + / + &NAMGFL + NGFL_EZDIAG=4, + YEZDIAG_NL(1)%CNAME='EZDIAG01', + YEZDIAG_NL(1)%LREQOUT=.FALSE., + YEZDIAG_NL(2)%CNAME='EZDIAG02', + YEZDIAG_NL(2)%LREQOUT=.FALSE., + YEZDIAG_NL(3)%CNAME='EZDIAG03', + YEZDIAG_NL(3)%LREQOUT=.FALSE., + YEZDIAG_NL(4)%CNAME='INPRRTOT3D', + YEZDIAG_NL(4)%LREQOUT=.TRUE., + YG_NL%LQM=.TRUE., + YG_NL%LSLHD=.TRUE., + YG_NL%NCOUPLING=-1, + YG_NL%NREQIN=1, + YG_NL%REFVALC=0., + YIRAD_NL%LGP=.TRUE., + YI_NL%LQM=.TRUE., + YI_NL%LSLHD=.TRUE., + YI_NL%NCOUPLING=-1, + YI_NL%NREQIN=1, + YI_NL%REFVALC=0., + YLRAD_NL%LGP=.TRUE., + YL_NL%LQM=.TRUE., + YL_NL%LSLHD=.TRUE., + YL_NL%NCOUPLING=-1, + YL_NL%NREQIN=1, + YL_NL%REFVALC=0., + YQ_NL%LCOMAD=.TRUE., + YQ_NL%LQM=.TRUE., + YQ_NL%LSLHD=.FALSE., + YQ_NL%NREQIN=1, + YR_NL%LQM=.TRUE., + YR_NL%LSLHD=.TRUE., + YR_NL%NCOUPLING=-1, + YR_NL%NREQIN=1, + YR_NL%REFVALC=0., + YS_NL%LQM=.TRUE., + YS_NL%LSLHD=.TRUE., + YS_NL%NCOUPLING=-1, + YS_NL%NREQIN=1, + YS_NL%REFVALC=0., + YTKE_NL%NCOUPLING=0, + YTKE_NL%NREQIN=1, + / + &NAMGRIB + / + &NAMGWD + / + &NAMGWDIAG + / + &NAMGWWMS + / + &NAMIAU + ALPHAIAU=0.5, + LIAU=.FALSE., + TSTARTIAU=1800, + TSTOPIAU=5340, + / + &NAMICE + / + &NAMINI + LDFI=.FALSE., + / + &NAMINTFLEX + / + &NAMIOMI + / + &NAMIOS + / + &NAMIO_SERV + NIO_SERV_BUF_MAXSIZE=20, + NIO_SERV_METHOD=2, + NMSG_LEVEL_CLIENT=0, + NMSG_LEVEL_SERVER=0, + NPROCESS_LEVEL=5, + NPROC_IO=0, + / + &NAMJBCODES + / + &NAMJFH + / + &NAMJG + / + &NAMLCZ + / + &NAMLSFORC + / + &NAMMARS + / + &NAMMCC + / + &NAMMCUF + / + &NAMMKODB + / + &NAMMODERR + / + &NAMMTS + / + &NAMMWAVE + / + &NAMNPROF + / + &NAMNUD + / + &NAMOBS + / + &NAMONEDVAR + / + &NAMOOPS + / + &NAMOPH + CFNHWF='ECHIS', + LINC=.TRUE., + NTIMEFMT=1, + / + &NAMOPTCMEM + / + &NAMPAR0 + LOPT_SCALAR=.TRUE., + NPRINTLEV=1, + LMPOFF=.FALSE., + MBX_SIZE=2048000000, + MP_TYPE=2, + NOUTPUT=1, + NPROC=$NPROC, +$NPRTRW_NPRTRV + / + &NAMPAR1 + LEQ_REGIONS=.FALSE., + LSLONDEM=.TRUE., + LSPLIT=.TRUE., + LSYNC_SLCOM=.FALSE., + LSYNC_TRANS=.FALSE., + L_GATHERV_WRGP=.FALSE., + NCOMBFLEN=1800000, + NSTRIN=$NSTRIN, + NSTROUT=$NSTROUT, + / + &NAMPARAR + CFRAC_ICE_ADJUST='T', + CFRAC_ICE_SHALLOW_MF='T', + CMICRO='ICE3', + CSEDIM='SPLI', + CSNOWRIMING='OLD', + LCONVHG=.TRUE., + LCRFLIMIT=.TRUE., + LCRIAUTI=.TRUE., + LEVLIMIT=.TRUE., + LFEEDBACKT=.TRUE., + LFPREC3D=.TRUE., + LNULLWETG=.TRUE., + LNULLWETH=.TRUE., + LOLSMC=.TRUE., + LOSEDIC=.TRUE., + LOSIGMAS=.TRUE., + LOSUBG_COND=.TRUE., + LSEDIM_AFTER=.TRUE., + LWETGPOST=.TRUE., + LWETHPOST=.TRUE., + NMAXITER_MICRO=10, + NPRINTFR=10000, + NPTP=1, + RCRIAUTC=0.001, + RCRIAUTI=0.0002, + RT0CRIAUTI=-5., + VSIGQSAT=0.02, + XFRACM90=0.1, + XMRSTEP=0.00005, + XSPLIT_MAXCFL=0.8, + XTSTEP_TS=25., + / + &NAMPHMSE + LPGDFWR=.FALSE., + / + &NAMPHY + LAERODES=.TRUE., + LAEROLAN=.TRUE., + LAEROSEA=.TRUE., + LAEROSOO=.TRUE., + LEDR=.TRUE., + LMPHYS=.TRUE., + LO3ABC=.TRUE., + LRAYFM=.TRUE., + / + &NAMPHY0 + ALMAV=300., + BEDIFV=0.05, + ECMNP=3000., + GCCSV=0., + GCVADS=0.8, + GCVALFA=0.000045, + GCVBETA=0.2, + GCVMLT=0.00016, + GCVNU=0.000025, + GCVPSI=1., + GCVPSIE=1., + GDDEVA=0.25, + GDDSDE=0.5, + GWDCD=6., + HUCOE=0.5, + HUTIL=1.8, + QSSC=400., + QSSUSC=0.75, + QSSUSS=0.4, + QSSUSV=250., + QSUSXC=0.0002, + QSUSXS=0.0003, + QXRAL=130., + QXRDEL=0.49, + QXRHX=0.99, + QXRR=0.25, + RCVEVAP=0.25, + REFLKUO=5000., + REVGSL=15., + SCO=-20., + TDDGP=0.8, + TENTR=0.0000025, + TENTRX=0.00008, + TUDGP=0.8, + UHDIFV=0.0008, + USURIC=0.175, + USURICE=0.5, + USURICL=1., + USURID=0.1, + USURIDE=0.25, + VZ0CM=0.00015, + XMAXLM=5000., + XMINLM=10., + / + &NAMPHY1 + ALBMIN=0.65, + ALCRIN=0.75, + GCGEL=0.00003, + GCGELS=0.00005, + GNEIMX=1.8, + GNEIMXS=1.8, + RCTVEG(3)=0.000012, + RCTVEG(4)=0.00001, + / + &NAMPHY2 + FACRAF=3.8, + HTKERAF=20., + LMULAF=.TRUE., + LRAFTKE=.TRUE., + LRAFTUR=.TRUE., + XDAMP=1., + XMULAF=-1.85, + / + &NAMPHY3 + / + &NAMPHYDS + / + &NAMPONG + / + &NAMPPC + / + &NAMPPVI + / + &NAMPRE + / + &NAMRAD15 + / + &NAMRADCMEM + / + &NAMRCF + / + &NAMRCOEF + / + &NAMRES + / + &NAMRGRI + / + &NAMRINC + / + &NAMRIP + TSTEP=50., + CSTOP='h2', + / + &NAMRIP0 + / + &NAMRLX + / + &NAMSATS + LPARTIAL_COEF_FILES=.TRUE., + / + &NAMSCC + / + &NAMSCEN + / + &NAMSCM + / + &NAMSEKF + / + &NAMSENS + / + &NAMSFXCMP + CFLDNAME(1)='????????????????', + NBBITS(1)=24, + / + &NAMSIMPHL + / + &NAMSPNG + / + &NAMSPSDT + / + &NAMSTA + / + &NAMSTOPH + / + &NAMSWE + / + &NAMTESTVAR + / + &NAMTHLIM + / + &NAMTOPH + ETCVIM=5000., + ETNEBU=5000., + ETPLUI=5000., + XDRMTK=6.0D-7, + XDRMTP=800., + XDRMUK=3.0D-7, + XDRMUP=800., + / + &NAMTRAJP + / + &NAMTRANS + / + &NAMTRANS0 + / + &NAMTS + / + &NAMVAR + / + &NAMVARBC + / + &NAMVARBC_AIREP + / + &NAMVARBC_ALLSKY + / + &NAMVARBC_GBRAD + / + &NAMVARBC_RAD + / + &NAMVARBC_SFCOBS + / + &NAMVARBC_TCWV + / + &NAMVARBC_TO3 + / + &NAMVAREPS + / + &NAMVDF + / + &NAMVDOZ + / + &NAMVOLCANO + / + &NAMVRTL + / + &NAMVV0 + / + &NAMVV1 + / + &NAMVWRK + / + &NAMWAVELETJB + / + &NAMXFU + LXCLP=.TRUE., + LXCLS=.TRUE., + LXFU=.TRUE., + LXNEBPA=.TRUE., + LXNEBTT=.TRUE., + LXNUVCLS=.TRUE., + LXPLS=.TRUE., + LXPLSG=.TRUE., + LXQCLS=.TRUE., + LXR=.TRUE., + LXSOIL=.FALSE., + LXTHW=.TRUE., + LXTRT=.TRUE., + LXTTCLS=.TRUE., + LXXDIAGH=.TRUE., + LXXGST=.TRUE., + NFRRAZ=72, + NRAZTS(0)=0, + / + &NAM_CANAPE + / + &NAM_DISTRIBUTED_VECTORS + / + &NAPHLC + / + &NEMCT0 + / + &NEMDIM + / + &NEMDYN + / + &NEMELBC0A + LESPCPL=.TRUE., + NBICNHX=2, + NBICOP=2, + NBICOT=2, + NBICOU=2, + NBICPD=2, + NBICVD=2, + NECRIPL=1, + / + &NEMELBC0B + NEFRSPCPL=1, + NEK0=20, + NEK1=30, + NEN1=4, + NEN2=8, + SPNUDDIV=0.01, + SPNUDQ=0., + SPNUDT=0.01, + SPNUDVOR=0.01, + TEFRCL=3600., + / + &NEMFPEZO + / + &NEMGEO + / + &NEMJK + / + &NEMVAR + / + &NEMWAVELET + / + &NAETLDIAG + / + &NAMMETHOX + / + &NAMSPP + / + &NAMACV + / + &NAMFPOBJ + / + &NAMNORGWD + / + &NAMTRAJ + / + &NAMSATSIM + / + &NAMDVISI + / + &NAMNUDGLH + / + &NAMPERTPAR + / +FIN +/bin/cat fort.4 + +/bin/cat <<FIN > EXSEG1.nam + &NAM_DIAG_ISBAN + LPGD=.TRUE., + LSURF_MISC_BUDGET=.TRUE., + / + &NAM_DIAG_SURFN + LCOEF=.TRUE., + LSURF_BUDGET=.TRUE., + N2M=2, + / + &NAM_ISBAN + CSCOND='NP89', + / + &NAM_REPROD_OPER + LREPROD_OPER=.TRUE., + / + &NAM_SEAFLUXN + CSEA_FLUX='ECUME', + LPWG=.FALSE., + LPRECIP=.FALSE., + LPWEBB=.FALSE., + / + &NAM_SSON + CROUGH='Z01D', + XFRACZ0=5., + LDSV=.FALSE., + / + &NAM_SURF_ATM + XRIMAX=0.2, + LNOSOF=.TRUE., + / + &NAM_SURF_CSTS + XZ0SN=0.01, + XZ0HSN=0.001, + XEMISSN=0.99, + / + &NAM_WRITE_DIAG_SURFN + LPROVAR_TO_DIAG=.FALSE., + LSELECT=.TRUE., +CSELECT(1)='T2M','HU2M','XX','YY','DX','DY','SST','Z0SEA','TS_WATER','Z0WATER','TG1','TG2','TG3','WG1','WG2','WG3','WGI1','WGI2','WGI3','WR','WSN_VEG1','RSN_VEG1','ASN_VEG','TSRAD_NAT','RESA','TROOF1','TROOF2','TROOF3','TROOF4','TROOF5','WS_ROOF','TROAD1','TROAD2','TROAD3','TROAD4','TROAD5','WS_ROAD','TWALL1','TWALL2','TWALL3','TWALL4','TWALL5','TI_BLD','T_WIN1','TI_ROAD','WSN_RF1','RSN_RF1','TSN_RF1','ASN_RF','WSN_RD1','RSN_RD1','TSN_RD1','ASN_RD','TCANYON','QCANYON','STORAGE_TYPE','MASDEV','VERSION','BUG','DIM_FULL','DTCUR','LAT0','LON0','RPK','BETA','LATORI','LONORI','IMAX','JMAX','RW_PRECIP','BUDC','SEA_OCEAN','SEA_SBL','WAT_SBL','SN_VEG_N','SN_VEG','LSNOW_FRAC_T','GLACIER','TEMPARP','NLITTER','NLITTLEVS','NSOILCARB','ISBA_CANOPY','SN_RF_N','SN_RF','SN_RD_N','SN_RD','SN_RD_TYP','SN_RF_TYP','TEB_CANOPY','STORAGETYPE','CARTESIAN','GRID_TYPE','SN_VEG_TYP','RESPSL','ROAD_DIR','WALL_OPT','LAI','VEG','RSMIN','DG2','_FBUF_SIZE','_FBUF_DIM1','_FBUF_DIM2','_FBUF_NAME','_FBUF_TYPE','_FBUF_MASK','LCPL_GCM','HANDLE_SIC','SSS', + / + &NAM_WRITE_SURF_ATM + LNOWRITE_TEXFILE=.TRUE., + / +FIN +/bin/cat EXSEG1.nam + +# ***************************************** +# * Acquisition du fichier de demarrage * +# ***************************************** + +echo +for hh in 0 1 2 3 4 5 6 ; do + N=`expr $hh / 1 ` + set -x + ln -s $rekchemin/data/aro/$case/ELSCFFCSTALBC000${N}_l15 ELSCF${CNMEXP}ALBC00${N} + set +x +done +set -x +ln -s $rekchemin/data/aro/$case/ICMSHFCSTINIT_l15 ICMSH${CNMEXP}INIT +ln -s $rekchemin/data/aro/$case/ICMSHFCSTINIT.sfx ICMSH${CNMEXP}INIT.sfx +ln -s $rekchemin/data/surfex/v8/ecoclimapI_covers_param.bin . +ln -s $rekchemin/data/surfex/v8/ecoclimapII_eu_covers_param.bin . +ln -s $rekchemin/data/surfex/v8/ecoclimapII_af_covers_param.bin . +ln -s $rekchemin/data/aro/$case/Const.Clim Const.Clim +ln -s $rekchemin/data/aro/$case/Const.Clim.sfx Const.Clim.sfx +ln -s $rekchemin/data/aro/$case/const.clim.FRANGP0025 const.clim.FRANGP0025 +ln -s $rekchemin/data/rttov12/rtcoef_meteosat_9_seviri.dat . +ln -s $rekchemin/data/rttov12/rtcoef_meteosat_10_seviri.dat . +ln -s $rekchemin/data/rttov12/sccldcoef_meteosat_9_seviri.dat . +set +x +tar xfz $rekchemin/data/rtm/radiation_params.47r1_light.tgz + +# *************** +# * Chargement * +# *************** + +echo +set -x +\ln -s $LOADIR/MASTERODB MASTER +set +x +if ldd MASTER | grep openmpi > /dev/null; then + #On est sur PC + MPILIB=$(ldd MASTER | grep openmpi | tail -1 | awk '{print $3}' | awk -F "/" '{print $(NF-2)}') + MPIRUN="$(echo $(dirname $(dirname $(ldd MASTER | grep openmpi| tail -1 | awk '{print $3}'))))/bin/orterun --oversubscribe -np $NPROC" + GRIB_API=$(dirname $(dirname $(ldd MASTER | grep grib_api | head -1 | awk '{print $3}') 2>/dev/null) 2>/dev/null) + ECCODES=$(dirname $(dirname $(ldd MASTER | grep eccodes | head -1 | awk '{print $3}') 2>/dev/null) 2>/dev/null) + export GRIB_SAMPLES_PATH=$GRIB_API/share/grib_api/ifs_samples/grib1 + export GRIB_DEFINITION_PATH=$GRIB_API/share/grib_api/definitions + export ECCODES_SAMPLES_PATH=$ECCODES/share/eccodes/ifs_samples/grib1 + export ECCODES_DEFINITION_PATH=$rekchemin/data/eccodes_extras_definitions:$ECCODES/share/eccodes/definitions +else + #On est sur HPC + #MPIRUN="$(echo $(dirname $(dirname $(ldd MASTER | grep libmpi| tail -1 | awk '{print $3}'))))/bin/mpirun -wdir $PWD" + NNODES=$SLURM_JOB_NUM_NODES + MPITASKS_PER_NODE=$((SLURM_NTASKS/SLURM_JOB_NUM_NODES)) + MPI_TASKS=$SLURM_NTASKS + MPIRUN="/opt/softs/mpiauto/mpiauto -np $MPI_TASKS -nnp $MPITASKS_PER_NODE --" + export OMP_STACKSIZE=4G + export KMP_STACKSIZE=4G + export KMP_MONITOR_STACKSIZE=4G + export DR_HOOK=1 + export DR_HOOK_IGNORE_SIGNALS=-1 + export DR_HOOK_SILENT=1 + export DR_HOOK_SHOW_PROCESS_OPTIONS=0 + export MPL_MBX_SIZE=2048000000 + export EC_PROFILE_HEAP=0 + export EC_PROFILE_MEM=0 + export EC_MPI_ATEXIT=0 + export EC_MEMINFO=0 + export OPENBLAS_NUM_THREADS=1 + export MKL_CBWR="AUTO,STRICT" + export MKL_NUM_THREADS=1 + export MKL_DEBUG_CPU_TYPE=5 + export ECCODES_SAMPLES_PATH=/opt/softs/libraries/ICC_2018.5.274/eccodes-2.17.0/share/eccodes/ifs_samples/grib1 + export ECCODES_DEFINITION_PATH=/opt/softs/libraries/ICC_2018.5.274/eccodes-2.17.0/share/eccodes/definitions +fi +echo $MPIRUN +set +x +if [ ! -f MASTER ] ; then echo No executable MASTER;exit 1;fi + +# *************** +# * Execution * +# *************** + +echo +echo OMP_NUM_THREADS=$OMP_NUM_THREADS +set -x +ulimit -s unlimited +$MPIRUN $PWD/MASTER >lola +set +x +echo +##if [ -f lola ] ; then +## echo;echo Standard output :;echo;cat lola +##fi +##if [ -f stderr.* ] ; then +## for file in stderr.* ; do +## echo;echo $file :;cat $file +## done +##fi +##if [ -f stdout.* ] ; then +##echo;echo stdout :;echo;cat stdout.* +##fi +##if [ -a NODE.001_01 ] ; then +## for file in NODE* ; do +## echo;echo Listing $file;echo +## cat $file +## done +##fi +##if [ $(find . -name "drhook.prof.*" | wc -l) -ne 0 ] ; then +### Top 25 for each MPI task : +## for file in drhook.prof.* ; do +## echo;echo $file :;head -38 $file +## done +##fi +#cat drhook.prof.* | perl -w $HOME/bin/drhook_merge_walltime_max.pl + +# ******************* +# * Sauvegardes * +# ******************* + +ls +#if [ -f PFFPOS000+0000 ] ; then +# cp PFFPOS000+0000 $WAIT_QUEUE/PFFPOS000+0000.$PBS_JOBID +#fi +cp lola NODE.001_01 ICMSHFPOS+00* DHFDLFPOS+00* $OUTPUTDIR/ +/bin/rm fort.4 EXSEG1.nam lola ICMSHFPOS+0000* PFFPOSFRANGP0025+0000* ICMSHFPOS+0001* +/bin/rm PFFPOSFRANGP0025+0001* ICMSHFPOS+0002* ECHIS PFFPOSFRANGP0025+0002* DHFDLFPOS+00* +/bin/rm ECHFP NODE.001_01 ifs.stat $(tar tfz $rekchemin/data/rtm/radiation_params.47r1_light.tgz) + +# **************** +# * Epilogue * +# **************** + +ls -ltr | grep -v "\->" +echo Wait_queue : +ls -ltr $TMPWAIT +cd $TMPDIR +\rm -rf rundir.$$ +\rm -rf wait_queue.$$ +date +set +x diff --git a/tools/conf_tests/small_3D_alt5/aro48t3.sh b/tools/conf_tests/small_3D_alt5/aro48t3.sh new file mode 100755 index 0000000000000000000000000000000000000000..9ca429fc39c97e4db7cd5077916c99b9abf30900 --- /dev/null +++ b/tools/conf_tests/small_3D_alt5/aro48t3.sh @@ -0,0 +1,1219 @@ +#!/bin/bash +#SBATCH -n 4 +#SBATCH --mem=20000 +#SBATCH --export=MYLIB,HOME,HOMEPACK,TMPDIR,OUTPUTDIR,TESTDIR +#SBATCH -t 00:10:00 +#SBATCH -N 1 +#SBATCH -p normal256 + +#The MYLIB varibale must contain the gmkpack pack name +#The TESTDIR variable must contain the test directory +#Results will be stored in the local directory + +#Other environment varaibles that can be set: +#OUTPUTDIR + +date + +OUTPUTDIR=${OUTPUTDIR:-$PWD} +case=riette2 +#rekchemin="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" #Resources for the run must be in the same directory as this script +rekchemin=$TESTDIR + +NPROC=4 +NSTRIN=$NPROC +NSTROUT=1 +NPRTRW_NPRTRV="" +NPRTRW_NPRTRV=" NPRTRW=$NPROC, + NPRTRV=1," +export OMP_NUM_THREADS=1 + +#MYLIB=48t1_main.01%jpdup + +export DR_HOOK=1 +#export DR_HOOK_IGNORE_SIGNALS=-1 +export DR_HOOK_NOT_MPI=1 +export DR_HOOK_SILENT=1 +export DR_HOOK_OPT= + +export EC_PROFILE_HEAP=0 +export EC_PROFILE_MEM=0 +export EC_MPI_ATEXIT=0 +export DR_HOOK_SHOW_PROCESS_OPTIONS=0 +export EC_MEMINFO=0 +export TVSEARCHPATH=$SOURCE + +HOMEPACK=${HOMEPACK:=$HOME/pack} +SOURCE=$HOMEPACK/$MYLIB/src/local +LOADIR=$HOMEPACK/$MYLIB/bin + +TMPDIR=${TMPDIR:=$HOME/tmp} +TMPLOC=$TMPDIR/rundir.$$ +TMPWAIT=$TMPDIR/wait_queue.$$ +mkdir $TMPWAIT +mkdir $TMPLOC +cd $TMPLOC + +export RTTOV_COEFDIR=$PWD + +# ************************** +# * Saisie des NAMELISTS * +# ************************** + +CNMEXP='FPOS' + +echo +/bin/cat <<FIN > fort.4 + &NACIETEO + / + &NACOBS + / + &NACTAN + / + &NACTEX + / + &NACVEG + / + &NADOCK + / + &NAEAEM7 + / + &NAEAER + / + &NAECOAPHY + / + &NAEPHLI + / + &NAEPHY + / + &NAERAD + LRRTM=.TRUE., + LSRTM=.FALSE., + NAER=1, + NICEOPT=3, + NLIQOPT=3, + NOVLP=6, + NOZOCL=2, + NRADFR=18, + NRADIP=3, + NRADLP=2, + NSW=6, + RLWINHF=1, + RRE2DE=0.64952, + RSWINHF=1, + / + &NAERCLI + / + &NAEVOL + / + &NAIMPO + / + &NALORI + / + &NAMAFN + GFP_CLSH%CLNAME='SURFACCGREL2', + GFP_XLSH%CLNAME='SURFINSGREL2', + GFP_CLSG%CLNAME='SURFACCGRAUPEL', + GFP_CLSP%CLNAME='SURFACCPLUIE', + GFP_CLSS%CLNAME='SURFACCNEIGE', + GFP_SFIS%IBITS=16, + GFP_ST%CLNAME='SURFTEMPERATURE', + GFP_ST%IANO=0, + GFP_ST%IBITS=12, + GFP_X10U%CLNAME='CLSVENT.ZONAL', + GFP_X10U%IANO=0, + GFP_X10U%IBITS=12, + GFP_X10V%CLNAME='CLSVENT.MERIDIEN', + GFP_X10V%IANO=0, + GFP_X10V%IBITS=12, + GFP_X2RH%CLNAME='CLSHUMI.RELATIVE', + GFP_X2RH%IANO=0, + GFP_X2RH%IBITS=12, + GFP_X2T%CLNAME='CLSTEMPERATURE', + GFP_X2T%IANO=1, + GFP_XCCC%IBITS=8, + GFP_XHCC%IBITS=8, + GFP_XLCC%IBITS=8, + GFP_XLSG%CLNAME='SURFINSGRAUPEL', + GFP_XLSP%CLNAME='SURFINSPLUIE', + GFP_XLSS%CLNAME='SURFINSNEIGE', + GFP_XMCC%IBITS=8, + GFP_XN2T%IBITS=12, + GFP_XTCC%IBITS=8, + GFP_XUGST%CLNAME='CLSU.RAF60M.XFU', + GFP_XUGST%IANO=0, + GFP_XUGST%IBITS=12, + GFP_XVGST%CLNAME='CLSV.RAF60M.XFU', + GFP_XVGST%IANO=0, + GFP_XVGST%IBITS=12, + GFP_XX2T%IBITS=12, + GFP_XXDIAGH%IBITS=12, + TFP_ABS%ZFK=32., + TFP_CLF%IBITS=6, + TFP_EDR%CLNAME='EDR', + TFP_EDR%IBITS=16, + TFP_EDR%IGRIB=136, + TFP_GR%IBITS=12, + TFP_HL%IBITS=12, + TFP_HTB%IBITS=16, + TFP_HTB%LLGP=.TRUE., + TFP_HU%IBITS=12, + TFP_MSAT9C2%IBITS=12, + TFP_MSAT9C6%IBITS=12, + TFP_MSLNH%IBITS=12, + TFP_PV%ZFK=64., + TFP_RCLS%IBITS=12, + TFP_RR%IBITS=12, + TFP_SN%IBITS=12, + TFP_T%IBITS=12, + TFP_TCLS%IBITS=12, + TFP_TH%IBITS=12, + TFP_THPW%IBITS=12, + TFP_THV%IBITS=12, + TFP_TN%IBITS=12, + TFP_TWV%IBITS=12, + TFP_TX%IBITS=12, + TFP_U%IBITS=12, + TFP_V%IBITS=12, + TFP_VOR%ZFK=32., + TFP_VV%ZFK=32., + / + &NAMARG + CNMEXP='${CNMEXP}', + LECMWF=.FALSE., + LELAM=.TRUE., + LSLAG=.TRUE., + NCONF=1, + NSUPERSEDE=1, + / + &NAMARPHY + LKFBCONV=.FALSE., + LKFBD=.FALSE., + LKFBS=.FALSE., + LMFSHAL=.TRUE., + LMICRO=.TRUE., + LMPA=.TRUE., + LMSE=.TRUE., + LTURB=.TRUE., + / + &NAMCA + / + &NAMCAPE + / + &NAMCFU + LCUMFU=.TRUE., + LFPLS=.TRUE., + LFPLSG=.TRUE., + LFPLSH=.TRUE., + LFR=.TRUE., + LFRRC=.TRUE., + LFSF=.TRUE., + LNEBPAR=.TRUE., + LNEBTT=.TRUE., + LRAYD=.TRUE., + LRAYS=.TRUE., + / + &NAMCHEM + / + &NAMCHET + / + &NAMCHK + / + &NAMCLA + / + &NAMCLDP + / + &NAMCLI + / + &NAMCLOP15 + / + &NAMCLTC + / + &NAMCOK + / + &NAMCOM + / + &NAMCOSJO + / + &NAMCOUPLO4 + / + &NAMCT0 + CFPNCF='ECHFP', + CNPPATH=' ', + LAROME=.TRUE., + LNHEE=.TRUE., + LSCREEN_OPENMP=.FALSE., + LSPRT=.TRUE., + LTWOTL=.TRUE., + NFPOS=1, + NFRSDI=18, + NSDITS(0)=0, + NFRHIS=72, + NHISTS(0)=0, + NFRPOS=72, + NPOSTS(0)=0, + NFRSFXHIS=72, + NSFXHISTS(0)=0, + NFRDHFD=72, + NDHFDTS(0)=0, + / + &NAMCT1 + LRFILAF=.FALSE., + N1HIS=1, + N1POS=1, + N1RES=0, + N1SDI=1, + N1SFXHIS=1, + N1GDI=0, + / + &NAMCUMF + / + &NAMCUMFS + / + &NAMCVER + / + &NAMCVMNH + / + &NAMDDH + LDDH_OMP=.TRUE., + LHDDOP=.TRUE., + LHDHKS=.TRUE., + LHDEFD=.TRUE., + LFLEXDIA=.TRUE., + BDEDDH(1,1)=3, + BDEDDH(2,1)=1, + BDEDDH(3,1)=358.8 + BDEDDH(4,1)=45.1 + BDEDDH(5,1)=360.3 + BDEDDH(6,1)=44.5 + / + &NAMDFI + / + &NAMDIM + NPROMA=-50, + / + &NAMDIMO + / + &NAMDIM_TRAJ + / + &NAMDPHY + / + &NAMDPRECIPS + / + &NAMDYN + LADVF=.TRUE., + LQMPD=.FALSE., + LQMT=.FALSE., + LQMVD=.FALSE., + LRHDI_LASTITERPC=.TRUE., + NITMP=4, + NSITER=1, + NSPDLAG=3, + NSVDLAG=3, + NTLAG=3, + NVLAG=3, + NWLAG=3, + RDAMPDIV=20., + RDAMPPD=20., + RDAMPQ=0., + RDAMPT=0., + RDAMPVD=20., + RDAMPVOR=20., + REPS1=0., + REPS2=0., + REPSM1=0., + REPSM2=0., + REPSP1=0., + SDRED=1., + SIPR=90000., + SITR=350., + SITRA=100., + SLHDA0=0.25, + SLHDD00=0.000065, + VESL=0.05, + XIDT=0., + ZSLHDP1=1.7, + ZSLHDP3=0.6, + / + &NAMDYNA + LCOMADH=.TRUE., + LCOMADV=.FALSE., + LCOMAD_GFL=.TRUE., + LCOMAD_SP=.TRUE., + LCOMAD_SPD=.TRUE., + LCOMAD_SVD=.TRUE., + LCOMAD_T=.TRUE., + LCOMAD_W=.TRUE., + LGWADV=.TRUE., + LNESC=.TRUE., + LPC_CHEAP=.TRUE., + LPC_FULL=.TRUE., + LRDBBC=.FALSE., + LSETTLS=.FALSE., + LSETTLST=.TRUE., + LSLHD_GFL=.TRUE., + LSLHD_OLD=.FALSE., + LSLHD_SPD=.FALSE., + LSLHD_SVD=.FALSE., + LSLHD_T=.FALSE., + LSLHD_W=.FALSE., + ND4SYS=2, + NDLNPR=1, + NPDVAR=2, + NVDVAR=4, + SLHDEPSH=0.08, + SLHDKMAX=6, + / + &NAMDYNCORE + / + &NAMEMIS_CONF + / + &NAMENKF + / + &NAMFA + CMODEL='OUTPUTID', + LEXTERN=.TRUE., + LSUPPDATE=.FALSE., + NBITCS=-1, + NBITPG=-1, + NSTRON=-1, + / + &NAMFAINIT + JPXTRO=2000, + / + &NAMFPC + CFP2DF(1)='SURFPRESSION', + CFP2DF(2)='MSL_NHPRESSURE', + CFP2DF(3)='SURFTOT.WAT.VAPO', + CFP2DF(4)='SURFISOTPW0.MALT', + CFP2DF(5)='SURFCAPE.POS.F00', + CFP2DF(6)='C002_METEOSAT_09_SEVIRI.POS', + CFP2DF(7)='C006_METEOSAT_09_SEVIRI.POS', + CFP2DF(8)='SURFREFLECT.MAX', + CFP2DF(9)='SURFISOTPW1.MALT', + CFP2DF(10)='SURFISOTPW2.MALT', + CFP3DF(1)='GEOPOTENTIEL', + CFP3DF(2)='TEMPERATURE', + CFP3DF(3)='VENT_ZONAL', + CFP3DF(4)='VENT_MERIDIEN', + CFP3DF(5)='HUMI_RELATIVE', + CFP3DF(6)='THETA_PRIM_W', + CFP3DF(7)='PRESSURE', + CFP3DF(8)='ABS_VORTICITY', + CFP3DF(9)='VITESSE_VERTICALE', + CFP3DF(10)='TEMPE_POTENT', + CFP3DF(11)='POT_VORTICIT', + CFP3DF(12)='SIM_REFLECTI', + CFP3DF(13)='RAIN', + CFP3DF(14)='SNOW', + CFP3DF(15)='GRAUPEL', + CFP3DF(16)='ICE_CRYSTAL', + CFP3DF(17)='CLOUD_WATER', + CFP3DF(18)='VERT.VELOCIT', + CFP3DF(19)='DIVERGENCE', + CFP3DF(20)='THETA_VIRTUA', + CFP3DF(21)='TKE', + CFP3DF(22)='CLOUD_FRACTI', + CFP3DF(23)='ISOT_ALTIT', + CFP3DF(24)='EDR', + CFPCFU(1)='SURFTENS.TOTA.ZO', + CFPCFU(2)='SURFTENS.TOTA.ME', + CFPCFU(3)='SURFACCPLUIE', + CFPCFU(4)='SURFACCNEIGE', + CFPCFU(5)='SURFACCGRAUPEL', + CFPCFU(6)='SOMMFLU.RAY.SOLA', + CFPCFU(7)='SURFFLU.RAY.SOLA', + CFPCFU(8)='SOMMFLU.RAY.THER', + CFPCFU(9)='SURFFLU.RAY.THER', + CFPCFU(10)='SURFFLU.LAT.MTOT', + CFPCFU(11)='SURFFLU.MTOTA.NE', + CFPCFU(12)='SURFFLU.CHA.SENS', + CFPCFU(13)='SURFRAYT SOLA DE', + CFPCFU(14)='SURFRAYT THER DE', + CFPCFU(15)='SURFRAYT SOL CL', + CFPCFU(16)='SURFRAYT THER CL', + CFPCFU(17)='SURFRAYT DIR SUR', + CFPDOM(1)='FRANGP0025', + CFPFMT='LALON', + CFPPHY(1)='SURFTEMPERATURE', + CFPPHY(2)='INTSURFGEOPOTENT', + CFPPHY(3)='SURFRESERV.NEIGE', + CFPXFU(1)='CLSTEMPERATURE', + CFPXFU(2)='CLSHUMI.RELATIVE', + CFPXFU(3)='CLSVENT.ZONAL', + CFPXFU(4)='CLSVENT.MERIDIEN', + CFPXFU(5)='SURFNEBUL.TOTALE', + CFPXFU(6)='SURFNEBUL.HAUTE', + CFPXFU(7)='SURFNEBUL.MOYENN', + CFPXFU(8)='SURFNEBUL.BASSE', + CFPXFU(9)='CLSMAXI.TEMPERAT', + CFPXFU(10)='CLSMINI.TEMPERAT', + CFPXFU(11)='CLPMHAUT.MOD.XFU', + CFPXFU(12)='SURFDIAGHAIL', + LCRITSNOWTEMP=.FALSE., + LFPCAPEX=.TRUE., + LFPMOIS=.TRUE., + LFPPACKING=.FALSE., + LWIDER_DOM=.TRUE., + L_READ_MODEL_DATE=.TRUE., + NFITI=1, + NFITV=1, + NFPCAPE=5, + NFPCLI=1, + NFPGRIB=1, + NFPINPHY=4, + NITERPV=8, + RENTRA=0.0001, + RFP3H(1)=10., + RFP3H(2)=20., + RFP3H(3)=35., + RFP3H(4)=50., + RFP3H(5)=75., + RFP3H(6)=100., + RFP3H(7)=150., + RFP3H(8)=200., + RFP3H(9)=250., + RFP3H(10)=375., + RFP3H(11)=500., + RFP3H(12)=625., + RFP3H(13)=750., + RFP3H(14)=875., + RFP3H(15)=1000., + RFP3H(16)=1125., + RFP3H(17)=1250., + RFP3H(18)=1375., + RFP3H(19)=1500., + RFP3H(20)=1750., + RFP3H(21)=2000., + RFP3H(22)=2250., + RFP3H(23)=2500., + RFP3H(24)=2750., + RFP3H(25)=3000., + RFP3I(1)=-273.15, + RFP3I(2)=-263.15, + RFP3I(3)=-261.15, + RFP3I(4)=-253.15, + RFP3P(1)=10000., + RFP3P(2)=12500., + RFP3P(3)=15000., + RFP3P(4)=17500., + RFP3P(5)=20000., + RFP3P(6)=22500., + RFP3P(7)=25000., + RFP3P(8)=27500., + RFP3P(9)=30000., + RFP3P(10)=35000., + RFP3P(11)=40000., + RFP3P(12)=45000., + RFP3P(13)=50000., + RFP3P(14)=55000., + RFP3P(15)=60000., + RFP3P(16)=65000., + RFP3P(17)=70000., + RFP3P(18)=75000., + RFP3P(19)=80000., + RFP3P(20)=85000., + RFP3P(21)=90000., + RFP3P(22)=92500., + RFP3P(23)=95000., + RFP3P(24)=100000., + RFP3PV(1)=0.0000015, + RFP3PV(2)=0.000002, + RFPCD2=5., + RFPCSAB=50., + RFPVCAP=7000., + / + &NAMFPD + NLAT(1)=41, + NLON(1)=41, + RLONC(1)=-0.71, + RLATC(1)=44.8, + RDELX(1)=0.025, + RDELY(1)=0.025, + / + &NAMFPDY2 + / + &NAMFPDYF + / + &NAMFPDYH + / + &NAMFPDYI + / + &NAMFPDYP + / + &NAMFPDYS + / + &NAMFPDYT + / + &NAMFPDYV + / + &NAMFPF + NFMAX(1)=60, + NFMAX(2)=80, + / + &NAMFPG + NFPDISTRIB=1, + / + &NAMFPIOS + / + &NAMFPMOVE + / + &NAMFPPHY + / + &NAMFPSC2 + NFPROMA=-50, + / + &NAMFPSC2_DEP + NFPROMA_DEP=-50, + / + &NAMGEM + / + &NAMGFL + NGFL_EZDIAG=4, + YEZDIAG_NL(1)%CNAME='EZDIAG01', + YEZDIAG_NL(1)%LREQOUT=.FALSE., + YEZDIAG_NL(2)%CNAME='EZDIAG02', + YEZDIAG_NL(2)%LREQOUT=.FALSE., + YEZDIAG_NL(3)%CNAME='EZDIAG03', + YEZDIAG_NL(3)%LREQOUT=.FALSE., + YEZDIAG_NL(4)%CNAME='INPRRTOT3D', + YEZDIAG_NL(4)%LREQOUT=.TRUE., + YG_NL%LQM=.TRUE., + YG_NL%LSLHD=.TRUE., + YG_NL%NCOUPLING=-1, + YG_NL%NREQIN=1, + YG_NL%REFVALC=0., + YH_NL%LGP=.TRUE., + YH_NL%NREQIN=0, + YH_NL%NCOUPLING=-1, + YH_NL%REFVALC=0., + YH_NL%LPT=.FALSE., + YH_NL%LREQOUT=.TRUE., + YH_NL%LQM=.TRUE., + YH_NL%LSLHD=.FALSE., + YIRAD_NL%LGP=.TRUE., + YI_NL%LQM=.TRUE., + YI_NL%LSLHD=.TRUE., + YI_NL%NCOUPLING=-1, + YI_NL%NREQIN=1, + YI_NL%REFVALC=0., + YLRAD_NL%LGP=.TRUE., + YL_NL%LQM=.TRUE., + YL_NL%LSLHD=.TRUE., + YL_NL%NCOUPLING=-1, + YL_NL%NREQIN=1, + YL_NL%REFVALC=0., + YQ_NL%LCOMAD=.TRUE., + YQ_NL%LQM=.TRUE., + YQ_NL%LSLHD=.FALSE., + YQ_NL%NREQIN=1, + YR_NL%LQM=.TRUE., + YR_NL%LSLHD=.TRUE., + YR_NL%NCOUPLING=-1, + YR_NL%NREQIN=1, + YR_NL%REFVALC=0., + YS_NL%LQM=.TRUE., + YS_NL%LSLHD=.TRUE., + YS_NL%NCOUPLING=-1, + YS_NL%NREQIN=1, + YS_NL%REFVALC=0., + YTKE_NL%NCOUPLING=0, + YTKE_NL%NREQIN=1, + / + &NAMGRIB + / + &NAMGWD + / + &NAMGWDIAG + / + &NAMGWWMS + / + &NAMIAU + ALPHAIAU=0.5, + LIAU=.FALSE., + TSTARTIAU=1800, + TSTOPIAU=5340, + / + &NAMICE + / + &NAMINI + LDFI=.FALSE., + / + &NAMINTFLEX + / + &NAMIOMI + / + &NAMIOS + / + &NAMIO_SERV + NIO_SERV_BUF_MAXSIZE=20, + NIO_SERV_METHOD=2, + NMSG_LEVEL_CLIENT=0, + NMSG_LEVEL_SERVER=0, + NPROCESS_LEVEL=5, + NPROC_IO=0, + / + &NAMJBCODES + / + &NAMJFH + / + &NAMJG + / + &NAMLCZ + / + &NAMLSFORC + / + &NAMMARS + / + &NAMMCC + / + &NAMMCUF + / + &NAMMKODB + / + &NAMMODERR + / + &NAMMTS + / + &NAMMWAVE + / + &NAMNPROF + / + &NAMNUD + / + &NAMOBS + / + &NAMONEDVAR + / + &NAMOOPS + / + &NAMOPH + CFNHWF='ECHIS', + LINC=.TRUE., + NTIMEFMT=1, + / + &NAMOPTCMEM + / + &NAMPAR0 + LOPT_SCALAR=.TRUE., + NPRINTLEV=1, + LMPOFF=.FALSE., + MBX_SIZE=2048000000, + MP_TYPE=2, + NOUTPUT=1, + NPROC=$NPROC, +$NPRTRW_NPRTRV + / + &NAMPAR1 + LEQ_REGIONS=.FALSE., + LSLONDEM=.TRUE., + LSPLIT=.TRUE., + LSYNC_SLCOM=.FALSE., + LSYNC_TRANS=.FALSE., + L_GATHERV_WRGP=.FALSE., + NCOMBFLEN=1800000, + NSTRIN=$NSTRIN, + NSTROUT=$NSTROUT, + / + &NAMPARAR + CFRAC_ICE_ADJUST='S', + CFRAC_ICE_SHALLOW_MF='S', + CMICRO='ICE4', + CSEDIM='STAT', + CSNOWRIMING='M90', + LCONVHG=.TRUE., + LCRFLIMIT=.TRUE., + LCRIAUTI=.TRUE., + LEVLIMIT=.TRUE., + LFEEDBACKT=.TRUE., + LFPREC3D=.TRUE., + LNULLWETG=.TRUE., + LNULLWETH=.TRUE., + LOLSMC=.TRUE., + LOSEDIC=.TRUE., + LOSIGMAS=.TRUE., + LOSUBG_COND=.TRUE., + LSEDIM_AFTER=.FALSE., + LWETGPOST=.TRUE., + LWETHPOST=.TRUE., + NMAXITER_MICRO=1, + NPRINTFR=10000, + NPTP=1, + RCRIAUTC=0.001, + RCRIAUTI=0.0002, + RT0CRIAUTI=-5., + VSIGQSAT=0.02, + XFRACM90=0.1, + XMRSTEP=0.00005, + XSPLIT_MAXCFL=0.8, + XTSTEP_TS=0., + / + &NAMPHMSE + LPGDFWR=.FALSE., + / + &NAMPHY + LAERODES=.TRUE., + LAEROLAN=.TRUE., + LAEROSEA=.TRUE., + LAEROSOO=.TRUE., + LEDR=.TRUE., + LMPHYS=.TRUE., + LO3ABC=.TRUE., + LRAYFM=.TRUE., + / + &NAMPHY0 + ALMAV=300., + BEDIFV=0.05, + ECMNP=3000., + GCCSV=0., + GCVADS=0.8, + GCVALFA=0.000045, + GCVBETA=0.2, + GCVMLT=0.00016, + GCVNU=0.000025, + GCVPSI=1., + GCVPSIE=1., + GDDEVA=0.25, + GDDSDE=0.5, + GWDCD=6., + HUCOE=0.5, + HUTIL=1.8, + QSSC=400., + QSSUSC=0.75, + QSSUSS=0.4, + QSSUSV=250., + QSUSXC=0.0002, + QSUSXS=0.0003, + QXRAL=130., + QXRDEL=0.49, + QXRHX=0.99, + QXRR=0.25, + RCVEVAP=0.25, + REFLKUO=5000., + REVGSL=15., + SCO=-20., + TDDGP=0.8, + TENTR=0.0000025, + TENTRX=0.00008, + TUDGP=0.8, + UHDIFV=0.0008, + USURIC=0.175, + USURICE=0.5, + USURICL=1., + USURID=0.1, + USURIDE=0.25, + VZ0CM=0.00015, + XMAXLM=5000., + XMINLM=10., + / + &NAMPHY1 + ALBMIN=0.65, + ALCRIN=0.75, + GCGEL=0.00003, + GCGELS=0.00005, + GNEIMX=1.8, + GNEIMXS=1.8, + RCTVEG(3)=0.000012, + RCTVEG(4)=0.00001, + / + &NAMPHY2 + FACRAF=3.8, + HTKERAF=20., + LMULAF=.TRUE., + LRAFTKE=.TRUE., + LRAFTUR=.TRUE., + XDAMP=1., + XMULAF=-1.85, + / + &NAMPHY3 + / + &NAMPHYDS + / + &NAMPONG + / + &NAMPPC + / + &NAMPPVI + / + &NAMPRE + / + &NAMRAD15 + / + &NAMRADCMEM + / + &NAMRCF + / + &NAMRCOEF + / + &NAMRES + / + &NAMRGRI + / + &NAMRINC + / + &NAMRIP + TSTEP=50., + CSTOP='h2', + / + &NAMRIP0 + / + &NAMRLX + / + &NAMSATS + LPARTIAL_COEF_FILES=.TRUE., + / + &NAMSCC + / + &NAMSCEN + / + &NAMSCM + / + &NAMSEKF + / + &NAMSENS + / + &NAMSFXCMP + CFLDNAME(1)='????????????????', + NBBITS(1)=24, + / + &NAMSIMPHL + / + &NAMSPNG + / + &NAMSPSDT + / + &NAMSTA + / + &NAMSTOPH + / + &NAMSWE + / + &NAMTESTVAR + / + &NAMTHLIM + / + &NAMTOPH + ETCVIM=5000., + ETNEBU=5000., + ETPLUI=5000., + XDRMTK=6.0D-7, + XDRMTP=800., + XDRMUK=3.0D-7, + XDRMUP=800., + / + &NAMTRAJP + / + &NAMTRANS + / + &NAMTRANS0 + / + &NAMTS + / + &NAMVAR + / + &NAMVARBC + / + &NAMVARBC_AIREP + / + &NAMVARBC_ALLSKY + / + &NAMVARBC_GBRAD + / + &NAMVARBC_RAD + / + &NAMVARBC_SFCOBS + / + &NAMVARBC_TCWV + / + &NAMVARBC_TO3 + / + &NAMVAREPS + / + &NAMVDF + / + &NAMVDOZ + / + &NAMVOLCANO + / + &NAMVRTL + / + &NAMVV0 + / + &NAMVV1 + / + &NAMVWRK + / + &NAMWAVELETJB + / + &NAMXFU + LXCLP=.TRUE., + LXCLS=.TRUE., + LXFU=.TRUE., + LXNEBPA=.TRUE., + LXNEBTT=.TRUE., + LXNUVCLS=.TRUE., + LXPLS=.TRUE., + LXPLSG=.TRUE., + LXPLSH=.TRUE., + LXQCLS=.TRUE., + LXR=.TRUE., + LXSOIL=.FALSE., + LXTHW=.TRUE., + LXTRT=.TRUE., + LXTTCLS=.TRUE., + LXXDIAGH=.TRUE., + LXXGST=.TRUE., + NFRRAZ=72, + NRAZTS(0)=0, + / + &NAM_CANAPE + / + &NAM_DISTRIBUTED_VECTORS + / + &NAPHLC + / + &NEMCT0 + / + &NEMDIM + / + &NEMDYN + / + &NEMELBC0A + LESPCPL=.TRUE., + NBICNHX=2, + NBICOP=2, + NBICOT=2, + NBICOU=2, + NBICPD=2, + NBICVD=2, + NECRIPL=1, + / + &NEMELBC0B + NEFRSPCPL=1, + NEK0=20, + NEK1=30, + NEN1=4, + NEN2=8, + SPNUDDIV=0.01, + SPNUDQ=0., + SPNUDT=0.01, + SPNUDVOR=0.01, + TEFRCL=3600., + / + &NEMFPEZO + / + &NEMGEO + / + &NEMJK + / + &NEMVAR + / + &NEMWAVELET + / + &NAETLDIAG + / + &NAMMETHOX + / + &NAMSPP + / + &NAMACV + / + &NAMFPOBJ + / + &NAMNORGWD + / + &NAMTRAJ + / + &NAMSATSIM + / + &NAMDVISI + / + &NAMNUDGLH + / + &NAMPERTPAR + / +FIN +/bin/cat fort.4 + +/bin/cat <<FIN > EXSEG1.nam + &NAM_DIAG_ISBAN + LPGD=.TRUE., + LSURF_MISC_BUDGET=.TRUE., + / + &NAM_DIAG_SURFN + LCOEF=.TRUE., + LSURF_BUDGET=.TRUE., + N2M=2, + / + &NAM_ISBAN + CSCOND='NP89', + / + &NAM_REPROD_OPER + LREPROD_OPER=.TRUE., + / + &NAM_SEAFLUXN + CSEA_FLUX='ECUME', + LPWG=.FALSE., + LPRECIP=.FALSE., + LPWEBB=.FALSE., + / + &NAM_SSON + CROUGH='Z01D', + XFRACZ0=5., + LDSV=.FALSE., + / + &NAM_SURF_ATM + XRIMAX=0.2, + LNOSOF=.TRUE., + / + &NAM_SURF_CSTS + XZ0SN=0.01, + XZ0HSN=0.001, + XEMISSN=0.99, + / + &NAM_WRITE_DIAG_SURFN + LPROVAR_TO_DIAG=.FALSE., + LSELECT=.TRUE., +CSELECT(1)='T2M','HU2M','XX','YY','DX','DY','SST','Z0SEA','TS_WATER','Z0WATER','TG1','TG2','TG3','WG1','WG2','WG3','WGI1','WGI2','WGI3','WR','WSN_VEG1','RSN_VEG1','ASN_VEG','TSRAD_NAT','RESA','TROOF1','TROOF2','TROOF3','TROOF4','TROOF5','WS_ROOF','TROAD1','TROAD2','TROAD3','TROAD4','TROAD5','WS_ROAD','TWALL1','TWALL2','TWALL3','TWALL4','TWALL5','TI_BLD','T_WIN1','TI_ROAD','WSN_RF1','RSN_RF1','TSN_RF1','ASN_RF','WSN_RD1','RSN_RD1','TSN_RD1','ASN_RD','TCANYON','QCANYON','STORAGE_TYPE','MASDEV','VERSION','BUG','DIM_FULL','DTCUR','LAT0','LON0','RPK','BETA','LATORI','LONORI','IMAX','JMAX','RW_PRECIP','BUDC','SEA_OCEAN','SEA_SBL','WAT_SBL','SN_VEG_N','SN_VEG','LSNOW_FRAC_T','GLACIER','TEMPARP','NLITTER','NLITTLEVS','NSOILCARB','ISBA_CANOPY','SN_RF_N','SN_RF','SN_RD_N','SN_RD','SN_RD_TYP','SN_RF_TYP','TEB_CANOPY','STORAGETYPE','CARTESIAN','GRID_TYPE','SN_VEG_TYP','RESPSL','ROAD_DIR','WALL_OPT','LAI','VEG','RSMIN','DG2','_FBUF_SIZE','_FBUF_DIM1','_FBUF_DIM2','_FBUF_NAME','_FBUF_TYPE','_FBUF_MASK','LCPL_GCM','HANDLE_SIC','SSS', + / + &NAM_WRITE_SURF_ATM + LNOWRITE_TEXFILE=.TRUE., + / +FIN +/bin/cat EXSEG1.nam + +# ***************************************** +# * Acquisition du fichier de demarrage * +# ***************************************** + +echo +for hh in 0 1 2 3 4 5 6 ; do + N=`expr $hh / 1 ` + set -x + ln -s $rekchemin/data/aro/$case/ELSCFFCSTALBC000${N}_l15 ELSCF${CNMEXP}ALBC00${N} + set +x +done +set -x +ln -s $rekchemin/data/aro/$case/ICMSHFCSTINIT_l15 ICMSH${CNMEXP}INIT +ln -s $rekchemin/data/aro/$case/ICMSHFCSTINIT.sfx ICMSH${CNMEXP}INIT.sfx +ln -s $rekchemin/data/surfex/v8/ecoclimapI_covers_param.bin . +ln -s $rekchemin/data/surfex/v8/ecoclimapII_eu_covers_param.bin . +ln -s $rekchemin/data/surfex/v8/ecoclimapII_af_covers_param.bin . +ln -s $rekchemin/data/aro/$case/Const.Clim Const.Clim +ln -s $rekchemin/data/aro/$case/Const.Clim.sfx Const.Clim.sfx +ln -s $rekchemin/data/aro/$case/const.clim.FRANGP0025 const.clim.FRANGP0025 +ln -s $rekchemin/data/rttov12/rtcoef_meteosat_9_seviri.dat . +ln -s $rekchemin/data/rttov12/rtcoef_meteosat_10_seviri.dat . +ln -s $rekchemin/data/rttov12/sccldcoef_meteosat_9_seviri.dat . +set +x +tar xfz $rekchemin/data/rtm/radiation_params.47r1_light.tgz + +# *************** +# * Chargement * +# *************** + +echo +set -x +\ln -s $LOADIR/MASTERODB MASTER +set +x +if ldd MASTER | grep openmpi > /dev/null; then + #On est sur PC + MPILIB=$(ldd MASTER | grep openmpi | tail -1 | awk '{print $3}' | awk -F "/" '{print $(NF-2)}') + MPIRUN="$(echo $(dirname $(dirname $(ldd MASTER | grep openmpi| tail -1 | awk '{print $3}'))))/bin/orterun --oversubscribe -np $NPROC" + GRIB_API=$(dirname $(dirname $(ldd MASTER | grep grib_api | head -1 | awk '{print $3}') 2>/dev/null) 2>/dev/null) + ECCODES=$(dirname $(dirname $(ldd MASTER | grep eccodes | head -1 | awk '{print $3}') 2>/dev/null) 2>/dev/null) + export GRIB_SAMPLES_PATH=$GRIB_API/share/grib_api/ifs_samples/grib1 + export GRIB_DEFINITION_PATH=$GRIB_API/share/grib_api/definitions + export ECCODES_SAMPLES_PATH=$ECCODES/share/eccodes/ifs_samples/grib1 + export ECCODES_DEFINITION_PATH=$rekchemin/data/eccodes_extras_definitions:$ECCODES/share/eccodes/definitions +else + #On est sur HPC + #MPIRUN="$(echo $(dirname $(dirname $(ldd MASTER | grep libmpi| tail -1 | awk '{print $3}'))))/bin/mpirun -wdir $PWD" + NNODES=$SLURM_JOB_NUM_NODES + MPITASKS_PER_NODE=$((SLURM_NTASKS/SLURM_JOB_NUM_NODES)) + MPI_TASKS=$SLURM_NTASKS + MPIRUN="/opt/softs/mpiauto/mpiauto -np $MPI_TASKS -nnp $MPITASKS_PER_NODE --" + export OMP_STACKSIZE=4G + export KMP_STACKSIZE=4G + export KMP_MONITOR_STACKSIZE=4G + export DR_HOOK=1 + export DR_HOOK_IGNORE_SIGNALS=-1 + export DR_HOOK_SILENT=1 + export DR_HOOK_SHOW_PROCESS_OPTIONS=0 + export MPL_MBX_SIZE=2048000000 + export EC_PROFILE_HEAP=0 + export EC_PROFILE_MEM=0 + export EC_MPI_ATEXIT=0 + export EC_MEMINFO=0 + export OPENBLAS_NUM_THREADS=1 + export MKL_CBWR="AUTO,STRICT" + export MKL_NUM_THREADS=1 + export MKL_DEBUG_CPU_TYPE=5 + export ECCODES_SAMPLES_PATH=/opt/softs/libraries/ICC_2018.5.274/eccodes-2.17.0/share/eccodes/ifs_samples/grib1 + export ECCODES_DEFINITION_PATH=/opt/softs/libraries/ICC_2018.5.274/eccodes-2.17.0/share/eccodes/definitions +fi +echo $MPIRUN +set +x +if [ ! -f MASTER ] ; then echo No executable MASTER;exit 1;fi + +# *************** +# * Execution * +# *************** + +echo +echo OMP_NUM_THREADS=$OMP_NUM_THREADS +set -x +ulimit -s unlimited +$MPIRUN $PWD/MASTER >lola +set +x +echo +##if [ -f lola ] ; then +## echo;echo Standard output :;echo;cat lola +##fi +##if [ -f stderr.* ] ; then +## for file in stderr.* ; do +## echo;echo $file :;cat $file +## done +##fi +##if [ -f stdout.* ] ; then +##echo;echo stdout :;echo;cat stdout.* +##fi +##if [ -a NODE.001_01 ] ; then +## for file in NODE* ; do +## echo;echo Listing $file;echo +## cat $file +## done +##fi +##if [ $(find . -name "drhook.prof.*" | wc -l) -ne 0 ] ; then +### Top 25 for each MPI task : +## for file in drhook.prof.* ; do +## echo;echo $file :;head -38 $file +## done +##fi +#cat drhook.prof.* | perl -w $HOME/bin/drhook_merge_walltime_max.pl + +# ******************* +# * Sauvegardes * +# ******************* + +ls +#if [ -f PFFPOS000+0000 ] ; then +# cp PFFPOS000+0000 $WAIT_QUEUE/PFFPOS000+0000.$PBS_JOBID +#fi +cp lola NODE.001_01 ICMSHFPOS+00* DHFDLFPOS+00* $OUTPUTDIR/ +/bin/rm fort.4 EXSEG1.nam lola ICMSHFPOS+0000* PFFPOSFRANGP0025+0000* ICMSHFPOS+0001* +/bin/rm PFFPOSFRANGP0025+0001* ICMSHFPOS+0002* ECHIS PFFPOSFRANGP0025+0002* DHFDLFPOS+00* +/bin/rm ECHFP NODE.001_01 ifs.stat $(tar tfz $rekchemin/data/rtm/radiation_params.47r1_light.tgz) + +# **************** +# * Epilogue * +# **************** + +ls -ltr | grep -v "\->" +echo Wait_queue : +ls -ltr $TMPWAIT +cd $TMPDIR +\rm -rf rundir.$$ +\rm -rf wait_queue.$$ +date +set +x diff --git a/tools/conf_tests/small_3D_alt6/aro48t3.sh b/tools/conf_tests/small_3D_alt6/aro48t3.sh new file mode 100755 index 0000000000000000000000000000000000000000..bca3e00b79dd3afa64a65ca49e6d86d6d97a1f95 --- /dev/null +++ b/tools/conf_tests/small_3D_alt6/aro48t3.sh @@ -0,0 +1,1209 @@ +#!/bin/bash +#SBATCH -n 4 +#SBATCH --mem=20000 +#SBATCH --export=MYLIB,HOME,HOMEPACK,TMPDIR,OUTPUTDIR,TESTDIR +#SBATCH -t 00:10:00 +#SBATCH -N 1 +#SBATCH -p normal256 + +#The MYLIB variable must contain the gmkpack pack name +#The TESTDIR variable must contain the test directory +#Results will be stored in the local directory + +#Other environment varaibles that can be set: +#OUTPUTDIR + +date + +OUTPUTDIR=${OUTPUTDIR:-$PWD} +case=riette2 +#rekchemin="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" #Resources for the run must be in the same directory as this script +rekchemin=$TESTDIR + +NPROC=4 +NSTRIN=$NPROC +NSTROUT=1 +NPRTRW_NPRTRV="" +NPRTRW_NPRTRV=" NPRTRW=$NPROC, + NPRTRV=1," +export OMP_NUM_THREADS=1 + +#MYLIB=48t1_main.01%jpdup + +export DR_HOOK=1 +#export DR_HOOK_IGNORE_SIGNALS=-1 +export DR_HOOK_NOT_MPI=1 +export DR_HOOK_SILENT=1 +export DR_HOOK_OPT= + +export EC_PROFILE_HEAP=0 +export EC_PROFILE_MEM=0 +export EC_MPI_ATEXIT=0 +export DR_HOOK_SHOW_PROCESS_OPTIONS=0 +export EC_MEMINFO=0 +export TVSEARCHPATH=$SOURCE + +HOMEPACK=${HOMEPACK:=$HOME/pack} +SOURCE=$HOMEPACK/$MYLIB/src/local +LOADIR=$HOMEPACK/$MYLIB/bin + +TMPDIR=${TMPDIR:=$HOME/tmp} +TMPLOC=$TMPDIR/rundir.$$ +TMPWAIT=$TMPDIR/wait_queue.$$ +mkdir $TMPWAIT +mkdir $TMPLOC +cd $TMPLOC + +export RTTOV_COEFDIR=$PWD + +# ************************** +# * Saisie des NAMELISTS * +# ************************** + +CNMEXP='FPOS' + +echo +/bin/cat <<FIN > fort.4 + &NACIETEO + / + &NACOBS + / + &NACTAN + / + &NACTEX + / + &NACVEG + / + &NADOCK + / + &NAEAEM7 + / + &NAEAER + / + &NAECOAPHY + / + &NAEPHLI + / + &NAEPHY + / + &NAERAD + LRRTM=.TRUE., + LSRTM=.FALSE., + NAER=1, + NICEOPT=3, + NLIQOPT=3, + NOVLP=6, + NOZOCL=2, + NRADFR=18, + NRADIP=3, + NRADLP=2, + NSW=6, + RLWINHF=1, + RRE2DE=0.64952, + RSWINHF=1, + / + &NAERCLI + / + &NAEVOL + / + &NAIMPO + / + &NALORI + / + &NAMAFN + GFP_CLSG%CLNAME='SURFACCGRAUPEL', + GFP_CLSP%CLNAME='SURFACCPLUIE', + GFP_CLSS%CLNAME='SURFACCNEIGE', + GFP_SFIS%IBITS=16, + GFP_ST%CLNAME='SURFTEMPERATURE', + GFP_ST%IANO=0, + GFP_ST%IBITS=12, + GFP_X10U%CLNAME='CLSVENT.ZONAL', + GFP_X10U%IANO=0, + GFP_X10U%IBITS=12, + GFP_X10V%CLNAME='CLSVENT.MERIDIEN', + GFP_X10V%IANO=0, + GFP_X10V%IBITS=12, + GFP_X2RH%CLNAME='CLSHUMI.RELATIVE', + GFP_X2RH%IANO=0, + GFP_X2RH%IBITS=12, + GFP_X2T%CLNAME='CLSTEMPERATURE', + GFP_X2T%IANO=1, + GFP_XCCC%IBITS=8, + GFP_XHCC%IBITS=8, + GFP_XLCC%IBITS=8, + GFP_XLSG%CLNAME='SURFINSGRAUPEL', + GFP_XLSP%CLNAME='SURFINSPLUIE', + GFP_XLSS%CLNAME='SURFINSNEIGE', + GFP_XMCC%IBITS=8, + GFP_XN2T%IBITS=12, + GFP_XTCC%IBITS=8, + GFP_XUGST%CLNAME='CLSU.RAF60M.XFU', + GFP_XUGST%IANO=0, + GFP_XUGST%IBITS=12, + GFP_XVGST%CLNAME='CLSV.RAF60M.XFU', + GFP_XVGST%IANO=0, + GFP_XVGST%IBITS=12, + GFP_XX2T%IBITS=12, + GFP_XXDIAGH%IBITS=12, + TFP_ABS%ZFK=32., + TFP_CLF%IBITS=6, + TFP_EDR%CLNAME='EDR', + TFP_EDR%IBITS=16, + TFP_EDR%IGRIB=136, + TFP_GR%IBITS=12, + TFP_HL%IBITS=12, + TFP_HTB%IBITS=16, + TFP_HTB%LLGP=.TRUE., + TFP_HU%IBITS=12, + TFP_MSAT9C2%IBITS=12, + TFP_MSAT9C6%IBITS=12, + TFP_MSLNH%IBITS=12, + TFP_PV%ZFK=64., + TFP_RCLS%IBITS=12, + TFP_RR%IBITS=12, + TFP_SN%IBITS=12, + TFP_T%IBITS=12, + TFP_TCLS%IBITS=12, + TFP_TH%IBITS=12, + TFP_THPW%IBITS=12, + TFP_THV%IBITS=12, + TFP_TN%IBITS=12, + TFP_TWV%IBITS=12, + TFP_TX%IBITS=12, + TFP_U%IBITS=12, + TFP_V%IBITS=12, + TFP_VOR%ZFK=32., + TFP_VV%ZFK=32., + / + &NAMARG + CNMEXP='${CNMEXP}', + LECMWF=.FALSE., + LELAM=.TRUE., + LSLAG=.TRUE., + NCONF=1, + NSUPERSEDE=1, + / + &NAMARPHY + LKFBCONV=.FALSE., + LKFBD=.FALSE., + LKFBS=.FALSE., + LMFSHAL=.TRUE., + LMICRO=.TRUE., + LMPA=.TRUE., + LMSE=.TRUE., + LTURB=.TRUE., + / + &NAMCA + / + &NAMCAPE + / + &NAMCFU + LCUMFU=.TRUE., + LFPLS=.TRUE., + LFPLSG=.TRUE., + LFR=.TRUE., + LFRRC=.TRUE., + LFSF=.TRUE., + LNEBPAR=.TRUE., + LNEBTT=.TRUE., + LRAYD=.TRUE., + LRAYS=.TRUE., + / + &NAMCHEM + / + &NAMCHET + / + &NAMCHK + / + &NAMCLA + / + &NAMCLDP + / + &NAMCLI + / + &NAMCLOP15 + / + &NAMCLTC + / + &NAMCOK + / + &NAMCOM + / + &NAMCOSJO + / + &NAMCOUPLO4 + / + &NAMCT0 + CFPNCF='ECHFP', + CNPPATH=' ', + LAROME=.TRUE., + LNHEE=.TRUE., + LSCREEN_OPENMP=.FALSE., + LSPRT=.TRUE., + LTWOTL=.TRUE., + NFPOS=1, + NFRSDI=18, + NSDITS(0)=0, + NFRHIS=72, + NHISTS(0)=0, + NFRPOS=72, + NPOSTS(0)=0, + NFRSFXHIS=72, + NSFXHISTS(0)=0, + NFRDHFD=72, + NDHFDTS(0)=0, + / + &NAMCT1 + LRFILAF=.FALSE., + N1HIS=1, + N1POS=1, + N1RES=0, + N1SDI=1, + N1SFXHIS=1, + N1GDI=0, + / + &NAMCUMF + / + &NAMCUMFS + / + &NAMCVER + / + &NAMCVMNH + / + &NAMDDH + LDDH_OMP=.TRUE., + LHDDOP=.TRUE., + LHDHKS=.TRUE., + LHDEFD=.TRUE., + LFLEXDIA=.TRUE., + BDEDDH(1,1)=3, + BDEDDH(2,1)=1, + BDEDDH(3,1)=358.8 + BDEDDH(4,1)=45.1 + BDEDDH(5,1)=360.3 + BDEDDH(6,1)=44.5 + / + &NAMDFI + / + &NAMDIM + NPROMA=-50, + / + &NAMDIMO + / + &NAMDIM_TRAJ + / + &NAMDPHY + / + &NAMDPRECIPS + / + &NAMDYN + LADVF=.TRUE., + LQMPD=.FALSE., + LQMT=.FALSE., + LQMVD=.FALSE., + LRHDI_LASTITERPC=.TRUE., + NITMP=4, + NSITER=1, + NSPDLAG=3, + NSVDLAG=3, + NTLAG=3, + NVLAG=3, + NWLAG=3, + RDAMPDIV=20., + RDAMPPD=20., + RDAMPQ=0., + RDAMPT=0., + RDAMPVD=20., + RDAMPVOR=20., + REPS1=0., + REPS2=0., + REPSM1=0., + REPSM2=0., + REPSP1=0., + SDRED=1., + SIPR=90000., + SITR=350., + SITRA=100., + SLHDA0=0.25, + SLHDD00=0.000065, + VESL=0.05, + XIDT=0., + ZSLHDP1=1.7, + ZSLHDP3=0.6, + / + &NAMDYNA + LCOMADH=.TRUE., + LCOMADV=.FALSE., + LCOMAD_GFL=.TRUE., + LCOMAD_SP=.TRUE., + LCOMAD_SPD=.TRUE., + LCOMAD_SVD=.TRUE., + LCOMAD_T=.TRUE., + LCOMAD_W=.TRUE., + LGWADV=.TRUE., + LNESC=.TRUE., + LPC_CHEAP=.TRUE., + LPC_FULL=.TRUE., + LRDBBC=.FALSE., + LSETTLS=.FALSE., + LSETTLST=.TRUE., + LSLHD_GFL=.TRUE., + LSLHD_OLD=.FALSE., + LSLHD_SPD=.FALSE., + LSLHD_SVD=.FALSE., + LSLHD_T=.FALSE., + LSLHD_W=.FALSE., + ND4SYS=2, + NDLNPR=1, + NPDVAR=2, + NVDVAR=4, + SLHDEPSH=0.08, + SLHDKMAX=6, + / + &NAMDYNCORE + / + &NAMEMIS_CONF + / + &NAMENKF + / + &NAMFA + CMODEL='OUTPUTID', + LEXTERN=.TRUE., + LSUPPDATE=.FALSE., + NBITCS=-1, + NBITPG=-1, + NSTRON=-1, + / + &NAMFAINIT + JPXTRO=2000, + / + &NAMFPC + CFP2DF(1)='SURFPRESSION', + CFP2DF(2)='MSL_NHPRESSURE', + CFP2DF(3)='SURFTOT.WAT.VAPO', + CFP2DF(4)='SURFISOTPW0.MALT', + CFP2DF(5)='SURFCAPE.POS.F00', + CFP2DF(6)='C002_METEOSAT_09_SEVIRI.POS', + CFP2DF(7)='C006_METEOSAT_09_SEVIRI.POS', + CFP2DF(8)='SURFREFLECT.MAX', + CFP2DF(9)='SURFISOTPW1.MALT', + CFP2DF(10)='SURFISOTPW2.MALT', + CFP3DF(1)='GEOPOTENTIEL', + CFP3DF(2)='TEMPERATURE', + CFP3DF(3)='VENT_ZONAL', + CFP3DF(4)='VENT_MERIDIEN', + CFP3DF(5)='HUMI_RELATIVE', + CFP3DF(6)='THETA_PRIM_W', + CFP3DF(7)='PRESSURE', + CFP3DF(8)='ABS_VORTICITY', + CFP3DF(9)='VITESSE_VERTICALE', + CFP3DF(10)='TEMPE_POTENT', + CFP3DF(11)='POT_VORTICIT', + CFP3DF(12)='SIM_REFLECTI', + CFP3DF(13)='RAIN', + CFP3DF(14)='SNOW', + CFP3DF(15)='GRAUPEL', + CFP3DF(16)='ICE_CRYSTAL', + CFP3DF(17)='CLOUD_WATER', + CFP3DF(18)='VERT.VELOCIT', + CFP3DF(19)='DIVERGENCE', + CFP3DF(20)='THETA_VIRTUA', + CFP3DF(21)='TKE', + CFP3DF(22)='CLOUD_FRACTI', + CFP3DF(23)='ISOT_ALTIT', + CFP3DF(24)='EDR', + CFPCFU(1)='SURFTENS.TOTA.ZO', + CFPCFU(2)='SURFTENS.TOTA.ME', + CFPCFU(3)='SURFACCPLUIE', + CFPCFU(4)='SURFACCNEIGE', + CFPCFU(5)='SURFACCGRAUPEL', + CFPCFU(6)='SOMMFLU.RAY.SOLA', + CFPCFU(7)='SURFFLU.RAY.SOLA', + CFPCFU(8)='SOMMFLU.RAY.THER', + CFPCFU(9)='SURFFLU.RAY.THER', + CFPCFU(10)='SURFFLU.LAT.MTOT', + CFPCFU(11)='SURFFLU.MTOTA.NE', + CFPCFU(12)='SURFFLU.CHA.SENS', + CFPCFU(13)='SURFRAYT SOLA DE', + CFPCFU(14)='SURFRAYT THER DE', + CFPCFU(15)='SURFRAYT SOL CL', + CFPCFU(16)='SURFRAYT THER CL', + CFPCFU(17)='SURFRAYT DIR SUR', + CFPDOM(1)='FRANGP0025', + CFPFMT='LALON', + CFPPHY(1)='SURFTEMPERATURE', + CFPPHY(2)='INTSURFGEOPOTENT', + CFPPHY(3)='SURFRESERV.NEIGE', + CFPXFU(1)='CLSTEMPERATURE', + CFPXFU(2)='CLSHUMI.RELATIVE', + CFPXFU(3)='CLSVENT.ZONAL', + CFPXFU(4)='CLSVENT.MERIDIEN', + CFPXFU(5)='SURFNEBUL.TOTALE', + CFPXFU(6)='SURFNEBUL.HAUTE', + CFPXFU(7)='SURFNEBUL.MOYENN', + CFPXFU(8)='SURFNEBUL.BASSE', + CFPXFU(9)='CLSMAXI.TEMPERAT', + CFPXFU(10)='CLSMINI.TEMPERAT', + CFPXFU(11)='CLPMHAUT.MOD.XFU', + CFPXFU(12)='SURFDIAGHAIL', + LCRITSNOWTEMP=.FALSE., + LFPCAPEX=.TRUE., + LFPMOIS=.TRUE., + LFPPACKING=.FALSE., + LWIDER_DOM=.TRUE., + L_READ_MODEL_DATE=.TRUE., + NFITI=1, + NFITV=1, + NFPCAPE=5, + NFPCLI=1, + NFPGRIB=1, + NFPINPHY=4, + NITERPV=8, + RENTRA=0.0001, + RFP3H(1)=10., + RFP3H(2)=20., + RFP3H(3)=35., + RFP3H(4)=50., + RFP3H(5)=75., + RFP3H(6)=100., + RFP3H(7)=150., + RFP3H(8)=200., + RFP3H(9)=250., + RFP3H(10)=375., + RFP3H(11)=500., + RFP3H(12)=625., + RFP3H(13)=750., + RFP3H(14)=875., + RFP3H(15)=1000., + RFP3H(16)=1125., + RFP3H(17)=1250., + RFP3H(18)=1375., + RFP3H(19)=1500., + RFP3H(20)=1750., + RFP3H(21)=2000., + RFP3H(22)=2250., + RFP3H(23)=2500., + RFP3H(24)=2750., + RFP3H(25)=3000., + RFP3I(1)=-273.15, + RFP3I(2)=-263.15, + RFP3I(3)=-261.15, + RFP3I(4)=-253.15, + RFP3P(1)=10000., + RFP3P(2)=12500., + RFP3P(3)=15000., + RFP3P(4)=17500., + RFP3P(5)=20000., + RFP3P(6)=22500., + RFP3P(7)=25000., + RFP3P(8)=27500., + RFP3P(9)=30000., + RFP3P(10)=35000., + RFP3P(11)=40000., + RFP3P(12)=45000., + RFP3P(13)=50000., + RFP3P(14)=55000., + RFP3P(15)=60000., + RFP3P(16)=65000., + RFP3P(17)=70000., + RFP3P(18)=75000., + RFP3P(19)=80000., + RFP3P(20)=85000., + RFP3P(21)=90000., + RFP3P(22)=92500., + RFP3P(23)=95000., + RFP3P(24)=100000., + RFP3PV(1)=0.0000015, + RFP3PV(2)=0.000002, + RFPCD2=5., + RFPCSAB=50., + RFPVCAP=7000., + / + &NAMFPD + NLAT(1)=41, + NLON(1)=41, + RLONC(1)=-0.71, + RLATC(1)=44.8, + RDELX(1)=0.025, + RDELY(1)=0.025, + / + &NAMFPDY2 + / + &NAMFPDYF + / + &NAMFPDYH + / + &NAMFPDYI + / + &NAMFPDYP + / + &NAMFPDYS + / + &NAMFPDYT + / + &NAMFPDYV + / + &NAMFPF + NFMAX(1)=60, + NFMAX(2)=80, + / + &NAMFPG + NFPDISTRIB=1, + / + &NAMFPIOS + / + &NAMFPMOVE + / + &NAMFPPHY + / + &NAMFPSC2 + NFPROMA=-50, + / + &NAMFPSC2_DEP + NFPROMA_DEP=-50, + / + &NAMGEM + / + &NAMGFL + NGFL_EZDIAG=4, + YEZDIAG_NL(1)%CNAME='EZDIAG01', + YEZDIAG_NL(1)%LREQOUT=.FALSE., + YEZDIAG_NL(2)%CNAME='EZDIAG02', + YEZDIAG_NL(2)%LREQOUT=.FALSE., + YEZDIAG_NL(3)%CNAME='EZDIAG03', + YEZDIAG_NL(3)%LREQOUT=.FALSE., + YEZDIAG_NL(4)%CNAME='INPRRTOT3D', + YEZDIAG_NL(4)%LREQOUT=.TRUE., + YG_NL%LQM=.TRUE., + YG_NL%LSLHD=.TRUE., + YG_NL%NCOUPLING=-1, + YG_NL%NREQIN=1, + YG_NL%REFVALC=0., + YIRAD_NL%LGP=.TRUE., + YI_NL%LQM=.TRUE., + YI_NL%LSLHD=.TRUE., + YI_NL%NCOUPLING=-1, + YI_NL%NREQIN=1, + YI_NL%REFVALC=0., + YLRAD_NL%LGP=.TRUE., + YL_NL%LQM=.TRUE., + YL_NL%LSLHD=.TRUE., + YL_NL%NCOUPLING=-1, + YL_NL%NREQIN=1, + YL_NL%REFVALC=0., + YQ_NL%LCOMAD=.TRUE., + YQ_NL%LQM=.TRUE., + YQ_NL%LSLHD=.FALSE., + YQ_NL%NREQIN=1, + YR_NL%LQM=.TRUE., + YR_NL%LSLHD=.TRUE., + YR_NL%NCOUPLING=-1, + YR_NL%NREQIN=1, + YR_NL%REFVALC=0., + YS_NL%LQM=.TRUE., + YS_NL%LSLHD=.TRUE., + YS_NL%NCOUPLING=-1, + YS_NL%NREQIN=1, + YS_NL%REFVALC=0., + YTKE_NL%NCOUPLING=0, + YTKE_NL%NREQIN=1, + / + &NAMGRIB + / + &NAMGWD + / + &NAMGWDIAG + / + &NAMGWWMS + / + &NAMIAU + ALPHAIAU=0.5, + LIAU=.FALSE., + TSTARTIAU=1800, + TSTOPIAU=5340, + / + &NAMICE + / + &NAMINI + LDFI=.FALSE., + / + &NAMINTFLEX + / + &NAMIOMI + / + &NAMIOS + / + &NAMIO_SERV + NIO_SERV_BUF_MAXSIZE=20, + NIO_SERV_METHOD=2, + NMSG_LEVEL_CLIENT=0, + NMSG_LEVEL_SERVER=0, + NPROCESS_LEVEL=5, + NPROC_IO=0, + / + &NAMJBCODES + / + &NAMJFH + / + &NAMJG + / + &NAMLCZ + / + &NAMLSFORC + / + &NAMMARS + / + &NAMMCC + / + &NAMMCUF + / + &NAMMKODB + / + &NAMMODERR + / + &NAMMTS + / + &NAMMWAVE + / + &NAMNPROF + / + &NAMNUD + / + &NAMOBS + / + &NAMONEDVAR + / + &NAMOOPS + / + &NAMOPH + CFNHWF='ECHIS', + LINC=.TRUE., + NTIMEFMT=1, + / + &NAMOPTCMEM + / + &NAMPAR0 + LOPT_SCALAR=.TRUE., + NPRINTLEV=1, + LMPOFF=.FALSE., + MBX_SIZE=2048000000, + MP_TYPE=2, + NOUTPUT=1, + NPROC=$NPROC, +$NPRTRW_NPRTRV + / + &NAMPAR1 + LEQ_REGIONS=.FALSE., + LSLONDEM=.TRUE., + LSPLIT=.TRUE., + LSYNC_SLCOM=.FALSE., + LSYNC_TRANS=.FALSE., + L_GATHERV_WRGP=.FALSE., + NCOMBFLEN=1800000, + NSTRIN=$NSTRIN, + NSTROUT=$NSTROUT, + / + &NAMPARAR + CMF_UPDRAFT='RAHA' + CMF_CLOUD='BIGA' + CFRAC_ICE_ADJUST='S', + CFRAC_ICE_SHALLOW_MF='S', + CMICRO='ICE3', + CSEDIM='STAT', + CSNOWRIMING='M90', + LCONVHG=.TRUE., + LCRFLIMIT=.TRUE., + LCRIAUTI=.TRUE., + LEVLIMIT=.TRUE., + LFEEDBACKT=.TRUE., + LFPREC3D=.TRUE., + LNULLWETG=.TRUE., + LNULLWETH=.TRUE., + LOLSMC=.TRUE., + LOSEDIC=.TRUE., + LOSIGMAS=.TRUE., + LOSUBG_COND=.TRUE., + LSEDIM_AFTER=.FALSE., + LWETGPOST=.TRUE., + LWETHPOST=.TRUE., + NMAXITER_MICRO=1, + NPRINTFR=10000, + NPTP=1, + RCRIAUTC=0.001, + RCRIAUTI=0.0002, + RT0CRIAUTI=-5., + VSIGQSAT=0.02, + XFRACM90=0.1, + XMRSTEP=0.00005, + XSPLIT_MAXCFL=0.8, + XTSTEP_TS=0., + / + &NAMPHMSE + LPGDFWR=.FALSE., + / + &NAMPHY + LAERODES=.TRUE., + LAEROLAN=.TRUE., + LAEROSEA=.TRUE., + LAEROSOO=.TRUE., + LEDR=.TRUE., + LMPHYS=.TRUE., + LO3ABC=.TRUE., + LRAYFM=.TRUE., + / + &NAMPHY0 + ALMAV=300., + BEDIFV=0.05, + ECMNP=3000., + GCCSV=0., + GCVADS=0.8, + GCVALFA=0.000045, + GCVBETA=0.2, + GCVMLT=0.00016, + GCVNU=0.000025, + GCVPSI=1., + GCVPSIE=1., + GDDEVA=0.25, + GDDSDE=0.5, + GWDCD=6., + HUCOE=0.5, + HUTIL=1.8, + QSSC=400., + QSSUSC=0.75, + QSSUSS=0.4, + QSSUSV=250., + QSUSXC=0.0002, + QSUSXS=0.0003, + QXRAL=130., + QXRDEL=0.49, + QXRHX=0.99, + QXRR=0.25, + RCVEVAP=0.25, + REFLKUO=5000., + REVGSL=15., + SCO=-20., + TDDGP=0.8, + TENTR=0.0000025, + TENTRX=0.00008, + TUDGP=0.8, + UHDIFV=0.0008, + USURIC=0.175, + USURICE=0.5, + USURICL=1., + USURID=0.1, + USURIDE=0.25, + VZ0CM=0.00015, + XMAXLM=5000., + XMINLM=10., + / + &NAMPHY1 + ALBMIN=0.65, + ALCRIN=0.75, + GCGEL=0.00003, + GCGELS=0.00005, + GNEIMX=1.8, + GNEIMXS=1.8, + RCTVEG(3)=0.000012, + RCTVEG(4)=0.00001, + / + &NAMPHY2 + FACRAF=3.8, + HTKERAF=20., + LMULAF=.TRUE., + LRAFTKE=.TRUE., + LRAFTUR=.TRUE., + XDAMP=1., + XMULAF=-1.85, + / + &NAMPHY3 + / + &NAMPHYDS + / + &NAMPONG + / + &NAMPPC + / + &NAMPPVI + / + &NAMPRE + / + &NAMRAD15 + / + &NAMRADCMEM + / + &NAMRCF + / + &NAMRCOEF + / + &NAMRES + / + &NAMRGRI + / + &NAMRINC + / + &NAMRIP + TSTEP=50., + CSTOP='h2', + / + &NAMRIP0 + / + &NAMRLX + / + &NAMSATS + LPARTIAL_COEF_FILES=.TRUE., + / + &NAMSCC + / + &NAMSCEN + / + &NAMSCM + / + &NAMSEKF + / + &NAMSENS + / + &NAMSFXCMP + CFLDNAME(1)='????????????????', + NBBITS(1)=24, + / + &NAMSIMPHL + / + &NAMSPNG + / + &NAMSPSDT + / + &NAMSTA + / + &NAMSTOPH + / + &NAMSWE + / + &NAMTESTVAR + / + &NAMTHLIM + / + &NAMTOPH + ETCVIM=5000., + ETNEBU=5000., + ETPLUI=5000., + XDRMTK=6.0D-7, + XDRMTP=800., + XDRMUK=3.0D-7, + XDRMUP=800., + / + &NAMTRAJP + / + &NAMTRANS + / + &NAMTRANS0 + / + &NAMTS + / + &NAMVAR + / + &NAMVARBC + / + &NAMVARBC_AIREP + / + &NAMVARBC_ALLSKY + / + &NAMVARBC_GBRAD + / + &NAMVARBC_RAD + / + &NAMVARBC_SFCOBS + / + &NAMVARBC_TCWV + / + &NAMVARBC_TO3 + / + &NAMVAREPS + / + &NAMVDF + / + &NAMVDOZ + / + &NAMVOLCANO + / + &NAMVRTL + / + &NAMVV0 + / + &NAMVV1 + / + &NAMVWRK + / + &NAMWAVELETJB + / + &NAMXFU + LXCLP=.TRUE., + LXCLS=.TRUE., + LXFU=.TRUE., + LXNEBPA=.TRUE., + LXNEBTT=.TRUE., + LXNUVCLS=.TRUE., + LXPLS=.TRUE., + LXPLSG=.TRUE., + LXQCLS=.TRUE., + LXR=.TRUE., + LXSOIL=.FALSE., + LXTHW=.TRUE., + LXTRT=.TRUE., + LXTTCLS=.TRUE., + LXXDIAGH=.TRUE., + LXXGST=.TRUE., + NFRRAZ=72, + NRAZTS(0)=0, + / + &NAM_CANAPE + / + &NAM_DISTRIBUTED_VECTORS + / + &NAPHLC + / + &NEMCT0 + / + &NEMDIM + / + &NEMDYN + / + &NEMELBC0A + LESPCPL=.TRUE., + NBICNHX=2, + NBICOP=2, + NBICOT=2, + NBICOU=2, + NBICPD=2, + NBICVD=2, + NECRIPL=1, + / + &NEMELBC0B + NEFRSPCPL=1, + NEK0=20, + NEK1=30, + NEN1=4, + NEN2=8, + SPNUDDIV=0.01, + SPNUDQ=0., + SPNUDT=0.01, + SPNUDVOR=0.01, + TEFRCL=3600., + / + &NEMFPEZO + / + &NEMGEO + / + &NEMJK + / + &NEMVAR + / + &NEMWAVELET + / + &NAETLDIAG + / + &NAMMETHOX + / + &NAMSPP + / + &NAMACV + / + &NAMFPOBJ + / + &NAMNORGWD + / + &NAMTRAJ + / + &NAMSATSIM + / + &NAMDVISI + / + &NAMNUDGLH + / + &NAMPERTPAR + / +FIN +/bin/cat fort.4 + +/bin/cat <<FIN > EXSEG1.nam + &NAM_DIAG_ISBAN + LPGD=.TRUE., + LSURF_MISC_BUDGET=.TRUE., + / + &NAM_DIAG_SURFN + LCOEF=.TRUE., + LSURF_BUDGET=.TRUE., + N2M=2, + / + &NAM_ISBAN + CSCOND='NP89', + / + &NAM_REPROD_OPER + LREPROD_OPER=.TRUE., + / + &NAM_SEAFLUXN + CSEA_FLUX='ECUME', + LPWG=.FALSE., + LPRECIP=.FALSE., + LPWEBB=.FALSE., + / + &NAM_SSON + CROUGH='Z01D', + XFRACZ0=5., + LDSV=.FALSE., + / + &NAM_SURF_ATM + XRIMAX=0.2, + LNOSOF=.TRUE., + / + &NAM_SURF_CSTS + XZ0SN=0.01, + XZ0HSN=0.001, + XEMISSN=0.99, + / + &NAM_WRITE_DIAG_SURFN + LPROVAR_TO_DIAG=.FALSE., + LSELECT=.TRUE., +CSELECT(1)='T2M','HU2M','XX','YY','DX','DY','SST','Z0SEA','TS_WATER','Z0WATER','TG1','TG2','TG3','WG1','WG2','WG3','WGI1','WGI2','WGI3','WR','WSN_VEG1','RSN_VEG1','ASN_VEG','TSRAD_NAT','RESA','TROOF1','TROOF2','TROOF3','TROOF4','TROOF5','WS_ROOF','TROAD1','TROAD2','TROAD3','TROAD4','TROAD5','WS_ROAD','TWALL1','TWALL2','TWALL3','TWALL4','TWALL5','TI_BLD','T_WIN1','TI_ROAD','WSN_RF1','RSN_RF1','TSN_RF1','ASN_RF','WSN_RD1','RSN_RD1','TSN_RD1','ASN_RD','TCANYON','QCANYON','STORAGE_TYPE','MASDEV','VERSION','BUG','DIM_FULL','DTCUR','LAT0','LON0','RPK','BETA','LATORI','LONORI','IMAX','JMAX','RW_PRECIP','BUDC','SEA_OCEAN','SEA_SBL','WAT_SBL','SN_VEG_N','SN_VEG','LSNOW_FRAC_T','GLACIER','TEMPARP','NLITTER','NLITTLEVS','NSOILCARB','ISBA_CANOPY','SN_RF_N','SN_RF','SN_RD_N','SN_RD','SN_RD_TYP','SN_RF_TYP','TEB_CANOPY','STORAGETYPE','CARTESIAN','GRID_TYPE','SN_VEG_TYP','RESPSL','ROAD_DIR','WALL_OPT','LAI','VEG','RSMIN','DG2','_FBUF_SIZE','_FBUF_DIM1','_FBUF_DIM2','_FBUF_NAME','_FBUF_TYPE','_FBUF_MASK','LCPL_GCM','HANDLE_SIC','SSS', + / + &NAM_WRITE_SURF_ATM + LNOWRITE_TEXFILE=.TRUE., + / +FIN +/bin/cat EXSEG1.nam + +# ***************************************** +# * Acquisition du fichier de demarrage * +# ***************************************** + +echo +for hh in 0 1 2 3 4 5 6 ; do + N=`expr $hh / 1 ` + set -x + ln -s $rekchemin/data/aro/$case/ELSCFFCSTALBC000${N}_l15 ELSCF${CNMEXP}ALBC00${N} + set +x +done +set -x +ln -s $rekchemin/data/aro/$case/ICMSHFCSTINIT_l15 ICMSH${CNMEXP}INIT +ln -s $rekchemin/data/aro/$case/ICMSHFCSTINIT.sfx ICMSH${CNMEXP}INIT.sfx +ln -s $rekchemin/data/surfex/v8/ecoclimapI_covers_param.bin . +ln -s $rekchemin/data/surfex/v8/ecoclimapII_eu_covers_param.bin . +ln -s $rekchemin/data/surfex/v8/ecoclimapII_af_covers_param.bin . +ln -s $rekchemin/data/aro/$case/Const.Clim Const.Clim +ln -s $rekchemin/data/aro/$case/Const.Clim.sfx Const.Clim.sfx +ln -s $rekchemin/data/aro/$case/const.clim.FRANGP0025 const.clim.FRANGP0025 +ln -s $rekchemin/data/rttov12/rtcoef_meteosat_9_seviri.dat . +ln -s $rekchemin/data/rttov12/rtcoef_meteosat_10_seviri.dat . +ln -s $rekchemin/data/rttov12/sccldcoef_meteosat_9_seviri.dat . +set +x +tar xfz $rekchemin/data/rtm/radiation_params.47r1_light.tgz + +# *************** +# * Chargement * +# *************** + +echo +set -x +\ln -s $LOADIR/MASTERODB MASTER +set +x +if ldd MASTER | grep openmpi > /dev/null; then + #On est sur PC + MPILIB=$(ldd MASTER | grep openmpi | tail -1 | awk '{print $3}' | awk -F "/" '{print $(NF-2)}') + MPIRUN="$(echo $(dirname $(dirname $(ldd MASTER | grep openmpi| tail -1 | awk '{print $3}'))))/bin/orterun --oversubscribe -np $NPROC" + GRIB_API=$(dirname $(dirname $(ldd MASTER | grep grib_api | head -1 | awk '{print $3}') 2>/dev/null) 2>/dev/null) + ECCODES=$(dirname $(dirname $(ldd MASTER | grep eccodes | head -1 | awk '{print $3}') 2>/dev/null) 2>/dev/null) + export GRIB_SAMPLES_PATH=$GRIB_API/share/grib_api/ifs_samples/grib1 + export GRIB_DEFINITION_PATH=$GRIB_API/share/grib_api/definitions + export ECCODES_SAMPLES_PATH=$ECCODES/share/eccodes/ifs_samples/grib1 + export ECCODES_DEFINITION_PATH=$rekchemin/data/eccodes_extras_definitions:$ECCODES/share/eccodes/definitions +else + #On est sur HPC + #MPIRUN="$(echo $(dirname $(dirname $(ldd MASTER | grep libmpi| tail -1 | awk '{print $3}'))))/bin/mpirun -wdir $PWD" + NNODES=$SLURM_JOB_NUM_NODES + MPITASKS_PER_NODE=$((SLURM_NTASKS/SLURM_JOB_NUM_NODES)) + MPI_TASKS=$SLURM_NTASKS + MPIRUN="/opt/softs/mpiauto/mpiauto -np $MPI_TASKS -nnp $MPITASKS_PER_NODE --" + export OMP_STACKSIZE=4G + export KMP_STACKSIZE=4G + export KMP_MONITOR_STACKSIZE=4G + export DR_HOOK=1 + export DR_HOOK_IGNORE_SIGNALS=-1 + export DR_HOOK_SILENT=1 + export DR_HOOK_SHOW_PROCESS_OPTIONS=0 + export MPL_MBX_SIZE=2048000000 + export EC_PROFILE_HEAP=0 + export EC_PROFILE_MEM=0 + export EC_MPI_ATEXIT=0 + export EC_MEMINFO=0 + export OPENBLAS_NUM_THREADS=1 + export MKL_CBWR="AUTO,STRICT" + export MKL_NUM_THREADS=1 + export MKL_DEBUG_CPU_TYPE=5 + export ECCODES_SAMPLES_PATH=/opt/softs/libraries/ICC_2018.5.274/eccodes-2.17.0/share/eccodes/ifs_samples/grib1 + export ECCODES_DEFINITION_PATH=/opt/softs/libraries/ICC_2018.5.274/eccodes-2.17.0/share/eccodes/definitions +fi +echo $MPIRUN +set +x +if [ ! -f MASTER ] ; then echo No executable MASTER;exit 1;fi + +# *************** +# * Execution * +# *************** + +echo +echo OMP_NUM_THREADS=$OMP_NUM_THREADS +set -x +ulimit -s unlimited +$MPIRUN $PWD/MASTER >lola +set +x +echo +##if [ -f lola ] ; then +## echo;echo Standard output :;echo;cat lola +##fi +##if [ -f stderr.* ] ; then +## for file in stderr.* ; do +## echo;echo $file :;cat $file +## done +##fi +##if [ -f stdout.* ] ; then +##echo;echo stdout :;echo;cat stdout.* +##fi +##if [ -a NODE.001_01 ] ; then +## for file in NODE* ; do +## echo;echo Listing $file;echo +## cat $file +## done +##fi +##if [ $(find . -name "drhook.prof.*" | wc -l) -ne 0 ] ; then +### Top 25 for each MPI task : +## for file in drhook.prof.* ; do +## echo;echo $file :;head -38 $file +## done +##fi +#cat drhook.prof.* | perl -w $HOME/bin/drhook_merge_walltime_max.pl + +# ******************* +# * Sauvegardes * +# ******************* + +ls +#if [ -f PFFPOS000+0000 ] ; then +# cp PFFPOS000+0000 $WAIT_QUEUE/PFFPOS000+0000.$PBS_JOBID +#fi +cp lola NODE.001_01 ICMSHFPOS+00* DHFDLFPOS+00* $OUTPUTDIR/ +/bin/rm fort.4 EXSEG1.nam lola ICMSHFPOS+0000* PFFPOSFRANGP0025+0000* ICMSHFPOS+0001* +/bin/rm PFFPOSFRANGP0025+0001* ICMSHFPOS+0002* ECHIS PFFPOSFRANGP0025+0002* DHFDLFPOS+00* +/bin/rm ECHFP NODE.001_01 ifs.stat $(tar tfz $rekchemin/data/rtm/radiation_params.47r1_light.tgz) + +# **************** +# * Epilogue * +# **************** + +ls -ltr | grep -v "\->" +echo Wait_queue : +ls -ltr $TMPWAIT +cd $TMPDIR +\rm -rf rundir.$$ +\rm -rf wait_queue.$$ +date +set +x diff --git a/tools/conf_tests/small_3D_alt7/aro48t3.sh b/tools/conf_tests/small_3D_alt7/aro48t3.sh new file mode 100755 index 0000000000000000000000000000000000000000..b16a272001a2d2ee87613977c6cb648eb5ee2ba3 --- /dev/null +++ b/tools/conf_tests/small_3D_alt7/aro48t3.sh @@ -0,0 +1,1209 @@ +#!/bin/bash +#SBATCH -n 4 +#SBATCH --mem=20000 +#SBATCH --export=MYLIB,HOME,HOMEPACK,TMPDIR,OUTPUTDIR,TESTDIR +#SBATCH -t 00:10:00 +#SBATCH -N 1 +#SBATCH -p normal256 + +#The MYLIB variable must contain the gmkpack pack name +#The TESTDIR variable must contain the test directory +#Results will be stored in the local directory + +#Other environment varaibles that can be set: +#OUTPUTDIR + +date + +OUTPUTDIR=${OUTPUTDIR:-$PWD} +case=riette2 +#rekchemin="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" #Resources for the run must be in the same directory as this script +rekchemin=$TESTDIR + +NPROC=4 +NSTRIN=$NPROC +NSTROUT=1 +NPRTRW_NPRTRV="" +NPRTRW_NPRTRV=" NPRTRW=$NPROC, + NPRTRV=1," +export OMP_NUM_THREADS=1 + +#MYLIB=48t1_main.01%jpdup + +export DR_HOOK=1 +#export DR_HOOK_IGNORE_SIGNALS=-1 +export DR_HOOK_NOT_MPI=1 +export DR_HOOK_SILENT=1 +export DR_HOOK_OPT= + +export EC_PROFILE_HEAP=0 +export EC_PROFILE_MEM=0 +export EC_MPI_ATEXIT=0 +export DR_HOOK_SHOW_PROCESS_OPTIONS=0 +export EC_MEMINFO=0 +export TVSEARCHPATH=$SOURCE + +HOMEPACK=${HOMEPACK:=$HOME/pack} +SOURCE=$HOMEPACK/$MYLIB/src/local +LOADIR=$HOMEPACK/$MYLIB/bin + +TMPDIR=${TMPDIR:=$HOME/tmp} +TMPLOC=$TMPDIR/rundir.$$ +TMPWAIT=$TMPDIR/wait_queue.$$ +mkdir $TMPWAIT +mkdir $TMPLOC +cd $TMPLOC + +export RTTOV_COEFDIR=$PWD + +# ************************** +# * Saisie des NAMELISTS * +# ************************** + +CNMEXP='FPOS' + +echo +/bin/cat <<FIN > fort.4 + &NACIETEO + / + &NACOBS + / + &NACTAN + / + &NACTEX + / + &NACVEG + / + &NADOCK + / + &NAEAEM7 + / + &NAEAER + / + &NAECOAPHY + / + &NAEPHLI + / + &NAEPHY + / + &NAERAD + LRRTM=.TRUE., + LSRTM=.FALSE., + NAER=1, + NICEOPT=3, + NLIQOPT=3, + NOVLP=6, + NOZOCL=2, + NRADFR=18, + NRADIP=3, + NRADLP=2, + NSW=6, + RLWINHF=1, + RRE2DE=0.64952, + RSWINHF=1, + / + &NAERCLI + / + &NAEVOL + / + &NAIMPO + / + &NALORI + / + &NAMAFN + GFP_CLSG%CLNAME='SURFACCGRAUPEL', + GFP_CLSP%CLNAME='SURFACCPLUIE', + GFP_CLSS%CLNAME='SURFACCNEIGE', + GFP_SFIS%IBITS=16, + GFP_ST%CLNAME='SURFTEMPERATURE', + GFP_ST%IANO=0, + GFP_ST%IBITS=12, + GFP_X10U%CLNAME='CLSVENT.ZONAL', + GFP_X10U%IANO=0, + GFP_X10U%IBITS=12, + GFP_X10V%CLNAME='CLSVENT.MERIDIEN', + GFP_X10V%IANO=0, + GFP_X10V%IBITS=12, + GFP_X2RH%CLNAME='CLSHUMI.RELATIVE', + GFP_X2RH%IANO=0, + GFP_X2RH%IBITS=12, + GFP_X2T%CLNAME='CLSTEMPERATURE', + GFP_X2T%IANO=1, + GFP_XCCC%IBITS=8, + GFP_XHCC%IBITS=8, + GFP_XLCC%IBITS=8, + GFP_XLSG%CLNAME='SURFINSGRAUPEL', + GFP_XLSP%CLNAME='SURFINSPLUIE', + GFP_XLSS%CLNAME='SURFINSNEIGE', + GFP_XMCC%IBITS=8, + GFP_XN2T%IBITS=12, + GFP_XTCC%IBITS=8, + GFP_XUGST%CLNAME='CLSU.RAF60M.XFU', + GFP_XUGST%IANO=0, + GFP_XUGST%IBITS=12, + GFP_XVGST%CLNAME='CLSV.RAF60M.XFU', + GFP_XVGST%IANO=0, + GFP_XVGST%IBITS=12, + GFP_XX2T%IBITS=12, + GFP_XXDIAGH%IBITS=12, + TFP_ABS%ZFK=32., + TFP_CLF%IBITS=6, + TFP_EDR%CLNAME='EDR', + TFP_EDR%IBITS=16, + TFP_EDR%IGRIB=136, + TFP_GR%IBITS=12, + TFP_HL%IBITS=12, + TFP_HTB%IBITS=16, + TFP_HTB%LLGP=.TRUE., + TFP_HU%IBITS=12, + TFP_MSAT9C2%IBITS=12, + TFP_MSAT9C6%IBITS=12, + TFP_MSLNH%IBITS=12, + TFP_PV%ZFK=64., + TFP_RCLS%IBITS=12, + TFP_RR%IBITS=12, + TFP_SN%IBITS=12, + TFP_T%IBITS=12, + TFP_TCLS%IBITS=12, + TFP_TH%IBITS=12, + TFP_THPW%IBITS=12, + TFP_THV%IBITS=12, + TFP_TN%IBITS=12, + TFP_TWV%IBITS=12, + TFP_TX%IBITS=12, + TFP_U%IBITS=12, + TFP_V%IBITS=12, + TFP_VOR%ZFK=32., + TFP_VV%ZFK=32., + / + &NAMARG + CNMEXP='${CNMEXP}', + LECMWF=.FALSE., + LELAM=.TRUE., + LSLAG=.TRUE., + NCONF=1, + NSUPERSEDE=1, + / + &NAMARPHY + LKFBCONV=.FALSE., + LKFBD=.FALSE., + LKFBS=.FALSE., + LMFSHAL=.TRUE., + LMICRO=.TRUE., + LMPA=.TRUE., + LMSE=.TRUE., + LTURB=.TRUE., + / + &NAMCA + / + &NAMCAPE + / + &NAMCFU + LCUMFU=.TRUE., + LFPLS=.TRUE., + LFPLSG=.TRUE., + LFR=.TRUE., + LFRRC=.TRUE., + LFSF=.TRUE., + LNEBPAR=.TRUE., + LNEBTT=.TRUE., + LRAYD=.TRUE., + LRAYS=.TRUE., + / + &NAMCHEM + / + &NAMCHET + / + &NAMCHK + / + &NAMCLA + / + &NAMCLDP + / + &NAMCLI + / + &NAMCLOP15 + / + &NAMCLTC + / + &NAMCOK + / + &NAMCOM + / + &NAMCOSJO + / + &NAMCOUPLO4 + / + &NAMCT0 + CFPNCF='ECHFP', + CNPPATH=' ', + LAROME=.TRUE., + LNHEE=.TRUE., + LSCREEN_OPENMP=.FALSE., + LSPRT=.TRUE., + LTWOTL=.TRUE., + NFPOS=1, + NFRSDI=18, + NSDITS(0)=0, + NFRHIS=72, + NHISTS(0)=0, + NFRPOS=72, + NPOSTS(0)=0, + NFRSFXHIS=72, + NSFXHISTS(0)=0, + NFRDHFD=72, + NDHFDTS(0)=0, + / + &NAMCT1 + LRFILAF=.FALSE., + N1HIS=1, + N1POS=1, + N1RES=0, + N1SDI=1, + N1SFXHIS=1, + N1GDI=0, + / + &NAMCUMF + / + &NAMCUMFS + / + &NAMCVER + / + &NAMCVMNH + / + &NAMDDH + LDDH_OMP=.TRUE., + LHDDOP=.TRUE., + LHDHKS=.TRUE., + LHDEFD=.TRUE., + LFLEXDIA=.TRUE., + BDEDDH(1,1)=3, + BDEDDH(2,1)=1, + BDEDDH(3,1)=358.8 + BDEDDH(4,1)=45.1 + BDEDDH(5,1)=360.3 + BDEDDH(6,1)=44.5 + / + &NAMDFI + / + &NAMDIM + NPROMA=-50, + / + &NAMDIMO + / + &NAMDIM_TRAJ + / + &NAMDPHY + / + &NAMDPRECIPS + / + &NAMDYN + LADVF=.TRUE., + LQMPD=.FALSE., + LQMT=.FALSE., + LQMVD=.FALSE., + LRHDI_LASTITERPC=.TRUE., + NITMP=4, + NSITER=1, + NSPDLAG=3, + NSVDLAG=3, + NTLAG=3, + NVLAG=3, + NWLAG=3, + RDAMPDIV=20., + RDAMPPD=20., + RDAMPQ=0., + RDAMPT=0., + RDAMPVD=20., + RDAMPVOR=20., + REPS1=0., + REPS2=0., + REPSM1=0., + REPSM2=0., + REPSP1=0., + SDRED=1., + SIPR=90000., + SITR=350., + SITRA=100., + SLHDA0=0.25, + SLHDD00=0.000065, + VESL=0.05, + XIDT=0., + ZSLHDP1=1.7, + ZSLHDP3=0.6, + / + &NAMDYNA + LCOMADH=.TRUE., + LCOMADV=.FALSE., + LCOMAD_GFL=.TRUE., + LCOMAD_SP=.TRUE., + LCOMAD_SPD=.TRUE., + LCOMAD_SVD=.TRUE., + LCOMAD_T=.TRUE., + LCOMAD_W=.TRUE., + LGWADV=.TRUE., + LNESC=.TRUE., + LPC_CHEAP=.TRUE., + LPC_FULL=.TRUE., + LRDBBC=.FALSE., + LSETTLS=.FALSE., + LSETTLST=.TRUE., + LSLHD_GFL=.TRUE., + LSLHD_OLD=.FALSE., + LSLHD_SPD=.FALSE., + LSLHD_SVD=.FALSE., + LSLHD_T=.FALSE., + LSLHD_W=.FALSE., + ND4SYS=2, + NDLNPR=1, + NPDVAR=2, + NVDVAR=4, + SLHDEPSH=0.08, + SLHDKMAX=6, + / + &NAMDYNCORE + / + &NAMEMIS_CONF + / + &NAMENKF + / + &NAMFA + CMODEL='OUTPUTID', + LEXTERN=.TRUE., + LSUPPDATE=.FALSE., + NBITCS=-1, + NBITPG=-1, + NSTRON=-1, + / + &NAMFAINIT + JPXTRO=2000, + / + &NAMFPC + CFP2DF(1)='SURFPRESSION', + CFP2DF(2)='MSL_NHPRESSURE', + CFP2DF(3)='SURFTOT.WAT.VAPO', + CFP2DF(4)='SURFISOTPW0.MALT', + CFP2DF(5)='SURFCAPE.POS.F00', + CFP2DF(6)='C002_METEOSAT_09_SEVIRI.POS', + CFP2DF(7)='C006_METEOSAT_09_SEVIRI.POS', + CFP2DF(8)='SURFREFLECT.MAX', + CFP2DF(9)='SURFISOTPW1.MALT', + CFP2DF(10)='SURFISOTPW2.MALT', + CFP3DF(1)='GEOPOTENTIEL', + CFP3DF(2)='TEMPERATURE', + CFP3DF(3)='VENT_ZONAL', + CFP3DF(4)='VENT_MERIDIEN', + CFP3DF(5)='HUMI_RELATIVE', + CFP3DF(6)='THETA_PRIM_W', + CFP3DF(7)='PRESSURE', + CFP3DF(8)='ABS_VORTICITY', + CFP3DF(9)='VITESSE_VERTICALE', + CFP3DF(10)='TEMPE_POTENT', + CFP3DF(11)='POT_VORTICIT', + CFP3DF(12)='SIM_REFLECTI', + CFP3DF(13)='RAIN', + CFP3DF(14)='SNOW', + CFP3DF(15)='GRAUPEL', + CFP3DF(16)='ICE_CRYSTAL', + CFP3DF(17)='CLOUD_WATER', + CFP3DF(18)='VERT.VELOCIT', + CFP3DF(19)='DIVERGENCE', + CFP3DF(20)='THETA_VIRTUA', + CFP3DF(21)='TKE', + CFP3DF(22)='CLOUD_FRACTI', + CFP3DF(23)='ISOT_ALTIT', + CFP3DF(24)='EDR', + CFPCFU(1)='SURFTENS.TOTA.ZO', + CFPCFU(2)='SURFTENS.TOTA.ME', + CFPCFU(3)='SURFACCPLUIE', + CFPCFU(4)='SURFACCNEIGE', + CFPCFU(5)='SURFACCGRAUPEL', + CFPCFU(6)='SOMMFLU.RAY.SOLA', + CFPCFU(7)='SURFFLU.RAY.SOLA', + CFPCFU(8)='SOMMFLU.RAY.THER', + CFPCFU(9)='SURFFLU.RAY.THER', + CFPCFU(10)='SURFFLU.LAT.MTOT', + CFPCFU(11)='SURFFLU.MTOTA.NE', + CFPCFU(12)='SURFFLU.CHA.SENS', + CFPCFU(13)='SURFRAYT SOLA DE', + CFPCFU(14)='SURFRAYT THER DE', + CFPCFU(15)='SURFRAYT SOL CL', + CFPCFU(16)='SURFRAYT THER CL', + CFPCFU(17)='SURFRAYT DIR SUR', + CFPDOM(1)='FRANGP0025', + CFPFMT='LALON', + CFPPHY(1)='SURFTEMPERATURE', + CFPPHY(2)='INTSURFGEOPOTENT', + CFPPHY(3)='SURFRESERV.NEIGE', + CFPXFU(1)='CLSTEMPERATURE', + CFPXFU(2)='CLSHUMI.RELATIVE', + CFPXFU(3)='CLSVENT.ZONAL', + CFPXFU(4)='CLSVENT.MERIDIEN', + CFPXFU(5)='SURFNEBUL.TOTALE', + CFPXFU(6)='SURFNEBUL.HAUTE', + CFPXFU(7)='SURFNEBUL.MOYENN', + CFPXFU(8)='SURFNEBUL.BASSE', + CFPXFU(9)='CLSMAXI.TEMPERAT', + CFPXFU(10)='CLSMINI.TEMPERAT', + CFPXFU(11)='CLPMHAUT.MOD.XFU', + CFPXFU(12)='SURFDIAGHAIL', + LCRITSNOWTEMP=.FALSE., + LFPCAPEX=.TRUE., + LFPMOIS=.TRUE., + LFPPACKING=.FALSE., + LWIDER_DOM=.TRUE., + L_READ_MODEL_DATE=.TRUE., + NFITI=1, + NFITV=1, + NFPCAPE=5, + NFPCLI=1, + NFPGRIB=1, + NFPINPHY=4, + NITERPV=8, + RENTRA=0.0001, + RFP3H(1)=10., + RFP3H(2)=20., + RFP3H(3)=35., + RFP3H(4)=50., + RFP3H(5)=75., + RFP3H(6)=100., + RFP3H(7)=150., + RFP3H(8)=200., + RFP3H(9)=250., + RFP3H(10)=375., + RFP3H(11)=500., + RFP3H(12)=625., + RFP3H(13)=750., + RFP3H(14)=875., + RFP3H(15)=1000., + RFP3H(16)=1125., + RFP3H(17)=1250., + RFP3H(18)=1375., + RFP3H(19)=1500., + RFP3H(20)=1750., + RFP3H(21)=2000., + RFP3H(22)=2250., + RFP3H(23)=2500., + RFP3H(24)=2750., + RFP3H(25)=3000., + RFP3I(1)=-273.15, + RFP3I(2)=-263.15, + RFP3I(3)=-261.15, + RFP3I(4)=-253.15, + RFP3P(1)=10000., + RFP3P(2)=12500., + RFP3P(3)=15000., + RFP3P(4)=17500., + RFP3P(5)=20000., + RFP3P(6)=22500., + RFP3P(7)=25000., + RFP3P(8)=27500., + RFP3P(9)=30000., + RFP3P(10)=35000., + RFP3P(11)=40000., + RFP3P(12)=45000., + RFP3P(13)=50000., + RFP3P(14)=55000., + RFP3P(15)=60000., + RFP3P(16)=65000., + RFP3P(17)=70000., + RFP3P(18)=75000., + RFP3P(19)=80000., + RFP3P(20)=85000., + RFP3P(21)=90000., + RFP3P(22)=92500., + RFP3P(23)=95000., + RFP3P(24)=100000., + RFP3PV(1)=0.0000015, + RFP3PV(2)=0.000002, + RFPCD2=5., + RFPCSAB=50., + RFPVCAP=7000., + / + &NAMFPD + NLAT(1)=41, + NLON(1)=41, + RLONC(1)=-0.71, + RLATC(1)=44.8, + RDELX(1)=0.025, + RDELY(1)=0.025, + / + &NAMFPDY2 + / + &NAMFPDYF + / + &NAMFPDYH + / + &NAMFPDYI + / + &NAMFPDYP + / + &NAMFPDYS + / + &NAMFPDYT + / + &NAMFPDYV + / + &NAMFPF + NFMAX(1)=60, + NFMAX(2)=80, + / + &NAMFPG + NFPDISTRIB=1, + / + &NAMFPIOS + / + &NAMFPMOVE + / + &NAMFPPHY + / + &NAMFPSC2 + NFPROMA=-50, + / + &NAMFPSC2_DEP + NFPROMA_DEP=-50, + / + &NAMGEM + / + &NAMGFL + NGFL_EZDIAG=4, + YEZDIAG_NL(1)%CNAME='EZDIAG01', + YEZDIAG_NL(1)%LREQOUT=.FALSE., + YEZDIAG_NL(2)%CNAME='EZDIAG02', + YEZDIAG_NL(2)%LREQOUT=.FALSE., + YEZDIAG_NL(3)%CNAME='EZDIAG03', + YEZDIAG_NL(3)%LREQOUT=.FALSE., + YEZDIAG_NL(4)%CNAME='INPRRTOT3D', + YEZDIAG_NL(4)%LREQOUT=.TRUE., + YG_NL%LQM=.TRUE., + YG_NL%LSLHD=.TRUE., + YG_NL%NCOUPLING=-1, + YG_NL%NREQIN=1, + YG_NL%REFVALC=0., + YIRAD_NL%LGP=.TRUE., + YI_NL%LQM=.TRUE., + YI_NL%LSLHD=.TRUE., + YI_NL%NCOUPLING=-1, + YI_NL%NREQIN=1, + YI_NL%REFVALC=0., + YLRAD_NL%LGP=.TRUE., + YL_NL%LQM=.TRUE., + YL_NL%LSLHD=.TRUE., + YL_NL%NCOUPLING=-1, + YL_NL%NREQIN=1, + YL_NL%REFVALC=0., + YQ_NL%LCOMAD=.TRUE., + YQ_NL%LQM=.TRUE., + YQ_NL%LSLHD=.FALSE., + YQ_NL%NREQIN=1, + YR_NL%LQM=.TRUE., + YR_NL%LSLHD=.TRUE., + YR_NL%NCOUPLING=-1, + YR_NL%NREQIN=1, + YR_NL%REFVALC=0., + YS_NL%LQM=.TRUE., + YS_NL%LSLHD=.TRUE., + YS_NL%NCOUPLING=-1, + YS_NL%NREQIN=1, + YS_NL%REFVALC=0., + YTKE_NL%NCOUPLING=0, + YTKE_NL%NREQIN=1, + / + &NAMGRIB + / + &NAMGWD + / + &NAMGWDIAG + / + &NAMGWWMS + / + &NAMIAU + ALPHAIAU=0.5, + LIAU=.FALSE., + TSTARTIAU=1800, + TSTOPIAU=5340, + / + &NAMICE + / + &NAMINI + LDFI=.FALSE., + / + &NAMINTFLEX + / + &NAMIOMI + / + &NAMIOS + / + &NAMIO_SERV + NIO_SERV_BUF_MAXSIZE=20, + NIO_SERV_METHOD=2, + NMSG_LEVEL_CLIENT=0, + NMSG_LEVEL_SERVER=0, + NPROCESS_LEVEL=5, + NPROC_IO=0, + / + &NAMJBCODES + / + &NAMJFH + / + &NAMJG + / + &NAMLCZ + / + &NAMLSFORC + / + &NAMMARS + / + &NAMMCC + / + &NAMMCUF + / + &NAMMKODB + / + &NAMMODERR + / + &NAMMTS + / + &NAMMWAVE + / + &NAMNPROF + / + &NAMNUD + / + &NAMOBS + / + &NAMONEDVAR + / + &NAMOOPS + / + &NAMOPH + CFNHWF='ECHIS', + LINC=.TRUE., + NTIMEFMT=1, + / + &NAMOPTCMEM + / + &NAMPAR0 + LOPT_SCALAR=.TRUE., + NPRINTLEV=1, + LMPOFF=.FALSE., + MBX_SIZE=2048000000, + MP_TYPE=2, + NOUTPUT=1, + NPROC=$NPROC, +$NPRTRW_NPRTRV + / + &NAMPAR1 + LEQ_REGIONS=.FALSE., + LSLONDEM=.TRUE., + LSPLIT=.TRUE., + LSYNC_SLCOM=.FALSE., + LSYNC_TRANS=.FALSE., + L_GATHERV_WRGP=.FALSE., + NCOMBFLEN=1800000, + NSTRIN=$NSTRIN, + NSTROUT=$NSTROUT, + / + &NAMPARAR + CMF_UPDRAFT='EDKF' + CMF_CLOUD='STAT' + CFRAC_ICE_ADJUST='S', + CFRAC_ICE_SHALLOW_MF='S', + CMICRO='ICE3', + CSEDIM='STAT', + CSNOWRIMING='M90', + LCONVHG=.TRUE., + LCRFLIMIT=.TRUE., + LCRIAUTI=.TRUE., + LEVLIMIT=.TRUE., + LFEEDBACKT=.TRUE., + LFPREC3D=.TRUE., + LNULLWETG=.TRUE., + LNULLWETH=.TRUE., + LOLSMC=.TRUE., + LOSEDIC=.TRUE., + LOSIGMAS=.FALSE., + LOSUBG_COND=.TRUE., + LSEDIM_AFTER=.FALSE., + LWETGPOST=.TRUE., + LWETHPOST=.TRUE., + NMAXITER_MICRO=1, + NPRINTFR=10000, + NPTP=1, + RCRIAUTC=0.001, + RCRIAUTI=0.0002, + RT0CRIAUTI=-5., + VSIGQSAT=0.02, + XFRACM90=0.1, + XMRSTEP=0.00005, + XSPLIT_MAXCFL=0.8, + XTSTEP_TS=0., + / + &NAMPHMSE + LPGDFWR=.FALSE., + / + &NAMPHY + LAERODES=.TRUE., + LAEROLAN=.TRUE., + LAEROSEA=.TRUE., + LAEROSOO=.TRUE., + LEDR=.TRUE., + LMPHYS=.TRUE., + LO3ABC=.TRUE., + LRAYFM=.TRUE., + / + &NAMPHY0 + ALMAV=300., + BEDIFV=0.05, + ECMNP=3000., + GCCSV=0., + GCVADS=0.8, + GCVALFA=0.000045, + GCVBETA=0.2, + GCVMLT=0.00016, + GCVNU=0.000025, + GCVPSI=1., + GCVPSIE=1., + GDDEVA=0.25, + GDDSDE=0.5, + GWDCD=6., + HUCOE=0.5, + HUTIL=1.8, + QSSC=400., + QSSUSC=0.75, + QSSUSS=0.4, + QSSUSV=250., + QSUSXC=0.0002, + QSUSXS=0.0003, + QXRAL=130., + QXRDEL=0.49, + QXRHX=0.99, + QXRR=0.25, + RCVEVAP=0.25, + REFLKUO=5000., + REVGSL=15., + SCO=-20., + TDDGP=0.8, + TENTR=0.0000025, + TENTRX=0.00008, + TUDGP=0.8, + UHDIFV=0.0008, + USURIC=0.175, + USURICE=0.5, + USURICL=1., + USURID=0.1, + USURIDE=0.25, + VZ0CM=0.00015, + XMAXLM=5000., + XMINLM=10., + / + &NAMPHY1 + ALBMIN=0.65, + ALCRIN=0.75, + GCGEL=0.00003, + GCGELS=0.00005, + GNEIMX=1.8, + GNEIMXS=1.8, + RCTVEG(3)=0.000012, + RCTVEG(4)=0.00001, + / + &NAMPHY2 + FACRAF=3.8, + HTKERAF=20., + LMULAF=.TRUE., + LRAFTKE=.TRUE., + LRAFTUR=.TRUE., + XDAMP=1., + XMULAF=-1.85, + / + &NAMPHY3 + / + &NAMPHYDS + / + &NAMPONG + / + &NAMPPC + / + &NAMPPVI + / + &NAMPRE + / + &NAMRAD15 + / + &NAMRADCMEM + / + &NAMRCF + / + &NAMRCOEF + / + &NAMRES + / + &NAMRGRI + / + &NAMRINC + / + &NAMRIP + TSTEP=50., + CSTOP='h2', + / + &NAMRIP0 + / + &NAMRLX + / + &NAMSATS + LPARTIAL_COEF_FILES=.TRUE., + / + &NAMSCC + / + &NAMSCEN + / + &NAMSCM + / + &NAMSEKF + / + &NAMSENS + / + &NAMSFXCMP + CFLDNAME(1)='????????????????', + NBBITS(1)=24, + / + &NAMSIMPHL + / + &NAMSPNG + / + &NAMSPSDT + / + &NAMSTA + / + &NAMSTOPH + / + &NAMSWE + / + &NAMTESTVAR + / + &NAMTHLIM + / + &NAMTOPH + ETCVIM=5000., + ETNEBU=5000., + ETPLUI=5000., + XDRMTK=6.0D-7, + XDRMTP=800., + XDRMUK=3.0D-7, + XDRMUP=800., + / + &NAMTRAJP + / + &NAMTRANS + / + &NAMTRANS0 + / + &NAMTS + / + &NAMVAR + / + &NAMVARBC + / + &NAMVARBC_AIREP + / + &NAMVARBC_ALLSKY + / + &NAMVARBC_GBRAD + / + &NAMVARBC_RAD + / + &NAMVARBC_SFCOBS + / + &NAMVARBC_TCWV + / + &NAMVARBC_TO3 + / + &NAMVAREPS + / + &NAMVDF + / + &NAMVDOZ + / + &NAMVOLCANO + / + &NAMVRTL + / + &NAMVV0 + / + &NAMVV1 + / + &NAMVWRK + / + &NAMWAVELETJB + / + &NAMXFU + LXCLP=.TRUE., + LXCLS=.TRUE., + LXFU=.TRUE., + LXNEBPA=.TRUE., + LXNEBTT=.TRUE., + LXNUVCLS=.TRUE., + LXPLS=.TRUE., + LXPLSG=.TRUE., + LXQCLS=.TRUE., + LXR=.TRUE., + LXSOIL=.FALSE., + LXTHW=.TRUE., + LXTRT=.TRUE., + LXTTCLS=.TRUE., + LXXDIAGH=.TRUE., + LXXGST=.TRUE., + NFRRAZ=72, + NRAZTS(0)=0, + / + &NAM_CANAPE + / + &NAM_DISTRIBUTED_VECTORS + / + &NAPHLC + / + &NEMCT0 + / + &NEMDIM + / + &NEMDYN + / + &NEMELBC0A + LESPCPL=.TRUE., + NBICNHX=2, + NBICOP=2, + NBICOT=2, + NBICOU=2, + NBICPD=2, + NBICVD=2, + NECRIPL=1, + / + &NEMELBC0B + NEFRSPCPL=1, + NEK0=20, + NEK1=30, + NEN1=4, + NEN2=8, + SPNUDDIV=0.01, + SPNUDQ=0., + SPNUDT=0.01, + SPNUDVOR=0.01, + TEFRCL=3600., + / + &NEMFPEZO + / + &NEMGEO + / + &NEMJK + / + &NEMVAR + / + &NEMWAVELET + / + &NAETLDIAG + / + &NAMMETHOX + / + &NAMSPP + / + &NAMACV + / + &NAMFPOBJ + / + &NAMNORGWD + / + &NAMTRAJ + / + &NAMSATSIM + / + &NAMDVISI + / + &NAMNUDGLH + / + &NAMPERTPAR + / +FIN +/bin/cat fort.4 + +/bin/cat <<FIN > EXSEG1.nam + &NAM_DIAG_ISBAN + LPGD=.TRUE., + LSURF_MISC_BUDGET=.TRUE., + / + &NAM_DIAG_SURFN + LCOEF=.TRUE., + LSURF_BUDGET=.TRUE., + N2M=2, + / + &NAM_ISBAN + CSCOND='NP89', + / + &NAM_REPROD_OPER + LREPROD_OPER=.TRUE., + / + &NAM_SEAFLUXN + CSEA_FLUX='ECUME', + LPWG=.FALSE., + LPRECIP=.FALSE., + LPWEBB=.FALSE., + / + &NAM_SSON + CROUGH='Z01D', + XFRACZ0=5., + LDSV=.FALSE., + / + &NAM_SURF_ATM + XRIMAX=0.2, + LNOSOF=.TRUE., + / + &NAM_SURF_CSTS + XZ0SN=0.01, + XZ0HSN=0.001, + XEMISSN=0.99, + / + &NAM_WRITE_DIAG_SURFN + LPROVAR_TO_DIAG=.FALSE., + LSELECT=.TRUE., +CSELECT(1)='T2M','HU2M','XX','YY','DX','DY','SST','Z0SEA','TS_WATER','Z0WATER','TG1','TG2','TG3','WG1','WG2','WG3','WGI1','WGI2','WGI3','WR','WSN_VEG1','RSN_VEG1','ASN_VEG','TSRAD_NAT','RESA','TROOF1','TROOF2','TROOF3','TROOF4','TROOF5','WS_ROOF','TROAD1','TROAD2','TROAD3','TROAD4','TROAD5','WS_ROAD','TWALL1','TWALL2','TWALL3','TWALL4','TWALL5','TI_BLD','T_WIN1','TI_ROAD','WSN_RF1','RSN_RF1','TSN_RF1','ASN_RF','WSN_RD1','RSN_RD1','TSN_RD1','ASN_RD','TCANYON','QCANYON','STORAGE_TYPE','MASDEV','VERSION','BUG','DIM_FULL','DTCUR','LAT0','LON0','RPK','BETA','LATORI','LONORI','IMAX','JMAX','RW_PRECIP','BUDC','SEA_OCEAN','SEA_SBL','WAT_SBL','SN_VEG_N','SN_VEG','LSNOW_FRAC_T','GLACIER','TEMPARP','NLITTER','NLITTLEVS','NSOILCARB','ISBA_CANOPY','SN_RF_N','SN_RF','SN_RD_N','SN_RD','SN_RD_TYP','SN_RF_TYP','TEB_CANOPY','STORAGETYPE','CARTESIAN','GRID_TYPE','SN_VEG_TYP','RESPSL','ROAD_DIR','WALL_OPT','LAI','VEG','RSMIN','DG2','_FBUF_SIZE','_FBUF_DIM1','_FBUF_DIM2','_FBUF_NAME','_FBUF_TYPE','_FBUF_MASK','LCPL_GCM','HANDLE_SIC','SSS', + / + &NAM_WRITE_SURF_ATM + LNOWRITE_TEXFILE=.TRUE., + / +FIN +/bin/cat EXSEG1.nam + +# ***************************************** +# * Acquisition du fichier de demarrage * +# ***************************************** + +echo +for hh in 0 1 2 3 4 5 6 ; do + N=`expr $hh / 1 ` + set -x + ln -s $rekchemin/data/aro/$case/ELSCFFCSTALBC000${N}_l15 ELSCF${CNMEXP}ALBC00${N} + set +x +done +set -x +ln -s $rekchemin/data/aro/$case/ICMSHFCSTINIT_l15 ICMSH${CNMEXP}INIT +ln -s $rekchemin/data/aro/$case/ICMSHFCSTINIT.sfx ICMSH${CNMEXP}INIT.sfx +ln -s $rekchemin/data/surfex/v8/ecoclimapI_covers_param.bin . +ln -s $rekchemin/data/surfex/v8/ecoclimapII_eu_covers_param.bin . +ln -s $rekchemin/data/surfex/v8/ecoclimapII_af_covers_param.bin . +ln -s $rekchemin/data/aro/$case/Const.Clim Const.Clim +ln -s $rekchemin/data/aro/$case/Const.Clim.sfx Const.Clim.sfx +ln -s $rekchemin/data/aro/$case/const.clim.FRANGP0025 const.clim.FRANGP0025 +ln -s $rekchemin/data/rttov12/rtcoef_meteosat_9_seviri.dat . +ln -s $rekchemin/data/rttov12/rtcoef_meteosat_10_seviri.dat . +ln -s $rekchemin/data/rttov12/sccldcoef_meteosat_9_seviri.dat . +set +x +tar xfz $rekchemin/data/rtm/radiation_params.47r1_light.tgz + +# *************** +# * Chargement * +# *************** + +echo +set -x +\ln -s $LOADIR/MASTERODB MASTER +set +x +if ldd MASTER | grep openmpi > /dev/null; then + #On est sur PC + MPILIB=$(ldd MASTER | grep openmpi | tail -1 | awk '{print $3}' | awk -F "/" '{print $(NF-2)}') + MPIRUN="$(echo $(dirname $(dirname $(ldd MASTER | grep openmpi| tail -1 | awk '{print $3}'))))/bin/orterun --oversubscribe -np $NPROC" + GRIB_API=$(dirname $(dirname $(ldd MASTER | grep grib_api | head -1 | awk '{print $3}') 2>/dev/null) 2>/dev/null) + ECCODES=$(dirname $(dirname $(ldd MASTER | grep eccodes | head -1 | awk '{print $3}') 2>/dev/null) 2>/dev/null) + export GRIB_SAMPLES_PATH=$GRIB_API/share/grib_api/ifs_samples/grib1 + export GRIB_DEFINITION_PATH=$GRIB_API/share/grib_api/definitions + export ECCODES_SAMPLES_PATH=$ECCODES/share/eccodes/ifs_samples/grib1 + export ECCODES_DEFINITION_PATH=$rekchemin/data/eccodes_extras_definitions:$ECCODES/share/eccodes/definitions +else + #On est sur HPC + #MPIRUN="$(echo $(dirname $(dirname $(ldd MASTER | grep libmpi| tail -1 | awk '{print $3}'))))/bin/mpirun -wdir $PWD" + NNODES=$SLURM_JOB_NUM_NODES + MPITASKS_PER_NODE=$((SLURM_NTASKS/SLURM_JOB_NUM_NODES)) + MPI_TASKS=$SLURM_NTASKS + MPIRUN="/opt/softs/mpiauto/mpiauto -np $MPI_TASKS -nnp $MPITASKS_PER_NODE --" + export OMP_STACKSIZE=4G + export KMP_STACKSIZE=4G + export KMP_MONITOR_STACKSIZE=4G + export DR_HOOK=1 + export DR_HOOK_IGNORE_SIGNALS=-1 + export DR_HOOK_SILENT=1 + export DR_HOOK_SHOW_PROCESS_OPTIONS=0 + export MPL_MBX_SIZE=2048000000 + export EC_PROFILE_HEAP=0 + export EC_PROFILE_MEM=0 + export EC_MPI_ATEXIT=0 + export EC_MEMINFO=0 + export OPENBLAS_NUM_THREADS=1 + export MKL_CBWR="AUTO,STRICT" + export MKL_NUM_THREADS=1 + export MKL_DEBUG_CPU_TYPE=5 + export ECCODES_SAMPLES_PATH=/opt/softs/libraries/ICC_2018.5.274/eccodes-2.17.0/share/eccodes/ifs_samples/grib1 + export ECCODES_DEFINITION_PATH=/opt/softs/libraries/ICC_2018.5.274/eccodes-2.17.0/share/eccodes/definitions +fi +echo $MPIRUN +set +x +if [ ! -f MASTER ] ; then echo No executable MASTER;exit 1;fi + +# *************** +# * Execution * +# *************** + +echo +echo OMP_NUM_THREADS=$OMP_NUM_THREADS +set -x +ulimit -s unlimited +$MPIRUN $PWD/MASTER >lola +set +x +echo +##if [ -f lola ] ; then +## echo;echo Standard output :;echo;cat lola +##fi +##if [ -f stderr.* ] ; then +## for file in stderr.* ; do +## echo;echo $file :;cat $file +## done +##fi +##if [ -f stdout.* ] ; then +##echo;echo stdout :;echo;cat stdout.* +##fi +##if [ -a NODE.001_01 ] ; then +## for file in NODE* ; do +## echo;echo Listing $file;echo +## cat $file +## done +##fi +##if [ $(find . -name "drhook.prof.*" | wc -l) -ne 0 ] ; then +### Top 25 for each MPI task : +## for file in drhook.prof.* ; do +## echo;echo $file :;head -38 $file +## done +##fi +#cat drhook.prof.* | perl -w $HOME/bin/drhook_merge_walltime_max.pl + +# ******************* +# * Sauvegardes * +# ******************* + +ls +#if [ -f PFFPOS000+0000 ] ; then +# cp PFFPOS000+0000 $WAIT_QUEUE/PFFPOS000+0000.$PBS_JOBID +#fi +cp lola NODE.001_01 ICMSHFPOS+00* DHFDLFPOS+00* $OUTPUTDIR/ +/bin/rm fort.4 EXSEG1.nam lola ICMSHFPOS+0000* PFFPOSFRANGP0025+0000* ICMSHFPOS+0001* +/bin/rm PFFPOSFRANGP0025+0001* ICMSHFPOS+0002* ECHIS PFFPOSFRANGP0025+0002* DHFDLFPOS+00* +/bin/rm ECHFP NODE.001_01 ifs.stat $(tar tfz $rekchemin/data/rtm/radiation_params.47r1_light.tgz) + +# **************** +# * Epilogue * +# **************** + +ls -ltr | grep -v "\->" +echo Wait_queue : +ls -ltr $TMPWAIT +cd $TMPDIR +\rm -rf rundir.$$ +\rm -rf wait_queue.$$ +date +set +x diff --git a/tools/conf_tests/small_3D_alt8/aro48t3.sh b/tools/conf_tests/small_3D_alt8/aro48t3.sh new file mode 100755 index 0000000000000000000000000000000000000000..c0b50410dbfb71c2982e2a467283b7b17620368d --- /dev/null +++ b/tools/conf_tests/small_3D_alt8/aro48t3.sh @@ -0,0 +1,1208 @@ +#!/bin/bash +#SBATCH -n 4 +#SBATCH --mem=20000 +#SBATCH --export=MYLIB,HOME,HOMEPACK,TMPDIR,OUTPUTDIR,TESTDIR +#SBATCH -t 00:10:00 +#SBATCH -N 1 +#SBATCH -p normal256 + +#The MYLIB variable must contain the gmkpack pack name +#The TESTDIR variable must contain the test directory +#Results will be stored in the local directory + +#Other environment varaibles that can be set: +#OUTPUTDIR + +date + +OUTPUTDIR=${OUTPUTDIR:-$PWD} +case=riette2 +#rekchemin="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" #Resources for the run must be in the same directory as this script +rekchemin=$TESTDIR + +NPROC=4 +NSTRIN=$NPROC +NSTROUT=1 +NPRTRW_NPRTRV="" +NPRTRW_NPRTRV=" NPRTRW=$NPROC, + NPRTRV=1," +export OMP_NUM_THREADS=1 + +#MYLIB=48t1_main.01%jpdup + +export DR_HOOK=1 +#export DR_HOOK_IGNORE_SIGNALS=-1 +export DR_HOOK_NOT_MPI=1 +export DR_HOOK_SILENT=1 +export DR_HOOK_OPT= + +export EC_PROFILE_HEAP=0 +export EC_PROFILE_MEM=0 +export EC_MPI_ATEXIT=0 +export DR_HOOK_SHOW_PROCESS_OPTIONS=0 +export EC_MEMINFO=0 +export TVSEARCHPATH=$SOURCE + +HOMEPACK=${HOMEPACK:=$HOME/pack} +SOURCE=$HOMEPACK/$MYLIB/src/local +LOADIR=$HOMEPACK/$MYLIB/bin + +TMPDIR=${TMPDIR:=$HOME/tmp} +TMPLOC=$TMPDIR/rundir.$$ +TMPWAIT=$TMPDIR/wait_queue.$$ +mkdir $TMPWAIT +mkdir $TMPLOC +cd $TMPLOC + +export RTTOV_COEFDIR=$PWD + +# ************************** +# * Saisie des NAMELISTS * +# ************************** + +CNMEXP='FPOS' + +echo +/bin/cat <<FIN > fort.4 + &NACIETEO + / + &NACOBS + / + &NACTAN + / + &NACTEX + / + &NACVEG + / + &NADOCK + / + &NAEAEM7 + / + &NAEAER + / + &NAECOAPHY + / + &NAEPHLI + / + &NAEPHY + / + &NAERAD + LRRTM=.TRUE., + LSRTM=.FALSE., + NAER=1, + NICEOPT=3, + NLIQOPT=3, + NOVLP=6, + NOZOCL=2, + NRADFR=18, + NRADIP=3, + NRADLP=2, + NSW=6, + RLWINHF=1, + RRE2DE=0.64952, + RSWINHF=1, + / + &NAERCLI + / + &NAEVOL + / + &NAIMPO + / + &NALORI + / + &NAMAFN + GFP_CLSG%CLNAME='SURFACCGRAUPEL', + GFP_CLSP%CLNAME='SURFACCPLUIE', + GFP_CLSS%CLNAME='SURFACCNEIGE', + GFP_SFIS%IBITS=16, + GFP_ST%CLNAME='SURFTEMPERATURE', + GFP_ST%IANO=0, + GFP_ST%IBITS=12, + GFP_X10U%CLNAME='CLSVENT.ZONAL', + GFP_X10U%IANO=0, + GFP_X10U%IBITS=12, + GFP_X10V%CLNAME='CLSVENT.MERIDIEN', + GFP_X10V%IANO=0, + GFP_X10V%IBITS=12, + GFP_X2RH%CLNAME='CLSHUMI.RELATIVE', + GFP_X2RH%IANO=0, + GFP_X2RH%IBITS=12, + GFP_X2T%CLNAME='CLSTEMPERATURE', + GFP_X2T%IANO=1, + GFP_XCCC%IBITS=8, + GFP_XHCC%IBITS=8, + GFP_XLCC%IBITS=8, + GFP_XLSG%CLNAME='SURFINSGRAUPEL', + GFP_XLSP%CLNAME='SURFINSPLUIE', + GFP_XLSS%CLNAME='SURFINSNEIGE', + GFP_XMCC%IBITS=8, + GFP_XN2T%IBITS=12, + GFP_XTCC%IBITS=8, + GFP_XUGST%CLNAME='CLSU.RAF60M.XFU', + GFP_XUGST%IANO=0, + GFP_XUGST%IBITS=12, + GFP_XVGST%CLNAME='CLSV.RAF60M.XFU', + GFP_XVGST%IANO=0, + GFP_XVGST%IBITS=12, + GFP_XX2T%IBITS=12, + GFP_XXDIAGH%IBITS=12, + TFP_ABS%ZFK=32., + TFP_CLF%IBITS=6, + TFP_EDR%CLNAME='EDR', + TFP_EDR%IBITS=16, + TFP_EDR%IGRIB=136, + TFP_GR%IBITS=12, + TFP_HL%IBITS=12, + TFP_HTB%IBITS=16, + TFP_HTB%LLGP=.TRUE., + TFP_HU%IBITS=12, + TFP_MSAT9C2%IBITS=12, + TFP_MSAT9C6%IBITS=12, + TFP_MSLNH%IBITS=12, + TFP_PV%ZFK=64., + TFP_RCLS%IBITS=12, + TFP_RR%IBITS=12, + TFP_SN%IBITS=12, + TFP_T%IBITS=12, + TFP_TCLS%IBITS=12, + TFP_TH%IBITS=12, + TFP_THPW%IBITS=12, + TFP_THV%IBITS=12, + TFP_TN%IBITS=12, + TFP_TWV%IBITS=12, + TFP_TX%IBITS=12, + TFP_U%IBITS=12, + TFP_V%IBITS=12, + TFP_VOR%ZFK=32., + TFP_VV%ZFK=32., + / + &NAMARG + CNMEXP='${CNMEXP}', + LECMWF=.FALSE., + LELAM=.TRUE., + LSLAG=.TRUE., + NCONF=1, + NSUPERSEDE=1, + / + &NAMARPHY + LKFBCONV=.FALSE., + LKFBD=.FALSE., + LKFBS=.FALSE., + LMFSHAL=.TRUE., + LMICRO=.TRUE., + LMPA=.TRUE., + LMSE=.TRUE., + LTURB=.TRUE., + / + &NAMCA + / + &NAMCAPE + / + &NAMCFU + LCUMFU=.TRUE., + LFPLS=.TRUE., + LFPLSG=.TRUE., + LFR=.TRUE., + LFRRC=.TRUE., + LFSF=.TRUE., + LNEBPAR=.TRUE., + LNEBTT=.TRUE., + LRAYD=.TRUE., + LRAYS=.TRUE., + / + &NAMCHEM + / + &NAMCHET + / + &NAMCHK + / + &NAMCLA + / + &NAMCLDP + / + &NAMCLI + / + &NAMCLOP15 + / + &NAMCLTC + / + &NAMCOK + / + &NAMCOM + / + &NAMCOSJO + / + &NAMCOUPLO4 + / + &NAMCT0 + CFPNCF='ECHFP', + CNPPATH=' ', + LAROME=.TRUE., + LNHEE=.TRUE., + LSCREEN_OPENMP=.FALSE., + LSPRT=.TRUE., + LTWOTL=.TRUE., + NFPOS=1, + NFRSDI=18, + NSDITS(0)=0, + NFRHIS=72, + NHISTS(0)=0, + NFRPOS=72, + NPOSTS(0)=0, + NFRSFXHIS=72, + NSFXHISTS(0)=0, + NFRDHFD=72, + NDHFDTS(0)=0, + / + &NAMCT1 + LRFILAF=.FALSE., + N1HIS=1, + N1POS=1, + N1RES=0, + N1SDI=1, + N1SFXHIS=1, + N1GDI=0, + / + &NAMCUMF + / + &NAMCUMFS + / + &NAMCVER + / + &NAMCVMNH + / + &NAMDDH + LDDH_OMP=.TRUE., + LHDDOP=.TRUE., + LHDHKS=.TRUE., + LHDEFD=.TRUE., + LFLEXDIA=.TRUE., + BDEDDH(1,1)=3, + BDEDDH(2,1)=1, + BDEDDH(3,1)=358.8 + BDEDDH(4,1)=45.1 + BDEDDH(5,1)=360.3 + BDEDDH(6,1)=44.5 + / + &NAMDFI + / + &NAMDIM + NPROMA=-50, + / + &NAMDIMO + / + &NAMDIM_TRAJ + / + &NAMDPHY + / + &NAMDPRECIPS + / + &NAMDYN + LADVF=.TRUE., + LQMPD=.FALSE., + LQMT=.FALSE., + LQMVD=.FALSE., + LRHDI_LASTITERPC=.TRUE., + NITMP=4, + NSITER=1, + NSPDLAG=3, + NSVDLAG=3, + NTLAG=3, + NVLAG=3, + NWLAG=3, + RDAMPDIV=20., + RDAMPPD=20., + RDAMPQ=0., + RDAMPT=0., + RDAMPVD=20., + RDAMPVOR=20., + REPS1=0., + REPS2=0., + REPSM1=0., + REPSM2=0., + REPSP1=0., + SDRED=1., + SIPR=90000., + SITR=350., + SITRA=100., + SLHDA0=0.25, + SLHDD00=0.000065, + VESL=0.05, + XIDT=0., + ZSLHDP1=1.7, + ZSLHDP3=0.6, + / + &NAMDYNA + LCOMADH=.TRUE., + LCOMADV=.FALSE., + LCOMAD_GFL=.TRUE., + LCOMAD_SP=.TRUE., + LCOMAD_SPD=.TRUE., + LCOMAD_SVD=.TRUE., + LCOMAD_T=.TRUE., + LCOMAD_W=.TRUE., + LGWADV=.TRUE., + LNESC=.TRUE., + LPC_CHEAP=.TRUE., + LPC_FULL=.TRUE., + LRDBBC=.FALSE., + LSETTLS=.FALSE., + LSETTLST=.TRUE., + LSLHD_GFL=.TRUE., + LSLHD_OLD=.FALSE., + LSLHD_SPD=.FALSE., + LSLHD_SVD=.FALSE., + LSLHD_T=.FALSE., + LSLHD_W=.FALSE., + ND4SYS=2, + NDLNPR=1, + NPDVAR=2, + NVDVAR=4, + SLHDEPSH=0.08, + SLHDKMAX=6, + / + &NAMDYNCORE + / + &NAMEMIS_CONF + / + &NAMENKF + / + &NAMFA + CMODEL='OUTPUTID', + LEXTERN=.TRUE., + LSUPPDATE=.FALSE., + NBITCS=-1, + NBITPG=-1, + NSTRON=-1, + / + &NAMFAINIT + JPXTRO=2000, + / + &NAMFPC + CFP2DF(1)='SURFPRESSION', + CFP2DF(2)='MSL_NHPRESSURE', + CFP2DF(3)='SURFTOT.WAT.VAPO', + CFP2DF(4)='SURFISOTPW0.MALT', + CFP2DF(5)='SURFCAPE.POS.F00', + CFP2DF(6)='C002_METEOSAT_09_SEVIRI.POS', + CFP2DF(7)='C006_METEOSAT_09_SEVIRI.POS', + CFP2DF(8)='SURFREFLECT.MAX', + CFP2DF(9)='SURFISOTPW1.MALT', + CFP2DF(10)='SURFISOTPW2.MALT', + CFP3DF(1)='GEOPOTENTIEL', + CFP3DF(2)='TEMPERATURE', + CFP3DF(3)='VENT_ZONAL', + CFP3DF(4)='VENT_MERIDIEN', + CFP3DF(5)='HUMI_RELATIVE', + CFP3DF(6)='THETA_PRIM_W', + CFP3DF(7)='PRESSURE', + CFP3DF(8)='ABS_VORTICITY', + CFP3DF(9)='VITESSE_VERTICALE', + CFP3DF(10)='TEMPE_POTENT', + CFP3DF(11)='POT_VORTICIT', + CFP3DF(12)='SIM_REFLECTI', + CFP3DF(13)='RAIN', + CFP3DF(14)='SNOW', + CFP3DF(15)='GRAUPEL', + CFP3DF(16)='ICE_CRYSTAL', + CFP3DF(17)='CLOUD_WATER', + CFP3DF(18)='VERT.VELOCIT', + CFP3DF(19)='DIVERGENCE', + CFP3DF(20)='THETA_VIRTUA', + CFP3DF(21)='TKE', + CFP3DF(22)='CLOUD_FRACTI', + CFP3DF(23)='ISOT_ALTIT', + CFP3DF(24)='EDR', + CFPCFU(1)='SURFTENS.TOTA.ZO', + CFPCFU(2)='SURFTENS.TOTA.ME', + CFPCFU(3)='SURFACCPLUIE', + CFPCFU(4)='SURFACCNEIGE', + CFPCFU(5)='SURFACCGRAUPEL', + CFPCFU(6)='SOMMFLU.RAY.SOLA', + CFPCFU(7)='SURFFLU.RAY.SOLA', + CFPCFU(8)='SOMMFLU.RAY.THER', + CFPCFU(9)='SURFFLU.RAY.THER', + CFPCFU(10)='SURFFLU.LAT.MTOT', + CFPCFU(11)='SURFFLU.MTOTA.NE', + CFPCFU(12)='SURFFLU.CHA.SENS', + CFPCFU(13)='SURFRAYT SOLA DE', + CFPCFU(14)='SURFRAYT THER DE', + CFPCFU(15)='SURFRAYT SOL CL', + CFPCFU(16)='SURFRAYT THER CL', + CFPCFU(17)='SURFRAYT DIR SUR', + CFPDOM(1)='FRANGP0025', + CFPFMT='LALON', + CFPPHY(1)='SURFTEMPERATURE', + CFPPHY(2)='INTSURFGEOPOTENT', + CFPPHY(3)='SURFRESERV.NEIGE', + CFPXFU(1)='CLSTEMPERATURE', + CFPXFU(2)='CLSHUMI.RELATIVE', + CFPXFU(3)='CLSVENT.ZONAL', + CFPXFU(4)='CLSVENT.MERIDIEN', + CFPXFU(5)='SURFNEBUL.TOTALE', + CFPXFU(6)='SURFNEBUL.HAUTE', + CFPXFU(7)='SURFNEBUL.MOYENN', + CFPXFU(8)='SURFNEBUL.BASSE', + CFPXFU(9)='CLSMAXI.TEMPERAT', + CFPXFU(10)='CLSMINI.TEMPERAT', + CFPXFU(11)='CLPMHAUT.MOD.XFU', + CFPXFU(12)='SURFDIAGHAIL', + LCRITSNOWTEMP=.FALSE., + LFPCAPEX=.TRUE., + LFPMOIS=.TRUE., + LFPPACKING=.FALSE., + LWIDER_DOM=.TRUE., + L_READ_MODEL_DATE=.TRUE., + NFITI=1, + NFITV=1, + NFPCAPE=5, + NFPCLI=1, + NFPGRIB=1, + NFPINPHY=4, + NITERPV=8, + RENTRA=0.0001, + RFP3H(1)=10., + RFP3H(2)=20., + RFP3H(3)=35., + RFP3H(4)=50., + RFP3H(5)=75., + RFP3H(6)=100., + RFP3H(7)=150., + RFP3H(8)=200., + RFP3H(9)=250., + RFP3H(10)=375., + RFP3H(11)=500., + RFP3H(12)=625., + RFP3H(13)=750., + RFP3H(14)=875., + RFP3H(15)=1000., + RFP3H(16)=1125., + RFP3H(17)=1250., + RFP3H(18)=1375., + RFP3H(19)=1500., + RFP3H(20)=1750., + RFP3H(21)=2000., + RFP3H(22)=2250., + RFP3H(23)=2500., + RFP3H(24)=2750., + RFP3H(25)=3000., + RFP3I(1)=-273.15, + RFP3I(2)=-263.15, + RFP3I(3)=-261.15, + RFP3I(4)=-253.15, + RFP3P(1)=10000., + RFP3P(2)=12500., + RFP3P(3)=15000., + RFP3P(4)=17500., + RFP3P(5)=20000., + RFP3P(6)=22500., + RFP3P(7)=25000., + RFP3P(8)=27500., + RFP3P(9)=30000., + RFP3P(10)=35000., + RFP3P(11)=40000., + RFP3P(12)=45000., + RFP3P(13)=50000., + RFP3P(14)=55000., + RFP3P(15)=60000., + RFP3P(16)=65000., + RFP3P(17)=70000., + RFP3P(18)=75000., + RFP3P(19)=80000., + RFP3P(20)=85000., + RFP3P(21)=90000., + RFP3P(22)=92500., + RFP3P(23)=95000., + RFP3P(24)=100000., + RFP3PV(1)=0.0000015, + RFP3PV(2)=0.000002, + RFPCD2=5., + RFPCSAB=50., + RFPVCAP=7000., + / + &NAMFPD + NLAT(1)=41, + NLON(1)=41, + RLONC(1)=-0.71, + RLATC(1)=44.8, + RDELX(1)=0.025, + RDELY(1)=0.025, + / + &NAMFPDY2 + / + &NAMFPDYF + / + &NAMFPDYH + / + &NAMFPDYI + / + &NAMFPDYP + / + &NAMFPDYS + / + &NAMFPDYT + / + &NAMFPDYV + / + &NAMFPF + NFMAX(1)=60, + NFMAX(2)=80, + / + &NAMFPG + NFPDISTRIB=1, + / + &NAMFPIOS + / + &NAMFPMOVE + / + &NAMFPPHY + / + &NAMFPSC2 + NFPROMA=-50, + / + &NAMFPSC2_DEP + NFPROMA_DEP=-50, + / + &NAMGEM + / + &NAMGFL + NGFL_EZDIAG=4, + YEZDIAG_NL(1)%CNAME='EZDIAG01', + YEZDIAG_NL(1)%LREQOUT=.FALSE., + YEZDIAG_NL(2)%CNAME='EZDIAG02', + YEZDIAG_NL(2)%LREQOUT=.FALSE., + YEZDIAG_NL(3)%CNAME='EZDIAG03', + YEZDIAG_NL(3)%LREQOUT=.FALSE., + YEZDIAG_NL(4)%CNAME='INPRRTOT3D', + YEZDIAG_NL(4)%LREQOUT=.TRUE., + YG_NL%LQM=.TRUE., + YG_NL%LSLHD=.TRUE., + YG_NL%NCOUPLING=-1, + YG_NL%NREQIN=1, + YG_NL%REFVALC=0., + YIRAD_NL%LGP=.TRUE., + YI_NL%LQM=.TRUE., + YI_NL%LSLHD=.TRUE., + YI_NL%NCOUPLING=-1, + YI_NL%NREQIN=1, + YI_NL%REFVALC=0., + YLRAD_NL%LGP=.TRUE., + YL_NL%LQM=.TRUE., + YL_NL%LSLHD=.TRUE., + YL_NL%NCOUPLING=-1, + YL_NL%NREQIN=1, + YL_NL%REFVALC=0., + YQ_NL%LCOMAD=.TRUE., + YQ_NL%LQM=.TRUE., + YQ_NL%LSLHD=.FALSE., + YQ_NL%NREQIN=1, + YR_NL%LQM=.TRUE., + YR_NL%LSLHD=.TRUE., + YR_NL%NCOUPLING=-1, + YR_NL%NREQIN=1, + YR_NL%REFVALC=0., + YS_NL%LQM=.TRUE., + YS_NL%LSLHD=.TRUE., + YS_NL%NCOUPLING=-1, + YS_NL%NREQIN=1, + YS_NL%REFVALC=0., + YTKE_NL%NCOUPLING=0, + YTKE_NL%NREQIN=1, + / + &NAMGRIB + / + &NAMGWD + / + &NAMGWDIAG + / + &NAMGWWMS + / + &NAMIAU + ALPHAIAU=0.5, + LIAU=.FALSE., + TSTARTIAU=1800, + TSTOPIAU=5340, + / + &NAMICE + / + &NAMINI + LDFI=.FALSE., + / + &NAMINTFLEX + / + &NAMIOMI + / + &NAMIOS + / + &NAMIO_SERV + NIO_SERV_BUF_MAXSIZE=20, + NIO_SERV_METHOD=2, + NMSG_LEVEL_CLIENT=0, + NMSG_LEVEL_SERVER=0, + NPROCESS_LEVEL=5, + NPROC_IO=0, + / + &NAMJBCODES + / + &NAMJFH + / + &NAMJG + / + &NAMLCZ + / + &NAMLSFORC + / + &NAMMARS + / + &NAMMCC + / + &NAMMCUF + / + &NAMMKODB + / + &NAMMODERR + / + &NAMMTS + / + &NAMMWAVE + / + &NAMNPROF + / + &NAMNUD + / + &NAMOBS + / + &NAMONEDVAR + / + &NAMOOPS + / + &NAMOPH + CFNHWF='ECHIS', + LINC=.TRUE., + NTIMEFMT=1, + / + &NAMOPTCMEM + / + &NAMPAR0 + LOPT_SCALAR=.TRUE., + NPRINTLEV=1, + LMPOFF=.FALSE., + MBX_SIZE=2048000000, + MP_TYPE=2, + NOUTPUT=1, + NPROC=$NPROC, +$NPRTRW_NPRTRV + / + &NAMPAR1 + LEQ_REGIONS=.FALSE., + LSLONDEM=.TRUE., + LSPLIT=.TRUE., + LSYNC_SLCOM=.FALSE., + LSYNC_TRANS=.FALSE., + L_GATHERV_WRGP=.FALSE., + NCOMBFLEN=1800000, + NSTRIN=$NSTRIN, + NSTROUT=$NSTROUT, + / + &NAMPARAR + CMF_UPDRAFT='RHCJ' + CFRAC_ICE_ADJUST='S', + CFRAC_ICE_SHALLOW_MF='S', + CMICRO='ICE3', + CSEDIM='STAT', + CSNOWRIMING='M90', + LCONVHG=.TRUE., + LCRFLIMIT=.TRUE., + LCRIAUTI=.TRUE., + LEVLIMIT=.TRUE., + LFEEDBACKT=.TRUE., + LFPREC3D=.TRUE., + LNULLWETG=.TRUE., + LNULLWETH=.TRUE., + LOLSMC=.TRUE., + LOSEDIC=.TRUE., + LOSIGMAS=.TRUE., + LOSUBG_COND=.TRUE., + LSEDIM_AFTER=.FALSE., + LWETGPOST=.TRUE., + LWETHPOST=.TRUE., + NMAXITER_MICRO=1, + NPRINTFR=10000, + NPTP=1, + RCRIAUTC=0.001, + RCRIAUTI=0.0002, + RT0CRIAUTI=-5., + VSIGQSAT=0.02, + XFRACM90=0.1, + XMRSTEP=0.00005, + XSPLIT_MAXCFL=0.8, + XTSTEP_TS=0., + / + &NAMPHMSE + LPGDFWR=.FALSE., + / + &NAMPHY + LAERODES=.TRUE., + LAEROLAN=.TRUE., + LAEROSEA=.TRUE., + LAEROSOO=.TRUE., + LEDR=.TRUE., + LMPHYS=.TRUE., + LO3ABC=.TRUE., + LRAYFM=.TRUE., + / + &NAMPHY0 + ALMAV=300., + BEDIFV=0.05, + ECMNP=3000., + GCCSV=0., + GCVADS=0.8, + GCVALFA=0.000045, + GCVBETA=0.2, + GCVMLT=0.00016, + GCVNU=0.000025, + GCVPSI=1., + GCVPSIE=1., + GDDEVA=0.25, + GDDSDE=0.5, + GWDCD=6., + HUCOE=0.5, + HUTIL=1.8, + QSSC=400., + QSSUSC=0.75, + QSSUSS=0.4, + QSSUSV=250., + QSUSXC=0.0002, + QSUSXS=0.0003, + QXRAL=130., + QXRDEL=0.49, + QXRHX=0.99, + QXRR=0.25, + RCVEVAP=0.25, + REFLKUO=5000., + REVGSL=15., + SCO=-20., + TDDGP=0.8, + TENTR=0.0000025, + TENTRX=0.00008, + TUDGP=0.8, + UHDIFV=0.0008, + USURIC=0.175, + USURICE=0.5, + USURICL=1., + USURID=0.1, + USURIDE=0.25, + VZ0CM=0.00015, + XMAXLM=5000., + XMINLM=10., + / + &NAMPHY1 + ALBMIN=0.65, + ALCRIN=0.75, + GCGEL=0.00003, + GCGELS=0.00005, + GNEIMX=1.8, + GNEIMXS=1.8, + RCTVEG(3)=0.000012, + RCTVEG(4)=0.00001, + / + &NAMPHY2 + FACRAF=3.8, + HTKERAF=20., + LMULAF=.TRUE., + LRAFTKE=.TRUE., + LRAFTUR=.TRUE., + XDAMP=1., + XMULAF=-1.85, + / + &NAMPHY3 + / + &NAMPHYDS + / + &NAMPONG + / + &NAMPPC + / + &NAMPPVI + / + &NAMPRE + / + &NAMRAD15 + / + &NAMRADCMEM + / + &NAMRCF + / + &NAMRCOEF + / + &NAMRES + / + &NAMRGRI + / + &NAMRINC + / + &NAMRIP + TSTEP=50., + CSTOP='h2', + / + &NAMRIP0 + / + &NAMRLX + / + &NAMSATS + LPARTIAL_COEF_FILES=.TRUE., + / + &NAMSCC + / + &NAMSCEN + / + &NAMSCM + / + &NAMSEKF + / + &NAMSENS + / + &NAMSFXCMP + CFLDNAME(1)='????????????????', + NBBITS(1)=24, + / + &NAMSIMPHL + / + &NAMSPNG + / + &NAMSPSDT + / + &NAMSTA + / + &NAMSTOPH + / + &NAMSWE + / + &NAMTESTVAR + / + &NAMTHLIM + / + &NAMTOPH + ETCVIM=5000., + ETNEBU=5000., + ETPLUI=5000., + XDRMTK=6.0D-7, + XDRMTP=800., + XDRMUK=3.0D-7, + XDRMUP=800., + / + &NAMTRAJP + / + &NAMTRANS + / + &NAMTRANS0 + / + &NAMTS + / + &NAMVAR + / + &NAMVARBC + / + &NAMVARBC_AIREP + / + &NAMVARBC_ALLSKY + / + &NAMVARBC_GBRAD + / + &NAMVARBC_RAD + / + &NAMVARBC_SFCOBS + / + &NAMVARBC_TCWV + / + &NAMVARBC_TO3 + / + &NAMVAREPS + / + &NAMVDF + / + &NAMVDOZ + / + &NAMVOLCANO + / + &NAMVRTL + / + &NAMVV0 + / + &NAMVV1 + / + &NAMVWRK + / + &NAMWAVELETJB + / + &NAMXFU + LXCLP=.TRUE., + LXCLS=.TRUE., + LXFU=.TRUE., + LXNEBPA=.TRUE., + LXNEBTT=.TRUE., + LXNUVCLS=.TRUE., + LXPLS=.TRUE., + LXPLSG=.TRUE., + LXQCLS=.TRUE., + LXR=.TRUE., + LXSOIL=.FALSE., + LXTHW=.TRUE., + LXTRT=.TRUE., + LXTTCLS=.TRUE., + LXXDIAGH=.TRUE., + LXXGST=.TRUE., + NFRRAZ=72, + NRAZTS(0)=0, + / + &NAM_CANAPE + / + &NAM_DISTRIBUTED_VECTORS + / + &NAPHLC + / + &NEMCT0 + / + &NEMDIM + / + &NEMDYN + / + &NEMELBC0A + LESPCPL=.TRUE., + NBICNHX=2, + NBICOP=2, + NBICOT=2, + NBICOU=2, + NBICPD=2, + NBICVD=2, + NECRIPL=1, + / + &NEMELBC0B + NEFRSPCPL=1, + NEK0=20, + NEK1=30, + NEN1=4, + NEN2=8, + SPNUDDIV=0.01, + SPNUDQ=0., + SPNUDT=0.01, + SPNUDVOR=0.01, + TEFRCL=3600., + / + &NEMFPEZO + / + &NEMGEO + / + &NEMJK + / + &NEMVAR + / + &NEMWAVELET + / + &NAETLDIAG + / + &NAMMETHOX + / + &NAMSPP + / + &NAMACV + / + &NAMFPOBJ + / + &NAMNORGWD + / + &NAMTRAJ + / + &NAMSATSIM + / + &NAMDVISI + / + &NAMNUDGLH + / + &NAMPERTPAR + / +FIN +/bin/cat fort.4 + +/bin/cat <<FIN > EXSEG1.nam + &NAM_DIAG_ISBAN + LPGD=.TRUE., + LSURF_MISC_BUDGET=.TRUE., + / + &NAM_DIAG_SURFN + LCOEF=.TRUE., + LSURF_BUDGET=.TRUE., + N2M=2, + / + &NAM_ISBAN + CSCOND='NP89', + / + &NAM_REPROD_OPER + LREPROD_OPER=.TRUE., + / + &NAM_SEAFLUXN + CSEA_FLUX='ECUME', + LPWG=.FALSE., + LPRECIP=.FALSE., + LPWEBB=.FALSE., + / + &NAM_SSON + CROUGH='Z01D', + XFRACZ0=5., + LDSV=.FALSE., + / + &NAM_SURF_ATM + XRIMAX=0.2, + LNOSOF=.TRUE., + / + &NAM_SURF_CSTS + XZ0SN=0.01, + XZ0HSN=0.001, + XEMISSN=0.99, + / + &NAM_WRITE_DIAG_SURFN + LPROVAR_TO_DIAG=.FALSE., + LSELECT=.TRUE., +CSELECT(1)='T2M','HU2M','XX','YY','DX','DY','SST','Z0SEA','TS_WATER','Z0WATER','TG1','TG2','TG3','WG1','WG2','WG3','WGI1','WGI2','WGI3','WR','WSN_VEG1','RSN_VEG1','ASN_VEG','TSRAD_NAT','RESA','TROOF1','TROOF2','TROOF3','TROOF4','TROOF5','WS_ROOF','TROAD1','TROAD2','TROAD3','TROAD4','TROAD5','WS_ROAD','TWALL1','TWALL2','TWALL3','TWALL4','TWALL5','TI_BLD','T_WIN1','TI_ROAD','WSN_RF1','RSN_RF1','TSN_RF1','ASN_RF','WSN_RD1','RSN_RD1','TSN_RD1','ASN_RD','TCANYON','QCANYON','STORAGE_TYPE','MASDEV','VERSION','BUG','DIM_FULL','DTCUR','LAT0','LON0','RPK','BETA','LATORI','LONORI','IMAX','JMAX','RW_PRECIP','BUDC','SEA_OCEAN','SEA_SBL','WAT_SBL','SN_VEG_N','SN_VEG','LSNOW_FRAC_T','GLACIER','TEMPARP','NLITTER','NLITTLEVS','NSOILCARB','ISBA_CANOPY','SN_RF_N','SN_RF','SN_RD_N','SN_RD','SN_RD_TYP','SN_RF_TYP','TEB_CANOPY','STORAGETYPE','CARTESIAN','GRID_TYPE','SN_VEG_TYP','RESPSL','ROAD_DIR','WALL_OPT','LAI','VEG','RSMIN','DG2','_FBUF_SIZE','_FBUF_DIM1','_FBUF_DIM2','_FBUF_NAME','_FBUF_TYPE','_FBUF_MASK','LCPL_GCM','HANDLE_SIC','SSS', + / + &NAM_WRITE_SURF_ATM + LNOWRITE_TEXFILE=.TRUE., + / +FIN +/bin/cat EXSEG1.nam + +# ***************************************** +# * Acquisition du fichier de demarrage * +# ***************************************** + +echo +for hh in 0 1 2 3 4 5 6 ; do + N=`expr $hh / 1 ` + set -x + ln -s $rekchemin/data/aro/$case/ELSCFFCSTALBC000${N}_l15 ELSCF${CNMEXP}ALBC00${N} + set +x +done +set -x +ln -s $rekchemin/data/aro/$case/ICMSHFCSTINIT_l15 ICMSH${CNMEXP}INIT +ln -s $rekchemin/data/aro/$case/ICMSHFCSTINIT.sfx ICMSH${CNMEXP}INIT.sfx +ln -s $rekchemin/data/surfex/v8/ecoclimapI_covers_param.bin . +ln -s $rekchemin/data/surfex/v8/ecoclimapII_eu_covers_param.bin . +ln -s $rekchemin/data/surfex/v8/ecoclimapII_af_covers_param.bin . +ln -s $rekchemin/data/aro/$case/Const.Clim Const.Clim +ln -s $rekchemin/data/aro/$case/Const.Clim.sfx Const.Clim.sfx +ln -s $rekchemin/data/aro/$case/const.clim.FRANGP0025 const.clim.FRANGP0025 +ln -s $rekchemin/data/rttov12/rtcoef_meteosat_9_seviri.dat . +ln -s $rekchemin/data/rttov12/rtcoef_meteosat_10_seviri.dat . +ln -s $rekchemin/data/rttov12/sccldcoef_meteosat_9_seviri.dat . +set +x +tar xfz $rekchemin/data/rtm/radiation_params.47r1_light.tgz + +# *************** +# * Chargement * +# *************** + +echo +set -x +\ln -s $LOADIR/MASTERODB MASTER +set +x +if ldd MASTER | grep openmpi > /dev/null; then + #On est sur PC + MPILIB=$(ldd MASTER | grep openmpi | tail -1 | awk '{print $3}' | awk -F "/" '{print $(NF-2)}') + MPIRUN="$(echo $(dirname $(dirname $(ldd MASTER | grep openmpi| tail -1 | awk '{print $3}'))))/bin/orterun --oversubscribe -np $NPROC" + GRIB_API=$(dirname $(dirname $(ldd MASTER | grep grib_api | head -1 | awk '{print $3}') 2>/dev/null) 2>/dev/null) + ECCODES=$(dirname $(dirname $(ldd MASTER | grep eccodes | head -1 | awk '{print $3}') 2>/dev/null) 2>/dev/null) + export GRIB_SAMPLES_PATH=$GRIB_API/share/grib_api/ifs_samples/grib1 + export GRIB_DEFINITION_PATH=$GRIB_API/share/grib_api/definitions + export ECCODES_SAMPLES_PATH=$ECCODES/share/eccodes/ifs_samples/grib1 + export ECCODES_DEFINITION_PATH=$rekchemin/data/eccodes_extras_definitions:$ECCODES/share/eccodes/definitions +else + #On est sur HPC + #MPIRUN="$(echo $(dirname $(dirname $(ldd MASTER | grep libmpi| tail -1 | awk '{print $3}'))))/bin/mpirun -wdir $PWD" + NNODES=$SLURM_JOB_NUM_NODES + MPITASKS_PER_NODE=$((SLURM_NTASKS/SLURM_JOB_NUM_NODES)) + MPI_TASKS=$SLURM_NTASKS + MPIRUN="/opt/softs/mpiauto/mpiauto -np $MPI_TASKS -nnp $MPITASKS_PER_NODE --" + export OMP_STACKSIZE=4G + export KMP_STACKSIZE=4G + export KMP_MONITOR_STACKSIZE=4G + export DR_HOOK=1 + export DR_HOOK_IGNORE_SIGNALS=-1 + export DR_HOOK_SILENT=1 + export DR_HOOK_SHOW_PROCESS_OPTIONS=0 + export MPL_MBX_SIZE=2048000000 + export EC_PROFILE_HEAP=0 + export EC_PROFILE_MEM=0 + export EC_MPI_ATEXIT=0 + export EC_MEMINFO=0 + export OPENBLAS_NUM_THREADS=1 + export MKL_CBWR="AUTO,STRICT" + export MKL_NUM_THREADS=1 + export MKL_DEBUG_CPU_TYPE=5 + export ECCODES_SAMPLES_PATH=/opt/softs/libraries/ICC_2018.5.274/eccodes-2.17.0/share/eccodes/ifs_samples/grib1 + export ECCODES_DEFINITION_PATH=/opt/softs/libraries/ICC_2018.5.274/eccodes-2.17.0/share/eccodes/definitions +fi +echo $MPIRUN +set +x +if [ ! -f MASTER ] ; then echo No executable MASTER;exit 1;fi + +# *************** +# * Execution * +# *************** + +echo +echo OMP_NUM_THREADS=$OMP_NUM_THREADS +set -x +ulimit -s unlimited +$MPIRUN $PWD/MASTER >lola +set +x +echo +##if [ -f lola ] ; then +## echo;echo Standard output :;echo;cat lola +##fi +##if [ -f stderr.* ] ; then +## for file in stderr.* ; do +## echo;echo $file :;cat $file +## done +##fi +##if [ -f stdout.* ] ; then +##echo;echo stdout :;echo;cat stdout.* +##fi +##if [ -a NODE.001_01 ] ; then +## for file in NODE* ; do +## echo;echo Listing $file;echo +## cat $file +## done +##fi +##if [ $(find . -name "drhook.prof.*" | wc -l) -ne 0 ] ; then +### Top 25 for each MPI task : +## for file in drhook.prof.* ; do +## echo;echo $file :;head -38 $file +## done +##fi +#cat drhook.prof.* | perl -w $HOME/bin/drhook_merge_walltime_max.pl + +# ******************* +# * Sauvegardes * +# ******************* + +ls +#if [ -f PFFPOS000+0000 ] ; then +# cp PFFPOS000+0000 $WAIT_QUEUE/PFFPOS000+0000.$PBS_JOBID +#fi +cp lola NODE.001_01 ICMSHFPOS+00* DHFDLFPOS+00* $OUTPUTDIR/ +/bin/rm fort.4 EXSEG1.nam lola ICMSHFPOS+0000* PFFPOSFRANGP0025+0000* ICMSHFPOS+0001* +/bin/rm PFFPOSFRANGP0025+0001* ICMSHFPOS+0002* ECHIS PFFPOSFRANGP0025+0002* DHFDLFPOS+00* +/bin/rm ECHFP NODE.001_01 ifs.stat $(tar tfz $rekchemin/data/rtm/radiation_params.47r1_light.tgz) + +# **************** +# * Epilogue * +# **************** + +ls -ltr | grep -v "\->" +echo Wait_queue : +ls -ltr $TMPWAIT +cd $TMPDIR +\rm -rf rundir.$$ +\rm -rf wait_queue.$$ +date +set +x diff --git a/tools/conf_tests/small_3D_alt9/aro48t3.sh b/tools/conf_tests/small_3D_alt9/aro48t3.sh new file mode 100755 index 0000000000000000000000000000000000000000..17f57ddd295284e51821673472c1e856382967d1 --- /dev/null +++ b/tools/conf_tests/small_3D_alt9/aro48t3.sh @@ -0,0 +1,1208 @@ +#!/bin/bash +#SBATCH -n 4 +#SBATCH --mem=20000 +#SBATCH --export=MYLIB,HOME,HOMEPACK,TMPDIR,OUTPUTDIR,TESTDIR +#SBATCH -t 00:10:00 +#SBATCH -N 1 +#SBATCH -p normal256 + +#The MYLIB varibale must contain the gmkpack pack name +#The TESTDIR variable must contain the test directory +#Results will be stored in the local directory + +#Other environment varaibles that can be set: +#OUTPUTDIR + +date + +OUTPUTDIR=${OUTPUTDIR:-$PWD} +case=riette2 +#rekchemin="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" #Resources for the run must be in the same directory as this script +rekchemin=$TESTDIR + +NPROC=4 +NSTRIN=$NPROC +NSTROUT=1 +NPRTRW_NPRTRV="" +NPRTRW_NPRTRV=" NPRTRW=$NPROC, + NPRTRV=1," +export OMP_NUM_THREADS=1 + +#MYLIB=48t1_main.01%jpdup + +export DR_HOOK=1 +#export DR_HOOK_IGNORE_SIGNALS=-1 +export DR_HOOK_NOT_MPI=1 +export DR_HOOK_SILENT=1 +export DR_HOOK_OPT= + +export EC_PROFILE_HEAP=0 +export EC_PROFILE_MEM=0 +export EC_MPI_ATEXIT=0 +export DR_HOOK_SHOW_PROCESS_OPTIONS=0 +export EC_MEMINFO=0 +export TVSEARCHPATH=$SOURCE + +HOMEPACK=${HOMEPACK:=$HOME/pack} +SOURCE=$HOMEPACK/$MYLIB/src/local +LOADIR=$HOMEPACK/$MYLIB/bin + +TMPDIR=${TMPDIR:=$HOME/tmp} +TMPLOC=$TMPDIR/rundir.$$ +TMPWAIT=$TMPDIR/wait_queue.$$ +mkdir $TMPWAIT +mkdir $TMPLOC +cd $TMPLOC + +export RTTOV_COEFDIR=$PWD + +# ************************** +# * Saisie des NAMELISTS * +# ************************** + +CNMEXP='FPOS' + +echo +/bin/cat <<FIN > fort.4 + &NACIETEO + / + &NACOBS + / + &NACTAN + / + &NACTEX + / + &NACVEG + / + &NADOCK + / + &NAEAEM7 + / + &NAEAER + / + &NAECOAPHY + / + &NAEPHLI + / + &NAEPHY + / + &NAERAD + LRRTM=.TRUE., + LSRTM=.FALSE., + NAER=1, + NICEOPT=3, + NLIQOPT=3, + NOVLP=6, + NOZOCL=2, + NRADFR=18, + NRADIP=3, + NRADLP=2, + NSW=6, + RLWINHF=1, + RRE2DE=0.64952, + RSWINHF=1, + / + &NAERCLI + / + &NAEVOL + / + &NAIMPO + / + &NALORI + / + &NAMAFN + GFP_CLSG%CLNAME='SURFACCGRAUPEL', + GFP_CLSP%CLNAME='SURFACCPLUIE', + GFP_CLSS%CLNAME='SURFACCNEIGE', + GFP_SFIS%IBITS=16, + GFP_ST%CLNAME='SURFTEMPERATURE', + GFP_ST%IANO=0, + GFP_ST%IBITS=12, + GFP_X10U%CLNAME='CLSVENT.ZONAL', + GFP_X10U%IANO=0, + GFP_X10U%IBITS=12, + GFP_X10V%CLNAME='CLSVENT.MERIDIEN', + GFP_X10V%IANO=0, + GFP_X10V%IBITS=12, + GFP_X2RH%CLNAME='CLSHUMI.RELATIVE', + GFP_X2RH%IANO=0, + GFP_X2RH%IBITS=12, + GFP_X2T%CLNAME='CLSTEMPERATURE', + GFP_X2T%IANO=1, + GFP_XCCC%IBITS=8, + GFP_XHCC%IBITS=8, + GFP_XLCC%IBITS=8, + GFP_XLSG%CLNAME='SURFINSGRAUPEL', + GFP_XLSP%CLNAME='SURFINSPLUIE', + GFP_XLSS%CLNAME='SURFINSNEIGE', + GFP_XMCC%IBITS=8, + GFP_XN2T%IBITS=12, + GFP_XTCC%IBITS=8, + GFP_XUGST%CLNAME='CLSU.RAF60M.XFU', + GFP_XUGST%IANO=0, + GFP_XUGST%IBITS=12, + GFP_XVGST%CLNAME='CLSV.RAF60M.XFU', + GFP_XVGST%IANO=0, + GFP_XVGST%IBITS=12, + GFP_XX2T%IBITS=12, + GFP_XXDIAGH%IBITS=12, + TFP_ABS%ZFK=32., + TFP_CLF%IBITS=6, + TFP_EDR%CLNAME='EDR', + TFP_EDR%IBITS=16, + TFP_EDR%IGRIB=136, + TFP_GR%IBITS=12, + TFP_HL%IBITS=12, + TFP_HTB%IBITS=16, + TFP_HTB%LLGP=.TRUE., + TFP_HU%IBITS=12, + TFP_MSAT9C2%IBITS=12, + TFP_MSAT9C6%IBITS=12, + TFP_MSLNH%IBITS=12, + TFP_PV%ZFK=64., + TFP_RCLS%IBITS=12, + TFP_RR%IBITS=12, + TFP_SN%IBITS=12, + TFP_T%IBITS=12, + TFP_TCLS%IBITS=12, + TFP_TH%IBITS=12, + TFP_THPW%IBITS=12, + TFP_THV%IBITS=12, + TFP_TN%IBITS=12, + TFP_TWV%IBITS=12, + TFP_TX%IBITS=12, + TFP_U%IBITS=12, + TFP_V%IBITS=12, + TFP_VOR%ZFK=32., + TFP_VV%ZFK=32., + / + &NAMARG + CNMEXP='${CNMEXP}', + LECMWF=.FALSE., + LELAM=.TRUE., + LSLAG=.TRUE., + NCONF=1, + NSUPERSEDE=1, + / + &NAMARPHY + LKFBCONV=.FALSE., + LKFBD=.FALSE., + LKFBS=.FALSE., + LMFSHAL=.TRUE., + LMICRO=.TRUE., + LMPA=.TRUE., + LMSE=.TRUE., + LTURB=.TRUE., + / + &NAMCA + / + &NAMCAPE + / + &NAMCFU + LCUMFU=.TRUE., + LFPLS=.TRUE., + LFPLSG=.TRUE., + LFR=.TRUE., + LFRRC=.TRUE., + LFSF=.TRUE., + LNEBPAR=.TRUE., + LNEBTT=.TRUE., + LRAYD=.TRUE., + LRAYS=.TRUE., + / + &NAMCHEM + / + &NAMCHET + / + &NAMCHK + / + &NAMCLA + / + &NAMCLDP + / + &NAMCLI + / + &NAMCLOP15 + / + &NAMCLTC + / + &NAMCOK + / + &NAMCOM + / + &NAMCOSJO + / + &NAMCOUPLO4 + / + &NAMCT0 + CFPNCF='ECHFP', + CNPPATH=' ', + LAROME=.TRUE., + LNHEE=.TRUE., + LSCREEN_OPENMP=.FALSE., + LSPRT=.TRUE., + LTWOTL=.TRUE., + NFPOS=1, + NFRSDI=18, + NSDITS(0)=0, + NFRHIS=72, + NHISTS(0)=0, + NFRPOS=72, + NPOSTS(0)=0, + NFRSFXHIS=72, + NSFXHISTS(0)=0, + NFRDHFD=72, + NDHFDTS(0)=0, + / + &NAMCT1 + LRFILAF=.FALSE., + N1HIS=1, + N1POS=1, + N1RES=0, + N1SDI=1, + N1SFXHIS=1, + N1GDI=0, + / + &NAMCUMF + / + &NAMCUMFS + / + &NAMCVER + / + &NAMCVMNH + / + &NAMDDH + LDDH_OMP=.TRUE., + LHDDOP=.TRUE., + LHDHKS=.TRUE., + LHDEFD=.TRUE., + LFLEXDIA=.TRUE., + BDEDDH(1,1)=3, + BDEDDH(2,1)=1, + BDEDDH(3,1)=358.8 + BDEDDH(4,1)=45.1 + BDEDDH(5,1)=360.3 + BDEDDH(6,1)=44.5 + / + &NAMDFI + / + &NAMDIM + NPROMA=-50, + / + &NAMDIMO + / + &NAMDIM_TRAJ + / + &NAMDPHY + / + &NAMDPRECIPS + / + &NAMDYN + LADVF=.TRUE., + LQMPD=.FALSE., + LQMT=.FALSE., + LQMVD=.FALSE., + LRHDI_LASTITERPC=.TRUE., + NITMP=4, + NSITER=1, + NSPDLAG=3, + NSVDLAG=3, + NTLAG=3, + NVLAG=3, + NWLAG=3, + RDAMPDIV=20., + RDAMPPD=20., + RDAMPQ=0., + RDAMPT=0., + RDAMPVD=20., + RDAMPVOR=20., + REPS1=0., + REPS2=0., + REPSM1=0., + REPSM2=0., + REPSP1=0., + SDRED=1., + SIPR=90000., + SITR=350., + SITRA=100., + SLHDA0=0.25, + SLHDD00=0.000065, + VESL=0.05, + XIDT=0., + ZSLHDP1=1.7, + ZSLHDP3=0.6, + / + &NAMDYNA + LCOMADH=.TRUE., + LCOMADV=.FALSE., + LCOMAD_GFL=.TRUE., + LCOMAD_SP=.TRUE., + LCOMAD_SPD=.TRUE., + LCOMAD_SVD=.TRUE., + LCOMAD_T=.TRUE., + LCOMAD_W=.TRUE., + LGWADV=.TRUE., + LNESC=.TRUE., + LPC_CHEAP=.TRUE., + LPC_FULL=.TRUE., + LRDBBC=.FALSE., + LSETTLS=.FALSE., + LSETTLST=.TRUE., + LSLHD_GFL=.TRUE., + LSLHD_OLD=.FALSE., + LSLHD_SPD=.FALSE., + LSLHD_SVD=.FALSE., + LSLHD_T=.FALSE., + LSLHD_W=.FALSE., + ND4SYS=2, + NDLNPR=1, + NPDVAR=2, + NVDVAR=4, + SLHDEPSH=0.08, + SLHDKMAX=6, + / + &NAMDYNCORE + / + &NAMEMIS_CONF + / + &NAMENKF + / + &NAMFA + CMODEL='OUTPUTID', + LEXTERN=.TRUE., + LSUPPDATE=.FALSE., + NBITCS=-1, + NBITPG=-1, + NSTRON=-1, + / + &NAMFAINIT + JPXTRO=2000, + / + &NAMFPC + CFP2DF(1)='SURFPRESSION', + CFP2DF(2)='MSL_NHPRESSURE', + CFP2DF(3)='SURFTOT.WAT.VAPO', + CFP2DF(4)='SURFISOTPW0.MALT', + CFP2DF(5)='SURFCAPE.POS.F00', + CFP2DF(6)='C002_METEOSAT_09_SEVIRI.POS', + CFP2DF(7)='C006_METEOSAT_09_SEVIRI.POS', + CFP2DF(8)='SURFREFLECT.MAX', + CFP2DF(9)='SURFISOTPW1.MALT', + CFP2DF(10)='SURFISOTPW2.MALT', + CFP3DF(1)='GEOPOTENTIEL', + CFP3DF(2)='TEMPERATURE', + CFP3DF(3)='VENT_ZONAL', + CFP3DF(4)='VENT_MERIDIEN', + CFP3DF(5)='HUMI_RELATIVE', + CFP3DF(6)='THETA_PRIM_W', + CFP3DF(7)='PRESSURE', + CFP3DF(8)='ABS_VORTICITY', + CFP3DF(9)='VITESSE_VERTICALE', + CFP3DF(10)='TEMPE_POTENT', + CFP3DF(11)='POT_VORTICIT', + CFP3DF(12)='SIM_REFLECTI', + CFP3DF(13)='RAIN', + CFP3DF(14)='SNOW', + CFP3DF(15)='GRAUPEL', + CFP3DF(16)='ICE_CRYSTAL', + CFP3DF(17)='CLOUD_WATER', + CFP3DF(18)='VERT.VELOCIT', + CFP3DF(19)='DIVERGENCE', + CFP3DF(20)='THETA_VIRTUA', + CFP3DF(21)='TKE', + CFP3DF(22)='CLOUD_FRACTI', + CFP3DF(23)='ISOT_ALTIT', + CFP3DF(24)='EDR', + CFPCFU(1)='SURFTENS.TOTA.ZO', + CFPCFU(2)='SURFTENS.TOTA.ME', + CFPCFU(3)='SURFACCPLUIE', + CFPCFU(4)='SURFACCNEIGE', + CFPCFU(5)='SURFACCGRAUPEL', + CFPCFU(6)='SOMMFLU.RAY.SOLA', + CFPCFU(7)='SURFFLU.RAY.SOLA', + CFPCFU(8)='SOMMFLU.RAY.THER', + CFPCFU(9)='SURFFLU.RAY.THER', + CFPCFU(10)='SURFFLU.LAT.MTOT', + CFPCFU(11)='SURFFLU.MTOTA.NE', + CFPCFU(12)='SURFFLU.CHA.SENS', + CFPCFU(13)='SURFRAYT SOLA DE', + CFPCFU(14)='SURFRAYT THER DE', + CFPCFU(15)='SURFRAYT SOL CL', + CFPCFU(16)='SURFRAYT THER CL', + CFPCFU(17)='SURFRAYT DIR SUR', + CFPDOM(1)='FRANGP0025', + CFPFMT='LALON', + CFPPHY(1)='SURFTEMPERATURE', + CFPPHY(2)='INTSURFGEOPOTENT', + CFPPHY(3)='SURFRESERV.NEIGE', + CFPXFU(1)='CLSTEMPERATURE', + CFPXFU(2)='CLSHUMI.RELATIVE', + CFPXFU(3)='CLSVENT.ZONAL', + CFPXFU(4)='CLSVENT.MERIDIEN', + CFPXFU(5)='SURFNEBUL.TOTALE', + CFPXFU(6)='SURFNEBUL.HAUTE', + CFPXFU(7)='SURFNEBUL.MOYENN', + CFPXFU(8)='SURFNEBUL.BASSE', + CFPXFU(9)='CLSMAXI.TEMPERAT', + CFPXFU(10)='CLSMINI.TEMPERAT', + CFPXFU(11)='CLPMHAUT.MOD.XFU', + CFPXFU(12)='SURFDIAGHAIL', + LCRITSNOWTEMP=.FALSE., + LFPCAPEX=.TRUE., + LFPMOIS=.TRUE., + LFPPACKING=.FALSE., + LWIDER_DOM=.TRUE., + L_READ_MODEL_DATE=.TRUE., + NFITI=1, + NFITV=1, + NFPCAPE=5, + NFPCLI=1, + NFPGRIB=1, + NFPINPHY=4, + NITERPV=8, + RENTRA=0.0001, + RFP3H(1)=10., + RFP3H(2)=20., + RFP3H(3)=35., + RFP3H(4)=50., + RFP3H(5)=75., + RFP3H(6)=100., + RFP3H(7)=150., + RFP3H(8)=200., + RFP3H(9)=250., + RFP3H(10)=375., + RFP3H(11)=500., + RFP3H(12)=625., + RFP3H(13)=750., + RFP3H(14)=875., + RFP3H(15)=1000., + RFP3H(16)=1125., + RFP3H(17)=1250., + RFP3H(18)=1375., + RFP3H(19)=1500., + RFP3H(20)=1750., + RFP3H(21)=2000., + RFP3H(22)=2250., + RFP3H(23)=2500., + RFP3H(24)=2750., + RFP3H(25)=3000., + RFP3I(1)=-273.15, + RFP3I(2)=-263.15, + RFP3I(3)=-261.15, + RFP3I(4)=-253.15, + RFP3P(1)=10000., + RFP3P(2)=12500., + RFP3P(3)=15000., + RFP3P(4)=17500., + RFP3P(5)=20000., + RFP3P(6)=22500., + RFP3P(7)=25000., + RFP3P(8)=27500., + RFP3P(9)=30000., + RFP3P(10)=35000., + RFP3P(11)=40000., + RFP3P(12)=45000., + RFP3P(13)=50000., + RFP3P(14)=55000., + RFP3P(15)=60000., + RFP3P(16)=65000., + RFP3P(17)=70000., + RFP3P(18)=75000., + RFP3P(19)=80000., + RFP3P(20)=85000., + RFP3P(21)=90000., + RFP3P(22)=92500., + RFP3P(23)=95000., + RFP3P(24)=100000., + RFP3PV(1)=0.0000015, + RFP3PV(2)=0.000002, + RFPCD2=5., + RFPCSAB=50., + RFPVCAP=7000., + / + &NAMFPD + NLAT(1)=41, + NLON(1)=41, + RLONC(1)=-0.71, + RLATC(1)=44.8, + RDELX(1)=0.025, + RDELY(1)=0.025, + / + &NAMFPDY2 + / + &NAMFPDYF + / + &NAMFPDYH + / + &NAMFPDYI + / + &NAMFPDYP + / + &NAMFPDYS + / + &NAMFPDYT + / + &NAMFPDYV + / + &NAMFPF + NFMAX(1)=60, + NFMAX(2)=80, + / + &NAMFPG + NFPDISTRIB=1, + / + &NAMFPIOS + / + &NAMFPMOVE + / + &NAMFPPHY + / + &NAMFPSC2 + NFPROMA=-50, + / + &NAMFPSC2_DEP + NFPROMA_DEP=-50, + / + &NAMGEM + / + &NAMGFL + NGFL_EZDIAG=4, + YEZDIAG_NL(1)%CNAME='EZDIAG01', + YEZDIAG_NL(1)%LREQOUT=.FALSE., + YEZDIAG_NL(2)%CNAME='EZDIAG02', + YEZDIAG_NL(2)%LREQOUT=.FALSE., + YEZDIAG_NL(3)%CNAME='EZDIAG03', + YEZDIAG_NL(3)%LREQOUT=.FALSE., + YEZDIAG_NL(4)%CNAME='INPRRTOT3D', + YEZDIAG_NL(4)%LREQOUT=.TRUE., + YG_NL%LQM=.TRUE., + YG_NL%LSLHD=.TRUE., + YG_NL%NCOUPLING=-1, + YG_NL%NREQIN=1, + YG_NL%REFVALC=0., + YIRAD_NL%LGP=.TRUE., + YI_NL%LQM=.TRUE., + YI_NL%LSLHD=.TRUE., + YI_NL%NCOUPLING=-1, + YI_NL%NREQIN=1, + YI_NL%REFVALC=0., + YLRAD_NL%LGP=.TRUE., + YL_NL%LQM=.TRUE., + YL_NL%LSLHD=.TRUE., + YL_NL%NCOUPLING=-1, + YL_NL%NREQIN=1, + YL_NL%REFVALC=0., + YQ_NL%LCOMAD=.TRUE., + YQ_NL%LQM=.TRUE., + YQ_NL%LSLHD=.FALSE., + YQ_NL%NREQIN=1, + YR_NL%LQM=.TRUE., + YR_NL%LSLHD=.TRUE., + YR_NL%NCOUPLING=-1, + YR_NL%NREQIN=1, + YR_NL%REFVALC=0., + YS_NL%LQM=.TRUE., + YS_NL%LSLHD=.TRUE., + YS_NL%NCOUPLING=-1, + YS_NL%NREQIN=1, + YS_NL%REFVALC=0., + YTKE_NL%NCOUPLING=0, + YTKE_NL%NREQIN=1, + / + &NAMGRIB + / + &NAMGWD + / + &NAMGWDIAG + / + &NAMGWWMS + / + &NAMIAU + ALPHAIAU=0.5, + LIAU=.FALSE., + TSTARTIAU=1800, + TSTOPIAU=5340, + / + &NAMICE + / + &NAMINI + LDFI=.FALSE., + / + &NAMINTFLEX + / + &NAMIOMI + / + &NAMIOS + / + &NAMIO_SERV + NIO_SERV_BUF_MAXSIZE=20, + NIO_SERV_METHOD=2, + NMSG_LEVEL_CLIENT=0, + NMSG_LEVEL_SERVER=0, + NPROCESS_LEVEL=5, + NPROC_IO=0, + / + &NAMJBCODES + / + &NAMJFH + / + &NAMJG + / + &NAMLCZ + / + &NAMLSFORC + / + &NAMMARS + / + &NAMMCC + / + &NAMMCUF + / + &NAMMKODB + / + &NAMMODERR + / + &NAMMTS + / + &NAMMWAVE + / + &NAMNPROF + / + &NAMNUD + / + &NAMOBS + / + &NAMONEDVAR + / + &NAMOOPS + / + &NAMOPH + CFNHWF='ECHIS', + LINC=.TRUE., + NTIMEFMT=1, + / + &NAMOPTCMEM + / + &NAMPAR0 + LOPT_SCALAR=.TRUE., + NPRINTLEV=1, + LMPOFF=.FALSE., + MBX_SIZE=2048000000, + MP_TYPE=2, + NOUTPUT=1, + NPROC=$NPROC, +$NPRTRW_NPRTRV + / + &NAMPAR1 + LEQ_REGIONS=.FALSE., + LSLONDEM=.TRUE., + LSPLIT=.TRUE., + LSYNC_SLCOM=.FALSE., + LSYNC_TRANS=.FALSE., + L_GATHERV_WRGP=.FALSE., + NCOMBFLEN=1800000, + NSTRIN=$NSTRIN, + NSTROUT=$NSTROUT, + / + &NAMPARAR + CFRAC_ICE_ADJUST='S', + CFRAC_ICE_SHALLOW_MF='S', + CMICRO='OLD3', + LOCND2=.TRUE., + CSEDIM='STAT', + CSNOWRIMING='M90', + LCONVHG=.TRUE., + LCRFLIMIT=.TRUE., + LCRIAUTI=.TRUE., + LEVLIMIT=.TRUE., + LFEEDBACKT=.TRUE., + LFPREC3D=.TRUE., + LNULLWETG=.TRUE., + LNULLWETH=.TRUE., + LOLSMC=.TRUE., + LOSEDIC=.TRUE., + LOSIGMAS=.TRUE., + LOSUBG_COND=.TRUE., + LSEDIM_AFTER=.FALSE., + LWETGPOST=.TRUE., + LWETHPOST=.TRUE., + NMAXITER_MICRO=1, + NPRINTFR=10000, + NPTP=1, + RCRIAUTC=0.001, + RCRIAUTI=0.0002, + RT0CRIAUTI=-5., + VSIGQSAT=0.02, + XFRACM90=0.1, + XMRSTEP=0.00005, + XSPLIT_MAXCFL=0.8, + XTSTEP_TS=0., + / + &NAMPHMSE + LPGDFWR=.FALSE., + / + &NAMPHY + LAERODES=.TRUE., + LAEROLAN=.TRUE., + LAEROSEA=.TRUE., + LAEROSOO=.TRUE., + LEDR=.TRUE., + LMPHYS=.TRUE., + LO3ABC=.TRUE., + LRAYFM=.TRUE., + / + &NAMPHY0 + ALMAV=300., + BEDIFV=0.05, + ECMNP=3000., + GCCSV=0., + GCVADS=0.8, + GCVALFA=0.000045, + GCVBETA=0.2, + GCVMLT=0.00016, + GCVNU=0.000025, + GCVPSI=1., + GCVPSIE=1., + GDDEVA=0.25, + GDDSDE=0.5, + GWDCD=6., + HUCOE=0.5, + HUTIL=1.8, + QSSC=400., + QSSUSC=0.75, + QSSUSS=0.4, + QSSUSV=250., + QSUSXC=0.0002, + QSUSXS=0.0003, + QXRAL=130., + QXRDEL=0.49, + QXRHX=0.99, + QXRR=0.25, + RCVEVAP=0.25, + REFLKUO=5000., + REVGSL=15., + SCO=-20., + TDDGP=0.8, + TENTR=0.0000025, + TENTRX=0.00008, + TUDGP=0.8, + UHDIFV=0.0008, + USURIC=0.175, + USURICE=0.5, + USURICL=1., + USURID=0.1, + USURIDE=0.25, + VZ0CM=0.00015, + XMAXLM=5000., + XMINLM=10., + / + &NAMPHY1 + ALBMIN=0.65, + ALCRIN=0.75, + GCGEL=0.00003, + GCGELS=0.00005, + GNEIMX=1.8, + GNEIMXS=1.8, + RCTVEG(3)=0.000012, + RCTVEG(4)=0.00001, + / + &NAMPHY2 + FACRAF=3.8, + HTKERAF=20., + LMULAF=.TRUE., + LRAFTKE=.TRUE., + LRAFTUR=.TRUE., + XDAMP=1., + XMULAF=-1.85, + / + &NAMPHY3 + / + &NAMPHYDS + / + &NAMPONG + / + &NAMPPC + / + &NAMPPVI + / + &NAMPRE + / + &NAMRAD15 + / + &NAMRADCMEM + / + &NAMRCF + / + &NAMRCOEF + / + &NAMRES + / + &NAMRGRI + / + &NAMRINC + / + &NAMRIP + TSTEP=50., + CSTOP='h2', + / + &NAMRIP0 + / + &NAMRLX + / + &NAMSATS + LPARTIAL_COEF_FILES=.TRUE., + / + &NAMSCC + / + &NAMSCEN + / + &NAMSCM + / + &NAMSEKF + / + &NAMSENS + / + &NAMSFXCMP + CFLDNAME(1)='????????????????', + NBBITS(1)=24, + / + &NAMSIMPHL + / + &NAMSPNG + / + &NAMSPSDT + / + &NAMSTA + / + &NAMSTOPH + / + &NAMSWE + / + &NAMTESTVAR + / + &NAMTHLIM + / + &NAMTOPH + ETCVIM=5000., + ETNEBU=5000., + ETPLUI=5000., + XDRMTK=6.0D-7, + XDRMTP=800., + XDRMUK=3.0D-7, + XDRMUP=800., + / + &NAMTRAJP + / + &NAMTRANS + / + &NAMTRANS0 + / + &NAMTS + / + &NAMVAR + / + &NAMVARBC + / + &NAMVARBC_AIREP + / + &NAMVARBC_ALLSKY + / + &NAMVARBC_GBRAD + / + &NAMVARBC_RAD + / + &NAMVARBC_SFCOBS + / + &NAMVARBC_TCWV + / + &NAMVARBC_TO3 + / + &NAMVAREPS + / + &NAMVDF + / + &NAMVDOZ + / + &NAMVOLCANO + / + &NAMVRTL + / + &NAMVV0 + / + &NAMVV1 + / + &NAMVWRK + / + &NAMWAVELETJB + / + &NAMXFU + LXCLP=.TRUE., + LXCLS=.TRUE., + LXFU=.TRUE., + LXNEBPA=.TRUE., + LXNEBTT=.TRUE., + LXNUVCLS=.TRUE., + LXPLS=.TRUE., + LXPLSG=.TRUE., + LXQCLS=.TRUE., + LXR=.TRUE., + LXSOIL=.FALSE., + LXTHW=.TRUE., + LXTRT=.TRUE., + LXTTCLS=.TRUE., + LXXDIAGH=.TRUE., + LXXGST=.TRUE., + NFRRAZ=72, + NRAZTS(0)=0, + / + &NAM_CANAPE + / + &NAM_DISTRIBUTED_VECTORS + / + &NAPHLC + / + &NEMCT0 + / + &NEMDIM + / + &NEMDYN + / + &NEMELBC0A + LESPCPL=.TRUE., + NBICNHX=2, + NBICOP=2, + NBICOT=2, + NBICOU=2, + NBICPD=2, + NBICVD=2, + NECRIPL=1, + / + &NEMELBC0B + NEFRSPCPL=1, + NEK0=20, + NEK1=30, + NEN1=4, + NEN2=8, + SPNUDDIV=0.01, + SPNUDQ=0., + SPNUDT=0.01, + SPNUDVOR=0.01, + TEFRCL=3600., + / + &NEMFPEZO + / + &NEMGEO + / + &NEMJK + / + &NEMVAR + / + &NEMWAVELET + / + &NAETLDIAG + / + &NAMMETHOX + / + &NAMSPP + / + &NAMACV + / + &NAMFPOBJ + / + &NAMNORGWD + / + &NAMTRAJ + / + &NAMSATSIM + / + &NAMDVISI + / + &NAMNUDGLH + / + &NAMPERTPAR + / +FIN +/bin/cat fort.4 + +/bin/cat <<FIN > EXSEG1.nam + &NAM_DIAG_ISBAN + LPGD=.TRUE., + LSURF_MISC_BUDGET=.TRUE., + / + &NAM_DIAG_SURFN + LCOEF=.TRUE., + LSURF_BUDGET=.TRUE., + N2M=2, + / + &NAM_ISBAN + CSCOND='NP89', + / + &NAM_REPROD_OPER + LREPROD_OPER=.TRUE., + / + &NAM_SEAFLUXN + CSEA_FLUX='ECUME', + LPWG=.FALSE., + LPRECIP=.FALSE., + LPWEBB=.FALSE., + / + &NAM_SSON + CROUGH='Z01D', + XFRACZ0=5., + LDSV=.FALSE., + / + &NAM_SURF_ATM + XRIMAX=0.2, + LNOSOF=.TRUE., + / + &NAM_SURF_CSTS + XZ0SN=0.01, + XZ0HSN=0.001, + XEMISSN=0.99, + / + &NAM_WRITE_DIAG_SURFN + LPROVAR_TO_DIAG=.FALSE., + LSELECT=.TRUE., +CSELECT(1)='T2M','HU2M','XX','YY','DX','DY','SST','Z0SEA','TS_WATER','Z0WATER','TG1','TG2','TG3','WG1','WG2','WG3','WGI1','WGI2','WGI3','WR','WSN_VEG1','RSN_VEG1','ASN_VEG','TSRAD_NAT','RESA','TROOF1','TROOF2','TROOF3','TROOF4','TROOF5','WS_ROOF','TROAD1','TROAD2','TROAD3','TROAD4','TROAD5','WS_ROAD','TWALL1','TWALL2','TWALL3','TWALL4','TWALL5','TI_BLD','T_WIN1','TI_ROAD','WSN_RF1','RSN_RF1','TSN_RF1','ASN_RF','WSN_RD1','RSN_RD1','TSN_RD1','ASN_RD','TCANYON','QCANYON','STORAGE_TYPE','MASDEV','VERSION','BUG','DIM_FULL','DTCUR','LAT0','LON0','RPK','BETA','LATORI','LONORI','IMAX','JMAX','RW_PRECIP','BUDC','SEA_OCEAN','SEA_SBL','WAT_SBL','SN_VEG_N','SN_VEG','LSNOW_FRAC_T','GLACIER','TEMPARP','NLITTER','NLITTLEVS','NSOILCARB','ISBA_CANOPY','SN_RF_N','SN_RF','SN_RD_N','SN_RD','SN_RD_TYP','SN_RF_TYP','TEB_CANOPY','STORAGETYPE','CARTESIAN','GRID_TYPE','SN_VEG_TYP','RESPSL','ROAD_DIR','WALL_OPT','LAI','VEG','RSMIN','DG2','_FBUF_SIZE','_FBUF_DIM1','_FBUF_DIM2','_FBUF_NAME','_FBUF_TYPE','_FBUF_MASK','LCPL_GCM','HANDLE_SIC','SSS', + / + &NAM_WRITE_SURF_ATM + LNOWRITE_TEXFILE=.TRUE., + / +FIN +/bin/cat EXSEG1.nam + +# ***************************************** +# * Acquisition du fichier de demarrage * +# ***************************************** + +echo +for hh in 0 1 2 3 4 5 6 ; do + N=`expr $hh / 1 ` + set -x + ln -s $rekchemin/data/aro/$case/ELSCFFCSTALBC000${N}_l15 ELSCF${CNMEXP}ALBC00${N} + set +x +done +set -x +ln -s $rekchemin/data/aro/$case/ICMSHFCSTINIT_l15 ICMSH${CNMEXP}INIT +ln -s $rekchemin/data/aro/$case/ICMSHFCSTINIT.sfx ICMSH${CNMEXP}INIT.sfx +ln -s $rekchemin/data/surfex/v8/ecoclimapI_covers_param.bin . +ln -s $rekchemin/data/surfex/v8/ecoclimapII_eu_covers_param.bin . +ln -s $rekchemin/data/surfex/v8/ecoclimapII_af_covers_param.bin . +ln -s $rekchemin/data/aro/$case/Const.Clim Const.Clim +ln -s $rekchemin/data/aro/$case/Const.Clim.sfx Const.Clim.sfx +ln -s $rekchemin/data/aro/$case/const.clim.FRANGP0025 const.clim.FRANGP0025 +ln -s $rekchemin/data/rttov12/rtcoef_meteosat_9_seviri.dat . +ln -s $rekchemin/data/rttov12/rtcoef_meteosat_10_seviri.dat . +ln -s $rekchemin/data/rttov12/sccldcoef_meteosat_9_seviri.dat . +set +x +tar xfz $rekchemin/data/rtm/radiation_params.47r1_light.tgz + +# *************** +# * Chargement * +# *************** + +echo +set -x +\ln -s $LOADIR/MASTERODB MASTER +set +x +if ldd MASTER | grep openmpi > /dev/null; then + #On est sur PC + MPILIB=$(ldd MASTER | grep openmpi | tail -1 | awk '{print $3}' | awk -F "/" '{print $(NF-2)}') + MPIRUN="$(echo $(dirname $(dirname $(ldd MASTER | grep openmpi| tail -1 | awk '{print $3}'))))/bin/orterun --oversubscribe -np $NPROC" + GRIB_API=$(dirname $(dirname $(ldd MASTER | grep grib_api | head -1 | awk '{print $3}') 2>/dev/null) 2>/dev/null) + ECCODES=$(dirname $(dirname $(ldd MASTER | grep eccodes | head -1 | awk '{print $3}') 2>/dev/null) 2>/dev/null) + export GRIB_SAMPLES_PATH=$GRIB_API/share/grib_api/ifs_samples/grib1 + export GRIB_DEFINITION_PATH=$GRIB_API/share/grib_api/definitions + export ECCODES_SAMPLES_PATH=$ECCODES/share/eccodes/ifs_samples/grib1 + export ECCODES_DEFINITION_PATH=$rekchemin/data/eccodes_extras_definitions:$ECCODES/share/eccodes/definitions +else + #On est sur HPC + #MPIRUN="$(echo $(dirname $(dirname $(ldd MASTER | grep libmpi| tail -1 | awk '{print $3}'))))/bin/mpirun -wdir $PWD" + NNODES=$SLURM_JOB_NUM_NODES + MPITASKS_PER_NODE=$((SLURM_NTASKS/SLURM_JOB_NUM_NODES)) + MPI_TASKS=$SLURM_NTASKS + MPIRUN="/opt/softs/mpiauto/mpiauto -np $MPI_TASKS -nnp $MPITASKS_PER_NODE --" + export OMP_STACKSIZE=4G + export KMP_STACKSIZE=4G + export KMP_MONITOR_STACKSIZE=4G + export DR_HOOK=1 + export DR_HOOK_IGNORE_SIGNALS=-1 + export DR_HOOK_SILENT=1 + export DR_HOOK_SHOW_PROCESS_OPTIONS=0 + export MPL_MBX_SIZE=2048000000 + export EC_PROFILE_HEAP=0 + export EC_PROFILE_MEM=0 + export EC_MPI_ATEXIT=0 + export EC_MEMINFO=0 + export OPENBLAS_NUM_THREADS=1 + export MKL_CBWR="AUTO,STRICT" + export MKL_NUM_THREADS=1 + export MKL_DEBUG_CPU_TYPE=5 + export ECCODES_SAMPLES_PATH=/opt/softs/libraries/ICC_2018.5.274/eccodes-2.17.0/share/eccodes/ifs_samples/grib1 + export ECCODES_DEFINITION_PATH=/opt/softs/libraries/ICC_2018.5.274/eccodes-2.17.0/share/eccodes/definitions +fi +echo $MPIRUN +set +x +if [ ! -f MASTER ] ; then echo No executable MASTER;exit 1;fi + +# *************** +# * Execution * +# *************** + +echo +echo OMP_NUM_THREADS=$OMP_NUM_THREADS +set -x +ulimit -s unlimited +$MPIRUN $PWD/MASTER >lola +set +x +echo +##if [ -f lola ] ; then +## echo;echo Standard output :;echo;cat lola +##fi +##if [ -f stderr.* ] ; then +## for file in stderr.* ; do +## echo;echo $file :;cat $file +## done +##fi +##if [ -f stdout.* ] ; then +##echo;echo stdout :;echo;cat stdout.* +##fi +##if [ -a NODE.001_01 ] ; then +## for file in NODE* ; do +## echo;echo Listing $file;echo +## cat $file +## done +##fi +##if [ $(find . -name "drhook.prof.*" | wc -l) -ne 0 ] ; then +### Top 25 for each MPI task : +## for file in drhook.prof.* ; do +## echo;echo $file :;head -38 $file +## done +##fi +#cat drhook.prof.* | perl -w $HOME/bin/drhook_merge_walltime_max.pl + +# ******************* +# * Sauvegardes * +# ******************* + +ls +#if [ -f PFFPOS000+0000 ] ; then +# cp PFFPOS000+0000 $WAIT_QUEUE/PFFPOS000+0000.$PBS_JOBID +#fi +cp lola NODE.001_01 ICMSHFPOS+00* DHFDLFPOS+00* $OUTPUTDIR/ +/bin/rm fort.4 EXSEG1.nam lola ICMSHFPOS+0000* PFFPOSFRANGP0025+0000* ICMSHFPOS+0001* +/bin/rm PFFPOSFRANGP0025+0001* ICMSHFPOS+0002* ECHIS PFFPOSFRANGP0025+0002* DHFDLFPOS+00* +/bin/rm ECHFP NODE.001_01 ifs.stat $(tar tfz $rekchemin/data/rtm/radiation_params.47r1_light.tgz) + +# **************** +# * Epilogue * +# **************** + +ls -ltr | grep -v "\->" +echo Wait_queue : +ls -ltr $TMPWAIT +cd $TMPDIR +\rm -rf rundir.$$ +\rm -rf wait_queue.$$ +date +set +x diff --git a/tools/conf_tests/small_3D_np1/aro48t3.sh b/tools/conf_tests/small_3D_np1/aro48t3.sh new file mode 100755 index 0000000000000000000000000000000000000000..a833e9977afcafae3b60e863f478557e7d97e7be --- /dev/null +++ b/tools/conf_tests/small_3D_np1/aro48t3.sh @@ -0,0 +1,1207 @@ +#!/bin/bash +#SBATCH -n 1 +#SBATCH --mem=20000 +#SBATCH --export=MYLIB,HOME,HOMEPACK,TMPDIR,OUTPUTDIR,TESTDIR +#SBATCH -t 00:10:00 +#SBATCH -N 1 +#SBATCH -p normal256 + +#The MYLIB variable must contain the gmkpack pack name +#The TESTDIR variable must contain the test directory +#Results will be stored in the local directory + +#Other environment varaibles that can be set: +#OUTPUTDIR + +date + +OUTPUTDIR=${OUTPUTDIR:-$PWD} +case=riette2 +#rekchemin="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" #Resources for the run must be in the same directory as this script +rekchemin=$TESTDIR + +NPROC=1 +NSTRIN=$NPROC +NSTROUT=1 +NPRTRW_NPRTRV="" +NPRTRW_NPRTRV=" NPRTRW=$NPROC, + NPRTRV=1," +export OMP_NUM_THREADS=1 + +#MYLIB=48t1_main.01%jpdup + +export DR_HOOK=1 +#export DR_HOOK_IGNORE_SIGNALS=-1 +export DR_HOOK_NOT_MPI=1 +export DR_HOOK_SILENT=1 +export DR_HOOK_OPT= + +export EC_PROFILE_HEAP=0 +export EC_PROFILE_MEM=0 +export EC_MPI_ATEXIT=0 +export DR_HOOK_SHOW_PROCESS_OPTIONS=0 +export EC_MEMINFO=0 +export TVSEARCHPATH=$SOURCE + +HOMEPACK=${HOMEPACK:=$HOME/pack} +SOURCE=$HOMEPACK/$MYLIB/src/local +LOADIR=$HOMEPACK/$MYLIB/bin + +TMPDIR=${TMPDIR:=$HOME/tmp} +TMPLOC=$TMPDIR/rundir.$$ +TMPWAIT=$TMPDIR/wait_queue.$$ +mkdir $TMPWAIT +mkdir $TMPLOC +cd $TMPLOC + +export RTTOV_COEFDIR=$PWD + +# ************************** +# * Saisie des NAMELISTS * +# ************************** + +CNMEXP='FPOS' + +echo +/bin/cat <<FIN > fort.4 + &NACIETEO + / + &NACOBS + / + &NACTAN + / + &NACTEX + / + &NACVEG + / + &NADOCK + / + &NAEAEM7 + / + &NAEAER + / + &NAECOAPHY + / + &NAEPHLI + / + &NAEPHY + / + &NAERAD + LRRTM=.TRUE., + LSRTM=.FALSE., + NAER=1, + NICEOPT=3, + NLIQOPT=3, + NOVLP=6, + NOZOCL=2, + NRADFR=18, + NRADIP=3, + NRADLP=2, + NSW=6, + RLWINHF=1, + RRE2DE=0.64952, + RSWINHF=1, + / + &NAERCLI + / + &NAEVOL + / + &NAIMPO + / + &NALORI + / + &NAMAFN + GFP_CLSG%CLNAME='SURFACCGRAUPEL', + GFP_CLSP%CLNAME='SURFACCPLUIE', + GFP_CLSS%CLNAME='SURFACCNEIGE', + GFP_SFIS%IBITS=16, + GFP_ST%CLNAME='SURFTEMPERATURE', + GFP_ST%IANO=0, + GFP_ST%IBITS=12, + GFP_X10U%CLNAME='CLSVENT.ZONAL', + GFP_X10U%IANO=0, + GFP_X10U%IBITS=12, + GFP_X10V%CLNAME='CLSVENT.MERIDIEN', + GFP_X10V%IANO=0, + GFP_X10V%IBITS=12, + GFP_X2RH%CLNAME='CLSHUMI.RELATIVE', + GFP_X2RH%IANO=0, + GFP_X2RH%IBITS=12, + GFP_X2T%CLNAME='CLSTEMPERATURE', + GFP_X2T%IANO=1, + GFP_XCCC%IBITS=8, + GFP_XHCC%IBITS=8, + GFP_XLCC%IBITS=8, + GFP_XLSG%CLNAME='SURFINSGRAUPEL', + GFP_XLSP%CLNAME='SURFINSPLUIE', + GFP_XLSS%CLNAME='SURFINSNEIGE', + GFP_XMCC%IBITS=8, + GFP_XN2T%IBITS=12, + GFP_XTCC%IBITS=8, + GFP_XUGST%CLNAME='CLSU.RAF60M.XFU', + GFP_XUGST%IANO=0, + GFP_XUGST%IBITS=12, + GFP_XVGST%CLNAME='CLSV.RAF60M.XFU', + GFP_XVGST%IANO=0, + GFP_XVGST%IBITS=12, + GFP_XX2T%IBITS=12, + GFP_XXDIAGH%IBITS=12, + TFP_ABS%ZFK=32., + TFP_CLF%IBITS=6, + TFP_EDR%CLNAME='EDR', + TFP_EDR%IBITS=16, + TFP_EDR%IGRIB=136, + TFP_GR%IBITS=12, + TFP_HL%IBITS=12, + TFP_HTB%IBITS=16, + TFP_HTB%LLGP=.TRUE., + TFP_HU%IBITS=12, + TFP_MSAT9C2%IBITS=12, + TFP_MSAT9C6%IBITS=12, + TFP_MSLNH%IBITS=12, + TFP_PV%ZFK=64., + TFP_RCLS%IBITS=12, + TFP_RR%IBITS=12, + TFP_SN%IBITS=12, + TFP_T%IBITS=12, + TFP_TCLS%IBITS=12, + TFP_TH%IBITS=12, + TFP_THPW%IBITS=12, + TFP_THV%IBITS=12, + TFP_TN%IBITS=12, + TFP_TWV%IBITS=12, + TFP_TX%IBITS=12, + TFP_U%IBITS=12, + TFP_V%IBITS=12, + TFP_VOR%ZFK=32., + TFP_VV%ZFK=32., + / + &NAMARG + CNMEXP='${CNMEXP}', + LECMWF=.FALSE., + LELAM=.TRUE., + LSLAG=.TRUE., + NCONF=1, + NSUPERSEDE=1, + / + &NAMARPHY + LKFBCONV=.FALSE., + LKFBD=.FALSE., + LKFBS=.FALSE., + LMFSHAL=.TRUE., + LMICRO=.TRUE., + LMPA=.TRUE., + LMSE=.TRUE., + LTURB=.TRUE., + / + &NAMCA + / + &NAMCAPE + / + &NAMCFU + LCUMFU=.TRUE., + LFPLS=.TRUE., + LFPLSG=.TRUE., + LFR=.TRUE., + LFRRC=.TRUE., + LFSF=.TRUE., + LNEBPAR=.TRUE., + LNEBTT=.TRUE., + LRAYD=.TRUE., + LRAYS=.TRUE., + / + &NAMCHEM + / + &NAMCHET + / + &NAMCHK + / + &NAMCLA + / + &NAMCLDP + / + &NAMCLI + / + &NAMCLOP15 + / + &NAMCLTC + / + &NAMCOK + / + &NAMCOM + / + &NAMCOSJO + / + &NAMCOUPLO4 + / + &NAMCT0 + CFPNCF='ECHFP', + CNPPATH=' ', + LAROME=.TRUE., + LNHEE=.TRUE., + LSCREEN_OPENMP=.FALSE., + LSPRT=.TRUE., + LTWOTL=.TRUE., + NFPOS=1, + NFRSDI=18, + NSDITS(0)=0, + NFRHIS=72, + NHISTS(0)=0, + NFRPOS=72, + NPOSTS(0)=0, + NFRSFXHIS=72, + NSFXHISTS(0)=0, + NFRDHFD=72, + NDHFDTS(0)=0, + / + &NAMCT1 + LRFILAF=.FALSE., + N1HIS=1, + N1POS=1, + N1RES=0, + N1SDI=1, + N1SFXHIS=1, + N1GDI=0, + / + &NAMCUMF + / + &NAMCUMFS + / + &NAMCVER + / + &NAMCVMNH + / + &NAMDDH + LDDH_OMP=.TRUE., + LHDDOP=.TRUE., + LHDHKS=.TRUE., + LHDEFD=.TRUE., + LFLEXDIA=.TRUE., + BDEDDH(1,1)=3, + BDEDDH(2,1)=1, + BDEDDH(3,1)=358.8 + BDEDDH(4,1)=45.1 + BDEDDH(5,1)=360.3 + BDEDDH(6,1)=44.5 + / + &NAMDFI + / + &NAMDIM + NPROMA=-50, + / + &NAMDIMO + / + &NAMDIM_TRAJ + / + &NAMDPHY + / + &NAMDPRECIPS + / + &NAMDYN + LADVF=.TRUE., + LQMPD=.FALSE., + LQMT=.FALSE., + LQMVD=.FALSE., + LRHDI_LASTITERPC=.TRUE., + NITMP=4, + NSITER=1, + NSPDLAG=3, + NSVDLAG=3, + NTLAG=3, + NVLAG=3, + NWLAG=3, + RDAMPDIV=20., + RDAMPPD=20., + RDAMPQ=0., + RDAMPT=0., + RDAMPVD=20., + RDAMPVOR=20., + REPS1=0., + REPS2=0., + REPSM1=0., + REPSM2=0., + REPSP1=0., + SDRED=1., + SIPR=90000., + SITR=350., + SITRA=100., + SLHDA0=0.25, + SLHDD00=0.000065, + VESL=0.05, + XIDT=0., + ZSLHDP1=1.7, + ZSLHDP3=0.6, + / + &NAMDYNA + LCOMADH=.TRUE., + LCOMADV=.FALSE., + LCOMAD_GFL=.TRUE., + LCOMAD_SP=.TRUE., + LCOMAD_SPD=.TRUE., + LCOMAD_SVD=.TRUE., + LCOMAD_T=.TRUE., + LCOMAD_W=.TRUE., + LGWADV=.TRUE., + LNESC=.TRUE., + LPC_CHEAP=.TRUE., + LPC_FULL=.TRUE., + LRDBBC=.FALSE., + LSETTLS=.FALSE., + LSETTLST=.TRUE., + LSLHD_GFL=.TRUE., + LSLHD_OLD=.FALSE., + LSLHD_SPD=.FALSE., + LSLHD_SVD=.FALSE., + LSLHD_T=.FALSE., + LSLHD_W=.FALSE., + ND4SYS=2, + NDLNPR=1, + NPDVAR=2, + NVDVAR=4, + SLHDEPSH=0.08, + SLHDKMAX=6, + / + &NAMDYNCORE + / + &NAMEMIS_CONF + / + &NAMENKF + / + &NAMFA + CMODEL='OUTPUTID', + LEXTERN=.TRUE., + LSUPPDATE=.FALSE., + NBITCS=-1, + NBITPG=-1, + NSTRON=-1, + / + &NAMFAINIT + JPXTRO=2000, + / + &NAMFPC + CFP2DF(1)='SURFPRESSION', + CFP2DF(2)='MSL_NHPRESSURE', + CFP2DF(3)='SURFTOT.WAT.VAPO', + CFP2DF(4)='SURFISOTPW0.MALT', + CFP2DF(5)='SURFCAPE.POS.F00', + CFP2DF(6)='C002_METEOSAT_09_SEVIRI.POS', + CFP2DF(7)='C006_METEOSAT_09_SEVIRI.POS', + CFP2DF(8)='SURFREFLECT.MAX', + CFP2DF(9)='SURFISOTPW1.MALT', + CFP2DF(10)='SURFISOTPW2.MALT', + CFP3DF(1)='GEOPOTENTIEL', + CFP3DF(2)='TEMPERATURE', + CFP3DF(3)='VENT_ZONAL', + CFP3DF(4)='VENT_MERIDIEN', + CFP3DF(5)='HUMI_RELATIVE', + CFP3DF(6)='THETA_PRIM_W', + CFP3DF(7)='PRESSURE', + CFP3DF(8)='ABS_VORTICITY', + CFP3DF(9)='VITESSE_VERTICALE', + CFP3DF(10)='TEMPE_POTENT', + CFP3DF(11)='POT_VORTICIT', + CFP3DF(12)='SIM_REFLECTI', + CFP3DF(13)='RAIN', + CFP3DF(14)='SNOW', + CFP3DF(15)='GRAUPEL', + CFP3DF(16)='ICE_CRYSTAL', + CFP3DF(17)='CLOUD_WATER', + CFP3DF(18)='VERT.VELOCIT', + CFP3DF(19)='DIVERGENCE', + CFP3DF(20)='THETA_VIRTUA', + CFP3DF(21)='TKE', + CFP3DF(22)='CLOUD_FRACTI', + CFP3DF(23)='ISOT_ALTIT', + CFP3DF(24)='EDR', + CFPCFU(1)='SURFTENS.TOTA.ZO', + CFPCFU(2)='SURFTENS.TOTA.ME', + CFPCFU(3)='SURFACCPLUIE', + CFPCFU(4)='SURFACCNEIGE', + CFPCFU(5)='SURFACCGRAUPEL', + CFPCFU(6)='SOMMFLU.RAY.SOLA', + CFPCFU(7)='SURFFLU.RAY.SOLA', + CFPCFU(8)='SOMMFLU.RAY.THER', + CFPCFU(9)='SURFFLU.RAY.THER', + CFPCFU(10)='SURFFLU.LAT.MTOT', + CFPCFU(11)='SURFFLU.MTOTA.NE', + CFPCFU(12)='SURFFLU.CHA.SENS', + CFPCFU(13)='SURFRAYT SOLA DE', + CFPCFU(14)='SURFRAYT THER DE', + CFPCFU(15)='SURFRAYT SOL CL', + CFPCFU(16)='SURFRAYT THER CL', + CFPCFU(17)='SURFRAYT DIR SUR', + CFPDOM(1)='FRANGP0025', + CFPFMT='LALON', + CFPPHY(1)='SURFTEMPERATURE', + CFPPHY(2)='INTSURFGEOPOTENT', + CFPPHY(3)='SURFRESERV.NEIGE', + CFPXFU(1)='CLSTEMPERATURE', + CFPXFU(2)='CLSHUMI.RELATIVE', + CFPXFU(3)='CLSVENT.ZONAL', + CFPXFU(4)='CLSVENT.MERIDIEN', + CFPXFU(5)='SURFNEBUL.TOTALE', + CFPXFU(6)='SURFNEBUL.HAUTE', + CFPXFU(7)='SURFNEBUL.MOYENN', + CFPXFU(8)='SURFNEBUL.BASSE', + CFPXFU(9)='CLSMAXI.TEMPERAT', + CFPXFU(10)='CLSMINI.TEMPERAT', + CFPXFU(11)='CLPMHAUT.MOD.XFU', + CFPXFU(12)='SURFDIAGHAIL', + LCRITSNOWTEMP=.FALSE., + LFPCAPEX=.TRUE., + LFPMOIS=.TRUE., + LFPPACKING=.FALSE., + LWIDER_DOM=.TRUE., + L_READ_MODEL_DATE=.TRUE., + NFITI=1, + NFITV=1, + NFPCAPE=5, + NFPCLI=1, + NFPGRIB=1, + NFPINPHY=4, + NITERPV=8, + RENTRA=0.0001, + RFP3H(1)=10., + RFP3H(2)=20., + RFP3H(3)=35., + RFP3H(4)=50., + RFP3H(5)=75., + RFP3H(6)=100., + RFP3H(7)=150., + RFP3H(8)=200., + RFP3H(9)=250., + RFP3H(10)=375., + RFP3H(11)=500., + RFP3H(12)=625., + RFP3H(13)=750., + RFP3H(14)=875., + RFP3H(15)=1000., + RFP3H(16)=1125., + RFP3H(17)=1250., + RFP3H(18)=1375., + RFP3H(19)=1500., + RFP3H(20)=1750., + RFP3H(21)=2000., + RFP3H(22)=2250., + RFP3H(23)=2500., + RFP3H(24)=2750., + RFP3H(25)=3000., + RFP3I(1)=-273.15, + RFP3I(2)=-263.15, + RFP3I(3)=-261.15, + RFP3I(4)=-253.15, + RFP3P(1)=10000., + RFP3P(2)=12500., + RFP3P(3)=15000., + RFP3P(4)=17500., + RFP3P(5)=20000., + RFP3P(6)=22500., + RFP3P(7)=25000., + RFP3P(8)=27500., + RFP3P(9)=30000., + RFP3P(10)=35000., + RFP3P(11)=40000., + RFP3P(12)=45000., + RFP3P(13)=50000., + RFP3P(14)=55000., + RFP3P(15)=60000., + RFP3P(16)=65000., + RFP3P(17)=70000., + RFP3P(18)=75000., + RFP3P(19)=80000., + RFP3P(20)=85000., + RFP3P(21)=90000., + RFP3P(22)=92500., + RFP3P(23)=95000., + RFP3P(24)=100000., + RFP3PV(1)=0.0000015, + RFP3PV(2)=0.000002, + RFPCD2=5., + RFPCSAB=50., + RFPVCAP=7000., + / + &NAMFPD + NLAT(1)=41, + NLON(1)=41, + RLONC(1)=-0.71, + RLATC(1)=44.8, + RDELX(1)=0.025, + RDELY(1)=0.025, + / + &NAMFPDY2 + / + &NAMFPDYF + / + &NAMFPDYH + / + &NAMFPDYI + / + &NAMFPDYP + / + &NAMFPDYS + / + &NAMFPDYT + / + &NAMFPDYV + / + &NAMFPF + NFMAX(1)=60, + NFMAX(2)=80, + / + &NAMFPG + NFPDISTRIB=1, + / + &NAMFPIOS + / + &NAMFPMOVE + / + &NAMFPPHY + / + &NAMFPSC2 + NFPROMA=-50, + / + &NAMFPSC2_DEP + NFPROMA_DEP=-50, + / + &NAMGEM + / + &NAMGFL + NGFL_EZDIAG=4, + YEZDIAG_NL(1)%CNAME='EZDIAG01', + YEZDIAG_NL(1)%LREQOUT=.FALSE., + YEZDIAG_NL(2)%CNAME='EZDIAG02', + YEZDIAG_NL(2)%LREQOUT=.FALSE., + YEZDIAG_NL(3)%CNAME='EZDIAG03', + YEZDIAG_NL(3)%LREQOUT=.FALSE., + YEZDIAG_NL(4)%CNAME='INPRRTOT3D', + YEZDIAG_NL(4)%LREQOUT=.TRUE., + YG_NL%LQM=.TRUE., + YG_NL%LSLHD=.TRUE., + YG_NL%NCOUPLING=-1, + YG_NL%NREQIN=1, + YG_NL%REFVALC=0., + YIRAD_NL%LGP=.TRUE., + YI_NL%LQM=.TRUE., + YI_NL%LSLHD=.TRUE., + YI_NL%NCOUPLING=-1, + YI_NL%NREQIN=1, + YI_NL%REFVALC=0., + YLRAD_NL%LGP=.TRUE., + YL_NL%LQM=.TRUE., + YL_NL%LSLHD=.TRUE., + YL_NL%NCOUPLING=-1, + YL_NL%NREQIN=1, + YL_NL%REFVALC=0., + YQ_NL%LCOMAD=.TRUE., + YQ_NL%LQM=.TRUE., + YQ_NL%LSLHD=.FALSE., + YQ_NL%NREQIN=1, + YR_NL%LQM=.TRUE., + YR_NL%LSLHD=.TRUE., + YR_NL%NCOUPLING=-1, + YR_NL%NREQIN=1, + YR_NL%REFVALC=0., + YS_NL%LQM=.TRUE., + YS_NL%LSLHD=.TRUE., + YS_NL%NCOUPLING=-1, + YS_NL%NREQIN=1, + YS_NL%REFVALC=0., + YTKE_NL%NCOUPLING=0, + YTKE_NL%NREQIN=1, + / + &NAMGRIB + / + &NAMGWD + / + &NAMGWDIAG + / + &NAMGWWMS + / + &NAMIAU + ALPHAIAU=0.5, + LIAU=.FALSE., + TSTARTIAU=1800, + TSTOPIAU=5340, + / + &NAMICE + / + &NAMINI + LDFI=.FALSE., + / + &NAMINTFLEX + / + &NAMIOMI + / + &NAMIOS + / + &NAMIO_SERV + NIO_SERV_BUF_MAXSIZE=20, + NIO_SERV_METHOD=2, + NMSG_LEVEL_CLIENT=0, + NMSG_LEVEL_SERVER=0, + NPROCESS_LEVEL=5, + NPROC_IO=0, + / + &NAMJBCODES + / + &NAMJFH + / + &NAMJG + / + &NAMLCZ + / + &NAMLSFORC + / + &NAMMARS + / + &NAMMCC + / + &NAMMCUF + / + &NAMMKODB + / + &NAMMODERR + / + &NAMMTS + / + &NAMMWAVE + / + &NAMNPROF + / + &NAMNUD + / + &NAMOBS + / + &NAMONEDVAR + / + &NAMOOPS + / + &NAMOPH + CFNHWF='ECHIS', + LINC=.TRUE., + NTIMEFMT=1, + / + &NAMOPTCMEM + / + &NAMPAR0 + LOPT_SCALAR=.TRUE., + NPRINTLEV=1, + LMPOFF=.FALSE., + MBX_SIZE=2048000000, + MP_TYPE=2, + NOUTPUT=1, + NPROC=$NPROC, +$NPRTRW_NPRTRV + / + &NAMPAR1 + LEQ_REGIONS=.FALSE., + LSLONDEM=.TRUE., + LSPLIT=.TRUE., + LSYNC_SLCOM=.FALSE., + LSYNC_TRANS=.FALSE., + L_GATHERV_WRGP=.FALSE., + NCOMBFLEN=1800000, + NSTRIN=$NSTRIN, + NSTROUT=$NSTROUT, + / + &NAMPARAR + CFRAC_ICE_ADJUST='S', + CFRAC_ICE_SHALLOW_MF='S', + CMICRO='ICE3', + CSEDIM='STAT', + CSNOWRIMING='M90', + LCONVHG=.TRUE., + LCRFLIMIT=.TRUE., + LCRIAUTI=.TRUE., + LEVLIMIT=.TRUE., + LFEEDBACKT=.TRUE., + LFPREC3D=.TRUE., + LNULLWETG=.TRUE., + LNULLWETH=.TRUE., + LOLSMC=.TRUE., + LOSEDIC=.TRUE., + LOSIGMAS=.TRUE., + LOSUBG_COND=.TRUE., + LSEDIM_AFTER=.FALSE., + LWETGPOST=.TRUE., + LWETHPOST=.TRUE., + NMAXITER_MICRO=1, + NPRINTFR=10000, + NPTP=1, + RCRIAUTC=0.001, + RCRIAUTI=0.0002, + RT0CRIAUTI=-5., + VSIGQSAT=0.02, + XFRACM90=0.1, + XMRSTEP=0.00005, + XSPLIT_MAXCFL=0.8, + XTSTEP_TS=0., + / + &NAMPHMSE + LPGDFWR=.FALSE., + / + &NAMPHY + LAERODES=.TRUE., + LAEROLAN=.TRUE., + LAEROSEA=.TRUE., + LAEROSOO=.TRUE., + LEDR=.TRUE., + LMPHYS=.TRUE., + LO3ABC=.TRUE., + LRAYFM=.TRUE., + / + &NAMPHY0 + ALMAV=300., + BEDIFV=0.05, + ECMNP=3000., + GCCSV=0., + GCVADS=0.8, + GCVALFA=0.000045, + GCVBETA=0.2, + GCVMLT=0.00016, + GCVNU=0.000025, + GCVPSI=1., + GCVPSIE=1., + GDDEVA=0.25, + GDDSDE=0.5, + GWDCD=6., + HUCOE=0.5, + HUTIL=1.8, + QSSC=400., + QSSUSC=0.75, + QSSUSS=0.4, + QSSUSV=250., + QSUSXC=0.0002, + QSUSXS=0.0003, + QXRAL=130., + QXRDEL=0.49, + QXRHX=0.99, + QXRR=0.25, + RCVEVAP=0.25, + REFLKUO=5000., + REVGSL=15., + SCO=-20., + TDDGP=0.8, + TENTR=0.0000025, + TENTRX=0.00008, + TUDGP=0.8, + UHDIFV=0.0008, + USURIC=0.175, + USURICE=0.5, + USURICL=1., + USURID=0.1, + USURIDE=0.25, + VZ0CM=0.00015, + XMAXLM=5000., + XMINLM=10., + / + &NAMPHY1 + ALBMIN=0.65, + ALCRIN=0.75, + GCGEL=0.00003, + GCGELS=0.00005, + GNEIMX=1.8, + GNEIMXS=1.8, + RCTVEG(3)=0.000012, + RCTVEG(4)=0.00001, + / + &NAMPHY2 + FACRAF=3.8, + HTKERAF=20., + LMULAF=.TRUE., + LRAFTKE=.TRUE., + LRAFTUR=.TRUE., + XDAMP=1., + XMULAF=-1.85, + / + &NAMPHY3 + / + &NAMPHYDS + / + &NAMPONG + / + &NAMPPC + / + &NAMPPVI + / + &NAMPRE + / + &NAMRAD15 + / + &NAMRADCMEM + / + &NAMRCF + / + &NAMRCOEF + / + &NAMRES + / + &NAMRGRI + / + &NAMRINC + / + &NAMRIP + TSTEP=50., + CSTOP='h2', + / + &NAMRIP0 + / + &NAMRLX + / + &NAMSATS + LPARTIAL_COEF_FILES=.TRUE., + / + &NAMSCC + / + &NAMSCEN + / + &NAMSCM + / + &NAMSEKF + / + &NAMSENS + / + &NAMSFXCMP + CFLDNAME(1)='????????????????', + NBBITS(1)=24, + / + &NAMSIMPHL + / + &NAMSPNG + / + &NAMSPSDT + / + &NAMSTA + / + &NAMSTOPH + / + &NAMSWE + / + &NAMTESTVAR + / + &NAMTHLIM + / + &NAMTOPH + ETCVIM=5000., + ETNEBU=5000., + ETPLUI=5000., + XDRMTK=6.0D-7, + XDRMTP=800., + XDRMUK=3.0D-7, + XDRMUP=800., + / + &NAMTRAJP + / + &NAMTRANS + / + &NAMTRANS0 + / + &NAMTS + / + &NAMVAR + / + &NAMVARBC + / + &NAMVARBC_AIREP + / + &NAMVARBC_ALLSKY + / + &NAMVARBC_GBRAD + / + &NAMVARBC_RAD + / + &NAMVARBC_SFCOBS + / + &NAMVARBC_TCWV + / + &NAMVARBC_TO3 + / + &NAMVAREPS + / + &NAMVDF + / + &NAMVDOZ + / + &NAMVOLCANO + / + &NAMVRTL + / + &NAMVV0 + / + &NAMVV1 + / + &NAMVWRK + / + &NAMWAVELETJB + / + &NAMXFU + LXCLP=.TRUE., + LXCLS=.TRUE., + LXFU=.TRUE., + LXNEBPA=.TRUE., + LXNEBTT=.TRUE., + LXNUVCLS=.TRUE., + LXPLS=.TRUE., + LXPLSG=.TRUE., + LXQCLS=.TRUE., + LXR=.TRUE., + LXSOIL=.FALSE., + LXTHW=.TRUE., + LXTRT=.TRUE., + LXTTCLS=.TRUE., + LXXDIAGH=.TRUE., + LXXGST=.TRUE., + NFRRAZ=72, + NRAZTS(0)=0, + / + &NAM_CANAPE + / + &NAM_DISTRIBUTED_VECTORS + / + &NAPHLC + / + &NEMCT0 + / + &NEMDIM + / + &NEMDYN + / + &NEMELBC0A + LESPCPL=.TRUE., + NBICNHX=2, + NBICOP=2, + NBICOT=2, + NBICOU=2, + NBICPD=2, + NBICVD=2, + NECRIPL=1, + / + &NEMELBC0B + NEFRSPCPL=1, + NEK0=20, + NEK1=30, + NEN1=4, + NEN2=8, + SPNUDDIV=0.01, + SPNUDQ=0., + SPNUDT=0.01, + SPNUDVOR=0.01, + TEFRCL=3600., + / + &NEMFPEZO + / + &NEMGEO + / + &NEMJK + / + &NEMVAR + / + &NEMWAVELET + / + &NAETLDIAG + / + &NAMMETHOX + / + &NAMSPP + / + &NAMACV + / + &NAMFPOBJ + / + &NAMNORGWD + / + &NAMTRAJ + / + &NAMSATSIM + / + &NAMDVISI + / + &NAMNUDGLH + / + &NAMPERTPAR + / +FIN +/bin/cat fort.4 + +/bin/cat <<FIN > EXSEG1.nam + &NAM_DIAG_ISBAN + LPGD=.TRUE., + LSURF_MISC_BUDGET=.TRUE., + / + &NAM_DIAG_SURFN + LCOEF=.TRUE., + LSURF_BUDGET=.TRUE., + N2M=2, + / + &NAM_ISBAN + CSCOND='NP89', + / + &NAM_REPROD_OPER + LREPROD_OPER=.TRUE., + / + &NAM_SEAFLUXN + CSEA_FLUX='ECUME', + LPWG=.FALSE., + LPRECIP=.FALSE., + LPWEBB=.FALSE., + / + &NAM_SSON + CROUGH='Z01D', + XFRACZ0=5., + LDSV=.FALSE., + / + &NAM_SURF_ATM + XRIMAX=0.2, + LNOSOF=.TRUE., + / + &NAM_SURF_CSTS + XZ0SN=0.01, + XZ0HSN=0.001, + XEMISSN=0.99, + / + &NAM_WRITE_DIAG_SURFN + LPROVAR_TO_DIAG=.FALSE., + LSELECT=.TRUE., +CSELECT(1)='T2M','HU2M','XX','YY','DX','DY','SST','Z0SEA','TS_WATER','Z0WATER','TG1','TG2','TG3','WG1','WG2','WG3','WGI1','WGI2','WGI3','WR','WSN_VEG1','RSN_VEG1','ASN_VEG','TSRAD_NAT','RESA','TROOF1','TROOF2','TROOF3','TROOF4','TROOF5','WS_ROOF','TROAD1','TROAD2','TROAD3','TROAD4','TROAD5','WS_ROAD','TWALL1','TWALL2','TWALL3','TWALL4','TWALL5','TI_BLD','T_WIN1','TI_ROAD','WSN_RF1','RSN_RF1','TSN_RF1','ASN_RF','WSN_RD1','RSN_RD1','TSN_RD1','ASN_RD','TCANYON','QCANYON','STORAGE_TYPE','MASDEV','VERSION','BUG','DIM_FULL','DTCUR','LAT0','LON0','RPK','BETA','LATORI','LONORI','IMAX','JMAX','RW_PRECIP','BUDC','SEA_OCEAN','SEA_SBL','WAT_SBL','SN_VEG_N','SN_VEG','LSNOW_FRAC_T','GLACIER','TEMPARP','NLITTER','NLITTLEVS','NSOILCARB','ISBA_CANOPY','SN_RF_N','SN_RF','SN_RD_N','SN_RD','SN_RD_TYP','SN_RF_TYP','TEB_CANOPY','STORAGETYPE','CARTESIAN','GRID_TYPE','SN_VEG_TYP','RESPSL','ROAD_DIR','WALL_OPT','LAI','VEG','RSMIN','DG2','_FBUF_SIZE','_FBUF_DIM1','_FBUF_DIM2','_FBUF_NAME','_FBUF_TYPE','_FBUF_MASK','LCPL_GCM','HANDLE_SIC','SSS', + / + &NAM_WRITE_SURF_ATM + LNOWRITE_TEXFILE=.TRUE., + / +FIN +/bin/cat EXSEG1.nam + +# ***************************************** +# * Acquisition du fichier de demarrage * +# ***************************************** + +echo +for hh in 0 1 2 3 4 5 6 ; do + N=`expr $hh / 1 ` + set -x + ln -s $rekchemin/data/aro/$case/ELSCFFCSTALBC000${N}_l15 ELSCF${CNMEXP}ALBC00${N} + set +x +done +set -x +ln -s $rekchemin/data/aro/$case/ICMSHFCSTINIT_l15 ICMSH${CNMEXP}INIT +ln -s $rekchemin/data/aro/$case/ICMSHFCSTINIT.sfx ICMSH${CNMEXP}INIT.sfx +ln -s $rekchemin/data/surfex/v8/ecoclimapI_covers_param.bin . +ln -s $rekchemin/data/surfex/v8/ecoclimapII_eu_covers_param.bin . +ln -s $rekchemin/data/surfex/v8/ecoclimapII_af_covers_param.bin . +ln -s $rekchemin/data/aro/$case/Const.Clim Const.Clim +ln -s $rekchemin/data/aro/$case/Const.Clim.sfx Const.Clim.sfx +ln -s $rekchemin/data/aro/$case/const.clim.FRANGP0025 const.clim.FRANGP0025 +ln -s $rekchemin/data/rttov12/rtcoef_meteosat_9_seviri.dat . +ln -s $rekchemin/data/rttov12/rtcoef_meteosat_10_seviri.dat . +ln -s $rekchemin/data/rttov12/sccldcoef_meteosat_9_seviri.dat . +set +x +tar xfz $rekchemin/data/rtm/radiation_params.47r1_light.tgz + +# *************** +# * Chargement * +# *************** + +echo +set -x +\ln -s $LOADIR/MASTERODB MASTER +set +x +if ldd MASTER | grep openmpi > /dev/null; then + #On est sur PC + MPILIB=$(ldd MASTER | grep openmpi | tail -1 | awk '{print $3}' | awk -F "/" '{print $(NF-2)}') + MPIRUN="$(echo $(dirname $(dirname $(ldd MASTER | grep openmpi| tail -1 | awk '{print $3}'))))/bin/orterun --oversubscribe -np $NPROC" + GRIB_API=$(dirname $(dirname $(ldd MASTER | grep grib_api | head -1 | awk '{print $3}') 2>/dev/null) 2>/dev/null) + ECCODES=$(dirname $(dirname $(ldd MASTER | grep eccodes | head -1 | awk '{print $3}') 2>/dev/null) 2>/dev/null) + export GRIB_SAMPLES_PATH=$GRIB_API/share/grib_api/ifs_samples/grib1 + export GRIB_DEFINITION_PATH=$GRIB_API/share/grib_api/definitions + export ECCODES_SAMPLES_PATH=$ECCODES/share/eccodes/ifs_samples/grib1 + export ECCODES_DEFINITION_PATH=$rekchemin/data/eccodes_extras_definitions:$ECCODES/share/eccodes/definitions +else + #On est sur HPC + #MPIRUN="$(echo $(dirname $(dirname $(ldd MASTER | grep libmpi| tail -1 | awk '{print $3}'))))/bin/mpirun -wdir $PWD" + NNODES=$SLURM_JOB_NUM_NODES + MPITASKS_PER_NODE=$((SLURM_NTASKS/SLURM_JOB_NUM_NODES)) + MPI_TASKS=$SLURM_NTASKS + MPIRUN="/opt/softs/mpiauto/mpiauto -np $MPI_TASKS -nnp $MPITASKS_PER_NODE --" + export OMP_STACKSIZE=4G + export KMP_STACKSIZE=4G + export KMP_MONITOR_STACKSIZE=4G + export DR_HOOK=1 + export DR_HOOK_IGNORE_SIGNALS=-1 + export DR_HOOK_SILENT=1 + export DR_HOOK_SHOW_PROCESS_OPTIONS=0 + export MPL_MBX_SIZE=2048000000 + export EC_PROFILE_HEAP=0 + export EC_PROFILE_MEM=0 + export EC_MPI_ATEXIT=0 + export EC_MEMINFO=0 + export OPENBLAS_NUM_THREADS=1 + export MKL_CBWR="AUTO,STRICT" + export MKL_NUM_THREADS=1 + export MKL_DEBUG_CPU_TYPE=5 + export ECCODES_SAMPLES_PATH=/opt/softs/libraries/ICC_2018.5.274/eccodes-2.17.0/share/eccodes/ifs_samples/grib1 + export ECCODES_DEFINITION_PATH=/opt/softs/libraries/ICC_2018.5.274/eccodes-2.17.0/share/eccodes/definitions +fi +echo $MPIRUN +set +x +if [ ! -f MASTER ] ; then echo No executable MASTER;exit 1;fi + +# *************** +# * Execution * +# *************** + +echo +echo OMP_NUM_THREADS=$OMP_NUM_THREADS +set -x +ulimit -s unlimited +$MPIRUN $PWD/MASTER >lola +set +x +echo +##if [ -f lola ] ; then +## echo;echo Standard output :;echo;cat lola +##fi +##if [ -f stderr.* ] ; then +## for file in stderr.* ; do +## echo;echo $file :;cat $file +## done +##fi +##if [ -f stdout.* ] ; then +##echo;echo stdout :;echo;cat stdout.* +##fi +##if [ -a NODE.001_01 ] ; then +## for file in NODE* ; do +## echo;echo Listing $file;echo +## cat $file +## done +##fi +##if [ $(find . -name "drhook.prof.*" | wc -l) -ne 0 ] ; then +### Top 25 for each MPI task : +## for file in drhook.prof.* ; do +## echo;echo $file :;head -38 $file +## done +##fi +#cat drhook.prof.* | perl -w $HOME/bin/drhook_merge_walltime_max.pl + +# ******************* +# * Sauvegardes * +# ******************* + +ls +#if [ -f PFFPOS000+0000 ] ; then +# cp PFFPOS000+0000 $WAIT_QUEUE/PFFPOS000+0000.$PBS_JOBID +#fi +cp lola NODE.001_01 ICMSHFPOS+00* DHFDLFPOS+00* $OUTPUTDIR/ +/bin/rm fort.4 EXSEG1.nam lola ICMSHFPOS+0000* PFFPOSFRANGP0025+0000* ICMSHFPOS+0001* +/bin/rm PFFPOSFRANGP0025+0001* ICMSHFPOS+0002* ECHIS PFFPOSFRANGP0025+0002* DHFDLFPOS+00* +/bin/rm ECHFP NODE.001_01 ifs.stat $(tar tfz $rekchemin/data/rtm/radiation_params.47r1_light.tgz) + +# **************** +# * Epilogue * +# **************** + +ls -ltr | grep -v "\->" +echo Wait_queue : +ls -ltr $TMPWAIT +cd $TMPDIR +\rm -rf rundir.$$ +\rm -rf wait_queue.$$ +date +set +x diff --git a/tools/conf_tests/small_3D_np2/aro48t3.sh b/tools/conf_tests/small_3D_np2/aro48t3.sh new file mode 100755 index 0000000000000000000000000000000000000000..1ac4893258e7cacee0c355d797df31896c182137 --- /dev/null +++ b/tools/conf_tests/small_3D_np2/aro48t3.sh @@ -0,0 +1,1207 @@ +#!/bin/bash +#SBATCH -n 2 +#SBATCH --mem=20000 +#SBATCH --export=MYLIB,HOME,HOMEPACK,TMPDIR,OUTPUTDIR,TESTDIR +#SBATCH -t 00:10:00 +#SBATCH -N 1 +#SBATCH -p normal256 + +#The MYLIB varibale must contain the gmkpack pack name +#The TESTDIR variable must contain the test directory +#Results will be stored in the local directory + +#Other environment varaibles that can be set: +#OUTPUTDIR + +date + +OUTPUTDIR=${OUTPUTDIR:-$PWD} +case=riette2 +#rekchemin="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" #Resources for the run must be in the same directory as this script +rekchemin=$TESTDIR + +NPROC=2 +NSTRIN=$NPROC +NSTROUT=1 +NPRTRW_NPRTRV="" +NPRTRW_NPRTRV=" NPRTRW=$NPROC, + NPRTRV=1," +export OMP_NUM_THREADS=1 + +#MYLIB=48t1_main.01%jpdup + +export DR_HOOK=1 +#export DR_HOOK_IGNORE_SIGNALS=-1 +export DR_HOOK_NOT_MPI=1 +export DR_HOOK_SILENT=1 +export DR_HOOK_OPT= + +export EC_PROFILE_HEAP=0 +export EC_PROFILE_MEM=0 +export EC_MPI_ATEXIT=0 +export DR_HOOK_SHOW_PROCESS_OPTIONS=0 +export EC_MEMINFO=0 +export TVSEARCHPATH=$SOURCE + +HOMEPACK=${HOMEPACK:=$HOME/pack} +SOURCE=$HOMEPACK/$MYLIB/src/local +LOADIR=$HOMEPACK/$MYLIB/bin + +TMPDIR=${TMPDIR:=$HOME/tmp} +TMPLOC=$TMPDIR/rundir.$$ +TMPWAIT=$TMPDIR/wait_queue.$$ +mkdir $TMPWAIT +mkdir $TMPLOC +cd $TMPLOC + +export RTTOV_COEFDIR=$PWD + +# ************************** +# * Saisie des NAMELISTS * +# ************************** + +CNMEXP='FPOS' + +echo +/bin/cat <<FIN > fort.4 + &NACIETEO + / + &NACOBS + / + &NACTAN + / + &NACTEX + / + &NACVEG + / + &NADOCK + / + &NAEAEM7 + / + &NAEAER + / + &NAECOAPHY + / + &NAEPHLI + / + &NAEPHY + / + &NAERAD + LRRTM=.TRUE., + LSRTM=.FALSE., + NAER=1, + NICEOPT=3, + NLIQOPT=3, + NOVLP=6, + NOZOCL=2, + NRADFR=18, + NRADIP=3, + NRADLP=2, + NSW=6, + RLWINHF=1, + RRE2DE=0.64952, + RSWINHF=1, + / + &NAERCLI + / + &NAEVOL + / + &NAIMPO + / + &NALORI + / + &NAMAFN + GFP_CLSG%CLNAME='SURFACCGRAUPEL', + GFP_CLSP%CLNAME='SURFACCPLUIE', + GFP_CLSS%CLNAME='SURFACCNEIGE', + GFP_SFIS%IBITS=16, + GFP_ST%CLNAME='SURFTEMPERATURE', + GFP_ST%IANO=0, + GFP_ST%IBITS=12, + GFP_X10U%CLNAME='CLSVENT.ZONAL', + GFP_X10U%IANO=0, + GFP_X10U%IBITS=12, + GFP_X10V%CLNAME='CLSVENT.MERIDIEN', + GFP_X10V%IANO=0, + GFP_X10V%IBITS=12, + GFP_X2RH%CLNAME='CLSHUMI.RELATIVE', + GFP_X2RH%IANO=0, + GFP_X2RH%IBITS=12, + GFP_X2T%CLNAME='CLSTEMPERATURE', + GFP_X2T%IANO=1, + GFP_XCCC%IBITS=8, + GFP_XHCC%IBITS=8, + GFP_XLCC%IBITS=8, + GFP_XLSG%CLNAME='SURFINSGRAUPEL', + GFP_XLSP%CLNAME='SURFINSPLUIE', + GFP_XLSS%CLNAME='SURFINSNEIGE', + GFP_XMCC%IBITS=8, + GFP_XN2T%IBITS=12, + GFP_XTCC%IBITS=8, + GFP_XUGST%CLNAME='CLSU.RAF60M.XFU', + GFP_XUGST%IANO=0, + GFP_XUGST%IBITS=12, + GFP_XVGST%CLNAME='CLSV.RAF60M.XFU', + GFP_XVGST%IANO=0, + GFP_XVGST%IBITS=12, + GFP_XX2T%IBITS=12, + GFP_XXDIAGH%IBITS=12, + TFP_ABS%ZFK=32., + TFP_CLF%IBITS=6, + TFP_EDR%CLNAME='EDR', + TFP_EDR%IBITS=16, + TFP_EDR%IGRIB=136, + TFP_GR%IBITS=12, + TFP_HL%IBITS=12, + TFP_HTB%IBITS=16, + TFP_HTB%LLGP=.TRUE., + TFP_HU%IBITS=12, + TFP_MSAT9C2%IBITS=12, + TFP_MSAT9C6%IBITS=12, + TFP_MSLNH%IBITS=12, + TFP_PV%ZFK=64., + TFP_RCLS%IBITS=12, + TFP_RR%IBITS=12, + TFP_SN%IBITS=12, + TFP_T%IBITS=12, + TFP_TCLS%IBITS=12, + TFP_TH%IBITS=12, + TFP_THPW%IBITS=12, + TFP_THV%IBITS=12, + TFP_TN%IBITS=12, + TFP_TWV%IBITS=12, + TFP_TX%IBITS=12, + TFP_U%IBITS=12, + TFP_V%IBITS=12, + TFP_VOR%ZFK=32., + TFP_VV%ZFK=32., + / + &NAMARG + CNMEXP='${CNMEXP}', + LECMWF=.FALSE., + LELAM=.TRUE., + LSLAG=.TRUE., + NCONF=1, + NSUPERSEDE=1, + / + &NAMARPHY + LKFBCONV=.FALSE., + LKFBD=.FALSE., + LKFBS=.FALSE., + LMFSHAL=.TRUE., + LMICRO=.TRUE., + LMPA=.TRUE., + LMSE=.TRUE., + LTURB=.TRUE., + / + &NAMCA + / + &NAMCAPE + / + &NAMCFU + LCUMFU=.TRUE., + LFPLS=.TRUE., + LFPLSG=.TRUE., + LFR=.TRUE., + LFRRC=.TRUE., + LFSF=.TRUE., + LNEBPAR=.TRUE., + LNEBTT=.TRUE., + LRAYD=.TRUE., + LRAYS=.TRUE., + / + &NAMCHEM + / + &NAMCHET + / + &NAMCHK + / + &NAMCLA + / + &NAMCLDP + / + &NAMCLI + / + &NAMCLOP15 + / + &NAMCLTC + / + &NAMCOK + / + &NAMCOM + / + &NAMCOSJO + / + &NAMCOUPLO4 + / + &NAMCT0 + CFPNCF='ECHFP', + CNPPATH=' ', + LAROME=.TRUE., + LNHEE=.TRUE., + LSCREEN_OPENMP=.FALSE., + LSPRT=.TRUE., + LTWOTL=.TRUE., + NFPOS=1, + NFRSDI=18, + NSDITS(0)=0, + NFRHIS=72, + NHISTS(0)=0, + NFRPOS=72, + NPOSTS(0)=0, + NFRSFXHIS=72, + NSFXHISTS(0)=0, + NFRDHFD=72, + NDHFDTS(0)=0, + / + &NAMCT1 + LRFILAF=.FALSE., + N1HIS=1, + N1POS=1, + N1RES=0, + N1SDI=1, + N1SFXHIS=1, + N1GDI=0, + / + &NAMCUMF + / + &NAMCUMFS + / + &NAMCVER + / + &NAMCVMNH + / + &NAMDDH + LDDH_OMP=.TRUE., + LHDDOP=.TRUE., + LHDHKS=.TRUE., + LHDEFD=.TRUE., + LFLEXDIA=.TRUE., + BDEDDH(1,1)=3, + BDEDDH(2,1)=1, + BDEDDH(3,1)=358.8 + BDEDDH(4,1)=45.1 + BDEDDH(5,1)=360.3 + BDEDDH(6,1)=44.5 + / + &NAMDFI + / + &NAMDIM + NPROMA=-50, + / + &NAMDIMO + / + &NAMDIM_TRAJ + / + &NAMDPHY + / + &NAMDPRECIPS + / + &NAMDYN + LADVF=.TRUE., + LQMPD=.FALSE., + LQMT=.FALSE., + LQMVD=.FALSE., + LRHDI_LASTITERPC=.TRUE., + NITMP=4, + NSITER=1, + NSPDLAG=3, + NSVDLAG=3, + NTLAG=3, + NVLAG=3, + NWLAG=3, + RDAMPDIV=20., + RDAMPPD=20., + RDAMPQ=0., + RDAMPT=0., + RDAMPVD=20., + RDAMPVOR=20., + REPS1=0., + REPS2=0., + REPSM1=0., + REPSM2=0., + REPSP1=0., + SDRED=1., + SIPR=90000., + SITR=350., + SITRA=100., + SLHDA0=0.25, + SLHDD00=0.000065, + VESL=0.05, + XIDT=0., + ZSLHDP1=1.7, + ZSLHDP3=0.6, + / + &NAMDYNA + LCOMADH=.TRUE., + LCOMADV=.FALSE., + LCOMAD_GFL=.TRUE., + LCOMAD_SP=.TRUE., + LCOMAD_SPD=.TRUE., + LCOMAD_SVD=.TRUE., + LCOMAD_T=.TRUE., + LCOMAD_W=.TRUE., + LGWADV=.TRUE., + LNESC=.TRUE., + LPC_CHEAP=.TRUE., + LPC_FULL=.TRUE., + LRDBBC=.FALSE., + LSETTLS=.FALSE., + LSETTLST=.TRUE., + LSLHD_GFL=.TRUE., + LSLHD_OLD=.FALSE., + LSLHD_SPD=.FALSE., + LSLHD_SVD=.FALSE., + LSLHD_T=.FALSE., + LSLHD_W=.FALSE., + ND4SYS=2, + NDLNPR=1, + NPDVAR=2, + NVDVAR=4, + SLHDEPSH=0.08, + SLHDKMAX=6, + / + &NAMDYNCORE + / + &NAMEMIS_CONF + / + &NAMENKF + / + &NAMFA + CMODEL='OUTPUTID', + LEXTERN=.TRUE., + LSUPPDATE=.FALSE., + NBITCS=-1, + NBITPG=-1, + NSTRON=-1, + / + &NAMFAINIT + JPXTRO=2000, + / + &NAMFPC + CFP2DF(1)='SURFPRESSION', + CFP2DF(2)='MSL_NHPRESSURE', + CFP2DF(3)='SURFTOT.WAT.VAPO', + CFP2DF(4)='SURFISOTPW0.MALT', + CFP2DF(5)='SURFCAPE.POS.F00', + CFP2DF(6)='C002_METEOSAT_09_SEVIRI.POS', + CFP2DF(7)='C006_METEOSAT_09_SEVIRI.POS', + CFP2DF(8)='SURFREFLECT.MAX', + CFP2DF(9)='SURFISOTPW1.MALT', + CFP2DF(10)='SURFISOTPW2.MALT', + CFP3DF(1)='GEOPOTENTIEL', + CFP3DF(2)='TEMPERATURE', + CFP3DF(3)='VENT_ZONAL', + CFP3DF(4)='VENT_MERIDIEN', + CFP3DF(5)='HUMI_RELATIVE', + CFP3DF(6)='THETA_PRIM_W', + CFP3DF(7)='PRESSURE', + CFP3DF(8)='ABS_VORTICITY', + CFP3DF(9)='VITESSE_VERTICALE', + CFP3DF(10)='TEMPE_POTENT', + CFP3DF(11)='POT_VORTICIT', + CFP3DF(12)='SIM_REFLECTI', + CFP3DF(13)='RAIN', + CFP3DF(14)='SNOW', + CFP3DF(15)='GRAUPEL', + CFP3DF(16)='ICE_CRYSTAL', + CFP3DF(17)='CLOUD_WATER', + CFP3DF(18)='VERT.VELOCIT', + CFP3DF(19)='DIVERGENCE', + CFP3DF(20)='THETA_VIRTUA', + CFP3DF(21)='TKE', + CFP3DF(22)='CLOUD_FRACTI', + CFP3DF(23)='ISOT_ALTIT', + CFP3DF(24)='EDR', + CFPCFU(1)='SURFTENS.TOTA.ZO', + CFPCFU(2)='SURFTENS.TOTA.ME', + CFPCFU(3)='SURFACCPLUIE', + CFPCFU(4)='SURFACCNEIGE', + CFPCFU(5)='SURFACCGRAUPEL', + CFPCFU(6)='SOMMFLU.RAY.SOLA', + CFPCFU(7)='SURFFLU.RAY.SOLA', + CFPCFU(8)='SOMMFLU.RAY.THER', + CFPCFU(9)='SURFFLU.RAY.THER', + CFPCFU(10)='SURFFLU.LAT.MTOT', + CFPCFU(11)='SURFFLU.MTOTA.NE', + CFPCFU(12)='SURFFLU.CHA.SENS', + CFPCFU(13)='SURFRAYT SOLA DE', + CFPCFU(14)='SURFRAYT THER DE', + CFPCFU(15)='SURFRAYT SOL CL', + CFPCFU(16)='SURFRAYT THER CL', + CFPCFU(17)='SURFRAYT DIR SUR', + CFPDOM(1)='FRANGP0025', + CFPFMT='LALON', + CFPPHY(1)='SURFTEMPERATURE', + CFPPHY(2)='INTSURFGEOPOTENT', + CFPPHY(3)='SURFRESERV.NEIGE', + CFPXFU(1)='CLSTEMPERATURE', + CFPXFU(2)='CLSHUMI.RELATIVE', + CFPXFU(3)='CLSVENT.ZONAL', + CFPXFU(4)='CLSVENT.MERIDIEN', + CFPXFU(5)='SURFNEBUL.TOTALE', + CFPXFU(6)='SURFNEBUL.HAUTE', + CFPXFU(7)='SURFNEBUL.MOYENN', + CFPXFU(8)='SURFNEBUL.BASSE', + CFPXFU(9)='CLSMAXI.TEMPERAT', + CFPXFU(10)='CLSMINI.TEMPERAT', + CFPXFU(11)='CLPMHAUT.MOD.XFU', + CFPXFU(12)='SURFDIAGHAIL', + LCRITSNOWTEMP=.FALSE., + LFPCAPEX=.TRUE., + LFPMOIS=.TRUE., + LFPPACKING=.FALSE., + LWIDER_DOM=.TRUE., + L_READ_MODEL_DATE=.TRUE., + NFITI=1, + NFITV=1, + NFPCAPE=5, + NFPCLI=1, + NFPGRIB=1, + NFPINPHY=4, + NITERPV=8, + RENTRA=0.0001, + RFP3H(1)=10., + RFP3H(2)=20., + RFP3H(3)=35., + RFP3H(4)=50., + RFP3H(5)=75., + RFP3H(6)=100., + RFP3H(7)=150., + RFP3H(8)=200., + RFP3H(9)=250., + RFP3H(10)=375., + RFP3H(11)=500., + RFP3H(12)=625., + RFP3H(13)=750., + RFP3H(14)=875., + RFP3H(15)=1000., + RFP3H(16)=1125., + RFP3H(17)=1250., + RFP3H(18)=1375., + RFP3H(19)=1500., + RFP3H(20)=1750., + RFP3H(21)=2000., + RFP3H(22)=2250., + RFP3H(23)=2500., + RFP3H(24)=2750., + RFP3H(25)=3000., + RFP3I(1)=-273.15, + RFP3I(2)=-263.15, + RFP3I(3)=-261.15, + RFP3I(4)=-253.15, + RFP3P(1)=10000., + RFP3P(2)=12500., + RFP3P(3)=15000., + RFP3P(4)=17500., + RFP3P(5)=20000., + RFP3P(6)=22500., + RFP3P(7)=25000., + RFP3P(8)=27500., + RFP3P(9)=30000., + RFP3P(10)=35000., + RFP3P(11)=40000., + RFP3P(12)=45000., + RFP3P(13)=50000., + RFP3P(14)=55000., + RFP3P(15)=60000., + RFP3P(16)=65000., + RFP3P(17)=70000., + RFP3P(18)=75000., + RFP3P(19)=80000., + RFP3P(20)=85000., + RFP3P(21)=90000., + RFP3P(22)=92500., + RFP3P(23)=95000., + RFP3P(24)=100000., + RFP3PV(1)=0.0000015, + RFP3PV(2)=0.000002, + RFPCD2=5., + RFPCSAB=50., + RFPVCAP=7000., + / + &NAMFPD + NLAT(1)=41, + NLON(1)=41, + RLONC(1)=-0.71, + RLATC(1)=44.8, + RDELX(1)=0.025, + RDELY(1)=0.025, + / + &NAMFPDY2 + / + &NAMFPDYF + / + &NAMFPDYH + / + &NAMFPDYI + / + &NAMFPDYP + / + &NAMFPDYS + / + &NAMFPDYT + / + &NAMFPDYV + / + &NAMFPF + NFMAX(1)=60, + NFMAX(2)=80, + / + &NAMFPG + NFPDISTRIB=1, + / + &NAMFPIOS + / + &NAMFPMOVE + / + &NAMFPPHY + / + &NAMFPSC2 + NFPROMA=-50, + / + &NAMFPSC2_DEP + NFPROMA_DEP=-50, + / + &NAMGEM + / + &NAMGFL + NGFL_EZDIAG=4, + YEZDIAG_NL(1)%CNAME='EZDIAG01', + YEZDIAG_NL(1)%LREQOUT=.FALSE., + YEZDIAG_NL(2)%CNAME='EZDIAG02', + YEZDIAG_NL(2)%LREQOUT=.FALSE., + YEZDIAG_NL(3)%CNAME='EZDIAG03', + YEZDIAG_NL(3)%LREQOUT=.FALSE., + YEZDIAG_NL(4)%CNAME='INPRRTOT3D', + YEZDIAG_NL(4)%LREQOUT=.TRUE., + YG_NL%LQM=.TRUE., + YG_NL%LSLHD=.TRUE., + YG_NL%NCOUPLING=-1, + YG_NL%NREQIN=1, + YG_NL%REFVALC=0., + YIRAD_NL%LGP=.TRUE., + YI_NL%LQM=.TRUE., + YI_NL%LSLHD=.TRUE., + YI_NL%NCOUPLING=-1, + YI_NL%NREQIN=1, + YI_NL%REFVALC=0., + YLRAD_NL%LGP=.TRUE., + YL_NL%LQM=.TRUE., + YL_NL%LSLHD=.TRUE., + YL_NL%NCOUPLING=-1, + YL_NL%NREQIN=1, + YL_NL%REFVALC=0., + YQ_NL%LCOMAD=.TRUE., + YQ_NL%LQM=.TRUE., + YQ_NL%LSLHD=.FALSE., + YQ_NL%NREQIN=1, + YR_NL%LQM=.TRUE., + YR_NL%LSLHD=.TRUE., + YR_NL%NCOUPLING=-1, + YR_NL%NREQIN=1, + YR_NL%REFVALC=0., + YS_NL%LQM=.TRUE., + YS_NL%LSLHD=.TRUE., + YS_NL%NCOUPLING=-1, + YS_NL%NREQIN=1, + YS_NL%REFVALC=0., + YTKE_NL%NCOUPLING=0, + YTKE_NL%NREQIN=1, + / + &NAMGRIB + / + &NAMGWD + / + &NAMGWDIAG + / + &NAMGWWMS + / + &NAMIAU + ALPHAIAU=0.5, + LIAU=.FALSE., + TSTARTIAU=1800, + TSTOPIAU=5340, + / + &NAMICE + / + &NAMINI + LDFI=.FALSE., + / + &NAMINTFLEX + / + &NAMIOMI + / + &NAMIOS + / + &NAMIO_SERV + NIO_SERV_BUF_MAXSIZE=20, + NIO_SERV_METHOD=2, + NMSG_LEVEL_CLIENT=0, + NMSG_LEVEL_SERVER=0, + NPROCESS_LEVEL=5, + NPROC_IO=0, + / + &NAMJBCODES + / + &NAMJFH + / + &NAMJG + / + &NAMLCZ + / + &NAMLSFORC + / + &NAMMARS + / + &NAMMCC + / + &NAMMCUF + / + &NAMMKODB + / + &NAMMODERR + / + &NAMMTS + / + &NAMMWAVE + / + &NAMNPROF + / + &NAMNUD + / + &NAMOBS + / + &NAMONEDVAR + / + &NAMOOPS + / + &NAMOPH + CFNHWF='ECHIS', + LINC=.TRUE., + NTIMEFMT=1, + / + &NAMOPTCMEM + / + &NAMPAR0 + LOPT_SCALAR=.TRUE., + NPRINTLEV=1, + LMPOFF=.FALSE., + MBX_SIZE=2048000000, + MP_TYPE=2, + NOUTPUT=1, + NPROC=$NPROC, +$NPRTRW_NPRTRV + / + &NAMPAR1 + LEQ_REGIONS=.FALSE., + LSLONDEM=.TRUE., + LSPLIT=.TRUE., + LSYNC_SLCOM=.FALSE., + LSYNC_TRANS=.FALSE., + L_GATHERV_WRGP=.FALSE., + NCOMBFLEN=1800000, + NSTRIN=$NSTRIN, + NSTROUT=$NSTROUT, + / + &NAMPARAR + CFRAC_ICE_ADJUST='S', + CFRAC_ICE_SHALLOW_MF='S', + CMICRO='ICE3', + CSEDIM='STAT', + CSNOWRIMING='M90', + LCONVHG=.TRUE., + LCRFLIMIT=.TRUE., + LCRIAUTI=.TRUE., + LEVLIMIT=.TRUE., + LFEEDBACKT=.TRUE., + LFPREC3D=.TRUE., + LNULLWETG=.TRUE., + LNULLWETH=.TRUE., + LOLSMC=.TRUE., + LOSEDIC=.TRUE., + LOSIGMAS=.TRUE., + LOSUBG_COND=.TRUE., + LSEDIM_AFTER=.FALSE., + LWETGPOST=.TRUE., + LWETHPOST=.TRUE., + NMAXITER_MICRO=1, + NPRINTFR=10000, + NPTP=1, + RCRIAUTC=0.001, + RCRIAUTI=0.0002, + RT0CRIAUTI=-5., + VSIGQSAT=0.02, + XFRACM90=0.1, + XMRSTEP=0.00005, + XSPLIT_MAXCFL=0.8, + XTSTEP_TS=0., + / + &NAMPHMSE + LPGDFWR=.FALSE., + / + &NAMPHY + LAERODES=.TRUE., + LAEROLAN=.TRUE., + LAEROSEA=.TRUE., + LAEROSOO=.TRUE., + LEDR=.TRUE., + LMPHYS=.TRUE., + LO3ABC=.TRUE., + LRAYFM=.TRUE., + / + &NAMPHY0 + ALMAV=300., + BEDIFV=0.05, + ECMNP=3000., + GCCSV=0., + GCVADS=0.8, + GCVALFA=0.000045, + GCVBETA=0.2, + GCVMLT=0.00016, + GCVNU=0.000025, + GCVPSI=1., + GCVPSIE=1., + GDDEVA=0.25, + GDDSDE=0.5, + GWDCD=6., + HUCOE=0.5, + HUTIL=1.8, + QSSC=400., + QSSUSC=0.75, + QSSUSS=0.4, + QSSUSV=250., + QSUSXC=0.0002, + QSUSXS=0.0003, + QXRAL=130., + QXRDEL=0.49, + QXRHX=0.99, + QXRR=0.25, + RCVEVAP=0.25, + REFLKUO=5000., + REVGSL=15., + SCO=-20., + TDDGP=0.8, + TENTR=0.0000025, + TENTRX=0.00008, + TUDGP=0.8, + UHDIFV=0.0008, + USURIC=0.175, + USURICE=0.5, + USURICL=1., + USURID=0.1, + USURIDE=0.25, + VZ0CM=0.00015, + XMAXLM=5000., + XMINLM=10., + / + &NAMPHY1 + ALBMIN=0.65, + ALCRIN=0.75, + GCGEL=0.00003, + GCGELS=0.00005, + GNEIMX=1.8, + GNEIMXS=1.8, + RCTVEG(3)=0.000012, + RCTVEG(4)=0.00001, + / + &NAMPHY2 + FACRAF=3.8, + HTKERAF=20., + LMULAF=.TRUE., + LRAFTKE=.TRUE., + LRAFTUR=.TRUE., + XDAMP=1., + XMULAF=-1.85, + / + &NAMPHY3 + / + &NAMPHYDS + / + &NAMPONG + / + &NAMPPC + / + &NAMPPVI + / + &NAMPRE + / + &NAMRAD15 + / + &NAMRADCMEM + / + &NAMRCF + / + &NAMRCOEF + / + &NAMRES + / + &NAMRGRI + / + &NAMRINC + / + &NAMRIP + TSTEP=50., + CSTOP='h2', + / + &NAMRIP0 + / + &NAMRLX + / + &NAMSATS + LPARTIAL_COEF_FILES=.TRUE., + / + &NAMSCC + / + &NAMSCEN + / + &NAMSCM + / + &NAMSEKF + / + &NAMSENS + / + &NAMSFXCMP + CFLDNAME(1)='????????????????', + NBBITS(1)=24, + / + &NAMSIMPHL + / + &NAMSPNG + / + &NAMSPSDT + / + &NAMSTA + / + &NAMSTOPH + / + &NAMSWE + / + &NAMTESTVAR + / + &NAMTHLIM + / + &NAMTOPH + ETCVIM=5000., + ETNEBU=5000., + ETPLUI=5000., + XDRMTK=6.0D-7, + XDRMTP=800., + XDRMUK=3.0D-7, + XDRMUP=800., + / + &NAMTRAJP + / + &NAMTRANS + / + &NAMTRANS0 + / + &NAMTS + / + &NAMVAR + / + &NAMVARBC + / + &NAMVARBC_AIREP + / + &NAMVARBC_ALLSKY + / + &NAMVARBC_GBRAD + / + &NAMVARBC_RAD + / + &NAMVARBC_SFCOBS + / + &NAMVARBC_TCWV + / + &NAMVARBC_TO3 + / + &NAMVAREPS + / + &NAMVDF + / + &NAMVDOZ + / + &NAMVOLCANO + / + &NAMVRTL + / + &NAMVV0 + / + &NAMVV1 + / + &NAMVWRK + / + &NAMWAVELETJB + / + &NAMXFU + LXCLP=.TRUE., + LXCLS=.TRUE., + LXFU=.TRUE., + LXNEBPA=.TRUE., + LXNEBTT=.TRUE., + LXNUVCLS=.TRUE., + LXPLS=.TRUE., + LXPLSG=.TRUE., + LXQCLS=.TRUE., + LXR=.TRUE., + LXSOIL=.FALSE., + LXTHW=.TRUE., + LXTRT=.TRUE., + LXTTCLS=.TRUE., + LXXDIAGH=.TRUE., + LXXGST=.TRUE., + NFRRAZ=72, + NRAZTS(0)=0, + / + &NAM_CANAPE + / + &NAM_DISTRIBUTED_VECTORS + / + &NAPHLC + / + &NEMCT0 + / + &NEMDIM + / + &NEMDYN + / + &NEMELBC0A + LESPCPL=.TRUE., + NBICNHX=2, + NBICOP=2, + NBICOT=2, + NBICOU=2, + NBICPD=2, + NBICVD=2, + NECRIPL=1, + / + &NEMELBC0B + NEFRSPCPL=1, + NEK0=20, + NEK1=30, + NEN1=4, + NEN2=8, + SPNUDDIV=0.01, + SPNUDQ=0., + SPNUDT=0.01, + SPNUDVOR=0.01, + TEFRCL=3600., + / + &NEMFPEZO + / + &NEMGEO + / + &NEMJK + / + &NEMVAR + / + &NEMWAVELET + / + &NAETLDIAG + / + &NAMMETHOX + / + &NAMSPP + / + &NAMACV + / + &NAMFPOBJ + / + &NAMNORGWD + / + &NAMTRAJ + / + &NAMSATSIM + / + &NAMDVISI + / + &NAMNUDGLH + / + &NAMPERTPAR + / +FIN +/bin/cat fort.4 + +/bin/cat <<FIN > EXSEG1.nam + &NAM_DIAG_ISBAN + LPGD=.TRUE., + LSURF_MISC_BUDGET=.TRUE., + / + &NAM_DIAG_SURFN + LCOEF=.TRUE., + LSURF_BUDGET=.TRUE., + N2M=2, + / + &NAM_ISBAN + CSCOND='NP89', + / + &NAM_REPROD_OPER + LREPROD_OPER=.TRUE., + / + &NAM_SEAFLUXN + CSEA_FLUX='ECUME', + LPWG=.FALSE., + LPRECIP=.FALSE., + LPWEBB=.FALSE., + / + &NAM_SSON + CROUGH='Z01D', + XFRACZ0=5., + LDSV=.FALSE., + / + &NAM_SURF_ATM + XRIMAX=0.2, + LNOSOF=.TRUE., + / + &NAM_SURF_CSTS + XZ0SN=0.01, + XZ0HSN=0.001, + XEMISSN=0.99, + / + &NAM_WRITE_DIAG_SURFN + LPROVAR_TO_DIAG=.FALSE., + LSELECT=.TRUE., +CSELECT(1)='T2M','HU2M','XX','YY','DX','DY','SST','Z0SEA','TS_WATER','Z0WATER','TG1','TG2','TG3','WG1','WG2','WG3','WGI1','WGI2','WGI3','WR','WSN_VEG1','RSN_VEG1','ASN_VEG','TSRAD_NAT','RESA','TROOF1','TROOF2','TROOF3','TROOF4','TROOF5','WS_ROOF','TROAD1','TROAD2','TROAD3','TROAD4','TROAD5','WS_ROAD','TWALL1','TWALL2','TWALL3','TWALL4','TWALL5','TI_BLD','T_WIN1','TI_ROAD','WSN_RF1','RSN_RF1','TSN_RF1','ASN_RF','WSN_RD1','RSN_RD1','TSN_RD1','ASN_RD','TCANYON','QCANYON','STORAGE_TYPE','MASDEV','VERSION','BUG','DIM_FULL','DTCUR','LAT0','LON0','RPK','BETA','LATORI','LONORI','IMAX','JMAX','RW_PRECIP','BUDC','SEA_OCEAN','SEA_SBL','WAT_SBL','SN_VEG_N','SN_VEG','LSNOW_FRAC_T','GLACIER','TEMPARP','NLITTER','NLITTLEVS','NSOILCARB','ISBA_CANOPY','SN_RF_N','SN_RF','SN_RD_N','SN_RD','SN_RD_TYP','SN_RF_TYP','TEB_CANOPY','STORAGETYPE','CARTESIAN','GRID_TYPE','SN_VEG_TYP','RESPSL','ROAD_DIR','WALL_OPT','LAI','VEG','RSMIN','DG2','_FBUF_SIZE','_FBUF_DIM1','_FBUF_DIM2','_FBUF_NAME','_FBUF_TYPE','_FBUF_MASK','LCPL_GCM','HANDLE_SIC','SSS', + / + &NAM_WRITE_SURF_ATM + LNOWRITE_TEXFILE=.TRUE., + / +FIN +/bin/cat EXSEG1.nam + +# ***************************************** +# * Acquisition du fichier de demarrage * +# ***************************************** + +echo +for hh in 0 1 2 3 4 5 6 ; do + N=`expr $hh / 1 ` + set -x + ln -s $rekchemin/data/aro/$case/ELSCFFCSTALBC000${N}_l15 ELSCF${CNMEXP}ALBC00${N} + set +x +done +set -x +ln -s $rekchemin/data/aro/$case/ICMSHFCSTINIT_l15 ICMSH${CNMEXP}INIT +ln -s $rekchemin/data/aro/$case/ICMSHFCSTINIT.sfx ICMSH${CNMEXP}INIT.sfx +ln -s $rekchemin/data/surfex/v8/ecoclimapI_covers_param.bin . +ln -s $rekchemin/data/surfex/v8/ecoclimapII_eu_covers_param.bin . +ln -s $rekchemin/data/surfex/v8/ecoclimapII_af_covers_param.bin . +ln -s $rekchemin/data/aro/$case/Const.Clim Const.Clim +ln -s $rekchemin/data/aro/$case/Const.Clim.sfx Const.Clim.sfx +ln -s $rekchemin/data/aro/$case/const.clim.FRANGP0025 const.clim.FRANGP0025 +ln -s $rekchemin/data/rttov12/rtcoef_meteosat_9_seviri.dat . +ln -s $rekchemin/data/rttov12/rtcoef_meteosat_10_seviri.dat . +ln -s $rekchemin/data/rttov12/sccldcoef_meteosat_9_seviri.dat . +set +x +tar xfz $rekchemin/data/rtm/radiation_params.47r1_light.tgz + +# *************** +# * Chargement * +# *************** + +echo +set -x +\ln -s $LOADIR/MASTERODB MASTER +set +x +if ldd MASTER | grep openmpi > /dev/null; then + #On est sur PC + MPILIB=$(ldd MASTER | grep openmpi | tail -1 | awk '{print $3}' | awk -F "/" '{print $(NF-2)}') + MPIRUN="$(echo $(dirname $(dirname $(ldd MASTER | grep openmpi| tail -1 | awk '{print $3}'))))/bin/orterun --oversubscribe -np $NPROC" + GRIB_API=$(dirname $(dirname $(ldd MASTER | grep grib_api | head -1 | awk '{print $3}') 2>/dev/null) 2>/dev/null) + ECCODES=$(dirname $(dirname $(ldd MASTER | grep eccodes | head -1 | awk '{print $3}') 2>/dev/null) 2>/dev/null) + export GRIB_SAMPLES_PATH=$GRIB_API/share/grib_api/ifs_samples/grib1 + export GRIB_DEFINITION_PATH=$GRIB_API/share/grib_api/definitions + export ECCODES_SAMPLES_PATH=$ECCODES/share/eccodes/ifs_samples/grib1 + export ECCODES_DEFINITION_PATH=$rekchemin/data/eccodes_extras_definitions:$ECCODES/share/eccodes/definitions +else + #On est sur HPC + #MPIRUN="$(echo $(dirname $(dirname $(ldd MASTER | grep libmpi| tail -1 | awk '{print $3}'))))/bin/mpirun -wdir $PWD" + NNODES=$SLURM_JOB_NUM_NODES + MPITASKS_PER_NODE=$((SLURM_NTASKS/SLURM_JOB_NUM_NODES)) + MPI_TASKS=$SLURM_NTASKS + MPIRUN="/opt/softs/mpiauto/mpiauto -np $MPI_TASKS -nnp $MPITASKS_PER_NODE --" + export OMP_STACKSIZE=4G + export KMP_STACKSIZE=4G + export KMP_MONITOR_STACKSIZE=4G + export DR_HOOK=1 + export DR_HOOK_IGNORE_SIGNALS=-1 + export DR_HOOK_SILENT=1 + export DR_HOOK_SHOW_PROCESS_OPTIONS=0 + export MPL_MBX_SIZE=2048000000 + export EC_PROFILE_HEAP=0 + export EC_PROFILE_MEM=0 + export EC_MPI_ATEXIT=0 + export EC_MEMINFO=0 + export OPENBLAS_NUM_THREADS=1 + export MKL_CBWR="AUTO,STRICT" + export MKL_NUM_THREADS=1 + export MKL_DEBUG_CPU_TYPE=5 + export ECCODES_SAMPLES_PATH=/opt/softs/libraries/ICC_2018.5.274/eccodes-2.17.0/share/eccodes/ifs_samples/grib1 + export ECCODES_DEFINITION_PATH=/opt/softs/libraries/ICC_2018.5.274/eccodes-2.17.0/share/eccodes/definitions +fi +echo $MPIRUN +set +x +if [ ! -f MASTER ] ; then echo No executable MASTER;exit 1;fi + +# *************** +# * Execution * +# *************** + +echo +echo OMP_NUM_THREADS=$OMP_NUM_THREADS +set -x +ulimit -s unlimited +$MPIRUN $PWD/MASTER >lola +set +x +echo +##if [ -f lola ] ; then +## echo;echo Standard output :;echo;cat lola +##fi +##if [ -f stderr.* ] ; then +## for file in stderr.* ; do +## echo;echo $file :;cat $file +## done +##fi +##if [ -f stdout.* ] ; then +##echo;echo stdout :;echo;cat stdout.* +##fi +##if [ -a NODE.001_01 ] ; then +## for file in NODE* ; do +## echo;echo Listing $file;echo +## cat $file +## done +##fi +##if [ $(find . -name "drhook.prof.*" | wc -l) -ne 0 ] ; then +### Top 25 for each MPI task : +## for file in drhook.prof.* ; do +## echo;echo $file :;head -38 $file +## done +##fi +#cat drhook.prof.* | perl -w $HOME/bin/drhook_merge_walltime_max.pl + +# ******************* +# * Sauvegardes * +# ******************* + +ls +#if [ -f PFFPOS000+0000 ] ; then +# cp PFFPOS000+0000 $WAIT_QUEUE/PFFPOS000+0000.$PBS_JOBID +#fi +cp lola NODE.001_01 ICMSHFPOS+00* DHFDLFPOS+00* $OUTPUTDIR/ +/bin/rm fort.4 EXSEG1.nam lola ICMSHFPOS+0000* PFFPOSFRANGP0025+0000* ICMSHFPOS+0001* +/bin/rm PFFPOSFRANGP0025+0001* ICMSHFPOS+0002* ECHIS PFFPOSFRANGP0025+0002* DHFDLFPOS+00* +/bin/rm ECHFP NODE.001_01 ifs.stat $(tar tfz $rekchemin/data/rtm/radiation_params.47r1_light.tgz) + +# **************** +# * Epilogue * +# **************** + +ls -ltr | grep -v "\->" +echo Wait_queue : +ls -ltr $TMPWAIT +cd $TMPDIR +\rm -rf rundir.$$ +\rm -rf wait_queue.$$ +date +set +x