From a994f306ef9584ffcc291b0c3b668497db9bc169 Mon Sep 17 00:00:00 2001 From: Quentin Rodier <quentin.rodier@meteo.fr> Date: Fri, 27 Jan 2023 18:14:23 +0100 Subject: [PATCH] Quentin 05/01/2023: adapt MESONH interfaces with PHYEX --- src/mesonh/ext/deallocate_model1.f90 | 703 ----- src/mesonh/ext/default_desfmn.f90 | 1481 ----------- src/mesonh/ext/diagnos_les_mf.f90 | 244 -- src/mesonh/ext/ground_paramn.f90 | 1230 --------- src/mesonh/ext/ibm_affectv.f90 | 402 --- src/mesonh/ext/ice_adjust_bis.f90 | 160 -- src/mesonh/ext/ini_lesn.f90 | 2007 --------------- src/mesonh/ext/ini_radar.f90 | 234 -- src/mesonh/ext/ini_segn.f90 | 494 ---- src/mesonh/ext/les_cloud_masksn.f90 | 419 --- src/mesonh/ext/les_ini_timestepn.f90 | 407 --- src/mesonh/ext/lesn.f90 | 3580 -------------------------- src/mesonh/ext/modn_turbn.f90 | 167 -- src/mesonh/ext/phys_paramn.f90 | 1694 ------------ src/mesonh/ext/prep_ideal_case.f90 | 1950 -------------- src/mesonh/ext/prep_real_case.f90 | 1421 ---------- src/mesonh/ext/resolved_cloud.f90 | 1136 -------- src/mesonh/ext/set_rsou.f90 | 1640 ------------ src/mesonh/ext/shallow_mf_pack.f90 | 383 --- src/mesonh/ext/switch_sbg_lesn.f90 | 589 ----- src/mesonh/ext/write_lesn.f90 | 1319 ---------- 21 files changed, 21660 deletions(-) delete mode 100644 src/mesonh/ext/deallocate_model1.f90 delete mode 100644 src/mesonh/ext/default_desfmn.f90 delete mode 100644 src/mesonh/ext/diagnos_les_mf.f90 delete mode 100644 src/mesonh/ext/ground_paramn.f90 delete mode 100644 src/mesonh/ext/ibm_affectv.f90 delete mode 100644 src/mesonh/ext/ice_adjust_bis.f90 delete mode 100644 src/mesonh/ext/ini_lesn.f90 delete mode 100644 src/mesonh/ext/ini_radar.f90 delete mode 100644 src/mesonh/ext/ini_segn.f90 delete mode 100644 src/mesonh/ext/les_cloud_masksn.f90 delete mode 100644 src/mesonh/ext/les_ini_timestepn.f90 delete mode 100644 src/mesonh/ext/lesn.f90 delete mode 100644 src/mesonh/ext/modn_turbn.f90 delete mode 100644 src/mesonh/ext/phys_paramn.f90 delete mode 100644 src/mesonh/ext/prep_ideal_case.f90 delete mode 100644 src/mesonh/ext/prep_real_case.f90 delete mode 100644 src/mesonh/ext/resolved_cloud.f90 delete mode 100644 src/mesonh/ext/set_rsou.f90 delete mode 100644 src/mesonh/ext/shallow_mf_pack.f90 delete mode 100644 src/mesonh/ext/switch_sbg_lesn.f90 delete mode 100644 src/mesonh/ext/write_lesn.f90 diff --git a/src/mesonh/ext/deallocate_model1.f90 b/src/mesonh/ext/deallocate_model1.f90 deleted file mode 100644 index 4a940c6d8..000000000 --- a/src/mesonh/ext/deallocate_model1.f90 +++ /dev/null @@ -1,703 +0,0 @@ -!MNH_LIC Copyright 1997-2021 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. -!----------------------------------------------------------------- -!############################ -MODULE MODI_DEALLOCATE_MODEL1 -!############################ -! -INTERFACE -! -SUBROUTINE DEALLOCATE_MODEL1 (KCALL) -! -INTEGER, INTENT(IN) :: KCALL -! -END SUBROUTINE DEALLOCATE_MODEL1 -! -END INTERFACE -! -END MODULE MODI_DEALLOCATE_MODEL1 -! -! -! #################################### - SUBROUTINE DEALLOCATE_MODEL1 (KCALL) -! #################################### -! -!!**** *DEALLOCATE_MODEL1* - deallocate all model1 fields -!! -!! PURPOSE -!! ------- -! deallocate all model #1 fields in order to spare memory in spawning -! -!!** METHOD -!! ------ -!! -!! KCALL = 1 --> deallocates all SOURCES, LES, FORCING and SOLVER variables -!! -!! KCALL = 2 --> deallocates all METRIC, RADIATION and CORIOLIS variables -!! -!! KCALL = 3 --> deallocates all other variables of model1 -!! -!! KCALL = 4 --> deallocates all variables common to ALL models -!! -!! 1 + 2 --> all variables used in spawning -!! 1 + 2 + 3 + 4 --> in diag after a file has been treated -!! -!! EXTERNAL -!! -------- -!! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! V. Masson * Meteo France * -!! -!! MODIFICATIONS -!! ------------- -!! Original 08/12/97 -!! -!! 20/05/98 use the LB fields -!! 15/03/99 new PGD fields -!! 08/03/01 D.Gazen add chemical emission field -!! 01/2004 V. Masson surface externalization -!! 06/2012 M.Tomasini add 2D nesting ADVFRC -!! 10/2016 M.Mazoyer New KHKO output fields -! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O -! C. Lac 02/2019: add rain fraction as an output field -! P. Wautelet 07/06/2019: bugfix: deallocate XLSRVM only if allocated -! S. Riette 04/2020: XHL* fields -! A. Costes 12:2021: Blaze Fire model variables -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -USE MODD_REF -! -USE MODD_METRICS_n -USE MODD_FIELD_n -USE MODD_DUMMY_GR_FIELD_n -USE MODD_LSFIELD_n -USE MODD_GRID_n -USE MODD_REF_n -USE MODD_CURVCOR_n -USE MODD_DYN_n -USE MODD_DEEP_CONVECTION_n -USE MODD_RADIATIONS_n -USE MODD_FRC -USE MODD_PRECIP_n -USE MODD_ELEC_n -USE MODD_PASPOL_n -USE MODD_RAIN_ICE_PARAM -USE MODD_RAIN_ICE_DESCR -USE MODD_PARAM_n , ONLY : CCLOUD -USE MODE_MODELN_HANDLER -! -! Modif 2D -USE MODD_LATZ_EDFLX ! For ADVFRC and EDDY FLUXES -USE MODD_DEF_EDDY_FLUX_n ! For EDDY FLUXES -USE MODD_DEF_EDDYUV_FLUX_n ! For EDDY FLUXES -! -USE MODD_2D_FRC -USE MODD_ADVFRC_n ! For ADVFRC and EDDY FLUXES -USE MODD_RELFRC_n -USE MODD_ADV_n -USE MODD_PAST_FIELD_n -USE MODD_TURB_n -USE MODD_PARAM_C2R2, ONLY :LSUPSAT -! -IMPLICIT NONE -! -!* 0.1 declarations of arguments -! -INTEGER, INTENT(IN) :: KCALL ! number of times this routine has been called -INTEGER :: IMI ! Current Model index -! -!* 0.2 declarations of local variables -! -!------------------------------------------------------------------------------- -! -! Save current Model index and switch to model 1 variables -IMI = GET_CURRENT_MODEL_INDEX() -CALL GOTO_MODEL(1) -!* 1. Module MODD_FIELD$n -! -IF ( KCALL==3 ) THEN - IF (CUVW_ADV_SCHEME(1:3)=='CEN'.AND. CTEMP_SCHEME=='LEFR') THEN - DEALLOCATE(XUM) - DEALLOCATE(XVM) - DEALLOCATE(XWM) - DEALLOCATE(XDUM) - DEALLOCATE(XDVM) - DEALLOCATE(XDWM) - END IF - DEALLOCATE(XUT) - DEALLOCATE(XVT) - DEALLOCATE(XWT) - DEALLOCATE(XTHT) - IF (L2D_ADV_FRC) THEN - IF (ASSOCIATED(XDTHFRC)) DEALLOCATE(XDTHFRC) - IF (ASSOCIATED(XDRVFRC)) DEALLOCATE(XDRVFRC) - IF (ASSOCIATED(TDTADVFRC)) DEALLOCATE(TDTADVFRC) - END IF - IF (L2D_REL_FRC) THEN - IF (ASSOCIATED(XTHREL)) DEALLOCATE(XTHREL) - IF (ASSOCIATED(XRVREL)) DEALLOCATE(XRVREL) - IF (ASSOCIATED(TDTRELFRC)) DEALLOCATE(TDTRELFRC) - END IF - ! DEALLOCATE EDDY FLUXES - IF (LTH_FLX) THEN - DEALLOCATE(XVTH_FLUX_M) - DEALLOCATE(XWTH_FLUX_M) - END IF - IF (LUV_FLX) THEN - DEALLOCATE(XVU_FLUX_M) - END IF -END IF -IF ( KCALL==1 ) THEN - DEALLOCATE(XRUS) - DEALLOCATE(XRVS) - DEALLOCATE(XRWS) - DEALLOCATE(XRTHS) - DEALLOCATE(XRUS_PRES, XRVS_PRES, XRWS_PRES ) - DEALLOCATE(XRTHS_CLD ) -END IF -! -IF ( KCALL==3 ) THEN - IF (ASSOCIATED(XTKET)) DEALLOCATE(XTKET) -END IF -IF ( ASSOCIATED(XRTKES) .AND. KCALL==1 ) THEN - DEALLOCATE(XRTKES) -END IF -! -IF ( KCALL==3 ) THEN - DEALLOCATE(XPABST) -! - DEALLOCATE(XRT) -END IF -! -IF ( KCALL==1 ) THEN - DEALLOCATE(XRRS) - DEALLOCATE(XRRS_CLD) -END IF -! -IF ( ASSOCIATED(XSRCT) .AND. KCALL==3 ) THEN - DEALLOCATE(XSRCT) - DEALLOCATE(XSIGS) -END IF -! -IF ( ASSOCIATED(XHLC_HRC) .AND. KCALL==3 ) THEN - DEALLOCATE(XHLC_HRC) - DEALLOCATE(XHLC_HCF) - DEALLOCATE(XHLI_HRI) - DEALLOCATE(XHLI_HCF) -END IF -! -IF ( ASSOCIATED(XCLDFR) .AND. KCALL==2 ) THEN - DEALLOCATE(XCLDFR) -END IF -! -IF ( ASSOCIATED(XICEFR) .AND. KCALL==2 ) THEN - DEALLOCATE(XICEFR) -END IF -! -IF ( ASSOCIATED(XRAINFR) .AND. KCALL==2 ) THEN - DEALLOCATE(XRAINFR) -END IF -! -IF ( KCALL == 3 ) THEN - DEALLOCATE(XSVT) -END IF -IF ( KCALL == 1 ) THEN - DEALLOCATE(XRSVS) - DEALLOCATE(XRSVS_CLD) -END IF -! -IF ((CCLOUD == 'KHKO') .AND. LSUPSAT) THEN - DEALLOCATE(XSUPSAT) - DEALLOCATE(XNACT) - DEALLOCATE(XNPRO) - DEALLOCATE(XSSPRO) -END IF -! -IF (ASSOCIATED(XDUMMY_GR_FIELDS) .AND. KCALL==3 ) THEN - DEALLOCATE(XDUMMY_GR_FIELDS) -END IF - -IF (ASSOCIATED(XLSPHI)) THEN - DEALLOCATE(XLSPHI) -END IF - -IF (ASSOCIATED(XBMAP)) THEN - DEALLOCATE(XBMAP) -END IF - -IF (ASSOCIATED(XFMRFA)) THEN - DEALLOCATE(XFMRFA) -END IF - -IF (ASSOCIATED(XFMWF0)) THEN - DEALLOCATE(XFMWF0) -END IF - -IF (ASSOCIATED(XFMR0)) THEN - DEALLOCATE(XFMR0) -END IF - -IF (ASSOCIATED(XFMR00)) THEN - DEALLOCATE(XFMR00) -END IF - -IF (ASSOCIATED(XFMIGNITION)) THEN - DEALLOCATE(XFMIGNITION) -END IF - -IF (ASSOCIATED(XFMFUELTYPE)) THEN - DEALLOCATE(XFMFUELTYPE) -END IF - -IF (ASSOCIATED(XFIRETAU)) THEN - DEALLOCATE(XFIRETAU) -END IF - -IF (ASSOCIATED(XFLUXPARAMH)) THEN - DEALLOCATE(XFLUXPARAMH) -END IF - -IF (ASSOCIATED(XFLUXPARAMW)) THEN - DEALLOCATE(XFLUXPARAMW) -END IF - -IF (ASSOCIATED(XFIRERW)) THEN - DEALLOCATE(XFIRERW) -END IF - -IF (ASSOCIATED(XFMASE)) THEN - DEALLOCATE(XFMASE) -END IF - -IF (ASSOCIATED(XFMAWC)) THEN - DEALLOCATE(XFMAWC) -END IF - -IF (ASSOCIATED(XFMWALKIG)) THEN - DEALLOCATE(XFMWALKIG) -END IF - -IF (ASSOCIATED(XFMFLUXHDH)) THEN - DEALLOCATE(XFMFLUXHDH) -END IF - -IF (ASSOCIATED(XFMFLUXHDW)) THEN - DEALLOCATE(XFMFLUXHDW) -END IF - -IF (ASSOCIATED(XFMHWS)) THEN - DEALLOCATE(XFMHWS) -END IF - -IF (ASSOCIATED(XFMWINDU)) THEN - DEALLOCATE(XFMWINDU) -END IF - -IF (ASSOCIATED(XFMWINDV)) THEN - DEALLOCATE(XFMWINDV) -END IF - -IF (ASSOCIATED(XFMWINDW)) THEN - DEALLOCATE(XFMWINDW) -END IF - -IF (ASSOCIATED(XFMGRADOROX)) THEN - DEALLOCATE(XFMGRADOROX) -END IF - -IF (ASSOCIATED(XFMGRADOROY)) THEN - DEALLOCATE(XFMGRADOROY) -END IF - -IF (ASSOCIATED(XGRADLSPHIX)) THEN - DEALLOCATE(XGRADLSPHIX) -END IF - -IF (ASSOCIATED(XGRADLSPHIY)) THEN - DEALLOCATE(XGRADLSPHIY) -END IF - -IF (ASSOCIATED(XFIREWIND)) THEN - DEALLOCATE(XFIREWIND) -END IF - -IF (ASSOCIATED(XLSPHI2D)) THEN - DEALLOCATE(XLSPHI2D) -END IF - -IF (ASSOCIATED(XGRADLSPHIX2D)) THEN - DEALLOCATE(XGRADLSPHIX2D) -END IF - -IF (ASSOCIATED(XGRADLSPHIY2D)) THEN - DEALLOCATE(XGRADLSPHIY2D) -END IF - -IF (ASSOCIATED(XGRADMASKX)) THEN - DEALLOCATE(XGRADMASKX) -END IF - -IF (ASSOCIATED(XGRADMASKY)) THEN - DEALLOCATE(XGRADMASKY) -END IF - -IF (ASSOCIATED(XSURFRATIO2D)) THEN - DEALLOCATE(XSURFRATIO2D) -END IF - -IF (ASSOCIATED(XLSDIFFUX2D)) THEN - DEALLOCATE(XLSDIFFUX2D) -END IF - -IF (ASSOCIATED(XLSDIFFUY2D)) THEN - DEALLOCATE(XLSDIFFUY2D) -END IF - -IF (ASSOCIATED(XFIRERW2D)) THEN - DEALLOCATE(XFIRERW2D) -END IF -! -!* 3. Module MODD_GRID$n -! -IF ( ASSOCIATED(XLON) .AND. KCALL == 3 ) THEN - DEALLOCATE(XLON) - DEALLOCATE(XLAT) - DEALLOCATE(XMAP) -END IF -! -IF ( KCALL == 3 ) THEN - !Philippe W.: do not deallocate XXHAT, XYHAT and XZHAT because they are needed later on - !As they are 1D, their memory footprint is negligible - ! DEALLOCATE(XXHAT) - DEALLOCATE(XDXHAT) - ! DEALLOCATE(XYHAT) - DEALLOCATE(XDYHAT) - DEALLOCATE(XZS) - DEALLOCATE(XZSMT) - DEALLOCATE(XZZ) - ! DEALLOCATE(XZHAT) -END IF -! -IF ( KCALL == 2 ) THEN - DEALLOCATE(XDIRCOSZW) - DEALLOCATE(XDIRCOSXW) - DEALLOCATE(XDIRCOSYW) - DEALLOCATE(XCOSSLOPE) - DEALLOCATE(XSINSLOPE) -END IF - -IF ( KCALL == 2 ) THEN - DEALLOCATE(XDXX) - DEALLOCATE(XDYY) - DEALLOCATE(XDZX) - DEALLOCATE(XDZY) - DEALLOCATE(XDZZ) -END IF -! -!* 4. Modules MODD_REF and MODD_REF$n -! -IF ( KCALL == 4 ) THEN - DEALLOCATE(XRHODREFZ) - DEALLOCATE(XTHVREFZ) -END IF -! -IF ( KCALL == 3 ) THEN - DEALLOCATE(XRHODREF) - DEALLOCATE(XTHVREF) - DEALLOCATE(XEXNREF) - DEALLOCATE(XRHODJ) - IF ( ASSOCIATED(XRVREF) ) THEN - DEALLOCATE(XRVREF) - END IF -END IF -! -!* 5. Module MODD_CURVCOR$n -! -IF ( ASSOCIATED(XCORIOX) .AND. KCALL == 2 ) THEN - DEALLOCATE(XCORIOX) - DEALLOCATE(XCORIOY) -END IF -IF ( KCALL == 2 ) THEN - DEALLOCATE(XCORIOZ) -END IF -IF ( ASSOCIATED(XCURVX) .AND. KCALL == 2) THEN - DEALLOCATE(XCURVX) - DEALLOCATE(XCURVY) -END IF -! -!* 6. Module MODD_DYN$n -! -IF ( KCALL == 1 ) THEN - DEALLOCATE(XBFY) - DEALLOCATE(XAF,XCF) - DEALLOCATE(XTRIGSX) - DEALLOCATE(XTRIGSY) - DEALLOCATE(XRHOM) - DEALLOCATE(XALK) - DEALLOCATE(XALKW) - DEALLOCATE(XALKBAS) - DEALLOCATE(XALKWBAS) - IF ( ASSOCIATED(XKURELAX) ) THEN - DEALLOCATE(XKURELAX) - DEALLOCATE(XKVRELAX) - DEALLOCATE(XKWRELAX) - DEALLOCATE(LMASK_RELAX) - END IF -END IF -! -!* 7. Larger Scale variables (Module MODD_LSFIELD$n) -! -IF ( KCALL == 3 ) THEN - DEALLOCATE(XLSUM) - DEALLOCATE(XLSVM) - DEALLOCATE(XLSWM) - DEALLOCATE(XLSTHM) - IF(ASSOCIATED(XLSRVM)) DEALLOCATE(XLSRVM) - IF (ASSOCIATED(XLBXUM)) THEN - DEALLOCATE(XLBXUM) - DEALLOCATE(XLBYUM) - DEALLOCATE(XLBXVM) - DEALLOCATE(XLBYVM) - DEALLOCATE(XLBXWM) - DEALLOCATE(XLBYWM) - DEALLOCATE(XLBXTHM) - DEALLOCATE(XLBYTHM) - END IF - IF (ASSOCIATED(XLBXTKEM)) THEN - DEALLOCATE(XLBXTKEM) - DEALLOCATE(XLBYTKEM) - END IF - IF (ASSOCIATED(XLBXRM)) THEN - DEALLOCATE(XLBXRM) - DEALLOCATE(XLBYRM) - END IF - IF (ASSOCIATED(XLBXSVM)) THEN - DEALLOCATE(XLBXSVM) - DEALLOCATE(XLBYSVM) - END IF -END IF -! - ! steady LS fields only for model 1 or independent models -! -IF( ASSOCIATED(XLSUS) .AND. KCALL == 3 ) THEN - DEALLOCATE(XLSUS) - DEALLOCATE(XLSVS) - DEALLOCATE(XLSWS) - DEALLOCATE(XLSTHS) - IF(ASSOCIATED(XLSRVS)) DEALLOCATE(XLSRVS) -! - IF ( ASSOCIATED(XLBXUS) ) THEN - DEALLOCATE(XLBXUS) - DEALLOCATE(XLBYUS) - DEALLOCATE(XLBXVS) - DEALLOCATE(XLBYVS) - DEALLOCATE(XLBXWS) - DEALLOCATE(XLBYWS) - DEALLOCATE(XLBXTHS) - DEALLOCATE(XLBYTHS) - END IF - IF ( ASSOCIATED(XLBXTKES) ) THEN - DEALLOCATE(XLBXTKES) - DEALLOCATE(XLBYTKES) - END IF -! - IF ( ASSOCIATED(XLBXRS) ) THEN - DEALLOCATE(XLBXRS) - DEALLOCATE(XLBYRS) - END IF -! - IF ( ASSOCIATED(XLBXSVS) ) THEN - DEALLOCATE(XLBXSVS) - DEALLOCATE(XLBYSVS) - END IF -! - IF ( ASSOCIATED(XCOEFLIN_LBXM) ) THEN - DEALLOCATE(XCOEFLIN_LBXM) - DEALLOCATE(NKLIN_LBXM) - END IF - - IF ( ASSOCIATED(XCOEFLIN_LBYM) ) THEN - DEALLOCATE(XCOEFLIN_LBYM) - DEALLOCATE(NKLIN_LBYM) - END IF - - IF ( ASSOCIATED(XCOEFLIN_LBXU) ) THEN - DEALLOCATE(XCOEFLIN_LBXU) - DEALLOCATE(NKLIN_LBXU) - DEALLOCATE(XCOEFLIN_LBYU) - DEALLOCATE(NKLIN_LBYU) - DEALLOCATE(XCOEFLIN_LBXV) - DEALLOCATE(NKLIN_LBXV) - DEALLOCATE(XCOEFLIN_LBYV) - DEALLOCATE(NKLIN_LBYV) - DEALLOCATE(XCOEFLIN_LBXW) - DEALLOCATE(NKLIN_LBXW) - DEALLOCATE(XCOEFLIN_LBYW) - DEALLOCATE(NKLIN_LBYW) - END IF -END IF -! -!* 8. L.E.S. variables -! - -! -!* 9. Module MODD_RADIATIONS$n -! -! -IF ( ASSOCIATED(XSLOPANG) .AND. KCALL == 2 ) THEN - DEALLOCATE(XSLOPANG) - DEALLOCATE(XSLOPAZI) - DEALLOCATE(XDTHRAD) - DEALLOCATE(XFLALWD) - DEALLOCATE(XDIRFLASWD) - DEALLOCATE(XSCAFLASWD) - DEALLOCATE(XDIRSRFSWD) - DEALLOCATE(XSWU) - DEALLOCATE(XSWD) - DEALLOCATE(XLWU) - DEALLOCATE(XLWD) - DEALLOCATE(XDTHRADSW) - DEALLOCATE(XDTHRADLW) - DEALLOCATE(XRADEFF) - DEALLOCATE(NCLEARCOL_TM1) -END IF -IF (ASSOCIATED(XSTATM)) DEALLOCATE(XSTATM) -! -!* 10. Module MODD_DEEP_CONVECTION$n -! -IF ( ASSOCIATED(XDTHCONV) .AND. KCALL == 2 ) THEN - DEALLOCATE(NCOUNTCONV) - DEALLOCATE(XDTHCONV) - DEALLOCATE(XDRVCONV) - DEALLOCATE(XDRCCONV) - DEALLOCATE(XDRICONV) -END IF -! -IF ( ASSOCIATED(XPRCONV) .AND. KCALL == 2 ) THEN - DEALLOCATE(XPRCONV) - DEALLOCATE(XPACCONV) -END IF -IF ( ASSOCIATED(XPRSCONV) .AND. KCALL == 2 ) THEN - DEALLOCATE(XPRSCONV) -END IF -! -IF ( ASSOCIATED(XDSVCONV) .AND. KCALL == 2 ) THEN - DEALLOCATE(XDSVCONV) -END IF -! -!* 11. Forcing variables (Module MODD_FRC) -! -IF ( ALLOCATED(XUFRC) .AND. KCALL == 4 ) THEN - DEALLOCATE(TDTFRC) - DEALLOCATE(XUFRC) - DEALLOCATE(XVFRC) - DEALLOCATE(XWFRC) - DEALLOCATE(XTHFRC) - DEALLOCATE(XRVFRC) - DEALLOCATE(XTENDTHFRC) - DEALLOCATE(XTENDRVFRC) - DEALLOCATE(XGXTHFRC) - DEALLOCATE(XGYTHFRC) - DEALLOCATE(XPGROUNDFRC) -END IF -! -!* 12. Module MODD_ICE_CONC$n -! -IF ( ASSOCIATED(XCIT) .AND. KCALL == 2 ) THEN - DEALLOCATE(XCIT) -END IF -! -!* 13. Module MODD_PRECIP$n -! -IF ( ASSOCIATED(XINPRC) .AND. KCALL == 3 ) THEN - DEALLOCATE(XINPRC) - DEALLOCATE(XACPRC) -END IF -! -IF ( ASSOCIATED(XINPRR) .AND. KCALL == 3 ) THEN - DEALLOCATE(XINPRR) - DEALLOCATE(XACPRR) -END IF -! -IF ( ASSOCIATED(XINPRR3D) .AND. KCALL == 3 ) THEN - DEALLOCATE(XINPRR3D) - DEALLOCATE(XEVAP3D) -END IF -! -IF ( ASSOCIATED(XINPRS) .AND. KCALL == 3 ) THEN - DEALLOCATE(XINPRS) - DEALLOCATE(XACPRS) - DEALLOCATE(XINPRG) - DEALLOCATE(XACPRG) -END IF -! -IF ( ASSOCIATED(XINPRH) .AND. KCALL == 3 ) THEN - DEALLOCATE(XINPRH) - DEALLOCATE(XACPRH) -END IF -! -!* 13b. Module MODD_ELEC$n -! -IF ( ASSOCIATED(XNI_SDRYG) .AND. KCALL == 3 ) THEN - DEALLOCATE(XNI_SDRYG) - DEALLOCATE(XNI_IDRYG) - DEALLOCATE(XNI_IAGGS) - DEALLOCATE(XEW) - DEALLOCATE(XIND_RATE) -END IF -! -IF ( ASSOCIATED(XEFIELDU) .AND. KCALL == 3 ) THEN - DEALLOCATE(XEFIELDU) - DEALLOCATE(XEFIELDV) - DEALLOCATE(XEFIELDW) - DEALLOCATE(XESOURCEFW) - DEALLOCATE(XIONSOURCEFW) - DEALLOCATE(XCION_POS_FW) - DEALLOCATE(XCION_NEG_FW) - DEALLOCATE(XMOBIL_POS) - DEALLOCATE(XMOBIL_NEG) -END IF -! -IF ( ASSOCIATED(XRHOM_E) .AND. KCALL == 3 ) THEN - DEALLOCATE (XRHOM_E) - DEALLOCATE (XAF_E) - DEALLOCATE (XCF_E) - DEALLOCATE (XBFY_E) -END IF -! -!* 14. Modules RAIN_ICE_DESCR and MODD_RAIN_ICE_PARAM -! -IF ( ASSOCIATED(XRTMIN) .AND. KCALL == 4 ) THEN - CALL RAIN_ICE_DESCR_DEALLOCATE() - CALL RAIN_ICE_PARAM_DEALLOCATE() -END IF -! -!* 15. Module PASPOLn -! -IF ( ASSOCIATED(XATC) .AND. KCALL == 3 ) THEN - DEALLOCATE(XATC) -END IF -! -!* 16. Module TURBn -! -IF ( KCALL==3 ) THEN - IF (ASSOCIATED(XDYP)) DEALLOCATE(XDYP) - IF (ASSOCIATED(XTHP)) DEALLOCATE(XTHP) - IF (ASSOCIATED(XTR)) DEALLOCATE(XTR) - IF (ASSOCIATED(XDISS)) DEALLOCATE(XDISS) - IF (ASSOCIATED(XLEM)) DEALLOCATE(XLEM) -END IF -!------------------------------------------------------------------------------- -! -CALL GOTO_MODEL(IMI) -! -END SUBROUTINE DEALLOCATE_MODEL1 diff --git a/src/mesonh/ext/default_desfmn.f90 b/src/mesonh/ext/default_desfmn.f90 deleted file mode 100644 index ade773022..000000000 --- a/src/mesonh/ext/default_desfmn.f90 +++ /dev/null @@ -1,1481 +0,0 @@ -!MNH_LIC Copyright 1994-2021 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. -!----------------------------------------------------------------- -! ########################### - MODULE MODI_DEFAULT_DESFM_n -! ########################### -! -INTERFACE -! -SUBROUTINE DEFAULT_DESFM_n(KMI) -INTEGER, INTENT(IN) :: KMI ! Model index -END SUBROUTINE DEFAULT_DESFM_n -! -END INTERFACE -! -END MODULE MODI_DEFAULT_DESFM_n -! -! -! -! ############################### - SUBROUTINE DEFAULT_DESFM_n(KMI) -! ############################### -! -!!**** *DEFAULT_DESFM_n * - set default values for descriptive variables of -!! model KMI -!! -!! PURPOSE -!! ------- -! The purpose of this routine is to set default values for the variables -! in descriptor files by filling the corresponding variables which -! are stored in modules. -! -! -!!** METHOD -!! ------ -!! Each variable in modules, which can be initialized by reading its -!! value in the descriptor file is set to a default value. -!! When this routine is used during INIT, the modules of the first model -!! are used to temporarily store the variables associated with a nested -!! model. -!! When this routine is used during SPAWNING, the modules of a second -!! model must be initialized. -!! Default values for variables common to all models are set only -!! at the first call of DEFAULT_DESFM_n (i.e. when KMI=1) -!! -!! -!! EXTERNAL -!! -------- -!! NONE -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! Module MODD_PARAMETERS : JPHEXT,JPVEXT -!! -!! Module MODD_CONF : CCONF,L2D,L1D,LFLAT,NMODEL,NVERB -!! -!! Module MODD_DYN : XSEGLEN,XASSELIN,LCORIO,LNUMDIFF -!! XALKTOP,XALZBOT -!! -!! Module MODD_BAKOUT -!! -!! Module MODD_NESTING : NDAD(m),NDTRATIO(m),XWAY(m) -!! -!! Module MODD_CONF_n : LUSERV,LUSERC,LUSERR,LUSERI,LUSERS -!! LUSERG,LUSERH,CSEG,CEXP -!! -!! Module MODD_LUNIT_n : CINIFILE,CCPLFILE -!! -!! -!! Module MODD_DYN_n : XTSTEP,CPRESOPT,NITR,XRELAX,LHO_RELAX -!! LVE_RELAX,XRIMKMAX,NRIMX,NRIMY -!! -!! Module MODD_ADV_n : CUVW_ADV_SCHEME,CMET_ADV_SCHEME,CSV_ADV_SCHEME,NLITER -!! -!! Module MODD_PARAM_n : CTURB,CRAD,CDCONV,CSCONV -!! -!! Module MODD_LBC_n : CLBCX, CLBCY,NLBLX,NLBLY,XCPHASE,XCPHASE_PBL,XPOND -!! -!! Module MODD_TURB_n : XIMPL,CTURBLEN,CTURBDIM,LTURB_FLX,LTURB_DIAG,LSUBG_COND -!! LTGT_FLX -!! -!! -!! Module MODD_PARAM_RAD_n: -!! XDTRAD,XDTRAD_CLONLY,LCLEAR_SKY,NRAD_COLNBR, NRAD_DIAG -!! -!! Module MODD_BUDGET : CBUTYPE,NBUMOD,XBULEN,NBUKL, NBUKH,LBU_KCP,XBUWRI -!! NBUIL, NBUIH,NBUJL, NBUJH,LBU_ICP,LBU_JCP,NBUMASK -!! -!! Module MODD_BLANK_n: -!! -!! XDUMMYi, NDUMMYi, LDUMMYi, CDUMMYi -!! -!! Module MODD_FRC : -!! -!! LGEOST_UV_FRC,LGEOST_TH_FRC,LTEND_THRV_FRC -!! LVERT_MOTION_FRC,LRELAX_THRV_FRC,LRELAX_UV_FRC,LRELAX_UVMEAN_FRC, -!! XRELAX_TIME_FRC -!! XRELAX_HEIGHT_FRC,CRELAX_HEIGHT_TYPE,LTRANS,XUTRANS,XVTRANS, -!! LPGROUND_FRC -!! -!! Module MODD_PARAM_ICE : -!! -!! LWARM,CPRISTINE_ICE -!! -!! Module MODD_PARAM_KAFR_n : -!! -!! XDTCONV,LREFRESH_ALL,LDOWN,NICE,LCHTRANS -!! -!! Module MODD_PARAM_MFSHALL_n : -!! -!! CMF_UPDRAFT,LMIXUV,CMF_CLOUD,XIMPL_MF,LMF_FLX -!! -!! -!! -!! -!! REFERENCE -!! --------- -!! Book2 of the documentation (routine DEFAULT_DESFM_n) -!! -!! -!! AUTHOR -!! ------ -!! V. Ducrocq * Meteo France * -!! -!! MODIFICATIONS -!! ------------- -!! Original 02/06/94 -!! Modifications 17/10/94 (Stein) For LCORIO -!! Modifications 06/12/94 (Stein) remove LBOUSS+add LABSLAYER, LNUMDIFF -!! ,LSTEADYLS -!! Modifications 06/12/94 (Stein) remove LABSLAYER, add LHO_RELAX, -!! LVE_RELAX, NRIMX, NRIMY, XRIMKMAX -!! Modifications 09/01/95 (Lafore) add LSTEADY_DMASS -!! Modifications 09/01/95 (Stein) add the turbulence scheme namelist -!! Modifications 09/01/95 (Stein) add the 1D switch -!! Modifications 10/03/95 (Mallet) add the coupling files -!! 29/06/95 ( Stein, Nicolau, Hereil) add the budgets -!! Modifications 25/09/95 ( Stein )add the LES tools -!! Modifications 25/10/95 ( Stein )add the radiations -!! Modifications 23/10/95 (Vila, lafore) new scalar advection scheme -!! Modifications 24/02/96 (Stein) change the default value for CCPLFILE -!! Modifications 12/02/96 (Lafore) transformation to DEFAULT_DESFM_n for -!! spawning -!! Modifications 25/04/96 (Suhre) add the blank module -!! Modifications 29/07/96 (Pinty&Suhre) add module MODD_FRC -!! Modifications 11/04/96 (Pinty) add the rain-ice scheme and modify -!! the split arrays in MODD_PARAM_RAD_n -!! Modifications 11/01/97 (Pinty) add the deep convection scheme -!! Modifications 24/11/96 (Masson) add LREFRESH_ALL in deep convection -!! Modifications 12/02/96 (Lafore) transformation to DEFAULT_DESFM_n for spawning -!! Modifications 22/07/96 (Lafore) gridnesting implementation -!! Modifications 29/07/96 (Lafore) add the module MODD_FMOUT (renamed MODD_BAKOUT) -!! Modifications 23/06/97 (Stein) add the equation system name -!! Modifications 10/07/97 (Masson) add MODD_PARAM_GROUNDn : CROUGH -!! Modifications 28/07/97 (Masson) remove LREFRESH_ALL and LSTEADY_DMASS -!! Modifications 08/10/97 (Stein) switch (_n=1) to initialize the -!! parameters common to all models -!! Modifications 24/01/98 (Bechtold) add LREFRESH_ALL, LCHTRANS, -!! LTEND_THRV_FR and LSST_FRC -!! Modifications 18/07/99 (Stein) add LRAD_DIAG -!! Modification 15/03/99 (Masson) use of XUNDEF -!! Modification 11/12/00 (Tomasini) Add CSEA_FLUX to MODD_PARAMn -!! Modification 22/01/01 (Gazen) delete NSV and add LHORELAX_SVC2R2 -!! LHORELAX_SVCHEM,LHORELAX_SVLG -!! Modification 15/03/02 (Solmon) radiation scheme: remove NSPOT and add -!! default for aerosol and cloud rad. prop. control -!! Modification 22/05/02 (Jabouille) put chimical default here -!! Modification 01/2004 (Masson) removes surface (externalization) -!! 09/04 (M. Tomasini) New namelist to modify the -!! Cloud mixing length -!! 07/05 (P.Tulet) New namelists for dust and aerosol -!! Modification 01/2007 (Malardel, Pergaud) Add MODD_PARAM_MFSHALL_n -!! Modification 10/2009 (Aumond) Add user multimasks for LES -!! Modification 10/2009 (Aumond) Add MEAN_FIELD -!! Modification 12/04/07 (Leriche) add LUSECHAQ for aqueous chemistry -!! Modification 30/05/07 (Leriche) add LCH_PH and XCH_PHINIT for pH -!! Modification 25/04/08 (Leriche) add XRTMIN_AQ LWC threshold for aq. chemistry -!! 16/07/10 add LHORELAX_SVIC -!! 16/09/10 add LUSECHIC -!! 13/01/11 add LCH_RET_ICE -!! 01/07/11 (F.Couvreux) Add CONDSAMP -!! 01/07/11 (B.Aouizerats) Add CAOP -!! 07/2013 (C.Lac) add WENO, LCHECK -!! 07/2013 (Bosseur & Filippi) adds Forefire -!! 08/2015 (Redelsperger & Pianezze) add XPOND coefficient for LBC -!! Modification 24/03/16 (Leriche) remove LCH_SURFACE_FLUX -!! put NCH_VEC_LENGTH = 50 instead of 1000 -!! -!! 04/2016 (C.LAC) negative contribution to the budget split between advection, turbulence and microphysics for KHKO/C2R2 -!! Modification 01/2016 (JP Pinty) Add LIMA -!! Modification 24/03/16 (Leriche) remove LCH_SURFACE_FLUX -!! put NCH_VEC_LENGTH = 50 instead of 1000 -!! 10/2016 (C.Lac) VSIGQSAT change from 0 to 0.02 for coherence with AROME -!! 10/2016 (C.Lac) Add droplet deposition -!! 10/2016 (R.Honnert and S.Riette) : Improvement of EDKF and adaptation to the grey zone -!! 10/2016 (F Brosse) add prod/loss terms computation for chemistry -!! 07/2017 (V. Masson) adds time step for output files writing. -!! 09/2017 Q.Rodier add LTEND_UV_FRC -!! 02/2018 Q.Libois ECRAD -! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -!! 01/2018 (S. Riette) new budgets and variables for ICE3/ICE4 -!! 01/2018 (J.Colin) add VISC and DRAG -!! 07/2017 (V. Vionnet) add blowing snow variables -!! 01/2019 (R. Honnert) add reduction of the mass-flux surface closure with the resolution -!! Bielli S. 02/2019 Sea salt : significant sea wave height influences salt emission; 5 salt modes -!! 05/2019 F.Brient add tracer emission from the top of the boundary-layer -!! 11/2019 C.Lac correction in the drag formula and application to building in addition to tree -! P. Wautelet 17/04/2020: move budgets switch values into modd_budget -! P. Wautelet 30/06/2020: add NNETURSV, NNEADVSV and NNECONSV variables -! F. Auguste, T. Nagel 02/2021: add IBM defaults parameters -! T. Nagel 02/2021: add turbulence recycling defaults parameters -! P-A Joulin 21/05/2021: add Wind turbines -! S. Riette 21/05/2021: add options to PDF subgrid scheme -! D. Ricard 05/2021: add the contribution of Leonard terms in the turbulence scheme -! JL Redelsperger 06/2021: add parameters allowing to active idealized oceanic convection -! B. Vie 06/2021: add prognostic supersaturation for LIMA -! Q. Rodier 06/2021: modify default value to LGZ=F (grey-zone corr.), LSEDI and OSEDC=T (LIMA sedimentation) -! F. Couvreux 06/2021: add LRELAX_UVMEAN_FRC -! Q. Rodier 07/2021: modify XPOND=1 -! A. Costes 12/2021: Blaze fire model -! C. Barthe 03/2022: add CIBU and RDSF options in LIMA -! Delbeke/Vie 03/2022 : KHKO option in LIMA -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -USE MODD_PARAMETERS -USE MODD_CONF ! For INIT only DEFAULT_DESFM1 -USE MODD_CONFZ -USE MODD_DYN -USE MODD_NESTING -USE MODD_BAKOUT -USE MODD_SERIES -USE MODD_CONF_n ! modules used to set the default values is only -USE MODD_LUNIT_n ! the one corresponding to model 1. These memory -USE MODD_DIM_n ! addresses will then be filled by the values read in -USE MODD_DYN_n ! the DESFM corresponding to model n which may have -USE MODD_ADV_n ! missing values. This is why we affect default values. -USE MODD_PARAM_n ! For SPAWNING DEFAULT_DESFM2 is also used -USE MODD_LBC_n -USE MODD_OUT_n -USE MODD_TURB_n -USE MODD_BUDGET -USE MODD_LES -USE MODD_PARAM_RAD_n -#ifdef MNH_ECRAD -USE MODD_PARAM_ECRAD_n -#if ( VER_ECRAD == 140 ) -USE MODD_RADIATIONS_n , ONLY : NSWB_MNH, NLWB_MNH -#endif -#endif -USE MODD_BLANK_n -USE MODD_FRC -USE MODD_PARAM_ICE -USE MODD_PARAM_C2R2 -USE MODD_TURB_CLOUD -USE MODD_PARAM_KAFR_n -USE MODD_PARAM_MFSHALL_n -USE MODD_CH_MNHC_n -USE MODD_SERIES_n -USE MODD_NUDGING_n -USE MODD_CH_AEROSOL -USE MODD_DUST -USE MODD_SALT -USE MODD_PASPOL -USE MODD_CONDSAMP -USE MODD_MEAN_FIELD -USE MODD_DRAGTREE_n -USE MODD_DRAGBLDG_n -USE MODD_EOL_MAIN -USE MODD_EOL_ADNR -USE MODD_EOL_ALM -USE MODD_EOL_SHARED_IO -USE MODD_ALLSTATION_n -! -! -USE MODD_PARAM_LIMA, ONLY : LCOLD, LNUCL, LSEDI, LHHONI, LSNOW, LHAIL, LMEYERS, & - NMOM_I, NMOM_S, NMOM_G, NMOM_H, & - NMOD_IFN, XIFN_CONC, LIFN_HOM, CIFN_SPECIES, & - CINT_MIXING, NMOD_IMM, NIND_SPECIE, LMURAKAMI, & - YSNOW_T=>LSNOW_T, CPRISTINE_ICE_LIMA, CHEVRIMED_ICE_LIMA, & - XFACTNUC_DEP, XFACTNUC_CON, & - OWARM=>LWARM, LACTI, ORAIN=>LRAIN, OSEDC=>LSEDC, & - OACTIT=>LACTIT, LBOUND, LSPRO, LADJ, LKHKO, NMOM_C, NMOM_R, & - NMOD_CCN, XCCN_CONC, LKESSLERAC, & - LCCN_HOM, CCCN_MODES, & - YALPHAR=>XALPHAR, YNUR=>XNUR, & - YALPHAC=>XALPHAC, YNUC=>XNUC, CINI_CCN=>HINI_CCN, & - CTYPE_CCN=>HTYPE_CCN, YFSOLUB_CCN=>XFSOLUB_CCN, & - YACTEMP_CCN=>XACTEMP_CCN, YAERDIFF=>XAERDIFF, & - YAERHEIGHT=>XAERHEIGHT, & - LSCAV, LAERO_MASS, NPHILLIPS, & - LCIBU, XNDEBRIS_CIBU, LRDSF, & - ODEPOC=>LDEPOC, OVDEPOC=>XVDEPOC, OACTTKE=>LACTTKE, & - LPTSPLIT, L_LFEEDBACKT=>LFEEDBACKT, L_NMAXITER=>NMAXITER, & - L_XMRSTEP=>XMRSTEP, L_XTSTEP_TS=>XTSTEP_TS -! -USE MODD_LATZ_EDFLX -USE MODD_2D_FRC -USE MODD_BLOWSNOW -USE MODD_BLOWSNOW_n -USE MODD_DRAG_n -USE MODD_VISCOSITY -USE MODD_RECYCL_PARAM_n -USE MODD_IBM_PARAM_n -USE MODD_IBM_LSF -#ifdef MNH_FOREFIRE -USE MODD_FOREFIRE -#endif -USE MODD_FIRE -! -IMPLICIT NONE -! -!* 0.1 declarations of arguments -! -INTEGER, INTENT(IN) :: KMI ! Model index -! -!* 0.2 declaration of local variables -! -INTEGER :: JM ! loop index -! -!------------------------------------------------------------------------------- -! -!* 1. SET DEFAULT VALUES FOR MODD_LUNIT_n : -! ---------------------------------- -! -! CINIFILE='INIFILE' -CINIFILEPGD='' !Necessary to keep this line to prevent problems with spawning -CCPLFILE(:)=' ' -! -!------------------------------------------------------------------------------- -! -!* 2. SET DEFAULT VALUES FOR MODD_CONF AND MODD_CONF_n : -! ------------------------------------------------ -! -IF (KMI == 1) THEN - CCONF ='START' - LTHINSHELL = .FALSE. - L2D = .FALSE. - L1D = .FALSE. - LFLAT = .FALSE. - NMODEL = 1 - CEQNSYS = 'DUR' - NVERB = 5 - CEXP = 'EXP01' - CSEG = 'SEG01' - LFORCING = .FALSE. - L2D_ADV_FRC= .FALSE. - L2D_REL_FRC= .FALSE. - XRELAX_HEIGHT_BOT = 0. - XRELAX_HEIGHT_TOP = 30000. - XRELAX_TIME = 864000. - LPACK = .TRUE. - NHALO = 1 -#ifdef MNH_SX5 - CSPLIT ='YSPLITTING' ! NEC vectoriel architecture , low number of PROC -#else - CSPLIT ='BSPLITTING' ! Scalaire architecture , high number of PROC -#endif - NZ_PROC = 0 !JUAN Z_SPLITTING :: number of proc in Z splitting - NZ_SPLITTING = 10 !JUAN Z_SPLITTING :: for debug NZ=1=flat_inv; NZ=10=flat_invz; NZ=1+2 the two - LLG = .FALSE. - LINIT_LG = .FALSE. - CINIT_LG = 'FMOUT' - LNOMIXLG = .FALSE. - LCHECK = .FALSE. -END IF -! -CCLOUD = 'NONE' -LUSERV = .TRUE. -LUSERC = .FALSE. -LUSERR = .FALSE. -LUSERI = .FALSE. -LUSERS = .FALSE. -LUSERG = .FALSE. -LUSERH = .FALSE. -LOCEAN = .FALSE. -!NSV = 0 -!NSV_USER = 0 -LUSECI = .FALSE. -! -!------------------------------------------------------------------------------- -! -!* 3. SET DEFAULT VALUES FOR MODD_DYN AND MODD_DYN_n : -! ----------------------------------------------- -! -IF (KMI == 1) THEN - XSEGLEN = 43200. - XASSELIN = 0.2 - XASSELIN_SV = 0.02 - LCORIO = .TRUE. - LNUMDIFU = .TRUE. - LNUMDIFTH = .FALSE. - LNUMDIFSV = .FALSE. - XALZBOT = 4000. - XALKTOP = 0.01 - XALKGRD = 0.01 - XALZBAS = 0.01 -END IF -! -XTSTEP = 60. -CPRESOPT = 'CRESI' -NITR = 4 -LITRADJ = .TRUE. -LRES = .FALSE. -XRES = 1.E-07 -XRELAX = 1. -LVE_RELAX = .FALSE. -LVE_RELAX_GRD = .FALSE. -XRIMKMAX = 0.01 / XTSTEP -XT4DIFU = 1800. -XT4DIFTH = 1800. -XT4DIFSV = 1800. -! -IF (KMI == 1) THEN ! for model 1 we have a Large scale information - NRIMX = JPRIMMAX ! for U,V,W,TH,Rv used for the hor. relaxation - NRIMY = JPRIMMAX -ELSE - NRIMX = 0 ! for inner models we use only surfacic fields to - NRIMY = 0 ! give the lbc and no hor. relaxation is used -END IF -! -LHORELAX_UVWTH = .FALSE. -LHORELAX_RV = .FALSE. -LHORELAX_RC = .FALSE. ! for all these fields, no large scale is usally available -LHORELAX_RR = .FALSE. ! for model 1 and for inner models, we only use surfacic -LHORELAX_RS = .FALSE. ! fiels ( no hor. relax. ) -LHORELAX_RI = .FALSE. -LHORELAX_RG = .FALSE. -LHORELAX_RH = .FALSE. -LHORELAX_TKE = .FALSE. -LHORELAX_SV(:) = .FALSE. -LHORELAX_SVC2R2 = .FALSE. -LHORELAX_SVC1R3 = .FALSE. -LHORELAX_SVELEC = .FALSE. -LHORELAX_SVLG = .FALSE. -LHORELAX_SVCHEM = .FALSE. -LHORELAX_SVCHIC = .FALSE. -LHORELAX_SVDST = .FALSE. -LHORELAX_SVSLT = .FALSE. -LHORELAX_SVPP = .FALSE. -LHORELAX_SVCS = .FALSE. -LHORELAX_SVAER = .FALSE. -! -LHORELAX_SVLIMA = .FALSE. -! -#ifdef MNH_FOREFIRE -LHORELAX_SVFF = .FALSE. -#endif -LHORELAX_SVSNW = .FALSE. -LHORELAX_SVFIRE = .FALSE. -! -! -!------------------------------------------------------------------------------- -! -!* 4. SET DEFAULT VALUES FOR MODD_NESTING : -! ----------------------------------- -! -IF (KMI == 1) THEN - NDAD(1)=1 - DO JM=2,JPMODELMAX - NDAD(JM) = JM - 1 - END DO - NDTRATIO(:) = 1 - XWAY(:) = 2. ! two-way interactive gridnesting - XWAY(1) = 0. ! except for model 1 -END IF -! -!------------------------------------------------------------------------------- -! -!* 5. SET DEFAULT VALUES FOR MODD_ADV_n : -! ---------------------------------- -! -CUVW_ADV_SCHEME = 'CEN4TH' -CMET_ADV_SCHEME = 'PPM_01' -CSV_ADV_SCHEME = 'PPM_01' -CTEMP_SCHEME = 'RKC4' -NWENO_ORDER = 3 -NSPLIT = 1 -LSPLIT_CFL = .TRUE. -LSPLIT_WENO = .TRUE. -XSPLIT_CFL = 0.8 -LCFL_WRIT = .FALSE. -! -!------------------------------------------------------------------------------- -! -!* 6. SET DEFAULT VALUES FOR MODD_PARAM_n : -! ----------------------------------- -! -CTURB = 'NONE' -CRAD = 'NONE' -CDCONV = 'NONE' -CSCONV = 'NONE' -CELEC = 'NONE' -CACTCCN = 'NONE' -! -!------------------------------------------------------------------------------- -! -!* 7. SET DEFAULT VALUES FOR MODD_LBC_n : -! --------------------------------- -! -CLBCX(1) ='CYCL' -CLBCX(2) ='CYCL' -CLBCY(1) ='CYCL' -CLBCY(2) ='CYCL' -NLBLX(:) = 1 -NLBLY(:) = 1 -XCPHASE = 20. -XCPHASE_PBL = 0. -XCARPKMAX = XUNDEF -XPOND = 1.0 -! -!------------------------------------------------------------------------------- -! -!* 8. SET DEFAULT VALUES FOR MODD_NUDGING_n : -! --------------------------------- -! -LNUDGING = .FALSE. -XTNUDGING = 21600. -! -!------------------------------------------------------------------------------- -! -!* 9. SET DEFAULT VALUES FOR MODD_BAKOUT and MODD_OUT_n : -! ------------------------------------------------ -! -! -! -!------------------------------------------------------------------------------- -! -!* 10. SET DEFAULT VALUES FOR MODD_TURB_n : -! ---------------------------------- -! -XIMPL = 1. -XKEMIN = 0.01 -XCEDIS = 0.84 -XCADAP = 0.5 -CTURBLEN = 'BL89' -CTURBDIM = '1DIM' -LTURB_FLX =.FALSE. -LTURB_DIAG=.FALSE. -LSUBG_COND=.FALSE. -CSUBG_AUCV='NONE' -CSUBG_AUCV_RI='NONE' -LSIGMAS =.TRUE. -LSIG_CONV =.FALSE. -LRMC01 =.FALSE. -CTOM ='NONE' -VSIGQSAT = 0.02 -CCONDENS='CB02' -CLAMBDA3='CB' -CSUBG_MF_PDF='TRIANGLE' -LLEONARD =.FALSE. -XCOEFHGRADTHL = 1.0 -XCOEFHGRADRM = 1.0 -XALTHGRAD = 2000.0 -XCLDTHOLD = -1.0 - -!------------------------------------------------------------------------------- -! -!* 10b. SET DEFAULT VALUES FOR MODD_DRAGTREE : -! ---------------------------------- -! -LDRAGTREE = .FALSE. -LDEPOTREE = .FALSE. -XVDEPOTREE = 0.02 ! 2 cm/s -!------------------------------------------------------------------------------ -! -!* 10c. SET DEFAULT VALUES FOR MODD_DRAGB -! ---------------------------------- -! -LDRAGBLDG = .FALSE. -! -!* 10d. SET DEFAULT VALUES FOR MODD_EOL* : -! ---------------------------------- -! -! 10d.i) MODD_EOL_MAIN -! -LMAIN_EOL = .FALSE. -CMETH_EOL = 'ADNR' -CSMEAR = '3LIN' -NMODEL_EOL = 1 -! -! 10d.ii) MODD_EOL_SHARED_IO -! -CFARM_CSVDATA = 'data_farm.csv' -CTURBINE_CSVDATA = 'data_turbine.csv' -CBLADE_CSVDATA = 'data_blade.csv' -CAIRFOIL_CSVDATA = 'data_airfoil.csv' -! -CINTERP = 'CLS' -! -! 10d.iii) MODD_EOL_ALM -! -NNB_BLAELT = 42 -LTIMESPLIT = .FALSE. -LTIPLOSSG = .TRUE. -LTECOUTPTS = .FALSE. -! -!------------------------------------------------------------------------------ -!* 10.e SET DEFAULT VALUES FOR MODD_ALLSTATION_n : -! ---------------------------------- -! -NNUMB_STAT = 0 -XSTEP_STAT = 60.0 -XX_STAT(:) = XUNDEF -XY_STAT(:) = XUNDEF -XZ_STAT(:) = XUNDEF -XLAT_STAT(:) = XUNDEF -XLON_STAT(:) = XUNDEF -CNAME_STAT(:) = '' -CTYPE_STAT(:) = '' -CFILE_STAT = 'NO_INPUT_CSV' -LDIAG_SURFRAD = .TRUE. -! -!------------------------------------------------------------------------------- -! -!* 11. SET DEFAULT VALUES FOR MODD_BUDGET : -! ------------------------------------ -! -! 11.1 General budget variables -! -IF (KMI == 1) THEN - CBUTYPE = 'NONE' - NBUMOD = 1 - XBULEN = XSEGLEN - XBUWRI = XSEGLEN - NBUKL = 1 - NBUKH = 0 - LBU_KCP = .TRUE. -! -! 11.2 Variables for the cartesian box -! - NBUIL = 1 - NBUIH = 0 - NBUJL = 1 - NBUJH = 0 - LBU_ICP = .TRUE. - LBU_JCP = .TRUE. -! -! 11.3 Variables for the mask -! - NBUMASK = 1 -END IF -! -!------------------------------------------------------------------------------- -! -!* 12. SET DEFAULT VALUES FOR MODD_LES : -! --------------------------------- -! -IF (KMI == 1) THEN - LLES_MEAN = .FALSE. - LLES_RESOLVED = .FALSE. - LLES_SUBGRID = .FALSE. - LLES_UPDRAFT = .FALSE. - LLES_DOWNDRAFT = .FALSE. - LLES_SPECTRA = .FALSE. -! - NLES_LEVELS = NUNDEF - XLES_ALTITUDES = XUNDEF - NSPECTRA_LEVELS = NUNDEF - XSPECTRA_ALTITUDES = XUNDEF - NLES_TEMP_SERIE_I = NUNDEF - NLES_TEMP_SERIE_J = NUNDEF - NLES_TEMP_SERIE_Z = NUNDEF - CLES_NORM_TYPE = 'NONE' - CBL_HEIGHT_DEF = 'KE' - XLES_TEMP_SAMPLING = XUNDEF - XLES_TEMP_MEAN_START = XUNDEF - XLES_TEMP_MEAN_END = XUNDEF - XLES_TEMP_MEAN_STEP = 3600. - LLES_CART_MASK = .FALSE. - NLES_IINF = NUNDEF - NLES_ISUP = NUNDEF - NLES_JINF = NUNDEF - NLES_JSUP = NUNDEF - LLES_NEB_MASK = .FALSE. - LLES_CORE_MASK = .FALSE. - LLES_MY_MASK = .FALSE. - NLES_MASKS_USER = NUNDEF - LLES_CS_MASK = .FALSE. - - LLES_PDF = .FALSE. - NPDF = 1 - XTH_PDF_MIN = 270. - XTH_PDF_MAX = 350. - XW_PDF_MIN = -10. - XW_PDF_MAX = 10. - XTHV_PDF_MIN = 270. - XTHV_PDF_MAX = 350. - XRV_PDF_MIN = 0. - XRV_PDF_MAX = 20. - XRC_PDF_MIN = 0. - XRC_PDF_MAX = 1. - XRR_PDF_MIN = 0. - XRR_PDF_MAX = 1. - XRI_PDF_MIN = 0. - XRI_PDF_MAX = 1. - XRS_PDF_MIN = 0. - XRS_PDF_MAX = 1. - XRG_PDF_MIN = 0. - XRG_PDF_MAX = 1. - XRT_PDF_MIN = 0. - XRT_PDF_MAX = 20. - XTHL_PDF_MIN = 270. - XTHL_PDF_MAX = 350. -END IF -! -!------------------------------------------------------------------------------- -! -!* 13. SET DEFAULT VALUES FOR MODD_PARAM_RAD_n : -! --------------------------------------- -! -XDTRAD = XTSTEP -XDTRAD_CLONLY = XTSTEP -LCLEAR_SKY =.FALSE. -NRAD_COLNBR = 1000 -NRAD_DIAG = 0 -CLW ='RRTM' -CAER='SURF' -CAOP='CLIM' -CEFRADL='MART' -CEFRADI='LIOU' -COPWSW = 'FOUQ' -COPISW = 'EBCU' -COPWLW = 'SMSH' -COPILW = 'EBCU' -XFUDG = 1. -LAERO_FT=.FALSE. -LFIX_DAT=.FALSE. -! -#ifdef MNH_ECRAD -!* 13bis. SET DEFAULT VALUES FOR MODD_PARAM_ECRAD_n : -! --------------------------------------- -! -#if ( VER_ECRAD == 101 ) -NSWSOLVER = 0 ! 0: 'McICA 1: 'SPARTACUS' 2: 'SPARTACUS' + 3D effect -NLWSOLVER = 0 ! 0: 'McICA 1: 'SPARTACUS' 2: 'SPARTACUS' + 3D effect -#endif -#if ( VER_ECRAD == 140 ) -LSPEC_ALB = .FALSE. -LSPEC_EMISS = .FALSE. - - -!ALLOCATE(USER_ALB_DIFF(NSWB_MNH)) -!ALLOCATE(USER_ALB_DIR(NSWB_MNH)) -!ALLOCATE(USER_EMISS(NLWB_MNH)) -!PRINT*,USER_ALB_DIFF -!USER_ALB_DIFF = (/0,0,0,0,0,0,0,0,0,0,0,0,0,0/) -!USER_ALB_DIR = (/0,0,0,0,0,0,0,0,0,0,0,0,0,0/) -!USER_EMISS = (/0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0/) -SURF_TYPE="SNOW" - -NLWSOLVER = 1 ! 0: 'McICA 1: 'SPARTACUS' 2: 'SPARTACUS' + 3D effect -NSWSOLVER = 1 ! 0: 'McICA 1: 'SPARTACUS' 2: 'SPARTACUS' + 3D effect -#endif -! LEFF3D = .TRUE. -! LSIDEM = .TRUE. -NREG = 3 ! Number of cloudy regions (3=TripleClouds) -! LLWCSCA = .TRUE. ! LW cloud scattering -! LLWASCA = .TRUE. ! LW aerosols scattering -NLWSCATTERING = 2 -NAERMACC = 0 -! CGAS = 'RRTMG-IFS' ! Gas optics model -NOVLP = 1 ! overlap assumption ; 0= 'Max-Ran' ; 1= 'Exp-Ran'; 2 = 'Exp-Exp' -NLIQOPT = 3 ! 1: 'Monochromatic', 2: 'HuStamnes', 3: 'SOCRATES', 4: 'Slingo' -NICEOPT = 3 ! 1: 'Monochromatic', 2: 'Fu-PSRAD', 3: 'Fu-IFS', 4: 'Baran', 5: 'Baran2016', 6: 'Baran2017' -! LSW_ML_E = .FALSE. -! LLW_ML_E = .FALSE. -! LPSRAD = .FALSE. -! -NRADLP = 1 ! 0: ERA-15, 1: Zhang and Rossow, 2: Martin (1994) et Woods (2000) -NRADIP = 1 ! 0: 40 mum, 1: Liou and Ou (1994), 2: Liou and Ou (1994) improved, 3: Sun and Rikus (1999) -XCLOUD_FRAC_STD = 1.0_JPRB ! change to 0.75 for more realistic distribution -#endif -!------------------------------------------------------------------------------- -! -!* 14. SET DEFAULT VALUES FOR MODD_BLANK_n : -! ----------------------------------- -! -XDUMMY1 = 0. -XDUMMY2 = 0. -XDUMMY3 = 0. -XDUMMY4 = 0. -XDUMMY5 = 0. -XDUMMY6 = 0. -XDUMMY7 = 0. -XDUMMY8 = 0. -! -NDUMMY1 = 0 -NDUMMY2 = 0 -NDUMMY3 = 0 -NDUMMY4 = 0 -NDUMMY5 = 0 -NDUMMY6 = 0 -NDUMMY7 = 0 -NDUMMY8 = 0 -! -LDUMMY1 = .TRUE. -LDUMMY2 = .TRUE. -LDUMMY3 = .TRUE. -LDUMMY4 = .TRUE. -LDUMMY5 = .TRUE. -LDUMMY6 = .TRUE. -LDUMMY7 = .TRUE. -LDUMMY8 = .TRUE. -! -CDUMMY1 = ' ' -CDUMMY2 = ' ' -CDUMMY3 = ' ' -CDUMMY4 = ' ' -CDUMMY5 = ' ' -CDUMMY6 = ' ' -CDUMMY7 = ' ' -CDUMMY8 = ' ' -! -!------------------------------------------------------------------------------ -! -!* 15. SET DEFAULT VALUES FOR MODD_FRC : -! --------------------------------- -! -IF (KMI == 1) THEN - LGEOST_UV_FRC = .FALSE. - LGEOST_TH_FRC = .FALSE. - LTEND_THRV_FRC = .FALSE. - LTEND_UV_FRC = .FALSE. - LVERT_MOTION_FRC = .FALSE. - LRELAX_THRV_FRC = .FALSE. - LRELAX_UV_FRC = .FALSE. - LRELAX_UVMEAN_FRC = .FALSE. - XRELAX_TIME_FRC = 10800. - XRELAX_HEIGHT_FRC = 0. - CRELAX_HEIGHT_TYPE = "FIXE" - LTRANS = .FALSE. - XUTRANS = 0.0 - XVTRANS = 0.0 - LPGROUND_FRC = .FALSE. - LDEEPOC = .FALSE. - XCENTX_OC = 16000. - XCENTY_OC = 16000. - XRADX_OC = 8000. - XRADY_OC = 8000. -END IF -! -!------------------------------------------------------------------------------- -! -! -!* 16. SET DEFAULT VALUES FOR MODD_PARAM_ICE : -! --------------------------------------- -! -IF (KMI == 1) THEN - LRED = .TRUE. - LWARM = .TRUE. - CPRISTINE_ICE = 'PLAT' - LSEDIC = .TRUE. - LCONVHG = .FALSE. - CSEDIM = 'SPLI' - LFEEDBACKT = .TRUE. - LEVLIMIT = .TRUE. - LNULLWETG = .TRUE. - LWETGPOST = .TRUE. - LNULLWETH = .TRUE. - LWETHPOST = .TRUE. - CSNOWRIMING = 'M90 ' - CSUBG_RC_RR_ACCR = 'NONE' - CSUBG_RR_EVAP = 'NONE' - CSUBG_PR_PDF = 'SIGM' - XFRACM90 = 0.1 - LCRFLIMIT = .TRUE. - NMAXITER = 5 - XMRSTEP = 0.00005 - XTSTEP_TS = 0. - LADJ_BEFORE = .TRUE. - LADJ_AFTER = .TRUE. - CFRAC_ICE_ADJUST = 'S' - XSPLIT_MAXCFL = 0.8 - CFRAC_ICE_SHALLOW_MF = 'S' - LSEDIM_AFTER = .FALSE. - LDEPOSC = .FALSE. - XVDEPOSC= 0.02 ! 2 cm/s - LSNOW_T=.FALSE. -END IF -! -!------------------------------------------------------------------------------- -! -! -!* 17. SET DEFAULT VALUES FOR MODD_PARAM_KAFR_n : -! -------------------------------------------- -! -XDTCONV = MAX( 300.0,XTSTEP ) -NICE = 1 -LREFRESH_ALL = .TRUE. -LCHTRANS = .FALSE. -LDOWN = .TRUE. -LSETTADJ = .FALSE. -XTADJD = 3600. -XTADJS = 10800. -LDIAGCONV = .FALSE. -NENSM = 0 -! -!------------------------------------------------------------------------------- -! -! -!* 18. SET DEFAULT VALUES FOR MODD_PARAM_MFSHALL_n : -! -------------------------------------------- -! -XIMPL_MF = 1. -CMF_UPDRAFT = 'EDKF' -CMF_CLOUD = 'DIRE' -LMIXUV = .TRUE. -LMF_FLX = .FALSE. -! -XALP_PERT = 0.3 -XABUO = 1. -XBENTR = 1. -XBDETR = 0. -XCMF = 0.065 -XENTR_MF = 0.035 -XCRAD_MF = 50. -XENTR_DRY = 0.55 -XDETR_DRY = 10. -XDETR_LUP = 1. -XKCF_MF = 2.75 -XKRC_MF = 1. -XTAUSIGMF = 600. -XPRES_UV = 0.5 -XFRAC_UP_MAX= 0.33 -XALPHA_MF = 2. -XSIGMA_MF = 20. -! -XA1 = 2./3. -XB = 0.002 -XC = 0.012 -XBETA1 = 0.9 -XR = 2. -XLAMBDA_MF= 0. -LGZ = .FALSE. -XGZ = 1.83 ! between 1.83 and 1.33 -! -!------------------------------------------------------------------------------- -! -!* 19. SET DEFAULT VALUES FOR MODD_PARAM_C2R2 : -! ---------------------------------------- -! -IF (KMI == 1) THEN - XNUC = 1.0 - XALPHAC = 3.0 - XNUR = 2.0 - XALPHAR = 1.0 -! - LRAIN = .TRUE. - LSEDC = .TRUE. - LACTIT = .FALSE. - LSUPSAT = .FALSE. - LDEPOC = .FALSE. - XVDEPOC = 0.02 ! 2 cm/s - LACTTKE = .TRUE. -! - HPARAM_CCN = 'XXX' - HINI_CCN = 'XXX' - HTYPE_CCN = 'X' -! - XCHEN = 0.0 - XKHEN = 0.0 - XMUHEN = 0.0 - XBETAHEN = 0.0 -! - XCONC_CCN = 0.0 - XAERDIFF = 0.0 - XAERHEIGHT = 2000 - XR_MEAN_CCN = 0.0 - XLOGSIG_CCN = 0.0 - XFSOLUB_CCN = 1.0 - XACTEMP_CCN = 280. -ENDIF -! -!------------------------------------------------------------------------------- -! -!* 19.BIS SET DEFAULT VALUES FOR MODD_PARAM_LIMA : -! ---------------------------------------- -! -IF (KMI == 1) THEN - LPTSPLIT = .FALSE. - L_LFEEDBACKT = .TRUE. - L_NMAXITER = 1 - L_XMRSTEP = 0. - L_XTSTEP_TS = 0. -! - YNUC = 1.0 - YALPHAC = 3.0 - YNUR = 2.0 - YALPHAR = 1.0 -! - OWARM = .TRUE. - LACTI = .TRUE. - ORAIN = .TRUE. - OSEDC = .TRUE. - OACTIT = .FALSE. - LADJ = .TRUE. - LSPRO = .FALSE. - LKHKO = .FALSE. - ODEPOC = .TRUE. - LBOUND = .FALSE. - OACTTKE = .TRUE. - LKESSLERAC = .FALSE. -! - NMOM_C = 2 - NMOM_R = 2 -! - OVDEPOC = 0.02 ! 2 cm/s -! - CINI_CCN = 'AER' - CTYPE_CCN(:) = 'M' -! - YAERDIFF = 0.0 - YAERHEIGHT = 2000. -! YR_MEAN_CCN = 0.0 ! In case of 'CCN' initialization -! YLOGSIG_CCN = 0.0 - YFSOLUB_CCN = 1.0 - YACTEMP_CCN = 280. -! - NMOD_CCN = 1 -! -!* AP Scavenging -! - LSCAV = .FALSE. - LAERO_MASS = .FALSE. -! - LCCN_HOM = .TRUE. - CCCN_MODES = 'COPT' - XCCN_CONC(:)=300. -! - LHHONI = .FALSE. - LCOLD = .TRUE. - LNUCL = .TRUE. - LSEDI = .TRUE. - LSNOW = .TRUE. - LHAIL = .FALSE. - YSNOW_T = .FALSE. - LMURAKAMI = .TRUE. - CPRISTINE_ICE_LIMA = 'PLAT' - CHEVRIMED_ICE_LIMA = 'GRAU' - XFACTNUC_DEP = 1.0 - XFACTNUC_CON = 1.0 - NMOM_I = 2 - NMOM_S = 1 - NMOM_G = 1 - NMOM_H = 1 - NMOD_IFN = 1 - NIND_SPECIE = 1 - LMEYERS = .FALSE. - LIFN_HOM = .TRUE. - CIFN_SPECIES = 'PHILLIPS' - CINT_MIXING = 'DM2' - XIFN_CONC(:) = 100. - NMOD_IMM = 0 - NPHILLIPS=8 - LCIBU = .FALSE. - XNDEBRIS_CIBU = 50.0 - LRDSF = .FALSE. -ENDIF -! -!------------------------------------------------------------------------------- -! -!* 20. SET DEFAULT VALUES FOR MODD_CH_MNHC_n -! ------------------------------------- -! -LUSECHEM = .FALSE. -LUSECHAQ = .FALSE. -LUSECHIC = .FALSE. -LCH_INIT_FIELD = .FALSE. -LCH_CONV_SCAV = .FALSE. -LCH_CONV_LINOX = .FALSE. -LCH_PH = .FALSE. -LCH_RET_ICE = .FALSE. -XCH_PHINIT = 5.2 -XRTMIN_AQ = 5.e-8 -CCHEM_INPUT_FILE = 'EXSEG1.nam' -CCH_TDISCRETIZATION = 'SPLIT' -NCH_SUBSTEPS = 1 -LCH_TUV_ONLINE = .FALSE. -CCH_TUV_LOOKUP = 'PHOTO.TUV39' -CCH_TUV_CLOUDS = 'NONE' -XCH_TUV_ALBNEW = -1. -XCH_TUV_DOBNEW = -1. -XCH_TUV_TUPDATE = 600. -CCH_VEC_METHOD = 'MAX' -NCH_VEC_LENGTH = 50 -XCH_TS1D_TSTEP = 600. -CCH_TS1D_COMMENT = 'no comment' -CCH_TS1D_FILENAME = 'IO1D' -CSPEC_PRODLOSS = '' -CSPEC_BUDGET = '' -! -!------------------------------------------------------------------------------- -! -!* 21. SET DEFAULT VALUES FOR MODD_SERIES AND MODD_SERIE_n -! --------------------------------------------------- -! -IF (KMI == 1) THEN - LSERIES = .FALSE. - LMASKLANDSEA = .FALSE. - LWMINMAX = .FALSE. - LSURF = .FALSE. -ENDIF -! -NIBOXL = 1 !+ JPHEXT -NIBOXH = 1 !+ 2*JPHEXT -NJBOXL = 1 !+ JPHEXT -NJBOXH = 1 !+ 2*JPHEXT -NKCLS = 1 !+ JPVEXT -NKLOW = 1 !+ JPVEXT -NKMID = 1 !+ JPVEXT -NKUP = 1 !+ JPVEXT -NKCLA = 1 !+ JPVEXT -NBJSLICE = 1 -NJSLICEL(:) = 1 !+ JPHEXT -NJSLICEH(:) = 1 !+ 2*JPHEXT -NFREQSERIES = INT(XSEGLEN /(100.*XTSTEP) ) -NFREQSERIES = MAX(NFREQSERIES,1) -! -!------------------------------------------------------------------------------- -! -!* 22. SET DEFAULT VALUES FOR MODD_TURB_CLOUD -! -------------------------------------- -! -IF (KMI == 1) THEN - NMODEL_CLOUD = NUNDEF - CTURBLEN_CLOUD = 'DELT' - XCOEF_AMPL_SAT = 5. - XCEI_MIN = 0.001E-06 - XCEI_MAX = 0.01E-06 -ENDIF -!------------------------------------------------------------------------------- -! -!* 22. SET DEFAULT VALUES FOR MODD_MEAN_FIELD -! -------------------------------------- -! -IF (KMI == 1) THEN - LMEAN_FIELD = .FALSE. - LCOV_FIELD = .FALSE. -ENDIF -! -!------------------------------------------------------------------------------- -! -!* 22. SET DEFAULT VALUES FOR MODD_AEROSOL -! ----------------------------------- -IF (KMI == 1) THEN ! other values are defined in modd_ch_aerosol -! -! aerosol lognormal parameterization - -LVARSIGI = .FALSE. ! switch to active pronostic dispersion for I mode -LVARSIGJ = .FALSE. ! switch to active pronostic dispersion for J mode -LHETEROSO4 = .FALSE. ! switch to active sulfates heteronegeous - ! production -LSEDIMAERO = .FALSE. ! switch to active aerosol sedimentation -LAERINIT = .FALSE. ! switch to initialize aerosol in arome -CMINERAL = "NONE" ! mineral equilibrium scheme -CORGANIC = "NONE" ! mineral equilibrium scheme -CNUCLEATION = "NONE" ! sulfates nucleation scheme -LDEPOS_AER(:) = .FALSE. - -ENDIF - -!* 23. SET DEFAULT VALUES FOR MODD_DUST and MODD_SALT -! ---------------------------------------------- -! -IF (KMI == 1) THEN ! other values initialized in modd_dust - LDUST = .FALSE. - NMODE_DST = 3 - LVARSIG = .FALSE. - LSEDIMDUST = .FALSE. - LDEPOS_DST(:) = .FALSE. - - LSALT = .FALSE. - LVARSIG_SLT= .FALSE. - LSEDIMSALT = .FALSE. - LDEPOS_SLT(:) = .FALSE. -ENDIF -! -!------------------------------------------------------------------------------- -! -! -!* 24. SET DEFAULT VALUES FOR MODD_PASPOL -! ---------------------------------- -! -! other values initialized in modd_paspol -! -IF (KMI == 1) THEN - LPASPOL = .FALSE. - NRELEASE = 0 - CPPINIT(:) ='1PT' - XPPLAT(:) = 0. - XPPLON (:) = 0. - XPPMASS(:) = 0. - XPPBOT(:) = 0. - XPPTOP(:) = 0. - CPPT1(:) = "20010921090000" - CPPT2(:) = "20010921090000" - CPPT3(:) = "20010921091500" - CPPT4(:) = "20010921091500" -ENDIF -! -!------------------------------------------------------------------------------- -! -! -!* 25. SET DEFAULT VALUES FOR MODD_CONDSAMP -! ---------------------------------- -! -! other values initialized in modd_condsamp -! -IF (KMI == 1) THEN - LCONDSAMP = .FALSE. - NCONDSAMP = 3 - XRADIO(:) = 900. - XSCAL(:) = 1. - XHEIGHT_BASE = 100. - XDEPTH_BASE = 100. - XHEIGHT_TOP = 100. - XDEPTH_TOP = 100. - NFINDTOP = 0 - XTHVP = 0.25 - LTPLUS = .TRUE. -ENDIF -!------------------------------------------------------------------------------- -! -! -!* 26. SET DEFAULT VALUES FOR MODD_LATZ_EDFLX -! ---------------------------------- -! -IF (KMI == 1) THEN - LUV_FLX=.FALSE. - XUV_FLX1=3.E+14 - XUV_FLX2=0. - LTH_FLX=.FALSE. - XTH_FLX=0.75 -ENDIF -#ifdef MNH_FOREFIRE -!------------------------------------------------------------------------------- -! -!* 27. SET DEFAULT VALUES FOR MODD_FOREFIRE -! ---------------------------------- -! -! other values initialized in modd_forefire -! -IF (KMI == 1) THEN - LFOREFIRE = .FALSE. - LFFCHEM = .FALSE. - COUPLINGRES = 100. - NFFSCALARS = 0 -ENDIF -#endif -!------------------------------------------------------------------------------- -! -!* 28. SET DEFAULT VALUES FOR MODD_BLOWSNOW AND MODD_BLOWSNOW_n -! ---------------------------------------- -! -IF (KMI == 1) THEN - LBLOWSNOW = .FALSE. - XALPHA_SNOW = 3. - XRSNOW = 4. - CSNOWSEDIM = 'TABC' -END IF -LSNOWSUBL = .FALSE. -! -! -!------------------------------------------------------------------------------- -! -!* 29. SET DEFAULT VALUES FOR MODD_VISC -! ---------------------------------- -! -! other values initialized in modd_VISC -! -IF (KMI == 1) THEN - LVISC = .FALSE. - LVISC_UVW = .FALSE. - LVISC_TH = .FALSE. - LVISC_SV = .FALSE. - LVISC_R = .FALSE. - XMU_V = 0. - XPRANDTL = 0. -ENDIF -! -!------------------------------------------------------------------------------- -! -! -!* 30. SET DEFAULT VALUES FOR MODD_DRAG -! ---------------------------------- -! -! other values initialized in modd_DRAG -! -IF (KMI == 1) THEN - LDRAG = .FALSE. - LMOUNT = .FALSE. - NSTART = 1 - XHSTART = 0. -ENDIF -! -!------------------------------------------------------------------------------- -! -!* 31. SET DEFAULT VALUES FOR MODD_IBM_PARAMn -! -------------------------------------- -! - LIBM = .FALSE. - LIBM_TROUBLE = .FALSE. - CIBM_ADV = 'NOTHIN' - XIBM_EPSI = 1.E-9 - XIBM_IEPS = 1.E+9 - NIBM_ITR = 8 - XIBM_RUG = 0.01 ! (m^1.s^-0) - XIBM_VISC = 1.56e-5 ! (m^2.s^-1) - XIBM_CNU = 0.06 ! (m^0.s^-0) - - NIBM_LAYER_P = 2 - NIBM_LAYER_Q = 2 - NIBM_LAYER_R = 2 - NIBM_LAYER_S = 2 - NIBM_LAYER_T = 2 - NIBM_LAYER_E = 2 - NIBM_LAYER_V = 2 - - XIBM_RADIUS_P = 2. - XIBM_RADIUS_Q = 2. - XIBM_RADIUS_R = 2. - XIBM_RADIUS_S = 2. - XIBM_RADIUS_T = 2. - XIBM_RADIUS_E = 2. - XIBM_RADIUS_V = 2. - - XIBM_POWERS_P = 1. - XIBM_POWERS_Q = 1. - XIBM_POWERS_R = 1. - XIBM_POWERS_S = 1. - XIBM_POWERS_T = 1. - XIBM_POWERS_E = 1. - XIBM_POWERS_V = 1. - - CIBM_MODE_INTE3_P = 'LAI' - CIBM_MODE_INTE3_Q = 'LAI' - CIBM_MODE_INTE3_R = 'LAI' - CIBM_MODE_INTE3_S = 'LAI' - CIBM_MODE_INTE3_T = 'LAI' - CIBM_MODE_INTE3_E = 'LAI' - CIBM_MODE_INTE3_V = 'LAI' - - CIBM_MODE_INTE1_P = 'CL2' - CIBM_MODE_INTE1_Q = 'CL2' - CIBM_MODE_INTE1_R = 'CL2' - CIBM_MODE_INTE1_S = 'CL2' - CIBM_MODE_INTE1_T = 'CL2' - CIBM_MODE_INTE1_E = 'CL2' - CIBM_MODE_INTE1NV = 'CL2' - CIBM_MODE_INTE1TV = 'CL2' - CIBM_MODE_INTE1CV = 'CL2' - - CIBM_MODE_BOUND_P = 'SYM' - CIBM_MODE_BOUND_Q = 'SYM' - CIBM_MODE_BOUND_R = 'SYM' - CIBM_MODE_BOUND_S = 'SYM' - CIBM_MODE_BOUND_T = 'SYM' - CIBM_MODE_BOUND_E = 'SYM' - CIBM_MODE_BOUNT_V = 'ASY' - CIBM_MODE_BOUNN_V = 'ASY' - CIBM_MODE_BOUNC_V = 'ASY' - - XIBM_FORC_BOUND_P = 0. - XIBM_FORC_BOUND_Q = 0. - XIBM_FORC_BOUND_R = 0. - XIBM_FORC_BOUND_S = 0. - XIBM_FORC_BOUND_T = 0. - XIBM_FORC_BOUND_E = 0. - XIBM_FORC_BOUNN_V = 0. - XIBM_FORC_BOUNT_V = 0. - XIBM_FORC_BOUNC_V = 0. - - CIBM_TYPE_BOUND_P = 'NEU' - CIBM_TYPE_BOUND_Q = 'NEU' - CIBM_TYPE_BOUND_R = 'NEU' - CIBM_TYPE_BOUND_S = 'NEU' - CIBM_TYPE_BOUND_T = 'NEU' - CIBM_TYPE_BOUND_E = 'NEU' - CIBM_TYPE_BOUNT_V = 'DIR' - CIBM_TYPE_BOUNN_V = 'DIR' - CIBM_TYPE_BOUNC_V = 'DIR' - - CIBM_FORC_BOUND_P = 'CST' - CIBM_FORC_BOUND_Q = 'CST' - CIBM_FORC_BOUND_R = 'CST' - CIBM_FORC_BOUND_S = 'CST' - CIBM_FORC_BOUND_T = 'CST' - CIBM_FORC_BOUND_E = 'CST' - CIBM_FORC_BOUNN_V = 'CST' - CIBM_FORC_BOUNT_V = 'CST' - CIBM_FORC_BOUNC_V = 'CST' - CIBM_FORC_BOUNR_V = 'CST' - -! -!------------------------------------------------------------------------------- -! -!* 32. SET DEFAULT VALUES FOR MODD_RECYCL_PARAMn -! -------------------------------------- -! - LRECYCL = .FALSE. - LRECYCLN = .FALSE. - LRECYCLW = .FALSE. - LRECYCLE = .FALSE. - LRECYCLS = .FALSE. - XDRECYCLN = 0. - XARECYCLN = 0. - XDRECYCLW = 0. - XARECYCLW = 0. - XDRECYCLS = 0. - XARECYCLS = 0. - XDRECYCLE = 0. - XARECYCLE = 0. - XTMOY = 0. - XTMOYCOUNT = 0. - XNUMBELT = 28. - XRCOEFF = 0.2 - XTBVTOP = 500. - XTBVBOT = 300. -! -!------------------------------------------------------------------------------- -! -!* 33. SET DEFAULT VALUES FOR MODD_FIRE -! -------------------------------- -! -! Blaze fire model namelist -! -IF (KMI == 1) THEN - LBLAZE = .FALSE. ! Flag for Fire model use, default FALSE - ! - CPROPAG_MODEL = 'SANTONI2011' ! Fire propagation model (default SANTONI2011) - ! - CHEAT_FLUX_MODEL = 'EXS' ! Sensible heat flux injection model (default EXS) - CLATENT_FLUX_MODEL = 'EXP' ! latent heat flux injection model (default EXP) - XFERR = 0.8 ! Energy released in flamming stage (only for EXP) - ! - CFIRE_CPL_MODE = '2WAYCPL' ! Coupling mode (default 2way coupled) - CBMAPFILE = CINIFILE ! File name of BMAP for FIR2ATM mode - LINTERPWIND = .TRUE. ! Horizontal interpolation of wind - LSGBAWEIGHT = .FALSE. ! Flag for use of weighted average method for SubGrid Burning Area computation - ! - NFIRE_WENO_ORDER = 3 ! Weno order (1,3,5) - NFIRE_RK_ORDER = 3 ! Runge Kutta order (1,2,3,4) - ! - NREFINX = 1 ! Refinement ratio X - NREFINY = 1 ! Refinement ratio Y - ! - XCFLMAXFIRE = 0.8 ! Max CFL on fire mesh - XLSDIFFUSION = 0.1 ! Numerical diffusion of LevelSet - XROSDIFFUSION = 0.05 ! Numerical diffusion of ROS - ! - XFLUXZEXT = 3. ! Flux distribution on vertical caracteristic length - XFLUXZMAX = 4. * XFLUXZEXT ! Flux distribution on vertical max injetion height - ! - XFLXCOEFTMP = 1. ! Flux multiplicator. For testing - ! - LWINDFILTER = .FALSE. ! Fire wind filtering flag - CWINDFILTER = 'EWAM' ! Wind filter method (EWAM or WLIM) - XEWAMTAU = 20. ! Time averaging constant for EWAM method (s) - XWLIMUTH = 8. ! Thresehold wind value for WLIM method (m/s) - XWLIMUTMAX = 9. ! Maximum wind value for WLIM method (m/s) (needs to be >= XWLIMUTH ) - ! - NNBSMOKETRACER = 1 ! Nb of smoke tracers - ! - NWINDSLOPECPLMODE = 0 ! Flag for use of wind/slope in ROS (0 = wind + slope, 1 = wind only, 2 = slope only (U0=0)) - ! - ! - ! - !! DO NOT CHANGE BELOW PARAMETERS - XFIREMESHSIZE(:) = 0. ! Fire mesh size (dxf,dyf) - LRESTA_ASE = .FALSE. ! Flag for using ASE in RESTA file - LRESTA_AWC = .FALSE. ! Flag for using AWC in RESTA file - LRESTA_EWAM = .FALSE. ! Flag for using EWAM in RESTA file - LRESTA_WLIM = .FALSE. ! Flag for using WLIM in RESTA file -ENDIF - -!------------------------------------------------------------------------------- -END SUBROUTINE DEFAULT_DESFM_n diff --git a/src/mesonh/ext/diagnos_les_mf.f90 b/src/mesonh/ext/diagnos_les_mf.f90 deleted file mode 100644 index 665d1ea76..000000000 --- a/src/mesonh/ext/diagnos_les_mf.f90 +++ /dev/null @@ -1,244 +0,0 @@ -!MNH_LIC Copyright 2009-2020 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. -!----------------------------------------------------------------- -! ########################### - MODULE MODI_DIAGNOS_LES_MF -! ########################### -! -INTERFACE -! -! ################################################################# - SUBROUTINE DIAGNOS_LES_MF(KIU,KJU,KKU,PTIME_LES, & - PTHL_UP,PRT_UP,PRV_UP,PRC_UP,PRI_UP, & - PU_UP, PV_UP, PTHV_UP, PW_UP, & - PFRAC_UP,PEMF,PDETR,PENTR, & - PWTHMF,PWTHVMF,PWRTMF, & - PWUMF,PWVMF, & - KKLCL,KKETL,KKCTL) -! ################################################################# -! -!* 1.1 Declaration of Arguments -! -use modd_precision, only: MNHTIME -! -INTEGER, INTENT(IN) :: KIU, KJU, KKU ! 3D grid size -REAL(kind=MNHTIME), DIMENSION(2), INTENT(OUT) :: PTIME_LES -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHL_UP,PRT_UP,PRV_UP,& - PRC_UP,PRI_UP ! updraft properties -REAL, DIMENSION(:,:,:), INTENT(IN) :: PU_UP, PV_UP -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHV_UP,PW_UP,& - PFRAC_UP,PEMF,PDETR,PENTR -REAL, DIMENSION(:,:,:), INTENT(IN) :: PWTHMF,PWTHVMF,PWRTMF, & - PWUMF,PWVMF -INTEGER, DIMENSION(:), INTENT(IN) :: KKLCL,KKETL,KKCTL - - -END SUBROUTINE DIAGNOS_LES_MF - -END INTERFACE -! -END MODULE MODI_DIAGNOS_LES_MF -! -! ################################################################# - SUBROUTINE DIAGNOS_LES_MF(KIU,KJU,KKU,PTIME_LES, & - PTHL_UP,PRT_UP,PRV_UP,PRC_UP,PRI_UP, & - PU_UP, PV_UP, PTHV_UP, PW_UP, & - PFRAC_UP,PEMF,PDETR,PENTR, & - PWTHMF,PWTHVMF,PWRTMF, & - PWUMF,PWVMF, & - KKLCL,KKETL,KKCTL) -! ################################################################# -!! -!!**** *DIAGNOS_LES_MF* - Edit in File the updraft properties as -!! LES diagnostics -!! -!! PURPOSE -!! ------- -!!**** The purpose of this routine is to write updraft variable as -!! LES diagnostics -! -!!** METHOD -!! ------ -!! -!! EXTERNAL -!! -------- -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! J.pergaud -! -! Modifications: -! V. Masson 09/2010: Optimization -! P. Wautelet 28/03/2019: use MNHTIME for time measurement variables -!! -------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_LES -use modd_precision, only: MNHTIME -! -USE MODE_MNH_TIMING -! -USE MODI_LES_VER_INT -USE MODI_LES_MEAN_ll -USE MODI_SHUMAN -! -IMPLICIT NONE - -!* 0.1 Declaration of Arguments -! -! -INTEGER, INTENT(IN) :: KIU, KJU, KKU ! 3D grid size -REAL(kind=MNHTIME), DIMENSION(2), INTENT(OUT) :: PTIME_LES -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHL_UP,PRT_UP,PRV_UP,& - PRC_UP,PRI_UP ! updraft properties -REAL, DIMENSION(:,:,:), INTENT(IN) :: PU_UP, PV_UP -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHV_UP,PW_UP,& - PFRAC_UP,PEMF,PDETR,PENTR -REAL, DIMENSION(:,:,:), INTENT(IN) :: PWTHMF,PWTHVMF,PWRTMF, & - PWUMF,PWVMF -INTEGER, DIMENSION(:), INTENT(IN) :: KKLCL,KKETL,KKCTL - -! -! -! 0.2 Declaration of local variables -! -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTHLMFFLX_LES,ZRTMFFLX_LES, & - ZTHVMFFLX_LES,ZUMFFLX_LES, & - ZVMFFLX_LES -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTHLUP_MF_LES,ZRTUP_MF_LES, & - ZRCUP_MF_LES,ZEMF_MF_LES, & - ZDETR_MF_LES, ZENTR_MF_LES, & - ZWUP_MF_LES,ZFRACUP_MF_LES, & - ZTHVUP_MF_LES,ZRVUP_MF_LES, & - ZRIUP_MF_LES -REAL(kind=MNHTIME), DIMENSION(2) :: ZTIME1, ZTIME2 -!------------------------------------------------------------------------ -! - -CALL SECOND_MNH2(ZTIME1) - - IF (LLES_CALL) THEN - - ALLOCATE( ZTHLUP_MF_LES(KIU,KJU,NLES_K) ) - ALLOCATE( ZRTUP_MF_LES(KIU,KJU,NLES_K) ) - ALLOCATE( ZRVUP_MF_LES(KIU,KJU,NLES_K) ) - ALLOCATE( ZRCUP_MF_LES(KIU,KJU,NLES_K) ) - ALLOCATE( ZRIUP_MF_LES(KIU,KJU,NLES_K) ) - ALLOCATE( ZEMF_MF_LES(KIU,KJU,NLES_K) ) - ALLOCATE( ZDETR_MF_LES(KIU,KJU,NLES_K) ) - ALLOCATE( ZENTR_MF_LES(KIU,KJU,NLES_K) ) - ALLOCATE( ZWUP_MF_LES(KIU,KJU,NLES_K) ) - ALLOCATE( ZFRACUP_MF_LES(KIU,KJU,NLES_K) ) - ALLOCATE( ZTHVUP_MF_LES(KIU,KJU,NLES_K) ) - - ALLOCATE( ZTHLMFFLX_LES(KIU,KJU,NLES_K) ) - ALLOCATE( ZRTMFFLX_LES (KIU,KJU,NLES_K) ) - ALLOCATE( ZTHVMFFLX_LES(KIU,KJU,NLES_K) ) - ALLOCATE( ZUMFFLX_LES (KIU,KJU,NLES_K) ) - ALLOCATE( ZVMFFLX_LES (KIU,KJU,NLES_K) ) - - - CALL LES_VER_INT(MZF(PWTHMF) ,ZTHLMFFLX_LES ) - CALL LES_MEAN_ll(ZTHLMFFLX_LES,LLES_CURRENT_CART_MASK, & - X_LES_SUBGRID_WTHLMF(:,NLES_CURRENT_TCOUNT,1)) - - CALL LES_VER_INT( MZF(PWRTMF) ,ZRTMFFLX_LES ) - CALL LES_MEAN_ll (ZRTMFFLX_LES , LLES_CURRENT_CART_MASK, & - X_LES_SUBGRID_WRTMF(:,NLES_CURRENT_TCOUNT,1) ) - - CALL LES_VER_INT( MZF(PWUMF) ,ZUMFFLX_LES ) - CALL LES_MEAN_ll (ZUMFFLX_LES , LLES_CURRENT_CART_MASK, & - X_LES_SUBGRID_WUMF(:,NLES_CURRENT_TCOUNT,1) ) - - CALL LES_VER_INT( MZF(PWVMF) ,ZVMFFLX_LES ) - CALL LES_MEAN_ll (ZVMFFLX_LES , LLES_CURRENT_CART_MASK, & - X_LES_SUBGRID_WVMF(:,NLES_CURRENT_TCOUNT,1) ) - - CALL LES_VER_INT( MZF(PWTHVMF) ,ZTHVMFFLX_LES ) - CALL LES_MEAN_ll (ZTHVMFFLX_LES , LLES_CURRENT_CART_MASK, & - X_LES_SUBGRID_WTHVMF(:,NLES_CURRENT_TCOUNT,1) ) - - - CALL LES_VER_INT( MZF(PTHL_UP) ,ZTHLUP_MF_LES ) - CALL LES_MEAN_ll (ZTHLUP_MF_LES , LLES_CURRENT_CART_MASK, & - X_LES_SUBGRID_THLUP_MF(:,NLES_CURRENT_TCOUNT,1) ) - - CALL LES_VER_INT( MZF(PRT_UP) ,ZRTUP_MF_LES ) - CALL LES_MEAN_ll (ZRTUP_MF_LES , LLES_CURRENT_CART_MASK, & - X_LES_SUBGRID_RTUP_MF(:,NLES_CURRENT_TCOUNT,1) ) - - CALL LES_VER_INT( MZF(PRV_UP) ,ZRVUP_MF_LES ) - CALL LES_MEAN_ll (ZRVUP_MF_LES , LLES_CURRENT_CART_MASK, & - X_LES_SUBGRID_RVUP_MF(:,NLES_CURRENT_TCOUNT,1) ) - - CALL LES_VER_INT( MZF(PRC_UP) ,ZRCUP_MF_LES ) - CALL LES_MEAN_ll (ZRCUP_MF_LES , LLES_CURRENT_CART_MASK, & - X_LES_SUBGRID_RCUP_MF(:,NLES_CURRENT_TCOUNT,1) ) - - CALL LES_VER_INT( MZF(PRI_UP) ,ZRIUP_MF_LES ) - CALL LES_MEAN_ll (ZRIUP_MF_LES , LLES_CURRENT_CART_MASK, & - X_LES_SUBGRID_RIUP_MF(:,NLES_CURRENT_TCOUNT,1) ) - - CALL LES_VER_INT( MZF(PEMF) ,ZEMF_MF_LES ) - CALL LES_MEAN_ll (ZEMF_MF_LES , LLES_CURRENT_CART_MASK, & - X_LES_SUBGRID_MASSFLUX(:,NLES_CURRENT_TCOUNT,1) ) - - CALL LES_VER_INT( MZF(PDETR) ,ZDETR_MF_LES ) - CALL LES_MEAN_ll (ZDETR_MF_LES , LLES_CURRENT_CART_MASK, & - X_LES_SUBGRID_DETR(:,NLES_CURRENT_TCOUNT,1) ) - - CALL LES_VER_INT( MZF(PENTR) ,ZENTR_MF_LES ) - CALL LES_MEAN_ll (ZENTR_MF_LES , LLES_CURRENT_CART_MASK, & - X_LES_SUBGRID_ENTR(:,NLES_CURRENT_TCOUNT,1) ) - - CALL LES_VER_INT( MZF(PW_UP) ,ZWUP_MF_LES ) - CALL LES_MEAN_ll (ZWUP_MF_LES , LLES_CURRENT_CART_MASK, & - X_LES_SUBGRID_WUP_MF(:,NLES_CURRENT_TCOUNT,1) ) - - CALL LES_VER_INT( MZF(PFRAC_UP) ,ZFRACUP_MF_LES ) - CALL LES_MEAN_ll (ZFRACUP_MF_LES , LLES_CURRENT_CART_MASK, & - X_LES_SUBGRID_FRACUP(:,NLES_CURRENT_TCOUNT,1) ) - - CALL LES_VER_INT( MZF(PTHV_UP) ,ZTHVUP_MF_LES ) - CALL LES_MEAN_ll (ZTHVUP_MF_LES , LLES_CURRENT_CART_MASK, & - X_LES_SUBGRID_THVUP_MF(:,NLES_CURRENT_TCOUNT,1) ) - - - - DEALLOCATE( ZTHLMFFLX_LES ) - DEALLOCATE( ZRTMFFLX_LES ) - DEALLOCATE( ZTHVMFFLX_LES ) - DEALLOCATE( ZUMFFLX_LES ) - DEALLOCATE( ZVMFFLX_LES ) - - - DEALLOCATE( ZTHLUP_MF_LES ) - DEALLOCATE( ZRTUP_MF_LES ) - DEALLOCATE( ZRVUP_MF_LES ) - DEALLOCATE( ZRCUP_MF_LES ) - DEALLOCATE( ZRIUP_MF_LES ) - DEALLOCATE( ZENTR_MF_LES ) - DEALLOCATE( ZDETR_MF_LES ) - DEALLOCATE( ZEMF_MF_LES ) - DEALLOCATE( ZWUP_MF_LES ) - DEALLOCATE( ZFRACUP_MF_LES ) - DEALLOCATE( ZTHVUP_MF_LES ) - -ENDIF - -CALL SECOND_MNH2(ZTIME2) -PTIME_LES = ZTIME2 - ZTIME1 -XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1 - -END SUBROUTINE DIAGNOS_LES_MF diff --git a/src/mesonh/ext/ground_paramn.f90 b/src/mesonh/ext/ground_paramn.f90 deleted file mode 100644 index 5d872413b..000000000 --- a/src/mesonh/ext/ground_paramn.f90 +++ /dev/null @@ -1,1230 +0,0 @@ -!MNH_LIC Copyright 1994-2020 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. -!----------------------------------------------------------------- -! ########## -MODULE MODI_GROUND_PARAM_n -! ########## -! -INTERFACE -! - SUBROUTINE GROUND_PARAM_n(D, PSFTH, PSFRV, PSFSV, PSFCO2, PSFU, PSFV, & - PDIR_ALB, PSCA_ALB, PEMIS, PTSRAD, KTCOUNT, TPFILE ) -! -USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t -!* surface fluxes -! -------------- -! -USE MODD_IO, ONLY: TFILEDATA -! -TYPE(DIMPHYEX_t), INTENT(IN) :: D -REAL, DIMENSION(:,:), INTENT(OUT) :: PSFTH ! surface flux of potential temperature (Km/s) -REAL, DIMENSION(:,:), INTENT(OUT) :: PSFRV ! surface flux of water vapor (m/s*kg/kg) -REAL, DIMENSION(:,:,:),INTENT(OUT):: PSFSV ! surface flux of scalar (m/s*kg/kg) - ! flux of chemical var. (ppp.m/s) -REAL, DIMENSION(:,:), INTENT(OUT) :: PSFCO2! surface flux of CO2 (m/s*kg/kg) -REAL, DIMENSION(:,:), INTENT(OUT) :: PSFU ! surface fluxes of horizontal -REAL, DIMENSION(:,:), INTENT(OUT) :: PSFV ! momentum in x and y directions (m2/s2) -! -!* Radiative parameters -! -------------------- -! -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PDIR_ALB ! direct albedo for each spectral band (-) -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSCA_ALB ! diffuse albedo for each spectral band (-) -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PEMIS ! surface emissivity (-) -REAL, DIMENSION(:,:), INTENT(OUT) :: PTSRAD ! surface radiative temperature (K) -! -INTEGER, INTENT(IN) :: KTCOUNT ! temporal iteration count -TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Synchronous output file -END SUBROUTINE GROUND_PARAM_n -! -END INTERFACE -! -END MODULE MODI_GROUND_PARAM_n -! -! ###################################################################### - SUBROUTINE GROUND_PARAM_n(D, PSFTH, PSFRV, PSFSV, PSFCO2, PSFU, PSFV, & - PDIR_ALB, PSCA_ALB, PEMIS, PTSRAD, KTCOUNT, TPFILE ) -! ####################################################################### -! -! -!!**** *GROUND_PARAM* -!! -!! PURPOSE -!! ------- -! Monitor to call the externalized surface -! -!!** METHOD -!! ------ -! -!! EXTERNAL -!! -------- -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! -!! REFERENCE -!! --------- -!! -!! Noilhan and Planton (1989) -!! -!! AUTHOR -!! ------ -!! S. Belair * Meteo-France * -!! -!! MODIFICATIONS -!! ------------- -!! Original 10/03/95 -!! (J.Stein) 25/10/95 add the rain flux computation at the ground -!! and the lbc -!! (J.Stein) 15/11/95 include the strong slopes cases -!! (J.Stein) 06/02/96 bug correction for the precipitation flux writing -!! (J.Stein) 20/05/96 set the right IGRID value for the rain rate -!! (J.Viviand) 04/02/97 add cold and convective precipitation rate -!! (J.Stein) 22/06/97 use the absolute pressure -!! (V.Masson) 09/07/97 add directional z0 computations and RESA correction -!! (V.Masson) 13/02/98 merge the ISBA and TSZ0 routines, -!! rename the routine as a monitor, called by PHYS_PARAMn -!! add the town parameterization -!! recomputes z0 where snow is. -!! pack and unpack of 2D fields into 1D fields -!! (V.Masson) 04/01/00 removes the TSZ0 case -! (F.Solmon/V.Masson) adapatation for patch approach -! modification of internal subroutine pack/ allocation in function -! of patch indices -! calling of isba for each defined patch -! averaging of patch fluxes to get nat fluxes -! (P. Tulet/G.Guenais) 04/02/01 separation of vegetatives class -! for friction velocity and -! aerodynamical resistance -! (S Donnier) 09/12/02 add specific humidity at 2m for diagnostic -! (V.Masson) 01/03/03 externalisation of the surface schemes! -! (P.Tulet ) 01/11/03 externalisation of the surface chemistry! -!! (D.Gazen) 01/12/03 change emissions handling for surf. externalization -!! (J.escobar) 18/10/2012 missing USE MODI_COUPLING_SURF_ATM_n & MODI_DIAG_SURF_ATM_n -! (J.escobar) 02/2014 add Forefire coupling -!! (G.Delautier) 06/2016 phasage surfex 8 -!! (B.Vie) 2016 LIMA -!! (J.Pianezze) 08/2016 add send/recv oasis functions -!! (M.Leriche) 24/03/16 remove flag for chemical surface fluxes -!! (M.Leriche) 01/07/2017 Add DIAG chimical surface fluxes -!! 01/2018 (G.Delautier) SURFEX 8.1 -!! 02/2018 Q.Libois ECRAD -!! (P.Wautelet) 28/03/2018 replace TEMPORAL_DIST by DATETIME_DISTANCE - -!! (V. Vionnet) 18/07/2017 add coupling for blowing snow module -!! (Bielli S.) 02/2019 Sea salt : significant sea wave height influences salt emission; 5 salt modes -! P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine -! P. Wautelet 09/02/2022: bugfix: add missing XCURRENT_LEI computation -! A. Costes 12/2021: Blaze Fire model -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -! -#ifdef CPLOASIS -USE MODI_GET_HALO -USE MODI_MNH_OASIS_RECV -USE MODI_MNH_OASIS_SEND -USE MODD_SFX_OASIS, ONLY : LOASIS -USE MODD_DYN, ONLY : XSEGLEN -USE MODD_DYN_n, ONLY : DYN_MODEL -#endif -! -USE MODD_LUNIT_n, ONLY: TLUOUT -USE MODD_CST, ONLY : XP00, XCPD, XRD, XRV,XRHOLW, XDAY, XPI, XLVTT, XMD, XAVOGADRO -USE MODD_DIMPHYEX, ONLY : DIMPHYEX_t -USE MODD_PARAMETERS, ONLY : JPVEXT, XUNDEF -USE MODD_DYN_n, ONLY : XTSTEP -USE MODD_CH_MNHC_n, ONLY : LUSECHEM -USE MODD_CH_M9_n, ONLY : CNAMES -USE MODD_FIELD_n, ONLY : XUT, XVT, XWT, XTHT, XRT, XPABST, XSVT, XTKET, XZWS,& -XLSPHI, XBMAP, XFMR0, XFMRFA, XFMWF0, XFMR00, XFMIGNITION, XFMFUELTYPE,& -XFIRETAU, XFLUXPARAMH, XFLUXPARAMW, XFIRERW, XFMASE, XFMAWC, XFMWALKIG,& -XFMFLUXHDH, XFMFLUXHDW, XRTHS, XRRS, XFMHWS, XFMWINDU, XFMWINDV, XFMWINDW, XGRADLSPHIX, & -XGRADLSPHIY, XFIREWIND, XFMGRADOROX, XFMGRADOROY -USE MODD_METRICS_n, ONLY : XDXX, XDYY, XDZZ -USE MODD_DIM_n, ONLY : NKMAX -USE MODD_GRID_n, ONLY : XLON, XZZ, XDIRCOSXW, XDIRCOSYW, XDIRCOSZW, & - XCOSSLOPE, XSINSLOPE, XZS -USE MODD_REF_n, ONLY : XRHODREF,XRHODJ,XEXNREF -USE MODD_CONF_n, ONLY : NRR -USE MODD_PARAM_n, ONLY : CDCONV,CCLOUD, CRAD -USE MODD_PRECIP_n, ONLY : XINPRC, XINPRR, XINPRS, XINPRG, XINPRH -USE MODD_DEEP_CONVECTION_n, ONLY : XPRCONV, XPRSCONV -USE MODD_CONF, ONLY : LCARTESIAN, CPROGRAM -USE MODD_TIME_n, ONLY : TDTCUR -USE MODD_RADIATIONS_n, ONLY : XFLALWD, XCCO2, XTSIDER, & - XSW_BANDS, XDIRSRFSWD, XSCAFLASWD, & - XZENITH, XAZIM, XAER, XSWU, XLWU -USE MODD_NSV -USE MODD_GRID, ONLY : XLON0, XRPK, XBETA -USE MODD_PARAM_ICE, ONLY : LSEDIC -USE MODD_PARAM_C2R2, ONLY : LSEDC -USE MODD_DIAG_IN_RUN -USE MODD_DUST, ONLY : LDUST -USE MODD_SALT, ONLY : LSALT -USE MODD_BLOWSNOW -USE MODD_BLOWSNOW_n -USE MODD_CH_AEROSOL, ONLY : LORILAM -USE MODD_CSTS_DUST, ONLY : XMOLARWEIGHT_DUST -USE MODD_CSTS_SALT, ONLY : XMOLARWEIGHT_SALT -USE MODD_CH_FLX_n, ONLY : XCHFLX -USE MODD_DIAG_FLAG, ONLY : LCHEMDIAG -! -USE MODI_NORMAL_INTERPOL -USE MODE_ROTATE_WIND, ONLY : ROTATE_WIND -USE MODI_SHUMAN -USE MODI_MNHGET_SURF_PARAM_n -USE MODI_COUPLING_SURF_ATM_n -USE MODI_DIAG_SURF_ATM_n -USE MODD_MNH_SURFEX_n -! -USE MODE_DATETIME -USE MODE_ll -USE MODD_ARGSLIST_ll, ONLY : LIST_ll -#ifdef MNH_FOREFIRE -!** MODULES FOR FOREFIRE **! -USE MODD_FOREFIRE -USE MODD_FOREFIRE_n -USE MODI_COUPLING_FOREFIRE_n -#endif -! -USE MODD_TIME_n -USE MODD_TIME -! -USE MODD_PARAM_LIMA, ONLY : MSEDC=>LSEDC -! -USE MODD_FIRE -USE MODD_FIELD -USE MODI_FIRE_MODEL -USE MODD_CONF, ONLY : NVERB, NHALO -USE MODE_MNH_TIMING, ONLY : SECOND_MNH2 -USE MODE_MSG -USE MODD_IO, ONLY: TFILEDATA -! -IMPLICIT NONE -! -! -! -!* 0.1 declarations of arguments -! -!* surface fluxes -! -------------- -! -TYPE(DIMPHYEX_t), INTENT(IN) :: D -REAL, DIMENSION(:,:), INTENT(OUT) :: PSFTH ! surface flux of potential temperature (Km/s) -REAL, DIMENSION(:,:), INTENT(OUT) :: PSFRV ! surface flux of water vapor (m/s*kg/kg) -REAL, DIMENSION(:,:,:),INTENT(OUT):: PSFSV ! surface flux of scalar (m/s*kg/kg) - ! flux of chemical var. (ppp.m/s) -REAL, DIMENSION(:,:), INTENT(OUT) :: PSFCO2! surface flux of CO2 (m/s*kg/kg) -REAL, DIMENSION(:,:), INTENT(OUT) :: PSFU ! surface fluxes of horizontal -REAL, DIMENSION(:,:), INTENT(OUT) :: PSFV ! momentum in x and y directions (m2/s2) -! -!* Radiative parameters -! -------------------- -! -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PDIR_ALB ! direct albedo for each spectral band (-) -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSCA_ALB ! diffuse albedo for each spectral band (-) -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PEMIS ! surface emissivity (-) -REAL, DIMENSION(:,:), INTENT(OUT) :: PTSRAD ! surface radiative temperature (K) -! -INTEGER, INTENT(IN) :: KTCOUNT ! temporal iteration count -TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Synchronous output file -! -!------------------------------------------------------------------------------- -! -! -! -!* 0.2 declarations of local variables -! ------------------------------- -! -! -!* Atmospheric variables -! --------------------- -! -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRV ! vapor mixing ratio -! -! suffix 'A' stands for atmospheric variable at first model level -! -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZZREF ! Forcing height -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZTA ! Temperature -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZRVA ! vapor mixing ratio -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZQA ! humidity (kg/m3) -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZPA ! Pressure -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZPS ! Pressure -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZEXNA ! Exner function -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZEXNS ! Exner function -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZTHA ! potential temperature -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZRAIN ! liquid precipitation (kg/m2/s) -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZSNOW ! solid precipitation (kg/m2/s) -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZTSUN ! solar time (s since midnight) -! -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZUA ! u component of the wind -! ! parallel to the orography -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZVA ! v component of the wind -! ! parallel to the orography -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZU ! zonal wind -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZV ! meridian wind -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZWIND ! wind parallel to the orography -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZRHOA ! air density -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZDIR ! wind direction (rad from N clockwise) -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZSFU ! zonal momentum flux -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZSFV ! meridian momentum flux -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZCO2 ! CO2 concentration (kg/kg) -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZALFA ! angle between the wind -! ! and the x axis -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2),1):: ZU2D ! u and v component of the -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2),1):: ZV2D ! wind at mass point -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZSFTH ! Turbulent flux of heat -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZSFTQ ! Turbulent flux of water -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZSFCO2 ! Turbulent flux of CO2 -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2),NSV):: ZSFTS! Turbulent flux of scalar -! -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2),NBLOWSNOW_2D) :: ZBLOWSNOW_2D ! 2D blowing snow variables - ! after advection - ! They refer to the 2D fields advected by MNH including: - ! - total number concentration in Canopy - ! - total mass concentration in Canopy - ! - equivalent concentration in the saltation layer -! -!* Dimensions -! ---------- -! -INTEGER :: IIB ! physical boundary -INTEGER :: IIE ! physical boundary -INTEGER :: IJB ! physical boundary -INTEGER :: IJE ! physical boundary -INTEGER :: IKB ! physical boundary -INTEGER :: IKE ! physical boundary -INTEGER :: IKU ! vertical array sizes -! -INTEGER :: JLAYER ! loop counter -INTEGER :: JSV ! loop counter -INTEGER :: JI,JJ,JK ! loop index -! -INTEGER :: IDIM1 ! X physical dimension -INTEGER :: IDIM2 ! Y physical dimension -INTEGER :: IDIM1D! total physical dimension -INTEGER :: IKRAD -! -INTEGER :: KSV_SURF ! Number of scalar variables sent to SURFEX -! -!* Arrays put in 1D vectors -! ------------------------ -! -REAL, DIMENSION(:), ALLOCATABLE :: ZP_TSUN ! solar time -REAL, DIMENSION(:), ALLOCATABLE :: ZP_ZENITH ! zenithal angle -REAL, DIMENSION(:), ALLOCATABLE :: ZP_AZIM ! azimuthal angle -REAL, DIMENSION(:), ALLOCATABLE :: ZP_ZREF ! forcing height -REAL, DIMENSION(:), ALLOCATABLE :: ZP_ZS ! orography -REAL, DIMENSION(:), ALLOCATABLE :: ZP_U ! zonal wind -REAL, DIMENSION(:), ALLOCATABLE :: ZP_V ! meridian wind -REAL, DIMENSION(:), ALLOCATABLE :: ZP_QA ! air humidity (kg/m3) -REAL, DIMENSION(:), ALLOCATABLE :: ZP_TA ! air temperature -REAL, DIMENSION(:), ALLOCATABLE :: ZP_RHOA ! air density -REAL, DIMENSION(:,:), ALLOCATABLE :: ZP_SV ! scalar at first atmospheric level -REAL, DIMENSION(:), ALLOCATABLE :: ZP_CO2 ! air CO2 concentration -REAL, DIMENSION(:), ALLOCATABLE :: ZP_RAIN ! liquid precipitation -REAL, DIMENSION(:), ALLOCATABLE :: ZP_SNOW ! solid precipitation -REAL, DIMENSION(:), ALLOCATABLE :: ZP_LW ! incoming longwave -REAL, DIMENSION(:,:), ALLOCATABLE :: ZP_DIR_SW ! direct incoming shortwave -REAL, DIMENSION(:,:), ALLOCATABLE :: ZP_SCA_SW ! diffuse incoming shortwave -REAL, DIMENSION(:), ALLOCATABLE :: ZP_PS ! surface pressure -REAL, DIMENSION(:), ALLOCATABLE :: ZP_PA ! pressure at first atmospheric level -REAL, DIMENSION(:), ALLOCATABLE :: ZP_ZWS ! significant wave height (m) - -REAL, DIMENSION(:), ALLOCATABLE :: ZP_SFTQ ! water vapor flux -REAL, DIMENSION(:), ALLOCATABLE :: ZP_SFTH ! potential temperature flux -REAL, DIMENSION(:,:), ALLOCATABLE :: ZP_SFTS ! scalar flux -REAL, DIMENSION(:), ALLOCATABLE :: ZP_SFCO2 ! CO2 flux -REAL, DIMENSION(:), ALLOCATABLE :: ZP_SFU ! zonal momentum flux -REAL, DIMENSION(:), ALLOCATABLE :: ZP_SFV ! meridian momentum flux -REAL, DIMENSION(:), ALLOCATABLE :: ZP_TSRAD ! radiative surface temperature -REAL, DIMENSION(:,:), ALLOCATABLE :: ZP_DIR_ALB ! direct albedo -REAL, DIMENSION(:,:), ALLOCATABLE :: ZP_SCA_ALB ! diffuse albedo -REAL, DIMENSION(:), ALLOCATABLE :: ZP_EMIS ! emissivity - -REAL, DIMENSION(:), ALLOCATABLE :: ZP_TSURF -REAL, DIMENSION(:), ALLOCATABLE :: ZP_Z0 -REAL, DIMENSION(:), ALLOCATABLE :: ZP_Z0H -REAL, DIMENSION(:), ALLOCATABLE :: ZP_QSURF - -REAL, DIMENSION(:), ALLOCATABLE :: ZP_PEW_A_COEF ! coefficients for -REAL, DIMENSION(:), ALLOCATABLE :: ZP_PEW_B_COEF ! implicit coupling -REAL, DIMENSION(:), ALLOCATABLE :: ZP_PET_A_COEF -REAL, DIMENSION(:), ALLOCATABLE :: ZP_PEQ_A_COEF -REAL, DIMENSION(:), ALLOCATABLE :: ZP_PET_B_COEF -REAL, DIMENSION(:), ALLOCATABLE :: ZP_PEQ_B_COEF -REAL, DIMENSION(:), ALLOCATABLE :: ZP_RN ! net radiation (W/m2) -REAL, DIMENSION(:), ALLOCATABLE :: ZP_H ! sensible heat flux (W/m2) -REAL, DIMENSION(:), ALLOCATABLE :: ZP_LE ! Total latent heat flux (W/m2) -REAL, DIMENSION(:), ALLOCATABLE :: ZP_LEI ! Solid Latent heat flux (W/m2) -REAL, DIMENSION(:), ALLOCATABLE :: ZP_GFLUX ! ground flux (W/m2) -REAL, DIMENSION(:), ALLOCATABLE :: ZP_T2M ! Air temperature at 2 meters (K) -REAL, DIMENSION(:), ALLOCATABLE :: ZP_Q2M ! Air humidity at 2 meters (kg/kg) -REAL, DIMENSION(:), ALLOCATABLE :: ZP_HU2M ! Air relative humidity at 2 meters (-) -REAL, DIMENSION(:), ALLOCATABLE :: ZP_ZON10M ! zonal Wind at 10 meters (m/s) -REAL, DIMENSION(:), ALLOCATABLE :: ZP_MER10M ! meridian Wind at 10 meters (m/s) -TYPE(LIST_ll), POINTER :: TZFIELDSURF_ll ! list of fields to exchange -INTEGER :: IINFO_ll ! return code of parallel routine -! -! -CHARACTER(LEN=6), DIMENSION(:), ALLOCATABLE :: YSV_SURF ! name of the scalar variables - ! sent to SURFEX -! -REAL :: ZTIMEC -INTEGER :: ILUOUT ! logical unit -! -! Fire model -REAL, DIMENSION(2) :: ZFIRETIME1, ZFIRETIME2 ! CPU time for Blaze perf profiling -REAL, DIMENSION(2) :: ZGRADTIME1, ZGRADTIME2 ! CPU time for Blaze perf profiling -REAL, DIMENSION(2) :: ZPROPAGTIME1, ZPROPAGTIME2 ! CPU time for Blaze perf profiling -REAL, DIMENSION(2) :: ZFLUXTIME1, ZFLUXTIME2 ! CPU time for Blaze perf profiling -REAL, DIMENSION(2) :: ZROSWINDTIME1, ZROSWINDTIME2 ! CPU time for Blaze perf profiling -REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZFIREFUELMAP ! Fuel map -CHARACTER(LEN=7) :: YFUELMAPFILE ! Fuel Map file name -TYPE(LIST_ll), POINTER :: TZFIELDFIRE_ll ! list of fields to exchange - -!------------------------------------------------------------------------------- -! -! -ILUOUT=TLUOUT%NLU -IKB= 1+JPVEXT -IKU=NKMAX + 2* JPVEXT -IKE=IKU-JPVEXT -! -CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) -! -PSFTH = XUNDEF -PSFRV = XUNDEF -PSFSV = XUNDEF -PSFCO2 = XUNDEF -PSFU = XUNDEF -PSFV = XUNDEF -PDIR_ALB = XUNDEF -PSCA_ALB = XUNDEF -PEMIS = XUNDEF -PTSRAD = XUNDEF -! -! -!------------------------------------------------------------------------------- -! -!* 1. CONVERSION OF THE ATMOSPHERIC VARIABLES -! --------------------------------------- -! -! 1.1 water vapor -! ----------- - -! -ALLOCATE(ZRV(SIZE(PSFTH,1),SIZE(PSFTH,2),IKU)) -! -IF(NRR>0) THEN - ZRV(:,:,:)=XRT(:,:,:,1) -ELSE - ZRV(:,:,:)=0. -END IF -! -! 1.2 Horizontal wind direction (rad from N clockwise) -! ------------------------- -! -ZU2D(:,:,:)=MXF(XUT(:,:,IKB:IKB)) -ZV2D(:,:,:)=MYF(XVT(:,:,IKB:IKB)) -! -!* angle between Y axis and wind (rad., clockwise) -! -ZALFA = 0. -WHERE(ZU2D(:,:,1)/=0. .OR. ZV2D(:,:,1)/=0.) - ZALFA(:,:)=ATAN2(ZU2D(:,:,1),ZV2D(:,:,1)) -END WHERE -WHERE(ZALFA(:,:)<0.) ZALFA(:,:) = ZALFA(:,:) + 2. * XPI -! -!* angle between North and wind (rad., clockwise) -! -IF (.NOT. LCARTESIAN) THEN - ZDIR = ( (XRPK*(XLON(:,:)-XLON0)) - XBETA ) * XPI/180. + ZALFA -ELSE - ZDIR = - XBETA * XPI/180. + ZALFA -END IF -! -! -! 1.3 Rotate the wind -! --------------- -! -CALL ROTATE_WIND(D,XUT,XVT,XWT, & - XDIRCOSXW, XDIRCOSYW, XDIRCOSZW, & - XCOSSLOPE,XSINSLOPE, & - XDXX,XDYY,XDZZ, & - ZUA,ZVA ) - -! -! 1.4 zonal and meridian components of the wind parallel to the slope -! --------------------------------------------------------------- -! -ZWIND(:,:) = SQRT( ZUA**2 + ZVA**2 ) -! -ZU(:,:) = ZWIND(:,:) * SIN(ZDIR) -ZV(:,:) = ZWIND(:,:) * COS(ZDIR) -! -! 1.5 Horizontal interpolation the thermodynamic fields -! ------------------------------------------------- -! -CALL NORMAL_INTERPOL(XTHT,ZRV,XPABST, & - XDIRCOSXW, XDIRCOSYW, XDIRCOSZW, & - XCOSSLOPE,XSINSLOPE, & - XDXX,XDYY,XDZZ, & - ZTHA,ZRVA,ZEXNA ) -! -DEALLOCATE(ZRV) -! -! -! 1.6 Pressure and Exner function -! --------------------------- -! -! -ZPA(:,:) = XP00 * ZEXNA(:,:) **(XCPD/XRD) -! -ZEXNS(:,:) = 0.5 * ( (XPABST(:,:,IKB-1)/XP00)**(XRD/XCPD) & - +(XPABST(:,:,IKB )/XP00)**(XRD/XCPD) & - ) -ZPS(:,:) = XP00 * ZEXNS(:,:) **(XCPD/XRD) -! -! 1.7 humidity in kg/m3 from the mixing ratio -! --------------------------------------- -! -! -ZQA(:,:) = ZRVA(:,:) * XRHODREF(:,:,IKB) -! -! -! 1.8 Temperature from the potential temperature -! ------------------------------------------ -! -! -ZTA(:,:) = ZTHA(:,:) * ZEXNA(:,:) -! -! -! 1.9 Air density -! ----------- -! -ZRHOA(:,:) = ZPA(:,:)/(XRD * ZTA(:,:) * ((1. + (XRD/XRV)*ZRVA(:,:))/ & - (1. + ZRVA(:,:)))) -! -! -! 1.10 Precipitations -! -------------- -! -ZRAIN=0. -ZSNOW=0. -IF (NRR>2 .AND. SIZE(XINPRR)>0 ) THEN - IF (( CCLOUD(1:3) == 'ICE' .AND. LSEDIC) .OR. & - ((CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'KHKO') .AND. LSEDC) .OR. & - ( CCLOUD=='LIMA' .AND. MSEDC)) THEN - ZRAIN = ZRAIN + XINPRR * XRHOLW + XINPRC * XRHOLW - ELSE - ZRAIN = ZRAIN + XINPRR * XRHOLW - END IF -END IF -IF (CDCONV == 'KAFR') THEN - ZRAIN = ZRAIN + (XPRCONV - XPRSCONV) * XRHOLW - ZSNOW = ZSNOW + XPRSCONV * XRHOLW -END IF -IF( NRR >= 5 .AND. SIZE(XINPRS)>0 ) ZSNOW = ZSNOW + XINPRS * XRHOLW -IF( NRR >= 6 .AND. SIZE(XINPRG)>0 ) ZSNOW = ZSNOW + XINPRG * XRHOLW -IF( NRR >= 7 .AND. SIZE(XINPRH)>0 ) ZSNOW = ZSNOW + XINPRH * XRHOLW -! -! -! 1.11 Solar time -! ---------- -! -IF (.NOT. LCARTESIAN) THEN - ZTSUN(:,:) = MOD(TDTCUR%xtime -XTSIDER*3600. +XLON(:,:)*240., XDAY) -ELSE - ZTSUN(:,:) = MOD(TDTCUR%xtime -XTSIDER*3600. +XLON0 *240., XDAY) -END IF -! -! 1.12 Forcing level -! ------------- -! -ZZREF(:,:) = 0.5*( XZZ(:,:,IKB+1)-XZZ(:,:,IKB) )*XDIRCOSZW(:,:) -! -! -! 1.13 CO2 concentration (kg/m3) -! ----------------- -! -ZCO2(:,:) = XCCO2 * XRHODREF(:,:,IKB) -! -! -! -! 1.14 Blowing snow scheme (optional) -! ----------------- -! -ZBLOWSNOW_2D=0. - -IF(LBLOWSNOW) THEN - KSV_SURF = NSV+NBLOWSNOW_2D ! When blowing snow scheme is used - ! NBLOWSN0W_2D variables are sent to SURFEX through ZP_SV. - ! They refer to the 2D fields advected by MNH including: - ! - total number concentration in Canopy - ! - total mass concentration in Canopy - ! - equivalent concentration in the saltation layer - ! Initialize array of scalar to be sent to SURFEX including 2D blowing snow fields - ALLOCATE(YSV_SURF(KSV_SURF)) - YSV_SURF(1:NSV) = CSV(:) - YSV_SURF(NSV+1:KSV_SURF) = YPBLOWSNOW_2D(:) - - - DO JSV=1,NBLOWSNOW_2D - ZBLOWSNOW_2D(:,:,JSV) = XRSNWCANOS(:,:,JSV)*XTSTEP/XRHODJ(:,:,IKB) - END DO - -ELSE - KSV_SURF = NSV - ALLOCATE(YSV_SURF(KSV_SURF)) - YSV_SURF(:) = CSV(:) -ENDIF -! -!------------------------------------------------------------------------------- -! -!* 2. Call to surface monitor with 2D variables -! ----------------------------------------- -! -! -! initial values: -! -IDIM1 = IIE-IIB+1 -IDIM2 = IJE-IJB+1 -IDIM1D = IDIM1*IDIM2 -! -! -! Transform 2D input fields into 1D: -! -CALL RESHAPE_SURF(IDIM1D) -! -! call to have the cumulated time since beginning of simulation -! -CALL DATETIME_DISTANCE(TDTSEG,TDTCUR,ZTIMEC) - -#ifdef CPLOASIS -IF (LOASIS) THEN - IF ( MOD(ZTIMEC,1.0) .LE. 1E-2 .OR. (1.0 - MOD(ZTIMEC,1.0)) .LE. 1E-2 ) THEN - IF ( NINT(ZTIMEC-(XSEGLEN-DYN_MODEL(1)%XTSTEP)) .LT. 0 ) THEN - WRITE(ILUOUT,*) '----------------------------' - WRITE(ILUOUT,*) ' Reception des champs avec OASIS' - WRITE(ILUOUT,*) 'NINT(ZTIMEC)=', NINT(ZTIMEC) - CALL MNH_OASIS_RECV(CPROGRAM,IDIM1D,SIZE(XSW_BANDS),ZTIMEC+XTSTEP,XTSTEP, & - ZP_ZENITH,XSW_BANDS , & - ZP_TSRAD,ZP_DIR_ALB,ZP_SCA_ALB,ZP_EMIS,ZP_TSURF) - WRITE(ILUOUT,*) '----------------------------' - END IF - END IF -END IF -#endif -! -! Call to surface schemes -! -CALL COUPLING_SURF_ATM_n(YSURF_CUR,'MESONH', 'E',ZTIMEC, & - XTSTEP, TDTCUR%nyear, TDTCUR%nmonth, TDTCUR%nday, TDTCUR%xtime, & - IDIM1D,KSV_SURF,SIZE(XSW_BANDS), & - ZP_TSUN, ZP_ZENITH,ZP_ZENITH, ZP_AZIM, & - ZP_ZREF, ZP_ZREF, ZP_ZS, ZP_U, ZP_V, ZP_QA, ZP_TA, ZP_RHOA, ZP_SV, ZP_CO2, YSV_SURF, & - ZP_RAIN, ZP_SNOW, ZP_LW, ZP_DIR_SW, ZP_SCA_SW, XSW_BANDS, ZP_PS, ZP_PA, & - ZP_SFTQ, ZP_SFTH, ZP_SFTS, ZP_SFCO2, ZP_SFU, ZP_SFV, & - ZP_TSRAD, ZP_DIR_ALB, ZP_SCA_ALB, ZP_EMIS, ZP_TSURF, ZP_Z0, ZP_Z0H, ZP_QSURF, & - ZP_PEW_A_COEF, ZP_PEW_B_COEF, & - ZP_PET_A_COEF, ZP_PEQ_A_COEF, ZP_PET_B_COEF, ZP_PEQ_B_COEF,ZP_ZWS, & - 'OK' ) -! -#ifdef CPLOASIS -IF (LOASIS) THEN - IF ( MOD(ZTIMEC,1.0) .LE. 1E-2 .OR. (1.0 - MOD(ZTIMEC,1.0)) .LE. 1E-2 ) THEN - IF (NINT(ZTIMEC-(XSEGLEN-DYN_MODEL(1)%XTSTEP)) .LT. 0) THEN - WRITE(ILUOUT,*) '----------------------------' - WRITE(ILUOUT,*) ' Envoi des champs avec OASIS' - WRITE(ILUOUT,*) 'NINT(ZTIMEC)=', NINT(ZTIMEC) - CALL MNH_OASIS_SEND(CPROGRAM,IDIM1D,ZTIMEC+XTSTEP,XTSTEP) - WRITE(ILUOUT,*) '----------------------------' - END IF - END IF -END IF -#endif -! -IF (CPROGRAM=='DIAG ' .OR. LDIAG_IN_RUN) THEN - CALL DIAG_SURF_ATM_n(YSURF_CUR,'MESONH') - CALL MNHGET_SURF_PARAM_n( PRN = ZP_RN, PH = ZP_H, PLE = ZP_LE, PLEI = ZP_LEI, & - PGFLUX = ZP_GFLUX, PT2M = ZP_T2M, PQ2M = ZP_Q2M, PHU2M = ZP_HU2M, & - PZON10M = ZP_ZON10M, PMER10M = ZP_MER10M ) -END IF -! -! Transform 1D output fields into 2D: -! -CALL UNSHAPE_SURF(IDIM1,IDIM2) -#ifdef MNH_FOREFIRE -!------------------------! -! COUPLING WITH FOREFIRE ! -!------------------------! - -IF ( LFOREFIRE ) THEN - CALL FOREFIRE_DUMP_FIELDS_n(XUT, XVT, XWT, XSVT& - , XTHT, XRT(:,:,:,1), XPABST, XTKET& - , IDIM1+2, IDIM2+2, NKMAX+2) -END IF - -IF ( FFCOUPLING ) THEN - - CALL SEND_GROUND_WIND_n(XUT, XVT, IKB, IINFO_ll) - - CALL FOREFIRE_RECEIVE_PARAL_n() - - CALL COUPLING_FOREFIRE_n(XTSTEP, ZSFTH, ZSFTQ, ZSFTS) - - CALL FOREFIRE_SEND_PARAL_n(IINFO_ll) - -END IF - -FF_TIME = FF_TIME + XTSTEP -#endif -! -! Friction of components along slope axes (U: largest local slope axis, V: zero slope axis) -! -! -PSFU(:,:) = 0. -PSFV(:,:) = 0. -! -WHERE (ZSFU(:,:)/=XUNDEF .AND. ZWIND(:,:)>0.) - PSFU(:,:) = - SQRT(ZSFU**2+ZSFV**2) * ZUA(:,:) / ZWIND(:,:) / XRHODREF(:,:,IKB) - PSFV(:,:) = - SQRT(ZSFU**2+ZSFV**2) * ZVA(:,:) / ZWIND(:,:) / XRHODREF(:,:,IKB) -END WHERE -! - -!* 2.1 Blaze Fire Model -! ---------------- -! -IF (LBLAZE) THEN - ! get start time - CALL SECOND_MNH2( ZFIRETIME1 ) - - !* 2.1.1 Local variables allocation - ! -------------------------- - ! - - ! Parallel fuel - NULLIFY(TZFIELDFIRE_ll) - IF (KTCOUNT <= 1) THEN - ! fuelmap - SELECT CASE (CPROPAG_MODEL) - CASE('SANTONI2011') - ! - ALLOCATE( ZFIREFUELMAP(SIZE(XLSPHI,1), SIZE(XLSPHI,2), SIZE(XLSPHI,3), 22) ); - ! Parallel fuel - CALL ADD4DFIELD_ll( TZFIELDFIRE_ll, ZFIREFUELMAP(:,:,:,1::22), 'MODEL_n::ZFIREFUELMAP' ) - ! Default value - ZFIREFUELMAP(:,:,:,:) = 0. - END SELECT - - !* 2.1.2 Read fuel map file - ! ------------------ - ! - ! Fuel map file name - YFUELMAPFILE = 'FuelMap' - ! - CALL FIRE_READFUEL( TPFILE, ZFIREFUELMAP, XFMIGNITION, XFMWALKIG ) - - !* 2.1.3 Ignition LS function with ignition map - ! -------------------------------------- - ! - SELECT CASE (CFIRE_CPL_MODE) - CASE('2WAYCPL', 'ATM2FIR') - ! force ignition - WHERE (XFMIGNITION <= TDTCUR%XTIME ) XLSPHI = 1. - ! walking ignition - CALL FIRE_LS_RECONSTRUCTION_FROM_BMAP( XLSPHI, XFMWALKIG, 0.) - ! - !* 2.1.4 Update BMAP - ! ----------- - ! - WHERE (XLSPHI >= .5 .AND. XBMAP < 0) XBMAP = TDTCUR%XTIME - ! - CASE('FIR2ATM') - CALL FIRE_READBMAP(TPFILE,XBMAP) - - END SELECT - ! - !* 2.1.5 Compute R0, A, Wf0, R00 - ! ----------------------- - ! - SELECT CASE (CPROPAG_MODEL) - CASE('SANTONI2011') - CALL FIRE_NOWINDROS( ZFIREFUELMAP, XFMR0, XFMRFA, XFMWF0, XFMR00, XFMFUELTYPE, XFIRETAU, XFLUXPARAMH, & - XFLUXPARAMW, XFMASE, XFMAWC ) - END SELECT - ! - !* 2.1.6 Compute orographic gradient - ! --------------------------- - CALL FIRE_GRAD_OROGRAPHY( XZS, XFMGRADOROX, XFMGRADOROY ) - ! - !* 2.1.7 Test halo size - ! -------------- - IF (NHALO < 2 .AND. NFIRE_WENO_ORDER == 3) THEN - WRITE(ILUOUT,'(A/A)') 'ERROR BLAZE-FIRE : WENO3 fire gradient calculation needs NHALO >= 2' - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','GROUND_PARAM_n','') - ELSEIF (NHALO < 3 .AND. NFIRE_WENO_ORDER == 5) THEN - WRITE(ILUOUT,'(A/A)') 'ERROR : WENO5 fire gradient calculation needs NHALO >= 3' - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','GROUND_PARAM_n','') - END IF - ! - END IF - ! - !* 2.1.6 Compute grad of level set function phi - ! -------------------------------------- - ! - SELECT CASE (CFIRE_CPL_MODE) - CASE('2WAYCPL', 'ATM2FIR') - ! get time 1 - CALL SECOND_MNH2( ZGRADTIME1 ) - CALL FIRE_GRADPHI( XLSPHI, XGRADLSPHIX, XGRADLSPHIY ) - - ! get time 2 - CALL SECOND_MNH2( ZGRADTIME2 ) - XGRADPERF = XGRADPERF + ZGRADTIME2 - ZGRADTIME1 - ! - !* 2.1.7 Get horizontal wind speed projected on LS gradient direction - ! ------------------------------------------------------------ - ! - CALL FIRE_GETWIND( XUT, XVT, XWT, XGRADLSPHIX, XGRADLSPHIY, XFIREWIND, KTCOUNT, XTSTEP, XFMGRADOROX, XFMGRADOROY ) - ! - !* 2.1.8 Compute ROS XFIRERW with wind - ! ----------------------------- - ! - ! - SELECT CASE (CPROPAG_MODEL) - CASE('SANTONI2011') - CALL FIRE_RATEOFSPREAD( XFMFUELTYPE, XFMR0, XFMRFA, XFMWF0, XFMR00, XFIREWIND, XGRADLSPHIX, XGRADLSPHIY, & - XFMGRADOROX, XFMGRADOROY, XFIRERW ) - END SELECT - CALL SECOND_MNH2( ZROSWINDTIME2 ) - XROSWINDPERF = XROSWINDPERF + ZROSWINDTIME2 - ZGRADTIME2 - ! - !* 2.1.8 Integrate model on atm time step to propagate - ! --------------------------------------------- - ! - SELECT CASE (CPROPAG_MODEL) - CASE('SANTONI2011') - CALL FIRE_PROPAGATE( XLSPHI, XBMAP, XFMIGNITION, XFMWALKIG, XGRADLSPHIX, XGRADLSPHIY, XTSTEP, XFIRERW ) - END SELECT - CALL SECOND_MNH2( ZPROPAGTIME2 ) - XPROPAGPERF = XPROPAGPERF + ZPROPAGTIME2 - ZROSWINDTIME2 - ! - CASE('FIR2ATM') - ! - CALL SECOND_MNH2( ZPROPAGTIME1 ) - CALL FIRE_LS_RECONSTRUCTION_FROM_BMAP( XLSPHI, XBMAP, XTSTEP ) - CALL SECOND_MNH2( ZPROPAGTIME2 ) - XPROPAGPERF = XPROPAGPERF + ZPROPAGTIME2 - ZPROPAGTIME1 - XGRADPERF(:) = 0. - ! - END SELECT - ! - !* 2.1.8 Compute fluxes - ! -------------- - ! - SELECT CASE (CFIRE_CPL_MODE) - CASE('2WAYCPL','FIR2ATM') - CALL SECOND_MNH2( ZFLUXTIME1 ) - ! 2 way coupling - CALL FIRE_HEATFLUXES( XLSPHI, XBMAP, XFIRETAU, XTSTEP, XFLUXPARAMH, XFLUXPARAMW, XFMFLUXHDH, XFMFLUXHDW, XFMASE, XFMAWC ) - ! vertical distribution of fire heat fluxes - CALL FIRE_VERTICALFLUXDISTRIB( XFMFLUXHDH, XFMFLUXHDW, XRTHS, XRRS, ZSFTS, XEXNREF, XRHODJ, XRT, XRHODREF ) - ! - CALL SECOND_MNH2( ZFLUXTIME2 ) - XFLUXPERF = XFLUXPERF + ZFLUXTIME2 - ZFLUXTIME1 - CASE DEFAULT - XFLUXPERF(:) = 0. - END SELECT - ! get end time - CALL SECOND_MNH2( ZFIRETIME2 ) - ! add to Blaze time - XFIREPERF = XFIREPERF + ZFIRETIME2 - ZFIRETIME1 -END IF -!* conversion from H (W/m2) to w'Theta' -! -PSFTH(:,:) = ZSFTH(:,:) / XCPD / XRHODREF(:,:,IKB) -! -! -!* conversion from water flux (kg/m2/s) to w'rv' -! -PSFRV(:,:) = ZSFTQ(:,:) / XRHODREF(:,:,IKB) -! -! -!* conversion from scalar flux (kg/m2/s) to w'rsv' -! -IF(NSV .GT. 0) THEN - DO JSV=1,NSV - PSFSV(:,:,JSV) = ZSFTS(:,:,JSV) / XRHODREF(:,:,IKB) - END DO -END IF -! -!* conversion from chemistry flux (molec/m2/s) to (ppp.m.s-1) -! -IF (LUSECHEM) THEN - DO JSV=NSV_CHEMBEG,NSV_CHEMEND - PSFSV(:,:,JSV) = ZSFTS(:,:,JSV) * XMD / ( XAVOGADRO * XRHODREF(:,:,IKB)) - IF ((LCHEMDIAG).AND.(CPROGRAM == 'DIAG ')) XCHFLX(:,:,JSV-NSV_CHEMBEG+1) = PSFSV(:,:,JSV) - END DO -ELSE - PSFSV(:,:,NSV_CHEMBEG:NSV_CHEMEND) = 0. -END IF -! -!* conversion from dust flux (kg/m2/s) to (ppp.m.s-1) -! -IF (LDUST) THEN - DO JSV=NSV_DSTBEG,NSV_DSTEND - PSFSV(:,:,JSV) = ZSFTS(:,:,JSV) * XMD / (XMOLARWEIGHT_DUST * XRHODREF(:,:,IKB)) - END DO -ELSE - PSFSV(:,:,NSV_DSTBEG:NSV_DSTEND) = 0. -END IF -! -!* conversion from sea salt flux (kg/m2/s) to (ppp.m.s-1) -! -IF (LSALT) THEN - DO JSV=NSV_SLTBEG,NSV_SLTEND - PSFSV(:,:,JSV) = ZSFTS(:,:,JSV) * XMD / (XMOLARWEIGHT_SALT * XRHODREF(:,:,IKB)) - END DO -ELSE - PSFSV(:,:,NSV_SLTBEG:NSV_SLTEND) = 0. -END IF -! -!* conversion from aerosol flux (molec/m2/s) to (ppp.m.s-1) -! -IF (LORILAM) THEN - DO JSV=NSV_AERBEG,NSV_AEREND - PSFSV(:,:,JSV) = ZSFTS(:,:,JSV) * XMD / ( XAVOGADRO * XRHODREF(:,:,IKB)) - END DO -ELSE - PSFSV(:,:,NSV_AERBEG:NSV_AEREND) = 0. -END IF -! -!* conversion from blowing snow flux (kg/m2/s) to [kg(snow)/kg(dry air).m.s-1] -! -IF (LBLOWSNOW) THEN - DO JSV=NSV_SNWBEG,NSV_SNWEND - PSFSV(:,:,JSV) = ZSFTS(:,:,JSV)/ (ZRHOA(:,:)) - END DO - !* Update tendency for blowing snow 2D fields - DO JSV=1,(NBLOWSNOW_2D) - XRSNWCANOS(:,:,JSV) = ZBLOWSNOW_2D(:,:,JSV)*XRHODJ(:,:,IKB)/(XTSTEP*ZRHOA(:,:)) - END DO - -ELSE - PSFSV(:,:,NSV_SNWBEG:NSV_SNWEND) = 0. -END IF -! -!* conversion from CO2 flux (kg/m2/s) to w'CO2' -! -PSFCO2(:,:) = ZSFCO2(:,:) / XRHODREF(:,:,IKB) -! -! -!* Diagnostics -! ----------- -! -! -IF (LDIAG_IN_RUN) THEN - ! - XCURRENT_SFCO2(:,:) = ZSFCO2(:,:) - XCURRENT_DSTAOD(:,:)=0.0 - XCURRENT_SLTAOD(:,:)=0.0 - IF (CRAD/='NONE') THEN - XCURRENT_LWD (:,:) = XFLALWD(:,:) - XCURRENT_SWD (:,:) = SUM(XDIRSRFSWD(:,:,:)+XSCAFLASWD(:,:,:),DIM=3) - XCURRENT_LWU (:,:) = XLWU(:,:,IKB) - XCURRENT_SWU (:,:) = XSWU(:,:,IKB) - XCURRENT_SWDIR(:,:) = SUM(XDIRSRFSWD,DIM=3) - XCURRENT_SWDIFF(:,:) = SUM(XSCAFLASWD(:,:,:),DIM=3) - DO JK=IKB,IKE - IKRAD = JK - 1 - DO JJ=IJB,IJE - DO JI=IIB,IIE - XCURRENT_DSTAOD(JI,JJ)=XCURRENT_DSTAOD(JI,JJ)+XAER(JI,JJ,IKRAD,3) - XCURRENT_SLTAOD(JI,JJ)=XCURRENT_SLTAOD(JI,JJ)+XAER(JI,JJ,IKRAD,2) - ENDDO - ENDDO - ENDDO - END IF -! - NULLIFY(TZFIELDSURF_ll) - CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_RN, 'GROUND_PARAM_n::XCURRENT_RN' ) - CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_H, 'GROUND_PARAM_n::XCURRENT_H' ) - CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_LE, 'GROUND_PARAM_n::XCURRENT_LE' ) - CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_GFLUX, 'GROUND_PARAM_n::XCURRENT_GFLUX' ) - CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SWD, 'GROUND_PARAM_n::XCURRENT_SWD' ) - CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SWU, 'GROUND_PARAM_n::XCURRENT_SWU' ) - CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_LWD, 'GROUND_PARAM_n::XCURRENT_LWD' ) - CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_LWU, 'GROUND_PARAM_n::XCURRENT_LWU' ) - CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_T2M, 'GROUND_PARAM_n::XCURRENT_T2M' ) - CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_Q2M, 'GROUND_PARAM_n::XCURRENT_Q2M' ) - CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_HU2M, 'GROUND_PARAM_n::XCURRENT_HU2M' ) - CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_ZON10M, 'GROUND_PARAM_n::XCURRENT_ZON10M' ) - CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_MER10M, 'GROUND_PARAM_n::XCURRENT_MER10M' ) - CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_DSTAOD, 'GROUND_PARAM_n::XCURRENT_DSTAOD' ) - CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SLTAOD, 'GROUND_PARAM_n::XCURRENT_SLTAOD' ) - CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_ZWS, 'GROUND_PARAM_n::XCURRENT_ZWS' ) - CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SFCO2, 'GROUND_PARAM_n::XCURRENT_SFCO2' ) - - CALL UPDATE_HALO_ll(TZFIELDSURF_ll,IINFO_ll) - CALL CLEANLIST_ll(TZFIELDSURF_ll) -END IF -! -IF (LBLAZE) THEN - IF (KTCOUNT <= 1) THEN - DEALLOCATE(ZFIREFUELMAP) - END IF - CALL CLEANLIST_ll(TZFIELDFIRE_ll) -END IF -!================================================================================== -! -CONTAINS -! -!================================================================================== -! -SUBROUTINE RESHAPE_SURF(KDIM1D) -! -INTEGER, INTENT(IN) :: KDIM1D -INTEGER, DIMENSION(1) :: ISHAPE_1 -! -ISHAPE_1 = (/KDIM1D/) -! -ALLOCATE(ZP_TSUN (KDIM1D)) -ALLOCATE(ZP_ZENITH (KDIM1D)) -ALLOCATE(ZP_AZIM (KDIM1D)) -ALLOCATE(ZP_ZREF (KDIM1D)) -ALLOCATE(ZP_ZS (KDIM1D)) -ALLOCATE(ZP_U (KDIM1D)) -ALLOCATE(ZP_V (KDIM1D)) -ALLOCATE(ZP_QA (KDIM1D)) -ALLOCATE(ZP_TA (KDIM1D)) -ALLOCATE(ZP_RHOA (KDIM1D)) -ALLOCATE(ZP_SV (KDIM1D,KSV_SURF)) -ALLOCATE(ZP_CO2 (KDIM1D)) -ALLOCATE(ZP_RAIN (KDIM1D)) -ALLOCATE(ZP_SNOW (KDIM1D)) -ALLOCATE(ZP_LW (KDIM1D)) -ALLOCATE(ZP_DIR_SW (KDIM1D,SIZE(XDIRSRFSWD,3))) -ALLOCATE(ZP_SCA_SW (KDIM1D,SIZE(XSCAFLASWD,3))) -ALLOCATE(ZP_PS (KDIM1D)) -ALLOCATE(ZP_PA (KDIM1D)) -ALLOCATE(ZP_ZWS (KDIM1D)) - -ALLOCATE(ZP_SFTQ (KDIM1D)) -ALLOCATE(ZP_SFTH (KDIM1D)) -ALLOCATE(ZP_SFU (KDIM1D)) -ALLOCATE(ZP_SFV (KDIM1D)) -ALLOCATE(ZP_SFTS (KDIM1D,KSV_SURF)) -ALLOCATE(ZP_SFCO2 (KDIM1D)) -ALLOCATE(ZP_TSRAD (KDIM1D)) -ALLOCATE(ZP_DIR_ALB (KDIM1D,SIZE(PDIR_ALB,3))) -ALLOCATE(ZP_SCA_ALB (KDIM1D,SIZE(PSCA_ALB,3))) -ALLOCATE(ZP_EMIS (KDIM1D)) -ALLOCATE(ZP_TSURF (KDIM1D)) -ALLOCATE(ZP_Z0 (KDIM1D)) -ALLOCATE(ZP_Z0H (KDIM1D)) -ALLOCATE(ZP_QSURF (KDIM1D)) -ALLOCATE(ZP_RN (KDIM1D)) -ALLOCATE(ZP_H (KDIM1D)) -ALLOCATE(ZP_LE (KDIM1D)) -ALLOCATE(ZP_LEI (KDIM1D)) -ALLOCATE(ZP_GFLUX (KDIM1D)) -ALLOCATE(ZP_T2M (KDIM1D)) -ALLOCATE(ZP_Q2M (KDIM1D)) -ALLOCATE(ZP_HU2M (KDIM1D)) -ALLOCATE(ZP_ZON10M (KDIM1D)) -ALLOCATE(ZP_MER10M (KDIM1D)) - -!* explicit coupling only -ALLOCATE(ZP_PEW_A_COEF (KDIM1D)) -ALLOCATE(ZP_PEW_B_COEF (KDIM1D)) -ALLOCATE(ZP_PET_A_COEF (KDIM1D)) -ALLOCATE(ZP_PEQ_A_COEF (KDIM1D)) -ALLOCATE(ZP_PET_B_COEF (KDIM1D)) -ALLOCATE(ZP_PEQ_B_COEF (KDIM1D)) - -ZP_TSUN(:) = RESHAPE(ZTSUN(IIB:IIE,IJB:IJE), ISHAPE_1) -ZP_TA(:) = RESHAPE(ZTA(IIB:IIE,IJB:IJE), ISHAPE_1) -ZP_QA(:) = RESHAPE(ZQA(IIB:IIE,IJB:IJE), ISHAPE_1) -ZP_RHOA(:) = RESHAPE(ZRHOA(IIB:IIE,IJB:IJE), ISHAPE_1) -ZP_U(:) = RESHAPE(ZU(IIB:IIE,IJB:IJE), ISHAPE_1) -ZP_V(:) = RESHAPE(ZV(IIB:IIE,IJB:IJE), ISHAPE_1) -ZP_PS(:) = RESHAPE(ZPS(IIB:IIE,IJB:IJE), ISHAPE_1) -ZP_PA(:) = RESHAPE(ZPA(IIB:IIE,IJB:IJE), ISHAPE_1) -ZP_ZS(:) = RESHAPE(XZS(IIB:IIE,IJB:IJE), ISHAPE_1) -ZP_CO2(:) = RESHAPE(ZCO2(IIB:IIE,IJB:IJE), ISHAPE_1) -ZP_SNOW(:) = RESHAPE(ZSNOW(IIB:IIE,IJB:IJE), ISHAPE_1) -ZP_RAIN(:) = RESHAPE(ZRAIN(IIB:IIE,IJB:IJE), ISHAPE_1) -ZP_ZREF(:) = RESHAPE(ZZREF(IIB:IIE,IJB:IJE), ISHAPE_1) -ZP_ZWS(:) = RESHAPE(XZWS(IIB:IIE,IJB:IJE), ISHAPE_1) - -DO JLAYER=1,NSV - ZP_SV(:,JLAYER) = RESHAPE(XSVT(IIB:IIE,IJB:IJE,IKB,JLAYER), ISHAPE_1) -END DO -! -IF(LBLOWSNOW) THEN - DO JLAYER=1,NBLOWSNOW_2D - ZP_SV(:,NSV+JLAYER) = RESHAPE(ZBLOWSNOW_2D(IIB:IIE,IJB:IJE,JLAYER), ISHAPE_1) - END DO -END IF -! -!chemical conversion : from part/part to molec./m3 -DO JLAYER=NSV_CHEMBEG,NSV_CHEMEND - ZP_SV(:,JLAYER) = ZP_SV(:,JLAYER) * XAVOGADRO * ZP_RHOA(:) / XMD -END DO -DO JLAYER=NSV_AERBEG,NSV_AEREND - ZP_SV(:,JLAYER) = ZP_SV(:,JLAYER) * XAVOGADRO * ZP_RHOA(:) / XMD -END DO -!dust conversion : from part/part to kg/m3 -DO JLAYER=NSV_DSTBEG,NSV_DSTEND - ZP_SV(:,JLAYER) = ZP_SV(:,JLAYER) * XMOLARWEIGHT_DUST* ZP_RHOA(:) / XMD -END DO -!sea salt conversion : from part/part to kg/m3 -DO JLAYER=NSV_SLTBEG,NSV_SLTEND - ZP_SV(:,JLAYER) = ZP_SV(:,JLAYER) * XMOLARWEIGHT_SALT* ZP_RHOA(:) / XMD -END DO -! -!blowing snow conversion : from kg(snow)/kg(dry air) to kg(snow)/m3 -DO JLAYER=NSV_SNWBEG,NSV_SNWEND - ZP_SV(:,JLAYER) = ZP_SV(:,JLAYER) * ZP_RHOA(:) -END DO - -IF(LBLOWSNOW) THEN ! Convert 2D blowing snow fields - ! from kg(snow)/kg(dry air) to kg(snow)/m3 - DO JLAYER=(NSV+1),KSV_SURF - ZP_SV(:,JLAYER) = ZP_SV(:,JLAYER) * ZP_RHOA(:) - END DO -END IF -! -ZP_ZENITH(:) = RESHAPE(XZENITH(IIB:IIE,IJB:IJE), ISHAPE_1) -ZP_AZIM (:) = RESHAPE(XAZIM (IIB:IIE,IJB:IJE), ISHAPE_1) -ZP_LW(:) = RESHAPE(XFLALWD(IIB:IIE,IJB:IJE), ISHAPE_1) -DO JLAYER=1,SIZE(XDIRSRFSWD,3) - ZP_DIR_SW(:,JLAYER) = RESHAPE(XDIRSRFSWD(IIB:IIE,IJB:IJE,JLAYER), ISHAPE_1) - ZP_SCA_SW(:,JLAYER) = RESHAPE(XSCAFLASWD(IIB:IIE,IJB:IJE,JLAYER), ISHAPE_1) -END DO -! -ZP_PEW_A_COEF = 0. -ZP_PEW_B_COEF = 0. -ZP_PET_A_COEF = 0. -ZP_PEQ_A_COEF = 0. -ZP_PET_B_COEF = 0. -ZP_PEQ_B_COEF = 0. -! -END SUBROUTINE RESHAPE_SURF -!================================================i================================= -SUBROUTINE UNSHAPE_SURF(KDIM1,KDIM2) -! -INTEGER, INTENT(IN) :: KDIM1, KDIM2 -INTEGER, DIMENSION(2) :: ISHAPE_2 -! -ISHAPE_2 = (/KDIM1,KDIM2/) -! -! Arguments in call to surface: -! -ZSFTH = XUNDEF -ZSFTQ = XUNDEF -IF (NSV>0) ZSFTS = XUNDEF -ZSFCO2 = XUNDEF -ZSFU = XUNDEF -ZSFV = XUNDEF -! -ZSFTH (IIB:IIE,IJB:IJE) = RESHAPE(ZP_SFTH(:), ISHAPE_2) -ZSFTQ (IIB:IIE,IJB:IJE) = RESHAPE(ZP_SFTQ(:), ISHAPE_2) -DO JLAYER=1,SIZE(PSFSV,3) - ZSFTS (IIB:IIE,IJB:IJE,JLAYER) = RESHAPE(ZP_SFTS(:,JLAYER), ISHAPE_2) -END DO -ZSFCO2 (IIB:IIE,IJB:IJE) = RESHAPE(ZP_SFCO2(:), ISHAPE_2) -ZSFU (IIB:IIE,IJB:IJE) = RESHAPE(ZP_SFU(:), ISHAPE_2) -ZSFV (IIB:IIE,IJB:IJE) = RESHAPE(ZP_SFV(:), ISHAPE_2) -DO JLAYER=1,SIZE(PEMIS,3) - PEMIS (IIB:IIE,IJB:IJE,JLAYER) = RESHAPE(ZP_EMIS(:), ISHAPE_2) -END DO -PTSRAD (IIB:IIE,IJB:IJE) = RESHAPE(ZP_TSRAD(:), ISHAPE_2) -IF(LBLOWSNOW) THEN - DO JLAYER=1,NBLOWSNOW_2D - ZBLOWSNOW_2D(IIB:IIE,IJB:IJE,JLAYER) = RESHAPE(ZP_SFTS(:,NSV+JLAYER), ISHAPE_2) - END DO -END IF -! -IF (LDIAG_IN_RUN) THEN - XCURRENT_RN (IIB:IIE,IJB:IJE) = RESHAPE(ZP_RN(:), ISHAPE_2) - XCURRENT_H (IIB:IIE,IJB:IJE) = RESHAPE(ZP_H (:), ISHAPE_2) - XCURRENT_LE (IIB:IIE,IJB:IJE) = RESHAPE(ZP_LE(:), ISHAPE_2) - XCURRENT_LEI (IIB:IIE,IJB:IJE) = RESHAPE(ZP_LEI(:), ISHAPE_2) - XCURRENT_GFLUX (IIB:IIE,IJB:IJE) = RESHAPE(ZP_GFLUX(:), ISHAPE_2) - XCURRENT_T2M (IIB:IIE,IJB:IJE) = RESHAPE(ZP_T2M(:), ISHAPE_2) - XCURRENT_Q2M (IIB:IIE,IJB:IJE) = RESHAPE(ZP_Q2M(:), ISHAPE_2) - XCURRENT_HU2M (IIB:IIE,IJB:IJE) = RESHAPE(ZP_HU2M(:), ISHAPE_2) - XCURRENT_ZON10M (IIB:IIE,IJB:IJE) = RESHAPE(ZP_ZON10M(:), ISHAPE_2) - XCURRENT_MER10M (IIB:IIE,IJB:IJE) = RESHAPE(ZP_MER10M(:), ISHAPE_2) - XCURRENT_ZWS (IIB:IIE,IJB:IJE) = RESHAPE(ZP_ZWS(:), ISHAPE_2) -ENDIF -! -DO JLAYER=1,SIZE(PDIR_ALB,3) - PDIR_ALB(IIB:IIE,IJB:IJE,JLAYER) = RESHAPE(ZP_DIR_ALB(:,JLAYER), ISHAPE_2) - PSCA_ALB(IIB:IIE,IJB:IJE,JLAYER) = RESHAPE(ZP_SCA_ALB(:,JLAYER), ISHAPE_2) -END DO -! -DEALLOCATE(ZP_TSUN ) -DEALLOCATE(ZP_ZENITH ) -DEALLOCATE(ZP_AZIM ) -DEALLOCATE(ZP_ZREF ) -DEALLOCATE(ZP_ZS ) -DEALLOCATE(ZP_U ) -DEALLOCATE(ZP_V ) -DEALLOCATE(ZP_QA ) -DEALLOCATE(ZP_TA ) -DEALLOCATE(ZP_RHOA ) -DEALLOCATE(ZP_SV ) -DEALLOCATE(ZP_CO2 ) -DEALLOCATE(ZP_RAIN ) -DEALLOCATE(ZP_SNOW ) -DEALLOCATE(ZP_LW ) -DEALLOCATE(ZP_DIR_SW ) -DEALLOCATE(ZP_SCA_SW ) -DEALLOCATE(ZP_PS ) -DEALLOCATE(ZP_PA ) -DEALLOCATE(ZP_ZWS ) - -DEALLOCATE(ZP_SFTQ ) -DEALLOCATE(ZP_SFTH ) -DEALLOCATE(ZP_SFTS ) -DEALLOCATE(ZP_SFCO2 ) -DEALLOCATE(ZP_SFU ) -DEALLOCATE(ZP_SFV ) -DEALLOCATE(ZP_TSRAD ) -DEALLOCATE(ZP_DIR_ALB ) -DEALLOCATE(ZP_SCA_ALB ) -DEALLOCATE(ZP_EMIS ) -DEALLOCATE(ZP_RN ) -DEALLOCATE(ZP_H ) -DEALLOCATE(ZP_LE ) -DEALLOCATE(ZP_LEI ) -DEALLOCATE(ZP_GFLUX ) -DEALLOCATE(ZP_T2M ) -DEALLOCATE(ZP_Q2M ) -DEALLOCATE(ZP_HU2M ) -DEALLOCATE(ZP_ZON10M ) -DEALLOCATE(ZP_MER10M ) - -DEALLOCATE(ZP_PEW_A_COEF ) -DEALLOCATE(ZP_PEW_B_COEF ) -DEALLOCATE(ZP_PET_A_COEF ) -DEALLOCATE(ZP_PEQ_A_COEF ) -DEALLOCATE(ZP_PET_B_COEF ) -DEALLOCATE(ZP_PEQ_B_COEF ) -! -END SUBROUTINE UNSHAPE_SURF -!================================================================================== -! -END SUBROUTINE GROUND_PARAM_n diff --git a/src/mesonh/ext/ibm_affectv.f90 b/src/mesonh/ext/ibm_affectv.f90 deleted file mode 100644 index 74df9a13d..000000000 --- a/src/mesonh/ext/ibm_affectv.f90 +++ /dev/null @@ -1,402 +0,0 @@ -!MNH_LIC Copyright 2019-2021 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. -!----------------------------------------------------------------- -! -! ####################### -MODULE MODI_IBM_AFFECTV - ! ####################### - ! - INTERFACE - ! - SUBROUTINE IBM_AFFECTV(PVAR,PVAR2,PVAR3,HVAR,KIBM_LAYER,HIBM_MODE_INTE3,& - HIBM_FORC_BOUNR,PRADIUS,PPOWERS,& - HIBM_MODE_INT1N,HIBM_TYPE_BOUNN,HIBM_MODE_BOUNN,HIBM_FORC_BOUNN,PIBM_FORC_BOUNN,& - HIBM_MODE_INT1T,HIBM_TYPE_BOUNT,HIBM_MODE_BOUNT,HIBM_FORC_BOUNT,PIBM_FORC_BOUNT,& - HIBM_MODE_INT1C,HIBM_TYPE_BOUNC,HIBM_MODE_BOUNC,HIBM_FORC_BOUNC,PIBM_FORC_BOUNC,PXMU,PDIV) - ! - REAL, DIMENSION(:,:,:) ,INTENT(INOUT) :: PVAR - REAL, DIMENSION(:,:,:,:) ,INTENT(IN) :: PVAR2,PVAR3 - CHARACTER(LEN=1) ,INTENT(IN) :: HVAR - INTEGER ,INTENT(IN) :: KIBM_LAYER - REAL ,INTENT(IN) :: PRADIUS - REAL ,INTENT(IN) :: PPOWERS - CHARACTER(LEN=3) ,INTENT(IN) :: HIBM_FORC_BOUNR - CHARACTER(LEN=3) ,INTENT(IN) :: HIBM_MODE_INTE3 - CHARACTER(LEN=3) ,INTENT(IN) :: HIBM_MODE_INT1N - CHARACTER(LEN=3) ,INTENT(IN) :: HIBM_TYPE_BOUNN - CHARACTER(LEN=3) ,INTENT(IN) :: HIBM_MODE_BOUNN - CHARACTER(LEN=3) ,INTENT(IN) :: HIBM_FORC_BOUNN - REAL ,INTENT(IN) :: PIBM_FORC_BOUNN - CHARACTER(LEN=3) ,INTENT(IN) :: HIBM_MODE_INT1T - CHARACTER(LEN=3) ,INTENT(IN) :: HIBM_TYPE_BOUNT - CHARACTER(LEN=3) ,INTENT(IN) :: HIBM_MODE_BOUNT - CHARACTER(LEN=3) ,INTENT(IN) :: HIBM_FORC_BOUNT - REAL ,INTENT(IN) :: PIBM_FORC_BOUNT - CHARACTER(LEN=3) ,INTENT(IN) :: HIBM_MODE_INT1C - CHARACTER(LEN=3) ,INTENT(IN) :: HIBM_TYPE_BOUNC - CHARACTER(LEN=3) ,INTENT(IN) :: HIBM_MODE_BOUNC - CHARACTER(LEN=3) ,INTENT(IN) :: HIBM_FORC_BOUNC - REAL ,INTENT(IN) :: PIBM_FORC_BOUNC - REAL, DIMENSION(:,:,:) ,INTENT(IN) :: PXMU - REAL, DIMENSION(:,:,:) ,INTENT(IN) :: PDIV - ! - END SUBROUTINE IBM_AFFECTV - ! - END INTERFACE - ! -END MODULE MODI_IBM_AFFECTV -! -! ######################################################## -SUBROUTINE IBM_AFFECTV(PVAR,PVAR2,PVAR3,HVAR,KIBM_LAYER,HIBM_MODE_INTE3,& - HIBM_FORC_BOUNR,PRADIUS,PPOWERS,& - HIBM_MODE_INT1N,HIBM_TYPE_BOUNN,HIBM_MODE_BOUNN,HIBM_FORC_BOUNN,PIBM_FORC_BOUNN,& - HIBM_MODE_INT1T,HIBM_TYPE_BOUNT,HIBM_MODE_BOUNT,HIBM_FORC_BOUNT,PIBM_FORC_BOUNT,& - HIBM_MODE_INT1C,HIBM_TYPE_BOUNC,HIBM_MODE_BOUNC,HIBM_FORC_BOUNC,PIBM_FORC_BOUNC,PXMU,PDIV) - ! ######################################################## - ! - ! - !**** IBM_AFFECTV computes the variable PVAR on desired ghost points : - ! - the V type of the ghost/image - ! - the 3D interpolation mode (HIBM_MODE_INTE3) - ! - the 1D interpolation mode (HIBM_MODE_INTE1) - ! - the boundary condition (HIBM_TYPE_BOUND) - ! - the symmetry character (HIBM_MODE_BOUND) - ! - the forcing type (HIBM_FORC_BOUND) - ! - the forcing term (HIBM_FORC_BOUND) - ! Choice of forcing type is depending on - ! the normal, binormal, tangent vectors (N,C,T) - ! - ! - ! PURPOSE - ! ------- - !**** Ghosts (resp. Images) locations are stored in KIBM_STOR_GHOST (resp. KIBM_STOR_IMAGE). - ! Solutions are computed in regard of the symmetry character of the solution: - ! HIBM_MODE_BOUND = 'SYM' (Symmetrical) - ! HIBM_MODE_BOUND = 'ASY' (Anti-symmetrical) - ! The ghost value is depending on the variable value at the interface: - ! HIBM_TYPE_BOUND = "CST" (constant value) - ! HIBM_TYPE_BOUND = "LAW" (wall models) - ! HIBM_TYPE_BOUND = "LIN" (linear evolution, only IMAGE2 type) - ! HIBM_TYPE_BOUND = "LOG" (logarithmic evol, only IMAGE2 type) - ! Three 3D interpolations exists HIBM_MODE_INTE3 = "IDW" (Inverse Distance Weighting) - ! HIBM_MODE_INTE3 = "MDW" (Modified Distance Weighting) - ! HIBM_MODE_INTE3 = "LAG" (Trilinear Lagrange interp. ) - ! Three 1D interpolations exists HIBM_MODE_INTE1 = "CL0" (Lagrange Polynomials - 1 points - MIRROR) - ! HIBM_MODE_INTE1 = "CL1" (Lagrange Polynomials - 2 points - IMAGE1) - ! HIBM_MODE_INTE1 = "CL2" (Lagrange Polynomials - 3 points - IMAGE2) - ! METHOD - ! ------ - ! - loop on ghosts - ! - functions storage - ! - computations of the location of the corners cell containing MIRROR/IMAGE1/IMAGE2 - ! - 3D interpolation (IDW, MDW, CLI) to obtain the MIRROR/IMAGE1/IMAGE2 values - ! - computation of the value at the interface - ! - 1D interpolation (CLI1,CLI2,CLI3) to obtain the GHOSTS values - ! - Affectation - ! - ! EXTERNAL - ! -------- - ! SUBROUTINE ? - ! - ! IMPLICIT ARGUMENTS - ! ------------------ - ! MODD_? - ! - ! REFERENCE - ! --------- - ! - ! AUTHOR - ! ------ - ! Franck Auguste (CERFACS-AE) - ! - ! MODIFICATIONS - ! ------------- - ! Original 01/01/2019 - ! - !------------------------------------------------------------------------------ - ! - !**** 0. DECLARATIONS - ! --------------- - ! module - USE MODE_POS - USE MODE_ll - USE MODE_IO - USE MODD_ARGSLIST_ll, ONLY : LIST_ll - ! - ! declaration - USE MODD_IBM_PARAM_n - USE MODD_FIELD_n - USE MODD_PARAM_n, ONLY: CTURB - USE MODD_GRID_n, ONLY: XXHAT,XYHAT,XZZ - USE MODD_VAR_ll, ONLY: IP - USE MODD_LBC_n - USE MODD_REF_n, ONLY: XRHODJ,XRHODREF - ! - ! interface - USE MODI_IBM_VALUECORN - USE MODI_IBM_LOCATCORN - USE MODI_IBM_3DINT - USE MODI_IBM_1DINT - USE MODI_IBM_0DINT - USE MODI_IBM_VALUEMAT1 - USE MODI_IBM_VALUEMAT2 - USE MODI_SHUMAN - USE MODD_DYN_n - USE MODD_FIELD_n - USE MODD_CST - USE MODD_CTURB - USE MODD_RADIATIONS_n - ! - IMPLICIT NONE - ! - !------------------------------------------------------------------------------ - ! - ! 0.1 declarations of arguments - ! - REAL, DIMENSION(:,:,:) ,INTENT(INOUT) :: PVAR - REAL, DIMENSION(:,:,:,:) ,INTENT(IN) :: PVAR2,PVAR3 - CHARACTER(LEN=1) ,INTENT(IN) :: HVAR - INTEGER ,INTENT(IN) :: KIBM_LAYER - REAL ,INTENT(IN) :: PRADIUS - REAL ,INTENT(IN) :: PPOWERS - CHARACTER(LEN=3) ,INTENT(IN) :: HIBM_FORC_BOUNR - CHARACTER(LEN=3) ,INTENT(IN) :: HIBM_MODE_INTE3 - CHARACTER(LEN=3) ,INTENT(IN) :: HIBM_MODE_INT1N - CHARACTER(LEN=3) ,INTENT(IN) :: HIBM_TYPE_BOUNN - CHARACTER(LEN=3) ,INTENT(IN) :: HIBM_MODE_BOUNN - CHARACTER(LEN=3) ,INTENT(IN) :: HIBM_FORC_BOUNN - REAL ,INTENT(IN) :: PIBM_FORC_BOUNN - CHARACTER(LEN=3) ,INTENT(IN) :: HIBM_MODE_INT1T - CHARACTER(LEN=3) ,INTENT(IN) :: HIBM_TYPE_BOUNT - CHARACTER(LEN=3) ,INTENT(IN) :: HIBM_MODE_BOUNT - CHARACTER(LEN=3) ,INTENT(IN) :: HIBM_FORC_BOUNT - REAL ,INTENT(IN) :: PIBM_FORC_BOUNT - CHARACTER(LEN=3) ,INTENT(IN) :: HIBM_MODE_INT1C - CHARACTER(LEN=3) ,INTENT(IN) :: HIBM_TYPE_BOUNC - CHARACTER(LEN=3) ,INTENT(IN) :: HIBM_MODE_BOUNC - CHARACTER(LEN=3) ,INTENT(IN) :: HIBM_FORC_BOUNC - REAL ,INTENT(IN) :: PIBM_FORC_BOUNC - REAL, DIMENSION(:,:,:) ,INTENT(IN) :: PXMU - REAL, DIMENSION(:,:,:) ,INTENT(IN) :: PDIV - ! - !------------------------------------------------------------------------------ - ! - ! 0.2 declaration of local variables - ! - INTEGER :: JI,JJ,JK,JL,JM,JMM,JN,JNN,JH,JLL ! loop index - INTEGER, DIMENSION(:) , ALLOCATABLE :: I_INDEX_CORN ! reference corner index - INTEGER :: I_GHOST_NUMB ! ghost number per layer - REAL , DIMENSION(:,:), ALLOCATABLE :: Z_LOCAT_CORN,Z_LOCAT_IMAG ! corners coordinates - REAL , DIMENSION(:) , ALLOCATABLE :: Z_TESTS_CORN ! interface distance dependence - REAL , DIMENSION(:) , ALLOCATABLE :: Z_VALUE_CORN ! value variables at corners - REAL , DIMENSION(:,:), ALLOCATABLE :: Z_VALUE_IMAG,Z_VALUE_TEMP,Z_VALUE_ZLKE ! value at mirror/image1/image2 - REAL , DIMENSION(:) , ALLOCATABLE :: Z_LOCAT_BOUN,Z_LOCAT_GHOS,Z_TEMP_ZLKE ! location of bound and ghost - REAL :: Z_DELTA_IMAG,ZIBM_VISC,ZIBM_DIVK - CHARACTER(LEN=3),DIMENSION(:), ALLOCATABLE :: Y_TYPE_BOUND,Y_FORC_BOUND,Y_MODE_BOUND,Y_MODE_INTE1 - REAL , DIMENSION(:) , ALLOCATABLE :: Z_FORC_BOUND,Z_VALUE_GHOS - REAL , DIMENSION(:,:), ALLOCATABLE :: Z_VALUE_MAT1,Z_VALUE_MAT2 - REAL :: ZIBM_HALO - ! - !------------------------------------------------------------------------------ - ! - ! 0.3 Allocation - ! - ALLOCATE(I_INDEX_CORN(3)) - ALLOCATE(Z_LOCAT_CORN(8,3)) - ALLOCATE(Z_VALUE_CORN(8)) - ALLOCATE(Z_TESTS_CORN(8)) - ALLOCATE(Z_LOCAT_IMAG(3,3)) - ALLOCATE(Z_VALUE_IMAG(4,3)) - ALLOCATE(Z_VALUE_TEMP(4,3)) - ALLOCATE(Z_LOCAT_BOUN(3)) - ALLOCATE(Z_LOCAT_GHOS(3)) - ALLOCATE(Z_VALUE_GHOS(3)) - ALLOCATE(Y_TYPE_BOUND(3),Y_FORC_BOUND(3)) - ALLOCATE(Y_MODE_BOUND(3),Y_MODE_INTE1(3)) - ALLOCATE(Z_FORC_BOUND(3)) - ALLOCATE(Z_VALUE_MAT1(3,3)) - ALLOCATE(Z_VALUE_MAT2(3,3)) - ! - !------------------------------------------------------------------------------ - ! - !**** 1. PRELIMINARIES - ! ---------------- - I_INDEX_CORN(:) = 0 - Z_LOCAT_CORN(:,:) = 0. - Z_VALUE_CORN(:) = 0. - Z_TESTS_CORN(:) = 0. - Z_LOCAT_IMAG(:,:) = 0. - Z_VALUE_IMAG(:,:) = 0. - Z_VALUE_TEMP(:,:) = 0. - Z_LOCAT_GHOS(:) = 0. - Z_LOCAT_BOUN(:) = 0. - Z_VALUE_GHOS(:) = 0. - Z_VALUE_MAT1(:,:) = 0. - Z_VALUE_MAT2(:,:) = 0. - IF (HVAR=='U') JH = 1 - IF (HVAR=='V') JH = 2 - IF (HVAR=='W') JH = 3 - Y_TYPE_BOUND(1) = HIBM_TYPE_BOUNN - Y_TYPE_BOUND(2) = HIBM_TYPE_BOUNT - Y_TYPE_BOUND(3) = HIBM_TYPE_BOUNC - Y_FORC_BOUND(1) = HIBM_FORC_BOUNN - Y_FORC_BOUND(2) = HIBM_FORC_BOUNT - Y_FORC_BOUND(3) = HIBM_FORC_BOUNC - Y_MODE_BOUND(1) = HIBM_MODE_BOUNN - Y_MODE_BOUND(2) = HIBM_MODE_BOUNT - Y_MODE_BOUND(3) = HIBM_MODE_BOUNC - Y_MODE_INTE1(1) = HIBM_MODE_INT1N - Y_MODE_INTE1(2) = HIBM_MODE_INT1T - Y_MODE_INTE1(3) = HIBM_MODE_INT1C - Z_FORC_BOUND(1) = PIBM_FORC_BOUNN - Z_FORC_BOUND(2) = PIBM_FORC_BOUNT - Z_FORC_BOUND(3) = PIBM_FORC_BOUNC - ! - ALLOCATE(Z_VALUE_ZLKE(4,3)) - ALLOCATE(Z_TEMP_ZLKE(3)) - Z_VALUE_ZLKE(:,:) = 0. - Z_TEMP_ZLKE(:) = 0. - ! - DO JMM=1,KIBM_LAYER - ! - ! searching number of ghosts - JM = size(NIBM_GHOST_V,1) - JI = 0 - JJ = 0 - JK = 0 - DO WHILE ((JI==0.and.JJ==0.and.JK==0).and.JM>0) - JI = NIBM_GHOST_V(JM,JMM,JH,1) - JJ = NIBM_GHOST_V(JM,JMM,JH,2) - JK = NIBM_GHOST_V(JM,JMM,JH,3) - IF (JI==0.and.JJ==0.and.JK==0) JM = JM - 1 - ENDDO - I_GHOST_NUMB = JM - ! - ! Loop on each P Ghosts - IF (I_GHOST_NUMB<=0) GO TO 666 - DO JM = 1,I_GHOST_NUMB - ! - ! ghost index/ls - JI = NIBM_GHOST_V(JM,JMM,JH,1) - JJ = NIBM_GHOST_V(JM,JMM,JH,2) - JK = NIBM_GHOST_V(JM,JMM,JH,3) - IF (JI==0.or.JJ==0.or.JK==0) GO TO 777 - Z_LOCAT_GHOS(:) = XIBM_GHOST_V(JM,JMM,JH,:) - Z_LOCAT_BOUN(:) = 2.0*XIBM_IMAGE_V(JM,JMM,JH,1,:)-1.0*XIBM_IMAGE_V(JM,JMM,JH,2,:) - ZIBM_HALO = 1. - ! - DO JN = 1,3 - ! - Z_LOCAT_IMAG(JN,:)= XIBM_IMAGE_V(JM,JMM,JH ,JN,:) - Z_DELTA_IMAG = ((XXHAT(JI+1)-XXHAT(JI))*(XYHAT(JJ+1)-XYHAT(JJ)))**0.5 - ! - DO JLL=1,3 - I_INDEX_CORN(:) = NIBM_IMAGE_V(JM,JMM,JH,JLL,JN,:) - IF (I_INDEX_CORN(1)==0.AND.JN==2) ZIBM_HALO=0. - IF (I_INDEX_CORN(2)==0.AND.JN==2) ZIBM_HALO=0. - Z_LOCAT_CORN(:,:) = IBM_LOCATCORN(I_INDEX_CORN,JLL+1) - Z_TESTS_CORN(:) = XIBM_TESTI_V(JM,JMM,JH,JLL,JN,:) - Z_VALUE_CORN(:) = IBM_VALUECORN(PVAR2(:,:,:,JLL),I_INDEX_CORN) - Z_VALUE_IMAG(JN,JLL) = IBM_3DINT(JN,Z_VALUE_IMAG(:,JLL),Z_LOCAT_BOUN,Z_TESTS_CORN,& - Z_LOCAT_CORN,Z_VALUE_CORN,Z_LOCAT_IMAG(JN,:),& - HIBM_MODE_INTE3,PRADIUS,PPOWERS) - ENDDO - ! - ENDDO - ZIBM_VISC = PXMU(JI,JJ,JK) - ZIBM_DIVK = PDIV(JI,JJ,JK) - ! - ! projection step - Z_VALUE_MAT1(:,:) = IBM_VALUEMAT1(Z_LOCAT_IMAG(1,:),Z_LOCAT_BOUN,Z_VALUE_IMAG,HIBM_FORC_BOUNR) - DO JN=1,3 - Z_VALUE_TEMP(JN,:)= Z_VALUE_MAT1(:,1)*Z_VALUE_IMAG(JN,1) +& - Z_VALUE_MAT1(:,2)*Z_VALUE_IMAG(JN,2) +& - Z_VALUE_MAT1(:,3)*Z_VALUE_IMAG(JN,3) - ENDDO - ! - ! === BOUND computation === - ! - JN=4 - DO JLL=1,3 - Z_VALUE_TEMP(JN,JLL) = IBM_0DINT(Z_DELTA_IMAG,Z_VALUE_TEMP(:,JLL),Y_TYPE_BOUND(JLL),Y_FORC_BOUND(JLL), & - Z_FORC_BOUND(JLL),ZIBM_VISC,ZIBM_DIVK) - ENDDO - ! - ! inverse projection step - Z_VALUE_MAT2(:,:) = IBM_VALUEMAT2(Z_VALUE_MAT1) - Z_VALUE_IMAG(JN,:)= Z_VALUE_MAT2(:,1)*Z_VALUE_TEMP(JN,1) +& - Z_VALUE_MAT2(:,2)*Z_VALUE_TEMP(JN,2) +& - Z_VALUE_MAT2(:,3)*Z_VALUE_TEMP(JN,3) - ! - ! === GHOST computation === - ! - ! functions storage - Z_LOCAT_IMAG(1,3) = ((XIBM_GHOST_V(JM,JMM,JH,1)-Z_LOCAT_BOUN(1))**2.+& - (XIBM_GHOST_V(JM,JMM,JH,2)-Z_LOCAT_BOUN(2))**2.+& - (XIBM_GHOST_V(JM,JMM,JH,3)-Z_LOCAT_BOUN(3))**2.)**0.5 - IF (Z_LOCAT_IMAG(1,3)>Z_DELTA_IMAG.AND.ZIBM_HALO>0.5) THEN - Z_LOCAT_IMAG(1,1) = ((XIBM_IMAGE_V(JM,JMM,JH,1,1)-Z_LOCAT_BOUN(1))**2.+& - (XIBM_IMAGE_V(JM,JMM,JH,1,2)-Z_LOCAT_BOUN(2))**2.+& - (XIBM_IMAGE_V(JM,JMM,JH,1,3)-Z_LOCAT_BOUN(3))**2.)**0.5 - Z_LOCAT_IMAG(1,2) = ((XIBM_IMAGE_V(JM,JMM,JH,2,1)-Z_LOCAT_BOUN(1))**2.+& - (XIBM_IMAGE_V(JM,JMM,JH,2,2)-Z_LOCAT_BOUN(2))**2.+& - (XIBM_IMAGE_V(JM,JMM,JH,2,3)-Z_LOCAT_BOUN(3))**2.)**0.5 - ELSE - Z_LOCAT_IMAG(1,1) = ((XIBM_IMAGE_V(JM,JMM,JH,3,1)-Z_LOCAT_BOUN(1))**2.+& - (XIBM_IMAGE_V(JM,JMM,JH,3,2)-Z_LOCAT_BOUN(2))**2.+& - (XIBM_IMAGE_V(JM,JMM,JH,3,3)-Z_LOCAT_BOUN(3))**2.)**0.5 - Z_LOCAT_IMAG(1,2) = ((XIBM_IMAGE_V(JM,JMM,JH,1,1)-Z_LOCAT_BOUN(1))**2.+& - (XIBM_IMAGE_V(JM,JMM,JH,1,2)-Z_LOCAT_BOUN(2))**2.+& - (XIBM_IMAGE_V(JM,JMM,JH,1,3)-Z_LOCAT_BOUN(3))**2.)**0.5 - Z_VALUE_TEMP(2,:) = Z_VALUE_TEMP(1,:) - Z_VALUE_TEMP(1,:) = Z_VALUE_TEMP(3,:) - ENDIF - ! - DO JLL=1,3 - Z_VALUE_GHOS(JLL) = IBM_1DINT(Z_LOCAT_IMAG(1,:),Z_VALUE_TEMP(:,JLL),Y_MODE_INTE1(JLL)) - IF (Y_MODE_BOUND(JLL)=='SYM') Z_VALUE_GHOS(JLL) = +Z_VALUE_GHOS(JLL) - IF (Y_MODE_BOUND(JLL)=='ASY') Z_VALUE_GHOS(JLL) = -Z_VALUE_GHOS(JLL) + 2.*Z_VALUE_TEMP(4,JLL) - IF (Y_MODE_BOUND(JLL)=='CST') Z_VALUE_GHOS(JLL) = Z_VALUE_TEMP(4,JLL) - ENDDO - ! - PVAR(JI,JJ,JK) = Z_VALUE_MAT2(JH,1)*Z_VALUE_GHOS(1) +& - Z_VALUE_MAT2(JH,2)*Z_VALUE_GHOS(2) +& - Z_VALUE_MAT2(JH,3)*Z_VALUE_GHOS(3) - ! - IF ((JH==3).AND.(JK==2)) THEN - PVAR(JI,JJ,JK) = 0. - ENDIF - ! -777 CONTINUE - ! - ENDDO - ENDDO - ! -666 CONTINUE - ! - !**** X. DEALLOCATIONS/CLOSES - ! ----------------------- - ! - DEALLOCATE(I_INDEX_CORN) - DEALLOCATE(Z_LOCAT_CORN) - DEALLOCATE(Z_VALUE_CORN) - DEALLOCATE(Z_LOCAT_IMAG) - DEALLOCATE(Z_VALUE_IMAG) - DEALLOCATE(Z_VALUE_TEMP) - DEALLOCATE(Z_LOCAT_BOUN) - DEALLOCATE(Z_LOCAT_GHOS) - DEALLOCATE(Z_VALUE_GHOS) - DEALLOCATE(Z_TESTS_CORN) - DEALLOCATE(Y_TYPE_BOUND,Y_FORC_BOUND) - DEALLOCATE(Y_MODE_BOUND,Y_MODE_INTE1) - DEALLOCATE(Z_FORC_BOUND) - DEALLOCATE(Z_VALUE_MAT1) - DEALLOCATE(Z_VALUE_MAT2) - DEALLOCATE(Z_VALUE_ZLKE) - DEALLOCATE(Z_TEMP_ZLKE) - ! - RETURN - ! -END SUBROUTINE IBM_AFFECTV diff --git a/src/mesonh/ext/ice_adjust_bis.f90 b/src/mesonh/ext/ice_adjust_bis.f90 deleted file mode 100644 index 44ab0c680..000000000 --- a/src/mesonh/ext/ice_adjust_bis.f90 +++ /dev/null @@ -1,160 +0,0 @@ -!MNH_LIC Copyright 2012-2019 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_ICE_ADJUST_BIS -! ############################### -! -INTERFACE -! -! ################################################################# - SUBROUTINE ICE_ADJUST_BIS(PP,PTH,PR) -! ################################################################# -! -!! -!* 1.1 Declaration of Arguments -!! - -REAL, DIMENSION(:,:,:), INTENT(IN) :: PP ! Pressure -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTH ! thetal to transform into th -REAL, DIMENSION(:,:,:,:),INTENT(INOUT) :: PR ! Total mixing ratios to transform into rv,rc and ri -! -END SUBROUTINE ICE_ADJUST_BIS - -END INTERFACE -! -END MODULE MODI_ICE_ADJUST_BIS -! ######spl - SUBROUTINE ICE_ADJUST_BIS(PP,PTH,PR) -! ################################################################# -! -! -!!**** *ICE_ADJUST_BIS* - computes an adjusted state of thermodynamical variables -!! -!! PURPOSE -!! ------- -!! -!!** METHOD -!! ------ -!! -!! -!! EXTERNAL -!! -------- -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! -!! REFERENCE -!! --------- -!! -!! AUTHOR -!! ------ -!! Valery Masson & C. Lac * Meteo-France * -!! -!! MODIFICATIONS -!! ------------- -!! Original 09/2012 -!! M.Moge 08/2015 UPDATE_HALO_ll on PTH, ZRV, ZRC, ZRI -! P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine -!! -!! -------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_CST, ONLY : XCPD, XRD, XP00, CST -USE MODD_NEB, ONLY : NEB -! -USE MODI_COMPUTE_FUNCTION_THERMO -USE MODI_THLRT_FROM_THRVRCRI -! -USE MODE_ll -! -IMPLICIT NONE -! -! -!* 0.1 declarations of arguments -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PP ! Pressure -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTH ! thetal to transform into th -REAL, DIMENSION(:,:,:,:),INTENT(INOUT) :: PR ! Total mixing ratios to transform into rv,rc and ri -! -!------------------------------------------------------------------------------- -! -! 0.2 declaration of local variables -REAL, DIMENSION(SIZE(PTH,1),SIZE(PTH,2),SIZE(PTH,3)) :: ZTHL, ZRW, ZRV, ZRC, & - ZRI, ZWORK -REAL, DIMENSION(SIZE(PTH,1),SIZE(PTH,2),SIZE(PTH,3)) :: ZFRAC_ICE, ZRSATW, ZRSATI -REAL, DIMENSION(SIZE(PTH,1),SIZE(PTH,2),SIZE(PTH,3)) :: ZT, ZEXN, ZLVOCPEXN,ZLSOCPEXN -REAL, DIMENSION(SIZE(PTH,1),SIZE(PTH,2),SIZE(PTH,3), 16) :: ZBUF -INTEGER :: IRR -CHARACTER(LEN=1) :: YFRAC_ICE -! -INTEGER :: IINFO_ll -TYPE(LIST_ll), POINTER :: TZFIELDS_ll=>NULL() ! list of fields to exchange -!---------------------------------------------------------------------------- -! -!* 1 Initialisation -! -------------- -! -IRR = SIZE(PR,4) -! -ZRV(:,:,:)=0. -IF (IRR>=1) & -ZRV(:,:,:)=PR(:,:,:,1) -ZRC(:,:,:)=0. -IF (IRR>=2) & -ZRC(:,:,:)=PR(:,:,:,2) -ZRI(:,:,:)=0. -IF (IRR>=4) & -ZRI(:,:,:)=PR(:,:,:,4) -! -YFRAC_ICE='T' -ZFRAC_ICE(:,:,:) = 0. -! -!* 2 Computation -! ----------- -! -ZEXN(:,:,:)=(PP(:,:,:)/XP00)**(XRD/XCPD) -! -CALL COMPUTE_FUNCTION_THERMO( IRR, & - PTH, PR, ZEXN, PP, & - ZT,ZLVOCPEXN,ZLSOCPEXN ) - -! -CALL THLRT_FROM_THRVRCRI( IRR, PTH, PR, ZLVOCPEXN, ZLSOCPEXN,& - ZTHL, ZRW ) -! -CALL TH_R_FROM_THL_RT(CST, NEB, SIZE(ZFRAC_ICE), YFRAC_ICE,ZFRAC_ICE(:,:,:),PP(:,:,:), & - ZTHL(:,:,:), ZRW(:,:,:), PTH(:,:,:), & - ZRV(:,:,:), ZRC(:,:,:), ZRI(:,:,:), & - ZRSATW(:,:,:), ZRSATI(:,:,:),OOCEAN=.FALSE.,& - PBUF=ZBUF) -CALL ADD3DFIELD_ll( TZFIELDS_ll, PTH, 'ICE_ADJUST_BIS::PTH') -IF (IRR>=1) THEN - CALL ADD3DFIELD_ll( TZFIELDS_ll, ZRV, 'ICE_ADJUST_BIS::ZRV' ) -ENDIF -IF (IRR>=2) THEN - CALL ADD3DFIELD_ll( TZFIELDS_ll, ZRC, 'ICE_ADJUST_BIS::ZRC' ) -ENDIF -IF (IRR>=4) THEN - CALL ADD3DFIELD_ll( TZFIELDS_ll, ZRI, 'ICE_ADJUST_BIS::ZRI' ) -ENDIF -CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll) -CALL CLEANLIST_ll(TZFIELDS_ll) -! - -IF (IRR>=1) & -PR(:,:,:,1) = ZRV(:,:,:) -IF (IRR>=2) & -PR(:,:,:,2) = ZRC(:,:,:) -IF (IRR>=4) & -PR(:,:,:,4) = ZRI(:,:,:) -! -CONTAINS -INCLUDE "th_r_from_thl_rt.func.h" -INCLUDE "compute_frac_ice.func.h" -END SUBROUTINE ICE_ADJUST_BIS diff --git a/src/mesonh/ext/ini_lesn.f90 b/src/mesonh/ext/ini_lesn.f90 deleted file mode 100644 index 378e43f53..000000000 --- a/src/mesonh/ext/ini_lesn.f90 +++ /dev/null @@ -1,2007 +0,0 @@ -!MNH_LIC Copyright 2000-2022 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. -!----------------------------------------------------------------- -! #################### - SUBROUTINE INI_LES_n -! #################### -! -! -!!**** *INI_LES_n* initializes the LES variables for model _n -!! -!! PURPOSE -!! ------- -!! -!! EXTERNAL -!! -------- -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! AUTHOR -!! ------ -!! V. Masson -!! -!! MODIFICATIONS -!! ------------- -!! Original 07/02/00 -!! Modification 01/02/01 (D.Gazen) add module MODD_NSV for NSV variable -!! 06/11/02 (V. Masson) add LES budgets -!! 10/2016 (C.Lac) Add droplet deposition -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -!! 02/2019 (C. Lac) Add rain fraction as a LES diagnostic -! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg -! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management -! P. Wautelet 12/08/2020: bugfix: use NUNDEF instead of XUNDEF for integer variables -! P. Wautelet 04/01/2021: bugfix: nles_k was used instead of nspectra_k for a loop index -! P. Wautelet 30/03/2021: budgets: LES cartesian subdomain limits are defined in the physical domain -! P. Wautelet 09/07/2021: bugfix: altitude levels are on the correct grid position (mass point) -! P. Wautelet 22/03/2022: LES averaging periods are more reliable (compute with integers instead of reals) -! -------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODE_ll -USE MODE_GATHER_ll -USE MODE_MSG -USE MODE_MODELN_HANDLER -! -USE MODD_LES -USE MODD_LES_BUDGET -USE MODD_LES_n -! -USE MODD_CONF -USE MODD_PARAMETERS -USE MODD_NESTING -! -USE MODD_LUNIT_n -USE MODD_GRID_n -USE MODD_DYN_n -USE MODD_TIME_n -USE MODD_DIM_n -USE MODD_TURB_n -USE MODD_CONF_n -USE MODD_LBC_n -USE MODD_PARAM_n -USE MODD_DYN -USE MODD_NSV, ONLY: NSV ! update_nsv is done in INI_MODEL -USE MODD_CONDSAMP, ONLY : LCONDSAMP -! -USE MODI_INI_LES_CART_MASKn -USE MODI_COEF_VER_INTERP_LIN -USE MODI_SHUMAN -! -IMPLICIT NONE -! -! -!* 0.1 declarations of arguments -! -! -! -! -! 0.2 declaration of local variables -! -! -! -INTEGER :: ILUOUT, IRESP -INTEGER :: JI,JJ, JK ! loop counters -INTEGER :: IIU_ll ! total domain I size -INTEGER :: IJU_ll ! total domain J size -INTEGER :: IIMAX_ll ! total physical domain I size -INTEGER :: IJMAX_ll ! total physical domain J size -! -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZZ_LES ! LES altitudes 3D array -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZZ_SPEC! " for spectra -! -! -REAL, DIMENSION(:), ALLOCATABLE :: ZXHAT_ll ! father model coordinates -REAL, DIMENSION(:), ALLOCATABLE :: ZYHAT_ll ! -INTEGER :: IMI -! -!------------------------------------------------------------------------------- -IMI = GET_CURRENT_MODEL_INDEX() -! -CALL GET_GLOBALDIMS_ll(IIMAX_ll,IJMAX_ll) -IIU_ll = IIMAX_ll+2*JPHEXT -IJU_ll = IJMAX_ll+2*JPHEXT -! -ILUOUT = TLUOUT%NLU -! -!------------------------------------------------------------------------------- -! -!* 1. Does LES computations are used? -! ------------------------------ -! -LLES = LLES_MEAN .OR. LLES_RESOLVED .OR. LLES_SUBGRID .OR. LLES_UPDRAFT & - .OR. LLES_DOWNDRAFT .OR. LLES_SPECTRA -! -! -IF (.NOT. LLES) RETURN -! -IF (L1D) THEN - LLES_RESOLVED = .FALSE. - LLES_UPDRAFT = .FALSE. - LLES_DOWNDRAFT = .FALSE. - LLES_SPECTRA = .FALSE. - LLES_NEB_MASK = .FALSE. - LLES_CORE_MASK = .FALSE. - LLES_CS_MASK = .FALSE. - LLES_MY_MASK = .FALSE. -END IF -! -IF (LLES_RESOLVED ) LLES_MEAN = .TRUE. -IF (LLES_SUBGRID ) LLES_MEAN = .TRUE. -IF (LLES_UPDRAFT ) LLES_MEAN = .TRUE. -IF (LLES_DOWNDRAFT) LLES_MEAN = .TRUE. -IF (LLES_SPECTRA ) LLES_MEAN = .TRUE. -! -IF (CTURB=='NONE') THEN - WRITE(ILUOUT,FMT=*) 'LES diagnostics cannot be done without subgrid turbulence.' - WRITE(ILUOUT,FMT=*) 'You have chosen CTURB="NONE". You must choose a turbulence scheme.' - call Print_msg( NVERB_FATAL, 'GEN', 'WRITE_LB_n', 'LES diagnostics cannot be done without subgrid turbulence' ) -END IF -!------------------------------------------------------------------------------- -! -!* 2. Number and definition of masks -! ------------------------------ -! -!------------------------------------------------------------------------------- -! -!* 2.1 Cartesian (sub-)domain -! ---------------------- -! -!* updates number of masks -! ----------------------- -! -NLES_MASKS = 1 -! -!* For model 1, set default values of cartesian mask, and defines cartesian mask -! ----------------------------------------------------------------------------- -! -IF (IMI==1) THEN - IF ( LLES_CART_MASK ) THEN - !Compute LES diagnostics inside a cartesian mask - - !Set default values to physical domain boundaries - IF ( NLES_IINF == NUNDEF ) NLES_IINF = 1 - IF ( NLES_JINF == NUNDEF ) NLES_JINF = 1 - IF ( NLES_ISUP == NUNDEF ) NLES_ISUP = NIMAX_ll - IF ( NLES_JSUP == NUNDEF ) NLES_JSUP = NJMAX_ll - - !Check that selected indices are in physical domain - IF ( NLES_IINF < 1 ) CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_LES_n', 'NLES_IINF too small (<1)' ) - IF ( NLES_IINF > NIMAX_ll ) CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_LES_n', 'NLES_IINF too large (>NIMAX)' ) - IF ( NLES_ISUP < 1 ) CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_LES_n', 'NLES_ISUP too small (<1)' ) - IF ( NLES_ISUP > NIMAX_ll ) CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_LES_n', 'NLES_ISUP too large (>NIMAX)' ) - IF ( NLES_ISUP < NLES_IINF ) CALL Print_msg( NVERB_ERROR, 'BUD', 'INI_LES_n', 'NLES_ISUP < NLES_IINF' ) - - IF ( NLES_JINF < 1 ) CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_LES_n', 'NLES_JINF too small (<1)' ) - IF ( NLES_JINF > NJMAX_ll ) CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_LES_n', 'NLES_JINF too large (>NJMAX)' ) - IF ( NLES_JSUP < 1 ) CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_LES_n', 'NLES_JSUP too small (<1)' ) - IF ( NLES_JSUP > NJMAX_ll ) CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_LES_n', 'NLES_JSUP too large (>NJMAX)' ) - IF ( NLES_JSUP < NLES_JINF ) CALL Print_msg( NVERB_ERROR, 'BUD', 'INI_LES_n', 'NLES_JSUP < NLES_JINF' ) - - !Set LLES_CART_MASK to false if whole domain is selected - IF ( NLES_IINF == 1 .AND. NLES_JINF == 1 & - .AND. NLES_ISUP == NIMAX_ll .AND. NLES_ISUP == NJMAX_ll ) THEN - LLES_CART_MASK = .FALSE. - END IF - ELSE - !Compute LES diagnostics on whole physical domain - NLES_IINF = 1 - NLES_JINF = 1 - NLES_ISUP = NIMAX_ll - NLES_JSUP = NJMAX_ll - END IF - ! - NLESn_IINF(1)= NLES_IINF - NLESn_ISUP(1)= NLES_ISUP - NLESn_JINF(1)= NLES_JINF - NLESn_JSUP(1)= NLES_JSUP -! -!* For other models, fits cartesian mask on model 1 mask -! ----------------------------------------------------- -! -ELSE - ALLOCATE(ZXHAT_ll(IIU_ll)) - ALLOCATE(ZYHAT_ll(IJU_ll)) - CALL GATHERALL_FIELD_ll('XX',XXHAT,ZXHAT_ll,IRESP) - CALL GATHERALL_FIELD_ll('YY',XYHAT,ZYHAT_ll,IRESP) -! - CALL GOTO_MODEL(NDAD(IMI)) - CALL INI_LES_CART_MASK_n(IMI,ZXHAT_ll,ZYHAT_ll, & - NLESn_IINF(IMI),NLESn_JINF(IMI), & - NLESn_ISUP(IMI),NLESn_JSUP(IMI) ) - CALL GOTO_MODEL(IMI) -! - DEALLOCATE(ZXHAT_ll) - DEALLOCATE(ZYHAT_ll) -END IF -! -!* in non cyclic boundary conditions, limitiation of masks due to u and v grids -! ---------------------------------------------------------------------------- -! -IF ( (.NOT. L1D) .AND. CLBCX(1)/='CYCL') THEN - NLESn_IINF(IMI) = MAX(NLESn_IINF(IMI),2) -END IF -IF ( (.NOT. L1D) .AND. (.NOT. L2D) .AND. CLBCY(1)/='CYCL') THEN - NLESn_JINF(IMI) = MAX(NLESn_JINF(IMI),2) -END IF -! -!* X boundary conditions for 2points correlations computations -! ----------------------------------------------------------- -! -IF ( CLBCX(1) == 'CYCL' .AND. NLESn_IINF(IMI) == 1 .AND. NLESn_ISUP(IMI) == NIMAX_ll ) THEN - CLES_LBCX(:,IMI) = 'CYCL' -ELSE - CLES_LBCX(:,IMI) = 'OPEN' -END IF -! -!* Y boundary conditions for 2points correlations computations -! ----------------------------------------------------------- -! -IF ( CLBCY(1) == 'CYCL' .AND. NLESn_JINF(IMI) == 1 .AND. NLESn_JSUP(IMI) == NJMAX_ll ) THEN - CLES_LBCY(:,IMI) = 'CYCL' -ELSE - CLES_LBCY(:,IMI) = 'OPEN' -END IF -! -!------------------------------------------------------------------------------- -! -!* 2.2 Nebulosity mask -! --------------- -! -IF (.NOT. LUSERC .AND. .NOT. LUSERI) LLES_NEB_MASK = .FALSE. -! -IF (LLES_NEB_MASK) NLES_MASKS = NLES_MASKS + 2 -! -!------------------------------------------------------------------------------- -! -!* 2.3 Cloud core mask -! --------------- -! -IF (.NOT. LUSERC .AND. .NOT. LUSERI) LLES_CORE_MASK = .FALSE. -! -IF (LLES_CORE_MASK) NLES_MASKS = NLES_MASKS + 2 -! -!------------------------------------------------------------------------------- -! -!* 2.4 Conditional sampling mask -! ------------------------- -! -IF (.NOT. LUSERC .AND. .NOT. LCONDSAMP) LLES_CS_MASK = .FALSE. -! -IF (LLES_CS_MASK) NLES_MASKS = NLES_MASKS + 3 -! -!------------------------------------------------------------------------------- -! -!* 2.5 User mask -! --------- -! -IF (LLES_MY_MASK) NLES_MASKS = NLES_MASKS + NLES_MASKS_USER -! -!------------------------------------------------------------------------------- -! -!* 3. Number of temporal LES samplings -! -------------------------------- -! -!* 3.1 Default value -! ------------- -! -IF (XLES_TEMP_SAMPLING == XUNDEF) THEN - IF (CTURBDIM=='3DIM') THEN - XLES_TEMP_SAMPLING = 60. - ELSE - XLES_TEMP_SAMPLING = 300. - END IF -END IF -! -!* 3.2 Number of time steps between two calls -! -------------------------------------- -! -NLES_DTCOUNT = MAX( NINT( XLES_TEMP_SAMPLING / XTSTEP ) , 1) - -! -!* 3.3 Redefinition of the LES sampling time coherent with model time-step -! ------------------------------------------------------------------- -! -! Note that this modifies XLES_TEMP_SAMPLING only for father model (model number 1) -! For nested models (for which integration time step is an integer part of father model) -! the following operation does not change XLES_TEMP_SAMPLING. This way, LEs -! sampling is done at the same instants for all models. -! -XLES_TEMP_SAMPLING = XTSTEP * NLES_DTCOUNT -! -! -!* 3.4 number of temporal calls to LES routines -! ---------------------------------------- -! -! -NLES_TIMES = ( NINT( ( XSEGLEN - DYN_MODEL(1)%XTSTEP ) / XTSTEP ) ) / NLES_DTCOUNT -! -!* 3.5 current LES time counter -! ------------------------ -! -NLES_TCOUNT = 0 -! -!* 3.6 dates array for diachro -! ---------------------- -! -allocate( tles_dates( nles_times ) ) -allocate( xles_times( nles_times ) ) -! -!* 3.7 No data -! ------- -! -IF (NLES_TIMES==0) THEN - LLES=.FALSE. - RETURN -END IF -! -!* 3.8 Averaging -! --------- -IF ( XLES_TEMP_MEAN_END == XUNDEF & - .OR. XLES_TEMP_MEAN_START == XUNDEF & - .OR. XLES_TEMP_MEAN_STEP == XUNDEF ) THEN - !No LES temporal averaging - NLES_MEAN_TIMES = 0 - NLES_MEAN_STEP = NNEGUNDEF - NLES_MEAN_START = NNEGUNDEF - NLES_MEAN_END = NNEGUNDEF -ELSE - !LES temporal averaging is enabled - !Ensure that XLES_TEMP_MEAN_END is not after segment end - XLES_TEMP_MEAN_END = MIN( XLES_TEMP_MEAN_END, XSEGLEN - DYN_MODEL(1)%XTSTEP ) - - NLES_MEAN_START = NINT( XLES_TEMP_MEAN_START / XTSTEP ) - - IF ( MODULO( NLES_MEAN_START, NLES_DTCOUNT ) /= 0 ) THEN - CMNHMSG(1) = 'XLES_TEMP_MEAN_START is not a multiple of XLES_TEMP_SAMPLING' - CMNHMSG(2) = 'LES averaging periods could be wrong' - CALL Print_msg( NVERB_WARNING, 'IO', 'INI_LES_n' ) - END IF - - NLES_MEAN_END = NINT( XLES_TEMP_MEAN_END / XTSTEP ) - - NLES_MEAN_STEP = NINT( XLES_TEMP_MEAN_STEP / XTSTEP ) - - IF ( NLES_MEAN_STEP < NLES_DTCOUNT ) & - CALL Print_msg( NVERB_ERROR, 'IO', 'INI_LES_n', 'XLES_TEMP_MEAN_STEP < XLES_TEMP_SAMPLING not allowed' ) - - IF ( MODULO( NLES_MEAN_STEP, NLES_DTCOUNT ) /= 0 ) THEN - CMNHMSG(1) = 'XLES_TEMP_MEAN_STEP is not a multiple of XLES_TEMP_SAMPLING' - CMNHMSG(2) = 'LES averaging periods could be wrong' - CALL Print_msg( NVERB_WARNING, 'IO', 'INI_LES_n' ) - END IF - - NLES_MEAN_TIMES = ( NLES_MEAN_END - NLES_MEAN_START ) / NLES_MEAN_STEP - !Add 1 averaging period if the last one is incomplete (for example: start=0., end=10., step=3.) - IF ( MODULO( NLES_MEAN_END - NLES_MEAN_START, NLES_MEAN_STEP ) > 0 ) NLES_MEAN_TIMES = NLES_MEAN_TIMES + 1 -END IF -!------------------------------------------------------------------------------- -! -!* 4. Number of vertical levels for local diagnostics -! ----------------------------------------------- -! -NLES_K = 0 -! -!* 4.1 Case of altitude levels (lowest priority) -! ----------------------- -! -IF (ANY(XLES_ALTITUDES(:)/=XUNDEF)) THEN - NLES_K = COUNT (XLES_ALTITUDES(:)/=XUNDEF) - CLES_LEVEL_TYPE='Z' - ! - ALLOCATE(XCOEFLIN_LES(SIZE(XZZ,1),SIZE(XZZ,2),NLES_K)) - ALLOCATE(NKLIN_LES (SIZE(XZZ,1),SIZE(XZZ,2),NLES_K)) - ! - ALLOCATE(ZZ_LES (SIZE(XZZ,1),SIZE(XZZ,2),NLES_K)) - DO JK=1,NLES_K - DO JJ=1,SIZE(XZZ,2) - DO JI=1,SIZE(XZZ,1) - ZZ_LES(JI,JJ,JK) = XLES_ALTITUDES(JK) - END DO - END DO - END DO - CALL COEF_VER_INTERP_LIN(MZF(XZZ),ZZ_LES,NKLIN_LES,XCOEFLIN_LES) - ! - DEALLOCATE(ZZ_LES) -END IF -! -! -!* 4.2 Case of model levels (highest priority) -! -------------------- -! -IF (ANY(NLES_LEVELS(:)/=NUNDEF)) THEN - DO JK = 1, SIZE( NLES_LEVELS ) - IF ( NLES_LEVELS(JK) /= NUNDEF ) THEN - IF ( NLES_LEVELS(JK) < 1 ) CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_LES_n', 'NLES_LEVELS too small (<1)' ) - IF ( NLES_LEVELS(JK) > NKMAX ) CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_LES_n', 'NLES_LEVELS too large (>NKMAX)' ) - END IF - END DO - - NLES_K = COUNT (NLES_LEVELS(:)/=NUNDEF) - CLES_LEVEL_TYPE='K' -ELSE - IF (NLES_K==0) THEN - NLES_K = MIN(SIZE(NLES_LEVELS),NKMAX) - CLES_LEVEL_TYPE='K' - DO JK=1,NLES_K - NLES_LEVELS(JK) = JK - END DO - END IF -END IF -! -!------------------------------------------------------------------------------- -! -!* 5. Number of vertical levels for non-local diagnostics -! --------------------------------------------------- -! -NSPECTRA_K = 0 -CSPECTRA_LEVEL_TYPE='N' -! -! -!* 5.1 Case of altitude levels (medium priority) -! ----------------------- -! -IF (ANY(XSPECTRA_ALTITUDES(:)/=XUNDEF)) THEN - NSPECTRA_K = COUNT (XSPECTRA_ALTITUDES(:)/=XUNDEF) - CSPECTRA_LEVEL_TYPE='Z' - ! - ALLOCATE(XCOEFLIN_SPEC(SIZE(XZZ,1),SIZE(XZZ,2),NSPECTRA_K)) - ALLOCATE(NKLIN_SPEC (SIZE(XZZ,1),SIZE(XZZ,2),NSPECTRA_K)) - ! - ALLOCATE(ZZ_SPEC (SIZE(XZZ,1),SIZE(XZZ,2),NSPECTRA_K)) - DO JK=1,NSPECTRA_K - DO JJ=1,SIZE(XZZ,2) - DO JI=1,SIZE(XZZ,1) - ZZ_SPEC(JI,JJ,JK) = XSPECTRA_ALTITUDES(JK) - END DO - END DO - END DO - CALL COEF_VER_INTERP_LIN(XZZ,ZZ_SPEC,NKLIN_SPEC,XCOEFLIN_SPEC) - ! - DEALLOCATE(ZZ_SPEC) -END IF -! -! -!* 5.2 Case of model levels (highest priority) -! -------------------- -! -IF (ANY(NSPECTRA_LEVELS(:)/=NUNDEF)) THEN - DO JK = 1, SIZE( NSPECTRA_LEVELS ) - IF ( NSPECTRA_LEVELS(JK) /= NUNDEF ) THEN - IF ( NSPECTRA_LEVELS(JK) < 1 ) CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_LES_n', 'NSPECTRA_LEVELS too small (<1)' ) - IF ( NSPECTRA_LEVELS(JK) > NKMAX ) CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_LES_n', 'NSPECTRA_LEVELS too large (>NKMAX)' ) - END IF - END DO - - NSPECTRA_K = COUNT (NSPECTRA_LEVELS(:)/=NUNDEF) - CSPECTRA_LEVEL_TYPE='K' -END IF -! -!------------------------------------------------------------------------------- -! -!* 6. Number of horizontal wavelengths for non-local diagnostics -! ---------------------------------------------------------- -! -NSPECTRA_NI = NLESn_ISUP(IMI) - NLESn_IINF(IMI) + 1 -NSPECTRA_NJ = NLESn_JSUP(IMI) - NLESn_JINF(IMI) + 1 -! -! -!------------------------------------------------------------------------------- -! -!* 7. Allocations of temporal series of local diagnostics -! --------------------------------------------------- -! -!* 7.0 Altitude levels -! --------------- -! -ALLOCATE(XLES_Z (NLES_K)) -! -!* 7.1 Averaging control variables -! --------------------------- -! -ALLOCATE(NLES_AVG_PTS_ll (NLES_K,NLES_TIMES,NLES_MASKS)) -ALLOCATE(NLES_UND_PTS_ll (NLES_K,NLES_TIMES,NLES_MASKS)) -! -NLES_AVG_PTS_ll = NUNDEF -NLES_UND_PTS_ll = NUNDEF -! -! -!* 7.2 Horizontally mean variables -! --------------------------- -! -ALLOCATE(XLES_MEAN_U (NLES_K,NLES_TIMES,NLES_MASKS)) -ALLOCATE(XLES_MEAN_V (NLES_K,NLES_TIMES,NLES_MASKS)) -ALLOCATE(XLES_MEAN_W (NLES_K,NLES_TIMES,NLES_MASKS)) -ALLOCATE(XLES_MEAN_P (NLES_K,NLES_TIMES,NLES_MASKS)) -ALLOCATE(XLES_MEAN_DP (NLES_K,NLES_TIMES,NLES_MASKS)) -ALLOCATE(XLES_MEAN_TP (NLES_K,NLES_TIMES,NLES_MASKS)) -ALLOCATE(XLES_MEAN_TR (NLES_K,NLES_TIMES,NLES_MASKS)) -ALLOCATE(XLES_MEAN_DISS(NLES_K,NLES_TIMES,NLES_MASKS)) -ALLOCATE(XLES_MEAN_LM (NLES_K,NLES_TIMES,NLES_MASKS)) -ALLOCATE(XLES_MEAN_RHO(NLES_K,NLES_TIMES,NLES_MASKS)) -ALLOCATE(XLES_MEAN_Th (NLES_K,NLES_TIMES,NLES_MASKS)) -ALLOCATE(XLES_MEAN_Mf (NLES_K,NLES_TIMES,NLES_MASKS)) -IF (LUSERC ) THEN - ALLOCATE(XLES_MEAN_Thl(NLES_K,NLES_TIMES,NLES_MASKS)) - ALLOCATE(XLES_MEAN_Rt (NLES_K,NLES_TIMES,NLES_MASKS)) - ALLOCATE(XLES_MEAN_KHt(NLES_K,NLES_TIMES,NLES_MASKS)) - ALLOCATE(XLES_MEAN_KHr(NLES_K,NLES_TIMES,NLES_MASKS)) -ELSE - ALLOCATE(XLES_MEAN_Thl(0,0,0)) - ALLOCATE(XLES_MEAN_Rt (0,0,0)) - ALLOCATE(XLES_MEAN_KHt(0,0,0)) - ALLOCATE(XLES_MEAN_KHr(0,0,0)) -END IF -IF (LUSERV) THEN - ALLOCATE(XLES_MEAN_Thv(NLES_K,NLES_TIMES,NLES_MASKS)) -ELSE - ALLOCATE(XLES_MEAN_Thv(0,0,0)) -END IF -! -IF (LUSERV ) THEN - ALLOCATE(XLES_MEAN_Rv (NLES_K,NLES_TIMES,NLES_MASKS)) -ELSE - ALLOCATE(XLES_MEAN_Rv (0,0,0)) -END IF -IF (LUSERV ) THEN - ALLOCATE(XLES_MEAN_Rehu (NLES_K,NLES_TIMES,NLES_MASKS)) -ELSE - ALLOCATE(XLES_MEAN_Rehu (0,0,0)) -ENDIF -IF (LUSERV ) THEN - ALLOCATE(XLES_MEAN_Qs (NLES_K,NLES_TIMES,NLES_MASKS)) -ELSE - ALLOCATE(XLES_MEAN_Qs (0,0,0)) -END IF -IF (LUSERC ) THEN - ALLOCATE(XLES_MEAN_Rc (NLES_K,NLES_TIMES,NLES_MASKS)) -ELSE - ALLOCATE(XLES_MEAN_Rc (0,0,0)) -END IF -IF (LUSERC ) THEN - ALLOCATE(XLES_MEAN_Cf (NLES_K,NLES_TIMES,NLES_MASKS)) - ALLOCATE(XLES_MEAN_INDCf (NLES_K,NLES_TIMES,NLES_MASKS)) - ALLOCATE(XLES_MEAN_INDCf2 (NLES_K,NLES_TIMES,NLES_MASKS)) -ELSE - ALLOCATE(XLES_MEAN_Cf (0,0,0)) - ALLOCATE(XLES_MEAN_INDCf (0,0,0)) - ALLOCATE(XLES_MEAN_INDCf2(0,0,0)) -END IF -IF (LUSERR ) THEN - ALLOCATE(XLES_MEAN_Rr (NLES_K,NLES_TIMES,NLES_MASKS)) - ALLOCATE(XLES_MEAN_RF (NLES_K,NLES_TIMES,NLES_MASKS)) -ELSE - ALLOCATE(XLES_MEAN_Rr (0,0,0)) - ALLOCATE(XLES_MEAN_RF (0,0,0)) -END IF -IF (LUSERI ) THEN - ALLOCATE(XLES_MEAN_Ri (NLES_K,NLES_TIMES,NLES_MASKS)) - ALLOCATE(XLES_MEAN_If (NLES_K,NLES_TIMES,NLES_MASKS)) -ELSE - ALLOCATE(XLES_MEAN_Ri (0,0,0)) - ALLOCATE(XLES_MEAN_If (0,0,0)) -END IF -IF (LUSERS ) THEN - ALLOCATE(XLES_MEAN_Rs (NLES_K,NLES_TIMES,NLES_MASKS)) -ELSE - ALLOCATE(XLES_MEAN_Rs (0,0,0)) -END IF -IF (LUSERG ) THEN - ALLOCATE(XLES_MEAN_Rg (NLES_K,NLES_TIMES,NLES_MASKS)) -ELSE - ALLOCATE(XLES_MEAN_Rg (0,0,0)) -END IF -IF (LUSERH ) THEN - ALLOCATE(XLES_MEAN_Rh (NLES_K,NLES_TIMES,NLES_MASKS)) -ELSE - ALLOCATE(XLES_MEAN_Rh (0,0,0)) -END IF -IF (NSV>0 ) THEN - ALLOCATE(XLES_MEAN_Sv (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) -ELSE - ALLOCATE(XLES_MEAN_Sv (0,0,0,0)) -END IF -ALLOCATE(XLES_MEAN_WIND (NLES_K,NLES_TIMES,NLES_MASKS)) -ALLOCATE(XLES_MEAN_dUdz (NLES_K,NLES_TIMES,NLES_MASKS)) -ALLOCATE(XLES_MEAN_dVdz (NLES_K,NLES_TIMES,NLES_MASKS)) -ALLOCATE(XLES_MEAN_dWdz (NLES_K,NLES_TIMES,NLES_MASKS)) -ALLOCATE(XLES_MEAN_dThldz(NLES_K,NLES_TIMES,NLES_MASKS)) -IF (LUSERV) THEN - ALLOCATE(XLES_MEAN_dRtdz(NLES_K,NLES_TIMES,NLES_MASKS)) -ELSE - ALLOCATE(XLES_MEAN_dRtdz(0,0,0)) -END IF -IF (NSV>0) THEN - ALLOCATE(XLES_MEAN_dSvdz(NLES_K,NLES_TIMES,NLES_MASKS,NSV)) -ELSE - ALLOCATE(XLES_MEAN_dSvdz(0,0,0,0)) -END IF -! -IF (LLES_PDF) THEN -!pdf distributions and jpdf distributions - CALL LES_ALLOCATE('XLES_PDF_TH ',(/NLES_K,NLES_TIMES,NLES_MASKS,NPDF/)) - CALL LES_ALLOCATE('XLES_PDF_W ',(/NLES_K,NLES_TIMES,NLES_MASKS,NPDF/)) - CALL LES_ALLOCATE('XLES_PDF_THV ',(/NLES_K,NLES_TIMES,NLES_MASKS,NPDF/)) - IF (LUSERV) THEN - CALL LES_ALLOCATE('XLES_PDF_RV ',(/NLES_K,NLES_TIMES,NLES_MASKS,NPDF/)) - ELSE - CALL LES_ALLOCATE('XLES_PDF_RV ',(/0,0,0,0/)) - END IF - IF (LUSERC) THEN - CALL LES_ALLOCATE('XLES_PDF_RC ',(/NLES_K,NLES_TIMES,NLES_MASKS,NPDF/)) - CALL LES_ALLOCATE('XLES_PDF_RT ',(/NLES_K,NLES_TIMES,NLES_MASKS,NPDF/)) - CALL LES_ALLOCATE('XLES_PDF_THL',(/NLES_K,NLES_TIMES,NLES_MASKS,NPDF/)) - ELSE - CALL LES_ALLOCATE('XLES_PDF_RC ',(/0,0,0,0/)) - CALL LES_ALLOCATE('XLES_PDF_RT ',(/0,0,0,0/)) - CALL LES_ALLOCATE('XLES_PDF_THL',(/0,0,0,0/)) - ENDIF - IF (LUSERR) THEN - CALL LES_ALLOCATE('XLES_PDF_RR ',(/NLES_K,NLES_TIMES,NLES_MASKS,NPDF/)) - ELSE - CALL LES_ALLOCATE('XLES_PDF_RR ',(/0,0,0,0/)) - ENDIF - IF (LUSERI) THEN - CALL LES_ALLOCATE('XLES_PDF_RI ',(/NLES_K,NLES_TIMES,NLES_MASKS,NPDF/)) - ELSE - CALL LES_ALLOCATE('XLES_PDF_RI ',(/0,0,0,0/)) - END IF - IF (LUSERS) THEN - CALL LES_ALLOCATE('XLES_PDF_RS ',(/NLES_K,NLES_TIMES,NLES_MASKS,NPDF/)) - ELSE - CALL LES_ALLOCATE('XLES_PDF_RS ',(/0,0,0,0/)) - END IF - IF (LUSERG) THEN - CALL LES_ALLOCATE('XLES_PDF_RG ',(/NLES_K,NLES_TIMES,NLES_MASKS,NPDF/)) - ELSE - CALL LES_ALLOCATE('XLES_PDF_RG ',(/0,0,0,0/)) - END IF -ENDIF -! -XLES_MEAN_U = XUNDEF -XLES_MEAN_V = XUNDEF -XLES_MEAN_W = XUNDEF -XLES_MEAN_P = XUNDEF -XLES_MEAN_DP = XUNDEF -XLES_MEAN_TP = XUNDEF -XLES_MEAN_TR = XUNDEF -XLES_MEAN_DISS= XUNDEF -XLES_MEAN_LM = XUNDEF -XLES_MEAN_RHO= XUNDEF -XLES_MEAN_Th = XUNDEF -XLES_MEAN_Mf = XUNDEF -IF (LUSERC ) XLES_MEAN_Thl= XUNDEF -IF (LUSERV ) XLES_MEAN_Thv= XUNDEF -IF (LUSERV ) XLES_MEAN_Rv = XUNDEF -IF (LUSERV ) XLES_MEAN_Rehu = XUNDEF -IF (LUSERV ) XLES_MEAN_Qs = XUNDEF -IF (LUSERC ) XLES_MEAN_KHr = XUNDEF -IF (LUSERC ) XLES_MEAN_KHt = XUNDEF -IF (LUSERC ) XLES_MEAN_Rt = XUNDEF -IF (LUSERC ) XLES_MEAN_Rc = XUNDEF -IF (LUSERC ) XLES_MEAN_Cf = XUNDEF -IF (LUSERC ) XLES_MEAN_RF = XUNDEF -IF (LUSERC ) XLES_MEAN_INDCf = XUNDEF -IF (LUSERC ) XLES_MEAN_INDCf2 = XUNDEF -IF (LUSERR ) XLES_MEAN_Rr = XUNDEF -IF (LUSERI ) XLES_MEAN_Ri = XUNDEF -IF (LUSERI ) XLES_MEAN_If = XUNDEF -IF (LUSERS ) XLES_MEAN_Rs = XUNDEF -IF (LUSERG ) XLES_MEAN_Rg = XUNDEF -IF (LUSERH ) XLES_MEAN_Rh = XUNDEF -IF (NSV>0 ) XLES_MEAN_Sv = XUNDEF -XLES_MEAN_WIND = XUNDEF -XLES_MEAN_WIND = XUNDEF -XLES_MEAN_dUdz = XUNDEF -XLES_MEAN_dVdz = XUNDEF -XLES_MEAN_dWdz = XUNDEF -XLES_MEAN_dThldz= XUNDEF -IF (LUSERV) XLES_MEAN_dRtdz = XUNDEF -IF (NSV>0) XLES_MEAN_dSvdz = XUNDEF -! -IF (LLES_PDF) THEN - XLES_PDF_TH = XUNDEF - XLES_PDF_W = XUNDEF - XLES_PDF_THV = XUNDEF - IF (LUSERV) THEN - XLES_PDF_RV = XUNDEF - END IF - IF (LUSERC) THEN - XLES_PDF_RC = XUNDEF - XLES_PDF_RT = XUNDEF - XLES_PDF_THL = XUNDEF - END IF - IF (LUSERR) THEN - XLES_PDF_RR = XUNDEF - END IF - IF (LUSERI) THEN - XLES_PDF_RI = XUNDEF - END IF - IF (LUSERS) THEN - XLES_PDF_RS = XUNDEF - END IF - IF (LUSERG) THEN - XLES_PDF_RG = XUNDEF - END IF -END IF -! -! -! -!* 7.3 Resolved quantities -! ------------------- -! -ALLOCATE(XLES_RESOLVED_U2 (NLES_K,NLES_TIMES,NLES_MASKS)) ! <u'2> -ALLOCATE(XLES_RESOLVED_V2 (NLES_K,NLES_TIMES,NLES_MASKS)) ! <v'2> -ALLOCATE(XLES_RESOLVED_W2 (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'2> -ALLOCATE(XLES_RESOLVED_P2 (NLES_K,NLES_TIMES,NLES_MASKS)) ! <p'2> -ALLOCATE(XLES_RESOLVED_Th2 (NLES_K,NLES_TIMES,NLES_MASKS)) ! <Th'2> -IF (LUSERV) THEN - ALLOCATE(XLES_RESOLVED_ThThv (NLES_K,NLES_TIMES,NLES_MASKS)) ! <Th'Thv'> -ELSE - ALLOCATE(XLES_RESOLVED_ThThv (0,0,0)) -END IF -IF (LUSERC) THEN - ALLOCATE(XLES_RESOLVED_Thl2 (NLES_K,NLES_TIMES,NLES_MASKS)) ! <Thl'2> - ALLOCATE(XLES_RESOLVED_ThlThv(NLES_K,NLES_TIMES,NLES_MASKS)) ! <Thl'Thv'> -ELSE - ALLOCATE(XLES_RESOLVED_Thl2 (0,0,0)) - ALLOCATE(XLES_RESOLVED_ThlThv(0,0,0)) -END IF -ALLOCATE(XLES_RESOLVED_Ke (NLES_K,NLES_TIMES,NLES_MASKS)) ! 0.5 <u'2+v'2+w'2> -ALLOCATE(XLES_RESOLVED_UV (NLES_K,NLES_TIMES,NLES_MASKS)) ! <u'v'> -ALLOCATE(XLES_RESOLVED_WU (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'u'> -ALLOCATE(XLES_RESOLVED_WV (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'v'> -ALLOCATE(XLES_RESOLVED_UP (NLES_K,NLES_TIMES,NLES_MASKS)) ! <u'p'> -ALLOCATE(XLES_RESOLVED_VP (NLES_K,NLES_TIMES,NLES_MASKS)) ! <v'p'> -ALLOCATE(XLES_RESOLVED_WP (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'p'> -ALLOCATE(XLES_RESOLVED_UTh (NLES_K,NLES_TIMES,NLES_MASKS)) ! <u'Th'> -ALLOCATE(XLES_RESOLVED_VTh (NLES_K,NLES_TIMES,NLES_MASKS)) ! <v'Th'> -ALLOCATE(XLES_RESOLVED_WTh (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'Th'> -IF (LUSERC) THEN - ALLOCATE(XLES_RESOLVED_UThl (NLES_K,NLES_TIMES,NLES_MASKS)) ! <u'Thl'> - ALLOCATE(XLES_RESOLVED_VThl (NLES_K,NLES_TIMES,NLES_MASKS)) ! <v'Thl'> - ALLOCATE(XLES_RESOLVED_WThl (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'Thl'> -ELSE - ALLOCATE(XLES_RESOLVED_UThl(0,0,0)) - ALLOCATE(XLES_RESOLVED_VThl(0,0,0)) - ALLOCATE(XLES_RESOLVED_WThl(0,0,0)) -END IF -IF (LUSERV) THEN - ALLOCATE(XLES_RESOLVED_UThv (NLES_K,NLES_TIMES,NLES_MASKS)) ! <u'Thv'> - ALLOCATE(XLES_RESOLVED_VThv (NLES_K,NLES_TIMES,NLES_MASKS)) ! <v'Thv'> - ALLOCATE(XLES_RESOLVED_WThv (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'Thv'> -ELSE - ALLOCATE(XLES_RESOLVED_UThv(0,0,0)) - ALLOCATE(XLES_RESOLVED_VThv(0,0,0)) - ALLOCATE(XLES_RESOLVED_WThv(0,0,0)) -END IF -ALLOCATE(XLES_RESOLVED_U3 (NLES_K,NLES_TIMES,NLES_MASKS)) ! <u'3> -ALLOCATE(XLES_RESOLVED_V3 (NLES_K,NLES_TIMES,NLES_MASKS)) ! <v'3> -ALLOCATE(XLES_RESOLVED_W3 (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'3> -ALLOCATE(XLES_RESOLVED_U4 (NLES_K,NLES_TIMES,NLES_MASKS)) ! <u'4> -ALLOCATE(XLES_RESOLVED_V4 (NLES_K,NLES_TIMES,NLES_MASKS)) ! <v'4> -ALLOCATE(XLES_RESOLVED_W4 (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'4> -ALLOCATE(XLES_RESOLVED_ThlPz (NLES_K,NLES_TIMES,NLES_MASKS)) ! <Thv'dp'/dz> -ALLOCATE(XLES_RESOLVED_WThl2 (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'Thl'2> -ALLOCATE(XLES_RESOLVED_W2Thl (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'2Thl'> -ALLOCATE(XLES_RESOLVED_MASSFX(NLES_K,NLES_TIMES,NLES_MASKS)) ! <upward mass flux> -ALLOCATE(XLES_RESOLVED_UKe (NLES_K,NLES_TIMES,NLES_MASKS)) ! <u'(u'2+v'2+w'2)> -ALLOCATE(XLES_RESOLVED_VKe (NLES_K,NLES_TIMES,NLES_MASKS)) ! <v'(u'2+v'2+w'2)> -ALLOCATE(XLES_RESOLVED_WKe (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'(u'2+v'2+w'2)> - -IF (LUSERV ) THEN - ALLOCATE(XLES_RESOLVED_Rv2 (NLES_K,NLES_TIMES,NLES_MASKS)) ! <Rv'2> - ALLOCATE(XLES_RESOLVED_ThRv (NLES_K,NLES_TIMES,NLES_MASKS)) ! <Th'Rv'> - ALLOCATE(XLES_RESOLVED_ThvRv (NLES_K,NLES_TIMES,NLES_MASKS)) ! <Thv'Rv'> - ALLOCATE(XLES_RESOLVED_URv (NLES_K,NLES_TIMES,NLES_MASKS)) ! <u'Rv'> - ALLOCATE(XLES_RESOLVED_VRv (NLES_K,NLES_TIMES,NLES_MASKS)) ! <v'Rv'> - ALLOCATE(XLES_RESOLVED_WRv (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'Rv'> - ALLOCATE(XLES_RESOLVED_WRv2 (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'Rv'2> - ALLOCATE(XLES_RESOLVED_W2Rv (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'2Rv'> - ALLOCATE(XLES_RESOLVED_W2Rt (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'2Rt'> - ALLOCATE(XLES_RESOLVED_WRt2 (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'Rt2'> - ALLOCATE(XLES_RESOLVED_RvPz (NLES_K,NLES_TIMES,NLES_MASKS)) ! <Rv'dp'/dz> - ALLOCATE(XLES_RESOLVED_WThlRv(NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'Thl'Rv'> - ALLOCATE(XLES_RESOLVED_WThlRt(NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'Thl'Rt'> -ELSE - ALLOCATE(XLES_RESOLVED_Rv2 (0,0,0)) - ALLOCATE(XLES_RESOLVED_ThRv (0,0,0)) - ALLOCATE(XLES_RESOLVED_ThvRv (0,0,0)) - ALLOCATE(XLES_RESOLVED_URv (0,0,0)) - ALLOCATE(XLES_RESOLVED_VRv (0,0,0)) - ALLOCATE(XLES_RESOLVED_WRv (0,0,0)) - ALLOCATE(XLES_RESOLVED_WRv2 (0,0,0)) - ALLOCATE(XLES_RESOLVED_W2Rv (0,0,0)) - ALLOCATE(XLES_RESOLVED_W2Rt (0,0,0)) - ALLOCATE(XLES_RESOLVED_WRt2 (0,0,0)) - ALLOCATE(XLES_RESOLVED_RvPz (0,0,0)) - ALLOCATE(XLES_RESOLVED_WThlRv(0,0,0)) - ALLOCATE(XLES_RESOLVED_WThlRt(0,0,0)) -END IF -IF (LUSERC ) THEN - ALLOCATE(XLES_RESOLVED_ThlRv (NLES_K,NLES_TIMES,NLES_MASKS)) ! <Thl'Rv'> - ! - ALLOCATE(XLES_RESOLVED_Rc2 (NLES_K,NLES_TIMES,NLES_MASKS)) ! <Rc'2> - ALLOCATE(XLES_RESOLVED_ThRc (NLES_K,NLES_TIMES,NLES_MASKS)) ! <Th'Rc'> - ALLOCATE(XLES_RESOLVED_ThlRc (NLES_K,NLES_TIMES,NLES_MASKS)) ! <Thl'Rc'> - ALLOCATE(XLES_RESOLVED_ThvRc (NLES_K,NLES_TIMES,NLES_MASKS)) ! <Thv'Rc'> - ALLOCATE(XLES_RESOLVED_URc (NLES_K,NLES_TIMES,NLES_MASKS)) ! <u'Rc'> - ALLOCATE(XLES_RESOLVED_VRc (NLES_K,NLES_TIMES,NLES_MASKS)) ! <v'Rc'> - ALLOCATE(XLES_RESOLVED_WRc (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'Rc'> - ALLOCATE(XLES_RESOLVED_WRc2 (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'Rc'2> - ALLOCATE(XLES_RESOLVED_W2Rc (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'2Rc'> - ALLOCATE(XLES_RESOLVED_RcPz (NLES_K,NLES_TIMES,NLES_MASKS)) ! <Rc'dp'/dz> - ALLOCATE(XLES_RESOLVED_WThlRc(NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'Thl'Rc'> - ALLOCATE(XLES_RESOLVED_WRvRc (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'Rv'Rc'> - ALLOCATE(XLES_RESOLVED_WRt (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'Rt'> - ALLOCATE(XLES_RESOLVED_Rt2 (NLES_K,NLES_TIMES,NLES_MASKS)) ! <Rt'2> - ALLOCATE(XLES_RESOLVED_RtPz (NLES_K,NLES_TIMES,NLES_MASKS)) ! <Rv'dp'/dz> -ELSE - ALLOCATE(XLES_RESOLVED_ThlRv (0,0,0)) - ! - ALLOCATE(XLES_RESOLVED_Rc2 (0,0,0)) - ALLOCATE(XLES_RESOLVED_ThRc (0,0,0)) - ALLOCATE(XLES_RESOLVED_ThlRc (0,0,0)) - ALLOCATE(XLES_RESOLVED_ThvRc (0,0,0)) - ALLOCATE(XLES_RESOLVED_URc (0,0,0)) - ALLOCATE(XLES_RESOLVED_VRc (0,0,0)) - ALLOCATE(XLES_RESOLVED_WRc (0,0,0)) - ALLOCATE(XLES_RESOLVED_WRc2 (0,0,0)) - ALLOCATE(XLES_RESOLVED_W2Rc (0,0,0)) - ALLOCATE(XLES_RESOLVED_RcPz (0,0,0)) - ALLOCATE(XLES_RESOLVED_WThlRc(0,0,0)) - ALLOCATE(XLES_RESOLVED_WRvRc (0,0,0)) - ALLOCATE(XLES_RESOLVED_WRt (0,0,0)) - ALLOCATE(XLES_RESOLVED_Rt2 (0,0,0)) - ALLOCATE(XLES_RESOLVED_RtPz (0,0,0)) -END IF -IF (LUSERI ) THEN - ALLOCATE(XLES_RESOLVED_Ri2 (NLES_K,NLES_TIMES,NLES_MASKS)) ! <Ri'2> - ALLOCATE(XLES_RESOLVED_ThRi (NLES_K,NLES_TIMES,NLES_MASKS)) ! <Th'Ri'> - ALLOCATE(XLES_RESOLVED_ThlRi (NLES_K,NLES_TIMES,NLES_MASKS)) ! <Thl'Ri'> - ALLOCATE(XLES_RESOLVED_ThvRi (NLES_K,NLES_TIMES,NLES_MASKS)) ! <Thv'Ri'> - ALLOCATE(XLES_RESOLVED_URi (NLES_K,NLES_TIMES,NLES_MASKS)) ! <u'Ri'> - ALLOCATE(XLES_RESOLVED_VRi (NLES_K,NLES_TIMES,NLES_MASKS)) ! <v'Ri'> - ALLOCATE(XLES_RESOLVED_WRi (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'Ri'> - ALLOCATE(XLES_RESOLVED_WRi2 (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'Ri'2> - ALLOCATE(XLES_RESOLVED_W2Ri (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'2Ri'> - ALLOCATE(XLES_RESOLVED_RiPz (NLES_K,NLES_TIMES,NLES_MASKS)) ! <Ri'dp'/dz> - ALLOCATE(XLES_RESOLVED_WThlRi(NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'Thl'Ri'> - ALLOCATE(XLES_RESOLVED_WRvRi (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'Rv'Ri'> -ELSE - ALLOCATE(XLES_RESOLVED_Ri2 (0,0,0)) - ALLOCATE(XLES_RESOLVED_ThRi (0,0,0)) - ALLOCATE(XLES_RESOLVED_ThlRi (0,0,0)) - ALLOCATE(XLES_RESOLVED_ThvRi (0,0,0)) - ALLOCATE(XLES_RESOLVED_URi (0,0,0)) - ALLOCATE(XLES_RESOLVED_VRi (0,0,0)) - ALLOCATE(XLES_RESOLVED_WRi (0,0,0)) - ALLOCATE(XLES_RESOLVED_WRi2 (0,0,0)) - ALLOCATE(XLES_RESOLVED_W2Ri (0,0,0)) - ALLOCATE(XLES_RESOLVED_RiPz (0,0,0)) - ALLOCATE(XLES_RESOLVED_WThlRi(0,0,0)) - ALLOCATE(XLES_RESOLVED_WRvRi (0,0,0)) -END IF -! -IF (LUSERR) THEN - ALLOCATE(XLES_RESOLVED_WRr (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'Rr'> - ALLOCATE(XLES_INPRR3D (NLES_K,NLES_TIMES,NLES_MASKS)) !precip flux - ALLOCATE(XLES_MAX_INPRR3D (NLES_K,NLES_TIMES,NLES_MASKS)) !precip flux - ALLOCATE(XLES_EVAP3D (NLES_K,NLES_TIMES,NLES_MASKS)) ! evap -ELSE - ALLOCATE(XLES_RESOLVED_WRr (0,0,0)) - ALLOCATE(XLES_INPRR3D (0,0,0)) - ALLOCATE(XLES_MAX_INPRR3D (0,0,0)) - ALLOCATE(XLES_EVAP3D (0,0,0)) -END IF -IF (NSV>0 ) THEN - ALLOCATE(XLES_RESOLVED_Sv2 (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <Sv'2> - ALLOCATE(XLES_RESOLVED_ThSv (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <Th'Sv> - ALLOCATE(XLES_RESOLVED_USv (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <u'Sv'> - ALLOCATE(XLES_RESOLVED_VSv (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <v'Sv'> - ALLOCATE(XLES_RESOLVED_WSv (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <w'Sv'> - ALLOCATE(XLES_RESOLVED_WSv2 (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <w'Sv'2> - ALLOCATE(XLES_RESOLVED_W2Sv (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <w'2Sv'> - ALLOCATE(XLES_RESOLVED_SvPz (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <Sv'dp'/dz> - ALLOCATE(XLES_RESOLVED_WThlSv(NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <w'Thl'Sv'> - IF (LUSERV) THEN - ALLOCATE(XLES_RESOLVED_ThvSv (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <Thv'Sv> - ALLOCATE(XLES_RESOLVED_WRvSv (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <w'Rv'Sv'> - ELSE - ALLOCATE(XLES_RESOLVED_ThvSv (0,0,0,0)) - ALLOCATE(XLES_RESOLVED_WRvSv (0,0,0,0)) - END IF - IF (LUSERC) THEN - ALLOCATE(XLES_RESOLVED_ThlSv (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <Thl'Sv> - ELSE - ALLOCATE(XLES_RESOLVED_ThlSv (0,0,0,0)) - END IF -ELSE - ALLOCATE(XLES_RESOLVED_Sv2 (0,0,0,0)) - ALLOCATE(XLES_RESOLVED_ThSv (0,0,0,0)) - ALLOCATE(XLES_RESOLVED_USv (0,0,0,0)) - ALLOCATE(XLES_RESOLVED_VSv (0,0,0,0)) - ALLOCATE(XLES_RESOLVED_WSv (0,0,0,0)) - ALLOCATE(XLES_RESOLVED_WSv2 (0,0,0,0)) - ALLOCATE(XLES_RESOLVED_W2Sv (0,0,0,0)) - ALLOCATE(XLES_RESOLVED_SvPz (0,0,0,0)) - ALLOCATE(XLES_RESOLVED_ThvSv (0,0,0,0)) - ALLOCATE(XLES_RESOLVED_ThlSv (0,0,0,0)) - ALLOCATE(XLES_RESOLVED_WThlSv(0,0,0,0)) - ALLOCATE(XLES_RESOLVED_WRvSv (0,0,0,0)) -END IF -! -! -XLES_RESOLVED_U2 = XUNDEF -XLES_RESOLVED_V2 = XUNDEF -XLES_RESOLVED_W2 = XUNDEF -XLES_RESOLVED_P2 = XUNDEF -XLES_RESOLVED_Th2 = XUNDEF -IF( LUSERC) THEN - XLES_RESOLVED_Thl2= XUNDEF - XLES_RESOLVED_ThlThv= XUNDEF -END IF -IF (LUSERV) THEN - XLES_RESOLVED_ThThv = XUNDEF -END IF -XLES_RESOLVED_Ke = XUNDEF -XLES_RESOLVED_UV = XUNDEF -XLES_RESOLVED_WU = XUNDEF -XLES_RESOLVED_WV = XUNDEF -XLES_RESOLVED_UP = XUNDEF -XLES_RESOLVED_VP = XUNDEF -XLES_RESOLVED_WP = XUNDEF -XLES_RESOLVED_UTh = XUNDEF -XLES_RESOLVED_VTh = XUNDEF -XLES_RESOLVED_WTh = XUNDEF -IF (LUSERC) THEN - XLES_RESOLVED_UThl= XUNDEF - XLES_RESOLVED_VThl= XUNDEF - XLES_RESOLVED_WThl= XUNDEF -END IF -IF (LUSERV) THEN - XLES_RESOLVED_UThv= XUNDEF - XLES_RESOLVED_VThv= XUNDEF - XLES_RESOLVED_WThv= XUNDEF -END IF -XLES_RESOLVED_U3 = XUNDEF -XLES_RESOLVED_V3 = XUNDEF -XLES_RESOLVED_W3 = XUNDEF -XLES_RESOLVED_U4 = XUNDEF -XLES_RESOLVED_V4 = XUNDEF -XLES_RESOLVED_W4 = XUNDEF -XLES_RESOLVED_WThl2 = XUNDEF -XLES_RESOLVED_W2Thl = XUNDEF -XLES_RESOLVED_ThlPz = XUNDEF -! -XLES_RESOLVED_MASSFX = XUNDEF -XLES_RESOLVED_UKe = XUNDEF -XLES_RESOLVED_VKe = XUNDEF -XLES_RESOLVED_WKe = XUNDEF -IF (LUSERV ) THEN - XLES_RESOLVED_Rv2 = XUNDEF - XLES_RESOLVED_ThRv = XUNDEF - IF (LUSERC) XLES_RESOLVED_ThlRv= XUNDEF - XLES_RESOLVED_ThvRv= XUNDEF - XLES_RESOLVED_URv = XUNDEF - XLES_RESOLVED_VRv = XUNDEF - XLES_RESOLVED_WRv = XUNDEF - XLES_RESOLVED_WRv2 = XUNDEF - XLES_RESOLVED_W2Rv = XUNDEF - XLES_RESOLVED_WRt2 = XUNDEF - XLES_RESOLVED_W2Rt = XUNDEF - XLES_RESOLVED_WThlRv= XUNDEF - XLES_RESOLVED_WThlRt= XUNDEF - XLES_RESOLVED_RvPz = XUNDEF -END IF -IF (LUSERC ) THEN - XLES_RESOLVED_Rc2 = XUNDEF - XLES_RESOLVED_ThRc = XUNDEF - XLES_RESOLVED_ThlRc= XUNDEF - XLES_RESOLVED_ThvRc= XUNDEF - XLES_RESOLVED_URc = XUNDEF - XLES_RESOLVED_VRc = XUNDEF - XLES_RESOLVED_WRc = XUNDEF - XLES_RESOLVED_WRc2 = XUNDEF - XLES_RESOLVED_W2Rc = XUNDEF - XLES_RESOLVED_WThlRc= XUNDEF - XLES_RESOLVED_WRvRc = XUNDEF - XLES_RESOLVED_RcPz = XUNDEF - XLES_RESOLVED_RtPz = XUNDEF - XLES_RESOLVED_WRt = XUNDEF - XLES_RESOLVED_Rt2 = XUNDEF -END IF -IF (LUSERI ) THEN - XLES_RESOLVED_Ri2 = XUNDEF - XLES_RESOLVED_ThRi = XUNDEF - XLES_RESOLVED_ThlRi= XUNDEF - XLES_RESOLVED_ThvRi= XUNDEF - XLES_RESOLVED_URi = XUNDEF - XLES_RESOLVED_VRi = XUNDEF - XLES_RESOLVED_WRi = XUNDEF - XLES_RESOLVED_WRi2 = XUNDEF - XLES_RESOLVED_W2Ri = XUNDEF - XLES_RESOLVED_WThlRi= XUNDEF - XLES_RESOLVED_WRvRi = XUNDEF - XLES_RESOLVED_RiPz = XUNDEF -END IF -! -IF (LUSERR) XLES_RESOLVED_WRr = XUNDEF -IF (LUSERR) XLES_MAX_INPRR3D = XUNDEF -IF (LUSERR) XLES_INPRR3D = XUNDEF -IF (LUSERR) XLES_EVAP3D = XUNDEF -IF (NSV>0 ) THEN - XLES_RESOLVED_Sv2 = XUNDEF - XLES_RESOLVED_ThSv = XUNDEF - IF (LUSERC) XLES_RESOLVED_ThlSv= XUNDEF - IF (LUSERV) XLES_RESOLVED_ThvSv= XUNDEF - XLES_RESOLVED_USv = XUNDEF - XLES_RESOLVED_VSv = XUNDEF - XLES_RESOLVED_WSv = XUNDEF - XLES_RESOLVED_WSv2 = XUNDEF - XLES_RESOLVED_W2Sv = XUNDEF - XLES_RESOLVED_WThlSv= XUNDEF - IF (LUSERV) XLES_RESOLVED_WRvSv = XUNDEF - XLES_RESOLVED_SvPz = XUNDEF -END IF -! -! -!* 7.4 interactions of resolved and subgrid quantities -! ----------------------------------------------- -! -ALLOCATE(XLES_RES_U_SBG_Tke (NLES_K,NLES_TIMES,NLES_MASKS))! <u'Tke> -ALLOCATE(XLES_RES_V_SBG_Tke (NLES_K,NLES_TIMES,NLES_MASKS))! <v'Tke> -ALLOCATE(XLES_RES_W_SBG_Tke (NLES_K,NLES_TIMES,NLES_MASKS))! <w'Tke> -! ______ -ALLOCATE(XLES_RES_W_SBG_WThl (NLES_K,NLES_TIMES,NLES_MASKS))! <w'w'Thl'> -! _____ -ALLOCATE(XLES_RES_W_SBG_Thl2 (NLES_K,NLES_TIMES,NLES_MASKS))! <w'Thl'2> -! _____ -ALLOCATE(XLES_RES_ddxa_U_SBG_UaU (NLES_K,NLES_TIMES,NLES_MASKS))! <du'/dxa ua'u'> -! _____ -ALLOCATE(XLES_RES_ddxa_V_SBG_UaV (NLES_K,NLES_TIMES,NLES_MASKS))! <dv'/dxa ua'v'> -! _____ -ALLOCATE(XLES_RES_ddxa_W_SBG_UaW (NLES_K,NLES_TIMES,NLES_MASKS))! <dw'/dxa ua'w'> -! _______ -ALLOCATE(XLES_RES_ddxa_W_SBG_UaThl (NLES_K,NLES_TIMES,NLES_MASKS))! <dw'/dxa ua'Thl'> -! _____ -ALLOCATE(XLES_RES_ddxa_Thl_SBG_UaW (NLES_K,NLES_TIMES,NLES_MASKS))! <dThl'/dxa ua'w'> -! ___ -ALLOCATE(XLES_RES_ddz_Thl_SBG_W2 (NLES_K,NLES_TIMES,NLES_MASKS))! <dThl'/dz w'2> -! _______ -ALLOCATE(XLES_RES_ddxa_Thl_SBG_UaThl(NLES_K,NLES_TIMES,NLES_MASKS))! <dThl'/dxa ua'Thl'> -! -IF (LUSERV) THEN -! _____ - ALLOCATE(XLES_RES_W_SBG_WRt (NLES_K,NLES_TIMES,NLES_MASKS))! <w'w'Rt'> -! ____ - ALLOCATE(XLES_RES_W_SBG_Rt2 (NLES_K,NLES_TIMES,NLES_MASKS))! <w'Rt'2> -! _______ - ALLOCATE(XLES_RES_W_SBG_ThlRt (NLES_K,NLES_TIMES,NLES_MASKS))! <w'Thl'Rt'> -! ______ - ALLOCATE(XLES_RES_ddxa_W_SBG_UaRt (NLES_K,NLES_TIMES,NLES_MASKS))! <dw'/dxa ua'Rt'> -! _____ - ALLOCATE(XLES_RES_ddxa_Rt_SBG_UaW (NLES_K,NLES_TIMES,NLES_MASKS))! <dRt'/dxa ua'w'> -! ___ - ALLOCATE(XLES_RES_ddz_Rt_SBG_W2 (NLES_K,NLES_TIMES,NLES_MASKS))! <dRt'/dz w'2> -! ______ - ALLOCATE(XLES_RES_ddxa_Thl_SBG_UaRt (NLES_K,NLES_TIMES,NLES_MASKS))! <dThl'/dxa ua'Rt'> -! _______ - ALLOCATE(XLES_RES_ddxa_Rt_SBG_UaThl (NLES_K,NLES_TIMES,NLES_MASKS))! <dRt'/dxa ua'Thl'> -! ______ - ALLOCATE(XLES_RES_ddxa_Rt_SBG_UaRt (NLES_K,NLES_TIMES,NLES_MASKS)) ! <dRt'/dxa ua'Rt'> -ELSE - ALLOCATE(XLES_RES_W_SBG_WRt (0,0,0)) - ALLOCATE(XLES_RES_W_SBG_Rt2 (0,0,0)) - ALLOCATE(XLES_RES_W_SBG_ThlRt (0,0,0)) - ALLOCATE(XLES_RES_ddxa_W_SBG_UaRt (0,0,0)) - ALLOCATE(XLES_RES_ddxa_Rt_SBG_UaW (0,0,0)) - ALLOCATE(XLES_RES_ddz_Rt_SBG_W2 (0,0,0)) - ALLOCATE(XLES_RES_ddxa_Thl_SBG_UaRt (0,0,0)) - ALLOCATE(XLES_RES_ddxa_Rt_SBG_UaThl (0,0,0)) - ALLOCATE(XLES_RES_ddxa_Rt_SBG_UaRt (0,0,0)) -END IF -! -! ______ -ALLOCATE(XLES_RES_ddxa_W_SBG_UaSv (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <dw'/dxa ua'Sv'> -! _____ -ALLOCATE(XLES_RES_ddxa_Sv_SBG_UaW (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <dSv'/dxa ua'w'> -! ___ -ALLOCATE(XLES_RES_ddz_Sv_SBG_W2 (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <dSv'/dz w'2> -! ______ -ALLOCATE(XLES_RES_ddxa_Sv_SBG_UaSv(NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <dSv'/dxa ua'Sv'> -! _____ -ALLOCATE(XLES_RES_W_SBG_WSv (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <w'w'Sv'> -! ____ -ALLOCATE(XLES_RES_W_SBG_Sv2 (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <w'Sv'2> -! -XLES_RES_U_SBG_Tke= XUNDEF -XLES_RES_V_SBG_Tke= XUNDEF -XLES_RES_W_SBG_Tke= XUNDEF -XLES_RES_W_SBG_WThl = XUNDEF -XLES_RES_W_SBG_Thl2 = XUNDEF -XLES_RES_ddxa_U_SBG_UaU = XUNDEF -XLES_RES_ddxa_V_SBG_UaV = XUNDEF -XLES_RES_ddxa_W_SBG_UaW = XUNDEF -XLES_RES_ddxa_W_SBG_UaThl = XUNDEF -XLES_RES_ddxa_Thl_SBG_UaW = XUNDEF -XLES_RES_ddz_Thl_SBG_W2 = XUNDEF -XLES_RES_ddxa_Thl_SBG_UaThl = XUNDEF -IF (LUSERV) THEN - XLES_RES_W_SBG_WRt = XUNDEF - XLES_RES_W_SBG_Rt2 = XUNDEF - XLES_RES_W_SBG_ThlRt = XUNDEF - XLES_RES_ddxa_W_SBG_UaRt = XUNDEF - XLES_RES_ddxa_Rt_SBG_UaW = XUNDEF - XLES_RES_ddz_Rt_SBG_W2 = XUNDEF - XLES_RES_ddxa_Thl_SBG_UaRt= XUNDEF - XLES_RES_ddxa_Rt_SBG_UaThl= XUNDEF - XLES_RES_ddxa_Rt_SBG_UaRt = XUNDEF -END IF -IF (NSV>0) THEN - XLES_RES_ddxa_W_SBG_UaSv = XUNDEF - XLES_RES_ddxa_Sv_SBG_UaW = XUNDEF - XLES_RES_ddz_Sv_SBG_W2 = XUNDEF - XLES_RES_ddxa_Sv_SBG_UaSv= XUNDEF - XLES_RES_W_SBG_WSv = XUNDEF - XLES_RES_W_SBG_Sv2 = XUNDEF -END IF -! -! -!* 7.5 subgrid quantities -! ------------------ -! -ALLOCATE(XLES_SUBGRID_U2 (NLES_K,NLES_TIMES,NLES_MASKS)) ! <u'2> -ALLOCATE(XLES_SUBGRID_V2 (NLES_K,NLES_TIMES,NLES_MASKS)) ! <v'2> -ALLOCATE(XLES_SUBGRID_W2 (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'2> -ALLOCATE(XLES_SUBGRID_Tke (NLES_K,NLES_TIMES,NLES_MASKS)) ! <e> -ALLOCATE(XLES_SUBGRID_Thl2 (NLES_K,NLES_TIMES,NLES_MASKS)) ! <Thl'2> -ALLOCATE(XLES_SUBGRID_UV (NLES_K,NLES_TIMES,NLES_MASKS)) ! <u'v'> -ALLOCATE(XLES_SUBGRID_WU (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'u'> -ALLOCATE(XLES_SUBGRID_WV (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'v'> -ALLOCATE(XLES_SUBGRID_UThl (NLES_K,NLES_TIMES,NLES_MASKS)) ! <u'Thl'> -ALLOCATE(XLES_SUBGRID_VThl (NLES_K,NLES_TIMES,NLES_MASKS)) ! <v'Thl'> -ALLOCATE(XLES_SUBGRID_WThl (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'Thl'> -ALLOCATE(XLES_SUBGRID_WThv (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'Thv'> -ALLOCATE(XLES_SUBGRID_ThlThv (NLES_K,NLES_TIMES,NLES_MASKS)) ! <Thl'Thv'> -ALLOCATE(XLES_SUBGRID_W2Thl (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'2Thl> -ALLOCATE(XLES_SUBGRID_WThl2 (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'Thl'2> -ALLOCATE(XLES_SUBGRID_DISS_Tke (NLES_K,NLES_TIMES,NLES_MASKS)) ! <epsilon> -ALLOCATE(XLES_SUBGRID_DISS_Thl2(NLES_K,NLES_TIMES,NLES_MASKS)) ! <epsilon_Thl2> -ALLOCATE(XLES_SUBGRID_WP (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'p'> -ALLOCATE(XLES_SUBGRID_PHI3 (NLES_K,NLES_TIMES,NLES_MASKS)) ! phi3 -ALLOCATE(XLES_SUBGRID_LMix (NLES_K,NLES_TIMES,NLES_MASKS)) ! mixing length -ALLOCATE(XLES_SUBGRID_LDiss (NLES_K,NLES_TIMES,NLES_MASKS)) ! dissipative length -ALLOCATE(XLES_SUBGRID_Km (NLES_K,NLES_TIMES,NLES_MASKS)) ! Km -ALLOCATE(XLES_SUBGRID_Kh (NLES_K,NLES_TIMES,NLES_MASKS)) ! Kh -ALLOCATE(XLES_SUBGRID_ThlPz (NLES_K,NLES_TIMES,NLES_MASKS)) ! <Thl'dp'/dz> -ALLOCATE(XLES_SUBGRID_UTke (NLES_K,NLES_TIMES,NLES_MASKS)) ! <u'Tke> -ALLOCATE(XLES_SUBGRID_VTke (NLES_K,NLES_TIMES,NLES_MASKS)) ! <v'Tke> -ALLOCATE(XLES_SUBGRID_WTke (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'Tke> -ALLOCATE(XLES_SUBGRID_ddz_WTke (NLES_K,NLES_TIMES,NLES_MASKS)) ! <dw'Tke/dz> - -ALLOCATE(XLES_SUBGRID_THLUP_MF(NLES_K,NLES_TIMES,NLES_MASKS)) ! Thl of the Updraft -ALLOCATE(XLES_SUBGRID_RTUP_MF (NLES_K,NLES_TIMES,NLES_MASKS)) ! Rt of the Updraft -ALLOCATE(XLES_SUBGRID_RVUP_MF (NLES_K,NLES_TIMES,NLES_MASKS)) ! Rv of the Updraft -ALLOCATE(XLES_SUBGRID_RCUP_MF (NLES_K,NLES_TIMES,NLES_MASKS)) ! Rc of the Updraft -ALLOCATE(XLES_SUBGRID_RIUP_MF (NLES_K,NLES_TIMES,NLES_MASKS)) ! Ri of the Updraft -ALLOCATE(XLES_SUBGRID_WUP_MF (NLES_K,NLES_TIMES,NLES_MASKS)) ! Thl of the Updraft -ALLOCATE(XLES_SUBGRID_MASSFLUX(NLES_K,NLES_TIMES,NLES_MASKS)) ! Mass Flux -ALLOCATE(XLES_SUBGRID_DETR (NLES_K,NLES_TIMES,NLES_MASKS)) ! Detrainment -ALLOCATE(XLES_SUBGRID_ENTR (NLES_K,NLES_TIMES,NLES_MASKS)) ! Entrainment -ALLOCATE(XLES_SUBGRID_FRACUP (NLES_K,NLES_TIMES,NLES_MASKS)) ! Updraft Fraction -ALLOCATE(XLES_SUBGRID_THVUP_MF(NLES_K,NLES_TIMES,NLES_MASKS)) ! Thv of the Updraft -ALLOCATE(XLES_SUBGRID_WTHLMF (NLES_K,NLES_TIMES,NLES_MASKS)) ! Flux of thl -ALLOCATE(XLES_SUBGRID_WRTMF (NLES_K,NLES_TIMES,NLES_MASKS)) ! Flux of rt -ALLOCATE(XLES_SUBGRID_WTHVMF (NLES_K,NLES_TIMES,NLES_MASKS)) ! Flux of thv -ALLOCATE(XLES_SUBGRID_WUMF (NLES_K,NLES_TIMES,NLES_MASKS))! Flux of u -ALLOCATE(XLES_SUBGRID_WVMF (NLES_K,NLES_TIMES,NLES_MASKS))! Flux of v - -IF (LUSERV ) THEN - ALLOCATE(XLES_SUBGRID_Rt2 (NLES_K,NLES_TIMES,NLES_MASKS)) ! <Rt'2> - ALLOCATE(XLES_SUBGRID_ThlRt (NLES_K,NLES_TIMES,NLES_MASKS)) ! <Thl'Rt'> - ALLOCATE(XLES_SUBGRID_URt (NLES_K,NLES_TIMES,NLES_MASKS)) ! <u'Rt'> - ALLOCATE(XLES_SUBGRID_VRt (NLES_K,NLES_TIMES,NLES_MASKS)) ! <v'Rt'> - ALLOCATE(XLES_SUBGRID_WRt (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'Rt'> - ALLOCATE(XLES_SUBGRID_RtThv (NLES_K,NLES_TIMES,NLES_MASKS)) ! <Rt'Thv'> - ALLOCATE(XLES_SUBGRID_W2Rt (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'2Rt'> - ALLOCATE(XLES_SUBGRID_WThlRt(NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'Thl'Rt'> - ALLOCATE(XLES_SUBGRID_WRt2 (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'Rt'2> - ALLOCATE(XLES_SUBGRID_DISS_Rt2 (NLES_K,NLES_TIMES,NLES_MASKS)) ! <epsilon_Rt2> - ALLOCATE(XLES_SUBGRID_DISS_ThlRt(NLES_K,NLES_TIMES,NLES_MASKS)) ! <epsilon_ThlRt> - ALLOCATE(XLES_SUBGRID_RtPz (NLES_K,NLES_TIMES,NLES_MASKS)) ! <Rt'dp'/dz> - ALLOCATE(XLES_SUBGRID_PSI3 (NLES_K,NLES_TIMES,NLES_MASKS)) ! psi3 -ELSE - ALLOCATE(XLES_SUBGRID_Rt2 (0,0,0)) - ALLOCATE(XLES_SUBGRID_ThlRt (0,0,0)) - ALLOCATE(XLES_SUBGRID_URt (0,0,0)) - ALLOCATE(XLES_SUBGRID_VRt (0,0,0)) - ALLOCATE(XLES_SUBGRID_WRt (0,0,0)) - ALLOCATE(XLES_SUBGRID_RtThv (0,0,0)) - ALLOCATE(XLES_SUBGRID_W2Rt (0,0,0)) - ALLOCATE(XLES_SUBGRID_WThlRt(0,0,0)) - ALLOCATE(XLES_SUBGRID_WRt2 (0,0,0)) - ALLOCATE(XLES_SUBGRID_DISS_Rt2 (0,0,0)) - ALLOCATE(XLES_SUBGRID_DISS_ThlRt(0,0,0)) - ALLOCATE(XLES_SUBGRID_RtPz (0,0,0)) - ALLOCATE(XLES_SUBGRID_PSI3 (0,0,0)) -END IF -IF (LUSERC ) THEN - ALLOCATE(XLES_SUBGRID_Rc2 (NLES_K,NLES_TIMES,NLES_MASKS)) ! <Rc'2> - ALLOCATE(XLES_SUBGRID_URc (NLES_K,NLES_TIMES,NLES_MASKS)) ! <u'Rc'> - ALLOCATE(XLES_SUBGRID_VRc (NLES_K,NLES_TIMES,NLES_MASKS)) ! <v'Rc'> - ALLOCATE(XLES_SUBGRID_WRc (NLES_K,NLES_TIMES,NLES_MASKS)) ! <w'Rc'> -ELSE - ALLOCATE(XLES_SUBGRID_Rc2 (0,0,0)) - ALLOCATE(XLES_SUBGRID_URc (0,0,0)) - ALLOCATE(XLES_SUBGRID_VRc (0,0,0)) - ALLOCATE(XLES_SUBGRID_WRc (0,0,0)) -END IF -IF (LUSERI ) THEN - ALLOCATE(XLES_SUBGRID_Ri2 (NLES_K,NLES_TIMES,NLES_MASKS)) ! <Ri'2> -ELSE - ALLOCATE(XLES_SUBGRID_Ri2 (0,0,0)) -END IF -IF (NSV>0 ) THEN - ALLOCATE(XLES_SUBGRID_USv (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <u'Sv'> - ALLOCATE(XLES_SUBGRID_VSv (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <v'Sv'> - ALLOCATE(XLES_SUBGRID_WSv (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <w'Sv'> - ALLOCATE(XLES_SUBGRID_Sv2 (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <Sv'2> - ALLOCATE(XLES_SUBGRID_SvThv (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <Sv'Thv'> - ALLOCATE(XLES_SUBGRID_W2Sv (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <w'2Sv'> - ALLOCATE(XLES_SUBGRID_WSv2 (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <w'Sv'2> - ALLOCATE(XLES_SUBGRID_DISS_Sv2 (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <epsilon_Sv2> - ALLOCATE(XLES_SUBGRID_SvPz (NLES_K,NLES_TIMES,NLES_MASKS,NSV)) ! <Sv'dp'/dz> -ELSE - ALLOCATE(XLES_SUBGRID_USv (0,0,0,0)) - ALLOCATE(XLES_SUBGRID_VSv (0,0,0,0)) - ALLOCATE(XLES_SUBGRID_WSv (0,0,0,0)) - ALLOCATE(XLES_SUBGRID_Sv2 (0,0,0,0)) - ALLOCATE(XLES_SUBGRID_SvThv (0,0,0,0)) - ALLOCATE(XLES_SUBGRID_W2Sv (0,0,0,0)) - ALLOCATE(XLES_SUBGRID_WSv2 (0,0,0,0)) - ALLOCATE(XLES_SUBGRID_DISS_Sv2(0,0,0,0)) - ALLOCATE(XLES_SUBGRID_SvPz (0,0,0,0)) -END IF -! -XLES_SUBGRID_U2 = XUNDEF -XLES_SUBGRID_V2 = XUNDEF -XLES_SUBGRID_W2 = XUNDEF -XLES_SUBGRID_Tke = XUNDEF -XLES_SUBGRID_Thl2= XUNDEF -XLES_SUBGRID_UV = XUNDEF -XLES_SUBGRID_WU = XUNDEF -XLES_SUBGRID_WV = XUNDEF -XLES_SUBGRID_UThl= XUNDEF -XLES_SUBGRID_VThl= XUNDEF -XLES_SUBGRID_WThl= XUNDEF -XLES_SUBGRID_WThv= XUNDEF -XLES_SUBGRID_ThlThv= XUNDEF -XLES_SUBGRID_W2Thl= XUNDEF -XLES_SUBGRID_WThl2 = XUNDEF -XLES_SUBGRID_DISS_Tke = XUNDEF -XLES_SUBGRID_DISS_Thl2= XUNDEF -XLES_SUBGRID_WP = XUNDEF -XLES_SUBGRID_PHI3 = XUNDEF -XLES_SUBGRID_LMix = XUNDEF -XLES_SUBGRID_LDiss = XUNDEF -XLES_SUBGRID_Km = XUNDEF -XLES_SUBGRID_Kh = XUNDEF -XLES_SUBGRID_ThlPz = XUNDEF -XLES_SUBGRID_UTke= XUNDEF -XLES_SUBGRID_VTke= XUNDEF -XLES_SUBGRID_WTke= XUNDEF -XLES_SUBGRID_ddz_WTke = XUNDEF - -XLES_SUBGRID_THLUP_MF = XUNDEF -XLES_SUBGRID_RTUP_MF = XUNDEF -XLES_SUBGRID_RVUP_MF = XUNDEF -XLES_SUBGRID_RCUP_MF = XUNDEF -XLES_SUBGRID_RIUP_MF = XUNDEF -XLES_SUBGRID_WUP_MF = XUNDEF -XLES_SUBGRID_MASSFLUX = XUNDEF -XLES_SUBGRID_DETR = XUNDEF -XLES_SUBGRID_ENTR = XUNDEF -XLES_SUBGRID_FRACUP = XUNDEF -XLES_SUBGRID_THVUP_MF = XUNDEF -XLES_SUBGRID_WTHLMF = XUNDEF -XLES_SUBGRID_WRTMF = XUNDEF -XLES_SUBGRID_WTHVMF = XUNDEF -XLES_SUBGRID_WUMF = XUNDEF -XLES_SUBGRID_WVMF = XUNDEF - -IF (LUSERV ) THEN - XLES_SUBGRID_Rt2 = XUNDEF - XLES_SUBGRID_ThlRt= XUNDEF - XLES_SUBGRID_URt = XUNDEF - XLES_SUBGRID_VRt = XUNDEF - XLES_SUBGRID_WRt = XUNDEF - XLES_SUBGRID_RtThv = XUNDEF - XLES_SUBGRID_W2Rt = XUNDEF - XLES_SUBGRID_WThlRt = XUNDEF - XLES_SUBGRID_WRt2 = XUNDEF - XLES_SUBGRID_DISS_Rt2= XUNDEF - XLES_SUBGRID_DISS_ThlRt= XUNDEF - XLES_SUBGRID_RtPz = XUNDEF - XLES_SUBGRID_PSI3 = XUNDEF -END IF -IF (LUSERC ) THEN - XLES_SUBGRID_Rc2 = XUNDEF - XLES_SUBGRID_URc = XUNDEF - XLES_SUBGRID_VRc = XUNDEF - XLES_SUBGRID_WRc = XUNDEF -END IF -IF (LUSERI ) THEN - XLES_SUBGRID_Ri2 = XUNDEF -END IF -IF (NSV>0 ) THEN - XLES_SUBGRID_USv = XUNDEF - XLES_SUBGRID_VSv = XUNDEF - XLES_SUBGRID_WSv = XUNDEF - XLES_SUBGRID_Sv2 = XUNDEF - XLES_SUBGRID_SvThv = XUNDEF - XLES_SUBGRID_W2Sv = XUNDEF - XLES_SUBGRID_WSv2 = XUNDEF - XLES_SUBGRID_DISS_Sv2= XUNDEF - XLES_SUBGRID_SvPz = XUNDEF -END IF -! -! -!* 7.6 updraft quantities (only on the cartesian mask) -! ------------------ -! -ALLOCATE(XLES_UPDRAFT (NLES_K,NLES_TIMES)) ! updraft fraction -ALLOCATE(XLES_UPDRAFT_W (NLES_K,NLES_TIMES)) ! <w> -ALLOCATE(XLES_UPDRAFT_Th (NLES_K,NLES_TIMES)) ! <theta> -ALLOCATE(XLES_UPDRAFT_Ke (NLES_K,NLES_TIMES)) ! <E> -ALLOCATE(XLES_UPDRAFT_WTh (NLES_K,NLES_TIMES)) ! <w'theta'> -ALLOCATE(XLES_UPDRAFT_Th2 (NLES_K,NLES_TIMES)) ! <th'2> -ALLOCATE(XLES_UPDRAFT_Tke (NLES_K,NLES_TIMES)) ! <e> - -IF (LUSERV) THEN - ALLOCATE(XLES_UPDRAFT_Thv (NLES_K,NLES_TIMES)) ! <thetav> - ALLOCATE(XLES_UPDRAFT_WThv (NLES_K,NLES_TIMES)) ! <w'thv'> - ALLOCATE(XLES_UPDRAFT_ThThv (NLES_K,NLES_TIMES)) ! <th'thv'> -ELSE - ALLOCATE(XLES_UPDRAFT_Thv (0,0)) - ALLOCATE(XLES_UPDRAFT_WThv (0,0)) - ALLOCATE(XLES_UPDRAFT_ThThv (0,0)) -END IF -! -IF (LUSERC) THEN - ALLOCATE(XLES_UPDRAFT_Thl (NLES_K,NLES_TIMES)) ! <thetal> - ALLOCATE(XLES_UPDRAFT_WThl (NLES_K,NLES_TIMES)) ! <w'thetal'> - ALLOCATE(XLES_UPDRAFT_Thl2 (NLES_K,NLES_TIMES)) ! <thl'2> - ALLOCATE(XLES_UPDRAFT_ThlThv(NLES_K,NLES_TIMES)) ! <thl'thv'> -ELSE - ALLOCATE(XLES_UPDRAFT_Thl (0,0)) - ALLOCATE(XLES_UPDRAFT_WThl (0,0)) - ALLOCATE(XLES_UPDRAFT_Thl2 (0,0)) - ALLOCATE(XLES_UPDRAFT_ThlThv(0,0)) -END IF - -IF (LUSERV ) THEN - ALLOCATE(XLES_UPDRAFT_Rv (NLES_K,NLES_TIMES)) ! <Rv> - ALLOCATE(XLES_UPDRAFT_WRv (NLES_K,NLES_TIMES)) ! <w'Rv'> - ALLOCATE(XLES_UPDRAFT_Rv2 (NLES_K,NLES_TIMES)) ! <Rv'2> - ALLOCATE(XLES_UPDRAFT_ThRv (NLES_K,NLES_TIMES)) ! <Th'Rv'> - ALLOCATE(XLES_UPDRAFT_ThvRv (NLES_K,NLES_TIMES)) ! <Thv'Rv'> - IF (LUSERC) THEN - ALLOCATE(XLES_UPDRAFT_ThlRv (NLES_K,NLES_TIMES)) ! <Thl'Rv'> - ELSE - ALLOCATE(XLES_UPDRAFT_ThlRv (0,0)) - END IF -ELSE - ALLOCATE(XLES_UPDRAFT_Rv (0,0)) - ALLOCATE(XLES_UPDRAFT_WRv (0,0)) - ALLOCATE(XLES_UPDRAFT_Rv2 (0,0)) - ALLOCATE(XLES_UPDRAFT_ThRv (0,0)) - ALLOCATE(XLES_UPDRAFT_ThvRv (0,0)) - ALLOCATE(XLES_UPDRAFT_ThlRv (0,0)) -END IF -IF (LUSERC ) THEN - ALLOCATE(XLES_UPDRAFT_Rc (NLES_K,NLES_TIMES)) ! <Rc> - ALLOCATE(XLES_UPDRAFT_WRc (NLES_K,NLES_TIMES)) ! <w'Rc'> - ALLOCATE(XLES_UPDRAFT_Rc2 (NLES_K,NLES_TIMES)) ! <Rc'2> - ALLOCATE(XLES_UPDRAFT_ThRc (NLES_K,NLES_TIMES)) ! <Th'Rc'> - ALLOCATE(XLES_UPDRAFT_ThvRc (NLES_K,NLES_TIMES)) ! <Thv'Rc'> - ALLOCATE(XLES_UPDRAFT_ThlRc (NLES_K,NLES_TIMES)) ! <Thl'Rc'> -ELSE - ALLOCATE(XLES_UPDRAFT_Rc (0,0)) - ALLOCATE(XLES_UPDRAFT_WRc (0,0)) - ALLOCATE(XLES_UPDRAFT_Rc2 (0,0)) - ALLOCATE(XLES_UPDRAFT_ThRc (0,0)) - ALLOCATE(XLES_UPDRAFT_ThvRc (0,0)) - ALLOCATE(XLES_UPDRAFT_ThlRc (0,0)) -END IF -IF (LUSERR ) THEN - ALLOCATE(XLES_UPDRAFT_Rr (NLES_K,NLES_TIMES)) ! <Rr> -ELSE - ALLOCATE(XLES_UPDRAFT_Rr (0,0)) -END IF -IF (LUSERI ) THEN - ALLOCATE(XLES_UPDRAFT_Ri (NLES_K,NLES_TIMES)) ! <Ri> - ALLOCATE(XLES_UPDRAFT_WRi (NLES_K,NLES_TIMES)) ! <w'Ri'> - ALLOCATE(XLES_UPDRAFT_Ri2 (NLES_K,NLES_TIMES)) ! <Ri'2> - ALLOCATE(XLES_UPDRAFT_ThRi (NLES_K,NLES_TIMES)) ! <Th'Ri'> - ALLOCATE(XLES_UPDRAFT_ThvRi (NLES_K,NLES_TIMES)) ! <Thv'Ri'> - ALLOCATE(XLES_UPDRAFT_ThlRi (NLES_K,NLES_TIMES)) ! <Thl'Ri'> -ELSE - ALLOCATE(XLES_UPDRAFT_Ri (0,0)) - ALLOCATE(XLES_UPDRAFT_WRi (0,0)) - ALLOCATE(XLES_UPDRAFT_Ri2 (0,0)) - ALLOCATE(XLES_UPDRAFT_ThRi (0,0)) - ALLOCATE(XLES_UPDRAFT_ThvRi (0,0)) - ALLOCATE(XLES_UPDRAFT_ThlRi (0,0)) -END IF -IF (LUSERS ) THEN - ALLOCATE(XLES_UPDRAFT_Rs (NLES_K,NLES_TIMES)) ! <Rs> -ELSE - ALLOCATE(XLES_UPDRAFT_Rs (0,0)) -END IF -IF (LUSERG ) THEN - ALLOCATE(XLES_UPDRAFT_Rg (NLES_K,NLES_TIMES)) ! <Rg> -ELSE - ALLOCATE(XLES_UPDRAFT_Rg (0,0)) -END IF -IF (LUSERH ) THEN - ALLOCATE(XLES_UPDRAFT_Rh (NLES_K,NLES_TIMES)) ! <Rh> -ELSE - ALLOCATE(XLES_UPDRAFT_Rh (0,0)) -END IF -IF (NSV>0 ) THEN - ALLOCATE(XLES_UPDRAFT_Sv (NLES_K,NLES_TIMES,NSV))! <Sv> - ALLOCATE(XLES_UPDRAFT_WSv (NLES_K,NLES_TIMES,NSV))! <w'Sv'> - ALLOCATE(XLES_UPDRAFT_Sv2 (NLES_K,NLES_TIMES,NSV))! <Sv'2> - ALLOCATE(XLES_UPDRAFT_ThSv (NLES_K,NLES_TIMES,NSV))! <Th'Sv'> - IF (LUSERV) THEN - ALLOCATE(XLES_UPDRAFT_ThvSv (NLES_K,NLES_TIMES,NSV))! <Thv'Sv'> - ELSE - ALLOCATE(XLES_UPDRAFT_ThvSv (0,0,0)) - END IF - IF (LUSERC) THEN - ALLOCATE(XLES_UPDRAFT_ThlSv (NLES_K,NLES_TIMES,NSV))! <Thl'Sv'> - ELSE - ALLOCATE(XLES_UPDRAFT_ThlSv (0,0,0)) - END IF -ELSE - ALLOCATE(XLES_UPDRAFT_Sv (0,0,0)) - ALLOCATE(XLES_UPDRAFT_WSv (0,0,0)) - ALLOCATE(XLES_UPDRAFT_Sv2 (0,0,0)) - ALLOCATE(XLES_UPDRAFT_ThSv (0,0,0)) - ALLOCATE(XLES_UPDRAFT_ThvSv (0,0,0)) - ALLOCATE(XLES_UPDRAFT_ThlSv (0,0,0)) -END IF -! -! -XLES_UPDRAFT = XUNDEF -XLES_UPDRAFT_W = XUNDEF -XLES_UPDRAFT_Th = XUNDEF -XLES_UPDRAFT_Thl = XUNDEF -XLES_UPDRAFT_Tke = XUNDEF -IF (LUSERV ) XLES_UPDRAFT_Thv = XUNDEF -IF (LUSERC ) XLES_UPDRAFT_Thl = XUNDEF -IF (LUSERV ) XLES_UPDRAFT_Rv = XUNDEF -IF (LUSERC ) XLES_UPDRAFT_Rc = XUNDEF -IF (LUSERR ) XLES_UPDRAFT_Rr = XUNDEF -IF (LUSERI ) XLES_UPDRAFT_Ri = XUNDEF -IF (LUSERS ) XLES_UPDRAFT_Rs = XUNDEF -IF (LUSERG ) XLES_UPDRAFT_Rg = XUNDEF -IF (LUSERH ) XLES_UPDRAFT_Rh = XUNDEF -IF (NSV>0 ) XLES_UPDRAFT_Sv = XUNDEF -XLES_UPDRAFT_Ke = XUNDEF -XLES_UPDRAFT_WTh = XUNDEF -IF (LUSERV ) XLES_UPDRAFT_WThv = XUNDEF -IF (LUSERC ) XLES_UPDRAFT_WThl = XUNDEF -IF (LUSERV ) XLES_UPDRAFT_WRv = XUNDEF -IF (LUSERC ) XLES_UPDRAFT_WRc = XUNDEF -IF (LUSERI ) XLES_UPDRAFT_WRi = XUNDEF -IF (NSV>0 ) XLES_UPDRAFT_WSv = XUNDEF -XLES_UPDRAFT_Th2 = XUNDEF -IF (LUSERV ) THEN - XLES_UPDRAFT_ThThv = XUNDEF -END IF -IF (LUSERC ) THEN - XLES_UPDRAFT_Thl2 = XUNDEF - XLES_UPDRAFT_ThlThv = XUNDEF -END IF -IF (LUSERV ) XLES_UPDRAFT_Rv2 = XUNDEF -IF (LUSERC ) XLES_UPDRAFT_Rc2 = XUNDEF -IF (LUSERI ) XLES_UPDRAFT_Ri2 = XUNDEF -IF (NSV>0 ) XLES_UPDRAFT_Sv2 = XUNDEF -IF (LUSERV ) XLES_UPDRAFT_ThRv = XUNDEF -IF (LUSERC ) XLES_UPDRAFT_ThRc = XUNDEF -IF (LUSERI ) XLES_UPDRAFT_ThRi = XUNDEF -IF (LUSERC ) XLES_UPDRAFT_ThlRv= XUNDEF -IF (LUSERC ) XLES_UPDRAFT_ThlRc= XUNDEF -IF (LUSERI ) XLES_UPDRAFT_ThlRi= XUNDEF -IF (NSV>0 ) XLES_UPDRAFT_ThSv = XUNDEF -IF (LUSERV ) XLES_UPDRAFT_ThvRv= XUNDEF -IF (LUSERC ) XLES_UPDRAFT_ThvRc= XUNDEF -IF (LUSERI ) XLES_UPDRAFT_ThvRi= XUNDEF -IF (NSV>0 .AND. LUSERV) XLES_UPDRAFT_ThvSv = XUNDEF -IF (NSV>0 .AND. LUSERC) XLES_UPDRAFT_ThlSv = XUNDEF -! -! -!* 7.7 downdraft quantities (only on the cartesian mask) -! -------------------- -! -ALLOCATE(XLES_DOWNDRAFT (NLES_K,NLES_TIMES)) ! updraft fraction -ALLOCATE(XLES_DOWNDRAFT_W (NLES_K,NLES_TIMES)) ! <w> -ALLOCATE(XLES_DOWNDRAFT_Th (NLES_K,NLES_TIMES)) ! <theta> -ALLOCATE(XLES_DOWNDRAFT_Ke (NLES_K,NLES_TIMES)) ! <E> -ALLOCATE(XLES_DOWNDRAFT_WTh (NLES_K,NLES_TIMES)) ! <w'theta'> -ALLOCATE(XLES_DOWNDRAFT_Th2 (NLES_K,NLES_TIMES)) ! <th'2> -ALLOCATE(XLES_DOWNDRAFT_Tke (NLES_K,NLES_TIMES)) ! <e> - -IF (LUSERV) THEN - ALLOCATE(XLES_DOWNDRAFT_Thv (NLES_K,NLES_TIMES)) ! <thetav> - ALLOCATE(XLES_DOWNDRAFT_WThv (NLES_K,NLES_TIMES)) ! <w'thv'> - ALLOCATE(XLES_DOWNDRAFT_ThThv (NLES_K,NLES_TIMES)) ! <th'thv'> -ELSE - ALLOCATE(XLES_DOWNDRAFT_Thv (0,0)) - ALLOCATE(XLES_DOWNDRAFT_WThv (0,0)) - ALLOCATE(XLES_DOWNDRAFT_ThThv (0,0)) -END IF -! -IF (LUSERC) THEN - ALLOCATE(XLES_DOWNDRAFT_Thl (NLES_K,NLES_TIMES)) ! <thetal> - ALLOCATE(XLES_DOWNDRAFT_WThl (NLES_K,NLES_TIMES)) ! <w'thetal'> - ALLOCATE(XLES_DOWNDRAFT_Thl2 (NLES_K,NLES_TIMES)) ! <thl'2> - ALLOCATE(XLES_DOWNDRAFT_ThlThv(NLES_K,NLES_TIMES)) ! <thl'thv'> -ELSE - ALLOCATE(XLES_DOWNDRAFT_Thl (0,0)) - ALLOCATE(XLES_DOWNDRAFT_WThl (0,0)) - ALLOCATE(XLES_DOWNDRAFT_Thl2 (0,0)) - ALLOCATE(XLES_DOWNDRAFT_ThlThv(0,0)) -END IF - -IF (LUSERV ) THEN - ALLOCATE(XLES_DOWNDRAFT_Rv (NLES_K,NLES_TIMES)) ! <Rv> - ALLOCATE(XLES_DOWNDRAFT_WRv (NLES_K,NLES_TIMES)) ! <w'Rv'> - ALLOCATE(XLES_DOWNDRAFT_Rv2 (NLES_K,NLES_TIMES)) ! <Rv'2> - ALLOCATE(XLES_DOWNDRAFT_ThRv (NLES_K,NLES_TIMES)) ! <Th'Rv'> - ALLOCATE(XLES_DOWNDRAFT_ThvRv (NLES_K,NLES_TIMES)) ! <Thv'Rv'> - IF (LUSERC) THEN - ALLOCATE(XLES_DOWNDRAFT_ThlRv (NLES_K,NLES_TIMES)) ! <Thl'Rv'> - ELSE - ALLOCATE(XLES_DOWNDRAFT_ThlRv (0,0)) - END IF -ELSE - ALLOCATE(XLES_DOWNDRAFT_Rv (0,0)) - ALLOCATE(XLES_DOWNDRAFT_WRv (0,0)) - ALLOCATE(XLES_DOWNDRAFT_Rv2 (0,0)) - ALLOCATE(XLES_DOWNDRAFT_ThRv (0,0)) - ALLOCATE(XLES_DOWNDRAFT_ThvRv (0,0)) - ALLOCATE(XLES_DOWNDRAFT_ThlRv (0,0)) -END IF -IF (LUSERC ) THEN - ALLOCATE(XLES_DOWNDRAFT_Rc (NLES_K,NLES_TIMES)) ! <Rc> - ALLOCATE(XLES_DOWNDRAFT_WRc (NLES_K,NLES_TIMES)) ! <w'Rc'> - ALLOCATE(XLES_DOWNDRAFT_Rc2 (NLES_K,NLES_TIMES)) ! <Rc'2> - ALLOCATE(XLES_DOWNDRAFT_ThRc (NLES_K,NLES_TIMES)) ! <Th'Rc'> - ALLOCATE(XLES_DOWNDRAFT_ThvRc (NLES_K,NLES_TIMES)) ! <Thv'Rc'> - ALLOCATE(XLES_DOWNDRAFT_ThlRc (NLES_K,NLES_TIMES)) ! <Thl'Rc'> -ELSE - ALLOCATE(XLES_DOWNDRAFT_Rc (0,0)) - ALLOCATE(XLES_DOWNDRAFT_WRc (0,0)) - ALLOCATE(XLES_DOWNDRAFT_Rc2 (0,0)) - ALLOCATE(XLES_DOWNDRAFT_ThRc (0,0)) - ALLOCATE(XLES_DOWNDRAFT_ThvRc (0,0)) - ALLOCATE(XLES_DOWNDRAFT_ThlRc (0,0)) -END IF -IF (LUSERR ) THEN - ALLOCATE(XLES_DOWNDRAFT_Rr (NLES_K,NLES_TIMES)) ! <Rr> -ELSE - ALLOCATE(XLES_DOWNDRAFT_Rr (0,0)) -END IF -IF (LUSERI ) THEN - ALLOCATE(XLES_DOWNDRAFT_Ri (NLES_K,NLES_TIMES)) ! <Ri> - ALLOCATE(XLES_DOWNDRAFT_WRi (NLES_K,NLES_TIMES)) ! <w'Ri'> - ALLOCATE(XLES_DOWNDRAFT_Ri2 (NLES_K,NLES_TIMES)) ! <Ri'2> - ALLOCATE(XLES_DOWNDRAFT_ThRi (NLES_K,NLES_TIMES)) ! <Th'Ri'> - ALLOCATE(XLES_DOWNDRAFT_ThvRi (NLES_K,NLES_TIMES)) ! <Thv'Ri'> - ALLOCATE(XLES_DOWNDRAFT_ThlRi (NLES_K,NLES_TIMES)) ! <Thl'Ri'> -ELSE - ALLOCATE(XLES_DOWNDRAFT_Ri (0,0)) - ALLOCATE(XLES_DOWNDRAFT_WRi (0,0)) - ALLOCATE(XLES_DOWNDRAFT_Ri2 (0,0)) - ALLOCATE(XLES_DOWNDRAFT_ThRi (0,0)) - ALLOCATE(XLES_DOWNDRAFT_ThvRi (0,0)) - ALLOCATE(XLES_DOWNDRAFT_ThlRi (0,0)) -END IF -IF (LUSERS ) THEN - ALLOCATE(XLES_DOWNDRAFT_Rs (NLES_K,NLES_TIMES)) ! <Rs> -ELSE - ALLOCATE(XLES_DOWNDRAFT_Rs (0,0)) -END IF -IF (LUSERG ) THEN - ALLOCATE(XLES_DOWNDRAFT_Rg (NLES_K,NLES_TIMES)) ! <Rg> -ELSE - ALLOCATE(XLES_DOWNDRAFT_Rg (0,0)) -END IF -IF (LUSERH ) THEN - ALLOCATE(XLES_DOWNDRAFT_Rh (NLES_K,NLES_TIMES)) ! <Rh> -ELSE - ALLOCATE(XLES_DOWNDRAFT_Rh (0,0)) -END IF -IF (NSV>0 ) THEN - ALLOCATE(XLES_DOWNDRAFT_Sv (NLES_K,NLES_TIMES,NSV))! <Sv> - ALLOCATE(XLES_DOWNDRAFT_WSv (NLES_K,NLES_TIMES,NSV))! <w'Sv'> - ALLOCATE(XLES_DOWNDRAFT_Sv2 (NLES_K,NLES_TIMES,NSV))! <Sv'2> - ALLOCATE(XLES_DOWNDRAFT_ThSv (NLES_K,NLES_TIMES,NSV))! <Th'Sv'> - IF (LUSERV) THEN - ALLOCATE(XLES_DOWNDRAFT_ThvSv (NLES_K,NLES_TIMES,NSV))! <Thv'Sv'> - ELSE - ALLOCATE(XLES_DOWNDRAFT_ThvSv (0,0,0)) - END IF - IF (LUSERC) THEN - ALLOCATE(XLES_DOWNDRAFT_ThlSv (NLES_K,NLES_TIMES,NSV))! <Thl'Sv'> - ELSE - ALLOCATE(XLES_DOWNDRAFT_ThlSv (0,0,0)) - END IF -ELSE - ALLOCATE(XLES_DOWNDRAFT_Sv (0,0,0)) - ALLOCATE(XLES_DOWNDRAFT_WSv (0,0,0)) - ALLOCATE(XLES_DOWNDRAFT_Sv2 (0,0,0)) - ALLOCATE(XLES_DOWNDRAFT_ThSv (0,0,0)) - ALLOCATE(XLES_DOWNDRAFT_ThvSv (0,0,0)) - ALLOCATE(XLES_DOWNDRAFT_ThlSv (0,0,0)) -END IF -! -! -XLES_DOWNDRAFT = XUNDEF -XLES_DOWNDRAFT_W = XUNDEF -XLES_DOWNDRAFT_Th = XUNDEF -XLES_DOWNDRAFT_Thl = XUNDEF -XLES_DOWNDRAFT_Tke = XUNDEF -IF (LUSERV ) XLES_DOWNDRAFT_Thv = XUNDEF -IF (LUSERC ) XLES_DOWNDRAFT_Thl = XUNDEF -IF (LUSERV ) XLES_DOWNDRAFT_Rv = XUNDEF -IF (LUSERC ) XLES_DOWNDRAFT_Rc = XUNDEF -IF (LUSERR ) XLES_DOWNDRAFT_Rr = XUNDEF -IF (LUSERI ) XLES_DOWNDRAFT_Ri = XUNDEF -IF (LUSERS ) XLES_DOWNDRAFT_Rs = XUNDEF -IF (LUSERG ) XLES_DOWNDRAFT_Rg = XUNDEF -IF (LUSERH ) XLES_DOWNDRAFT_Rh = XUNDEF -IF (NSV>0 ) XLES_DOWNDRAFT_Sv = XUNDEF -XLES_DOWNDRAFT_Ke = XUNDEF -XLES_DOWNDRAFT_WTh = XUNDEF -IF (LUSERV ) XLES_DOWNDRAFT_WThv = XUNDEF -IF (LUSERC ) XLES_DOWNDRAFT_WThl = XUNDEF -IF (LUSERV ) XLES_DOWNDRAFT_WRv = XUNDEF -IF (LUSERC ) XLES_DOWNDRAFT_WRc = XUNDEF -IF (LUSERI ) XLES_DOWNDRAFT_WRi = XUNDEF -IF (NSV>0 ) XLES_DOWNDRAFT_WSv = XUNDEF -XLES_DOWNDRAFT_Th2 = XUNDEF -IF (LUSERV ) THEN - XLES_DOWNDRAFT_ThThv = XUNDEF -END IF -IF (LUSERC ) THEN - XLES_DOWNDRAFT_Thl2 = XUNDEF - XLES_DOWNDRAFT_ThlThv = XUNDEF -END IF -IF (LUSERV ) XLES_DOWNDRAFT_Rv2 = XUNDEF -IF (LUSERC ) XLES_DOWNDRAFT_Rc2 = XUNDEF -IF (LUSERI ) XLES_DOWNDRAFT_Ri2 = XUNDEF -IF (NSV>0 ) XLES_DOWNDRAFT_Sv2 = XUNDEF -IF (LUSERV ) XLES_DOWNDRAFT_ThRv = XUNDEF -IF (LUSERC ) XLES_DOWNDRAFT_ThRc = XUNDEF -IF (LUSERI ) XLES_DOWNDRAFT_ThRi = XUNDEF -IF (LUSERC ) XLES_DOWNDRAFT_ThlRv= XUNDEF -IF (LUSERC ) XLES_DOWNDRAFT_ThlRc= XUNDEF -IF (LUSERI ) XLES_DOWNDRAFT_ThlRi= XUNDEF -IF (NSV>0 ) XLES_DOWNDRAFT_ThSv = XUNDEF -IF (LUSERV ) XLES_DOWNDRAFT_ThvRv= XUNDEF -IF (LUSERC ) XLES_DOWNDRAFT_ThvRc= XUNDEF -IF (LUSERI ) XLES_DOWNDRAFT_ThvRi= XUNDEF -IF (NSV>0 .AND. LUSERV) XLES_DOWNDRAFT_ThvSv = XUNDEF -IF (NSV>0 .AND. LUSERC) XLES_DOWNDRAFT_ThlSv = XUNDEF -! -!* 7.8 production terms -! ---------------- -! -ALLOCATE(XLES_BU_RES_KE (NLES_K,NLES_TIMES,NLES_TOT)) -ALLOCATE(XLES_BU_RES_WThl (NLES_K,NLES_TIMES,NLES_TOT)) -ALLOCATE(XLES_BU_RES_Thl2 (NLES_K,NLES_TIMES,NLES_TOT)) -ALLOCATE(XLES_BU_SBG_TKE (NLES_K,NLES_TIMES,NLES_TOT)) -XLES_BU_RES_KE = 0. -XLES_BU_RES_WThl = 0. -XLES_BU_RES_Thl2 = 0. -XLES_BU_SBG_TKE = 0. -IF (LUSERV) THEN - ALLOCATE(XLES_BU_RES_WRt (NLES_K,NLES_TIMES,NLES_TOT)) - ALLOCATE(XLES_BU_RES_Rt2 (NLES_K,NLES_TIMES,NLES_TOT)) - ALLOCATE(XLES_BU_RES_ThlRt(NLES_K,NLES_TIMES,NLES_TOT)) - XLES_BU_RES_WRt = 0. - XLES_BU_RES_Rt2 = 0. - XLES_BU_RES_ThlRt = 0. -END IF -ALLOCATE(XLES_BU_RES_WSv (NLES_K,NLES_TIMES,NLES_TOT,NSV)) -ALLOCATE(XLES_BU_RES_Sv2 (NLES_K,NLES_TIMES,NLES_TOT,NSV)) -IF (NSV>0) THEN - XLES_BU_RES_WSv = 0. - XLES_BU_RES_Sv2 = 0. -END IF -! -!------------------------------------------------------------------------------- -! -!* 8. Allocations of the normalization variables temporal series -! ---------------------------------------------------------- -! -ALLOCATE(XLES_UW0 (NLES_TIMES)) -ALLOCATE(XLES_VW0 (NLES_TIMES)) -ALLOCATE(XLES_USTAR (NLES_TIMES)) -ALLOCATE(XLES_WSTAR (NLES_TIMES)) -ALLOCATE(XLES_Q0 (NLES_TIMES)) -ALLOCATE(XLES_E0 (NLES_TIMES)) -ALLOCATE(XLES_SV0 (NLES_TIMES,NSV)) -ALLOCATE(XLES_BL_HEIGHT (NLES_TIMES)) -ALLOCATE(XLES_MO_LENGTH (NLES_TIMES)) -ALLOCATE(XLES_ZCB (NLES_TIMES)) -ALLOCATE(XLES_CFtot (NLES_TIMES)) -ALLOCATE(XLES_CF2tot (NLES_TIMES)) -ALLOCATE(XLES_LWP (NLES_TIMES)) -ALLOCATE(XLES_LWPVAR (NLES_TIMES)) -ALLOCATE(XLES_RWP (NLES_TIMES)) -ALLOCATE(XLES_IWP (NLES_TIMES)) -ALLOCATE(XLES_SWP (NLES_TIMES)) -ALLOCATE(XLES_GWP (NLES_TIMES)) -ALLOCATE(XLES_HWP (NLES_TIMES)) -ALLOCATE(XLES_INT_TKE (NLES_TIMES)) -ALLOCATE(XLES_ZMAXCF (NLES_TIMES)) -ALLOCATE(XLES_ZMAXCF2 (NLES_TIMES)) -ALLOCATE(XLES_INPRR (NLES_TIMES)) -ALLOCATE(XLES_INPRC (NLES_TIMES)) -ALLOCATE(XLES_INDEP (NLES_TIMES)) -ALLOCATE(XLES_RAIN_INPRR(NLES_TIMES)) -ALLOCATE(XLES_ACPRR (NLES_TIMES)) -ALLOCATE(XLES_PRECFR (NLES_TIMES)) -ALLOCATE(XLES_SWU (NLES_K,NLES_TIMES)) -ALLOCATE(XLES_SWD (NLES_K,NLES_TIMES)) -ALLOCATE(XLES_LWU (NLES_K,NLES_TIMES)) -ALLOCATE(XLES_LWD (NLES_K,NLES_TIMES)) -ALLOCATE(XLES_DTHRADSW (NLES_K,NLES_TIMES)) -ALLOCATE(XLES_DTHRADLW (NLES_K,NLES_TIMES)) -ALLOCATE(XLES_RADEFF (NLES_K,NLES_TIMES)) -! -XLES_UW0 = XUNDEF -XLES_VW0 = XUNDEF -XLES_USTAR = XUNDEF -XLES_WSTAR = XUNDEF -XLES_Q0 = XUNDEF -XLES_E0 = XUNDEF -XLES_SV0 = XUNDEF -XLES_BL_HEIGHT = XUNDEF -XLES_MO_LENGTH = XUNDEF -XLES_ZCB = XUNDEF -XLES_CFtot = XUNDEF -XLES_CF2tot = XUNDEF -XLES_LWP = XUNDEF -XLES_LWPVAR = XUNDEF -XLES_RWP = XUNDEF -XLES_IWP = XUNDEF -XLES_SWP = XUNDEF -XLES_GWP = XUNDEF -XLES_HWP = XUNDEF -XLES_INT_TKE = XUNDEF -XLES_ZMAXCF = XUNDEF -XLES_ZMAXCF2 = XUNDEF -XLES_PRECFR = XUNDEF -XLES_ACPRR = XUNDEF -XLES_INPRR = XUNDEF -XLES_INPRC = XUNDEF -XLES_INDEP = XUNDEF -XLES_RAIN_INPRR = XUNDEF -XLES_SWU = XUNDEF -XLES_SWD = XUNDEF -XLES_LWU = XUNDEF -XLES_LWD = XUNDEF -XLES_DTHRADSW = XUNDEF -XLES_DTHRADLW = XUNDEF -XLES_RADEFF = XUNDEF -! -!------------------------------------------------------------------------------- -! -!* 9. Allocations of the normalization variables temporal series -! ---------------------------------------------------------- -! -! 9.1 Two-points correlations in I direction -! -------------------------------------- -! -ALLOCATE(XCORRi_UU (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES)) ! between u and u -ALLOCATE(XCORRi_VV (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES)) ! between v and v -ALLOCATE(XCORRi_UV (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES)) ! between u and v -ALLOCATE(XCORRi_WU (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES)) ! between w and u -ALLOCATE(XCORRi_WV (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES)) ! between w and v -ALLOCATE(XCORRi_WW (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES)) ! between w and w -ALLOCATE(XCORRi_WTh (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES)) ! between w and theta -ALLOCATE(XCORRi_ThTh (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES)) ! between theta and theta -IF (LUSERC) THEN - ALLOCATE(XCORRi_WThl (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES)) ! between w and thetal - ALLOCATE(XCORRi_ThlThl(NSPECTRA_NI,NSPECTRA_K,NLES_TIMES)) ! between thetal and thetal -ELSE - ALLOCATE(XCORRi_WThl (0,0,0)) - ALLOCATE(XCORRi_ThlThl(0,0,0)) -END IF - - -IF (LUSERV ) THEN - ALLOCATE(XCORRi_WRv (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES)) ! between w and Rv - ALLOCATE(XCORRi_ThRv (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES)) ! between theta and Rv - IF (LUSERC) THEN - ALLOCATE(XCORRi_ThlRv(NSPECTRA_NI,NSPECTRA_K,NLES_TIMES)) ! between thetal and Rv - ELSE - ALLOCATE(XCORRi_ThlRv(0,0,0)) - END IF - ALLOCATE(XCORRi_RvRv (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES)) ! between Rv and Rv -ELSE - ALLOCATE(XCORRi_WRv (0,0,0)) - ALLOCATE(XCORRi_ThRv (0,0,0)) - ALLOCATE(XCORRi_ThlRv(0,0,0)) - ALLOCATE(XCORRi_RvRv (0,0,0)) -END IF - -IF (LUSERC ) THEN - ALLOCATE(XCORRi_WRc (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES)) ! between w and Rc - ALLOCATE(XCORRi_ThRc (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES)) ! between theta and Rc - ALLOCATE(XCORRi_ThlRc(NSPECTRA_NI,NSPECTRA_K,NLES_TIMES)) ! between thetal and Rc - ALLOCATE(XCORRi_RcRc (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES)) ! between Rc and Rc -ELSE - ALLOCATE(XCORRi_WRc (0,0,0)) - ALLOCATE(XCORRi_ThRc (0,0,0)) - ALLOCATE(XCORRi_ThlRc(0,0,0)) - ALLOCATE(XCORRi_RcRc (0,0,0)) -END IF - -IF (LUSERI ) THEN - ALLOCATE(XCORRi_WRi (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES)) ! between w and Ri - ALLOCATE(XCORRi_ThRi (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES)) ! between theta and Rc - ALLOCATE(XCORRi_ThlRi(NSPECTRA_NI,NSPECTRA_K,NLES_TIMES)) ! between thetal and Rc - ALLOCATE(XCORRi_RiRi (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES)) ! between Rc and Rc -ELSE - ALLOCATE(XCORRi_WRi (0,0,0)) - ALLOCATE(XCORRi_ThRi (0,0,0)) - ALLOCATE(XCORRi_ThlRi(0,0,0)) - ALLOCATE(XCORRi_RiRi (0,0,0)) -END IF - -IF (NSV>0 ) THEN - ALLOCATE(XCORRi_WSv (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES,NSV)) ! between w and Sv - ALLOCATE(XCORRi_SvSv (NSPECTRA_NI,NSPECTRA_K,NLES_TIMES,NSV)) ! between Sv and Sv -ELSE - ALLOCATE(XCORRi_WSv (0,0,0,0)) - ALLOCATE(XCORRi_SvSv (0,0,0,0)) -END IF -! -! -XCORRi_UU = XUNDEF -XCORRi_VV = XUNDEF -XCORRi_UV = XUNDEF -XCORRi_WU = XUNDEF -XCORRi_WV = XUNDEF -XCORRi_WW = XUNDEF -XCORRi_WTh = XUNDEF -IF (LUSERC ) XCORRi_WThl= XUNDEF -IF (LUSERV ) XCORRi_WRv = XUNDEF -IF (LUSERC ) XCORRi_WRc = XUNDEF -IF (LUSERI ) XCORRi_WRi = XUNDEF -IF (NSV>0 ) XCORRi_WSv = XUNDEF -XCORRi_ThTh = XUNDEF -IF (LUSERC ) XCORRi_ThlThl= XUNDEF -IF (LUSERV ) XCORRi_ThRv = XUNDEF -IF (LUSERC ) XCORRi_ThRc = XUNDEF -IF (LUSERI ) XCORRi_ThRi = XUNDEF -IF (LUSERC ) XCORRi_ThlRv= XUNDEF -IF (LUSERC ) XCORRi_ThlRc= XUNDEF -IF (LUSERI ) XCORRi_ThlRi= XUNDEF -IF (LUSERV ) XCORRi_RvRv = XUNDEF -IF (LUSERC ) XCORRi_RcRc = XUNDEF -IF (LUSERI ) XCORRi_RiRi = XUNDEF -IF (NSV>0 ) XCORRi_SvSv = XUNDEF -! -! -! 9.2 Two-points correlations in J direction -! -------------------------------------- -! -ALLOCATE(XCORRj_UU (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES)) ! between u and u -ALLOCATE(XCORRj_VV (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES)) ! between v and v -ALLOCATE(XCORRj_UV (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES)) ! between u and v -ALLOCATE(XCORRj_WU (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES)) ! between w and u -ALLOCATE(XCORRj_WV (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES)) ! between w and v -ALLOCATE(XCORRj_WW (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES)) ! between w and w -ALLOCATE(XCORRj_WTh (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES)) ! between w and theta -ALLOCATE(XCORRj_ThTh (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES)) ! between theta and theta -IF (LUSERC) THEN - ALLOCATE(XCORRj_WThl (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES)) ! between w and thetal - ALLOCATE(XCORRj_ThlThl(NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES)) ! between thetal and thetal -ELSE - ALLOCATE(XCORRj_WThl (0,0,0)) - ALLOCATE(XCORRj_ThlThl(0,0,0)) -END IF - -IF (LUSERV ) THEN - ALLOCATE(XCORRj_WRv (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES)) ! between w and Rv - ALLOCATE(XCORRj_ThRv (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES)) ! between theta and Rv - IF (LUSERC) THEN - ALLOCATE(XCORRj_ThlRv(NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES)) ! between thetal and Rv - ELSE - ALLOCATE(XCORRj_ThlRv(0,0,0)) - END IF - ALLOCATE(XCORRj_RvRv (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES)) ! between Rv and Rv -ELSE - ALLOCATE(XCORRj_WRv (0,0,0)) - ALLOCATE(XCORRj_ThRv (0,0,0)) - ALLOCATE(XCORRj_ThlRv(0,0,0)) - ALLOCATE(XCORRj_RvRv (0,0,0)) -END IF - -IF (LUSERC ) THEN - ALLOCATE(XCORRj_WRc (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES)) ! between w and Rc - ALLOCATE(XCORRj_ThRc (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES)) ! between theta and Rc - ALLOCATE(XCORRj_ThlRc(NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES)) ! between thetal and Rc - ALLOCATE(XCORRj_RcRc (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES)) ! between Rc and Rc -ELSE - ALLOCATE(XCORRj_WRc (0,0,0)) - ALLOCATE(XCORRj_ThRc (0,0,0)) - ALLOCATE(XCORRj_ThlRc(0,0,0)) - ALLOCATE(XCORRj_RcRc (0,0,0)) -END IF - -IF (LUSERI ) THEN - ALLOCATE(XCORRj_WRi (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES)) ! between w and Ri - ALLOCATE(XCORRj_ThRi (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES)) ! between theta and Rc - ALLOCATE(XCORRj_ThlRi(NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES)) ! between thetal and Rc - ALLOCATE(XCORRj_RiRi (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES)) ! between Rc and Rc -ELSE - ALLOCATE(XCORRj_WRi (0,0,0)) - ALLOCATE(XCORRj_ThRi (0,0,0)) - ALLOCATE(XCORRj_ThlRi(0,0,0)) - ALLOCATE(XCORRj_RiRi (0,0,0)) -END IF - -IF (NSV>0 ) THEN - ALLOCATE(XCORRj_WSv (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES,NSV)) ! between w and Sv - ALLOCATE(XCORRj_SvSv (NSPECTRA_NJ,NSPECTRA_K,NLES_TIMES,NSV)) ! between Sv and Sv -ELSE - ALLOCATE(XCORRj_WSv (0,0,0,0)) - ALLOCATE(XCORRj_SvSv (0,0,0,0)) -END IF -! -! -XCORRj_UU = XUNDEF -XCORRj_VV = XUNDEF -XCORRj_UV = XUNDEF -XCORRj_WU = XUNDEF -XCORRj_WV = XUNDEF -XCORRj_WW = XUNDEF -XCORRj_WTh = XUNDEF -IF (LUSERC ) XCORRj_WThl= XUNDEF -IF (LUSERV ) XCORRj_WRv = XUNDEF -IF (LUSERC ) XCORRj_WRc = XUNDEF -IF (LUSERI ) XCORRj_WRi = XUNDEF -IF (NSV>0 ) XCORRj_WSv = XUNDEF -XCORRj_ThTh = XUNDEF -IF (LUSERC ) XCORRj_ThlThl= XUNDEF -IF (LUSERV ) XCORRj_ThRv = XUNDEF -IF (LUSERC ) XCORRj_ThRc = XUNDEF -IF (LUSERI ) XCORRj_ThRi = XUNDEF -IF (LUSERC ) XCORRj_ThlRv= XUNDEF -IF (LUSERC ) XCORRj_ThlRc= XUNDEF -IF (LUSERI ) XCORRj_ThlRi= XUNDEF -IF (LUSERV ) XCORRj_RvRv = XUNDEF -IF (LUSERC ) XCORRj_RcRc = XUNDEF -IF (LUSERI ) XCORRj_RiRi = XUNDEF -IF (NSV>0 ) XCORRj_SvSv = XUNDEF -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE INI_LES_n diff --git a/src/mesonh/ext/ini_radar.f90 b/src/mesonh/ext/ini_radar.f90 deleted file mode 100644 index dbc94a726..000000000 --- a/src/mesonh/ext/ini_radar.f90 +++ /dev/null @@ -1,234 +0,0 @@ -!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. -!----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source$ $Revision$ -! masdev4_7 BUG1 2007/06/15 17:47:18 -!----------------------------------------------------------------- -! ######################## - MODULE MODI_INI_RADAR -! ######################## -! -INTERFACE - SUBROUTINE INI_RADAR (HPRISTINE_ICE ) -! -CHARACTER (LEN=4), INTENT(IN) :: HPRISTINE_ICE ! Indicator of ice crystal characteristics -! -! -END SUBROUTINE INI_RADAR -! -END INTERFACE -! -END MODULE MODI_INI_RADAR -! ########################################################### - SUBROUTINE INI_RADAR ( HPRISTINE_ICE ) -! ########################################################### -! -!!**** *INI_RADAR * -!! -!! PURPOSE -!! ------- -!! The purpose of this routine is to initialize the constants used to -!! compute radar reflectivity (radar_rain_ice.f90 or radar_simulator.f90) -!! for DIAG after PREP_REAL_CASE with AROME file (CCLOUD=NONE) -!! -!!** METHOD -!! ------ -!! The constants useful to radar are initialized to their -!! numerical values as in ini_rain_ice.f90 for ICE3 -!! -!! 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_RAIN_ICE_DESCR -!! -!! -!! AUTHOR -!! ------ -!! G. TANGUY * CNRM * -!! -!! MODIFICATIONS -!! ------------- -!! Original 27/10/2009 -!! P.Scheffknecht 22/04/2015: test missing on already allocated XRTMIN -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_CST -USE MODD_RAIN_ICE_DESCR -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -! -CHARACTER (LEN=4), INTENT(IN) :: HPRISTINE_ICE ! Indicator of ice crystal caracteristics -! -!------------------------------------------------------------------------------- -! -! -! -!* 1.1 Raindrop characteristics -! -! -! -XAR = (XPI/6.0)*XRHOLW -XBR = 3.0 -XCR = 842. -XDR = 0.8 -XCCR = 8.E6 -! -!* 1.2 Ice crystal characteristics -! -! -SELECT CASE (HPRISTINE_ICE) - CASE('PLAT') - XAI = 0.82 ! Plates - XBI = 2.5 ! Plates - XC_I = 800. ! Plates - XDI = 1.0 ! Plates - CASE('COLU') - XAI = 2.14E-3 ! Columns - XBI = 1.7 ! Columns - XC_I = 2.1E5 ! Columns - XDI = 1.585 ! Columns - CASE('BURO') - XAI = 44.0 ! Bullet rosettes - XBI = 3.0 ! Bullet rosettes - XC_I = 4.3E5 ! Bullet rosettes - XDI = 1.663 ! Bullet rosettes -END SELECT -! -! -!* 1.3 Snowflakes/aggregates characteristics -! -! -XAS = 0.02 -XBS = 1.9 -XCS = 5.1 -XDS = 0.27 -XCCS = 5.0 -XCXS = 1.0 -! -!* 1.4 Graupel/Frozen drop characteristics -! -! -XAG = 19.6 -XBG = 2.8 -XCG = 124. -XDG = 0.66 -XCCG = 5.E5 -XCXG = -0.5 -! -!* 1.5 Hailstone characteristics -! -! -XAH = 470. -XBH = 3.0 -XCH = 207. -XDH = 0.64 -XCCH = 4.E4 -XCXH = -1.0 -! -!------------------------------------------------------------------------------- -! -!* 2. DIMENSIONAL DISTRIBUTIONS OF THE SPECIES -! ---------------------------------------- -! -!* 2.1 Raindrops distribution -! -XALPHAR = 1.0 ! Exponential law -XNUR = 1.0 ! Exponential law -! -!* 2.2 Ice crystal distribution -! -XALPHAI = 3.0 ! Gamma law for the ice crystal volume -XNUI = 3.0 ! Gamma law with little dispersion -! -XALPHAS = 1.0 ! Exponential law -XNUS = 1.0 ! Exponential law -! -XALPHAG = 1.0 ! Exponential law -XNUG = 1.0 ! Exponential law -! -XALPHAH = 1.0 ! Gamma law -XNUH = 8.0 ! Gamma law with little dispersion -! -!* 2.3 Constants for shape parameter -! -XLBEXR = 1.0/(-1.0-XBR) -XLBR = ( XAR*XCCR*MOMG(XALPHAR,XNUR,XBR) )**(-XLBEXR) -! -XLBEXI = 1.0/(-XBI) -XLBI = ( XAI*MOMG(XALPHAI,XNUI,XBI) )**(-XLBEXI) -! -XNS = 1.0/(XAS*MOMG(XALPHAS,XNUS,XBS)) -XLBEXS = 1.0/(XCXS-XBS) -XLBS = ( XAS*XCCS*MOMG(XALPHAS,XNUS,XBS) )**(-XLBEXS) -! -XLBEXG = 1.0/(XCXG-XBG) -XLBG = ( XAG*XCCG*MOMG(XALPHAG,XNUG,XBG) )**(-XLBEXG) -! -XLBEXH = 1.0/(XCXH-XBH) -XLBH = ( XAH*XCCH*MOMG(XALPHAH,XNUH,XBH) )**(-XLBEXH) -! -!* 2.4 Minimal values allowed for the mixing ratios -! ICE3 -IF(.NOT.ASSOCIATED(XRTMIN)) THEN - CALL RAIN_ICE_DESCR_ALLOCATE(6) -END IF -! -XRTMIN(1) = 1.0E-20 -XRTMIN(2) = 1.0E-20 -XRTMIN(3) = 1.0E-20 -XRTMIN(4) = 1.0E-20 -XRTMIN(5) = 1.0E-15 -XRTMIN(6) = 1.0E-15 - -! -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_RADAR - - diff --git a/src/mesonh/ext/ini_segn.f90 b/src/mesonh/ext/ini_segn.f90 deleted file mode 100644 index c581f7c01..000000000 --- a/src/mesonh/ext/ini_segn.f90 +++ /dev/null @@ -1,494 +0,0 @@ -!MNH_LIC Copyright 1994-2021 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. -!----------------------------------------------------------------- -! ################### - MODULE MODI_INI_SEG_n -! ################### -! -INTERFACE -! -SUBROUTINE INI_SEG_n(KMI,TPINIFILE,HINIFILEPGD,PTSTEP_ALL) -! -USE MODD_IO, ONLY : TFILEDATA -! -INTEGER, INTENT(IN) :: KMI !Model index -TYPE(TFILEDATA), POINTER, INTENT(OUT) :: TPINIFILE !Initial file -CHARACTER (LEN=28), INTENT(OUT) :: HINIFILEPGD -REAL,DIMENSION(:), INTENT(INOUT) :: PTSTEP_ALL ! Time STEP of ALL models -! -END SUBROUTINE INI_SEG_n -! -END INTERFACE -! -END MODULE MODI_INI_SEG_n -! -! -! -! -! ############################################################# - SUBROUTINE INI_SEG_n(KMI,TPINIFILE,HINIFILEPGD,PTSTEP_ALL) -! ############################################################# -! -!!**** *INI_SEG_n * - routine to read and update the descriptor files for -!! model KMI -!! -!! PURPOSE -!! ------- -! The purpose of this routine is to read the descriptor files in the -! following order : -! - DESFM file which gives informations about the initial file -! (i.e. the description of the segment that produced the initial file -! or the description of the preinitialisation that created the initial file) -! - EXSEG file which gives informations about the segment to perform. -! -! Informations in EXSEG file are completed by DESFM file informations -! and if the informations are not in DESFM file, they are set -! to default values. -! -! The descriptor file EXSEG corresponding to the segment of simulation -! to be performed, is then updated with the combined informations. -! We also store in the updated EXSEG file, the informations on the status -! of the different variables ( skip, init, read) in the namelist NAM_GETn, -! which will be read in the INI_MODELn routine to properly initiliaze the -! model n. Except this last namelist, the informations written in this -! EXSEG file, will be identical to the NAMELIST section of the descriptive -! part of the FM files containing the model outputs. -! -! In order not to duplicate the routines called by ini_seg, we use the -! modules modd, corresponding to the first model to store the informations -! read on the different files ( DESFM and EXSEG ). The final filling of -! the modules modd (MODD_CONFn ....) will be realized in the subroutine -! INI_MODELn. The goal of the INI_SEG_n part of the initialization is to -! built the final EXSEG, which will be associated to the LFI files -! generated during the segment ( and therefore not to fill the modd). -! -! -!!** METHOD -!! ------ -!! For a nested model of index KMI : -!! - Logical unit numbers are associated to output-listing file and -!! descriptor EXSEG file by FMATTR. Then these files are opened. -!! The name of the initial file is read in EXSEG file. -!! - Default values are supplied for variables in descriptor files -!! (by DEFAULT_DESFM). -!! - The Initial file (LFIFM + DESFM) is opened by IO_File_open. -!! - The descriptor DESFM file is read (by READ_DESFM_n). -!! - The descriptor file EXSEG is read (by READ_EXSEG_n) and coherence -!! between the initial file and the description of segment is also checked -!! in this routine. -!! - If there is more than one model the EXSEG file is updated -!! (by WRITE_DESFM$n). This routine prints also EXSEG content on -!! output-listing. -!! - If there is only one model (i.e. no grid-nesting), -!! EXSEG file is also closed (logical unit number associated with this -!! file is also released by FMFREE). -!! -!! -!! -!! EXTERNAL -!! -------- -!! FMATTR : to associate a logical unit number to a file -!! IO_File_open : to open descriptor file or LFI file -!! DEFAULT_DESFM1: to set default values -!! READ_DESFM_n : to read a DESFM file -!! READ_EXSEG_n : to read a EXSEG file -!! WRITE_DESFM1 : to write the DESFM part of the future outputs -!! FMFREE : to release a logical unit number linked to a file -!! -!! Module MODI_DEFAULT_DESFM : Interface for routine DEFAULT_DESFM -!! Module MODI_READ_DESFM_n : Interface for routine READ_DESFM_n -!! Module MODI_READ_EXSEG_n : Interface for routine READ_EXSEG_n -!! Module MODI_WRITE_DESFM1 : Interface for routine WRITE_DESFM1 -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! Module MODD_LUNIT : contains names and logical unit numbers -!! -!! Module MODD_CONF : contains configuration variables -!! CCONF : Configuration of models -!! NMODEL : Number of nested models -!! NVERB : Level of informations on output-listing -!! 0 for minimum of prints -!! 5 for intermediate level of prints -!! 10 for maximum of prints -!! -!! Module MODN_LUNIT1 : contains declarations of namelist NAMLUNITMN -!! and module MODD_LUNIT1 -!! -!! REFERENCE -!! --------- -!! Book2 of documentation (routine INI_SEG) -!! -!! -!! AUTHOR -!! ------ -!! V. Ducrocq * Meteo France * -!! -!! MODIFICATIONS -!! ------------- -!! Original 07/06/94 -!! Modification 26/10/94 remove the NAM_GETn from the namelist present -!! in the EXSEG file (J.Stein) -!! 11/01/95 change the read_exseg and desfm CALLS to add -!! the G1D switch -!! 15/02/95 add the HTURBLEN information (J. Cuxart) -!! 18/08/95 Time STEP change (J. P. Lafore) -!! 02/10/95 add the radiation control (J. Stein) -!! 18/03/96 remove the no write option for WRITE_DESFM -!! (J. Stein) -!! 11/04/96 add the ice conc. control (J.-P. Pinty) -!! 11/01/97 add the deep convection control (J.-P. Pinty) -!! 17/07/96 correction for WRITE_DESFM1 call (J. P. Lafore) -!! 22/07/96 PTSTEP_ALL introduction for nesting (J. P. Lafore) -!! 7/08/98 // (V. Ducrocq) -!! 02/08/99 remove unused argument for read_desfm (J. Stein) -!! 15/03/99 test on execution program (V. Masson) -!! 15/11/00 Add YCLOUD (J.-P. Pinty) -!! 01/03/01 Add GUSECHEM (D. Gazen) -!! 15/10/01 namelists in different orders (I.Mallet) -!! 25/11/02 Add YELEC (P. Jabouille) -!! 01/2004 externalization of surface (V. Masson) -!! 01/2005 add GDUST, GSALT, and GORILAM (P. Tulet) -!! 04/2010 add GUSECHAQ, GCH_PH (M. Leriche) -!! 09/2010 add GUSECHIC (M. Leriche) -!! 02/2012 add GFOREFIRE (Pialat/Tulet) -!! 05/2014 missing reading of IMASDEV before COUPLING -!! test (Escobar) -!! 10/02/15 remove ABORT in parallel case for SPAWNING -!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 -!! 01/2015 add GLNOX_EXPLICIT (C. Barthe) -!! 04/2016 add ABORT if CINIFILEPGD is not specified (G.Delautier) -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -!! 07/2017 add GBLOWSNOW (V. Vionnet) -! P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list -! P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables -! P. Wautelet 19/06/2019: add Fieldlist_nmodel_resize subroutine + provide KMODEL to INI_FIELD_LIST when known -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -USE MODD_CONF -USE MODD_CONF_n, ONLY: CSTORAGE_TYPE -USE MODN_CONFZ -USE MODD_DYN_n, ONLY : LOCEAN -USE MODD_DYN -USE MODD_IO, ONLY: NVERB_FATAL, NVERB_WARNING, TFILE_OUTPUTLISTING, TFILEDATA -USE MODD_LES, ONLY: LES_ASSOCIATE -USE MODD_LUNIT -USE MODD_LUNIT_n, ONLY: CINIFILE_n=> CINIFILE, TINIFILE_n => TINIFILE, CINIFILEPGD_n=> CINIFILEPGD, TLUOUT, LUNIT_MODEL -USE MODD_PARAM_n, ONLY: CSURF -USE MODD_PARAM_ICE -USE MODD_PARAMETERS -USE MODD_REF, ONLY: LBOUSS -! -use mode_field, only: Fieldlist_nmodel_resize, Ini_field_list, Ini_field_scalars -USE MODE_IO_FIELD_READ, only: IO_Field_read -USE MODE_IO_FILE, ONLY: IO_File_close, IO_File_open -USE MODE_IO, only: IO_Config_set -USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list -USE MODE_MSG -USE MODE_POS -! -USE MODI_DEFAULT_DESFM_n -USE MODI_READ_DESFM_n -USE MODI_READ_EXSEG_n -USE MODI_WRITE_DESFM_n -! -USE MODN_CONFIO, ONLY: NAM_CONFIO -USE MODN_LUNIT_n -USE MODN_FIRE -! -IMPLICIT NONE -! -!* 0.1 declarations of arguments -! -INTEGER, INTENT(IN) :: KMI !Model index -TYPE(TFILEDATA), POINTER, INTENT(OUT) :: TPINIFILE !Initial file -CHARACTER (LEN=28), INTENT(OUT) :: HINIFILEPGD -REAL,DIMENSION(:), INTENT(INOUT) :: PTSTEP_ALL ! Time STEP of ALL models -! -!* 0.1 declarations of local variables -! -LOGICAL :: GFOUND ! Return code when searching namelist -CHARACTER (LEN=28) :: YINIFILE ! name of initial file -CHARACTER (LEN=2) :: YMI ! string for model index -INTEGER :: ILUOUT ! Logical unit number - ! associated with TLUOUT - ! -INTEGER :: IRESP,ILUSEG ! File management variables -CHARACTER (LEN=5) :: YCONF ! Local variables which have -LOGICAL :: GFLAT ! the same definition as the -LOGICAL :: GUSERV,GUSERC,GUSERR,GUSERI ! variables in module MODD_CONF, -LOGICAL :: GUSERS,GUSERG,GUSERH,GUSECI ! MODD_CONFn, MODD_PARAMn, -LOGICAL :: GUSECHEM ! flag for chemistry -LOGICAL :: GUSECHAQ ! flag for aq. phase chemistry -LOGICAL :: GUSECHIC ! flag for ice phase chemistry -LOGICAL :: GCH_PH ! flag for pH -LOGICAL :: GCH_CONV_LINOX -LOGICAL :: GDUST -LOGICAL,DIMENSION(JPMODELMAX) :: GDEPOS_DST, GDEPOS_SLT, GDEPOS_AER -LOGICAL :: GSALT -LOGICAL :: GORILAM -LOGICAL :: GLG -LOGICAL :: GPASPOL -LOGICAL :: GFIRE -#ifdef MNH_FOREFIRE -LOGICAL :: GFOREFIRE -#endif -LOGICAL :: GCONDSAMP -LOGICAL :: GBLOWSNOW -LOGICAL :: GCHTRANS -LOGICAL :: GLNOX_EXPLICIT ! flag for LNOx - ! These variables - ! are used to locally store -INTEGER :: ISV ! the value read in DESFM -INTEGER :: IRIMX,IRIMY ! number of points for the - ! horizontal relaxation -CHARACTER (LEN=4) :: YTURB ! file in order to check the -CHARACTER (LEN=4) :: YRAD ! corresponding informations -CHARACTER (LEN=4) :: YTOM ! read in EXSEG file. -LOGICAL :: GRMC01 -CHARACTER (LEN=4) :: YDCONV -CHARACTER (LEN=4) :: YSCONV -CHARACTER (LEN=4) :: YCLOUD -CHARACTER (LEN=4) :: YELEC -CHARACTER (LEN=3) :: YEQNSYS -TYPE(TFILEDATA),POINTER :: TZFILE_DES -! -TPINIFILE => NULL() -TZFILE_DES => NULL() -!------------------------------------------------------------------------------- -! -!* 1. OPEN OUPTUT-LISTING FILE AND EXSEG FILE -! --------------------------------------- -! -WRITE(YMI,'(I2.0)') KMI -CALL IO_File_add2list(LUNIT_MODEL(KMI)%TLUOUT,'OUTPUT_LISTING'//ADJUSTL(YMI),'OUTPUTLISTING','WRITE') -TLUOUT => LUNIT_MODEL(KMI)%TLUOUT !Necessary because TLUOUT was initially pointing to NULL -CALL IO_File_open(TLUOUT) -! -!Set output file for PRINT_MSG -TFILE_OUTPUTLISTING => TLUOUT -! -ILUOUT=TLUOUT%NLU -! -WRITE(UNIT=ILUOUT,FMT='(50("*"),/,"*",17X,"MODEL ",I1," LISTING",16X,"*",/, & - & 50("*"))') KMI -! -IF (CPROGRAM=='MESONH') THEN - CALL IO_File_add2list(TZFILE_DES,'EXSEG'//TRIM(ADJUSTL(YMI))//'.nam','NML','READ') - CALL IO_File_open(TZFILE_DES) -! -!* 1.3 SPAWNING or SPEC or REAL program case -! --------------------- -! -ELSE IF (CPROGRAM=='SPAWN ' .OR. CPROGRAM=='REAL '.OR. CPROGRAM=='SPEC ') THEN - YINIFILE = CINIFILE_n - HINIFILEPGD = CINIFILEPGD_n - CALL IO_File_add2list(TPINIFILE,TRIM(YINIFILE),'MNH','READ',KLFITYPE=2,KLFIVERB=NVERB) - CALL IO_File_open(TPINIFILE) - TZFILE_DES => TPINIFILE%TDESFILE -! -!* 1.3bis DIAG program case -! -ELSE IF (CPROGRAM=='DIAG ') THEN - YINIFILE = CINIFILE_n - HINIFILEPGD = CINIFILEPGD_n - CALL IO_File_add2list(TINIFILE_n,TRIM(YINIFILE),'MNH','READ',KLFITYPE=2,KLFIVERB=NVERB) - CALL IO_File_open(TINIFILE_n) - TPINIFILE => TINIFILE_n - TZFILE_DES => TPINIFILE%TDESFILE -! -!* 1.4 Other program cases -! ------------------- -! -ELSE -!callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_SEG_n','should not be called for CPROGRAM='//TRIM(CPROGRAM)) -ENDIF -! -ILUSEG = TZFILE_DES%NLU -! -!------------------------------------------------------------------------------- -! -!* 2. SET DEFAULT VALUES -! ------------------ -! -CALL PARAM_ICE_ASSOCIATE() -CALL LES_ASSOCIATE() -CALL DEFAULT_DESFM_n(KMI) -! -!------------------------------------------------------------------------------- -! -!* 3. READ INITIAL FILE NAME AND OPEN INITIAL FILE -! -------------------------------------------- -! -CALL POSNAM(ILUSEG,'NAM_LUNITN',GFOUND) -IF (GFOUND) THEN - CALL INIT_NAM_LUNITn - READ(UNIT=ILUSEG,NML=NAM_LUNITn) - CALL UPDATE_NAM_LUNITn - IF (LEN_TRIM(CINIFILEPGD)==0 .AND. CSURF=='EXTE') THEN - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_SEG_n','error in namelist NAM_LUNITn: you need to specify CINIFILEPGD') - ENDIF -END IF - -IF (CPROGRAM=='MESONH') THEN - IF (KMI.EQ.1) THEN - CALL POSNAM(ILUSEG,'NAM_CONFZ',GFOUND,ILUOUT) - IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CONFZ) - CALL POSNAM(ILUSEG,'NAM_CONFIO',GFOUND,ILUOUT) - IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CONFIO) - CALL IO_Config_set() - ! read Blaze namelist to get NREFINX and NREFINY before INI_FIELD_LIST - CALL POSNAM(ILUSEG,'NAM_FIRE',GFOUND,ILUOUT) - IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_FIRE) - END IF - HINIFILEPGD=CINIFILEPGD_n - YINIFILE=CINIFILE_n - - CALL IO_File_add2list(TPINIFILE,TRIM(YINIFILE),'MNH','READ',KLFITYPE=2,KLFIVERB=NVERB) - TINIFILE_n => TPINIFILE !Necessary because TINIFILE was initially pointing to NULL - CALL IO_File_open(TPINIFILE) -END IF -! -!------------------------------------------------------------------------------- -! -!* 4. READ DESFM FILE -! --------------- -! -CALL READ_DESFM_n(KMI,TPINIFILE,YCONF,GFLAT,GUSERV,GUSERC, & - GUSERR,GUSERI,GUSECI,GUSERS,GUSERG,GUSERH,GUSECHEM,GUSECHAQ,& - GUSECHIC,GCH_PH,GCH_CONV_LINOX,GSALT,GDEPOS_SLT,GDUST, & - GDEPOS_DST, GCHTRANS, GORILAM, & - GDEPOS_AER, GLG, GPASPOL,GFIRE, & -#ifdef MNH_FOREFIRE - GFOREFIRE, & -#endif - GLNOX_EXPLICIT, & - GCONDSAMP,GBLOWSNOW, IRIMX,IRIMY,ISV, & - YTURB,YTOM,GRMC01,YRAD,YDCONV,YSCONV,YCLOUD,YELEC,YEQNSYS ) -! -!------------------------------------------------------------------------------- -! -!* 5. Initialize fieldlist -! -------------------- -! -IF (KMI==1) THEN !Do this only 1 time - IF (CPROGRAM=='SPAWN ') THEN - CALL INI_FIELD_LIST(2) - ELSE IF (CPROGRAM=='DIAG ' .OR. CPROGRAM=='SPEC ') THEN - CALL INI_FIELD_LIST(1) - ELSE IF (CPROGRAM/='REAL ' .AND. CPROGRAM/='IDEAL ' ) THEN - CALL INI_FIELD_LIST() - END IF - IF (CPROGRAM=='SPAWN ' .OR. CPROGRAM=='DIAG ' .OR. CPROGRAM=='SPEC ' .OR. CPROGRAM=='MESONH') THEN - CALL INI_FIELD_SCALARS() - END IF -END IF -! -!------------------------------------------------------------------------------- -! -!* 6. READ in the LFI file SOME VARIABLES of MODD_CONF -! ------------------------------------------------ -! -IF (CPROGRAM=='MESONH' .OR. CPROGRAM=='SPAWN ') THEN - IF ((TPINIFILE%NMNHVERSION(1)==4 .AND. TPINIFILE%NMNHVERSION(2)>9) .OR. TPINIFILE%NMNHVERSION(1)>4) THEN - CALL IO_Field_read(TPINIFILE,'COUPLING',LCOUPLING) - IF (LCOUPLING) THEN - WRITE(ILUOUT,*) 'Error with the initial file' - WRITE(ILUOUT,*) 'The file',YINIFILE,' was created with LCOUPLING=.TRUE.' - WRITE(ILUOUT,*) 'You can not use it as initial file, only as coupling file' - WRITE(ILUOUT,*) 'Run PREP_REAL_CASE with LCOUPLING=.FALSE.' - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_SEG_n','') - ENDIF - ENDIF -END IF -! -! Read the storage type - CALL IO_Field_read(TPINIFILE,'STORAGE_TYPE',CSTORAGE_TYPE,IRESP) - IF (IRESP /= 0) THEN - WRITE(ILUOUT,FMT=9002) 'STORAGE_TYPE',IRESP -!callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_SEG_n','') - END IF -IF (KMI == 1) THEN -! Read the geometry kind - CALL IO_Field_read(TPINIFILE,'CARTESIAN',LCARTESIAN) -! Read the thinshell approximation - CALL IO_Field_read(TPINIFILE,'THINSHELL',LTHINSHELL) -! - IF ((TPINIFILE%NMNHVERSION(1)==4 .AND. TPINIFILE%NMNHVERSION(2)>=6) .OR. TPINIFILE%NMNHVERSION(1)>4) THEN - CALL IO_Field_read(TPINIFILE,'L1D',L1D,IRESP) - IF (IRESP/=0) L1D=.FALSE. -! - CALL IO_Field_read(TPINIFILE,'L2D',L2D,IRESP) - IF (IRESP/=0) L2D=.FALSE. -! - CALL IO_Field_read(TPINIFILE,'PACK',LPACK,IRESP) - IF (IRESP/=0) LPACK=.TRUE. - ELSE - L1D=.FALSE. - L2D=.FALSE. - LPACK=.TRUE. - END IF - IF ((TPINIFILE%NMNHVERSION(1)==4 .AND. TPINIFILE%NMNHVERSION(2)>=10) .OR. TPINIFILE%NMNHVERSION(1)>4) THEN - CALL IO_Field_read(TPINIFILE,'LBOUSS',LBOUSS) - END IF -! -END IF -! -!------------------------------------------------------------------------------- -! -!* 7. READ EXSEG FILE -! --------------- -! We pass by arguments the informations read in DESFM descriptor to the -! routine which read related informations in the EXSEG descriptor in order to -! check coherence between both informations. -! -CALL IO_Field_read(TPINIFILE,'LOCEAN',LOCEAN,IRESP) -IF ( IRESP /= 0 ) LOCEAN = .FALSE. -! -CALL READ_EXSEG_n(KMI,TZFILE_DES,YCONF,GFLAT,GUSERV,GUSERC, & - GUSERR,GUSERI,GUSECI,GUSERS,GUSERG,GUSERH,GUSECHEM, & - GUSECHAQ,GUSECHIC,GCH_PH, & - GCH_CONV_LINOX,GSALT,GDEPOS_SLT,GDUST,GDEPOS_DST,GCHTRANS, & - GORILAM,GDEPOS_AER,GLG,GPASPOL,GFIRE, & -#ifdef MNH_FOREFIRE - GFOREFIRE, & -#endif - GLNOX_EXPLICIT, & - GCONDSAMP,GBLOWSNOW, IRIMX,IRIMY,ISV, & - YTURB,YTOM,GRMC01,YRAD,YDCONV,YSCONV,YCLOUD,YELEC,YEQNSYS, & - PTSTEP_ALL,CSTORAGE_TYPE,CINIFILEPGD_n ) -! -if ( cprogram == 'MESONH' .and. kmi == 1 ) then !Do this only once - call Fieldlist_nmodel_resize(NMODEL) -end if -! -IF (CPROGRAM=='SPAWN ' .OR. CPROGRAM=='DIAG ' .OR. CPROGRAM=='SPEC ' & - .OR. CPROGRAM=='REAL ') THEN - CINIFILE_n = YINIFILE - CCPLFILE(:) = ' ' - NMODEL=1 - LSTEADYLS=.TRUE. -END IF -! -IF (CPROGRAM=='MESONH') THEN - HINIFILEPGD=CINIFILEPGD_n -END IF -!------------------------------------------------------------------------------- -! -!* 7. CLOSE FILES -! ------------ -! -IF (CPROGRAM=='MESONH') CALL IO_File_close(TZFILE_DES) -! -!------------------------------------------------------------------------------- -9002 FORMAT(/,'FATAL ERROR IN INI_SEG_n: pb to read ',A16,' IRESP=',I3) -! -END SUBROUTINE INI_SEG_n diff --git a/src/mesonh/ext/les_cloud_masksn.f90 b/src/mesonh/ext/les_cloud_masksn.f90 deleted file mode 100644 index 10e9e4093..000000000 --- a/src/mesonh/ext/les_cloud_masksn.f90 +++ /dev/null @@ -1,419 +0,0 @@ -!MNH_LIC Copyright 2006-2020 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. -!----------------------------------------------------------------- -! ####################### - SUBROUTINE LES_CLOUD_MASKS_n -! ####################### -! -! -!!**** *LES_MASKS_n* initializes the masks for clouds -!! -!! -!! PURPOSE -!! ------- -!! -!! EXTERNAL -!! -------- -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! AUTHOR -!! ------ -!! V. Masson -!! -!! MODIFICATIONS -!! ------------- -!! Original 07/2006 -!! P. Aumond 10/2009 Add possibility of user maskS -!! F.Couvreux 06/2011 : Conditional sampling -!! C.Lac 10/2014 : Correction on user masks -!! Q.Rodier 05/2019 : Missing parallelization -!! -!! -------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_LES -USE MODD_LES_n -USE MODD_FIELD_n -USE MODD_CONF_n -USE MODD_CST , ONLY : XRD, XRV -USE MODD_NSV , ONLY : NSV_CSBEG, NSV_CSEND, NSV_CS -USE MODD_GRID_n , ONLY : XZHAT -USE MODD_CONDSAMP -! -USE MODE_ll -! -USE MODI_LES_VER_INT -USE MODI_LES_MEAN_ll -USE MODI_SHUMAN -! -IMPLICIT NONE -! -! -! 0.2 declaration of local variables -! -INTEGER :: JK ! vertical loop counter -INTEGER :: JI ! loop index on masks -INTEGER :: IIU, IJU,IIB,IJB,IIE,IJE ! hor. indices -INTEGER :: IKU, KBASE, KTOP ! ver. index -INTEGER :: IRR, IRRC, IRRR, IRRI, IRRS, IRRG ! moist variables indices -INTEGER :: JSV ! ind of scalars -! -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRT ! total water -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTHV ! Virtual potential temperature -! -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZW_LES ! W on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRC_LES ! Rc on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRI_LES ! Ri on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRT_LES ! Rt on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTHV_LES ! thv on LES vertical grid -REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZSV_LES ! thv on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTHV_ANOM ! thv-thv_mean on LES vertical grid -REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZSV_ANOM ! sv-sv_mean -REAL, DIMENSION(:,:), ALLOCATABLE :: ZSTD_SV -REAL, DIMENSION(:,:), ALLOCATABLE :: ZSTD_SVTRES ! threshold of sv -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZWORK3D,ZWORK3DB -REAL, DIMENSION(:), ALLOCATABLE :: ZWORK1D -REAL, DIMENSION(:), ALLOCATABLE :: ZMEANRC -! -! -!------------------------------------------------------------------------------- -! -CALL GET_DIM_EXT_ll('B',IIU,IJU) -CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) -! -IKU = SIZE(XTHT,3) -! -!------------------------------------------------------------------------------- -! -!* 1.0 Thermodynamical computations -! ---------------------------- -! -ALLOCATE(ZRT (IIU,IJU,IKU)) -ALLOCATE(ZMEANRC (IKU)) -ZRT = 0. -! -IRR=0 -IF (LUSERV) THEN - IRR=IRR+1 - ZRT = ZRT + XRT(:,:,:,1) -END IF -IF (LUSERC) THEN - IRR=IRR+1 - IRRC=IRR - ZRT = ZRT + XRT(:,:,:,IRRC) -END IF -IF (LUSERR) THEN - IRR=IRR+1 - IRRR=IRR - ZRT = ZRT + XRT(:,:,:,IRRR) -END IF -IF (LUSERI) THEN - IRR=IRR+1 - IRRI=IRR - ZRT = ZRT + XRT(:,:,:,IRRI) -END IF -IF (LUSERS) THEN - IRR=IRR+1 - IRRS=IRR - ZRT = ZRT + XRT(:,:,:,IRRS) -END IF -IF (LUSERG) THEN - IRR=IRR+1 - IRRG=IRR - ZRT = ZRT + XRT(:,:,:,IRRG) -END IF -! -! -!* computes fields on the LES grid in order to compute masks -! -ALLOCATE(ZTHV (IIU,IJU,IKU)) -ZTHV = XTHT -IF (LUSERV) ZTHV=ZTHV*(1.+XRV/XRD*XRT(:,:,:,1))/(1.+ZRT(:,:,:)) -! -!------------------------------------------------------------------------------- -! -!* 2.0 Fields on LES grid -! ------------------ -! -!* allocates fields on the LES grid -! -! -ALLOCATE(ZW_LES (IIU,IJU,NLES_K)) -ALLOCATE(ZRC_LES (IIU,IJU,NLES_K)) -ALLOCATE(ZRI_LES (IIU,IJU,NLES_K)) -ALLOCATE(ZRT_LES (IIU,IJU,NLES_K)) -ALLOCATE(ZTHV_LES (IIU,IJU,NLES_K)) -ALLOCATE(ZTHV_ANOM(IIU,IJU,NLES_K)) -ALLOCATE(ZSV_LES (IIU,IJU,NLES_K,NSV_CS)) -ALLOCATE(ZSV_ANOM(IIU,IJU,NLES_K,NSV_CS)) -ALLOCATE(ZSTD_SV(NLES_K,NSV_CS)) -ALLOCATE(ZSTD_SVTRES(NLES_K,NSV_CS)) -ALLOCATE(ZWORK1D(NLES_K)) -ALLOCATE(ZWORK3D(IIU,IJU,IKU)) -ALLOCATE(ZWORK3DB(IIU,IJU,NLES_K)) -! -ZWORK1D=0. -ZWORK3D=0. -ZWORK3DB=0. -! -CALL LES_VER_INT(MZF(XWT), ZW_LES) -IF (NSV_CS>0) THEN - DO JSV=NSV_CSBEG, NSV_CSEND - CALL LES_VER_INT( XSVT(:,:,:,JSV), & - ZSV_LES(:,:,:,JSV-NSV_CSBEG+1) ) - END DO -END IF -IF (LUSERC) THEN - CALL LES_VER_INT(XRT(:,:,:,IRRC), ZRC_LES) -ELSE - ZRC_LES = 0. -END IF -IF (LUSERI) THEN - CALL LES_VER_INT(XRT(:,:,:,IRRI), ZRI_LES) -ELSE - ZRI_LES = 0. -END IF -CALL LES_VER_INT(ZRT, ZRT_LES) -CALL LES_VER_INT(ZTHV, ZTHV_LES) -CALL LES_ANOMALY_FIELD(ZTHV,ZTHV_ANOM) -! -IF (NSV_CS>0) THEN - DO JSV=NSV_CSBEG, NSV_CSEND - ZWORK3D(:,:,:)=XSVT(:,:,:,JSV) - CALL LES_ANOMALY_FIELD(ZWORK3D,ZWORK3DB) - ZSV_ANOM(:,:,:,JSV-NSV_CSBEG+1)=ZWORK3DB(:,:,:) - CALL LES_STDEV(ZWORK3DB,ZWORK1D) - ZSTD_SV(:,JSV-NSV_CSBEG+1)=ZWORK1D(:) - DO JK=1,NLES_K - ZSTD_SVTRES(JK,JSV-NSV_CSBEG+1)=SUM(ZSTD_SV(1:JK,JSV-NSV_CSBEG+1))/(1.*JK) - END DO - END DO -END IF -! -DEALLOCATE(ZTHV ) -DEALLOCATE(ZWORK3D) -DEALLOCATE(ZWORK3DB) -DEALLOCATE(ZWORK1D) -! -!------------------------------------------------------------------------------- -! -!* 3.0 Cloud mask -! ---------- -! -IF (LLES_NEB_MASK) THEN - CALL LES_ALLOCATE('LLES_CURRENT_NEB_MASK',(/IIU,IJU,NLES_K/)) - LLES_CURRENT_NEB_MASK (:,:,:) = .FALSE. - WHERE ((ZRC_LES(IIB:IIE,IJB:IJE,:)>1.E-6 .OR. ZRI_LES(IIB:IIE,IJB:IJE,:)>1.E-6) .AND. ZW_LES(IIB:IIE,IJB:IJE,:)>0.) - LLES_CURRENT_NEB_MASK (IIB:IIE,IJB:IJE,:) = .TRUE. - END WHERE -END IF -! -!------------------------------------------------------------------------------- -! -!* 4.0 Cloud core mask -! --------------- -! -IF (LLES_CORE_MASK) THEN - CALL LES_ALLOCATE('LLES_CURRENT_CORE_MASK',(/IIU,IJU,NLES_K/)) - LLES_CURRENT_CORE_MASK (:,:,:) = .FALSE. - WHERE ((ZRC_LES(IIB:IIE,IJB:IJE,:)>1.E-6 .OR. ZRI_LES(IIB:IIE,IJB:IJE,:)>1.E-6) & - .AND. ZW_LES(IIB:IIE,IJB:IJE,:)>0. .AND. ZTHV_ANOM(IIB:IIE,IJB:IJE,:)>0.) - LLES_CURRENT_CORE_MASK (IIB:IIE,IJB:IJE,:) = .TRUE. - END WHERE -END IF -! -!------------------------------------------------------------------------------- -! -!* 4.0 Conditional sampling mask -! ------------------------- -! -IF (LLES_CS_MASK) THEN -! - CALL LES_MEAN_ll(ZRC_LES, LLES_CURRENT_CART_MASK, ZMEANRC ) - CALL LES_ALLOCATE('LLES_CURRENT_CS1_MASK',(/IIU,IJU,NLES_K/)) - LLES_CURRENT_CS1_MASK(:,:,:) = .FALSE. - IF (NSV_CS >= 2) THEN - CALL LES_ALLOCATE('LLES_CURRENT_CS2_MASK',(/IIU,IJU,NLES_K/)) - LLES_CURRENT_CS2_MASK(:,:,:) = .FALSE. - IF (NSV_CS == 3) THEN - CALL LES_ALLOCATE('LLES_CURRENT_CS3_MASK',(/IIU,IJU,NLES_K/)) - LLES_CURRENT_CS3_MASK (:,:,:) = .FALSE. - END IF - END IF - -! -! Cloud top and base computation -! - KBASE=2 - KTOP=NLES_K - DO JK=2,NLES_K - IF ((ZMEANRC(JK) > 1.E-7) .AND. (KBASE == 2)) KBASE=JK - IF ((ZMEANRC(JK) < 1.E-7) .AND. (KBASE > 2) .AND. (KTOP == NLES_K)) & - KTOP=JK-1 - END DO -! - DO JSV=NSV_CSBEG, NSV_CSEND - DO JK=2,NLES_K - IF (ZSTD_SV(JK,JSV-NSV_CSBEG+1) < 0.05*ZSTD_SVTRES(JK,JSV-NSV_CSBEG+1)) & - ZSTD_SV(JK,JSV-NSV_CSBEG+1)=0.05*ZSTD_SVTRES(JK,JSV-NSV_CSBEG+1) -! case no cloud top and base - IF (JSV == NSV_CSBEG) THEN - IF ((KBASE ==2) .AND. (KTOP == NLES_K)) THEN - WHERE (ZW_LES(IIB:IIE,IJB:IJE,JK)>0. .AND. ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > & - XSCAL(JSV-NSV_CSBEG+1) * ZSTD_SV(JK,JSV-NSV_CSBEG+1)) - LLES_CURRENT_CS1_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE. - END WHERE - END IF -! -! case cloud top and base defined -! - IF (XZHAT(JK) < XZHAT(KBASE)+(XZHAT(KTOP)-XZHAT(KBASE))/4.) THEN - WHERE (ZW_LES(IIB:IIE,IJB:IJE,JK)>0. .AND. ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > & - XSCAL(JSV-NSV_CSBEG+1) *ZSTD_SV(JK,JSV-NSV_CSBEG+1)) - LLES_CURRENT_CS1_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE. - END WHERE - END IF -! - IF (XZHAT(JK) >= XZHAT(KBASE)+(XZHAT(KTOP)-XZHAT(KBASE))/4.) THEN - WHERE (ZW_LES(IIB:IIE,IJB:IJE,JK)>0. .AND. ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > & - XSCAL(JSV-NSV_CSBEG+1) * ZSTD_SV(JK,JSV-NSV_CSBEG+1) .AND. & - ZRC_LES(IIB:IIE,IJB:IJE,JK)>1.E-6) - LLES_CURRENT_CS1_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE. - END WHERE - END IF - ELSE IF ( JSV == NSV_CSBEG + 1 ) THEN - IF ((KBASE ==2) .AND. (KTOP == NLES_K)) THEN - WHERE ( ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > & - XSCAL(JSV-NSV_CSBEG+1) * ZSTD_SV(JK,JSV-NSV_CSBEG+1)) - LLES_CURRENT_CS2_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE. - END WHERE - END IF -! -! case cloud top and base defined -! - IF (XZHAT(JK) < XZHAT(KBASE)+(XZHAT(KTOP)-XZHAT(KBASE))/4.) THEN - WHERE (ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > & - XSCAL(JSV-NSV_CSBEG+1) *ZSTD_SV(JK,JSV-NSV_CSBEG+1)) - LLES_CURRENT_CS2_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE. - END WHERE - END IF -! - IF (XZHAT(JK) >= XZHAT(KBASE)+(XZHAT(KTOP)-XZHAT(KBASE))/4.) THEN - WHERE (ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > & - XSCAL(JSV-NSV_CSBEG+1) * ZSTD_SV(JK,JSV-NSV_CSBEG+1)) - LLES_CURRENT_CS2_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE. - END WHERE - END IF -! - ELSE - IF ((KBASE ==2) .AND. (KTOP == NLES_K)) THEN - WHERE ( ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > & - XSCAL(JSV-NSV_CSBEG+1) * ZSTD_SV(JK,JSV-NSV_CSBEG+1)) - LLES_CURRENT_CS3_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE. - END WHERE - END IF -! -! case cloud top and base defined -! - IF (XZHAT(JK) < XZHAT(KBASE)+(XZHAT(KTOP)-XZHAT(KBASE))/4.) THEN - WHERE (ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > & - XSCAL(JSV-NSV_CSBEG+1) *ZSTD_SV(JK,JSV-NSV_CSBEG+1)) - LLES_CURRENT_CS3_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE. - END WHERE - END IF -! - IF (XZHAT(JK) >= XZHAT(KBASE)+(XZHAT(KTOP)-XZHAT(KBASE))/4.) THEN - WHERE (ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > & - XSCAL(JSV-NSV_CSBEG+1) * ZSTD_SV(JK,JSV-NSV_CSBEG+1)) - LLES_CURRENT_CS3_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE. - END WHERE - END IF - END IF - END DO - END DO -END IF -! -!------------------------------------------------------------------------------- -! -!* 5.0 User mask -! --------- -! -IF (LLES_MY_MASK) THEN - CALL LES_ALLOCATE('LLES_CURRENT_MY_MASKS',(/IIU,IJU,NLES_K,NLES_MASKS_USER/)) - DO JI=1,NLES_MASKS_USER - LLES_CURRENT_MY_MASKS (IIB:IIE,IJB:IJE,:,JI) = .FALSE. - END DO -! WHERE ((ZRC_LES + ZRI_LES) > 1.E-06) -! LLES_CURRENT_MY_MASKS (:,:,:,1) = .TRUE. -! END WHERE -! -END IF -!------------------------------------------------------------------------------- -! -DEALLOCATE(ZW_LES ) -DEALLOCATE(ZRC_LES ) -DEALLOCATE(ZRI_LES ) -DEALLOCATE(ZRT_LES ) -DEALLOCATE(ZTHV_LES ) -DEALLOCATE(ZSV_LES ) -DEALLOCATE(ZTHV_ANOM) -DEALLOCATE(ZSV_ANOM) -DEALLOCATE(ZSTD_SV) -DEALLOCATE(ZSTD_SVTRES) -!------------------------------------------------------------------------------- -DEALLOCATE(ZRT ) -DEALLOCATE(ZMEANRC) -!-------------------------------------------------------------------------------- -! -CONTAINS -! -!-------------------------------------------------------------------------------- -! -SUBROUTINE LES_ANOMALY_FIELD(PF,PF_ANOM) -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PF -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PF_ANOM - -REAL, DIMENSION(SIZE(PF_ANOM,3)) :: ZMEAN -INTEGER :: JI, JJ - -CALL LES_VER_INT(PF, PF_ANOM) -CALL LES_MEAN_ll(PF_ANOM, LLES_CURRENT_CART_MASK, ZMEAN ) -DO JJ=1,SIZE(PF_ANOM,2) - DO JI=1,SIZE(PF_ANOM,1) - PF_ANOM(JI,JJ,:) = PF_ANOM(JI,JJ,:) - ZMEAN(:) - END DO -END DO - -END SUBROUTINE LES_ANOMALY_FIELD -!-------------------------------------------------------------------------------- -! -!-------------------------------------------------------------------------------- -! -SUBROUTINE LES_STDEV(PF_ANOM,PF_STD) -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PF_ANOM -REAL, DIMENSION(:), INTENT(OUT) :: PF_STD - -REAL, DIMENSION(SIZE(PF_ANOM,1),SIZE(PF_ANOM,2),SIZE(PF_ANOM,3)) :: Z2 -INTEGER :: JK - -Z2(:,:,:)=PF_ANOM(:,:,:)*PF_ANOM(:,:,:) -CALL LES_MEAN_ll(Z2, LLES_CURRENT_CART_MASK, PF_STD ) -DO JK=1,SIZE(PF_ANOM,3) - PF_STD(JK)=SQRT(PF_STD(JK)) -END DO - -END SUBROUTINE LES_STDEV -!------------------------------------------------------------------------------- -! -END SUBROUTINE LES_CLOUD_MASKS_n diff --git a/src/mesonh/ext/les_ini_timestepn.f90 b/src/mesonh/ext/les_ini_timestepn.f90 deleted file mode 100644 index 98c5cd306..000000000 --- a/src/mesonh/ext/les_ini_timestepn.f90 +++ /dev/null @@ -1,407 +0,0 @@ -!MNH_LIC Copyright 2002-2021 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. -!----------------------------------------------------------------- -! ####################### -MODULE MODI_LES_INI_TIMESTEP_n -! ####################### -! -! -INTERFACE LES_INI_TIMESTEP_n -! - SUBROUTINE LES_INI_TIMESTEP_n(KTCOUNT) -! -INTEGER, INTENT(IN) :: KTCOUNT ! current model time-step -! -END SUBROUTINE LES_INI_TIMESTEP_n -! -END INTERFACE -! -END MODULE MODI_LES_INI_TIMESTEP_n - -! ############################## - SUBROUTINE LES_INI_TIMESTEP_n(KTCOUNT) -! ############################## -! -! -!!**** *LES_INI_TIMESTEP_n* initializes the LES variables for -!! the current time-step of model _n -!! -!! -!! PURPOSE -!! ------- -!! -!! EXTERNAL -!! -------- -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! AUTHOR -!! ------ -!! V. Masson -!! -!! MODIFICATIONS -!! ------------- -!! Original 06/11/02 -! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management -! P. Wautelet 30/03/2021: budgets: LES cartesian subdomain limits are defined in the physical domain -! -------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_CST -USE MODD_NSV -USE MODD_LES -USE MODD_LES_n -USE MODD_FIELD_n -USE MODD_METRICS_n -USE MODD_REF_n -USE MODD_CONF_n -USE MODD_TIME_n -USE MODD_DYN_n -USE MODD_TIME -USE MODD_CONF -USE MODD_LES_BUDGET -! -use mode_datetime, only: Datetime_distance -USE MODE_ll -USE MODE_MODELN_HANDLER -! -USE MODI_LES_VER_INT -USE MODI_THL_RT_FROM_TH_R -USE MODI_LES_MEAN_ll -USE MODI_SHUMAN -! -USE MODI_SECOND_MNH -USE MODI_LES_CLOUD_MASKS_N -! -IMPLICIT NONE -! -! -!* 0.1 declarations of arguments -! -! -INTEGER, INTENT(IN) :: KTCOUNT ! current model time-step -! -! -! 0.2 declaration of local variables -! -INTEGER :: IXOR_ll, IYOR_ll ! origine point coordinates -! ! of current processor domain -! ! on model domain on all -! ! processors -INTEGER :: IIB_ll, IJB_ll ! SO point coordinates of -! ! current processor phys. domain -! ! on model domain on all -! ! processors -INTEGER :: IIE_ll, IJE_ll ! NE point coordinates of -! ! current processor phys. domain -! ! on model domain on all -! ! processors -INTEGER :: IIINF_MASK, IISUP_MASK ! cart. mask local proc. limits -INTEGER :: IJINF_MASK, IJSUP_MASK ! cart. mask local proc. limits -! -INTEGER :: JK ! vertical loop counter -INTEGER :: IIB, IJB, IIE, IJE ! hor. indices -INTEGER :: IIU, IJU ! hor. indices -INTEGER :: IKU ! ver. index -INTEGER :: IRR, IRRC, IRRR, IRRI, IRRS, IRRG ! moist variables indices -! -INTEGER :: JSV ! scalar variables counter -! -REAL :: ZTIME1, ZTIME2 ! CPU time counters -! -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTHL ! theta_l -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRT ! total water -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZL ! Latent heat of vaporization -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZCP ! Cp -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZEXN ! Exner function -INTEGER :: IMI ! current model index -!------------------------------------------------------------------------------- -! -!* 1. Does current time-step is a LES time-step? -! ----------------------------------------- -! -LLES_CALL= .FALSE. -! -CALL SECOND_MNH(ZTIME1) -! -IF (NLES_TCOUNT==NLES_TIMES) LLES_CALL=.FALSE. -! -IF ( KTCOUNT>1 .AND. MOD (KTCOUNT-1,NLES_DTCOUNT)==0) LLES_CALL=.TRUE. -! -IF (.NOT. LLES_CALL) RETURN -! -CALL BUDGET_FLAGS(LUSERV, LUSERC, LUSERR, & - LUSERI, LUSERS, LUSERG, LUSERH ) -! -NLES_TCOUNT = NLES_TCOUNT + 1 -! -NLES_CURRENT_TCOUNT = NLES_TCOUNT -! -tles_dates(nles_tcount) = tdtcur -call Datetime_distance( tdtseg, tdtcur, xles_times(nles_tcount) ) -! -!* forward-in-time time-step -! -XCURRENT_TSTEP = XTSTEP -! -!------------------------------------------------------------------------------- -! -CALL GET_OR_ll ('B',IXOR_ll,IYOR_ll) -CALL GET_DIM_EXT_ll('B',IIU,IJU) -CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) -! -IIB_ll=IXOR_ll+IIB-1 -IJB_ll=IYOR_ll+IJB-1 -IIE_ll=IXOR_ll+IIE-1 -IJE_ll=IYOR_ll+IJE-1 -! -IKU = SIZE(XTHT,3) -! -IMI = GET_CURRENT_MODEL_INDEX() -! -!------------------------------------------------------------------------------- -! -!* 2. Definition of masks -! ------------------- -! -!* 2.1 Cartesian (sub-)domain (on local processor) -! ---------------------- -! -CALL LES_ALLOCATE('LLES_CURRENT_CART_MASK',(/IIU,IJU,NLES_K/)) -! -IIINF_MASK = MAX(IIB, NLESn_IINF(IMI)+JPHEXT-(IIB_ll-1-JPHEXT)) -IJINF_MASK = MAX(IJB, NLESn_JINF(IMI)+JPHEXT-(IJB_ll-1-JPHEXT)) -IISUP_MASK = MIN(IIE, NLESn_ISUP(IMI)+JPHEXT-(IIB_ll-1-JPHEXT)) -IJSUP_MASK = MIN(IJE, NLESn_JSUP(IMI)+JPHEXT-(IJB_ll-1-JPHEXT)) -! -! -LLES_CURRENT_CART_MASK(:,:,:) = .FALSE. -LLES_CURRENT_CART_MASK(IIINF_MASK:IISUP_MASK,IJINF_MASK:IJSUP_MASK,:) = .TRUE. -! -CLES_CURRENT_LBCX(:) = CLES_LBCX(:,IMI) -CLES_CURRENT_LBCY(:) = CLES_LBCY(:,IMI) -! -!------------------------------------------------------------------------------- -! -!* 3. Definition of LES vertical grid for this model -! ---------------------------------------------- -! -IF (CLES_LEVEL_TYPE=='Z') THEN - IF (ASSOCIATED(XCOEFLIN_CURRENT_LES)) CALL LES_DEALLOCATE('XCOEFLIN_CURRENT_LES') - IF (ASSOCIATED(NKLIN_CURRENT_LES )) CALL LES_DEALLOCATE('NKLIN_CURRENT_LES') - ! - CALL LES_ALLOCATE('XCOEFLIN_CURRENT_LES',(/IIU,IJU,NLES_K/)) - CALL LES_ALLOCATE('NKLIN_CURRENT_LES',(/IIU,IJU,NLES_K/)) - ! - XCOEFLIN_CURRENT_LES(:,:,:) = XCOEFLIN_LES(:,:,:) - NKLIN_CURRENT_LES (:,:,:) = NKLIN_LES (:,:,:) -END IF -! -!------------------------------------------------------------------------------- -! -!* 4. Definition of variables used in budgets for current model -! --------------------------------------------------------- -! -IF (LUSERC) THEN - ALLOCATE(XCURRENT_L_O_EXN_CP (IIU,IJU,IKU)) -ELSE - ALLOCATE(XCURRENT_L_O_EXN_CP (0,0,0)) -END IF -ALLOCATE(XCURRENT_RHODJ (IIU,IJU,IKU)) -! -!* coefficients for Th to Thl conversion -! -IF (LUSERC) THEN - ALLOCATE(ZL (IIU,IJU,IKU)) - ALLOCATE(ZEXN(IIU,IJU,IKU)) - ALLOCATE(ZCP (IIU,IJU,IKU)) - ! - !* Exner function - ! - ZEXN(:,:,:) = (XPABST/XP00)**(XRD/XCPD) - ! - !* Latent heat of vaporization - ! - ZL(:,:,:) = XLVTT + (XCPD-XCL) * (XTHT(:,:,:)*ZEXN(:,:,:)-XTT) - ! - !* heat capacity at constant pressure of the humid air - ! - ZCP(:,:,:) = XCPD - IRR=2 - ZCP(:,:,:) = ZCP(:,:,:) + XCPV * XRT(:,:,:,1) - ZCP(:,:,:) = ZCP(:,:,:) + XCL * XRT(:,:,:,2) - IF (LUSERR) THEN - IRR=IRR+1 - ZCP(:,:,:) = ZCP(:,:,:) + XCL * XRT(:,:,:,IRR) - END IF - IF (LUSERI) THEN - IRR=IRR+1 - ZCP(:,:,:) = ZCP(:,:,:) + XCI * XRT(:,:,:,IRR) - END IF - IF (LUSERS) THEN - IRR=IRR+1 - ZCP(:,:,:) = ZCP(:,:,:) + XCI * XRT(:,:,:,IRR) - END IF - IF (LUSERG) THEN - IRR=IRR+1 - ZCP(:,:,:) = ZCP(:,:,:) + XCI * XRT(:,:,:,IRR) - END IF - IF (LUSERH) THEN - IRR=IRR+1 - ZCP(:,:,:) = ZCP(:,:,:) + XCI * XRT(:,:,:,IRR) - END IF - ! - !* L / (Exn * Cp) - ! - XCURRENT_L_O_EXN_CP(:,:,:) = ZL(:,:,:) / ZEXN(:,:,:) / ZCP(:,:,:) - ! - DEALLOCATE(ZL ) - DEALLOCATE(ZEXN) - DEALLOCATE(ZCP ) -END IF -! -!* other initializations -! -XCURRENT_RHODJ=XRHODJ -! -LCURRENT_USERV=LUSERV -LCURRENT_USERC=LUSERC -LCURRENT_USERR=LUSERR -LCURRENT_USERI=LUSERI -LCURRENT_USERS=LUSERS -LCURRENT_USERG=LUSERG -LCURRENT_USERH=LUSERH -! -NCURRENT_RR = NRR -! -ALLOCATE(XCURRENT_RUS (IIU,IJU,IKU)) -ALLOCATE(XCURRENT_RVS (IIU,IJU,IKU)) -ALLOCATE(XCURRENT_RWS (IIU,IJU,IKU)) -ALLOCATE(XCURRENT_RTHS (IIU,IJU,IKU)) -ALLOCATE(XCURRENT_RTKES(IIU,IJU,IKU)) -ALLOCATE(XCURRENT_RRS (IIU,IJU,IKU,NRR)) -ALLOCATE(XCURRENT_RSVS (IIU,IJU,IKU,NSV)) -ALLOCATE(XCURRENT_RTHLS(IIU,IJU,IKU)) -ALLOCATE(XCURRENT_RRTS (IIU,IJU,IKU)) -! -XCURRENT_RUS =XRUS -XCURRENT_RVS =XRVS -XCURRENT_RWS =XRWS -XCURRENT_RTHS =XRTHS -XCURRENT_RTKES=XRTKES -XCURRENT_RRS =XRRS -XCURRENT_RSVS =XRSVS -CALL THL_RT_FROM_TH_R(LUSERV, LUSERC, LUSERR, & - LUSERI, LUSERS, LUSERG, LUSERH, & - XCURRENT_L_O_EXN_CP, & - XCURRENT_RTHS, XCURRENT_RRS, & - XCURRENT_RTHLS, XCURRENT_RRTS ) - -ALLOCATE(X_LES_BU_RES_KE (NLES_K,NLES_TOT)) -ALLOCATE(X_LES_BU_RES_WThl (NLES_K,NLES_TOT)) -ALLOCATE(X_LES_BU_RES_Thl2 (NLES_K,NLES_TOT)) -ALLOCATE(X_LES_BU_SBG_Tke (NLES_K,NLES_TOT)) -ALLOCATE(X_LES_BU_RES_WRt (NLES_K,NLES_TOT)) -ALLOCATE(X_LES_BU_RES_Rt2 (NLES_K,NLES_TOT)) -ALLOCATE(X_LES_BU_RES_ThlRt(NLES_K,NLES_TOT)) -ALLOCATE(X_LES_BU_RES_Sv2 (NLES_K,NLES_TOT,NSV)) -ALLOCATE(X_LES_BU_RES_WSv (NLES_K,NLES_TOT,NSV)) - -X_LES_BU_RES_KE = 0. -X_LES_BU_RES_WThl = 0. -X_LES_BU_RES_Thl2 = 0. -X_LES_BU_SBG_Tke = 0. -X_LES_BU_RES_WRt = 0. -X_LES_BU_RES_Rt2 = 0. -X_LES_BU_RES_ThlRt= 0. -X_LES_BU_RES_Sv2 = 0. -X_LES_BU_RES_WSv = 0. -! -!------------------------------------------------------------------------------- -! -!* 4. Definition of anomaly fields -! ---------------------------- -! -ALLOCATE (XU_ANOM (IIU,IJU,NLES_K)) -ALLOCATE (XV_ANOM (IIU,IJU,NLES_K)) -ALLOCATE (XW_ANOM (IIU,IJU,NLES_K)) -ALLOCATE (XTHL_ANOM(IIU,IJU,NLES_K)) -IF (LUSERV) THEN - ALLOCATE (XRT_ANOM (IIU,IJU,NLES_K)) -ELSE - ALLOCATE (XRT_ANOM (0,0,0)) -END IF -ALLOCATE (XSV_ANOM (IIU,IJU,NLES_K,NSV)) -! -!* 4.1 conservative variables -! ---------------------- -! -ALLOCATE(ZTHL(IIU,IJU,IKU)) -ALLOCATE(ZRT (IIU,IJU,IKU)) -CALL THL_RT_FROM_TH_R(LUSERV, LUSERC, LUSERR, & - LUSERI, LUSERS, LUSERG, LUSERH, & - XCURRENT_L_O_EXN_CP, & - XTHT, XRT, & - ZTHL, ZRT ) -! -!* 4.2 anomaly fields on the LES grid -! ------------------------------ -! -CALL LES_ANOMALY_FIELD(MXF(XUT),XU_ANOM) -CALL LES_ANOMALY_FIELD(MYF(XVT),XV_ANOM) -CALL LES_ANOMALY_FIELD(MZF(XWT),XW_ANOM) -CALL LES_ANOMALY_FIELD(ZTHL,XTHL_ANOM) -IF (LUSERV) CALL LES_ANOMALY_FIELD(ZRT,XRT_ANOM) -DO JSV=1,NSV - CALL LES_ANOMALY_FIELD(XSVT(:,:,:,JSV),XSV_ANOM(:,:,:,JSV)) -END DO -! -!------------------------------------------------------------------------------- -! -DEALLOCATE(ZTHL) -DEALLOCATE(ZRT ) -!------------------------------------------------------------------------------- -! -!* 6.0 Nebulosity masks -! ---------------- -! -CALL LES_CLOUD_MASKS_n -! -!------------------------------------------------------------------------------- -CALL SECOND_MNH(ZTIME2) -XTIME_LES_BU = XTIME_LES_BU + ZTIME2 - ZTIME1 -!-------------------------------------------------------------------------------- -! -CONTAINS -! -!-------------------------------------------------------------------------------- -! -SUBROUTINE LES_ANOMALY_FIELD(PF,PF_ANOM) -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PF -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PF_ANOM - -REAL, DIMENSION(SIZE(PF_ANOM,3)) :: ZMEAN -INTEGER :: JI, JJ - -CALL LES_VER_INT(PF, PF_ANOM) -CALL LES_MEAN_ll(PF_ANOM, LLES_CURRENT_CART_MASK, ZMEAN ) -DO JJ=1,SIZE(PF_ANOM,2) - DO JI=1,SIZE(PF_ANOM,1) - PF_ANOM(JI,JJ,:) = PF_ANOM(JI,JJ,:) - ZMEAN(:) - END DO -END DO - -END SUBROUTINE LES_ANOMALY_FIELD -!-------------------------------------------------------------------------------- -! -END SUBROUTINE LES_INI_TIMESTEP_n - diff --git a/src/mesonh/ext/lesn.f90 b/src/mesonh/ext/lesn.f90 deleted file mode 100644 index f66f89eae..000000000 --- a/src/mesonh/ext/lesn.f90 +++ /dev/null @@ -1,3580 +0,0 @@ -!MNH_LIC Copyright 2000-2021 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. -!----------------------------------------------------------------- -! ################# - SUBROUTINE LES_n -! ################# -! -! -!!**** *LES_n* computes the current time-step LES diagnostics for model _n -!! -!! -!! PURPOSE -!! ------- -!! -!! EXTERNAL -!! -------- -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! AUTHOR -!! ------ -!! V. Masson -!! -!! MODIFICATIONS -!! ------------- -!! Original 07/02/00 -!! 01/02/01 (D. Gazen) add module MODD_NSV for NSV variable -!! 06/11/02 (V. Masson) add LES budgets and use of anomalies -!! in LES quantities computations -!! 01/04/03 (V. Masson and F. Couvreux) bug in BL height loop -!! 10/07 (J.Pergaud) Add mass flux diagnostics -!! 06/08 (O.Thouron) Add radiative diagnostics -!! 12/10 (R.Honnert) Add EDKF mass flux in BL height -!! 10/09 (P. Aumond) Add possibility of user maskS -!! 10/14 (C.Lac) Correction on user masks -!! 10/16 (C.Lac) Add ground droplet deposition amount -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -!! 02/2019 (C. Lac) Add rain fraction as a LES diagnostic -!! -!! -------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_CST -USE MODD_CTURB, ONLY : XFTOP_O_FSURF -! -USE MODD_LES -USE MODD_LES_BUDGET -USE MODD_CONF -USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t -USE MODD_LES_n -USE MODD_RADIATIONS_n -USE MODD_GRID_n -USE MODD_REF_n -USE MODD_FIELD_n -USE MODD_CONF_n -USE MODD_PARAM_n -USE MODD_TURB_n -USE MODD_METRICS_n -USE MODD_LUNIT_n, ONLY: TLUOUT -USE MODD_PARAM_n, ONLY: CCLOUD -USE MODD_PRECIP_n, ONLY: XINPRR,XACPRR,XINPRR3D,XEVAP3D,XINPRC,XINDEP -USE MODD_NSV, ONLY : NSV, NSV_CS -USE MODD_PARAM_ICE, ONLY: LDEPOSC,LSEDIC -USE MODD_PARAM_C2R2, ONLY: LDEPOC,LSEDC -USE MODD_PARAM_LIMA, ONLY : MSEDC=>LSEDC -! -USE MODI_SHUMAN -USE MODI_GRADIENT_M -USE MODI_GRADIENT_U -USE MODI_GRADIENT_V -USE MODI_GRADIENT_W -USE MODI_LES_VER_INT -USE MODI_SPEC_VER_INT -USE MODI_LES_MEAN_ll -USE MODI_THL_RT_FROM_TH_R -USE MODI_LES_RES_TR -USE MODI_BUDGET_FLAGS -USE MODI_LES_BUDGET_TEND_n -USE MODE_BL_DEPTH_DIAG -! -USE MODE_ll -USE MODE_MODELN_HANDLER -USE MODE_FILL_DIMPHYEX, ONLY: FILL_DIMPHYEX -! -IMPLICIT NONE -! -! -!* 0.1 declarations of arguments -! -! -! 0.2 declaration of local variables -! -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZEXN ! Exner function -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTHL ! liquid potential temperature -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTHV ! virtual potential temperature -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRHO ! air density -! -REAL, DIMENSION(:,:,:), ALLOCATABLE :: CHAMPXY1 !tableau intermediaire -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTEMP ! Temperature -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZEW -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZINDCLD !indice cloud si rc>0 -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZINDCLD2 !indice cloud rc>1E-5 -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZCLDFR_LES! CLDFR on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZICEFR_LES! ICEFR on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRAINFR_LES! RAINFR on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZMASSF ! massflux=rho*w -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZREHU ! relative humidity - - -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZZ_LES ! alt. on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE ::ZZZ_LES -REAL, DIMENSION(:,:,:), ALLOCATABLE ::ZINPRR3D_LES ! precipitation flux 3D -REAL, DIMENSION(:,:,:), ALLOCATABLE ::ZEVAP3D_LES !evaporation 3D -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZP_LES ! pres. on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZDP_LES ! dynamical production TKE -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTP_LES ! thermal production TKE -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTR_LES ! transport production TKE -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZDISS_LES ! dissipation TKE -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZLM_LES ! mixing length - -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZDPDZ_LES ! dp/dz on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZDTHLDZ_LES ! dThl/dz on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZDTHDZ_LES ! dTh/dz on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZDRTDZ_LES ! dRt/dz on LES vertical grid -REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZDSvDZ_LES ! dSv/dz on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZDUDZ_LES ! du/dz on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZDVDZ_LES ! dv/dz on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZDWDZ_LES ! dw/dz on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZEXN_LES ! Exner on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRHO_LES ! rho on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZU_LES ! U on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZV_LES ! V on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZW_LES ! W on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZMF_LES ! mass flux on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTH_LES ! Theta on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTHV_LES ! thv on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTHL_LES ! thl on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTKE_LES ! tke on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZKE_LES ! ke on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRV_LES ! Rv on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZREHU_LES ! Rehu on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRC_LES ! Rc on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRR_LES ! Rr on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRI_LES ! Ri on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRS_LES ! Rs on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRG_LES ! Rg on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRH_LES ! Rh on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRT_LES ! Rt on LES vertical grid -REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZSV_LES ! Sv on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTH_ANOM ! Theta anomaly on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTHV_ANOM ! thv anomaly on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRV_ANOM ! Rv anomaly on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRC_ANOM ! Rc anomaly on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRI_ANOM ! Ri anomaly on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRR_ANOM ! Rr anomaly on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZP_ANOM ! p anomaly on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRHO_ANOM ! rho anomaly on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZDPDZ_ANOM! dp/dz anomaly on LES vertical grid -REAL, DIMENSION(:), ALLOCATABLE :: ZMEAN_DPDZ! dp/dz mean on LES vertical grid -REAL, DIMENSION(:), ALLOCATABLE :: ZLES_MEAN_DRtDZ! drt/dz mean on LES vertical grid -REAL, DIMENSION(:), ALLOCATABLE :: ZLES_MEAN_DTHDZ! dth/dz mean on LES vertical grid -REAL, DIMENSION(:,:), ALLOCATABLE :: ZLES_MEAN_DSVDZ! drt/dz mean on LES vertical grid -REAL, DIMENSION(:,:), ALLOCATABLE :: ZLWP_LES, ZRWP_LES, ZTKET_LES -REAL, DIMENSION(:,:), ALLOCATABLE :: ZIWP_LES, ZSWP_LES, ZGWP_LES, ZHWP_LES -REAL, DIMENSION(:,:), ALLOCATABLE :: ZINDCLD2D ! -REAL, DIMENSION(:,:), ALLOCATABLE :: ZINDCLD2D2 ! -REAL, DIMENSION(:,:), ALLOCATABLE :: ZLWP_ANOM ! lwp anomaly -REAL, DIMENSION(:,:), ALLOCATABLE :: ZMAXWRR2D ! maxwrr2D -! -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZU_SPEC ! U on SPEC vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZV_SPEC ! V on SPEC vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZW_SPEC ! W on SPEC vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTH_SPEC ! Theta on SPEC vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTHL_SPEC ! thl on SPEC vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRV_SPEC ! Rv on SPEC vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRC_SPEC ! Rc on SPEC vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRI_SPEC ! Ri on SPEC vertical grid -REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZSV_SPEC ! Sv on SPEC vertical grid -! -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRT ! rv+rc+rr+ri+rs+rg+rh -REAL, DIMENSION(:), ALLOCATABLE :: ZWORK1D,ZWORK1DT -REAL, DIMENSION(:,:), ALLOCATABLE :: ZWORK2D -REAL :: ZINPRRm,ZCOUNT -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRADEFF_LES ! Re on LES vertical grid -!!fl sw, lw, dthrad on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZSWU_LES ! SWU on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZSWD_LES ! SWD on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZLWU_LES ! LWU on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZLWD_LES ! LWD on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZDTHRADSW_LES ! DTHRADSW on LES vertical grid -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZDTHRADLW_LES ! DTHRADLW on LES vertical grid -! -REAL, DIMENSION(:), ALLOCATABLE :: ZWORK ! -! -INTEGER :: IRR ! moist variables counter -INTEGER :: JSV ! scalar variables counter -INTEGER :: IIU, IJU ! array sizes -INTEGER :: IKE,IKB -INTEGER :: JI, JJ, JK ! loop counters -INTEGER :: IIU_ll, IJU_ll ! total domain I size (fin) -INTEGER :: IIA_ll, IJA_ll ! total domain I size (debut) -INTEGER :: IINFO_ll ! return code of parallel routine -INTEGER :: IIMAX_ll, IJMAX_ll ! total physical domain I size -INTEGER :: JLOOP -! -INTEGER :: IMASK ! mask counter -INTEGER :: IMASKUSER! mask user number -! -INTEGER :: IRESP, ILUOUT -INTEGER :: IMI ! Current model index -TYPE(DIMPHYEX_t) :: YLDIMPHYEX -!------------------------------------------------------------------------------- -! -IMI = GET_CURRENT_MODEL_INDEX() -! -IF (.NOT. LLES_CALL) RETURN -! -CALL GET_GLOBALDIMS_ll(IIMAX_ll,IJMAX_ll) -IIU_ll = IIMAX_ll+JPHEXT -IJU_ll = IJMAX_ll+JPHEXT -IIA_ll=JPHEXT+1 -IJA_ll=JPHEXT+1 -IKE=SIZE(XVT,3)-JPVEXT -IKB=1+JPVEXT -CALL GET_DIM_EXT_ll('B',IIU,IJU) -CALL FILL_DIMPHYEX(YLDIMPHYEX, SIZE(XTHT,1), SIZE(XTHT,2), SIZE(XTHT,3),.TRUE.) -! -ILUOUT = TLUOUT%NLU -! -!------------------------------------------------------------------------------- -! -!* interpolation coefficients for Z type grid -! -IF (CSPECTRA_LEVEL_TYPE=='Z') THEN - IF (ASSOCIATED(XCOEFLIN_CURRENT_SPEC)) CALL LES_DEALLOCATE('XCOEFLIN_CURRENT_SPEC') - IF (ASSOCIATED(NKLIN_CURRENT_SPEC )) CALL LES_DEALLOCATE('NKLIN_CURRENT_SPEC') - ! - CALL LES_ALLOCATE('XCOEFLIN_CURRENT_SPEC',(/IIU,IJU,NSPECTRA_K/)) - CALL LES_ALLOCATE('NKLIN_CURRENT_SPEC',(/IIU,IJU,NSPECTRA_K/)) - ! - XCOEFLIN_CURRENT_SPEC(:,:,:) = XCOEFLIN_SPEC(:,:,:) - NKLIN_CURRENT_SPEC (:,:,:) = NKLIN_SPEC (:,:,:) -END IF -! -!------------------------------------------------------------------------------- -! -!* 1. Allocations -! ----------- -! -ALLOCATE(ZP_LES (IIU,IJU,NLES_K)) -ALLOCATE(ZDP_LES (IIU,IJU,NLES_K)) -ALLOCATE(ZTP_LES (IIU,IJU,NLES_K)) -ALLOCATE(ZTR_LES (IIU,IJU,NLES_K)) -ALLOCATE(ZDISS_LES (IIU,IJU,NLES_K)) -ALLOCATE(ZLM_LES (IIU,IJU,NLES_K)) -ALLOCATE(ZDTHLDZ_LES(IIU,IJU,NLES_K)) -ALLOCATE(ZDTHDZ_LES(IIU,IJU,NLES_K)) -ALLOCATE(ZDRTDZ_LES(IIU,IJU,NLES_K)) -ALLOCATE(ZDUDZ_LES(IIU,IJU,NLES_K)) -ALLOCATE(ZDVDZ_LES(IIU,IJU,NLES_K)) -ALLOCATE(ZDWDZ_LES(IIU,IJU,NLES_K)) -ALLOCATE(ZDSVDZ_LES(IIU,IJU,NLES_K,NSV)) - -ALLOCATE(ZDPDZ_LES(IIU,IJU,NLES_K)) -ALLOCATE(ZEXN_LES (IIU,IJU,NLES_K)) -ALLOCATE(ZRHO_LES (IIU,IJU,NLES_K)) -ALLOCATE(ZU_LES (IIU,IJU,NLES_K)) -ALLOCATE(ZV_LES (IIU,IJU,NLES_K)) -ALLOCATE(ZW_LES (IIU,IJU,NLES_K)) -ALLOCATE(ZMF_LES (IIU,IJU,NLES_K)) -ALLOCATE(ZTH_LES (IIU,IJU,NLES_K)) -IF (CRAD /= 'NONE') THEN - ALLOCATE(ZRADEFF_LES (IIU,IJU,NLES_K)) - ALLOCATE(ZSWU_LES (IIU,IJU,NLES_K)) - ALLOCATE(ZSWD_LES (IIU,IJU,NLES_K)) - ALLOCATE(ZLWU_LES (IIU,IJU,NLES_K)) - ALLOCATE(ZLWD_LES (IIU,IJU,NLES_K)) - ALLOCATE(ZDTHRADSW_LES (IIU,IJU,NLES_K)) - ALLOCATE(ZDTHRADLW_LES (IIU,IJU,NLES_K)) -ELSE - ALLOCATE(ZRADEFF_LES (0,0,0)) - ALLOCATE(ZSWU_LES (0,0,0)) - ALLOCATE(ZSWD_LES (0,0,0)) - ALLOCATE(ZLWU_LES (0,0,0)) - ALLOCATE(ZLWD_LES (0,0,0)) - ALLOCATE(ZDTHRADSW_LES (0,0,0)) - ALLOCATE(ZDTHRADLW_LES (0,0,0)) -END IF -IF (LUSERV) THEN - ALLOCATE(ZTHV_LES (IIU,IJU,NLES_K)) -ELSE - ALLOCATE(ZTHV_LES (0,0,0)) -END IF -ALLOCATE(ZTHL_LES (IIU,IJU,NLES_K)) -ALLOCATE(ZTKE_LES (IIU,IJU,NLES_K)) -ALLOCATE(ZKE_LES(IIU,IJU,NLES_K)) -ALLOCATE(ZTKET_LES(IIU,IJU)) -ALLOCATE(ZWORK1D (NLES_K)) -ALLOCATE(ZWORK1DT (NLES_K)) -ALLOCATE(ZZZ_LES(IIU,IJU,NLES_K)) -IF (LUSERV) THEN - ALLOCATE(ZRV_LES (IIU,IJU,NLES_K)) - ALLOCATE(ZRT_LES (IIU,IJU,NLES_K)) - ALLOCATE(ZREHU_LES (IIU,IJU,NLES_K)) -ELSE - ALLOCATE(ZRV_LES (0,0,0)) - ALLOCATE(ZRT_LES (0,0,0)) - ALLOCATE(ZREHU_LES (0,0,0)) -END IF -IF (LUSERC) THEN - ALLOCATE(ZRC_LES (IIU,IJU,NLES_K)) - ALLOCATE(ZLWP_LES(IIU,IJU)) - ALLOCATE(ZINDCLD2D(IIU,IJU)) - ALLOCATE(ZINDCLD2D2(IIU,IJU)) - ALLOCATE(ZCLDFR_LES(IIU,IJU,NLES_K)) - ALLOCATE(ZWORK2D(IIU,IJU)) - ALLOCATE(ZLWP_ANOM(IIU,IJU)) -ELSE - ALLOCATE(ZRC_LES (0,0,0)) - ALLOCATE(ZLWP_LES(0,0)) - ALLOCATE(ZINDCLD2D(0,0)) - ALLOCATE(ZINDCLD2D2(0,0)) - ALLOCATE(ZCLDFR_LES(0,0,0)) - ALLOCATE(ZWORK2D(0,0)) - ALLOCATE(ZLWP_ANOM(0,0)) -END IF -IF (LUSERR) THEN - ALLOCATE(ZRR_LES (IIU,IJU,NLES_K)) - ALLOCATE(ZMAXWRR2D(IIU,IJU)) - ALLOCATE(ZRWP_LES(IIU,IJU)) - ALLOCATE(ZINPRR3D_LES (IIU,IJU,NLES_K)) - ALLOCATE(ZEVAP3D_LES (IIU,IJU,NLES_K)) - ALLOCATE(ZRAINFR_LES(IIU,IJU,NLES_K)) -ELSE - ALLOCATE(ZRR_LES (0,0,0)) - ALLOCATE(ZMAXWRR2D(0,0)) - ALLOCATE(ZRWP_LES(0,0)) - ALLOCATE(ZINPRR3D_LES(0,0,0)) - ALLOCATE(ZEVAP3D_LES(0,0,0)) - ALLOCATE(ZRAINFR_LES(0,0,0)) -END IF -IF (LUSERI) THEN - ALLOCATE(ZRI_LES (IIU,IJU,NLES_K)) - ALLOCATE(ZIWP_LES(IIU,IJU)) - ALLOCATE(ZICEFR_LES(IIU,IJU,NLES_K)) -ELSE - ALLOCATE(ZRI_LES (0,0,0)) - ALLOCATE(ZIWP_LES(0,0)) - ALLOCATE(ZICEFR_LES(0,0,0)) -END IF -IF (LUSERS) THEN - ALLOCATE(ZRS_LES (IIU,IJU,NLES_K)) - ALLOCATE(ZSWP_LES(IIU,IJU)) -ELSE - ALLOCATE(ZRS_LES (0,0,0)) - ALLOCATE(ZSWP_LES(0,0)) -END IF -IF (LUSERG) THEN - ALLOCATE(ZRG_LES (IIU,IJU,NLES_K)) - ALLOCATE(ZGWP_LES(IIU,IJU)) -ELSE - ALLOCATE(ZRG_LES (0,0,0)) - ALLOCATE(ZGWP_LES(0,0)) -END IF -IF (LUSERH) THEN - ALLOCATE(ZRH_LES (IIU,IJU,NLES_K)) - ALLOCATE(ZHWP_LES(IIU,IJU)) -ELSE - ALLOCATE(ZRH_LES (0,0,0)) - ALLOCATE(ZHWP_LES(0,0)) -END IF -IF (NSV>0) THEN - ALLOCATE(ZSV_LES (IIU,IJU,NLES_K,NSV)) -ELSE - ALLOCATE(ZSV_LES (0,0,0,0)) -END IF -! -ALLOCATE(ZP_ANOM (IIU,IJU,NLES_K)) -ALLOCATE(ZRHO_ANOM (IIU,IJU,NLES_K)) -ALLOCATE(ZTH_ANOM (IIU,IJU,NLES_K)) -ALLOCATE(ZDPDZ_ANOM(IIU,IJU,NLES_K)) -IF (LUSERV) THEN - ALLOCATE(ZTHV_ANOM(IIU,IJU,NLES_K)) - ALLOCATE(ZRV_ANOM (IIU,IJU,NLES_K)) -ELSE - ALLOCATE(ZTHV_ANOM(0,0,0)) - ALLOCATE(ZRV_ANOM (0,0,0)) -END IF -IF (LUSERC) THEN - ALLOCATE(ZRC_ANOM (IIU,IJU,NLES_K)) -ELSE - ALLOCATE(ZRC_ANOM (0,0,0)) -END IF -IF (LUSERI) THEN - ALLOCATE(ZRI_ANOM (IIU,IJU,NLES_K)) -ELSE - ALLOCATE(ZRI_ANOM (0,0,0)) -END IF -IF (LUSERR) THEN - ALLOCATE(ZRR_ANOM (IIU,IJU,NLES_K)) -ELSE - ALLOCATE(ZRR_ANOM (0,0,0)) -END IF -ALLOCATE(ZMEAN_DPDZ(NLES_K)) -ALLOCATE(ZLES_MEAN_DTHDZ(NLES_K)) -! -! -ALLOCATE(ZU_SPEC (NSPECTRA_NI,NSPECTRA_NJ,NSPECTRA_K)) -ALLOCATE(ZV_SPEC (NSPECTRA_NI,NSPECTRA_NJ,NSPECTRA_K)) -ALLOCATE(ZW_SPEC (NSPECTRA_NI,NSPECTRA_NJ,NSPECTRA_K)) -ALLOCATE(ZTH_SPEC (NSPECTRA_NI,NSPECTRA_NJ,NSPECTRA_K)) -IF (LUSERC) THEN - ALLOCATE(ZTHL_SPEC(NSPECTRA_NI,NSPECTRA_NJ,NSPECTRA_K)) -ELSE - ALLOCATE(ZTHL_SPEC(0,0,0)) -END IF -IF (LUSERV) THEN - ALLOCATE(ZRV_SPEC (NSPECTRA_NI,NSPECTRA_NJ,NSPECTRA_K)) -ELSE - ALLOCATE(ZRV_SPEC (0,0,0)) -END IF -IF (LUSERC) THEN - ALLOCATE(ZRC_SPEC (NSPECTRA_NI,NSPECTRA_NJ,NSPECTRA_K)) -ELSE - ALLOCATE(ZRC_SPEC (0,0,0)) -END IF -IF (LUSERI) THEN - ALLOCATE(ZRI_SPEC (NSPECTRA_NI,NSPECTRA_NJ,NSPECTRA_K)) -ELSE - ALLOCATE(ZRI_SPEC (0,0,0)) -END IF -IF (NSV>0) THEN - ALLOCATE(ZSV_SPEC (NSPECTRA_NI,NSPECTRA_NJ,NSPECTRA_K,NSV)) -ELSE - ALLOCATE(ZSV_SPEC (0,0,0,0)) -END IF -! -! -ALLOCATE(ZEXN (IIU,IJU,SIZE(XTHT,3))) -ALLOCATE(ZRHO (IIU,IJU,SIZE(XTHT,3))) -ALLOCATE(ZRT (IIU,IJU,SIZE(XTHT,3))) -ALLOCATE(ZTHV (IIU,IJU,SIZE(XTHT,3))) -ALLOCATE(ZTHL (IIU,IJU,SIZE(XTHT,3))) -ALLOCATE(ZEW (IIU,IJU,SIZE(XTHT,3))) -ALLOCATE(ZMASSF (IIU,IJU,SIZE(XTHT,3))) -ALLOCATE(ZTEMP (IIU,IJU,SIZE(XTHT,3))) -ALLOCATE(ZREHU (IIU,IJU,SIZE(XTHT,3))) -ALLOCATE(CHAMPXY1 (IIU,IJU,1)) -! -!------------------------------------------------------------------------------- -! -!* 1.2 preliminary calculations -! ------------------------ -! -ZEXN(:,:,:) = (XPABST/XP00)**(XRD/XCPD) -! -! -!* computation of relative humidity -ZTEMP=XTHT*ZEXN -ZEW=EXP (XALPW -XBETAW/ZTEMP-XGAMW*ALOG(ZTEMP)) -IF (LUSERV) THEN - ZREHU(:,:,:)=100.*XRT(:,:,:,1)*XPABST(:,:,:)/((XRD/XRV+XRT(:,:,:,1))*ZEW(:,:,:)) -ELSE - ZREHU(:,:,:)=0. -END IF -! -CALL THL_RT_FROM_TH_R(LUSERV, LUSERC, LUSERR, & - LUSERI, LUSERS, LUSERG, LUSERH, & - XCURRENT_L_O_EXN_CP, & - XTHT, XRT, & - ZTHL, ZRT ) -! -!* computation of density and virtual potential temperature -! -ZTHV=XTHT -IF (LUSERV) ZTHV=ZTHV*(1.+XRV/XRD*XRT(:,:,:,1))/(1.+ZRT(:,:,:)) -! -IF (CEQNSYS=='DUR') THEN - ZRHO=XPABST/(XRD*ZTHV*ZEXN) -ELSE - ZRHO=XRHODREF*( 1. + (XCPD-XRD)/XRD*(ZEXN/XEXNREF - 1.) - (ZTHV/XTHVREF - 1.) ) -END IF -! -! computation of mass flux -ZMASSF=MZM(ZRHO)*XWT -! -!------------------------------------------------------------------------------- -! -!* 2. Vertical interpolations to LES vertical grid -! -------------------------------------------- -! -!* note that velocity fields are first localized on the MASS points -! -! -IF (CRAD /= 'NONE') THEN - CALL LES_VER_INT( XRADEFF, ZRADEFF_LES) - CALL LES_VER_INT( XSWU, ZSWU_LES) - CALL LES_VER_INT( XSWD, ZSWD_LES) - CALL LES_VER_INT( XLWU, ZLWU_LES) - CALL LES_VER_INT( XLWD, ZLWD_LES) - CALL LES_VER_INT( XDTHRADSW, ZDTHRADSW_LES) - CALL LES_VER_INT( XDTHRADLW, ZDTHRADLW_LES) -END IF -! -CALL LES_VER_INT( XZZ , ZZZ_LES) -CALL LES_VER_INT( XPABST, ZP_LES ) -CALL LES_VER_INT( XDYP, ZDP_LES ) -CALL LES_VER_INT( XTHP, ZTP_LES ) -CALL LES_VER_INT( XTR, ZTR_LES ) -CALL LES_VER_INT( XDISS, ZDISS_LES ) -CALL LES_VER_INT( XLEM, ZLM_LES ) -CALL LES_VER_INT( GZ_M_M(XPABST,XDZZ), ZDPDZ_LES ) -! -CALL LES_VER_INT( MXF(XUT) ,ZU_LES ) -CALL LES_VER_INT( MYF(XVT) ,ZV_LES ) -CALL LES_VER_INT( MZF(XWT) ,ZW_LES ) -CALL LES_VER_INT( MZF(ZMASSF) ,ZMF_LES) -CALL LES_VER_INT( XTHT ,ZTH_LES ) -CALL LES_VER_INT( MXF(MZF(GZ_U_UW(XUT,XDZZ))), ZDUDZ_LES ) -CALL LES_VER_INT( MYF(MZF(GZ_V_VW(XVT,XDZZ))), ZDVDZ_LES ) -CALL LES_VER_INT( GZ_W_M(XWT,XDZZ), ZDWDZ_LES ) -CALL LES_VER_INT( ZEXN, ZEXN_LES) -! -CALL LES_VER_INT( GZ_M_M(XTHT,XDZZ), ZDTHDZ_LES ) -! -CALL LES_VER_INT(ZRHO, ZRHO_LES) -! -IF (LUSERV) CALL LES_VER_INT(ZTHV, ZTHV_LES) -CALL LES_VER_INT(ZTHL, ZTHL_LES) -CALL LES_VER_INT( GZ_M_M(ZTHL,XDZZ), ZDTHLDZ_LES ) -! -CALL LES_VER_INT( XTKET ,ZTKE_LES) -IRR = 0 -IF (LUSERV) THEN - IRR = IRR + 1 - CALL LES_VER_INT( XRT(:,:,:,IRR) ,ZRV_LES ) - CALL LES_VER_INT( ZRT(:,:,:) ,ZRT_LES ) - CALL LES_VER_INT( GZ_M_M(ZRT,XDZZ), ZDRTDZ_LES ) - CALL LES_VER_INT( ZREHU(:,:,:) ,ZREHU_LES) -END IF -IF (LUSERC) THEN - IRR = IRR + 1 - CALL LES_VER_INT( XRT(:,:,:,IRR) ,ZRC_LES ) - ALLOCATE(ZINDCLD (IIU,IJU,NLES_K)) - ALLOCATE(ZINDCLD2(IIU,IJU,NLES_K)) - ZINDCLD = CEILING(ZRC_LES-1.E-6) - ZINDCLD2 = CEILING(ZRC_LES-1.E-5) - CALL LES_VER_INT( XCLDFR(:,:,:) ,ZCLDFR_LES ) -ELSE - ALLOCATE(ZINDCLD (0,0,0)) - ALLOCATE(ZINDCLD2(0,0,0)) -END IF -IF (LUSERR) THEN - IRR = IRR + 1 - CALL LES_VER_INT( XRT(:,:,:,IRR) ,ZRR_LES ) - CALL LES_VER_INT( XINPRR3D(:,:,:), ZINPRR3D_LES) - CALL LES_VER_INT( XEVAP3D(:,:,:), ZEVAP3D_LES) - CALL LES_VER_INT( XRAINFR(:,:,:) ,ZRAINFR_LES ) -END IF -IF (LUSERC) THEN - DO JJ=1,IJU - DO JI=1,IIU - ZINDCLD2D(JI,JJ) = maxval(ZINDCLD(JI,JJ,:)) - ZINDCLD2D2(JI,JJ)= maxval(ZINDCLD2(JI,JJ,:)) - END DO - END DO - !* integration of rho rc - !!!ZLWP_LES only for cloud water - ZLWP_LES(:,:) = 0. - DO JK=1,NLES_K-1 - ZLWP_LES(:,:) = ZLWP_LES(:,:) + (ZZZ_LES(:,:,JK+1)-ZZZ_LES(:,:,JK)) & - * (ZRC_LES(:,:,JK)) * ZRHO_LES(:,:,JK) - END DO - CALL LES_MEAN_ll ( ZLWP_LES, LLES_CURRENT_CART_MASK(:,:,1), & - XLES_LWP(NLES_CURRENT_TCOUNT) ) -! -END IF - - !!!ZRWP_LES only for rain water -IF (LUSERR) THEN - ZRWP_LES(:,:)=0. - DO JK=1,NLES_K-1 - ZRWP_LES(:,:) = ZRWP_LES(:,:) + (ZZZ_LES(:,:,JK+1)-ZZZ_LES(:,:,JK)) & - * (ZRR_LES(:,:,JK)) * ZRHO_LES(:,:,JK) - END DO - CALL LES_MEAN_ll ( ZRWP_LES, LLES_CURRENT_CART_MASK(:,:,1), & - XLES_RWP(NLES_CURRENT_TCOUNT) ) -ENDIF -! -IF (LUSERI) THEN - IRR = IRR + 1 - CALL LES_VER_INT( XRT(:,:,:,IRR) ,ZRI_LES ) - ZIWP_LES(:,:)=0. - DO JK=1,NLES_K-1 - ZIWP_LES(:,:) = ZIWP_LES(:,:) + (ZZZ_LES(:,:,JK+1)-ZZZ_LES(:,:,JK)) & - * (ZRI_LES(:,:,JK)) * ZRHO_LES(:,:,JK) - END DO - CALL LES_MEAN_ll ( ZIWP_LES, LLES_CURRENT_CART_MASK(:,:,1), & - XLES_IWP(NLES_CURRENT_TCOUNT) ) - CALL LES_VER_INT( XICEFR(:,:,:) ,ZICEFR_LES ) -END IF -IF (LUSERS) THEN - IRR = IRR + 1 - CALL LES_VER_INT( XRT(:,:,:,IRR) ,ZRS_LES ) - ZSWP_LES(:,:)=0. - DO JK=1,NLES_K-1 - ZSWP_LES(:,:) = ZSWP_LES(:,:) + (ZZZ_LES(:,:,JK+1)-ZZZ_LES(:,:,JK)) & - * (ZRS_LES(:,:,JK)) * ZRHO_LES(:,:,JK) - END DO - CALL LES_MEAN_ll ( ZSWP_LES, LLES_CURRENT_CART_MASK(:,:,1), & - XLES_SWP(NLES_CURRENT_TCOUNT) ) -END IF -IF (LUSERG) THEN - IRR = IRR + 1 - CALL LES_VER_INT( XRT(:,:,:,IRR) ,ZRG_LES ) - ZGWP_LES(:,:)=0. - DO JK=1,NLES_K-1 - ZGWP_LES(:,:) = ZGWP_LES(:,:) + (ZZZ_LES(:,:,JK+1)-ZZZ_LES(:,:,JK)) & - * (ZRG_LES(:,:,JK)) * ZRHO_LES(:,:,JK) - END DO - CALL LES_MEAN_ll ( ZGWP_LES, LLES_CURRENT_CART_MASK(:,:,1), & - XLES_GWP(NLES_CURRENT_TCOUNT) ) -END IF -IF (LUSERH) THEN - IRR = IRR + 1 - CALL LES_VER_INT( XRT(:,:,:,IRR) ,ZRH_LES ) - ZHWP_LES(:,:)=0. - DO JK=1,NLES_K-1 - ZHWP_LES(:,:) = ZHWP_LES(:,:) + (ZZZ_LES(:,:,JK+1)-ZZZ_LES(:,:,JK)) & - * (ZRH_LES(:,:,JK)) * ZRHO_LES(:,:,JK) - END DO - CALL LES_MEAN_ll ( ZHWP_LES, LLES_CURRENT_CART_MASK(:,:,1), & - XLES_HWP(NLES_CURRENT_TCOUNT) ) -END IF -IF (NSV>0) THEN - DO JSV=1,NSV - CALL LES_VER_INT( XSVT(:,:,:,JSV), ZSV_LES(:,:,:,JSV) ) - CALL LES_VER_INT( GZ_M_M(XSVT(:,:,:,JSV),XDZZ), ZDSVDZ_LES(:,:,:,JSV) ) - END DO -END IF -! -!*mean sw and lw fluxes - CALL LES_MEAN_ll ( ZSWU_LES, LLES_CURRENT_CART_MASK, & - XLES_SWU(:,NLES_CURRENT_TCOUNT) ) - CALL LES_MEAN_ll ( ZSWD_LES, LLES_CURRENT_CART_MASK, & - XLES_SWD(:,NLES_CURRENT_TCOUNT) ) - CALL LES_MEAN_ll ( ZLWU_LES, LLES_CURRENT_CART_MASK, & - XLES_LWU(:,NLES_CURRENT_TCOUNT) ) - CALL LES_MEAN_ll ( ZLWD_LES, LLES_CURRENT_CART_MASK, & - XLES_LWD(:,NLES_CURRENT_TCOUNT) ) - CALL LES_MEAN_ll ( ZDTHRADSW_LES, LLES_CURRENT_CART_MASK, & - XLES_DTHRADSW(:,NLES_CURRENT_TCOUNT) ) - CALL LES_MEAN_ll ( ZDTHRADLW_LES, LLES_CURRENT_CART_MASK, & - XLES_DTHRADLW(:,NLES_CURRENT_TCOUNT) ) - CALL LES_MEAN_ll ( ZRADEFF_LES, LLES_CURRENT_CART_MASK, & - XLES_RADEFF(:,NLES_CURRENT_TCOUNT) ) -!* mean vertical profiles on the LES grid -! - CALL LES_MEAN_ll ( ZU_LES, LLES_CURRENT_CART_MASK, & - XLES_MEAN_U(:,NLES_CURRENT_TCOUNT,1) ) -! - CALL LES_MEAN_ll ( ZV_LES, LLES_CURRENT_CART_MASK, & - XLES_MEAN_V(:,NLES_CURRENT_TCOUNT,1) ) -! - CALL LES_MEAN_ll ( ZW_LES, LLES_CURRENT_CART_MASK, & - XLES_MEAN_W(:,NLES_CURRENT_TCOUNT,1) ) -! - CALL LES_MEAN_ll ( ZP_LES, LLES_CURRENT_CART_MASK, & - XLES_MEAN_P(:,NLES_CURRENT_TCOUNT,1) ) -! - CALL LES_MEAN_ll ( ZDP_LES, LLES_CURRENT_CART_MASK, & - XLES_MEAN_DP(:,NLES_CURRENT_TCOUNT,1) ) -! - CALL LES_MEAN_ll ( ZTP_LES, LLES_CURRENT_CART_MASK, & - XLES_MEAN_TP(:,NLES_CURRENT_TCOUNT,1) ) -! - CALL LES_MEAN_ll ( ZTR_LES, LLES_CURRENT_CART_MASK, & - XLES_MEAN_TR(:,NLES_CURRENT_TCOUNT,1) ) -! - CALL LES_MEAN_ll ( ZDISS_LES, LLES_CURRENT_CART_MASK, & - XLES_MEAN_DISS(:,NLES_CURRENT_TCOUNT,1) ) -! - CALL LES_MEAN_ll ( ZLM_LES, LLES_CURRENT_CART_MASK, & - XLES_MEAN_LM(:,NLES_CURRENT_TCOUNT,1) ) -! - CALL LES_MEAN_ll ( ZRHO_LES, LLES_CURRENT_CART_MASK, & - XLES_MEAN_RHO(:,NLES_CURRENT_TCOUNT,1) ) -! - CALL LES_MEAN_ll ( ZMF_LES, LLES_CURRENT_CART_MASK, & - XLES_MEAN_Mf(:,NLES_CURRENT_TCOUNT,1) ) -! - CALL LES_MEAN_ll ( ZTH_LES*ZEXN_LES, LLES_CURRENT_CART_MASK, & - ZWORK1DT(:) ) -! -!computation of es - ZWORK1D(:)=EXP(XALPW - & - XBETAW/ZWORK1DT(:) & - -XGAMW*ALOG(ZWORK1DT(:))) -!computation of qs - - IF (LUSERV) & - XLES_MEAN_Qs(:,NLES_CURRENT_TCOUNT,1)=XRD/XRV*ZWORK1D(:)/ & - (XLES_MEAN_P(:,NLES_CURRENT_TCOUNT,1)-ZWORK1D(:)*(1-XRD/XRV)) -! qs is determined from the temperature average over the current_mask -! - CALL LES_MEAN_ll ( ZTH_LES, LLES_CURRENT_CART_MASK, & - XLES_MEAN_Th(:,NLES_CURRENT_TCOUNT,1) ) -! - IF (LUSERV) & - CALL LES_MEAN_ll ( ZTHV_LES, LLES_CURRENT_CART_MASK, & - XLES_MEAN_Thv(:,NLES_CURRENT_TCOUNT,1) ) -! - IF (LUSERC) & - CALL LES_MEAN_ll ( ZTHL_LES, LLES_CURRENT_CART_MASK, & - XLES_MEAN_Thl(:,NLES_CURRENT_TCOUNT,1) ) -! - IF (LUSERC) & - CALL LES_MEAN_ll ( ZRT_LES, LLES_CURRENT_CART_MASK, & - XLES_MEAN_Rt(:,NLES_CURRENT_TCOUNT,1) ) -! - IF (LUSERV) & - CALL LES_MEAN_ll ( ZRV_LES, LLES_CURRENT_CART_MASK, & - XLES_MEAN_Rv(:,NLES_CURRENT_TCOUNT,1) ) -! - IF (LUSERV) & - CALL LES_MEAN_ll ( ZREHU_LES, LLES_CURRENT_CART_MASK, & - XLES_MEAN_Rehu(:,NLES_CURRENT_TCOUNT,1) ) -! - IF (LUSERC) & - CALL LES_MEAN_ll ( ZRC_LES, LLES_CURRENT_CART_MASK, & - XLES_MEAN_Rc(:,NLES_CURRENT_TCOUNT,1) ) -! - IF (LUSERC) THEN - CALL LES_MEAN_ll ( ZINDCLD, LLES_CURRENT_CART_MASK, & - XLES_MEAN_INDCf(:,NLES_CURRENT_TCOUNT,1) ) - CALL LES_MEAN_ll ( ZINDCLD2, LLES_CURRENT_CART_MASK, & - XLES_MEAN_INDCf2(:,NLES_CURRENT_TCOUNT,1) ) - CALL LES_MEAN_ll ( ZCLDFR_LES, LLES_CURRENT_CART_MASK, & - XLES_MEAN_Cf(:,NLES_CURRENT_TCOUNT,1) ) -! -!* cf total - CALL LES_MEAN_ll( ZINDCLD2D, LLES_CURRENT_CART_MASK(:,:,1) , & - XLES_CFtot(NLES_CURRENT_TCOUNT) ) - CALL LES_MEAN_ll( ZINDCLD2D2, LLES_CURRENT_CART_MASK(:,:,1), & - XLES_CF2tot(NLES_CURRENT_TCOUNT) ) - ENDIF -! - IF (LUSERR) THEN - - CALL LES_MEAN_ll ( XINPRR, LLES_CURRENT_CART_MASK(:,:,1), & - XLES_INPRR(NLES_CURRENT_TCOUNT) ) - ZINPRRm=0. - ZCOUNT=0. - ZINDCLD2D(:,:)=0. - DO JJ=1,IJU - DO JI=1,IIU - IF (ZRR_LES(JI,JJ,1) .GT. 1.E-6) ZINPRRm = ZINPRRm+XINPRR(JI,JJ) - IF (ZRR_LES(JI,JJ,1) .GT. 1.E-6) ZINDCLD2D(JI,JJ)=1. - IF (ZRR_LES(JI,JJ,1) .GT. 1.E-6) ZCOUNT=ZCOUNT+1. - END DO - END DO - IF (ZCOUNT .GE. 1) ZINPRRm=ZINPRRm/ZCOUNT - XLES_RAIN_INPRR(NLES_CURRENT_TCOUNT)=ZINPRRm - CALL LES_MEAN_ll ( ZINDCLD2D, LLES_CURRENT_CART_MASK(:,:,1), & - XLES_PRECFR(NLES_CURRENT_TCOUNT) ) - CALL LES_MEAN_ll ( ZINPRR3D_LES, LLES_CURRENT_CART_MASK, & - XLES_INPRR3D(:,NLES_CURRENT_TCOUNT,1) ) - CALL LES_MEAN_ll ( ZEVAP3D_LES, LLES_CURRENT_CART_MASK, & - XLES_EVAP3D(:,NLES_CURRENT_TCOUNT,1) ) - DO JK=1,NLES_K - CHAMPXY1(:,:,1)=ZINPRR3D_LES(:,:,JK) - XLES_MAX_INPRR3D(JK,NLES_CURRENT_TCOUNT,1)=MAX_ll (CHAMPXY1,IINFO_ll, & - IIA_ll,IJA_ll,1,IIU_ll,IJU_ll,1) - END DO -! - -! conversion de m/s en mm/day - XLES_RAIN_INPRR(NLES_CURRENT_TCOUNT)=XLES_RAIN_INPRR(NLES_CURRENT_TCOUNT)*3.6E6*24. - XLES_INPRR(NLES_CURRENT_TCOUNT)=XLES_INPRR(NLES_CURRENT_TCOUNT)*3.6E6*24. - - CALL LES_MEAN_ll ( XACPRR, LLES_CURRENT_CART_MASK(:,:,1), & - XLES_ACPRR(NLES_CURRENT_TCOUNT) ) -! conversion de m en mm - XLES_ACPRR(NLES_CURRENT_TCOUNT)=XLES_ACPRR(NLES_CURRENT_TCOUNT)*1000. - CALL LES_MEAN_ll ( ZRAINFR_LES, LLES_CURRENT_CART_MASK, & - XLES_MEAN_RF(:,NLES_CURRENT_TCOUNT,1) ) - - ENDIF -! - IF (LUSERC ) THEN - IF (( CCLOUD(1:3) == 'ICE' .AND.LSEDIC) .OR. & - ((CCLOUD=='C2R2' .OR. CCLOUD=='C3R5' .OR. CCLOUD=='KHKO').AND.LSEDC) .OR. & - ( CCLOUD=='LIMA' .AND.MSEDC)) THEN - CALL LES_MEAN_ll ( XINPRC, LLES_CURRENT_CART_MASK(:,:,1), & - XLES_INPRC(NLES_CURRENT_TCOUNT) ) -! conversion from m/s to mm/day - XLES_INPRC(NLES_CURRENT_TCOUNT)=XLES_INPRC(NLES_CURRENT_TCOUNT)*3.6E6*24. - ENDIF - IF ( (((CCLOUD == 'KHKO') .OR.(CCLOUD == 'C2R2')) .AND. LDEPOC) & - .OR. ( (CCLOUD(1:3) == 'ICE') .AND. LDEPOSC) ) THEN - CALL LES_MEAN_ll ( XINDEP, LLES_CURRENT_CART_MASK(:,:,1), & - XLES_INDEP(NLES_CURRENT_TCOUNT) ) -! conversion from m/s to mm/day - XLES_INDEP(NLES_CURRENT_TCOUNT)=XLES_INDEP(NLES_CURRENT_TCOUNT)*3.6E6*24. - ENDIF - ENDIF -! - IF (LUSERR) & - CALL LES_MEAN_ll ( ZRR_LES, LLES_CURRENT_CART_MASK, & - XLES_MEAN_Rr(:,NLES_CURRENT_TCOUNT,1) ) -! - IF (LUSERI) & - CALL LES_MEAN_ll ( ZRI_LES, LLES_CURRENT_CART_MASK, & - XLES_MEAN_Ri(:,NLES_CURRENT_TCOUNT,1) ) - CALL LES_MEAN_ll ( ZICEFR_LES, LLES_CURRENT_CART_MASK, & - XLES_MEAN_If(:,NLES_CURRENT_TCOUNT,1) ) -! - IF (LUSERS) & - CALL LES_MEAN_ll ( ZRS_LES, LLES_CURRENT_CART_MASK, & - XLES_MEAN_Rs(:,NLES_CURRENT_TCOUNT,1) ) -! - IF (LUSERG) & - CALL LES_MEAN_ll ( ZRG_LES, LLES_CURRENT_CART_MASK, & - XLES_MEAN_Rg(:,NLES_CURRENT_TCOUNT,1) ) -! - IF (LUSERH) & - CALL LES_MEAN_ll ( ZRH_LES, LLES_CURRENT_CART_MASK, & - XLES_MEAN_Rh(:,NLES_CURRENT_TCOUNT,1) ) -! - DO JSV=1,NSV - CALL LES_MEAN_ll ( ZSV_LES(:,:,:,JSV), LLES_CURRENT_CART_MASK, & - XLES_MEAN_Sv(:,NLES_CURRENT_TCOUNT,1,JSV) ) - END DO -! - CALL LES_MEAN_ll ( ZDPDZ_LES, LLES_CURRENT_CART_MASK, & - ZMEAN_DPDZ(:) ) - CALL LES_MEAN_ll ( ZDTHDZ_LES, LLES_CURRENT_CART_MASK, & - ZLES_MEAN_DTHDZ(:) ) - -! -!* build the 3D resolved turbulent fields by removing the mean field -! -DO JJ=1,IJU - DO JI=1,IIU - ZP_ANOM(JI,JJ,:) = ZP_LES(JI,JJ,:) - XLES_MEAN_P(:,NLES_CURRENT_TCOUNT,1) - ZDPDZ_ANOM(JI,JJ,:) = ZDPDZ_LES(JI,JJ,:) - ZMEAN_DPDZ(:) - ZTH_ANOM(JI,JJ,:) = ZTH_LES(JI,JJ,:) - XLES_MEAN_Th(:,NLES_CURRENT_TCOUNT,1) - ZRHO_ANOM(JI,JJ,:) = ZRHO_LES(JI,JJ,:) - XLES_MEAN_Rho(:,NLES_CURRENT_TCOUNT,1) - IF (LUSERV) THEN - ZTHV_ANOM(JI,JJ,:) = ZTHV_LES(JI,JJ,:) - XLES_MEAN_Thv(:,NLES_CURRENT_TCOUNT,1) - ZRV_ANOM(JI,JJ,:) = ZRV_LES(JI,JJ,:) - XLES_MEAN_Rv(:,NLES_CURRENT_TCOUNT,1) - END IF - IF (LUSERC) THEN - ZRC_ANOM(JI,JJ,:) = ZRC_LES(JI,JJ,:) - XLES_MEAN_Rc(:,NLES_CURRENT_TCOUNT,1) - ZLWP_ANOM(JI,JJ) =ZLWP_LES(JI,JJ)-XLES_LWP(NLES_CURRENT_TCOUNT) - END IF - IF (LUSERI) THEN - ZRI_ANOM(JI,JJ,:) = ZRI_LES(JI,JJ,:) - XLES_MEAN_Ri(:,NLES_CURRENT_TCOUNT,1) - END IF - IF (LUSERR) THEN - ZRR_ANOM(JI,JJ,:) = ZRR_LES(JI,JJ,:) - XLES_MEAN_Rr(:,NLES_CURRENT_TCOUNT,1) - END IF - END DO -END DO -! -! -!-------------------------------------------------------------------------------- -! -!* vertical grid computed at first LES call for this model -! -IF (NLES_CURRENT_TCOUNT==1) THEN - ALLOCATE(ZZ_LES (IIU,IJU,NLES_K)) - CALL LES_VER_INT( MZF(XZZ) ,ZZ_LES ) - CALL LES_MEAN_ll ( ZZ_LES, LLES_CURRENT_CART_MASK, XLES_Z ) - DEALLOCATE(ZZ_LES) - CALL LES_MEAN_ll ( XZS, LLES_CURRENT_CART_MASK(:,:,1), XLES_ZS ) -END IF -! -!------------------------------------------------------------------------------- -! -!* 3. Vertical interpolations to SECTRA computations vertical grid -! ------------------------------------------------------------ -! -!* note that velocity fields are previously localized on the MASS points -! -CALL SPEC_VER_INT(IMI, MXF(XUT) ,ZU_SPEC ) -CALL SPEC_VER_INT(IMI, MYF(XVT) ,ZV_SPEC ) -CALL SPEC_VER_INT(IMI, MZF(XWT) ,ZW_SPEC ) -CALL SPEC_VER_INT(IMI, XTHT ,ZTH_SPEC ) -IF (LUSERC) CALL SPEC_VER_INT(IMI, ZTHL ,ZTHL_SPEC) -IRR = 0 -IF (LUSERV) THEN - IRR = IRR + 1 - CALL SPEC_VER_INT(IMI, XRT(:,:,:,IRR) ,ZRV_SPEC ) -END IF -IF (LUSERC) THEN - IRR = IRR + 1 - CALL SPEC_VER_INT(IMI, XRT(:,:,:,IRR) ,ZRC_SPEC ) -END IF -IF (LUSERR) THEN - IRR = IRR + 1 -END IF -IF (LUSERI) THEN - IRR = IRR + 1 - CALL SPEC_VER_INT(IMI, XRT(:,:,:,IRR) ,ZRI_SPEC ) -END IF -IF (NSV>0) THEN - DO JSV=1,NSV - CALL SPEC_VER_INT(IMI, XSVT(:,:,:,JSV), ZSV_SPEC(:,:,:,JSV) ) - END DO -END IF -! -!------------------------------------------------------------------------------- -! -!* 4. Call to LES computations on cartesian (sub-)domain -! -------------------------------------------------- -! -IMASK=1 -! -CALL LES(LLES_CURRENT_CART_MASK) -! -!------------------------------------------------------------------------------- -! -!* 5. Call to LES computations on nebulosity mask -! ------------------------------------------- -! -IF (LLES_NEB_MASK) THEN - IMASK=IMASK+1 - CALL LES(LLES_CURRENT_NEB_MASK .AND. LLES_CURRENT_CART_MASK) -! - IMASK=IMASK+1 - CALL LES((.NOT. LLES_CURRENT_NEB_MASK) .AND. LLES_CURRENT_CART_MASK) -END IF -! -!------------------------------------------------------------------------------- -! -!* 6. Call to LES computations on cloud core mask -! ------------------------------------------- -! -IF (LLES_CORE_MASK) THEN - IMASK=IMASK+1 - CALL LES(LLES_CURRENT_CORE_MASK .AND. LLES_CURRENT_CART_MASK) -! - IMASK=IMASK+1 - CALL LES((.NOT. LLES_CURRENT_CORE_MASK) .AND. LLES_CURRENT_CART_MASK) -END IF -! -!------------------------------------------------------------------------------- -! -!* 7. Call to LES computations on user mask -! ------------------------------------- -! -IF (LLES_MY_MASK) THEN - DO JI=1,NLES_MASKS_USER - IMASK=IMASK+1 - CALL LES(LLES_CURRENT_MY_MASKS(:,:,:,JI)) - END DO -END IF -! -!------------------------------------------------------------------------------- -! -!* 7b. Call to LES computations on conditional sampling mask -! ----------------------------------------------------- -! -IF (LLES_CS_MASK) THEN - IMASK=IMASK+1 - CALL LES(LLES_CURRENT_CS1_MASK) - IMASK=IMASK+1 - CALL LES(LLES_CURRENT_CS2_MASK) - IMASK=IMASK+1 - CALL LES(LLES_CURRENT_CS3_MASK) -END IF -! -!------------------------------------------------------------------------------- -! -!* 8. budgets -! ------- -! -!* 8.1 tendencies -! ---------- -! -! -!* 8.2 dynamical production, transport and mean advection -! -------------------------------------------------- -! -ALLOCATE(ZLES_MEAN_DRtDZ(NLES_K)) -ALLOCATE(ZLES_MEAN_DSVDZ(NLES_K,NSV)) -! -IF (LUSERV) THEN - ZLES_MEAN_DRtDZ(:) = XLES_MEAN_DRtDZ(:,NLES_CURRENT_TCOUNT,1) -ELSE - ZLES_MEAN_DRtDZ(:) = XUNDEF -END IF -! -ZLES_MEAN_DSVDZ = 0. -DO JSV=1,NSV - ZLES_MEAN_DSvDZ(:,JSV) = XLES_MEAN_DSvDZ(:,NLES_CURRENT_TCOUNT,1,JSV) -END DO -! -CALL LES_RES_TR(LUSERV, & - XLES_MEAN_DUDZ(:,NLES_CURRENT_TCOUNT,1), & - XLES_MEAN_DVDZ(:,NLES_CURRENT_TCOUNT,1), & - XLES_MEAN_DWDZ(:,NLES_CURRENT_TCOUNT,1), & - XLES_MEAN_DThlDZ(:,NLES_CURRENT_TCOUNT,1), & - ZLES_MEAN_DRtDZ(:), & - ZLES_MEAN_DSvDZ(:,:) ) -! -DEALLOCATE(ZLES_MEAN_DRtDZ) -DEALLOCATE(ZLES_MEAN_DSVDZ) -! -CALL LES_BUDGET_TEND_n -!* 8.3 end of LES budgets computations -! ------------------------------- -! -DO JLOOP=1,NLES_TOT - XLES_BU_RES_KE (:,NLES_CURRENT_TCOUNT,JLOOP) = X_LES_BU_RES_KE (:,JLOOP) - XLES_BU_RES_WThl (:,NLES_CURRENT_TCOUNT,JLOOP) = X_LES_BU_RES_WThl (:,JLOOP) - XLES_BU_RES_Thl2 (:,NLES_CURRENT_TCOUNT,JLOOP) = X_LES_BU_RES_Thl2 (:,JLOOP) - XLES_BU_SBG_Tke (:,NLES_CURRENT_TCOUNT,JLOOP) = X_LES_BU_SBG_Tke (:,JLOOP) - IF (LUSERV) THEN - XLES_BU_RES_WRt (:,NLES_CURRENT_TCOUNT,JLOOP) = X_LES_BU_RES_WRt (:,JLOOP) - XLES_BU_RES_Rt2 (:,NLES_CURRENT_TCOUNT,JLOOP) = X_LES_BU_RES_Rt2 (:,JLOOP) - XLES_BU_RES_ThlRt(:,NLES_CURRENT_TCOUNT,JLOOP) = X_LES_BU_RES_ThlRt(:,JLOOP) - END IF - DO JSV=1,NSV - XLES_BU_RES_Sv2 (:,NLES_CURRENT_TCOUNT,JLOOP,JSV) = X_LES_BU_RES_Sv2 (:,JLOOP,JSV) - XLES_BU_RES_WSv (:,NLES_CURRENT_TCOUNT,JLOOP,JSV) = X_LES_BU_RES_WSv (:,JLOOP,JSV) - END DO -END DO -! -!------------------------------------------------------------------------------- -! -!* 9. Deallocations -! ------------- -! -!* 9.1 local variables -! --------------- -! -DEALLOCATE(ZEXN ) -DEALLOCATE(ZTHL) -DEALLOCATE(ZRT ) -DEALLOCATE(ZTHV ) -DEALLOCATE(ZRHO ) -DEALLOCATE(ZEW ) - -DEALLOCATE(ZINDCLD ) -DEALLOCATE(ZINDCLD2 ) -DEALLOCATE(ZINDCLD2D ) -DEALLOCATE(ZINDCLD2D2) -DEALLOCATE(ZCLDFR_LES) -DEALLOCATE(ZICEFR_LES) -DEALLOCATE(ZRAINFR_LES) -DEALLOCATE(ZMASSF ) -DEALLOCATE(ZTEMP ) -DEALLOCATE(ZREHU ) -DEALLOCATE(CHAMPXY1 ) -! -DEALLOCATE(ZU_LES) -DEALLOCATE(ZV_LES) -DEALLOCATE(ZW_LES) -DEALLOCATE(ZTHL_LES) -DEALLOCATE(ZRT_LES) -DEALLOCATE(ZSV_LES) -DEALLOCATE(ZP_LES ) -DEALLOCATE(ZDP_LES ) -DEALLOCATE(ZTP_LES ) -DEALLOCATE(ZTR_LES ) -DEALLOCATE(ZDISS_LES ) -DEALLOCATE(ZLM_LES ) -DEALLOCATE(ZDPDZ_LES) -DEALLOCATE(ZLWP_ANOM) -DEALLOCATE(ZWORK2D) -DEALLOCATE(ZWORK1D) -DEALLOCATE(ZWORK1DT) -DEALLOCATE(ZMAXWRR2D) -DEALLOCATE(ZDTHLDZ_LES) -DEALLOCATE(ZDTHDZ_LES) -DEALLOCATE(ZDRTDZ_LES) -DEALLOCATE(ZDSVDZ_LES) -DEALLOCATE(ZDUDZ_LES) -DEALLOCATE(ZDVDZ_LES) -DEALLOCATE(ZDWDZ_LES) -DEALLOCATE(ZRHO_LES ) -DEALLOCATE(ZEXN_LES ) -DEALLOCATE(ZTH_LES ) -DEALLOCATE(ZMF_LES ) -DEALLOCATE(ZTHV_LES ) -DEALLOCATE(ZTKE_LES ) -DEALLOCATE(ZKE_LES ) -DEALLOCATE(ZTKET_LES) -DEALLOCATE(ZRV_LES ) -DEALLOCATE(ZREHU_LES ) -DEALLOCATE(ZRC_LES ) -DEALLOCATE(ZRR_LES ) -DEALLOCATE(ZZZ_LES) -DEALLOCATE(ZLWP_LES ) -DEALLOCATE(ZRWP_LES ) -DEALLOCATE(ZIWP_LES ) -DEALLOCATE(ZSWP_LES ) -DEALLOCATE(ZGWP_LES ) -DEALLOCATE(ZHWP_LES ) -DEALLOCATE(ZINPRR3D_LES) -DEALLOCATE(ZEVAP3D_LES) -DEALLOCATE(ZRI_LES ) -DEALLOCATE(ZRS_LES ) -DEALLOCATE(ZRG_LES ) -DEALLOCATE(ZRH_LES ) -DEALLOCATE(ZP_ANOM ) -DEALLOCATE(ZRHO_ANOM) -DEALLOCATE(ZTH_ANOM ) -DEALLOCATE(ZTHV_ANOM) -DEALLOCATE(ZRV_ANOM ) -DEALLOCATE(ZRC_ANOM ) -DEALLOCATE(ZRI_ANOM ) -DEALLOCATE(ZRR_ANOM ) -DEALLOCATE(ZDPDZ_ANOM) -DEALLOCATE(ZMEAN_DPDZ) -DEALLOCATE(ZLES_MEAN_DTHDZ) -! -DEALLOCATE(ZU_SPEC ) -DEALLOCATE(ZV_SPEC ) -DEALLOCATE(ZW_SPEC ) -DEALLOCATE(ZTH_SPEC ) -DEALLOCATE(ZTHL_SPEC ) -DEALLOCATE(ZRV_SPEC ) -DEALLOCATE(ZRC_SPEC ) -DEALLOCATE(ZRI_SPEC ) -DEALLOCATE(ZSV_SPEC ) -! -DEALLOCATE(ZRADEFF_LES ) -DEALLOCATE(ZSWU_LES ) -DEALLOCATE(ZSWD_LES ) -DEALLOCATE(ZLWD_LES ) -DEALLOCATE(ZLWU_LES ) -DEALLOCATE(ZDTHRADSW_LES ) -DEALLOCATE(ZDTHRADLW_LES ) -! -!* 9.2 current time-step LES masks (in MODD_LES) -! --------------------------- -! -CALL LES_DEALLOCATE('LLES_CURRENT_CART_MASK') -IF (LLES_NEB_MASK) CALL LES_DEALLOCATE('LLES_CURRENT_NEB_MASK') -IF (LLES_CORE_MASK) CALL LES_DEALLOCATE('LLES_CURRENT_CORE_MASK') -IF (LLES_MY_MASK) THEN - CALL LES_DEALLOCATE('LLES_CURRENT_MY_MASKS') -END IF -IF (LLES_CS_MASK) THEN - CALL LES_DEALLOCATE('LLES_CURRENT_CS1_MASK') - IF (NSV_CS >= 2) CALL LES_DEALLOCATE('LLES_CURRENT_CS2_MASK') - IF (NSV_CS == 3) CALL LES_DEALLOCATE('LLES_CURRENT_CS3_MASK') -END IF -! -! -!* 9.3 variables in MODD_LES_BUDGET -! ---------------------------- -! - -DEALLOCATE(XU_ANOM ) -DEALLOCATE(XV_ANOM ) -DEALLOCATE(XW_ANOM ) -DEALLOCATE(XTHL_ANOM) -DEALLOCATE(XRT_ANOM ) -DEALLOCATE(XSV_ANOM ) -! -DEALLOCATE(XCURRENT_L_O_EXN_CP) -DEALLOCATE(XCURRENT_RHODJ ) -! -DEALLOCATE(XCURRENT_RUS ) -DEALLOCATE(XCURRENT_RVS ) -DEALLOCATE(XCURRENT_RWS ) -DEALLOCATE(XCURRENT_RTHS ) -DEALLOCATE(XCURRENT_RTKES) -DEALLOCATE(XCURRENT_RRS ) -DEALLOCATE(XCURRENT_RSVS ) -DEALLOCATE(XCURRENT_RTHLS) -DEALLOCATE(XCURRENT_RRTS ) - -DEALLOCATE(X_LES_BU_RES_KE ) -DEALLOCATE(X_LES_BU_RES_WThl ) -DEALLOCATE(X_LES_BU_RES_Thl2 ) -DEALLOCATE(X_LES_BU_RES_WRt ) -DEALLOCATE(X_LES_BU_RES_Rt2 ) -DEALLOCATE(X_LES_BU_RES_ThlRt) -DEALLOCATE(X_LES_BU_RES_Sv2 ) -DEALLOCATE(X_LES_BU_RES_WSv ) -DEALLOCATE(X_LES_BU_SBG_TKE ) -!------------------------------------------------------------------------------- -! -!* 10. end of LES computations for this time-step -! ------------------------------------------ -! -LLES_CALL=.FALSE. -CALL BUDGET_FLAGS(LUSERV, LUSERC, LUSERR, & - LUSERI, LUSERS, LUSERG, LUSERH ) -! -!------------------------------------------------------------------------------- -! -CONTAINS -! -! ########################################################################## - SUBROUTINE LES(OMASK) -! ########################################################################## -! -! -!!**** *LES* computes the current time-step LES diagnostics for one mask. -!! -!! -!! PURPOSE -!! ------- -!! -!! EXTERNAL -!! -------- -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! AUTHOR -!! ------ -!! V. Masson -!! -!! MODIFICATIONS -!! ------------- -!! Original 07/02/00 -!! -!! -------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_PARAMETERS -! -USE MODI_LES_FLUX_ll -USE MODI_LES_3RD_MOMENT_ll -USE MODI_LES_4TH_MOMENT_ll -USE MODI_LES_MEAN_1PROC -USE MODI_LES_MEAN_MPROC -USE MODI_LES_PDF_ll -! -USE MODI_LES_HOR_CORR -! -IMPLICIT NONE -! -! -!* 0.1 declarations of arguments -! -LOGICAL, DIMENSION(:,:,:), INTENT(IN) :: OMASK ! 2D mask for computations -! -! -! -! 0.2 declaration of local variables -! -INTEGER :: JSV ! scalar variables counter -INTEGER :: JI -INTEGER :: JK ! vertical loop counter -INTEGER :: JPDF ! pdf counter -! -LOGICAL, DIMENSION(SIZE(ZW_LES,1),SIZE(ZW_LES,2),SIZE(ZW_LES,3)) :: GUPDRAFT_MASK -LOGICAL, DIMENSION(SIZE(ZW_LES,1),SIZE(ZW_LES,2),SIZE(ZW_LES,3)) :: GDOWNDRAFT_MASK -REAL, DIMENSION(SIZE(ZW_LES,1),SIZE(ZW_LES,2),SIZE(ZW_LES,3)) :: ZUPDRAFT -REAL, DIMENSION(SIZE(ZW_LES,1),SIZE(ZW_LES,2),SIZE(ZW_LES,3)) :: ZDOWNDRAFT -REAL, DIMENSION(SIZE(ZW_LES,1),SIZE(ZW_LES,2),SIZE(ZW_LES,3)) :: ZW_UP -REAL, DIMENSION(SIZE(ZW_LES,1),SIZE(ZW_LES,2),SIZE(ZW_LES,3)) :: ZWORK_LES -! -INTEGER, DIMENSION(SIZE(ZW_LES,3)) :: IAVG_PTS -INTEGER, DIMENSION(SIZE(ZW_LES,3)) :: IUND_PTS -REAL, DIMENSION(SIZE(ZW_LES,3)) :: ZAVG -! -REAL, DIMENSION(SIZE(ZW_LES,3)) :: ZLES_RESOLVED_U3 -REAL, DIMENSION(SIZE(ZW_LES,3)) :: ZLES_RESOLVED_UV2 -REAL, DIMENSION(SIZE(ZW_LES,3)) :: ZLES_RESOLVED_UW2 -REAL, DIMENSION(SIZE(ZW_LES,3)) :: ZLES_RESOLVED_VU2 -REAL, DIMENSION(SIZE(ZW_LES,3)) :: ZLES_RESOLVED_V3 -REAL, DIMENSION(SIZE(ZW_LES,3)) :: ZLES_RESOLVED_VW2 -REAL, DIMENSION(SIZE(ZW_LES,3)) :: ZLES_RESOLVED_WU2 -REAL, DIMENSION(SIZE(ZW_LES,3)) :: ZLES_RESOLVED_WV2 -REAL, DIMENSION(SIZE(ZW_LES,3)) :: ZLES_UPDRAFT_U2 -REAL, DIMENSION(SIZE(ZW_LES,3)) :: ZLES_UPDRAFT_V2 -REAL, DIMENSION(SIZE(ZW_LES,3)) :: ZLES_UPDRAFT_W2 -REAL, DIMENSION(SIZE(ZW_LES,3)) :: ZLES_DOWNDRAFT_U2 -REAL, DIMENSION(SIZE(ZW_LES,3)) :: ZLES_DOWNDRAFT_V2 -REAL, DIMENSION(SIZE(ZW_LES,3)) :: ZLES_DOWNDRAFT_W2 -REAL, DIMENSION(SIZE(ZW_LES,3),NPDF) :: ZPDF -! -INTEGER, DIMENSION(1) :: IKMIN_FLUX ! vertical index of min. W'thl' -INTEGER, DIMENSION(1) :: IKMAX_TH !vertical index maxdth -INTEGER, DIMENSION(1) :: IKMAX_CF ! vertical index of max. Cf -! -REAL, DIMENSION(SIZE(ZW_LES,3)) :: ZKE_TOT ! total turbulent kinetic energy -REAL :: ZINT_KE_TOT! integral of KE_TOT -REAL :: ZINT_RHOKE! integral of RHO*KE -REAL :: ZFRIC_SURF ! surface friction -REAL, DIMENSION(SIZE(ZW_LES,3)) :: ZFRIC_LES ! friction at all LES levels -! -!------------------------------------------------------------------------------- -! -! 1. local diagnostics (for any mask type) -! ----------------- -! -! -! 1.2 Number of points used for averaging on current processor -! -------------------------------------------------------- -! -!* to be sure to be coherent with other computations, -! a field on LES vertical grid (and horizontal mass point grid) is used. -! This information is necessary for the subgrid fluxes computations, because -! half of the work is already done, but the number of averaging points was -! not kept. -! -CALL LES_MEAN_1PROC ( XW_ANOM, OMASK, & - ZAVG(:), & - IAVG_PTS(:), & - IUND_PTS(:) ) -! -! -! 1.3 Number of points used for averaging on all processor -! ---------------------------------------------------- -! -CALL LES_MEAN_ll ( XW_ANOM, OMASK, & - ZAVG(:), & - NLES_AVG_PTS_ll(:,NLES_CURRENT_TCOUNT,IMASK), & - NLES_UND_PTS_ll(:,NLES_CURRENT_TCOUNT,IMASK) ) -! -! -! 1.4 Mean quantities -! --------------- -! -IF (LLES_MEAN .AND. IMASK > 1) THEN -! -!* horizontal wind velocities -! - CALL LES_MEAN_ll ( ZU_LES, OMASK, & - XLES_MEAN_U(:,NLES_CURRENT_TCOUNT,IMASK) ) -! - CALL LES_MEAN_ll ( ZV_LES, OMASK, & - XLES_MEAN_V(:,NLES_CURRENT_TCOUNT,IMASK) ) -! -!* vertical wind velocity -! - CALL LES_MEAN_ll ( ZW_LES, OMASK, & - XLES_MEAN_W(:,NLES_CURRENT_TCOUNT,IMASK) ) -! -!* pressure -! - CALL LES_MEAN_ll ( ZP_LES, OMASK, & - XLES_MEAN_P(:,NLES_CURRENT_TCOUNT,IMASK) ) -! -!* dynamical production TKE -! - CALL LES_MEAN_ll ( ZDP_LES, OMASK, & - XLES_MEAN_DP(:,NLES_CURRENT_TCOUNT,IMASK) ) -! -!* thermal production TKE -! - CALL LES_MEAN_ll ( ZTP_LES, OMASK, & - XLES_MEAN_TP(:,NLES_CURRENT_TCOUNT,IMASK) ) -! -!* transport TKE -! - CALL LES_MEAN_ll ( ZTR_LES, OMASK, & - XLES_MEAN_TR(:,NLES_CURRENT_TCOUNT,IMASK) ) -! -!* dissipation TKE -! - CALL LES_MEAN_ll ( ZDISS_LES, OMASK, & - XLES_MEAN_DISS(:,NLES_CURRENT_TCOUNT,IMASK) ) -! -!* mixing length -! - CALL LES_MEAN_ll ( ZLM_LES, OMASK, & - XLES_MEAN_LM(:,NLES_CURRENT_TCOUNT,IMASK) ) -! -!* density -! - CALL LES_MEAN_ll ( ZRHO_LES, OMASK, & - XLES_MEAN_RHO(:,NLES_CURRENT_TCOUNT,IMASK) ) -! -! -!* potential temperature -! - CALL LES_MEAN_ll ( ZTH_LES, OMASK, & - XLES_MEAN_Th(:,NLES_CURRENT_TCOUNT,IMASK) ) -! -!* mass flux - CALL LES_MEAN_ll ( ZMF_LES, OMASK, & - XLES_MEAN_Mf(:,NLES_CURRENT_TCOUNT,IMASK) ) -! -! -!* virtual potential temperature -! - IF (LUSERV) & - CALL LES_MEAN_ll ( ZTHV_LES, OMASK, & - XLES_MEAN_Thv(:,NLES_CURRENT_TCOUNT,IMASK) ) -! -!* liquid potential temperature -! - IF (LUSERC) THEN - CALL LES_MEAN_ll ( ZTHL_LES, OMASK, & - XLES_MEAN_Thl(:,NLES_CURRENT_TCOUNT,IMASK) ) - END IF -! -!* vapor mixing ratio -! - IF (LUSERV) THEN - CALL LES_MEAN_ll ( ZRV_LES, OMASK, & - XLES_MEAN_Rv(:,NLES_CURRENT_TCOUNT,IMASK) ) - END IF -! -!*relative humidity -! - IF (LUSERV) THEN - CALL LES_MEAN_ll ( ZREHU_LES, OMASK, & - XLES_MEAN_Rehu(:,NLES_CURRENT_TCOUNT,IMASK) ) - END IF -! -!* cloud mixing ratio -! - IF (LUSERC) THEN - CALL LES_MEAN_ll ( ZRC_LES, OMASK, & - XLES_MEAN_Rc(:,NLES_CURRENT_TCOUNT,IMASK) ) - CALL LES_MEAN_ll ( ZRT_LES, OMASK, & - XLES_MEAN_Rt(:,NLES_CURRENT_TCOUNT,IMASK) ) - END IF -! -!* rain mixing ratio -! - IF (LUSERR) THEN - CALL LES_MEAN_ll ( ZRR_LES, OMASK, & - XLES_MEAN_Rr(:,NLES_CURRENT_TCOUNT,IMASK) ) - END IF -! -!* ice mixing ratio -! - IF (LUSERI) THEN - CALL LES_MEAN_ll ( ZRI_LES, OMASK, & - XLES_MEAN_Ri(:,NLES_CURRENT_TCOUNT,IMASK) ) - END IF -! -!* snow mixing ratio -! - IF (LUSERS) THEN - CALL LES_MEAN_ll ( ZRS_LES, OMASK, & - XLES_MEAN_Rs(:,NLES_CURRENT_TCOUNT,IMASK) ) - END IF -! -!* graupel mixing ratio -! - IF (LUSERG) THEN - CALL LES_MEAN_ll ( ZRG_LES, OMASK, & - XLES_MEAN_Rg(:,NLES_CURRENT_TCOUNT,IMASK) ) - END IF -! -!* hail mixing ratio -! - IF (LUSERH) THEN - CALL LES_MEAN_ll ( ZRH_LES, OMASK, & - XLES_MEAN_Rh(:,NLES_CURRENT_TCOUNT,IMASK) ) - END IF -! -!* scalar variables mixing ratio -! - DO JSV=1,NSV - CALL LES_MEAN_ll ( ZSV_LES(:,:,:,JSV), OMASK, & - XLES_MEAN_Sv(:,NLES_CURRENT_TCOUNT,IMASK,JSV) ) - END DO -END IF -! -!* wind modulus -! -IF (LLES_MEAN) THEN -! - ZWORK_LES =SQRT( ZU_LES**2 +ZV_LES**2 ) - CALL LES_MEAN_ll ( ZWORK_LES, OMASK, & - XLES_MEAN_WIND(:,NLES_CURRENT_TCOUNT,IMASK) ) -! -!* vertical speed larger than mean vertical speed (updraft) -! - DO JK=1,NLES_K - ZW_UP(:,:,JK) = MAX(ZW_LES(:,:,JK), XLES_MEAN_W(JK,NLES_CURRENT_TCOUNT,IMASK)) - END DO -! -!* upward mass flux -! - ZWORK_LES = ZW_UP * ZRHO_LES - CALL LES_MEAN_ll ( ZWORK_LES, OMASK, & - XLES_RESOLVED_MASSFX(:,NLES_CURRENT_TCOUNT,IMASK) ) -! -!* pdf calculation -! - IF (LLES_PDF) THEN - CALL LES_PDF_ll ( ZTH_LES,OMASK,XTH_PDF_MIN,XTH_PDF_MAX, & - ZPDF(:,:) ) - DO JSV=1,NPDF - XLES_PDF_TH(:,NLES_CURRENT_TCOUNT,IMASK,JSV)=ZPDF(:,JSV) - END DO - - CALL LES_PDF_ll ( ZW_LES,OMASK,XW_PDF_MIN,XW_PDF_MAX, & - ZPDF(:,:) ) - DO JSV=1,NPDF - XLES_PDF_W(:,NLES_CURRENT_TCOUNT,IMASK,JSV)=ZPDF(:,JSV) - END DO - CALL LES_PDF_ll ( ZTHV_LES,OMASK,XTHV_PDF_MIN,XTHV_PDF_MAX, & - ZPDF(:,:) ) - DO JSV=1,NPDF - XLES_PDF_THV(:,NLES_CURRENT_TCOUNT,IMASK,JSV)=ZPDF(:,JSV) - END DO - IF (LUSERV) THEN - CALL LES_PDF_ll ( ZRV_LES,OMASK,XRV_PDF_MIN,XRV_PDF_MAX, & - ZPDF(:,:) ) - DO JSV=1,NPDF - XLES_PDF_RV(:,NLES_CURRENT_TCOUNT,IMASK,JSV)=ZPDF(:,JSV) - END DO - END IF - IF (LUSERC) THEN - CALL LES_PDF_ll ( ZRC_LES,OMASK,XRC_PDF_MIN,XRC_PDF_MAX, & - ZPDF(:,:) ) - DO JSV=1,NPDF - XLES_PDF_RC(:,NLES_CURRENT_TCOUNT,IMASK,JSV)=ZPDF(:,JSV) - END DO - CALL LES_PDF_ll ( ZRT_LES,OMASK,XRT_PDF_MIN,XRT_PDF_MAX, & - ZPDF(:,:) ) - DO JSV=1,NPDF - XLES_PDF_RT(:,NLES_CURRENT_TCOUNT,IMASK,JSV)=ZPDF(:,JSV) - END DO - CALL LES_PDF_ll ( ZTHL_LES,OMASK,XTHL_PDF_MIN,XTHL_PDF_MAX, & - ZPDF(:,:) ) - DO JSV=1,NPDF - XLES_PDF_THL(:,NLES_CURRENT_TCOUNT,IMASK,JSV)=ZPDF(:,JSV) - END DO - END IF - IF (LUSERR) THEN - CALL LES_PDF_ll ( ZRR_LES,OMASK,XRR_PDF_MIN,XRR_PDF_MAX, & - ZPDF(:,:) ) - DO JSV=1,NPDF - XLES_PDF_RR(:,NLES_CURRENT_TCOUNT,IMASK,JSV)=ZPDF(:,JSV) - END DO - END IF - IF (LUSERI) THEN - CALL LES_PDF_ll ( ZRI_LES,OMASK,XRI_PDF_MIN,XRI_PDF_MAX, & - ZPDF(:,:) ) - DO JSV=1,NPDF - XLES_PDF_RI(:,NLES_CURRENT_TCOUNT,IMASK,JSV)=ZPDF(:,JSV) - END DO - END IF - IF (LUSERS) THEN - CALL LES_PDF_ll ( ZRS_LES,OMASK,XRS_PDF_MIN,XRS_PDF_MAX, & - ZPDF(:,:) ) - DO JSV=1,NPDF - XLES_PDF_RS(:,NLES_CURRENT_TCOUNT,IMASK,JSV)=ZPDF(:,JSV) - END DO - END IF - IF (LUSERG) THEN - CALL LES_PDF_ll ( ZRG_LES,OMASK,XRG_PDF_MIN,XRG_PDF_MAX, & - ZPDF(:,:) ) - DO JSV=1,NPDF - XLES_PDF_RG(:,NLES_CURRENT_TCOUNT,IMASK,JSV)=ZPDF(:,JSV) - END DO - END IF - END IF -! -!* mean vertical gradients -! - CALL LES_MEAN_ll ( ZDTHLDZ_LES, OMASK, XLES_MEAN_DTHLDZ(:,NLES_CURRENT_TCOUNT,IMASK) ) - CALL LES_MEAN_ll ( ZDUDZ_LES, OMASK, XLES_MEAN_DUDZ(:,NLES_CURRENT_TCOUNT,IMASK) ) - CALL LES_MEAN_ll ( ZDVDZ_LES, OMASK, XLES_MEAN_DVDZ(:,NLES_CURRENT_TCOUNT,IMASK) ) - CALL LES_MEAN_ll ( ZDWDZ_LES, OMASK, XLES_MEAN_DWDZ(:,NLES_CURRENT_TCOUNT,IMASK) ) - IF (LUSERV) CALL LES_MEAN_ll ( ZDRtDZ_LES, OMASK, XLES_MEAN_DRtDZ(:,NLES_CURRENT_TCOUNT,IMASK) ) - DO JSV=1,NSV - CALL LES_MEAN_ll ( ZDSVDZ_LES(:,:,:,JSV), OMASK, XLES_MEAN_DSVDZ(:,NLES_CURRENT_TCOUNT,IMASK,JSV) ) - END DO - -END IF -!------------------------------------------------------------------------------- -! -! 1.5 Resolved quantities -! ------------------- -! -!* horizontal wind variances -! - CALL LES_FLUX_ll ( XU_ANOM, XU_ANOM, & - OMASK, & - XLES_RESOLVED_U2 (:,NLES_CURRENT_TCOUNT,IMASK) ) -! - CALL LES_FLUX_ll ( XV_ANOM, XV_ANOM, & - OMASK, & - XLES_RESOLVED_V2 (:,NLES_CURRENT_TCOUNT,IMASK) ) -! -!* vertical wind variance -! - CALL LES_FLUX_ll ( XW_ANOM, XW_ANOM, & - OMASK, & - XLES_RESOLVED_W2 (:,NLES_CURRENT_TCOUNT,IMASK) ) -! -!* pressure variance -! - CALL LES_FLUX_ll ( ZP_ANOM, ZP_ANOM, & - OMASK, & - XLES_RESOLVED_P2 (:,NLES_CURRENT_TCOUNT,IMASK) ) -! -!* potential temperature variance -! - CALL LES_FLUX_ll ( ZTH_ANOM, ZTH_ANOM, & - OMASK, & - XLES_RESOLVED_TH2(:,NLES_CURRENT_TCOUNT,IMASK) ) - -! -!* resolved turbulent kinetic energy -! - XLES_RESOLVED_Ke(:,NLES_CURRENT_TCOUNT,IMASK) = XUNDEF -! - WHERE(XLES_RESOLVED_U2 (:,NLES_CURRENT_TCOUNT,IMASK) /= XUNDEF) & - XLES_RESOLVED_Ke(:,NLES_CURRENT_TCOUNT,IMASK) = 0.5*( & - XLES_RESOLVED_U2 (:,NLES_CURRENT_TCOUNT,IMASK) & - + XLES_RESOLVED_V2 (:,NLES_CURRENT_TCOUNT,IMASK) & - + XLES_RESOLVED_W2 (:,NLES_CURRENT_TCOUNT,IMASK)) -! -!* potential temperature - virtual potential temperature covariance -! - IF (LUSERV) THEN - CALL LES_FLUX_ll ( ZTH_ANOM, ZTHV_ANOM, & - OMASK, & - XLES_RESOLVED_THTHV(:,NLES_CURRENT_TCOUNT,IMASK) ) - -! -!* vapor mixing ratio variance -! - CALL LES_FLUX_ll ( ZRV_ANOM, ZRV_ANOM, & - OMASK, & - XLES_RESOLVED_Rv2(:,NLES_CURRENT_TCOUNT,IMASK) ) -! -! -!* potential temperature - vapor mixing ratio correlation -! - CALL LES_FLUX_ll ( ZTH_ANOM, ZRV_ANOM, & - OMASK, & - XLES_RESOLVED_ThRv(:,NLES_CURRENT_TCOUNT,IMASK) ) -! -!* virtual potential temperature - vapor mixing ratio correlation -! - CALL LES_FLUX_ll ( ZTHV_ANOM, ZRV_ANOM, & - OMASK, & - XLES_RESOLVED_ThvRv(:,NLES_CURRENT_TCOUNT,IMASK) ) - END IF -! -! -!* liquid potential temperature - virtual potential temperature covariance -! - IF (LUSERC) THEN - CALL LES_FLUX_ll ( XTHL_ANOM, ZTHV_ANOM, & - OMASK, & - XLES_RESOLVED_THLTHV(:,NLES_CURRENT_TCOUNT,IMASK) ) -! -!* liquid potential temperature variance -! - CALL LES_FLUX_ll ( XTHL_ANOM, XTHL_ANOM, & - OMASK, & - XLES_RESOLVED_THL2(:,NLES_CURRENT_TCOUNT,IMASK) ) -! -!* total water mixing ratio variance -! - CALL LES_FLUX_ll ( XRT_ANOM, XRT_ANOM, & - OMASK, & - XLES_RESOLVED_Rt2(:,NLES_CURRENT_TCOUNT,IMASK) ) -! -!* cloud mixing ratio variance -! - CALL LES_FLUX_ll ( ZRC_ANOM, ZRC_ANOM, & - OMASK, & - XLES_RESOLVED_Rc2(:,NLES_CURRENT_TCOUNT,IMASK) ) -! -!* potential temperature - cloud mixing ratio correlation -! - CALL LES_FLUX_ll ( ZTH_ANOM, ZRC_ANOM, & - OMASK, & - XLES_RESOLVED_ThRc(:,NLES_CURRENT_TCOUNT,IMASK) ) -! -!* liquid potential temperature - vapor mixing ratio correlation -! - CALL LES_FLUX_ll ( XTHL_ANOM, ZRV_ANOM, & - OMASK, & - XLES_RESOLVED_ThlRv(:,NLES_CURRENT_TCOUNT,IMASK) ) -! -!* liquid potential temperature - cloud mixing ratio correlation -! - CALL LES_FLUX_ll ( XTHL_ANOM, ZRC_ANOM, & - OMASK, & - XLES_RESOLVED_ThlRc(:,NLES_CURRENT_TCOUNT,IMASK) ) -! -!* virtual potential temperature - cloud mixing ratio correlation -! - CALL LES_FLUX_ll ( ZTHV_ANOM, ZRC_ANOM, & - OMASK, & - XLES_RESOLVED_ThvRc(:,NLES_CURRENT_TCOUNT,IMASK) ) -! -! variance of lwp -! - IF (IMASK .EQ. 1) THEN - CALL LES_FLUX_ll (ZLWP_ANOM, ZLWP_ANOM, & - OMASK(:,:,1), & - XLES_LWPVAR(NLES_CURRENT_TCOUNT) ) - END IF - END IF -! -!* ice mixing ratio variance -! - IF (LUSERI) THEN - CALL LES_FLUX_ll ( ZRI_ANOM, ZRI_ANOM, & - OMASK, & - XLES_RESOLVED_Ri2(:,NLES_CURRENT_TCOUNT,IMASK) ) -! -!* potential temperature - ice mixing ratio correlation -! - CALL LES_FLUX_ll ( ZTH_ANOM, ZRI_ANOM, & - OMASK, & - XLES_RESOLVED_ThRi(:,NLES_CURRENT_TCOUNT,IMASK) ) -! -!* liquid potential temperature - ice mixing ratio correlation -! - CALL LES_FLUX_ll ( XTHL_ANOM, ZRI_ANOM, & - OMASK, & - XLES_RESOLVED_ThlRi(:,NLES_CURRENT_TCOUNT,IMASK) ) -! -!* virtual potential temperature - ice mixing ratio correlation -! - CALL LES_FLUX_ll ( ZTHV_ANOM, ZRI_ANOM, & - OMASK, & - XLES_RESOLVED_ThvRi(:,NLES_CURRENT_TCOUNT,IMASK) ) - END IF -! -!* scalar variable mixing ratio variances -! - DO JSV=1,NSV - CALL LES_FLUX_ll ( XSV_ANOM(:,:,:,JSV), XSV_ANOM(:,:,:,JSV), & - OMASK, & - XLES_RESOLVED_Sv2(:,NLES_CURRENT_TCOUNT,IMASK,JSV) ) -! -!* potential temperature - scalar variables ratio correlation -! - CALL LES_FLUX_ll ( ZTH_ANOM, XSV_ANOM(:,:,:,JSV), & - OMASK, & - XLES_RESOLVED_ThSv(:,NLES_CURRENT_TCOUNT,IMASK,JSV) ) -! -!* liquid potential temperature - scalar variables ratio correlation -! - IF (LUSERC) THEN - CALL LES_FLUX_ll ( XTHL_ANOM, XSV_ANOM(:,:,:,JSV), & - OMASK, & - XLES_RESOLVED_ThlSv(:,NLES_CURRENT_TCOUNT,IMASK,JSV) ) - END IF -! -!* virtual potential temperature - scalar variables ratio correlation -! - IF (LUSERV) THEN - CALL LES_FLUX_ll ( ZTHV_ANOM, XSV_ANOM(:,:,:,JSV), & - OMASK, & - XLES_RESOLVED_ThvSv(:,NLES_CURRENT_TCOUNT,IMASK,JSV) ) - END IF - END DO -! -! -!* wind fluxes -! - CALL LES_FLUX_ll ( XU_ANOM, XV_ANOM, & - OMASK, & - XLES_RESOLVED_UV (:,NLES_CURRENT_TCOUNT,IMASK) ) -! - CALL LES_FLUX_ll ( XW_ANOM, XU_ANOM, & - OMASK, & - XLES_RESOLVED_WU (:,NLES_CURRENT_TCOUNT,IMASK) ) -! - CALL LES_FLUX_ll ( XW_ANOM, XV_ANOM, & - OMASK, & - XLES_RESOLVED_WV (:,NLES_CURRENT_TCOUNT,IMASK) ) -! -!* pressure fluxes -! - CALL LES_FLUX_ll ( XU_ANOM, ZDPDZ_ANOM, & - OMASK, & - XLES_RESOLVED_UP (:,NLES_CURRENT_TCOUNT,IMASK) ) -! - CALL LES_FLUX_ll ( XV_ANOM, ZDPDZ_ANOM, & - OMASK, & - XLES_RESOLVED_VP (:,NLES_CURRENT_TCOUNT,IMASK) ) -! - CALL LES_FLUX_ll ( XW_ANOM, ZDPDZ_ANOM, & - OMASK, & - XLES_RESOLVED_WP (:,NLES_CURRENT_TCOUNT,IMASK) ) -! -!* theta fluxes -! - CALL LES_FLUX_ll ( XU_ANOM, ZTH_ANOM, & - OMASK, & - XLES_RESOLVED_UTh (:,NLES_CURRENT_TCOUNT,IMASK) ) - - CALL LES_FLUX_ll ( XV_ANOM, ZTH_ANOM, & - OMASK, & - XLES_RESOLVED_VTh (:,NLES_CURRENT_TCOUNT,IMASK) ) -! - CALL LES_FLUX_ll ( XW_ANOM, ZTH_ANOM, & - OMASK, & - XLES_RESOLVED_WTh (:,NLES_CURRENT_TCOUNT,IMASK) ) -! -!* virtual theta fluxes -! - IF (LUSERV) THEN - CALL LES_FLUX_ll ( XU_ANOM, ZTHV_ANOM, & - OMASK, & - XLES_RESOLVED_UThv (:,NLES_CURRENT_TCOUNT,IMASK) ) -! - CALL LES_FLUX_ll ( XV_ANOM, ZTHV_ANOM, & - OMASK, & - XLES_RESOLVED_VThv (:,NLES_CURRENT_TCOUNT,IMASK) ) -! - CALL LES_FLUX_ll ( XW_ANOM, ZTHV_ANOM, & - OMASK, & - XLES_RESOLVED_WThv (:,NLES_CURRENT_TCOUNT,IMASK) ) -! -!* vapor mixing ratio fluxes -! - CALL LES_FLUX_ll ( XU_ANOM, ZRV_ANOM, & - OMASK, & - XLES_RESOLVED_URv (:,NLES_CURRENT_TCOUNT,IMASK) ) -! - CALL LES_FLUX_ll ( XV_ANOM, ZRV_ANOM, & - OMASK, & - XLES_RESOLVED_VRv (:,NLES_CURRENT_TCOUNT,IMASK) ) -! - CALL LES_FLUX_ll ( XW_ANOM, ZRV_ANOM, & - OMASK, & - XLES_RESOLVED_WRv (:,NLES_CURRENT_TCOUNT,IMASK) ) - END IF -! -!* cloud water mixing ratio fluxes -! - IF (LUSERC) THEN - CALL LES_FLUX_ll ( XU_ANOM, ZRC_ANOM, & - OMASK, & - XLES_RESOLVED_URc (:,NLES_CURRENT_TCOUNT,IMASK) ) -! - CALL LES_FLUX_ll ( XV_ANOM, ZRC_ANOM, & - OMASK, & - XLES_RESOLVED_VRc (:,NLES_CURRENT_TCOUNT,IMASK) ) -! - CALL LES_FLUX_ll ( XW_ANOM, ZRC_ANOM, & - OMASK, & - XLES_RESOLVED_WRc (:,NLES_CURRENT_TCOUNT,IMASK) ) -! -!* liquid theta fluxes -! - CALL LES_FLUX_ll ( XU_ANOM, XTHL_ANOM, & - OMASK, & - XLES_RESOLVED_UThl (:,NLES_CURRENT_TCOUNT,IMASK) ) -! - CALL LES_FLUX_ll ( XV_ANOM, XTHL_ANOM, & - OMASK, & - XLES_RESOLVED_VThl (:,NLES_CURRENT_TCOUNT,IMASK) ) -! - CALL LES_FLUX_ll ( XW_ANOM, XTHL_ANOM, & - OMASK, & - XLES_RESOLVED_WThl (:,NLES_CURRENT_TCOUNT,IMASK) ) -! -!* total water mixing ratio fluxes -! - CALL LES_FLUX_ll ( XW_ANOM, XRT_ANOM, & - OMASK, & - XLES_RESOLVED_WRt (:,NLES_CURRENT_TCOUNT,IMASK) ) - END IF -! -!* cloud ice mixing ratio fluxes -! - IF (LUSERI) THEN - CALL LES_FLUX_ll ( XU_ANOM, ZRI_ANOM, & - OMASK, & - XLES_RESOLVED_URi (:,NLES_CURRENT_TCOUNT,IMASK) ) -! - CALL LES_FLUX_ll ( XV_ANOM, ZRI_ANOM, & - OMASK, & - XLES_RESOLVED_VRi (:,NLES_CURRENT_TCOUNT,IMASK) ) -! - CALL LES_FLUX_ll ( XW_ANOM, ZRI_ANOM, & - OMASK, & - XLES_RESOLVED_WRi (:,NLES_CURRENT_TCOUNT,IMASK) ) - END IF - IF (LUSERR) THEN - CALL LES_FLUX_ll ( XW_ANOM, ZRR_ANOM, & - OMASK, & - XLES_RESOLVED_WRr (:,NLES_CURRENT_TCOUNT,IMASK) ) - END IF -! - -! -!* scalar variables fluxes -! - DO JSV=1,NSV - CALL LES_FLUX_ll ( XU_ANOM, XSV_ANOM(:,:,:,JSV), & - OMASK, & - XLES_RESOLVED_USv (:,NLES_CURRENT_TCOUNT,IMASK,JSV) ) -! - CALL LES_FLUX_ll ( XV_ANOM, XSV_ANOM(:,:,:,JSV), & - OMASK, & - XLES_RESOLVED_VSv (:,NLES_CURRENT_TCOUNT,IMASK,JSV) ) -! - CALL LES_FLUX_ll ( XW_ANOM, XSV_ANOM(:,:,:,JSV), & - OMASK, & - XLES_RESOLVED_WSv (:,NLES_CURRENT_TCOUNT,IMASK,JSV) ) - END DO -! -!* skewness -! - CALL LES_3RD_MOMENT_ll ( XU_ANOM, XU_ANOM, XU_ANOM, & - OMASK, & - XLES_RESOLVED_U3 (:,NLES_CURRENT_TCOUNT,IMASK) ) - - CALL LES_3RD_MOMENT_ll ( XV_ANOM, XV_ANOM, XV_ANOM, & - OMASK, & - XLES_RESOLVED_V3 (:,NLES_CURRENT_TCOUNT,IMASK) ) - - CALL LES_3RD_MOMENT_ll ( XW_ANOM, XW_ANOM, XW_ANOM, & - OMASK, & - XLES_RESOLVED_W3 (:,NLES_CURRENT_TCOUNT,IMASK) ) -! -!* kurtosis -! - CALL LES_4TH_MOMENT_ll ( XU_ANOM, XU_ANOM, XU_ANOM, XU_ANOM, & - OMASK, & - XLES_RESOLVED_U4 (:,NLES_CURRENT_TCOUNT,IMASK) ) - - CALL LES_4TH_MOMENT_ll ( XV_ANOM, XV_ANOM, XV_ANOM, XV_ANOM, & - OMASK, & - XLES_RESOLVED_V4 (:,NLES_CURRENT_TCOUNT,IMASK) ) - - CALL LES_4TH_MOMENT_ll ( XW_ANOM, XW_ANOM, XW_ANOM, XW_ANOM, & - OMASK, & - XLES_RESOLVED_W4 (:,NLES_CURRENT_TCOUNT,IMASK) ) -! -!* third moments of liquid potential temperature -! - IF (LUSERC) THEN - CALL LES_3RD_MOMENT_ll ( XW_ANOM, XTHL_ANOM, XTHL_ANOM, & - OMASK, & - XLES_RESOLVED_WThl2(:,NLES_CURRENT_TCOUNT,IMASK) ) - - CALL LES_3RD_MOMENT_ll ( XW_ANOM, XW_ANOM, XTHL_ANOM, & - OMASK, & - XLES_RESOLVED_W2Thl(:,NLES_CURRENT_TCOUNT,IMASK) ) - - ELSE - CALL LES_3RD_MOMENT_ll ( XW_ANOM, ZTH_ANOM, ZTH_ANOM, & - OMASK, & - XLES_RESOLVED_WThl2(:,NLES_CURRENT_TCOUNT,IMASK) ) - - CALL LES_3RD_MOMENT_ll ( XW_ANOM, XW_ANOM, ZTH_ANOM, & - OMASK, & - XLES_RESOLVED_W2Thl(:,NLES_CURRENT_TCOUNT,IMASK) ) - END IF -! -!* third moments of water vapor -! - IF (LUSERV) THEN - CALL LES_3RD_MOMENT_ll ( XW_ANOM, ZRV_ANOM, ZRV_ANOM, & - OMASK, & - XLES_RESOLVED_WRv2 (:,NLES_CURRENT_TCOUNT,IMASK) ) - - CALL LES_3RD_MOMENT_ll ( XW_ANOM, XW_ANOM, ZRV_ANOM, & - OMASK, & - XLES_RESOLVED_W2Rv (:,NLES_CURRENT_TCOUNT,IMASK) ) - END IF - - IF (LUSERC) THEN - CALL LES_3RD_MOMENT_ll ( XW_ANOM, XTHL_ANOM, ZRV_ANOM, & - OMASK, & - XLES_RESOLVED_WThlRv(:,NLES_CURRENT_TCOUNT,IMASK) ) - ELSE IF (LUSERV) THEN - CALL LES_3RD_MOMENT_ll ( XW_ANOM, ZTH_ANOM, ZRV_ANOM, & - OMASK, & - XLES_RESOLVED_WThlRv(:,NLES_CURRENT_TCOUNT,IMASK) ) - END IF -! -!* third moments of total water -! - IF (LUSERC) THEN - CALL LES_3RD_MOMENT_ll ( XW_ANOM, XRT_ANOM, XRT_ANOM, & - OMASK, & - XLES_RESOLVED_WRt2 (:,NLES_CURRENT_TCOUNT,IMASK) ) - - CALL LES_3RD_MOMENT_ll ( XW_ANOM, XW_ANOM, XRT_ANOM, & - OMASK, & - XLES_RESOLVED_W2Rt (:,NLES_CURRENT_TCOUNT,IMASK) ) - CALL LES_3RD_MOMENT_ll ( XW_ANOM, XTHL_ANOM, XRT_ANOM, & - OMASK, & - XLES_RESOLVED_WThlRt (:,NLES_CURRENT_TCOUNT,IMASK) ) - ELSE IF (LUSERV) THEN - CALL LES_3RD_MOMENT_ll ( XW_ANOM, ZRV_ANOM, ZRV_ANOM, & - OMASK, & - XLES_RESOLVED_WRt2 (:,NLES_CURRENT_TCOUNT,IMASK) ) - - CALL LES_3RD_MOMENT_ll ( XW_ANOM, XW_ANOM, ZRV_ANOM, & - OMASK, & - XLES_RESOLVED_W2Rt (:,NLES_CURRENT_TCOUNT,IMASK) ) - CALL LES_3RD_MOMENT_ll ( XW_ANOM, ZTH_ANOM, ZRV_ANOM, & - OMASK, & - XLES_RESOLVED_WThlRt (:,NLES_CURRENT_TCOUNT,IMASK) ) - END IF -! -!* third moments of cloud water -! - IF (LUSERC) THEN - CALL LES_3RD_MOMENT_ll ( XW_ANOM, ZRC_ANOM, ZRC_ANOM, & - OMASK, & - XLES_RESOLVED_WRc2 (:,NLES_CURRENT_TCOUNT,IMASK) ) - - CALL LES_3RD_MOMENT_ll ( XW_ANOM, XW_ANOM, ZRC_ANOM, & - OMASK, & - XLES_RESOLVED_W2Rc (:,NLES_CURRENT_TCOUNT,IMASK) ) - - CALL LES_3RD_MOMENT_ll ( XW_ANOM, XTHL_ANOM, ZRC_ANOM, & - OMASK, & - XLES_RESOLVED_WThlRc(:,NLES_CURRENT_TCOUNT,IMASK) ) - - CALL LES_3RD_MOMENT_ll ( XW_ANOM, ZRV_ANOM, ZRC_ANOM, & - OMASK, & - XLES_RESOLVED_WRvRc (:,NLES_CURRENT_TCOUNT,IMASK) ) - END IF -! -!* third moments of cloud ice -! - IF (LUSERI) THEN - CALL LES_3RD_MOMENT_ll ( XW_ANOM, ZRI_ANOM, ZRI_ANOM, & - OMASK, & - XLES_RESOLVED_WRi2 (:,NLES_CURRENT_TCOUNT,IMASK) ) - - CALL LES_3RD_MOMENT_ll ( XW_ANOM, XW_ANOM, ZRI_ANOM, & - OMASK, & - XLES_RESOLVED_W2Ri (:,NLES_CURRENT_TCOUNT,IMASK) ) - - CALL LES_3RD_MOMENT_ll ( XW_ANOM, XTHL_ANOM, ZRI_ANOM, & - OMASK, & - XLES_RESOLVED_WThlRi(:,NLES_CURRENT_TCOUNT,IMASK) ) - - CALL LES_3RD_MOMENT_ll ( XW_ANOM, ZRV_ANOM, ZRI_ANOM, & - OMASK, & - XLES_RESOLVED_WRvRi (:,NLES_CURRENT_TCOUNT,IMASK) ) - END IF -! -!* third moments of scalar variables -! - DO JSV=1,NSV - CALL LES_3RD_MOMENT_ll ( XW_ANOM, XSV_ANOM(:,:,:,JSV), XSV_ANOM(:,:,:,JSV), & - OMASK, & - XLES_RESOLVED_WSv2 (:,NLES_CURRENT_TCOUNT,IMASK,JSV) ) - - CALL LES_3RD_MOMENT_ll ( XW_ANOM, XW_ANOM, XSV_ANOM(:,:,:,JSV), & - OMASK, & - XLES_RESOLVED_W2Sv (:,NLES_CURRENT_TCOUNT,IMASK,JSV) ) - IF (LUSERC) THEN - CALL LES_3RD_MOMENT_ll ( XW_ANOM, XTHL_ANOM, XSV_ANOM(:,:,:,JSV), & - OMASK, & - XLES_RESOLVED_WThlSv(:,NLES_CURRENT_TCOUNT,IMASK,JSV) ) - ELSE - CALL LES_3RD_MOMENT_ll ( XW_ANOM, ZTH_ANOM, XSV_ANOM(:,:,:,JSV), & - OMASK, & - XLES_RESOLVED_WThlSv(:,NLES_CURRENT_TCOUNT,IMASK,JSV) ) - END IF - - IF (LUSERV) THEN - CALL LES_3RD_MOMENT_ll ( XW_ANOM, ZRV_ANOM, XSV_ANOM(:,:,:,JSV), & - OMASK, & - XLES_RESOLVED_WRvSv (:,NLES_CURRENT_TCOUNT,IMASK,JSV) ) - END IF - END DO -! -!* presso-correlations -! -! - CALL LES_FLUX_ll ( XTHL_ANOM, ZDPDZ_ANOM, & - OMASK, & - XLES_RESOLVED_ThlPz(:,NLES_CURRENT_TCOUNT,IMASK) ) - - IF (LUSERV) & - CALL LES_FLUX_ll ( ZRV_ANOM, ZDPDZ_ANOM, & - OMASK, & - XLES_RESOLVED_RvPz(:,NLES_CURRENT_TCOUNT,IMASK) ) - - IF (LUSERC) THEN - CALL LES_FLUX_ll ( XRT_ANOM, ZDPDZ_ANOM, & - OMASK, & - XLES_RESOLVED_RtPz(:,NLES_CURRENT_TCOUNT,IMASK) ) - - CALL LES_FLUX_ll ( ZRC_ANOM, ZDPDZ_ANOM, & - OMASK, & - XLES_RESOLVED_RcPz(:,NLES_CURRENT_TCOUNT,IMASK) ) - END IF - - IF (LUSERI) & - CALL LES_FLUX_ll ( ZRI_ANOM, ZDPDZ_ANOM, & - OMASK, & - XLES_RESOLVED_RiPz(:,NLES_CURRENT_TCOUNT,IMASK) ) - -! -! -!* resolved turbulent kinetic energy fluxes -! - - CALL LES_3RD_MOMENT_ll ( XU_ANOM, XU_ANOM, XU_ANOM, & - OMASK, & - ZLES_RESOLVED_U3 (:) ) - - CALL LES_3RD_MOMENT_ll ( XU_ANOM, XV_ANOM, XV_ANOM, & - OMASK, & - ZLES_RESOLVED_UV2 (:) ) - - CALL LES_3RD_MOMENT_ll ( XU_ANOM, XW_ANOM, XW_ANOM, & - OMASK, & - ZLES_RESOLVED_UW2 (:) ) - - XLES_RESOLVED_UKe(:,NLES_CURRENT_TCOUNT,IMASK) = 0.5*( ZLES_RESOLVED_U3 & - + ZLES_RESOLVED_UV2 & - + ZLES_RESOLVED_UW2 ) - - - - CALL LES_3RD_MOMENT_ll ( XV_ANOM, XU_ANOM, XU_ANOM, & - OMASK, & - ZLES_RESOLVED_VU2 (:) ) - - CALL LES_3RD_MOMENT_ll ( XV_ANOM, XV_ANOM, XV_ANOM, & - OMASK, & - ZLES_RESOLVED_V3 (:) ) - - CALL LES_3RD_MOMENT_ll ( XV_ANOM, XW_ANOM, XW_ANOM, & - OMASK, & - ZLES_RESOLVED_VW2 (:) ) - - XLES_RESOLVED_VKe(:,NLES_CURRENT_TCOUNT,IMASK) = 0.5*( ZLES_RESOLVED_VU2 & - + ZLES_RESOLVED_V3 & - + ZLES_RESOLVED_VW2 ) - - - CALL LES_3RD_MOMENT_ll ( XW_ANOM, XU_ANOM, XU_ANOM, & - OMASK, & - ZLES_RESOLVED_WU2 (:) ) - - CALL LES_3RD_MOMENT_ll ( XW_ANOM, XV_ANOM, XV_ANOM, & - OMASK, & - ZLES_RESOLVED_WV2 (:) ) - - XLES_RESOLVED_WKe(:,NLES_CURRENT_TCOUNT,IMASK) = 0.5*( ZLES_RESOLVED_WU2 & - + ZLES_RESOLVED_WV2 & - + XLES_RESOLVED_W3(:,NLES_CURRENT_TCOUNT,IMASK) ) - -! -! -!------------------------------------------------------------------------------- -! -! 1.6 Subgrid quantities -! ------------------ -! -IF (LLES_SUBGRID) THEN -! -!* wind fluxes and variances -! - CALL LES_MEAN_ll ( ZTKE_LES, OMASK, & - XLES_SUBGRID_Tke(:,NLES_CURRENT_TCOUNT,IMASK) ) - - CALL LES_MEAN_MPROC ( XLES_SUBGRID_UV(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) -! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_WU(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) -! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_WV(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) -! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_U2(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) -! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_V2(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) -! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_W2(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) -! -! -!* liquid potential temperature fluxes -! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_UThl(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) -! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_VThl(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) -! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_WThl(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) -! - -!* liquid potential temperature variance -! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_Thl2(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) -! -!* Mass flux scheme of shallow convection -! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_THLUP_MF(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - - CALL LES_MEAN_MPROC ( XLES_SUBGRID_RTUP_MF(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) -! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_RVUP_MF(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) -! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_RCUP_MF(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) -! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_RIUP_MF(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) -! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_WUP_MF(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) -! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_MASSFLUX(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) -! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_DETR(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) -! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_ENTR(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) -! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_FRACUP(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) -! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_THVUP_MF(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) -! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_WTHLMF(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) -! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_WRTMF(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) -! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_WTHVMF(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) -! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_WUMF(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) -! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_WVMF(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - - -!* total water mixing ratio fluxes, correlation and variance -! - IF (LUSERV) THEN - CALL LES_MEAN_MPROC ( XLES_SUBGRID_URt(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - ! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_VRt(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - ! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_WRt(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - ! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_ThlRt(:,NLES_CURRENT_TCOUNT,IMASK),& - IAVG_PTS(:), IUND_PTS(:) ) - ! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_Rt2(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - END IF -! -!* scalar variances -! - DO JSV=1,NSV - CALL LES_MEAN_MPROC ( XLES_SUBGRID_Sv2(:,NLES_CURRENT_TCOUNT,IMASK,JSV), & - IAVG_PTS(:), IUND_PTS(:) ) - END DO -! -!* cloud water mixing ratio fluxes -! - IF (LUSERC) THEN - CALL LES_MEAN_MPROC ( XLES_SUBGRID_URc(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - ! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_VRc(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - ! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_WRc(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - END IF -! -!* scalar variables fluxes -! - DO JSV=1,NSV - CALL LES_MEAN_MPROC ( XLES_SUBGRID_USv(:,NLES_CURRENT_TCOUNT,IMASK,JSV), & - IAVG_PTS(:), IUND_PTS(:) ) - ! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_VSv(:,NLES_CURRENT_TCOUNT,IMASK,JSV), & - IAVG_PTS(:), IUND_PTS(:) ) - ! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_WSv(:,NLES_CURRENT_TCOUNT,IMASK,JSV), & - IAVG_PTS(:), IUND_PTS(:) ) - END DO -! -!* subgrid turbulent kinetic energy fluxes -! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_UTke(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - ! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_VTke(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - ! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_WTke(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - - CALL LES_MEAN_MPROC ( XLES_SUBGRID_ddz_WTke(:,NLES_CURRENT_TCOUNT,IMASK),& - IAVG_PTS(:), IUND_PTS(:) ) -! -!* fluxes and correlations with virtual potential temperature -! - IF (LUSERV) THEN - CALL LES_MEAN_MPROC ( XLES_SUBGRID_WThv(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - - CALL LES_MEAN_MPROC ( XLES_SUBGRID_ThlThv(:,NLES_CURRENT_TCOUNT,IMASK),& - IAVG_PTS(:), IUND_PTS(:) ) - - CALL LES_MEAN_MPROC ( XLES_SUBGRID_RtThv(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - - DO JSV=1,NSV - CALL LES_MEAN_MPROC ( XLES_SUBGRID_SvThv(:,NLES_CURRENT_TCOUNT,IMASK,JSV), & - IAVG_PTS(:), IUND_PTS(:) ) - END DO - END IF -! -!* third order fluxes -! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_W2Thl(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - - CALL LES_MEAN_MPROC ( XLES_SUBGRID_WThl2(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - - IF (LUSERV) THEN - CALL LES_MEAN_MPROC ( XLES_SUBGRID_W2Rt(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - - CALL LES_MEAN_MPROC ( XLES_SUBGRID_WThlRt(:,NLES_CURRENT_TCOUNT,IMASK),& - IAVG_PTS(:), IUND_PTS(:) ) - - CALL LES_MEAN_MPROC ( XLES_SUBGRID_WRt2(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - - END IF - DO JSV=1,NSV - CALL LES_MEAN_MPROC ( XLES_SUBGRID_W2Sv(:,NLES_CURRENT_TCOUNT,IMASK,JSV), & - IAVG_PTS(:), IUND_PTS(:) ) - - CALL LES_MEAN_MPROC ( XLES_SUBGRID_WSv2(:,NLES_CURRENT_TCOUNT,IMASK,JSV), & - IAVG_PTS(:), IUND_PTS(:) ) - END DO -! -!* dissipative terms -! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_DISS_Tke(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - - CALL LES_MEAN_MPROC ( XLES_SUBGRID_DISS_Thl2(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - - IF (LUSERV) THEN - CALL LES_MEAN_MPROC ( XLES_SUBGRID_DISS_Rt2(:,NLES_CURRENT_TCOUNT,IMASK),& - IAVG_PTS(:), IUND_PTS(:) ) - - CALL LES_MEAN_MPROC ( XLES_SUBGRID_DISS_ThlRt(:,NLES_CURRENT_TCOUNT,IMASK),& - IAVG_PTS(:), IUND_PTS(:) ) - END IF - - DO JSV=1,NSV - CALL LES_MEAN_MPROC ( XLES_SUBGRID_DISS_Sv2(:,NLES_CURRENT_TCOUNT,IMASK,JSV), & - IAVG_PTS(:), IUND_PTS(:) ) - END DO -! -!* presso-correlation terms -! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_WP(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - - CALL LES_MEAN_MPROC ( XLES_SUBGRID_ThlPz(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - - IF (LUSERV) THEN - CALL LES_MEAN_MPROC ( XLES_SUBGRID_RtPz(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - - END IF - - DO JSV=1,NSV - CALL LES_MEAN_MPROC ( XLES_SUBGRID_SvPz(:,NLES_CURRENT_TCOUNT,IMASK,JSV), & - IAVG_PTS(:), IUND_PTS(:) ) - END DO - -!* phi3 and psi3 terms -! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_PHI3(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - - IF (LUSERV) THEN - CALL LES_MEAN_MPROC ( XLES_SUBGRID_PSI3(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - END IF -! -!* subgrid mixing length -! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_LMix(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) -! -!* subgrid dissipative length -! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_LDiss(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) -! -!* eddy diffusivities -! - CALL LES_MEAN_MPROC ( XLES_SUBGRID_Km(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - - CALL LES_MEAN_MPROC ( XLES_SUBGRID_Kh(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - -END IF -! -! computation of KHT and KHR depending on LLES - IF (LUSERC) THEN - IF (LLES_RESOLVED) THEN - XLES_MEAN_KHt(:,NLES_CURRENT_TCOUNT,IMASK)=0. - WHERE(XLES_MEAN_DTHLDZ(:,NLES_CURRENT_TCOUNT,IMASK)/=0) & - XLES_MEAN_KHt(:,NLES_CURRENT_TCOUNT,IMASK)=-1. & - *XLES_RESOLVED_WThl (:,NLES_CURRENT_TCOUNT,IMASK)/ & - XLES_MEAN_DTHLDZ(:,NLES_CURRENT_TCOUNT,IMASK) - XLES_MEAN_KHr(:,NLES_CURRENT_TCOUNT,IMASK)=0. - WHERE(XLES_MEAN_DRtDZ(:,NLES_CURRENT_TCOUNT,IMASK)/=0) & - XLES_MEAN_KHr(:,NLES_CURRENT_TCOUNT,IMASK)=-1.* & - XLES_RESOLVED_WRt (:,NLES_CURRENT_TCOUNT,IMASK)/ & - XLES_MEAN_DRtDZ(:,NLES_CURRENT_TCOUNT,IMASK) - END IF - IF (LLES_SUBGRID) THEN - XLES_MEAN_KHt(:,NLES_CURRENT_TCOUNT,IMASK)=0. - WHERE(XLES_MEAN_DTHLDZ(:,NLES_CURRENT_TCOUNT,IMASK)/=0) & - XLES_MEAN_KHt(:,NLES_CURRENT_TCOUNT,IMASK)=-1. & - *XLES_SUBGRID_WThl (:,NLES_CURRENT_TCOUNT,IMASK) / & - XLES_MEAN_DTHLDZ(:,NLES_CURRENT_TCOUNT,IMASK) - XLES_MEAN_KHr(:,NLES_CURRENT_TCOUNT,IMASK)=0. - WHERE(XLES_MEAN_DRtDZ(:,NLES_CURRENT_TCOUNT,IMASK)/=0) & - XLES_MEAN_KHr(:,NLES_CURRENT_TCOUNT,IMASK)=-1.* & - XLES_SUBGRID_WRt (:,NLES_CURRENT_TCOUNT,IMASK) / & - XLES_MEAN_DRtDZ(:,NLES_CURRENT_TCOUNT,IMASK) - END IF - IF (LLES_RESOLVED .AND. LLES_SUBGRID) THEN - XLES_MEAN_KHt(:,NLES_CURRENT_TCOUNT,IMASK)=0. - WHERE(XLES_MEAN_DTHLDZ(:,NLES_CURRENT_TCOUNT,IMASK)/=0) & - XLES_MEAN_KHt(:,NLES_CURRENT_TCOUNT,IMASK)=-1. & - *(XLES_RESOLVED_WThl (:,NLES_CURRENT_TCOUNT,IMASK)+ & - XLES_SUBGRID_WThl (:,NLES_CURRENT_TCOUNT,IMASK))/ & - XLES_MEAN_DTHLDZ(:,NLES_CURRENT_TCOUNT,IMASK) - XLES_MEAN_KHr(:,NLES_CURRENT_TCOUNT,IMASK)=0. - WHERE(XLES_MEAN_DRtDZ(:,NLES_CURRENT_TCOUNT,IMASK)/=0) & - XLES_MEAN_KHr(:,NLES_CURRENT_TCOUNT,IMASK)=-1.* & - (XLES_RESOLVED_WRt (:,NLES_CURRENT_TCOUNT,IMASK)+ & - XLES_SUBGRID_WRt (:,NLES_CURRENT_TCOUNT,IMASK)) / & - XLES_MEAN_DRtDZ(:,NLES_CURRENT_TCOUNT,IMASK) - END IF - END IF -!------------------------------------------------------------------------------- -! -! 1.7 Interaction of subgrid and resolved quantities -! ---------------------------------------------- -! -!* WARNING: these terms also contain the term due to the mean flow. -! this mean flow contribution will be removed from them -! when treated in write_les_budgetn.f90 -! -! -!* subgrid turbulent kinetic energy fluxes -! -IF (LLES_RESOLVED) THEN - CALL LES_FLUX_ll ( XU_ANOM, ZTKE_LES, & - OMASK, & - XLES_RES_U_SBG_Tke(:,NLES_CURRENT_TCOUNT,IMASK) ) -! - CALL LES_FLUX_ll ( XV_ANOM, ZTKE_LES, & - OMASK, & - XLES_RES_V_SBG_Tke(:,NLES_CURRENT_TCOUNT,IMASK) ) -! - CALL LES_FLUX_ll ( XW_ANOM, ZTKE_LES, & - OMASK, & - XLES_RES_W_SBG_Tke(:,NLES_CURRENT_TCOUNT,IMASK) ) -END IF -! -!* WARNING: these terms also contain the term due to the mean flow. -! this mean flow contribution will be removed from them -! when treated in write_les_budgetn.f90 -! -!* production terms for subgrid quantities -! -IF (LLES_RESOLVED .AND. LLES_SUBGRID) THEN - CALL LES_MEAN_MPROC ( XLES_RES_ddxa_U_SBG_UaU(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - - CALL LES_MEAN_MPROC ( XLES_RES_ddxa_V_SBG_UaV(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - - CALL LES_MEAN_MPROC ( XLES_RES_ddxa_W_SBG_UaW(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - - CALL LES_MEAN_MPROC ( XLES_RES_ddxa_W_SBG_UaThl(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - - CALL LES_MEAN_MPROC ( XLES_RES_ddxa_Thl_SBG_UaW(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - - CALL LES_MEAN_MPROC ( XLES_RES_ddz_Thl_SBG_W2 (:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - - CALL LES_MEAN_MPROC ( XLES_RES_ddxa_Thl_SBG_UaThl(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - - IF (LUSERV) THEN - CALL LES_MEAN_MPROC ( XLES_RES_ddxa_W_SBG_UaRt(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - - CALL LES_MEAN_MPROC ( XLES_RES_ddxa_Rt_SBG_UaW(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - - CALL LES_MEAN_MPROC ( XLES_RES_ddz_Rt_SBG_W2 (:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - - CALL LES_MEAN_MPROC ( XLES_RES_ddxa_Thl_SBG_UaRt(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - - CALL LES_MEAN_MPROC ( XLES_RES_ddxa_Rt_SBG_UaThl(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - - CALL LES_MEAN_MPROC ( XLES_RES_ddxa_Rt_SBG_UaRt(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - - END IF -! -!* WARNING: these terms also contain the term due to the mean flow. -! this mean flow contribution will be removed from them -! when treated in write_les_budgetn.f90 -! -!* turbulent transport and advection terms for subgrid quantities -! - CALL LES_MEAN_MPROC ( XLES_RES_W_SBG_WThl(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - - CALL LES_MEAN_MPROC ( XLES_RES_W_SBG_Thl2(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - - IF (LUSERV) THEN - CALL LES_MEAN_MPROC ( XLES_RES_W_SBG_WRt(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - - CALL LES_MEAN_MPROC ( XLES_RES_W_SBG_Rt2(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - - CALL LES_MEAN_MPROC ( XLES_RES_W_SBG_ThlRt(:,NLES_CURRENT_TCOUNT,IMASK), & - IAVG_PTS(:), IUND_PTS(:) ) - - END IF - - DO JSV=1,NSV - CALL LES_MEAN_MPROC ( XLES_RES_W_SBG_WSv(:,NLES_CURRENT_TCOUNT,IMASK,JSV), & - IAVG_PTS(:), IUND_PTS(:) ) - - CALL LES_MEAN_MPROC ( XLES_RES_W_SBG_Sv2(:,NLES_CURRENT_TCOUNT,IMASK,JSV), & - IAVG_PTS(:), IUND_PTS(:) ) - END DO -END IF -! -!------------------------------------------------------------------------------- -! -! 2. The following is for cartesian mask only -! ---------------------------------------- -! -IF (IMASK>1) RETURN -! -!------------------------------------------------------------------------------- -! -! 3. Updraft diagnostics -! ------------------- -! -IF (LLES_UPDRAFT) THEN -! - DO JK=1,NLES_K - GUPDRAFT_MASK(:,:,JK) = (XW_ANOM(:,:,JK) > 0.) .AND. LLES_CURRENT_CART_MASK(:,:,JK) - END DO -! -! -! 3.1 Updraft fraction -! ---------------- -! - ZUPDRAFT(:,:,:) = 0. - WHERE (GUPDRAFT_MASK(:,:,:)) - ZUPDRAFT(:,:,:) = 1. - END WHERE -! - CALL LES_MEAN_ll ( ZUPDRAFT, OMASK, & - XLES_UPDRAFT(:,NLES_CURRENT_TCOUNT) ) -! -! -! 3.2 Updraft mean quantities -! ----------------------- -! -!* vertical wind velocity -! - CALL LES_MEAN_ll ( ZW_LES, GUPDRAFT_MASK, & - XLES_UPDRAFT_W(:,NLES_CURRENT_TCOUNT) ) -! -!* potential temperature -! - CALL LES_MEAN_ll ( ZTH_LES, GUPDRAFT_MASK, & - XLES_UPDRAFT_Th(:,NLES_CURRENT_TCOUNT) ) -! -!* liquid potential temperature -! - IF (LUSERC) & - CALL LES_MEAN_ll ( ZTHL_LES, GUPDRAFT_MASK, & - XLES_UPDRAFT_Thl(:,NLES_CURRENT_TCOUNT) ) -! -!* virtual potential temperature -! - IF (LUSERV) & - CALL LES_MEAN_ll ( ZTHV_LES, GUPDRAFT_MASK, & - XLES_UPDRAFT_Thv(:,NLES_CURRENT_TCOUNT) ) -! -!* vapor mixing ratio -! - IF (LUSERV) & - CALL LES_MEAN_ll ( ZRV_LES, GUPDRAFT_MASK, & - XLES_UPDRAFT_Rv(:,NLES_CURRENT_TCOUNT) ) -! -!* cloud water mixing ratio -! - IF (LUSERC) & - CALL LES_MEAN_ll ( ZRC_LES, GUPDRAFT_MASK, & - XLES_UPDRAFT_Rc(:,NLES_CURRENT_TCOUNT) ) -! -!* rain mixing ratio -! - IF (LUSERR) & - CALL LES_MEAN_ll ( ZRR_LES, GUPDRAFT_MASK, & - XLES_UPDRAFT_Rr(:,NLES_CURRENT_TCOUNT) ) -! -!* cloud ice mixing ratio -! - IF (LUSERI) & - CALL LES_MEAN_ll ( ZRI_LES, GUPDRAFT_MASK, & - XLES_UPDRAFT_Ri(:,NLES_CURRENT_TCOUNT) ) -! -!* snow mixing ratio -! - IF (LUSERS) & - CALL LES_MEAN_ll ( ZRS_LES, GUPDRAFT_MASK, & - XLES_UPDRAFT_Rs(:,NLES_CURRENT_TCOUNT) ) -! -!* graupel mixing ratio -! - IF (LUSERG) & - CALL LES_MEAN_ll ( ZRG_LES, GUPDRAFT_MASK, & - XLES_UPDRAFT_Rg(:,NLES_CURRENT_TCOUNT) ) -! -!* hail mixing ratio -! - IF (LUSERH) & - CALL LES_MEAN_ll ( ZRG_LES, GUPDRAFT_MASK, & - XLES_UPDRAFT_Rh(:,NLES_CURRENT_TCOUNT) ) -! -!* scalar variables -! - DO JSV=1,NSV - CALL LES_MEAN_ll ( ZSV_LES(:,:,:,JSV), GUPDRAFT_MASK, & - XLES_UPDRAFT_Sv(:,NLES_CURRENT_TCOUNT,JSV) ) - END DO -! -!* subgrid turbulent kinetic energy -! - CALL LES_MEAN_ll ( ZTKE_LES, GUPDRAFT_MASK, & - XLES_UPDRAFT_Tke(:,NLES_CURRENT_TCOUNT) ) -! -! -! 3.3 Updraft resolved quantities -! --------------------------- -! -! -!* resolved turbulent kinetic energy -! - CALL LES_FLUX_ll ( XU_ANOM, XU_ANOM, & - GUPDRAFT_MASK, & - ZLES_UPDRAFT_U2(:) ) - - CALL LES_FLUX_ll ( XV_ANOM, XV_ANOM, & - GUPDRAFT_MASK, & - ZLES_UPDRAFT_V2(:) ) - - CALL LES_FLUX_ll ( XW_ANOM, XW_ANOM, & - GUPDRAFT_MASK, & - ZLES_UPDRAFT_W2(:) ) - - XLES_UPDRAFT_Ke(:,NLES_CURRENT_TCOUNT) = 0.5 * ( ZLES_UPDRAFT_U2(:) & - + ZLES_UPDRAFT_V2(:) & - + ZLES_UPDRAFT_W2(:) ) -! -!* vertical potential temperature flux -! - CALL LES_FLUX_ll ( XW_ANOM, ZTH_ANOM, & - GUPDRAFT_MASK, & - XLES_UPDRAFT_WTh(:,NLES_CURRENT_TCOUNT) ) -! -!* vertical liquid potential temperature flux -! - IF (LUSERC) & - CALL LES_FLUX_ll ( XW_ANOM, XTHL_ANOM, & - GUPDRAFT_MASK, & - XLES_UPDRAFT_WThl(:,NLES_CURRENT_TCOUNT) ) -! -!* vertical virtual potential temperature flux -! - IF (LUSERV) & - CALL LES_FLUX_ll ( XW_ANOM, ZTHV_ANOM, & - GUPDRAFT_MASK, & - XLES_UPDRAFT_WThv(:,NLES_CURRENT_TCOUNT) ) -! -!* potential temperature variance -! - CALL LES_FLUX_ll ( ZTH_ANOM, ZTH_ANOM, & - GUPDRAFT_MASK, & - XLES_UPDRAFT_Th2(:,NLES_CURRENT_TCOUNT) ) -! -!* liquid potential temperature variance -! - IF (LUSERC) & - CALL LES_FLUX_ll ( XTHL_ANOM, XTHL_ANOM, & - GUPDRAFT_MASK, & - XLES_UPDRAFT_Thl2(:,NLES_CURRENT_TCOUNT) ) -! -!* potential temperature - virtual potential temperature covariance -! - IF (LUSERV) & - CALL LES_FLUX_ll ( ZTH_ANOM, ZTHV_ANOM, & - GUPDRAFT_MASK, & - XLES_UPDRAFT_ThThv (:,NLES_CURRENT_TCOUNT) ) -! -!* liquid potential temperature - virtual potential temperature covariance -! - IF (LUSERC) & - CALL LES_FLUX_ll ( XTHL_ANOM, ZTHV_ANOM, & - GUPDRAFT_MASK, & - XLES_UPDRAFT_ThlThv(:,NLES_CURRENT_TCOUNT) ) -! -!* water vapor mixing ratio flux, variance and correlations -! - IF (LUSERV) THEN - CALL LES_FLUX_ll ( XW_ANOM, ZRV_ANOM, & - GUPDRAFT_MASK, & - XLES_UPDRAFT_WRv(:,NLES_CURRENT_TCOUNT) ) - ! - CALL LES_FLUX_ll ( ZRV_ANOM, ZRV_ANOM, & - GUPDRAFT_MASK, & - XLES_UPDRAFT_Rv2(:,NLES_CURRENT_TCOUNT) ) - ! - CALL LES_FLUX_ll ( ZTH_ANOM, ZRV_ANOM, & - GUPDRAFT_MASK, & - XLES_UPDRAFT_ThRv (:,NLES_CURRENT_TCOUNT) ) - ! - IF (LUSERC) & - CALL LES_FLUX_ll ( XTHL_ANOM, ZRV_ANOM, & - GUPDRAFT_MASK, & - XLES_UPDRAFT_ThlRv(:,NLES_CURRENT_TCOUNT) ) - - CALL LES_FLUX_ll ( ZTHV_ANOM, ZRV_ANOM, & - GUPDRAFT_MASK, & - XLES_UPDRAFT_ThvRv(:,NLES_CURRENT_TCOUNT) ) - END IF -! -!* cloud water mixing ratio flux -! - IF (LUSERC) THEN - CALL LES_FLUX_ll ( XW_ANOM, ZRC_ANOM, & - GUPDRAFT_MASK, & - XLES_UPDRAFT_WRc(:,NLES_CURRENT_TCOUNT) ) - ! - CALL LES_FLUX_ll ( ZRC_ANOM, ZRC_ANOM, & - GUPDRAFT_MASK, & - XLES_UPDRAFT_Rc2(:,NLES_CURRENT_TCOUNT) ) - ! - CALL LES_FLUX_ll ( ZTH_ANOM, ZRC_ANOM, & - GUPDRAFT_MASK, & - XLES_UPDRAFT_ThRc (:,NLES_CURRENT_TCOUNT) ) - ! - CALL LES_FLUX_ll ( XTHL_ANOM, ZRC_ANOM, & - GUPDRAFT_MASK, & - XLES_UPDRAFT_ThlRc(:,NLES_CURRENT_TCOUNT) ) - ! - CALL LES_FLUX_ll ( ZTHV_ANOM, ZRC_ANOM, & - GUPDRAFT_MASK, & - XLES_UPDRAFT_ThvRc(:,NLES_CURRENT_TCOUNT) ) - END IF -! -!* cloud ice mixing ratio flux -! - IF (LUSERI) THEN - CALL LES_FLUX_ll ( XW_ANOM, ZRI_ANOM, & - GUPDRAFT_MASK, & - XLES_UPDRAFT_WRi(:,NLES_CURRENT_TCOUNT) ) - ! - CALL LES_FLUX_ll ( ZRI_ANOM, ZRI_ANOM, & - GUPDRAFT_MASK, & - XLES_UPDRAFT_Ri2(:,NLES_CURRENT_TCOUNT) ) - ! - CALL LES_FLUX_ll ( ZTH_ANOM, ZRI_ANOM, & - GUPDRAFT_MASK, & - XLES_UPDRAFT_ThRi (:,NLES_CURRENT_TCOUNT) ) - ! - CALL LES_FLUX_ll ( XTHL_ANOM, ZRI_ANOM, & - GUPDRAFT_MASK, & - XLES_UPDRAFT_ThlRi(:,NLES_CURRENT_TCOUNT) ) - ! - CALL LES_FLUX_ll ( ZTHV_ANOM, ZRI_ANOM, & - GUPDRAFT_MASK, & - XLES_UPDRAFT_ThvRi(:,NLES_CURRENT_TCOUNT) ) - END IF -! -!* scalar variables flux -! - DO JSV=1,NSV - CALL LES_FLUX_ll ( XW_ANOM, XSV_ANOM(:,:,:,JSV), & - GUPDRAFT_MASK, & - XLES_UPDRAFT_WSv(:,NLES_CURRENT_TCOUNT,JSV) ) - ! - CALL LES_FLUX_ll ( XSV_ANOM(:,:,:,JSV), XSV_ANOM(:,:,:,JSV), & - GUPDRAFT_MASK, & - XLES_UPDRAFT_Sv2(:,NLES_CURRENT_TCOUNT,JSV) ) - ! - CALL LES_FLUX_ll ( ZTH_ANOM, XSV_ANOM(:,:,:,JSV), & - GUPDRAFT_MASK, & - XLES_UPDRAFT_ThSv(:,NLES_CURRENT_TCOUNT,JSV) ) - ! - IF (LUSERC) & - CALL LES_FLUX_ll ( XTHL_ANOM, XSV_ANOM(:,:,:,JSV), & - GUPDRAFT_MASK, & - XLES_UPDRAFT_ThlSv(:,NLES_CURRENT_TCOUNT,JSV) ) - ! - IF (LUSERV) & - CALL LES_FLUX_ll ( ZTHV_ANOM, XSV_ANOM(:,:,:,JSV), & - GUPDRAFT_MASK, & - XLES_UPDRAFT_ThvSv(:,NLES_CURRENT_TCOUNT,JSV) ) - END DO -! -END IF -! -!------------------------------------------------------------------------------- -! -! 4. Downdraft diagnostics -! --------------------- -! -IF (LLES_DOWNDRAFT) THEN -! - DO JK=1,NLES_K - GDOWNDRAFT_MASK(:,:,JK) = (XW_ANOM(:,:,JK) <= 0.) .AND. LLES_CURRENT_CART_MASK(:,:,JK) - END DO -! -! -! 4.1 Downdraft fraction -! ------------------ -! - ZDOWNDRAFT(:,:,:) = 0. - WHERE (GDOWNDRAFT_MASK(:,:,:)) - ZDOWNDRAFT(:,:,:) = 1. - END WHERE -! - CALL LES_MEAN_ll ( ZDOWNDRAFT, OMASK, & - XLES_DOWNDRAFT(:,NLES_CURRENT_TCOUNT) ) -! -! -! 4.2 Downdraft mean quantities -! ------------------------- -! -!* vertical wind velocity -! - CALL LES_MEAN_ll ( ZW_LES, GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_W(:,NLES_CURRENT_TCOUNT) ) -! -!* potential temperature -! - CALL LES_MEAN_ll ( ZTH_LES, GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_Th(:,NLES_CURRENT_TCOUNT) ) -! -!* liquid potential temperature -! - IF (LUSERC) & - CALL LES_MEAN_ll ( ZTHL_LES, GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_Thl(:,NLES_CURRENT_TCOUNT) ) -! -!* virtual potential temperature -! - IF (LUSERV) & - CALL LES_MEAN_ll ( ZTHV_LES, GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_Thv(:,NLES_CURRENT_TCOUNT) ) -! -!* vapor mixing ratio -! - IF (LUSERV) & - CALL LES_MEAN_ll ( ZRV_LES, GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_Rv(:,NLES_CURRENT_TCOUNT) ) -! -!* cloud water mixing ratio -! - IF (LUSERC) & - CALL LES_MEAN_ll ( ZRC_LES, GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_Rc(:,NLES_CURRENT_TCOUNT) ) -! -!* rain mixing ratio -! - IF (LUSERR) & - CALL LES_MEAN_ll ( ZRR_LES, GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_Rr(:,NLES_CURRENT_TCOUNT) ) -! -!* cloud ice mixing ratio -! - IF (LUSERI) & - CALL LES_MEAN_ll ( ZRI_LES, GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_Ri(:,NLES_CURRENT_TCOUNT) ) -! -!* snow mixing ratio -! - IF (LUSERS) & - CALL LES_MEAN_ll ( ZRS_LES, GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_Rs(:,NLES_CURRENT_TCOUNT) ) -! -!* graupel mixing ratio -! - IF (LUSERG) & - CALL LES_MEAN_ll ( ZRG_LES, GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_Rg(:,NLES_CURRENT_TCOUNT) ) -! -!* hail mixing ratio -! - IF (LUSERH) & - CALL LES_MEAN_ll ( ZRG_LES, GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_Rh(:,NLES_CURRENT_TCOUNT) ) -! -!* scalar variables -! - DO JSV=1,NSV - CALL LES_MEAN_ll ( ZSV_LES(:,:,:,JSV), GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_Sv(:,NLES_CURRENT_TCOUNT,JSV) ) - END DO -! -!* subgrid turbulent kinetic energy -! - CALL LES_MEAN_ll ( ZTKE_LES, GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_Tke(:,NLES_CURRENT_TCOUNT) ) -! -! -! 4.3 Downdraft resolved quantities -! ----------------------------- -! -!* resolved turbulent kinetic energy -! - CALL LES_FLUX_ll ( XU_ANOM, XU_ANOM, & - GDOWNDRAFT_MASK, & - ZLES_DOWNDRAFT_U2(:) ) - - CALL LES_FLUX_ll ( XV_ANOM, XV_ANOM, & - GDOWNDRAFT_MASK, & - ZLES_DOWNDRAFT_V2(:) ) - - CALL LES_FLUX_ll ( XW_ANOM, XW_ANOM, & - GDOWNDRAFT_MASK, & - ZLES_DOWNDRAFT_W2(:) ) - - XLES_DOWNDRAFT_Ke(:,NLES_CURRENT_TCOUNT) = 0.5 * ( ZLES_DOWNDRAFT_U2(:) & - + ZLES_DOWNDRAFT_V2(:) & - + ZLES_DOWNDRAFT_W2(:) ) -! -!* vertical potential temperature flux -! - CALL LES_FLUX_ll ( XW_ANOM, ZTH_ANOM, & - GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_WTh(:,NLES_CURRENT_TCOUNT) ) -! -!* vertical liquid potential temperature flux -! - IF (LUSERC) & - CALL LES_FLUX_ll ( XW_ANOM, XTHL_ANOM, & - GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_WThl(:,NLES_CURRENT_TCOUNT) ) -! -!* vertical virtual potential temperature flux -! - IF (LUSERV) & - CALL LES_FLUX_ll ( XW_ANOM, ZTHV_ANOM, & - GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_WThv(:,NLES_CURRENT_TCOUNT) ) -! -!* potential temperature variance -! - CALL LES_FLUX_ll ( ZTH_ANOM, ZTH_ANOM, & - GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_Th2(:,NLES_CURRENT_TCOUNT) ) -! -!* liquid potential temperature variance -! - IF (LUSERC) & - CALL LES_FLUX_ll ( XTHL_ANOM, XTHL_ANOM, & - GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_Thl2(:,NLES_CURRENT_TCOUNT) ) -! -!* potential temperature - virtual potential temperature covariance -! - IF (LUSERV) & - CALL LES_FLUX_ll ( ZTH_ANOM, ZTHV_ANOM, & - GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_ThThv (:,NLES_CURRENT_TCOUNT) ) -! -!* liquid potential temperature - virtual potential temperature covariance -! - IF (LUSERC) & - CALL LES_FLUX_ll ( XTHL_ANOM, ZTHV_ANOM, & - GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_ThlThv(:,NLES_CURRENT_TCOUNT) ) -! -! -!* water vapor mixing ratio flux, variance and correlations -! - IF (LUSERV) THEN - CALL LES_FLUX_ll ( XW_ANOM, ZRV_ANOM, & - GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_WRv(:,NLES_CURRENT_TCOUNT) ) - ! - CALL LES_FLUX_ll ( ZRV_ANOM, ZRV_ANOM, & - GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_Rv2(:,NLES_CURRENT_TCOUNT) ) - ! - CALL LES_FLUX_ll ( ZTH_ANOM, ZRV_ANOM, & - GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_ThRv (:,NLES_CURRENT_TCOUNT) ) - ! - CALL LES_FLUX_ll ( ZTHV_ANOM, ZRV_ANOM, & - GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_ThvRv(:,NLES_CURRENT_TCOUNT) ) - ! - IF (LUSERC) & - CALL LES_FLUX_ll ( XTHL_ANOM, ZRV_ANOM, & - GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_ThlRv(:,NLES_CURRENT_TCOUNT) ) - END IF -! -!* cloud water mixing ratio flux -! - IF (LUSERC) THEN - CALL LES_FLUX_ll ( XW_ANOM, ZRC_ANOM, & - GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_WRc(:,NLES_CURRENT_TCOUNT) ) - ! - CALL LES_FLUX_ll ( ZRC_ANOM, ZRC_ANOM, & - GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_Rc2(:,NLES_CURRENT_TCOUNT) ) - ! - CALL LES_FLUX_ll ( ZTH_ANOM, ZRC_ANOM, & - GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_ThRc (:,NLES_CURRENT_TCOUNT) ) - ! - CALL LES_FLUX_ll ( ZTHV_ANOM, ZRC_ANOM, & - GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_ThvRc(:,NLES_CURRENT_TCOUNT) ) - ! - CALL LES_FLUX_ll ( XTHL_ANOM, ZRC_ANOM, & - GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_ThlRc(:,NLES_CURRENT_TCOUNT) ) - END IF -! -!* cloud ice mixing ratio flux -! - IF (LUSERI) THEN - CALL LES_FLUX_ll ( XW_ANOM, ZRI_ANOM, & - GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_WRi(:,NLES_CURRENT_TCOUNT) ) - ! - CALL LES_FLUX_ll ( ZRI_ANOM, ZRI_ANOM, & - GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_Ri2(:,NLES_CURRENT_TCOUNT) ) - ! - CALL LES_FLUX_ll ( ZTH_ANOM, ZRI_ANOM, & - GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_ThRi (:,NLES_CURRENT_TCOUNT) ) - ! - CALL LES_FLUX_ll ( ZTHV_ANOM, ZRI_ANOM, & - GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_ThvRi(:,NLES_CURRENT_TCOUNT) ) - ! - CALL LES_FLUX_ll ( XTHL_ANOM, ZRI_ANOM, & - GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_ThlRi(:,NLES_CURRENT_TCOUNT) ) - END IF -! -!* scalar variables flux -! - DO JSV=1,NSV - CALL LES_FLUX_ll ( XW_ANOM, XSV_ANOM(:,:,:,JSV), & - GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_WSv(:,NLES_CURRENT_TCOUNT,JSV) ) - ! - CALL LES_FLUX_ll ( XSV_ANOM(:,:,:,JSV), XSV_ANOM(:,:,:,JSV), & - GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_Sv2(:,NLES_CURRENT_TCOUNT,JSV) ) - ! - CALL LES_FLUX_ll ( ZTH_ANOM, XSV_ANOM(:,:,:,JSV), & - GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_ThSv(:,NLES_CURRENT_TCOUNT,JSV) ) - ! - IF (LUSERC) & - CALL LES_FLUX_ll ( XTHL_ANOM, XSV_ANOM(:,:,:,JSV), & - GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_ThlSv(:,NLES_CURRENT_TCOUNT,JSV) ) - ! - IF (LUSERV) & - CALL LES_FLUX_ll ( ZTHV_ANOM, XSV_ANOM(:,:,:,JSV), & - GDOWNDRAFT_MASK, & - XLES_DOWNDRAFT_ThvSv(:,NLES_CURRENT_TCOUNT,JSV) ) - END DO -! -END IF -! -!------------------------------------------------------------------------------- -! -! 5. surface or 2D variables (only for the cartesian mask) -! ----------------------- -! -!* surface flux of temperature Qo -! -CALL LES_MEAN_MPROC ( XLES_Q0 (NLES_CURRENT_TCOUNT), IAVG_PTS(1), IUND_PTS(1) ) -! -!* surface flux of water vapor Eo -! -CALL LES_MEAN_MPROC ( XLES_E0 (NLES_CURRENT_TCOUNT), IAVG_PTS(1), IUND_PTS(1) ) -! -!* surface flux for scalar variables -! -DO JSV=1,NSV - CALL LES_MEAN_MPROC ( XLES_SV0 (NLES_CURRENT_TCOUNT,JSV), IAVG_PTS(1), IUND_PTS(1) ) -END DO -! -!* surface flux of U wind component -! -CALL LES_MEAN_MPROC ( XLES_UW0 (NLES_CURRENT_TCOUNT), IAVG_PTS(1), IUND_PTS(1) ) -! -!* surface flux of V wind component -! -CALL LES_MEAN_MPROC ( XLES_VW0 (NLES_CURRENT_TCOUNT), IAVG_PTS(1), IUND_PTS(1) ) -! -!* friction velocity u* -! -!* average of local u* -!!CALL LES_MEAN_MPROC ( XLES_USTAR(NLES_CURRENT_TCOUNT), IAVG_PTS(1), IUND_PTS(1) ) -!* or true global u* -XLES_USTAR(NLES_CURRENT_TCOUNT) = SQRT(SQRT(XLES_UW0(NLES_CURRENT_TCOUNT)**2 & - +XLES_VW0(NLES_CURRENT_TCOUNT)**2 )) -! -!* Boundary layer height -! -IF (CBL_HEIGHT_DEF=='WTV') THEN -! -!* level where temperature flux is minimum -! -ALLOCATE(ZWORK(SIZE(XLES_SUBGRID_WTHVMF(:,NLES_CURRENT_TCOUNT,IMASK),1))) -ZWORK=XLES_SUBGRID_WTHVMF(:,NLES_CURRENT_TCOUNT,IMASK) -WHERE(ZWORK==XUNDEF) ZWORK=0. - - IF (LUSERC) THEN - IKMIN_FLUX = MINLOC( XLES_RESOLVED_WThv(:,NLES_CURRENT_TCOUNT,1) & - + XLES_SUBGRID_WThl (:,NLES_CURRENT_TCOUNT,1) & - + ZWORK & ! flux if EDKF - + (XRV/XRD - 1.) *( XLES_SUBGRID_WRt (:,NLES_CURRENT_TCOUNT,1) & - -XLES_SUBGRID_WRc (:,NLES_CURRENT_TCOUNT,1)) ) - ELSE IF (LUSERV) THEN - IKMIN_FLUX = MINLOC( XLES_RESOLVED_WThv(:,NLES_CURRENT_TCOUNT,1) & - + ZWORK & ! flux if EDKF - + XLES_SUBGRID_WThl (:,NLES_CURRENT_TCOUNT,1) & - + (XRV/XRD - 1.) * XLES_SUBGRID_WRt (:,NLES_CURRENT_TCOUNT,1) ) - ELSE - IKMIN_FLUX = MINLOC( XLES_RESOLVED_WTh(:,NLES_CURRENT_TCOUNT,1) & - + ZWORK & ! flux if EDKF - + XLES_SUBGRID_WThl(:,NLES_CURRENT_TCOUNT,1) ) - END IF -DEALLOCATE(ZWORK) -! -!* boundary layer height -! - XLES_BL_HEIGHT(NLES_CURRENT_TCOUNT) = XLES_Z(IKMIN_FLUX(1)) - XLES_ZS -! -ELSE IF (CBL_HEIGHT_DEF=='DTH') THEN - IKMAX_TH=MAXLOC( ZLES_MEAN_DTHDZ(:)) - XLES_BL_HEIGHT(NLES_CURRENT_TCOUNT) = XLES_Z(IKMAX_TH(1)) - XLES_ZS -! -ELSE IF (CBL_HEIGHT_DEF=='KE ') THEN - - XLES_BL_HEIGHT(NLES_CURRENT_TCOUNT) = XLES_Z(NLES_K) - XLES_ZS -! -!* total Turbulent Kinetic Energy -! - ZKE_TOT(:) = 0. -! - ZKE_TOT(:) = ZKE_TOT(:) + XLES_SUBGRID_TKE (:,NLES_CURRENT_TCOUNT,1) -! - IF (CTURBLEN/='BL89' .AND. CTURBLEN/='RM17' .AND. LLES_RESOLVED) & - ZKE_TOT(:) = ZKE_TOT(:) + XLES_RESOLVED_KE(:,NLES_CURRENT_TCOUNT,1) -! - ZINT_KE_TOT = 0. -! -!* integration of total kinetic energy on boundary layer depth -! - ZINT_KE_TOT = ZINT_KE_TOT +XLES_Z(1)*ZKE_TOT(1) - DO JK=1,NLES_K-1 - ZINT_KE_TOT = ZINT_KE_TOT + (XLES_Z(JK+1)-XLES_Z(JK)) & - * 0.5 *( ZKE_TOT(JK+1) + ZKE_TOT(JK) ) -! -!* test of total kinetic energy smaller than 5% of the averaged value below -! - IF ( ZKE_TOT(JK+1) < 0.05 * ZINT_KE_TOT / (XLES_Z(JK+1)-XLES_Z(1)) ) THEN - XLES_BL_HEIGHT(NLES_CURRENT_TCOUNT) = XLES_Z(JK) - XLES_ZS - EXIT - END IF -! - END DO -! -ELSE IF (CBL_HEIGHT_DEF=='TKE') THEN - - XLES_BL_HEIGHT(NLES_CURRENT_TCOUNT) = XLES_Z(NLES_K) - XLES_ZS -! -!* subgrid Turbulent Kinetic Energy -! - ZKE_TOT(:) = XLES_SUBGRID_TKE (:,NLES_CURRENT_TCOUNT,1) -! - ZINT_KE_TOT = 0. -! -!* integration of subgrid kinetic energy on boundary layer depth -! - DO JK=1,NLES_K-1 - ZINT_KE_TOT = ZINT_KE_TOT + (XLES_Z(JK+1)-XLES_Z(JK)) & - * 0.5 *( ZKE_TOT(JK+1) + ZKE_TOT(JK) ) -! -!* test of subgrid kinetic energy smaller than 0.1% of the averaged value below -! - IF ( ZKE_TOT(JK+1) < 0.001 * ZINT_KE_TOT / (XLES_Z(JK+1)-XLES_Z(1)) ) THEN - XLES_BL_HEIGHT(NLES_CURRENT_TCOUNT) = XLES_Z(JK) - XLES_ZS - EXIT - END IF - END DO -ELSE IF (CBL_HEIGHT_DEF=='FRI') THEN - ZFRIC_LES = SQRT( ( XLES_SUBGRID_WU (:,NLES_CURRENT_TCOUNT,1) & - +XLES_RESOLVED_WU(:,NLES_CURRENT_TCOUNT,1))**2 & - +( XLES_SUBGRID_WV (:,NLES_CURRENT_TCOUNT,1) & - +XLES_RESOLVED_WV(:,NLES_CURRENT_TCOUNT,1))**2 ) - ZFRIC_SURF = XLES_USTAR(NLES_CURRENT_TCOUNT)**2 - CALL BL_DEPTH_DIAG(YLDIMPHYEX,ZFRIC_SURF, XLES_ZS, & - ZFRIC_LES, XLES_Z, & - XFTOP_O_FSURF,XLES_BL_HEIGHT(NLES_CURRENT_TCOUNT)) -END IF -! -! -!* integration of total kinetic energy on boundary layer depth -! -XLES_INT_TKE(NLES_CURRENT_TCOUNT)=ZINT_KE_TOT - !* integration of tke - ZTKET_LES(:,:) = 0. - DO JK=1,NLES_K-1 - ZKE_LES(:,:,JK)=0.5*(XU_ANOM(:,:,JK)*XU_ANOM(:,:,JK)+& - XV_ANOM(:,:,JK)*XV_ANOM(:,:,JK)+XW_ANOM(:,:,JK)*XW_ANOM(:,:,JK)) - - ZTKET_LES(:,:) = ZTKET_LES(:,:) + (ZZZ_LES(:,:,JK+1)-ZZZ_LES(:,:,JK)) & - * (ZTKE_LES(:,:,JK)+ZKE_LES(:,:,JK)) - END DO - CALL LES_MEAN_ll ( ZTKET_LES, LLES_CURRENT_CART_MASK(:,:,1), & - XLES_INT_TKE(NLES_CURRENT_TCOUNT) ) -! -!* convective velocity -! -XLES_WSTAR(NLES_CURRENT_TCOUNT) = 0. -! -IF ( XLES_Q0(NLES_CURRENT_TCOUNT) & - + (XRV/XRD-1.)*XLES_E0(NLES_CURRENT_TCOUNT) >0.) THEN - IF (LUSERV) THEN - XLES_WSTAR(NLES_CURRENT_TCOUNT) = & - ( XG / XLES_MEAN_Thv (1,NLES_CURRENT_TCOUNT,1) & - * ( XLES_Q0( NLES_CURRENT_TCOUNT ) & - + (XRV/XRD - 1.) * XLES_E0( NLES_CURRENT_TCOUNT )) & - * XLES_BL_HEIGHT( NLES_CURRENT_TCOUNT ) & - ) ** (1./3.) - ELSE - XLES_WSTAR(NLES_CURRENT_TCOUNT) = & - ( XG / XLES_MEAN_Th (1,NLES_CURRENT_TCOUNT,1) & - * ( XLES_Q0( NLES_CURRENT_TCOUNT ) & - + (XRV/XRD - 1.) * XLES_E0( NLES_CURRENT_TCOUNT )) & - * XLES_BL_HEIGHT( NLES_CURRENT_TCOUNT ) & - ) ** (1./3.) - END IF -END IF -! -!* cloud base height - IF (LUSERC) THEN - ZINT_RHOKE =0. - JJ=1 - DO JI=1,NLES_K - IF ((ZINT_RHOKE .EQ. 0) .AND. & - (XLES_MEAN_RC(JI,NLES_CURRENT_TCOUNT,1) .GT. 1.E-6)) THEN - ZINT_RHOKE=1. - JJ=JI - END IF - END DO - XLES_ZCB(NLES_CURRENT_TCOUNT)= XLES_Z(JJ)-XLES_ZS - ENDIF -! -!* height of max of cf - IF (LUSERC) THEN - IKMAX_CF= MAXLOC( XLES_MEAN_INDCf(:,NLES_CURRENT_TCOUNT,1)) - XLES_ZMAXCF(NLES_CURRENT_TCOUNT) = XLES_Z(IKMAX_CF(1)) - XLES_ZS - IKMAX_CF= MAXLOC( XLES_MEAN_INDCf2(:,NLES_CURRENT_TCOUNT,1)) - XLES_ZMAXCF2(NLES_CURRENT_TCOUNT) = XLES_Z(IKMAX_CF(1)) - XLES_ZS - ENDIF -! -!* Monin-Obukhov length -! -XLES_MO_LENGTH(NLES_CURRENT_TCOUNT) = 0. -! -IF (LUSERV) THEN - IF ( XLES_Q0(NLES_CURRENT_TCOUNT)+(XRV/XRD-1.)*XLES_E0(NLES_CURRENT_TCOUNT) /=0. )& - XLES_MO_LENGTH(NLES_CURRENT_TCOUNT) = (- (XLES_USTAR(NLES_CURRENT_TCOUNT))**3) & - / (XKARMAN*( XLES_Q0(NLES_CURRENT_TCOUNT) & - +(XRV/XRD-1.)*XLES_E0(NLES_CURRENT_TCOUNT)) & - *XG/XLES_MEAN_Thv(1,NLES_CURRENT_TCOUNT,1) ) -ELSE - IF ( XLES_Q0(NLES_CURRENT_TCOUNT) /=0. ) & - XLES_MO_LENGTH(NLES_CURRENT_TCOUNT) = (- (XLES_USTAR(NLES_CURRENT_TCOUNT))**3) & - / (XKARMAN*XLES_Q0(NLES_CURRENT_TCOUNT) & - *XG/XLES_MEAN_Th(1,NLES_CURRENT_TCOUNT,1) ) -END IF -! -!------------------------------------------------------------------------------- -! -! 6. correlations along x and y axes -! ------------------------------- -! -!* u * u -! -DO JK=1,NSPECTRA_K - CALL LES_HOR_CORR( ZU_SPEC(:,:,JK), ZU_SPEC(:,:,JK), & - CLES_LBCX , CLES_LBCY, & - XCORRi_UU(:,JK,NLES_CURRENT_TCOUNT), & - XCORRj_UU(:,JK,NLES_CURRENT_TCOUNT) ) -END DO -! -!* v * v -! -DO JK=1,NSPECTRA_K - CALL LES_HOR_CORR( ZV_SPEC(:,:,JK), ZV_SPEC(:,:,JK), & - CLES_LBCX , CLES_LBCY, & - XCORRi_VV(:,JK,NLES_CURRENT_TCOUNT), & - XCORRj_VV(:,JK,NLES_CURRENT_TCOUNT) ) -END DO -! -!* u * v -! -DO JK=1,NSPECTRA_K - CALL LES_HOR_CORR( ZU_SPEC(:,:,JK), ZV_SPEC(:,:,JK), & - CLES_LBCX , CLES_LBCY, & - XCORRi_UV(:,JK,NLES_CURRENT_TCOUNT), & - XCORRj_UV(:,JK,NLES_CURRENT_TCOUNT) ) -END DO -! -!* w * u -! -DO JK=1,NSPECTRA_K - CALL LES_HOR_CORR( ZW_SPEC(:,:,JK), ZU_SPEC(:,:,JK), & - CLES_LBCX , CLES_LBCY, & - XCORRi_WU(:,JK,NLES_CURRENT_TCOUNT), & - XCORRj_WU(:,JK,NLES_CURRENT_TCOUNT) ) -END DO -! -!* w * v -! -DO JK=1,NSPECTRA_K - CALL LES_HOR_CORR( ZW_SPEC(:,:,JK), ZV_SPEC(:,:,JK), & - CLES_LBCX , CLES_LBCY, & - XCORRi_WV(:,JK,NLES_CURRENT_TCOUNT), & - XCORRj_WV(:,JK,NLES_CURRENT_TCOUNT) ) -END DO -! -!* w * w -! -DO JK=1,NSPECTRA_K - CALL LES_HOR_CORR( ZW_SPEC(:,:,JK), ZW_SPEC(:,:,JK), & - CLES_LBCX , CLES_LBCY, & - XCORRi_WW(:,JK,NLES_CURRENT_TCOUNT), & - XCORRj_WW(:,JK,NLES_CURRENT_TCOUNT) ) -END DO -! -!* w * th -! -DO JK=1,NSPECTRA_K - CALL LES_HOR_CORR( ZW_SPEC(:,:,JK), ZTH_SPEC(:,:,JK), & - CLES_LBCX , CLES_LBCY, & - XCORRi_WTh(:,JK,NLES_CURRENT_TCOUNT), & - XCORRj_WTh(:,JK,NLES_CURRENT_TCOUNT) ) -END DO -! -!* w * thl -! -DO JK=1,NSPECTRA_K - IF (LUSERC) & - CALL LES_HOR_CORR( ZW_SPEC(:,:,JK), ZTHL_SPEC(:,:,JK), & - CLES_LBCX , CLES_LBCY, & - XCORRi_WThl(:,JK,NLES_CURRENT_TCOUNT), & - XCORRj_WThl(:,JK,NLES_CURRENT_TCOUNT) ) -END DO -! -!* th * th -! -DO JK=1,NSPECTRA_K - CALL LES_HOR_CORR( ZTH_SPEC(:,:,JK), ZTH_SPEC(:,:,JK), & - CLES_LBCX , CLES_LBCY, & - XCORRi_ThTh(:,JK,NLES_CURRENT_TCOUNT), & - XCORRj_ThTh(:,JK,NLES_CURRENT_TCOUNT) ) -END DO -! -!* thl * thl -! -DO JK=1,NSPECTRA_K - IF (LUSERC) & - CALL LES_HOR_CORR( ZTHL_SPEC(:,:,JK), ZTHL_SPEC(:,:,JK), & - CLES_LBCX , CLES_LBCY, & - XCORRi_ThlThl(:,JK,NLES_CURRENT_TCOUNT), & - XCORRj_ThlThl(:,JK,NLES_CURRENT_TCOUNT) ) -END DO -! -!* correlations with water vapor -! -IF (LUSERV) THEN - DO JK=1,NSPECTRA_K - CALL LES_HOR_CORR( ZW_SPEC(:,:,JK), ZRV_SPEC(:,:,JK), & - CLES_LBCX , CLES_LBCY, & - XCORRi_WRv(:,JK,NLES_CURRENT_TCOUNT), & - XCORRj_WRv(:,JK,NLES_CURRENT_TCOUNT) ) - END DO - ! - DO JK=1,NSPECTRA_K - CALL LES_HOR_CORR( ZTH_SPEC(:,:,JK), ZRV_SPEC(:,:,JK), & - CLES_LBCX , CLES_LBCY, & - XCORRi_ThRv(:,JK,NLES_CURRENT_TCOUNT), & - XCORRj_ThRv(:,JK,NLES_CURRENT_TCOUNT) ) - END DO - ! - DO JK=1,NSPECTRA_K - IF (LUSERC) & - CALL LES_HOR_CORR( ZTHL_SPEC(:,:,JK), ZRV_SPEC(:,:,JK), & - CLES_LBCX , CLES_LBCY, & - XCORRi_ThlRv(:,JK,NLES_CURRENT_TCOUNT), & - XCORRj_ThlRv(:,JK,NLES_CURRENT_TCOUNT) ) - END DO - ! - DO JK=1,NSPECTRA_K - CALL LES_HOR_CORR( ZRV_SPEC(:,:,JK), ZRV_SPEC(:,:,JK), & - CLES_LBCX , CLES_LBCY, & - XCORRi_RvRv(:,JK,NLES_CURRENT_TCOUNT), & - XCORRj_RvRv(:,JK,NLES_CURRENT_TCOUNT) ) - END DO -END IF -! -! -!* correlations with cloud water -! -IF (LUSERC) THEN - DO JK=1,NSPECTRA_K - CALL LES_HOR_CORR( ZW_SPEC(:,:,JK), ZRC_SPEC(:,:,JK), & - CLES_LBCX , CLES_LBCY, & - XCORRi_WRc(:,JK,NLES_CURRENT_TCOUNT), & - XCORRj_WRc(:,JK,NLES_CURRENT_TCOUNT) ) - END DO - ! - DO JK=1,NSPECTRA_K - CALL LES_HOR_CORR( ZTH_SPEC(:,:,JK), ZRC_SPEC(:,:,JK), & - CLES_LBCX , CLES_LBCY, & - XCORRi_ThRc(:,JK,NLES_CURRENT_TCOUNT), & - XCORRj_ThRc(:,JK,NLES_CURRENT_TCOUNT) ) - END DO - ! - DO JK=1,NSPECTRA_K - CALL LES_HOR_CORR( ZTHL_SPEC(:,:,JK), ZRC_SPEC(:,:,JK), & - CLES_LBCX , CLES_LBCY, & - XCORRi_ThlRc(:,JK,NLES_CURRENT_TCOUNT), & - XCORRj_ThlRc(:,JK,NLES_CURRENT_TCOUNT) ) - END DO - ! - DO JK=1,NSPECTRA_K - CALL LES_HOR_CORR( ZRC_SPEC(:,:,JK), ZRC_SPEC(:,:,JK), & - CLES_LBCX , CLES_LBCY, & - XCORRi_RcRc(:,JK,NLES_CURRENT_TCOUNT), & - XCORRj_RcRc(:,JK,NLES_CURRENT_TCOUNT) ) - END DO -END IF -! -!* correlations with cloud ice -! -IF (LUSERI) THEN - DO JK=1,NSPECTRA_K - CALL LES_HOR_CORR( ZW_SPEC(:,:,JK), ZRI_SPEC(:,:,JK), & - CLES_LBCX , CLES_LBCY, & - XCORRi_WRi(:,JK,NLES_CURRENT_TCOUNT), & - XCORRj_WRi(:,JK,NLES_CURRENT_TCOUNT) ) - END DO - ! - DO JK=1,NSPECTRA_K - CALL LES_HOR_CORR( ZTH_SPEC(:,:,JK), ZRI_SPEC(:,:,JK), & - CLES_LBCX , CLES_LBCY, & - XCORRi_ThRi(:,JK,NLES_CURRENT_TCOUNT), & - XCORRj_ThRi(:,JK,NLES_CURRENT_TCOUNT) ) - END DO - ! - DO JK=1,NSPECTRA_K - CALL LES_HOR_CORR( ZTHL_SPEC(:,:,JK), ZRI_SPEC(:,:,JK), & - CLES_LBCX , CLES_LBCY, & - XCORRi_ThlRi(:,JK,NLES_CURRENT_TCOUNT), & - XCORRj_ThlRi(:,JK,NLES_CURRENT_TCOUNT) ) - END DO - ! - DO JK=1,NSPECTRA_K - CALL LES_HOR_CORR( ZRI_SPEC(:,:,JK), ZRI_SPEC(:,:,JK), & - CLES_LBCX , CLES_LBCY, & - XCORRi_RiRi(:,JK,NLES_CURRENT_TCOUNT), & - XCORRj_RiRi(:,JK,NLES_CURRENT_TCOUNT) ) - END DO -END IF -! -!* correlations with scalar variables -! -DO JSV=1,NSV - DO JK=1,NSPECTRA_K - CALL LES_HOR_CORR( ZW_SPEC(:,:,JK), ZSV_SPEC(:,:,JK,JSV), & - CLES_LBCX , CLES_LBCY, & - XCORRi_WSv(:,JK,NLES_CURRENT_TCOUNT,JSV), & - XCORRj_WSv(:,JK,NLES_CURRENT_TCOUNT,JSV) ) - END DO - ! - DO JK=1,NSPECTRA_K - CALL LES_HOR_CORR( ZSV_SPEC(:,:,JK,JSV), ZSV_SPEC(:,:,JK,JSV), & - CLES_LBCX , CLES_LBCY, & - XCORRi_SvSv(:,JK,NLES_CURRENT_TCOUNT,JSV), & - XCORRj_SvSv(:,JK,NLES_CURRENT_TCOUNT,JSV) ) - END DO -END DO -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE LES -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE LES_n diff --git a/src/mesonh/ext/modn_turbn.f90 b/src/mesonh/ext/modn_turbn.f90 deleted file mode 100644 index 35b271f9c..000000000 --- a/src/mesonh/ext/modn_turbn.f90 +++ /dev/null @@ -1,167 +0,0 @@ -!MNH_LIC Copyright 1995-2021 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. -!----------------------------------------------------------------- -! ################### - MODULE MODN_TURB_n -! ################### -! -!!**** *MODN_TURB$n* - declaration of namelist NAM_TURBn -!! -!! PURPOSE -!! ------- -! The purpose of this module is to specify the namelist NAM_TURBn -! which concern the parameters of the turbulence scheme for one nested -! model. -! -!! -!!** IMPLICIT ARGUMENTS -!! ------------------ -!! Module MODD_TURB$n : contains declaration of turbulence scheme -!! variables entering by a namelist -!! -!! XIMPL,CTURBLEN,CTURBDIM,LTURB_FLX -!! LTURB_DIAG,LSUBG_COND,LTGT_FLX -!! -!! REFERENCE -!! --------- -!! Book2 of documentation of Meso-NH (module MODD_TURBn) -!! -!! AUTHOR -!! ------ -!! J. Cuxart and J. Stein * I.N.M. and Meteo-France * -!! -!! MODIFICATIONS -!! ------------- -!! Original January 9, 1995 -!! J.Cuxart February 15, 1995 add the switches for diagnostic storages -!! J. Stein June 14, 1995 add the subgrid condensation switch -!! J. Stein October, 1999 add the tangential fluxes switch -!! M. Tomasini Jul 05, 2001 add the subgrid autoconversion -!! P. Bechtold Feb 11, 2002 add switch for Sigma_s computation -!! P. Jabouille Apr 4, 2002 add switch for Sigma_s convection -!! V. Masson Nov 13 2002 add switch for SBL lengths -!! D. Ricard May, 2021 add switch for Leonard Terms -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_TURB_n, ONLY: & - XIMPL_n => XIMPL, & - XKEMIN_n => XKEMIN, & - XCEDIS_n => XCEDIS, & - XCADAP_n => XCADAP, & - CTURBLEN_n => CTURBLEN, & - CTURBDIM_n => CTURBDIM, & - LTURB_FLX_n => LTURB_FLX, & - LTURB_DIAG_n => LTURB_DIAG, & - LSUBG_COND_n => LSUBG_COND, & - LSIGMAS_n => LSIGMAS, & - LSIG_CONV_n => LSIG_CONV, & - LRMC01_n => LRMC01, & - CTOM_n => CTOM, & - CSUBG_AUCV_n => CSUBG_AUCV, & - VSIGQSAT_n => VSIGQSAT, & - CSUBG_AUCV_RI_n => CSUBG_AUCV_RI, & - CCONDENS_n => CCONDENS, & - CLAMBDA3_n => CLAMBDA3, & - CSUBG_MF_PDF_n => CSUBG_MF_PDF, & - LLEONARD_n => LLEONARD, & - XCOEFHGRADTHL_n => XCOEFHGRADTHL, & - XCOEFHGRADRM_n => XCOEFHGRADRM, & - XALTHGRAD_n => XALTHGRAD, & - XCLDTHOLD_n => XCLDTHOLD -! -IMPLICIT NONE -! -REAL,SAVE :: XIMPL -REAL,SAVE :: XKEMIN -REAL,SAVE :: XCEDIS -REAL,SAVE :: XCADAP -CHARACTER (LEN=4),SAVE :: CTURBLEN -CHARACTER (LEN=4),SAVE :: CTURBDIM -LOGICAL,SAVE :: LTURB_FLX -LOGICAL,SAVE :: LTURB_DIAG -LOGICAL,SAVE :: LSUBG_COND -LOGICAL,SAVE :: LSIGMAS -LOGICAL,SAVE :: LSIG_CONV -LOGICAL,SAVE :: LRMC01 -CHARACTER (LEN=4),SAVE :: CTOM -CHARACTER (LEN=4),SAVE :: CSUBG_AUCV -CHARACTER (LEN=80),SAVE :: CSUBG_AUCV_RI -CHARACTER (LEN=80),SAVE :: CCONDENS -CHARACTER (LEN=4),SAVE :: CLAMBDA3 -CHARACTER (LEN=80),SAVE :: CSUBG_MF_PDF -REAL,SAVE :: VSIGQSAT -LOGICAL,SAVE :: LLEONARD -REAL,SAVE :: XCOEFHGRADTHL -REAL,SAVE :: XCOEFHGRADRM -REAL,SAVE :: XALTHGRAD -REAL,SAVE :: XCLDTHOLD -! -NAMELIST/NAM_TURBn/XIMPL,CTURBLEN,CTURBDIM,LTURB_FLX,LTURB_DIAG, & - LSUBG_COND,LSIGMAS,LSIG_CONV,LRMC01,CTOM,CSUBG_AUCV,& - XKEMIN,VSIGQSAT,XCEDIS,XCADAP,CSUBG_AUCV_RI,CCONDENS,& - CLAMBDA3,CSUBG_MF_PDF,LLEONARD,XCOEFHGRADTHL, XCOEFHGRADRM, & - XALTHGRAD, XCLDTHOLD - -! -CONTAINS -! -SUBROUTINE INIT_NAM_TURBn - XIMPL = XIMPL_n - XKEMIN = XKEMIN_n - XCEDIS = XCEDIS_n - XCADAP = XCADAP_n - CTURBLEN = CTURBLEN_n - CTURBDIM = CTURBDIM_n - LTURB_FLX = LTURB_FLX_n - LTURB_DIAG = LTURB_DIAG_n - LSUBG_COND = LSUBG_COND_n - LSIGMAS = LSIGMAS_n - LSIG_CONV = LSIG_CONV_n - LRMC01 = LRMC01_n - CTOM = CTOM_n - CSUBG_AUCV = CSUBG_AUCV_n - VSIGQSAT = VSIGQSAT_n - CSUBG_AUCV_RI = CSUBG_AUCV_RI_n - CCONDENS = CCONDENS_n - CLAMBDA3 = CLAMBDA3_n - CSUBG_MF_PDF = CSUBG_MF_PDF_n - LLEONARD = LLEONARD_n - XCOEFHGRADTHL = XCOEFHGRADTHL_n - XCOEFHGRADRM = XCOEFHGRADRM_n - XALTHGRAD = XALTHGRAD_n - XCLDTHOLD = XCLDTHOLD_n -END SUBROUTINE INIT_NAM_TURBn - -SUBROUTINE UPDATE_NAM_TURBn - XIMPL_n = XIMPL - XKEMIN_n = XKEMIN - XCEDIS_n = XCEDIS - XCADAP_n = XCADAP - CTURBLEN_n = CTURBLEN - CTURBDIM_n = CTURBDIM - LTURB_FLX_n = LTURB_FLX - LTURB_DIAG_n = LTURB_DIAG - LSUBG_COND_n = LSUBG_COND - LSIGMAS_n = LSIGMAS - LSIG_CONV_n = LSIG_CONV - LRMC01_n = LRMC01 - CTOM_n = CTOM - CSUBG_AUCV_n = CSUBG_AUCV - VSIGQSAT_n = VSIGQSAT - CSUBG_AUCV_RI_n = CSUBG_AUCV_RI - CCONDENS_n = CCONDENS - CLAMBDA3_n = CLAMBDA3 - CSUBG_MF_PDF_n = CSUBG_MF_PDF - LLEONARD_n = LLEONARD - XCOEFHGRADTHL_n = XCOEFHGRADTHL - XCOEFHGRADRM_n = XCOEFHGRADRM - XALTHGRAD_n = XALTHGRAD - XCLDTHOLD_n = XCLDTHOLD -END SUBROUTINE UPDATE_NAM_TURBn - -END MODULE MODN_TURB_n diff --git a/src/mesonh/ext/phys_paramn.f90 b/src/mesonh/ext/phys_paramn.f90 deleted file mode 100644 index 241166607..000000000 --- a/src/mesonh/ext/phys_paramn.f90 +++ /dev/null @@ -1,1694 +0,0 @@ -!MNH_LIC Copyright 1995-2021 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. -!----------------------------------------------------------------- -! ######################## - MODULE MODI_PHYS_PARAM_n -! ######################## -! -! -INTERFACE -! - SUBROUTINE PHYS_PARAM_n( KTCOUNT, TPFILE, & - PRAD, PSHADOWS, PKAFR, PGROUND, PMAFL, PDRAG,PEOL, PTURB, & - PTRACER, PTIME_BU, PWETDEPAER, OMASKkids, OCLOUD_ONLY ) -! -USE MODD_IO, ONLY: TFILEDATA -use modd_precision, only: MNHTIME -! -INTEGER, INTENT(IN) :: KTCOUNT ! temporal iteration count -TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Synchronous output file -! advection schemes -REAL(kind=MNHTIME), DIMENSION(2), INTENT(INOUT) :: PRAD,PSHADOWS,PKAFR,PGROUND,PTURB,PMAFL,PDRAG,PTRACER,PEOL ! to store CPU - ! time for computing time -REAL(kind=MNHTIME), DIMENSION(2), INTENT(INOUT) :: PTIME_BU ! time used in budget&LES budgets statistics -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PWETDEPAER -LOGICAL, DIMENSION(:,:), INTENT(IN) :: OMASKkids ! kids domains mask -LOGICAL, INTENT(OUT) :: OCLOUD_ONLY ! conditionnal radiation computations for - ! the only cloudy columns - ! -END SUBROUTINE PHYS_PARAM_n -! -END INTERFACE -! -END MODULE MODI_PHYS_PARAM_n -! -! ######################################################################################## - SUBROUTINE PHYS_PARAM_n( KTCOUNT, TPFILE, & - PRAD, PSHADOWS, PKAFR, PGROUND, PMAFL, PEOL, PDRAG, PTURB, & - PTRACER, PTIME_BU, PWETDEPAER, OMASKkids, OCLOUD_ONLY ) -! ######################################################################################## -! -!!**** *PHYS_PARAM_n * -monitor of the parameterizations used by model _n -!! -!! PURPOSE -!! ------- -! The purpose of this routine is to update the sources by adding the -! parameterized terms. This is realized by sequentially calling the -! specialized routines. -! -!!** METHOD -!! ------ -!! The first parametrization is the radiation scheme: -!! ---------------- -!! * CRAD = 'FIXE' -!! In this case, a temporal interpolation is performed for the downward -!! surface fluxes XFLALWD and XFLASWD. -!! * CRAD = 'ECMWF' -!! Several tests are performed before calling the radiation computations -!! interface with the ECMWF radiation scheme code. A control is made to -!! ensure that: -!! - the full radiation code is called at the first model timestep -!! - there is a priority for calling the full radiation instead of the -!! cloud-only approximation if both must be called at the current -!! timestep -!! - the cloud-only option (approximation) is coherent with the -!! occurence of one cloudy vertical column at least -!! If all the above conditions are fulfilled (GRAD is .TRUE.) then the -!! position of the sun is computed in routine SUNPOS_n and the interfacing -!! routine RADIATIONS is called to update the radiative tendency XDTHRAD -!! and the downward surface fluxes XFLALWD and XFLASWD. Finally, the -!! radiative tendency is integrated as a source term in the THETA prognostic -!! equation. -!! -!! The second parameterization is the soil scheme: -!! ----------- -!! -!! externalized surface -!! -!! The third parameterization is the turbulence scheme: -!! ----------------- -!! * CTURB='NONE' -!! no turbulent mixing is taken into account -!! * CTURB='TKEL' -!! The turbulent fluxes are computed according to a one and half order -!! closure of the hydrodynamical equations. This scheme is based on a -!! prognostic for the turbulent kinetic energy and a mixing length -!! computation ( the mesh size or a physically based length). Other -!! turbulent moments are diagnosed according to a stationarization of the -!! second order turbulent moments. This turbulent scheme forecasts -!! either a purely vertical turbulent mixing or 3-dimensional mixing -!! according to its internal degrees of freedom. -!! -!! -!! The LAST parameterization is the chemistry scheme: -!! ----------------- -!! The chemistry part of MesoNH has two namelists, NAM_SOLVER for the -!! parameters concerning the stiff solver, and NAM_MNHCn concerning the -!! configuration and options of the chemistry module itself. -!! The switch LUSECHEM in NAM_CONF acitvates or deactivates the chemistry. -!! The only variables of MesoNH that are modified by chemistry are the -!! scalar variables. If calculation of chemical surface fluxes is -!! requested, those fluxes are calculated before -!! entering the turbulence scheme, since those fluxes are taken into -!! account by TURB as surface boundary conditions. -!! CAUTION: chemistry has allways to be called AFTER ALL OTHER TERMS -!! that affect the scalar variables (dynamical terms, forcing, -!! parameterizations (like TURB, CONVECTION), since it uses the variables -!! XRSVS as input in case of the time-split option. -!! -!! EXTERNAL -!! -------- -!! Subroutine SUNPOS_n : computes the position of the sun -!! Subroutine RADIATIONS : computes the radiative tendency and fluxes -!! Subroutine TSZ0 : computes the surface from temporally -!! interpolated Ts and given z0 -!! Subroutine ISBA : computes the surface fluxes from a soil scheme -!! Subroutine TURB : computes the turbulence source terms -!! Subroutine CONVECTION : computes the convection source term -!! Subroutine CH_SURFACE_FLUX_n: computes the surface flux for chemical -!! species -!! Subroutine CH_MONITOR_n : computes the chemistry source terms -!! that are applied to the scalar variables -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! USE MODD_DYN -!! USE MODD_CONF -!! USE MODD_CONF_n -!! USE MODD_CURVCOR_n -!! USE MODD_DYN_n -!! USE MODD_FIELD_n -!! USE MODD_GR_FIELD_n -!! USE MODD_LSFIELD_n -!! USE MODD_GRID_n -!! USE MODD_LBC_n -!! USE MODD_PARAM_RAD_n -!! USE MODD_RADIATIONS_n -!! USE MODD_REF_n -!! USE MODD_LUNIT_n -!! USE MODD_TIME_n -!! USE MODD_CH_MNHC_n -!! -!! REFERENCE -!! --------- -!! None -!! -!! AUTHOR -!! ------ -!! J. Stein * Meteo-France * -!! -!! MODIFICATIONS -!! ------------- -!! Original 05/01/95 -!! Modifications Feb 14, 1995 (J.Cuxart) add the I/O arguments, -!! the director cosinus and change the names of the surface fluxes -!! Modifications March 21, 1995 (J.M.Carriere) take into account liquid -!! water -!! June 30,1995 (J.Stein) initialize at 0 the surf. fluxes -!! Modifications Sept. 1, 1995 (S.Belair) ISBA scheme -!! Modifications Sept.25, 1995 (J.Stein) switch on the radiation scheme -!! Modifications Sept. 11, 1995 (J.-P. Pinty) radiation scheme -!! Nov. 15, 1995 (J.Stein) cleaning + change the temporal -!! algorithm for the soil scheme-turbulence -!! Jan. 23, 1996 (J.Stein) add a new option for the surface -!! fluxes where Ts and z0 are given -!! March 18, 1996 (J.Stein) add the cloud fraction -!! March 28, 1996 (J.Stein) the soil scheme gives energy -!! fluxes + cleaning -!! June 17, 1996 (Lafore) statistics of computing time -!! August 4, 1996 (K. Suhre) add chemistry -!! Oct. 12, 1996 (J.Stein) use XSRCM in the turbulence -!! scheme -!! Nov. 18, 1996 (J.-P. Pinty) add domain translation -!! change arg. in radiations -!! Fev. 4, 1997 (J.Viviand) change isba's calling for ice -!! Jun. 22, 1997 (J.Stein) change the equation system and use -!! the absolute pressure -!! Jul. 09, 1997 (V.Masson) add directional z0 -!! Jan. 24, 1998 (P.Bechtold) add convective transport for tracers -!! Jan. 24, 1998 (J.-P. Pinty) split SW and LW part for radiation -!! Mai. 10, 1999 (P.Bechtold) shallow convection -!! Oct. 20, 1999 (P.Jabouille) domain translation for turbulence -!! Jan. 04, 2000 (V.Masson) removes TSZ0 case -!! Jan. 04, 2000 (V.Masson) modifies albedo computation -! Jul 02, 2000 (F.Solmon/V.Masson) adaptation for patch approach -!! Nov. 15, 2000 (V.Masson) LES routines -!! Nov. 15, 2000 (V.Masson) effect of slopes on surface fluxes -!! Feb. 02, 2001 (P.Tulet) add friction velocities and aerodynamical -!! resistance (patch approach) -!! Jan. 04, 2000 (V.Masson) modify surf_rad_modif computation -!! Mar. 04, 2002 (F.Solmon) new interface for radiation call -!! Nov. 06, 2002 (V.Masson) LES budgets & budget time counters -!! Jan. 2004 (V.Masson) surface externalization -!! Jan. 13, 2004 (J.Escobar) bug correction : compute "GRAD" in parallel -!! Jan. 20, 2005 (P. Tulet) add dust sedimentation -!! Jan. 20, 2005 (P. Tulet) climatologic SSA -!! Jan. 20, 2005 (P. Tulet) add aerosol / dust scavenging -!! Jul. 2005 (N. Asencio) use the two-way result-fields -!! before ground_param call -!! May 2006 Remove EPS -!! Oct. 2007 (J.Pergaud) Add shallow_MF -!! Oct. 2009 (C.Lac) Introduction of different PTSTEP according to the -!! advection schemes -!! Oct. 2009 (V. MAsson) optimization of Pergaud et al massflux scheme -!! Aug. 2010 (V.Masson, C.Lac) Exchange of SBL_DEPTH for -!! reproducibility -!! Oct. 2010 (J.Escobar) init ZTIME_LES_MF ( pb detected with g95 ) -!! Feb. 2011 (V.Masson, C.Lac) SBL_DEPTH values on outer pts -!! for RMC01 -!! Sept.2011 (J.Escobar) init YINST_SFU ='M' -!! -!! Specific for 2D modeling : -!! -!! 06/2010 (P.Peyrille) add Call to aerozon.f90 if LAERO_FT=T -!! to update -!! aerosols and ozone climatology at each call to -!! phys_param otherwise it is constant to monthly average -!! 03/2013 (C.Lac) FIT temporal scheme -!! 01/2014 (C.Lac) correction for the nesting of 2D surface -!! fields if the number of the son model does not -!! follow the number of the dad model -!! J.Escobar 21/03/2013: for HALOK comment all NHALO=1 test -!! 2014 (M.Faivre) -!! 06/2016 (G.Delautier) phasage surfex 8 -!! 2016 B.VIE LIMA -!! M. Leriche 02/2017 Avoid negative fluxes if sv=0 outside the physics domain -!! C.Lac 10/2017 : ch_monitor and aer_monitor extracted from phys_param -!! to be called directly by modeln as the last process -!! 02/2018 Q.Libois ECRAD -! P. Wautelet 28/03/2018: replace TEMPORAL_DIST by DATETIME_DISTANCE -! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O -! P. Wautelet 28/03/2019: use MNHTIME for time measurement variables -! P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function -! P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine -! P. Wautelet 21/11/2019: ZRG_HOUR and ZRAT_HOUR are now parameter arrays -! C. Lac 11/2019: correction in the drag formula and application to building in addition to tree -! F. Auguste 02/2021: add IBM -! JL Redelsperger 03/2021: add the SW flux penetration for Ocean model case -! A. Costes 12/2021: add Blaze fire model -!!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_ADV_n, ONLY : XRTKEMS -USE MODD_ARGSLIST_ll, ONLY : LIST_ll -USE MODD_BLOWSNOW, ONLY : LBLOWSNOW,XRSNOW -USE MODD_BUDGET, ONLY: NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, NBUDGET_RI, NBUDGET_SV1, & - TBUDGETS, xtime_bu_process, TBUCONF -USE MODD_CH_AEROSOL -USE MODD_CH_MNHC_n, ONLY : LUSECHEM, &! indicates if chemistry is used - LCH_CONV_SCAV, & - LCH_CONV_LINOX -USE MODD_CLOUD_MF_n -USE MODD_CONDSAMP -USE MODD_CONF -USE MODD_CONF_n -USE MODD_CST, ONLY : CST -USE MODD_CTURB, ONLY : CSTURB -USE MODD_CURVCOR_n -USE MODD_DEEP_CONVECTION_n -USE MODD_DEF_EDDY_FLUX_n ! Ajout PP -USE MODD_DEF_EDDYUV_FLUX_n ! Ajout PP -USE MODD_DIAG_IN_RUN, ONLY: LDIAG_IN_RUN, XCURRENT_TKE_DISS -USE MODD_DIM_n, ONLY: NIMAX_ll, NJMAX_ll -USE MODD_DRAGBLDG_n -USE MODD_DRAGTREE_n -USE MODD_DUST -USE MODD_DYN -USE MODD_DYN_n -USE MODD_EOL_MAIN, ONLY: LMAIN_EOL, CMETH_EOL, NMODEL_EOL -USE MODD_FIELD_n -USE MODD_FRC -USE MODD_FRC_n -USE MODD_GRID -USE MODD_GRID_n -USE MODD_IBM_PARAM_n, ONLY: LIBM, XIBM_EPSI, XIBM_LS, XIBM_XMUT -USE MODD_ICE_C1R3_DESCR, ONLY : XRTMIN_C1R3=>XRTMIN -USE MODD_IO, ONLY: TFILEDATA -USE MODD_LATZ_EDFLX -USE MODD_LBC_n -USE MODD_LES -USE MODD_LES_BUDGET -USE MODD_LSFIELD_n -USE MODD_LUNIT_n -USE MODD_METRICS_n -USE MODD_MNH_SURFEX_n -USE MODD_NESTING, ONLY : XWAY,NDAD, NDXRATIO_ALL, NDYRATIO_ALL -USE MODD_NSV, ONLY : NSV, NSV_LGBEG, NSV_LGEND, & - NSV_SLTBEG,NSV_SLTEND,NSV_SLT,& - NSV_AERBEG,NSV_AEREND, & - NSV_DSTBEG,NSV_DSTEND, NSV_DST,& - NSV_LIMA_NR,NSV_LIMA_NS,NSV_LIMA_NG,NSV_LIMA_NH -USE MODD_OCEANH -USE MODD_OUT_n -USE MODD_PARAM_C2R2, ONLY : LSEDC -USE MODD_PARAMETERS -USE MODD_PARAM_ICE, ONLY : LSEDIC -USE MODD_PARAM_KAFR_n -USE MODD_PARAM_LIMA, ONLY : MSEDC => LSEDC, XRTMIN_LIMA=>XRTMIN -USE MODD_PARAM_MFSHALL_n -USE MODD_PARAM_n -USE MODD_PARAM_RAD_n -USE MODD_PASPOL -USE MODD_PASPOL_n -USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t -USE MODD_PRECIP_n -use modd_precision, only: MNHTIME -USE MODD_RADIATIONS_n -USE MODD_RAIN_ICE_DESCR, ONLY: XRTMIN -USE MODD_REF, ONLY: LCOUPLES -USE MODD_REF_n -USE MODD_SALT -USE MODD_SHADOWS_n -USE MODD_SUB_PHYS_PARAM_n -USE MODD_TIME_n -USE MODD_TIME_n -USE MODD_TIME, ONLY : TDTEXP ! Ajout PP -USE MODD_TURB_CLOUD, ONLY : CTURBLEN_CLOUD,NMODEL_CLOUD, & - XCEI,XCEI_MIN,XCEI_MAX,XCOEF_AMPL_SAT -USE MODD_TURB_FLUX_AIRCRAFT_BALLOON, ONLY : XTHW_FLUX, XRCW_FLUX, XSVW_FLUX -USE MODD_TURB_n - -USE MODE_AERO_PSD -use mode_budget, only: Budget_store_end, Budget_store_init -USE MODE_DATETIME -USE MODE_DUST_PSD -USE MODE_ll -USE MODE_GATHER_ll -USE MODE_MNH_TIMING -USE MODE_MODELN_HANDLER -USE MODE_MPPDB -USE MODE_FILL_DIMPHYEX, ONLY: FILL_DIMPHYEX -USE MODE_SALT_PSD - -USE MODI_AEROZON ! Ajout PP -USE MODI_CONDSAMP -USE MODI_CONVECTION -USE MODI_DRAG_BLD -USE MODI_DRAG_VEG -USE MODI_DUST_FILTER -USE MODI_EDDY_FLUX_n ! Ajout PP -USE MODI_EDDY_FLUX_ONE_WAY_n ! Ajout PP -USE MODI_EDDYUV_FLUX_n ! Ajout PP -USE MODI_EDDYUV_FLUX_ONE_WAY_n ! Ajout PP -USE MODI_EOL_MAIN -USE MODI_GROUND_PARAM_n -USE MODI_GRADIENT_M -USE MODI_GRADIENT_W -USE MODI_PASPOL -USE MODI_RADIATIONS -USE MODI_SALT_FILTER -USE MODI_SEDIM_DUST -USE MODI_SEDIM_SALT -USE MODI_SHALLOW_MF_PACK -USE MODI_SUNPOS_n -USE MODI_SURF_RAD_MODIF -USE MODI_SWITCH_SBG_LES_N -USE MODI_TURB - -IMPLICIT NONE -! -!* 0.1 declarations of arguments -! -INTEGER, INTENT(IN) :: KTCOUNT ! temporal iteration count -TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Synchronous output file -! advection schemes -REAL(kind=MNHTIME), DIMENSION(2), INTENT(INOUT) :: PRAD,PSHADOWS,PKAFR,PGROUND,PTURB,PMAFL,PDRAG,PTRACER,PEOL ! to store CPU - ! time for computing time -REAL(kind=MNHTIME), DIMENSION(2), INTENT(INOUT) :: PTIME_BU ! time used in budget&LES budgets statistics -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PWETDEPAER -LOGICAL, DIMENSION(:,:), INTENT(IN) :: OMASKkids ! kids domains mask -LOGICAL, INTENT(OUT) :: OCLOUD_ONLY ! conditionnal radiation computations for - ! the only cloudy columns - ! -! -!* 0.2 declarations of local variables -! -REAL, DIMENSION(:,:), ALLOCATABLE :: ZSFU ! surface flux of x and -REAL, DIMENSION(:,:), ALLOCATABLE :: ZSFV ! y component of wind -REAL, DIMENSION(:,:), ALLOCATABLE :: ZSFTH ! surface flux of theta -REAL, DIMENSION(:,:), ALLOCATABLE :: ZSFRV ! surface flux of vapor -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZSFSV ! surface flux of scalars -REAL, DIMENSION(:,:), ALLOCATABLE :: ZSFCO2! surface flux of CO2 -! -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZDIR_ALB ! direct albedo -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZSCA_ALB ! diffuse albedo -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZEMIS ! emissivity -REAL, DIMENSION(:,:), ALLOCATABLE :: ZTSRAD ! surface temperature -REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZRGDST,ZSIGDST,ZNDST,ZSVDST -REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZRGSLT,ZSIGSLT,ZNSLT,ZSVSLT -REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZRGAER,ZSIGAER,ZNAER,ZSVAER -REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZSVT -! -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZEXN ! Atmospheric density and Exner -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZSIGMF ! MF contribution to XSIGS -! -REAL, DIMENSION(0:24), parameter :: ZRG_HOUR = (/ 0., 0., 0., 0., 0., 32.04, 114.19, & - 228.01, 351.25, 465.49, 557.24, & - 616.82, 638.33, 619.43, 566.56, & - 474.71, 359.20, 230.87, 115.72, & - 32.48, 0., 0., 0., 0., 0. /) -! -REAL, DIMENSION(0:24), parameter :: ZRAT_HOUR = (/ 326.00, 325.93, 325.12, 324.41, & - 323.16, 321.95, 322.51, 325.16, & - 328.01, 331.46, 335.58, 340.00, & - 345.20, 350.32, 354.20, 356.58, & - 356.56, 355.33, 352.79, 351.34, & - 347.00, 342.00, 337.00, 332.00, & - 326.00 /) -! -! -character(len=6) :: ynum -INTEGER :: IHOUR ! parameters necessary for the temporal -REAL :: ZTIME, ZDT ! interpolation -REAL :: ZTEMP_DIST ! time between 2 instants (in seconds) -! -LOGICAL :: GRAD ! conditionnal call for the full radiation - ! computations -REAL :: ZRAD_GLOB_ll ! 'real' global parallel mask of 'GRAD' -INTEGER :: INFO_ll ! error report of parallel routines - ! the only cloudy columns -! -REAL(kind=MNHTIME), DIMENSION(2) :: ZTIME1, ZTIME2, ZTIME3, ZTIME4 ! for computing time analysis -REAL(kind=MNHTIME), DIMENSION(2) :: ZTIME_LES_MF ! time spent in LES computation in shallow conv. -LOGICAL :: GDCONV ! conditionnal call for the deep convection - ! computations -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRC, ZRI, ZWT ! additional dummies -REAL, DIMENSION(:,:), ALLOCATABLE :: ZDXDY ! grid area - ! for rc, ri, w required if main variables not allocated -! -INTEGER :: IIU, IJU, IKU ! dimensional indexes -! -INTEGER :: JSV ! Loop index for Scalar Variables -INTEGER :: JSWB ! loop on SW spectral bands -INTEGER :: IIB,IIE,IJB,IJE, IKB, IKE, JI,JJ -INTEGER :: IMODEIDX - ! index values for the Beginning or the End of the physical - ! domain in x and y directions -TYPE(LIST_ll), POINTER :: TZFIELDS_ll ! list of fields to exchange -INTEGER :: IINFO_ll ! return code of parallel routine -! -!* variables for writing in a fm file -! -INTEGER :: IRESP ! IRESP : return-code if a problem appears - !in LFI subroutines at the open of the file -INTEGER :: ILUOUT ! logical unit numbers of output-listing -INTEGER :: IMI ! model index -INTEGER :: JKID ! loop index to look for the KID models -REAL :: ZINIRADIUSI, ZINIRADIUSJ ! ORILAM initial radius -REAL, DIMENSION(NMODE_DST) :: ZINIRADIUS ! DUST initial radius -REAL, DIMENSION(NMODE_SLT) :: ZINIRADIUS_SLT ! Sea Salt initial radius -REAL, DIMENSION(SIZE(XRSVS,1), SIZE(XRSVS,2), SIZE(XRSVS,3), SIZE(XRSVS,4)) :: ZRSVS -LOGICAL :: GCLD ! conditionnal call for dust wet deposition -! * arrays to store the surface fields before radiation and convection scheme -! calls -INTEGER :: IMODSON ! Number of son models of IMI with XWAY=2 -INTEGER :: IKIDM ! index loop -INTEGER :: IGRADIENTS ! Number of horizontal gradients in turb -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZSAVE_INPRR,ZSAVE_INPRS,ZSAVE_INPRG,ZSAVE_INPRH -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZSAVE_INPRC,ZSAVE_PRCONV,ZSAVE_PRSCONV -REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZSAVE_DIRFLASWD, ZSAVE_SCAFLASWD,ZSAVE_DIRSRFSWD -! for ocean model -INTEGER :: JKM , JSW ! vertical index loop -REAL :: ZSWA,TINTSW ! index for SW interpolation and int time betwenn forcings (ocean model) -REAL, DIMENSION(:), ALLOCATABLE :: ZIZOCE(:) ! Solar flux penetrating in ocean -REAL, DIMENSION(:), ALLOCATABLE :: ZPROSOL1(:),ZPROSOL2(:) ! Funtions for penetrating solar flux -! -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZLENGTHM, ZLENGTHH, ZMFMOIST !OHARAT turb option from AROME (not allocated in MNH) - ! to be moved as optional args for turb -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTDIFF, ZTDISS -REAL, DIMENSION(:),ALLOCATABLE :: ZXHAT_ll,ZYHAT_ll ! Position x/y in the conformal - ! plane (array on the complete domain) -REAL, DIMENSION(:,:), ALLOCATABLE :: ZDIST ! distance from the center of the cooling -! -REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZHGRAD ! horizontal gradient used in turb -TYPE(DIMPHYEX_t) :: YLDIMPHYEX -LOGICAL :: GCOMPUTE_SRC ! flag to define dimensions of SIGS and SRCT variables -!----------------------------------------------------------------------------- - -NULLIFY(TZFIELDS_ll) -IMI=GET_CURRENT_MODEL_INDEX() -! -ILUOUT = TLUOUT%NLU -CALL GET_DIM_EXT_ll ('B',IIU,IJU) -IKU=SIZE(XTHT,3) -IKB = 1 + JPVEXT -IKE = IKU - JPVEXT -! -CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) -CALL FILL_DIMPHYEX(YLDIMPHYEX, SIZE(XTHT,1), SIZE(XTHT,2), SIZE(XTHT,3),.TRUE.) -! -ZTIME1 = 0.0_MNHTIME -ZTIME2 = 0.0_MNHTIME -ZTIME3 = 0.0_MNHTIME -ZTIME4 = 0.0_MNHTIME -PTIME_BU = 0._MNHTIME -ZTIME_LES_MF = 0.0_MNHTIME -PWETDEPAER(:,:,:,:) = 0. -! -!* allocation of variables used in more than one parameterization -! -ALLOCATE(ZSFU (IIU,IJU)) ! surface schemes + turbulence -ALLOCATE(ZSFV (IIU,IJU)) -ALLOCATE(ZSFTH (IIU,IJU)) -ALLOCATE(ZSFRV (IIU,IJU)) -ALLOCATE(ZSFSV (IIU,IJU,NSV)) -ALLOCATE(ZSFCO2(IIU,IJU)) -! -!* if XWAY(son)=2 save surface fields before radiation or convective scheme -! calls -! -IMODSON = 0 -DO JKID = IMI+1,NMODEL ! min value of the possible kids - IF (IMI == NDAD(JKID) .AND. XWAY(JKID) == 2. .AND. CPROGRAM=='MESONH' & - .AND. (CCONF == 'RESTA' .OR. (CCONF == 'START' .AND. KTCOUNT /= 1))) THEN - IMODSON = IMODSON + 1 - END IF -END DO -! - IF (IMODSON /= 0 ) THEN - IF (LUSERC .AND. ( & - (LSEDIC .AND. CCLOUD(1:3) == 'ICE') .OR. & - (LSEDC .AND. (CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO')) .OR. & - (MSEDC .AND. CCLOUD=='LIMA') & - )) THEN - ALLOCATE( ZSAVE_INPRC(SIZE(XINPRC,1),SIZE(XINPRC,2),IMODSON)) - ELSE - ALLOCATE( ZSAVE_INPRC(0,0,0)) - END IF - IF (LUSERR) THEN - ALLOCATE( ZSAVE_INPRR(SIZE(XINPRR,1),SIZE(XINPRR,2),IMODSON)) - ELSE - ALLOCATE( ZSAVE_INPRR(0,0,0)) - END IF - IF (LUSERS) THEN - ALLOCATE( ZSAVE_INPRS(SIZE(XINPRS,1),SIZE(XINPRS,2),IMODSON)) - ELSE - ALLOCATE( ZSAVE_INPRS(0,0,0)) - END IF - IF (LUSERG) THEN - ALLOCATE( ZSAVE_INPRG(SIZE(XINPRG,1),SIZE(XINPRG,2),IMODSON)) - ELSE - ALLOCATE( ZSAVE_INPRG(0,0,0)) - END IF - IF (LUSERH) THEN - ALLOCATE( ZSAVE_INPRH(SIZE(XINPRH,1),SIZE(XINPRH,2),IMODSON)) - ELSE - ALLOCATE( ZSAVE_INPRH(0,0,0)) - END IF - IF (CDCONV /= 'NONE') THEN - ALLOCATE( ZSAVE_PRCONV(SIZE(XPRCONV,1),SIZE(XPRCONV,2),IMODSON)) - ALLOCATE( ZSAVE_PRSCONV(SIZE(XPRSCONV,1),SIZE(XPRSCONV,2),IMODSON)) - ELSE - ALLOCATE( ZSAVE_PRCONV(0,0,0)) - ALLOCATE( ZSAVE_PRSCONV(0,0,0)) - END IF - IF (CRAD /= 'NONE') THEN - ALLOCATE( ZSAVE_DIRFLASWD(SIZE(XDIRFLASWD,1),SIZE(XDIRFLASWD,2),SIZE(XDIRFLASWD,3),IMODSON)) - ALLOCATE( ZSAVE_SCAFLASWD(SIZE(XSCAFLASWD,1),SIZE(XSCAFLASWD,2),SIZE(XSCAFLASWD,3),IMODSON)) - ALLOCATE( ZSAVE_DIRSRFSWD(SIZE(XDIRSRFSWD,1),SIZE(XDIRSRFSWD,2),SIZE(XDIRSRFSWD,3),IMODSON)) - ELSE - ALLOCATE( ZSAVE_DIRFLASWD(0,0,0,0)) - ALLOCATE( ZSAVE_SCAFLASWD(0,0,0,0)) - ALLOCATE( ZSAVE_DIRSRFSWD(0,0,0,0)) - END IF - ENDIF -! -IKIDM=0 -DO JKID = IMI+1,NMODEL ! min value of the possible kids - IF (IMI == NDAD(JKID) .AND. XWAY(JKID) == 2. .AND. CPROGRAM=='MESONH' & - .AND. (CCONF == 'RESTA' .OR. (CCONF == 'START' .AND. KTCOUNT /= 1))) THEN -! BUG if number of the son does not follow the number of the dad -! IKIDM = JKID-IMI - IKIDM = IKIDM + 1 - IF (LUSERC .AND. ( & - (LSEDIC .AND. CCLOUD(1:3) == 'ICE') .OR. & - (LSEDC .AND. (CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO')) .OR. & - (MSEDC .AND. CCLOUD=='LIMA') & - )) THEN - ZSAVE_INPRC(:,:,IKIDM) = XINPRC(:,:) - END IF - IF (LUSERR) THEN - ZSAVE_INPRR(:,:,IKIDM) = XINPRR(:,:) - END IF - IF (LUSERS) THEN - ZSAVE_INPRS(:,:,IKIDM) = XINPRS(:,:) - END IF - IF (LUSERG) THEN - ZSAVE_INPRG(:,:,IKIDM) = XINPRG(:,:) - END IF - IF (LUSERH) THEN - ZSAVE_INPRH(:,:,IKIDM) = XINPRH(:,:) - END IF - IF (CDCONV /= 'NONE') THEN - ZSAVE_PRCONV(:,:,IKIDM) = XPRCONV(:,:) - ZSAVE_PRSCONV(:,:,IKIDM) = XPRSCONV(:,:) - END IF - IF (CRAD /= 'NONE') THEN - ZSAVE_DIRFLASWD(:,:,:,IKIDM) = XDIRFLASWD(:,:,:) - ZSAVE_SCAFLASWD(:,:,:,IKIDM) = XSCAFLASWD(:,:,:) - ZSAVE_DIRSRFSWD(:,:,:,IKIDM) = XDIRSRFSWD(:,:,:) - END IF - ENDIF -END DO -! -!----------------------------------------------------------------------------- -! -!* 1. RADIATION SCHEME -! ---------------- -! -! -XTIME_BU_PROCESS = 0. -XTIME_LES_BU_PROCESS = 0. -! -CALL SECOND_MNH2(ZTIME1) -! -! -!* 1.1 Tests to control how the radiation package should be called (at the current timestep) -! ----------------------------------------------------------- -! -! -GRAD = .FALSE. -OCLOUD_ONLY = .FALSE. -! -IF (CRAD /='NONE') THEN -! -! test to see if the partial radiations for cloudy must be called -! - IF (CRAD =='ECMW' .OR. CRAD =='ECRA') THEN - CALL DATETIME_DISTANCE(TDTRAD_CLONLY,TDTCUR,ZTEMP_DIST) - IF( MOD(NINT(ZTEMP_DIST/XTSTEP),NINT(XDTRAD_CLONLY/XTSTEP))==0 ) THEN - TDTRAD_CLONLY = TDTCUR - GRAD = .TRUE. - OCLOUD_ONLY = .TRUE. - END IF - END IF -! -! test to see if the full radiations must be called -! - CALL DATETIME_DISTANCE(TDTCUR,TDTRAD_FULL,ZTEMP_DIST) - IF( MOD(NINT(ZTEMP_DIST/XTSTEP),NINT(XDTRAD/XTSTEP))==0 ) THEN - TDTRAD_FULL = TDTCUR - GRAD = .TRUE. - OCLOUD_ONLY = .FALSE. - END IF -! -! tests to see if any cloud exists -! - IF (CRAD =='ECMW' .OR. CRAD =='ECRA') THEN - IF (GRAD .AND. NRR.LE.3 ) THEN - IF( MAX(MAXVAL(XCLDFR(:,:,:)),MAXVAL(XICEFR(:,:,:))).LE. 1.E-10 .AND. OCLOUD_ONLY ) THEN - GRAD = .FALSE. ! only the cloudy verticals would be - ! refreshed but there is no clouds - END IF - END IF -! - IF (GRAD .AND. NRR.GE.4 ) THEN - IF( CCLOUD(1:3)=='ICE' )THEN - IF( MAXVAL(XRT(:,:,:,2)).LE.XRTMIN(2) .AND. & - MAXVAL(XRT(:,:,:,4)).LE.XRTMIN(4) .AND. OCLOUD_ONLY ) THEN - GRAD = .FALSE. ! only the cloudy verticals would be - ! refreshed but there is no cloudwater and ice - END IF - END IF - IF( CCLOUD=='C3R5' )THEN - IF( MAXVAL(XRT(:,:,:,2)).LE.XRTMIN_C1R3(2) .AND. & - MAXVAL(XRT(:,:,:,4)).LE.XRTMIN_C1R3(4) .AND. OCLOUD_ONLY ) THEN - GRAD = .FALSE. ! only the cloudy verticals would be - ! refreshed but there is no cloudwater and ice - END IF - END IF - IF( CCLOUD=='LIMA' )THEN - IF( MAXVAL(XRT(:,:,:,2)).LE.XRTMIN_LIMA(2) .AND. & - MAXVAL(XRT(:,:,:,4)).LE.XRTMIN_LIMA(4) .AND. OCLOUD_ONLY ) THEN - GRAD = .FALSE. ! only the cloudy verticals would be - ! refreshed but there is no cloudwater and ice - END IF - END IF - END IF - END IF -! -END IF -! -! global parallel mask for 'GRAD' -ZRAD_GLOB_ll = 0.0 -IF (GRAD) ZRAD_GLOB_ll = 1.0 -CALL REDUCESUM_ll(ZRAD_GLOB_ll,INFO_ll) -if (ZRAD_GLOB_ll .NE. 0.0 ) GRAD = .TRUE. -! -! -IF( GRAD ) THEN - ALLOCATE(ZCOSZEN(IIU,IJU)) - ALLOCATE(ZSINZEN(IIU,IJU)) - ALLOCATE(ZAZIMSOL(IIU,IJU)) -! -! -!* 1.2. Astronomical computations -! ------------------------- -! -! Ajout PP -IF (.NOT. OCLOUD_ONLY .AND. KTCOUNT /= 1) THEN - IF (LAERO_FT) THEN - CALL AEROZON (XPABST,XTHT,XTSRAD,XLAT,XLON,TDTCUR,TDTEXP, & - NDLON,NFLEV,CAER,NAER,NSTATM, & - XSINDEL,XCOSDEL,XTSIDER,XCORSOL, & - XSTATM,XOZON, XAER) - XAER_CLIM = XAER - END IF -END IF -! -CALL SUNPOS_n ( XZENITH, ZCOSZEN, ZSINZEN, ZAZIMSOL ) -! -!* 1.3 Call to radiation scheme -! ------------------------ -! - SELECT CASE ( CRAD ) -! -!* 1.3.1 TOP of Atmposphere radiation -! ---------------------------- - CASE('TOPA') -! - XFLALWD (:,:) = 300. - DO JSWB=1,NSWB_MNH - XDIRFLASWD(:,:,JSWB) = CST%XI0 * MAX(COS(XZENITH(:,:)),0.)/REAL(NSWB_MNH) - XSCAFLASWD(:,:,JSWB) = 0. - END DO - XDTHRAD(:,:,:) = 0. - -! -!* 1.3.1 FIXEd radiative surface fluxes -! ------------------------------ -! - CASE('FIXE') - ZTIME = MOD(TDTCUR%xtime +XLON0*240., CST%XDAY) - IHOUR = INT( ZTIME/3600. ) - IF (IHOUR < 0) IHOUR=IHOUR + 24 - ZDT = ZTIME/3600. - REAL(IHOUR) - XDIRFLASWD(:,:,:) =(( ZRG_HOUR(IHOUR+1)-ZRG_HOUR(IHOUR) )*ZDT + ZRG_HOUR(IHOUR)) / REAL(NSWB_MNH) - XFLALWD (:,:) = (ZRAT_HOUR(IHOUR+1)-ZRAT_HOUR(IHOUR))*ZDT + ZRAT_HOUR(IHOUR) - DO JSWB=1,NSWB_MNH - WHERE(ZCOSZEN(:,:)<0.) XDIRFLASWD(:,:,JSWB) = 0. - END DO - - XSCAFLASWD(:,:,:) = XDIRFLASWD(:,:,:) * 0.2 - XDIRFLASWD(:,:,:) = XDIRFLASWD(:,:,:) * 0.8 - XDTHRAD(:,:,:) = 0. - ! -! -!* 1.3.2 ECMWF or ECRAD radiative surface and atmospheric fluxes -! ---------------------------------------------- -! - CASE('ECMW' , 'ECRA') - IF (LLES_MEAN) OCLOUD_ONLY=.FALSE. - XRADEFF(:,:,:)=0.0 - XSWU(:,:,:)=0.0 - XSWD(:,:,:)=0.0 - XLWU(:,:,:)=0.0 - XLWD(:,:,:)=0.0 - XDTHRADSW(:,:,:)=0.0 - XDTHRADLW(:,:,:)=0.0 - CALL RADIATIONS( TPFILE, & - LCLEAR_SKY, OCLOUD_ONLY, NCLEARCOL_TM1, CEFRADL, CEFRADI, COPWSW, COPISW, & - COPWLW, COPILW, XFUDG, & - NDLON, NFLEV, NRAD_DIAG, NFLUX, NRAD, NAER, NSWB_OLD, NSWB_MNH, NLWB_MNH, & - NSTATM, NRAD_COLNBR, ZCOSZEN, XSEA, XCORSOL, & - XDIR_ALB, XSCA_ALB, XEMIS, MAX(XCLDFR,XICEFR), XCCO2, XTSRAD, XSTATM, XTHT, XRT, & - XPABST, XOZON, XAER,XDST_WL, XAER_CLIM, XSVT, & - XDTHRAD, XFLALWD, XDIRFLASWD, XSCAFLASWD, XRHODREF, XZZ , & - XRADEFF, XSWU, XSWD, XLWU, XLWD, XDTHRADSW, XDTHRADLW ) -! - - WRITE(UNIT=ILUOUT,FMT='(" RADIATIONS called for KTCOUNT=",I6, & - & "with the CLOUD_ONLY option set ",L2)') KTCOUNT,OCLOUD_ONLY -! - ! - WHERE (XDIRFLASWD.LT.0.0) - XDIRFLASWD=0.0 - ENDWHERE - ! - WHERE (XDIRFLASWD.GT.1500.0) - XDIRFLASWD=1500.0 - ENDWHERE - ! - WHERE (XSCAFLASWD.LT.0.0) - XSCAFLASWD=0.0 - ENDWHERE - ! - WHERE (XSCAFLASWD.GT.1500.0) - XSCAFLASWD=1500.0 - ENDWHERE - ! - WHERE( XDIRFLASWD(:,:,1) + XSCAFLASWD(:,:,1) >0. ) - XALBUV(:,:) = ( XDIR_ALB(:,:,1) * XDIRFLASWD(:,:,1) & - + XSCA_ALB(:,:,1) * XSCAFLASWD(:,:,1) ) & - / (XDIRFLASWD(:,:,1) + XSCAFLASWD(:,:,1) ) - ELSEWHERE - XALBUV(:,:) = XDIR_ALB(:,:,1) - END WHERE -! - END SELECT -! - CALL SECOND_MNH2(ZTIME2) -! - PRAD = PRAD + ZTIME2 - ZTIME1 -! - ZTIME1 = ZTIME2 -! - CALL SURF_RAD_MODIF (XMAP, XXHAT, XYHAT, & - ZCOSZEN, ZSINZEN, ZAZIMSOL, XZS, XZS_XY, & - XDIRFLASWD, XDIRSRFSWD ) -! -!* Azimuthal angle to be sent later to surface processes -! Defined in radian, clockwise, from North -! - XAZIM = ZAZIMSOL -! - CALL SECOND_MNH2(ZTIME2) -! - PSHADOWS = PSHADOWS + ZTIME2 - ZTIME1 -! - ZTIME1 = ZTIME2 -! - DEALLOCATE(ZCOSZEN) - DEALLOCATE(ZSINZEN) - DEALLOCATE(ZAZIMSOL) -! -END IF -! -! -!* 1.4 control prints -! -------------- -! -!* 1.5 Radiative tendency integration -! ------------------------------ -! -IF (CRAD /='NONE') THEN - if ( TBUCONF%LBUDGET_th ) call Budget_store_init( TBUDGETS(NBUDGET_TH), 'RAD', xrths(:, :, :) ) - XRTHS(:,:,:) = XRTHS(:,:,:) + XRHODJ(:,:,:)*XDTHRAD(:,:,:) - if ( TBUCONF%LBUDGET_th ) call Budget_store_end ( TBUDGETS(NBUDGET_TH), 'RAD', xrths(:, :, :) ) -END IF -! -! -!* 1.6 Ocean case: -! Sfc turbulent fluxes & Radiative tendency due to SW penetrating ocean -! -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(XSSOLA(IIU,IJU)) - ! Time interpolation - JSW = INT(TDTCUR%xtime/REAL(NINFRT)) - ZSWA = TDTCUR%xtime/REAL(NINFRT)-REAL(JSW) - 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) = CST%XROC*ZIZOCE(IKU) - ZPROSOL2(IKU) = (1.-CST%XROC)*ZIZOCE(IKU) - IF(NVERB >= 5 ) THEN -! 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 ( TBUCONF%LBUDGET_th ) call Budget_store_init( TBUDGETS(NBUDGET_TH), 'OCEAN', xrths(:, :, :) ) - DO JKM=IKU-1,2,-1 - ZPROSOL1(JKM) = ZPROSOL1(JKM+1)* exp(-XDZZ(2,2,JKM)/CST%XD1) - ZPROSOL2(JKM) = ZPROSOL2(JKM+1)* exp(-XDZZ(2,2,JKM)/CST%XD2) - ZIZOCE(JKM) = (ZPROSOL1(JKM+1)-ZPROSOL1(JKM) + ZPROSOL2(JKM+1)-ZPROSOL2(JKM))/XDZZ(2,2,JKM) - ! Adding to temperature tendency, the solar radiation penetrating in ocean - XRTHS(:,:,JKM) = XRTHS(:,:,JKM) + XRHODJ(:,:,JKM)*ZIZOCE(JKM) - END DO - if ( TBUCONF%LBUDGET_th ) call Budget_store_end ( TBUDGETS(NBUDGET_TH), 'OCEAN', xrths(:, :, :) ) - DEALLOCATE (XSSOLA) - DEALLOCATE( ZIZOCE) - DEALLOCATE (ZPROSOL1) - DEALLOCATE (ZPROSOL2) -END IF! LOCEAN NO LCOUPLES -END IF!NO LCOUPLES -! -! -CALL SECOND_MNH2(ZTIME2) -! -PRAD = PRAD + ZTIME2 - ZTIME1 & - - XTIME_LES_BU_PROCESS - XTIME_BU_PROCESS -! -PTIME_BU = PTIME_BU + XTIME_LES_BU_PROCESS + XTIME_BU_PROCESS -! -! -!----------------------------------------------------------------------------- -! -!* 2. DEEP CONVECTION SCHEME -! ---------------------- -! -ZTIME1 = ZTIME2 -XTIME_BU_PROCESS = 0. -XTIME_LES_BU_PROCESS = 0. -! -CALL SECOND_MNH2(ZTIME1) -! -IF( CDCONV == 'KAFR' .OR. CSCONV == 'KAFR' ) THEN - - if ( TBUCONF%LBUDGET_th ) call Budget_store_init( TBUDGETS(NBUDGET_TH), 'DCONV', xrths(:, :, :) ) - if ( TBUCONF%LBUDGET_rv ) call Budget_store_init( TBUDGETS(NBUDGET_RV), 'DCONV', xrrs (:, :, :, 1) ) - if ( TBUCONF%LBUDGET_rc ) call Budget_store_init( TBUDGETS(NBUDGET_RC), 'DCONV', xrrs (:, :, :, 2) ) - if ( TBUCONF%LBUDGET_ri ) call Budget_store_init( TBUDGETS(NBUDGET_RI), 'DCONV', xrrs (:, :, :, 4) ) - if ( TBUCONF%LBUDGET_sv .and. lchtrans ) then - do jsv = 1, size( xrsvs, 4 ) - call Budget_store_init( TBUDGETS(NBUDGET_SV1 - 1 + jsv), 'DCONV', xrsvs (:, :, :, jsv) ) - end do - end if -! -! test to see if the deep convection scheme should be called -! - GDCONV = .FALSE. -! - CALL DATETIME_DISTANCE(TDTDCONV,TDTCUR,ZTEMP_DIST) - IF( MOD(NINT(ZTEMP_DIST/XTSTEP),NINT(XDTCONV/XTSTEP))==0 ) THEN - TDTDCONV = TDTCUR - GDCONV = .TRUE. - END IF -! - IF( GDCONV ) THEN - IF (CDCONV == 'KAFR' .OR. CSCONV == 'KAFR' ) THEN - ALLOCATE( ZRC(IIU,IJU,IKU) ) - ALLOCATE( ZRI(IIU,IJU,IKU) ) - ALLOCATE( ZWT(IIU,IJU,IKU) ) - ALLOCATE( ZDXDY(IIU,IJU) ) - ! Compute grid area - ZDXDY(:,:) = SPREAD(XDXHAT(1:IIU),2,IJU) * SPREAD(XDYHAT(1:IJU),1,IIU) - ! - IF( LUSERC .AND. LUSERI ) THEN - ZRC(:,:,:) = XRT(:,:,:,2) - ZRI(:,:,:) = XRT(:,:,:,4) - ELSE IF( LUSERC .AND. (.NOT. LUSERI) ) THEN - ZRC(:,:,:) = XRT(:,:,:,2) - ZRI(:,:,:) = 0.0 - ELSE - ZRC(:,:,:) = 0.0 - ZRI(:,:,:) = 0.0 - END IF - WRITE(UNIT=ILUOUT,FMT='(" CONVECTION called for KTCOUNT=",I6)') & - KTCOUNT - IF ( LFORCING .AND. L1D ) THEN - ZWT(:,:,:) = XWTFRC(:,:,:) - ELSE - ZWT(:,:,:) = XWT(:,:,:) - ENDIF - IF (LDUST) CALL DUST_FILTER(XSVT(:,:,:,NSV_DSTBEG:NSV_DSTEND), XRHODREF(:,:,:)) - IF (LSALT) CALL SALT_FILTER(XSVT(:,:,:,NSV_SLTBEG:NSV_SLTEND), XRHODREF(:,:,:)) - IF (LCH_CONV_LINOX) THEN - CALL CONVECTION( XDTCONV, CDCONV, CSCONV, LREFRESH_ALL, LDOWN, NICE, & - LSETTADJ, XTADJD, XTADJS, LDIAGCONV, NENSM, & - XPABST, XZZ, ZDXDY, & - XTHT, XRT(:,:,:,1), ZRC, ZRI, XUT, XVT, & - ZWT,XTKET(:,:,IKB), & - NCOUNTCONV, XDTHCONV, XDRVCONV, XDRCCONV, XDRICONV, & - XPRCONV, XPRSCONV, & - XUMFCONV,XDMFCONV,XMFCONV,XPRLFLXCONV,XPRSFLXCONV, & - XCAPE, NCLTOPCONV, NCLBASCONV, & - LCHTRANS, XSVT, XDSVCONV, & - LUSECHEM, LCH_CONV_SCAV, LCH_CONV_LINOX, & - LDUST, LSALT, & - XRHODREF, XIC_RATE, XCG_RATE ) - ELSE - CALL CONVECTION( XDTCONV, CDCONV, CSCONV, LREFRESH_ALL, LDOWN, NICE, & - LSETTADJ, XTADJD, XTADJS, LDIAGCONV, NENSM, & - XPABST, XZZ, ZDXDY, & - XTHT, XRT(:,:,:,1), ZRC, ZRI, XUT, XVT, & - ZWT,XTKET(:,:,IKB), & - NCOUNTCONV, XDTHCONV, XDRVCONV, XDRCCONV, XDRICONV, & - XPRCONV, XPRSCONV, & - XUMFCONV,XDMFCONV,XMFCONV,XPRLFLXCONV,XPRSFLXCONV, & - XCAPE, NCLTOPCONV, NCLBASCONV, & - LCHTRANS, XSVT, XDSVCONV, & - LUSECHEM, LCH_CONV_SCAV, LCH_CONV_LINOX, & - LDUST, LSALT, & - XRHODREF ) - END IF -! - DEALLOCATE( ZRC ) - DEALLOCATE( ZRI ) - DEALLOCATE( ZWT ) - DEALLOCATE( ZDXDY ) - END IF - END IF -! -! Deep convection tendency integration -! - XRTHS(:,:,:) = XRTHS(:,:,:) + XRHODJ(:,:,:) * XDTHCONV(:,:,:) - XRRS(:,:,:,1) = XRRS(:,:,:,1) + XRHODJ(:,:,:) * XDRVCONV(:,:,:) -! -! -! Aerosols size distribution -! Compute Rg and sigma before tracers convection tendency (for orilam, dust and sea -! salt) -! - - IF ( LCHTRANS ) THEN ! update tracers for chemical transport - IF (LORILAM) ZRSVS(:,:,:,:) = XRSVS(:,:,:,:) ! - IF ((LDUST)) THEN ! dust convective balance - ALLOCATE(ZSIGDST(IIU,IJU,IKU,NMODE_DST)) - ALLOCATE(ZRGDST(IIU,IJU,IKU,NMODE_DST)) - ALLOCATE(ZNDST(IIU,IJU,IKU,NMODE_DST)) - ALLOCATE(ZSVDST(IIU,IJU,IKU,NSV_DST)) - ! - DO JSV=1,NMODE_DST - IMODEIDX = JPDUSTORDER(JSV) - IF (CRGUNITD=="MASS") THEN - ZINIRADIUS(JSV) = XINIRADIUS(IMODEIDX) * EXP(-3.*(LOG(XINISIG(IMODEIDX)))**2) - ELSE - ZINIRADIUS(JSV) = XINIRADIUS(IMODEIDX) - END IF - ZSIGDST(:,:,:,JSV) = XINISIG(IMODEIDX) - ZRGDST(:,:,:,JSV) = ZINIRADIUS(JSV) - ZNDST(:,:,:,JSV) = XN0MIN(IMODEIDX) - ENDDO - ! - DO JSV=NSV_DSTBEG,NSV_DSTEND - ZSVDST(:,:,:,JSV-NSV_DSTBEG+1) = XRSVS(:,:,:,JSV) * XTSTEP / XRHODJ(:,:,:) - ENDDO - CALL PPP2DUST(ZSVDST(IIB:IIE,IJB:IJE,IKB:IKE,:), XRHODREF(IIB:IIE,IJB:IJE,IKB:IKE),& - PSIG3D=ZSIGDST(IIB:IIE,IJB:IJE,IKB:IKE,:), PRG3D=ZRGDST(IIB:IIE,IJB:IJE,IKB:IKE,:), & - PN3D=ZNDST(IIB:IIE,IJB:IJE,IKB:IKE,:)) - END IF - ! - IF ((LSALT)) THEN ! sea salt convective balance - ALLOCATE(ZSIGSLT(IIU,IJU,IKU,NMODE_SLT)) - ALLOCATE(ZRGSLT(IIU,IJU,IKU,NMODE_SLT)) - ALLOCATE(ZNSLT(IIU,IJU,IKU,NMODE_SLT)) - ALLOCATE(ZSVSLT(IIU,IJU,IKU,NSV_SLT)) - ! - DO JSV=1,NMODE_SLT - IMODEIDX = JPSALTORDER(JSV) - IF (CRGUNITS=="MASS") THEN - ZINIRADIUS_SLT(JSV) = XINIRADIUS_SLT(IMODEIDX) * & - EXP(-3.*(LOG(XINISIG_SLT(IMODEIDX)))**2) - ELSE - ZINIRADIUS_SLT(JSV) = XINIRADIUS_SLT(IMODEIDX) - END IF - ZSIGSLT(:,:,:,JSV) = XINISIG_SLT(IMODEIDX) - ZRGSLT(:,:,:,JSV) = ZINIRADIUS_SLT(JSV) - ZNSLT(:,:,:,JSV) = XN0MIN_SLT(IMODEIDX) - ENDDO - ! - DO JSV=NSV_SLTBEG,NSV_SLTEND - ZSVSLT(:,:,:,JSV-NSV_SLTBEG+1) = XRSVS(:,:,:,JSV) * XTSTEP / XRHODJ(:,:,:) - ENDDO - CALL PPP2SALT(ZSVSLT(IIB:IIE,IJB:IJE,IKB:IKE,:), XRHODREF(IIB:IIE,IJB:IJE,IKB:IKE),& - PSIG3D=ZSIGSLT(IIB:IIE,IJB:IJE,IKB:IKE,:), PRG3D=ZRGSLT(IIB:IIE,IJB:IJE,IKB:IKE,:), & - PN3D=ZNSLT(IIB:IIE,IJB:IJE,IKB:IKE,:)) - END IF - ! -! -! Compute convective tendency for all tracers -! - IF (LCHTRANS) THEN - DO JSV = 1, SIZE(XRSVS,4) - XRSVS(:,:,:,JSV) = XRSVS(:,:,:,JSV) + XRHODJ(:,:,:) * XDSVCONV(:,:,:,JSV) - END DO - IF (LORILAM) THEN - DO JSV = NSV_AERBEG,NSV_AEREND - PWETDEPAER(:,:,:,JSV-NSV_AERBEG+1) = XDSVCONV(:,:,:,JSV) * XRHODJ(:,:,:) - XRSVS(:,:,:,JSV) = ZRSVS(:,:,:,JSV) - END DO - END IF - END IF -! - IF ((LDUST).AND.(LCHTRANS)) THEN ! dust convective balance - IF (CPROGRAM == "MESONH") THEN - DO JSV=NSV_DSTBEG,NSV_DSTEND - ZSVDST(:,:,:,JSV-NSV_DSTBEG+1) = XRSVS(:,:,:,JSV) * XTSTEP / XRHODJ(:,:,:) - ENDDO - ELSE - DO JSV=NSV_DSTBEG,NSV_DSTEND - ZSVDST(:,:,:,JSV-NSV_DSTBEG+1) = XSVT(:,:,:,JSV) - ENDDO - ENDIF - CALL DUST2PPP(ZSVDST(IIB:IIE,IJB:IJE,IKB:IKE,:), & - XRHODREF(IIB:IIE,IJB:IJE,IKB:IKE), ZSIGDST(IIB:IIE,IJB:IJE,IKB:IKE,:),& - ZRGDST(IIB:IIE,IJB:IJE,IKB:IKE,:)) - DO JSV=NSV_DSTBEG,NSV_DSTEND - XRSVS(:,:,:,JSV) = ZSVDST(:,:,:,JSV-NSV_DSTBEG+1) * XRHODJ(:,:,:) / XTSTEP - ENDDO - ! - DEALLOCATE(ZSVDST) - DEALLOCATE(ZNDST) - DEALLOCATE(ZRGDST) - DEALLOCATE(ZSIGDST) - END IF - ! - IF ((LSALT).AND.(LCHTRANS)) THEN ! sea salt convective balance - IF (CPROGRAM == "MESONH") THEN - DO JSV=NSV_SLTBEG,NSV_SLTEND - ZSVSLT(:,:,:,JSV-NSV_SLTBEG+1) = XRSVS(:,:,:,JSV) * XTSTEP / XRHODJ(:,:,:) - ENDDO - ELSE - DO JSV=NSV_SLTBEG,NSV_SLTEND - ZSVSLT(:,:,:,JSV-NSV_SLTBEG+1) = XSVT(:,:,:,JSV) - ENDDO - END IF - CALL SALT2PPP(ZSVSLT(IIB:IIE,IJB:IJE,IKB:IKE,:), & - XRHODREF(IIB:IIE,IJB:IJE,IKB:IKE), ZSIGSLT(IIB:IIE,IJB:IJE,IKB:IKE,:),& - ZRGSLT(IIB:IIE,IJB:IJE,IKB:IKE,:)) - DO JSV=NSV_SLTBEG,NSV_SLTEND - XRSVS(:,:,:,JSV) = ZSVSLT(:,:,:,JSV-NSV_SLTBEG+1) * XRHODJ(:,:,:) / XTSTEP - ENDDO - ! - DEALLOCATE(ZSVSLT) - DEALLOCATE(ZNSLT) - DEALLOCATE(ZRGSLT) - DEALLOCATE(ZSIGSLT) - END IF - ! -END IF -! - IF( LUSERC .AND. LUSERI ) THEN - XRRS(:,:,:,2) = XRRS(:,:,:,2) + XRHODJ(:,:,:) * XDRCCONV(:,:,:) - XRRS(:,:,:,4) = XRRS(:,:,:,4) + XRHODJ(:,:,:) * XDRICONV(:,:,:) -! - ELSE IF ( LUSERC .AND. (.NOT. LUSERI) ) THEN -! -! If only cloud water but no cloud ice is used, the convective tendency -! for cloud ice is added to the tendency for cloud water -! - XRRS(:,:,:,2) = XRRS(:,:,:,2) + XRHODJ(:,:,:) * (XDRCCONV(:,:,:) + & - XDRICONV(:,:,:) ) -! and cloud ice is melted -! - XRTHS(:,:,:) = XRTHS(:,:,:) - XRHODJ(:,:,:) * & - ( XP00/XPABST(:,:,:) )**(XRD/XCPD) * CST%XLMTT / XCPD * XDRICONV(:,:,:) -! - ELSE IF ( (.NOT. LUSERC) .AND. (.NOT. LUSERI) ) THEN -! -! If no cloud water and no cloud ice are used the convective tendencies for these -! variables are added to the water vapor tendency -! - XRRS(:,:,:,1) = XRRS(:,:,:,1) + XRHODJ(:,:,:) * (XDRCCONV(:,:,:) + & - XDRICONV(:,:,:) ) -! and all cloud condensate is evaporated -! - XRTHS(:,:,:) = XRTHS(:,:,:) - XRHODJ(:,:,:) / XCPD * ( & - CST%XLVTT * XDRCCONV(:,:,:) + CST%XLSTT * XDRICONV(:,:,:) ) *& - ( XP00 / XPABST(:,:,:) ) ** ( XRD / XCPD ) - END IF - - if ( TBUCONF%LBUDGET_th ) call Budget_store_end( TBUDGETS(NBUDGET_TH), 'DCONV', xrths(:, :, :) ) - if ( TBUCONF%LBUDGET_rv ) call Budget_store_end( TBUDGETS(NBUDGET_RV), 'DCONV', xrrs (:, :, :, 1) ) - if ( TBUCONF%LBUDGET_rc ) call Budget_store_end( TBUDGETS(NBUDGET_RC), 'DCONV', xrrs (:, :, :, 2) ) - if ( TBUCONF%LBUDGET_ri ) call Budget_store_end( TBUDGETS(NBUDGET_RI), 'DCONV', xrrs (:, :, :, 4) ) - if ( TBUCONF%LBUDGET_sv .and. lchtrans ) then - do jsv = 1, size( xrsvs, 4 ) - call Budget_store_end( TBUDGETS(NBUDGET_SV1 - 1 + jsv), 'DCONV', xrsvs (:, :, :, jsv) ) - end do - end if -END IF -! -CALL SECOND_MNH2(ZTIME2) -! -PKAFR = PKAFR + ZTIME2 - ZTIME1 & - - XTIME_LES_BU_PROCESS - XTIME_BU_PROCESS -! -PTIME_BU = PTIME_BU + XTIME_LES_BU_PROCESS + XTIME_BU_PROCESS -! -!----------------------------------------------------------------------------- -! -!* 3. TURBULENT SURFACE FLUXES -! ------------------------ -! -ZTIME1 = ZTIME2 -! -IF (CSURF=='EXTE') THEN - CALL GOTO_SURFEX(IMI) -! - IF( LTRANS ) THEN - XUT(:,:,1+JPVEXT) = XUT(:,:,1+JPVEXT) + XUTRANS - XVT(:,:,1+JPVEXT) = XVT(:,:,1+JPVEXT) + XVTRANS - END IF - ! - ALLOCATE(ZDIR_ALB(IIU,IJU,NSWB_MNH)) - ALLOCATE(ZSCA_ALB(IIU,IJU,NSWB_MNH)) - ALLOCATE(ZEMIS (IIU,IJU,NLWB_MNH)) - ALLOCATE(ZTSRAD (IIU,IJU)) - ! - IKIDM=0 - DO JKID = IMI+1,NMODEL ! min value of the possible kids - IF (IMI == NDAD(JKID) .AND. XWAY(JKID) == 2. .AND. & - CPROGRAM=='MESONH' .AND. & - (CCONF == 'RESTA' .OR. (CCONF == 'START' .AND. KTCOUNT /= 1))) THEN - ! where kids exist, use the two-way output fields (i.e. OMASKkids true) - ! rather than the farther calculations in radiation and convection schemes -! BUG if number of the son does not follow the number of the dad -! IKIDM = JKID-IMI - IKIDM = IKIDM + 1 - IF (LUSERC .AND. ( & - (LSEDIC .AND. CCLOUD(1:3) == 'ICE') .OR. & - (LSEDC .AND. (CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO')) .OR. & - (MSEDC .AND. CCLOUD=='LIMA') & - )) THEN - WHERE (OMASKkids(:,:) ) - XINPRC(:,:) = ZSAVE_INPRC(:,:,IKIDM) - ENDWHERE - END IF - IF (LUSERR) THEN - WHERE (OMASKkids(:,:) ) - XINPRR(:,:) = ZSAVE_INPRR(:,:,IKIDM) - ENDWHERE - END IF - IF (LUSERS) THEN - WHERE (OMASKkids(:,:) ) - XINPRS(:,:) = ZSAVE_INPRS(:,:,IKIDM) - ENDWHERE - END IF - IF (LUSERG) THEN - WHERE (OMASKkids(:,:) ) - XINPRG(:,:) = ZSAVE_INPRG(:,:,IKIDM) - ENDWHERE - END IF - IF (LUSERH) THEN - WHERE (OMASKkids(:,:) ) - XINPRH(:,:) = ZSAVE_INPRH(:,:,IKIDM) - ENDWHERE - END IF - IF (CDCONV /= 'NONE') THEN - WHERE (OMASKkids(:,:) ) - XPRCONV(:,:) = ZSAVE_PRCONV(:,:,IKIDM) - XPRSCONV(:,:) = ZSAVE_PRSCONV(:,:,IKIDM) - ENDWHERE - END IF - IF (CRAD /= 'NONE') THEN - DO JSWB=1,NSWB_MNH - WHERE (OMASKkids(:,:) ) - XDIRFLASWD(:,:,JSWB) = ZSAVE_DIRFLASWD(:,:,JSWB,IKIDM) - XSCAFLASWD(:,:,JSWB) = ZSAVE_SCAFLASWD(:,:,JSWB,IKIDM) - XDIRSRFSWD(:,:,JSWB) = ZSAVE_DIRSRFSWD(:,:,JSWB,IKIDM) - ENDWHERE - ENDDO - END IF - ENDIF - END DO - ! - IF (IMODSON /= 0 ) THEN - DEALLOCATE( ZSAVE_INPRR,ZSAVE_INPRS,ZSAVE_INPRG,ZSAVE_INPRH) - DEALLOCATE( ZSAVE_INPRC,ZSAVE_PRCONV,ZSAVE_PRSCONV) - DEALLOCATE( ZSAVE_DIRFLASWD,ZSAVE_SCAFLASWD,ZSAVE_DIRSRFSWD) - END IF - CALL GROUND_PARAM_n(YLDIMPHYEX,ZSFTH, ZSFRV, ZSFSV, ZSFCO2, ZSFU, ZSFV, & - ZDIR_ALB, ZSCA_ALB, ZEMIS, ZTSRAD, KTCOUNT, TPFILE ) - ! - IF (LIBM) THEN - WHERE(XIBM_LS(:,:,IKB,1).GT.-XIBM_EPSI) - ZSFTH(:,:)=0. - ZSFRV(:,:)=0. - ZSFU (:,:)=0. - ZSFV (:,:)=0. - ENDWHERE - IF (NSV>0) THEN - DO JSV = 1 , NSV - WHERE(XIBM_LS(:,:,IKB,1).GT.-XIBM_EPSI) ZSFSV(:,:,JSV)=0. - ENDDO - ENDIF - ENDIF - ! - IF (SIZE(XEMIS)>0) THEN - XDIR_ALB = ZDIR_ALB - XSCA_ALB = ZSCA_ALB - XEMIS = ZEMIS - XTSRAD = ZTSRAD - END IF - ! - DEALLOCATE(ZDIR_ALB) - DEALLOCATE(ZSCA_ALB) - DEALLOCATE(ZEMIS ) - DEALLOCATE(ZTSRAD ) - ! - ! - IF( LTRANS ) THEN - XUT(:,:,1+JPVEXT) = XUT(:,:,1+JPVEXT) - XUTRANS - XVT(:,:,1+JPVEXT) = XVT(:,:,1+JPVEXT) - XVTRANS - END IF -! -ELSE ! case no SURFEX (CSURF logical) - ZSFSV = 0. - ZSFCO2 = 0. - 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) -! -PGROUND = PGROUND + ZTIME2 - ZTIME1 -! -!----------------------------------------------------------------------------- -! -!* 3.1 EDDY FLUXES PARAMETRIZATION -! ------------------ -! -IF (IMI==1) THEN ! On calcule les flus turb. comme preconise par PP - - ! Heat eddy fluxes - IF ( LTH_FLX ) CALL EDDY_FLUX_n(IMI,KTCOUNT,XVT,XTHT,XRHODJ,XRTHS,XVTH_FLUX_M,XWTH_FLUX_M) - ! - ! Momentum eddy fluxes - IF ( LUV_FLX ) CALL EDDYUV_FLUX_n(IMI,KTCOUNT,XVT,XTHT,XRHODJ,XRHODREF,XPABSM,XRVS,XVU_FLUX_M) - -ELSE - ! TEST pour maille infèrieure à 20km ? - ! car pb d'instabilités ? - ! Pour le modèle fils, on spawne les flux du modèle père - ! Heat eddy fluxes - IF ( LTH_FLX ) CALL EDDY_FLUX_ONE_WAY_n (IMI,KTCOUNT,NDXRATIO_ALL(IMI),NDYRATIO_ALL(IMI),CLBCX,CLBCY) - ! - ! Momentum eddy fluxes - IF ( LUV_FLX ) CALL EDDYUV_FLUX_ONE_WAY_n (IMI,KTCOUNT,NDXRATIO_ALL(IMI),NDYRATIO_ALL(IMI),CLBCX,CLBCY) - ! -END IF -!----------------------------------------------------------------------------- -! -!* 4. PASSIVE POLLUTANTS -! ------------------ -! -ZTIME1 = ZTIME2 -! -IF (LPASPOL) CALL PASPOL(XTSTEP, ZSFSV, ILUOUT, NVERB, TPFILE) -! -! -!* 4b. PASSIVE POLLUTANTS FOR MASS-FLUX SCHEME DIAGNOSTICS -! --------------------------------------------------- -! -IF (LCONDSAMP) CALL CONDSAMP(XTSTEP, ZSFSV, ILUOUT, NVERB) -! -CALL SECOND_MNH2(ZTIME2) -! -PTRACER = PTRACER + ZTIME2 - ZTIME1 -!----------------------------------------------------------------------------- -! -!* 5a. Drag force -! ---------- -! -ZTIME1 = ZTIME2 -XTIME_BU_PROCESS = 0. -XTIME_LES_BU_PROCESS = 0. -! -IF (LDRAGTREE) CALL DRAG_VEG( XTSTEP, XUT, XVT, XTKET, LDEPOTREE, XVDEPOTREE, & - CCLOUD, XPABST, XTHT, XRT, XSVT, XRHODJ, XZZ, & - XRUS, XRVS, XRTKES, XRRS, XRSVS ) -! -IF (LDRAGBLDG) CALL DRAG_BLD( XTSTEP, XUT, XVT, XTKET, XRHODJ, XZZ, XRUS, XRVS, XRTKES ) -! -CALL SECOND_MNH2(ZTIME2) -! -PDRAG = PDRAG + ZTIME2 - ZTIME1 & - - XTIME_LES_BU_PROCESS - XTIME_BU_PROCESS -! -PTIME_BU = PTIME_BU + XTIME_LES_BU_PROCESS + XTIME_BU_PROCESS -! -!* 5b. Drag force from wind turbines -! ----------------------- -! -ZTIME1 = ZTIME2 -XTIME_BU_PROCESS = 0. -XTIME_LES_BU_PROCESS = 0. -! -IF (LMAIN_EOL .AND. IMI == NMODEL_EOL) THEN - CALL EOL_MAIN(KTCOUNT,XTSTEP, & - XDXX,XDYY,XDZZ, & - XRHODJ, & - XUT,XVT,XWT, & - XRUS, XRVS, XRWS ) -END IF -! -CALL SECOND_MNH2(ZTIME2) -! -PEOL = PEOL + ZTIME2 - ZTIME1 & - - XTIME_LES_BU_PROCESS - XTIME_BU_PROCESS -! -PTIME_BU = PTIME_BU + XTIME_LES_BU_PROCESS + XTIME_BU_PROCESS -! -!* -!----------------------------------------------------------------------------- -! -!* 6. TURBULENCE SCHEME -! ----------------- -! -ZTIME1 = ZTIME2 -XTIME_BU_PROCESS = 0. -XTIME_LES_BU_PROCESS = 0. -! -ZSFTH(:,:) = ZSFTH(:,:) * XDIRCOSZW(:,:) -ZSFRV(:,:) = ZSFRV(:,:) * XDIRCOSZW(:,:) -DO JSV=1,NSV - ZSFSV(:,:,JSV) = ZSFSV(:,:,JSV) * XDIRCOSZW(:,:) -END DO -! -IF (LLES_CALL) CALL SWITCH_SBG_LES_n -! -! -IF ( CTURB == 'TKEL' ) THEN -! - -!* 6.1 complete surface flux fields on the border -! -!!$ IF(NHALO == 1) THEN - CALL ADD2DFIELD_ll( TZFIELDS_ll, ZSFTH, 'PHYS_PARAM_n::ZSFTH' ) - CALL ADD2DFIELD_ll( TZFIELDS_ll, ZSFRV, 'PHYS_PARAM_n::ZSFRV' ) - CALL ADD2DFIELD_ll( TZFIELDS_ll, ZSFU, 'PHYS_PARAM_n::ZSFU' ) - CALL ADD2DFIELD_ll( TZFIELDS_ll, ZSFV, 'PHYS_PARAM_n::ZSFV' ) - IF(NSV >0)THEN - DO JSV=1,NSV - write ( ynum, '( I6 ) ' ) jsv - CALL ADD2DFIELD_ll( TZFIELDS_ll, ZSFSV(:,:,JSV), 'PHYS_PARAM_n::ZSFSV:'//trim( adjustl( ynum ) ) ) - END DO - END IF - CALL ADD2DFIELD_ll( TZFIELDS_ll, ZSFCO2, 'PHYS_PARAM_n::ZSFCO2' ) - CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll) - CALL CLEANLIST_ll(TZFIELDS_ll) -!!$ END IF -! - CALL MPPDB_CHECK2D(ZSFU,"phys_param::ZSFU",PRECISION) - ! - IF ( CLBCX(1) /= "CYCL" .AND. LWEST_ll()) THEN - ZSFTH(IIB-1,:)=ZSFTH(IIB,:) - ZSFRV(IIB-1,:)=ZSFRV(IIB,:) - ZSFU(IIB-1,:)=ZSFU(IIB,:) - ZSFV(IIB-1,:)=ZSFV(IIB,:) - IF (NSV>0) THEN - ZSFSV(IIB-1,:,:)=ZSFSV(IIB,:,:) - WHERE ((ZSFSV(IIB-1,:,:).LT.0.).AND.(XSVT(IIB-1,:,IKB,:).EQ.0.)) - ZSFSV(IIB-1,:,:) = 0. - END WHERE - ENDIF - ZSFCO2(IIB-1,:)=ZSFCO2(IIB,:) - END IF - ! - IF ( CLBCX(2) /= "CYCL" .AND. LEAST_ll()) THEN - ZSFTH(IIE+1,:)=ZSFTH(IIE,:) - ZSFRV(IIE+1,:)=ZSFRV(IIE,:) - ZSFU(IIE+1,:)=ZSFU(IIE,:) - ZSFV(IIE+1,:)=ZSFV(IIE,:) - IF (NSV>0) THEN - ZSFSV(IIE+1,:,:)=ZSFSV(IIE,:,:) - WHERE ((ZSFSV(IIE+1,:,:).LT.0.).AND.(XSVT(IIE+1,:,IKB,:).EQ.0.)) - ZSFSV(IIE+1,:,:) = 0. - END WHERE - ENDIF - ZSFCO2(IIE+1,:)=ZSFCO2(IIE,:) - END IF - ! - IF ( CLBCY(1) /= "CYCL" .AND. LSOUTH_ll()) THEN - ZSFTH(:,IJB-1)=ZSFTH(:,IJB) - ZSFRV(:,IJB-1)=ZSFRV(:,IJB) - ZSFU(:,IJB-1)=ZSFU(:,IJB) - ZSFV(:,IJB-1)=ZSFV(:,IJB) - IF (NSV>0) THEN - ZSFSV(:,IJB-1,:)=ZSFSV(:,IJB,:) - WHERE ((ZSFSV(:,IJB-1,:).LT.0.).AND.(XSVT(:,IJB-1,IKB,:).EQ.0.)) - ZSFSV(:,IJB-1,:) = 0. - END WHERE - ENDIF - ZSFCO2(:,IJB-1)=ZSFCO2(:,IJB) - END IF - ! - IF ( CLBCY(2) /= "CYCL" .AND. LNORTH_ll()) THEN - ZSFTH(:,IJE+1)=ZSFTH(:,IJE) - ZSFRV(:,IJE+1)=ZSFRV(:,IJE) - ZSFU(:,IJE+1)=ZSFU(:,IJE) - ZSFV(:,IJE+1)=ZSFV(:,IJE) - IF (NSV>0) THEN - ZSFSV(:,IJE+1,:)=ZSFSV(:,IJE,:) - WHERE ((ZSFSV(:,IJE+1,:).LT.0.).AND.(XSVT(:,IJE+1,IKB,:).EQ.0.)) - ZSFSV(:,IJE+1,:) = 0. - END WHERE - ENDIF - ZSFCO2(:,IJE+1)=ZSFCO2(:,IJE) - END IF -! - IF( LTRANS ) THEN - XUT(:,:,:) = XUT(:,:,:) + XUTRANS - XVT(:,:,:) = XVT(:,:,:) + XVTRANS - END IF -! -! -IF(ALLOCATED(XTHW_FLUX)) THEN - DEALLOCATE(XTHW_FLUX) - ALLOCATE(XTHW_FLUX(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))) -ELSE - ALLOCATE(XTHW_FLUX(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))) -END IF - -IF(ALLOCATED(XRCW_FLUX)) THEN - DEALLOCATE(XRCW_FLUX) - ALLOCATE(XRCW_FLUX(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))) -ELSE - ALLOCATE(XRCW_FLUX(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))) -END IF -! -IF(ALLOCATED(XSVW_FLUX)) THEN - DEALLOCATE(XSVW_FLUX) - ALLOCATE(XSVW_FLUX(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),SIZE(XSVT,4))) -ELSE - ALLOCATE(XSVW_FLUX(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),SIZE(XSVT,4))) -END IF -! -GCOMPUTE_SRC=SIZE(XSIGS, 3)/=0 -! -ALLOCATE(ZTDIFF(IIU,IJU,IKU)) -ALLOCATE(ZTDISS(IIU,IJU,IKU)) -! -!! Compute Shape of sfc flux for Oceanic Deep Conv Case -! -IF (LOCEAN .AND. LDEEPOC) THEN - ALLOCATE(ZDIST(IIU,IJU)) - !* COMPUTES THE PHYSICAL SUBDOMAIN BOUNDS - ALLOCATE(ZXHAT_ll(NIMAX_ll+2*JPHEXT),ZYHAT_ll(NJMAX_ll+2*JPHEXT)) - !compute ZXHAT_ll = position in the (0:Lx) domain 1 (Lx=Size of domain1 ) - !compute XXHAT_ll = position in the (L0_subproc,Lx_subproc) domain for the current subproc - ! L0_subproc as referenced in the full domain 1 - CALL GATHERALL_FIELD_ll('XX',XXHAT,ZXHAT_ll,IRESP) - CALL GATHERALL_FIELD_ll('YY',XYHAT,ZYHAT_ll,IRESP) - CALL GET_DIM_EXT_ll('B',IIU,IJU) - DO JJ = IJB,IJE - DO JI = IIB,IIE - ZDIST(JI,JJ) = SQRT( & - (( (XXHAT(JI)+XXHAT(JI+1))*0.5 - XCENTX_OC ) / XRADX_OC)**2 + & - (( (XYHAT(JJ)+XYHAT(JJ+1))*0.5 - XCENTY_OC ) / XRADY_OC)**2 & - ) - END DO - END DO - DO JJ=IJB,IJE - DO JI=IIB,IIE - IF ( ZDIST(JI,JJ) > 1.) ZSFTH(JI,JJ)=0. - END DO - END DO -END IF !END DEEP OCEAN CONV CASE -! -LSTATNW = .FALSE. -LHARAT = .FALSE. -! -IF(LLEONARD) THEN - IGRADIENTS=6 - ALLOCATE(ZHGRAD(IIU,IJU,IKU,IGRADIENTS)) - ZHGRAD(:,:,:,1) = GX_W_UW(XWT(:,:,:), XDXX,XDZZ,XDZX,1,IKU,1) - ZHGRAD(:,:,:,2) = GY_W_VW(XWT(:,:,:), XDXX,XDZZ,XDZX,1,IKU,1) - ZHGRAD(:,:,:,3) = GX_M_M(XTHT(:,:,:), XDXX,XDZZ,XDZX,1,IKU,1) - ZHGRAD(:,:,:,4) = GY_M_M(XTHT(:,:,:), XDXX,XDZZ,XDZX,1,IKU,1) - ZHGRAD(:,:,:,5) = GX_M_M(XRT(:,:,:,1), XDXX,XDZZ,XDZX,1,IKU,1) - ZHGRAD(:,:,:,6) = GY_M_M(XRT(:,:,:,1), XDXX,XDZZ,XDZX,1,IKU,1) -END IF - CALL TURB( CST,CSTURB, TBUCONF, TURBN,YLDIMPHYEX,TLES, & - IMI, NRR, NRRL, NRRI, CLBCX, CLBCY, IGRADIENTS, NHALO, & - 1, NMODEL_CLOUD, & - NSV, NSV_LGBEG, NSV_LGEND,CPROGRAM, & - NSV_LIMA_NR, NSV_LIMA_NS, NSV_LIMA_NG, NSV_LIMA_NH, & - L2D, LNOMIXLG,LFLAT, & - LCOUPLES, LBLOWSNOW, LIBM, & - GCOMPUTE_SRC, XRSNOW, & - LOCEAN, LDEEPOC, LDIAG_IN_RUN, & - CTURBLEN_CLOUD, CCLOUD, & - XTSTEP, TPFILE, & - XDXX, XDYY, XDZZ, XDZX, XDZY, XZZ, & - XDIRCOSXW, XDIRCOSYW, XDIRCOSZW, XCOSSLOPE, XSINSLOPE, & - XRHODJ, XTHVREF, ZHGRAD, XZS, & - ZSFTH, ZSFRV, ZSFSV, ZSFU, ZSFV, & - XPABST, XUT, XVT, XWT, XTKET, XSVT, XSRCT, & - ZLENGTHM, ZLENGTHH, ZMFMOIST, & - XBL_DEPTH, XSBL_DEPTH, & - XCEI, XCEI_MIN, XCEI_MAX, XCOEF_AMPL_SAT, & - XTHT, XRT, & - XRUS, XRVS, XRWS, XRTHS, XRRS, XRSVS, XRTKES, XSIGS, XWTHVMF, & - XTHW_FLUX, XRCW_FLUX, XSVW_FLUX,XDYP, XTHP, ZTDIFF, ZTDISS, & - TBUDGETS, KBUDGETS=SIZE(TBUDGETS),PLEM=XLEM,PRTKEMS=XRTKEMS, & - PTR=XTR, PDISS=XDISS, PCURRENT_TKE_DISS=XCURRENT_TKE_DISS, & - PIBM_LS=XIBM_LS(:,:,:,1), PIBM_XMUT=XIBM_XMUT, & - PSSTFL=XSSTFL, PSSTFL_C=XSSTFL_C, PSSRFL_C=XSSRFL_C, & - PSSUFL_C=XSSUFL_C, PSSVFL_C=XSSVFL_C, PSSUFL=XSSUFL, PSSVFL=XSSVFL ) -! -DEALLOCATE(ZTDIFF) -DEALLOCATE(ZTDISS) -IF(LLEONARD) DEALLOCATE(ZHGRAD) -! -IF (LRMC01) THEN - CALL ADD2DFIELD_ll( TZFIELDS_ll, XSBL_DEPTH, 'PHYS_PARAM_n::XSBL_DEPTH' ) - CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll) - CALL CLEANLIST_ll(TZFIELDS_ll) - IF ( CLBCX(1) /= "CYCL" .AND. LWEST_ll()) THEN - XSBL_DEPTH(IIB-1,:)=XSBL_DEPTH(IIB,:) - END IF - IF ( CLBCX(2) /= "CYCL" .AND. LEAST_ll()) THEN - XSBL_DEPTH(IIE+1,:)=XSBL_DEPTH(IIE,:) - END IF - IF ( CLBCY(1) /= "CYCL" .AND. LSOUTH_ll()) THEN - XSBL_DEPTH(:,IJB-1)=XSBL_DEPTH(:,IJB) - END IF - IF ( CLBCY(2) /= "CYCL" .AND. LNORTH_ll()) THEN - XSBL_DEPTH(:,IJE+1)=XSBL_DEPTH(:,IJE) - END IF -END IF -! -CALL SECOND_MNH2(ZTIME3) -! -!----------------------------------------------------------------------------- -! -!* 7. EDMF SCHEME -! ----------- -! -IF (CSCONV == 'EDKF') THEN - ALLOCATE(ZEXN (IIU,IJU,IKU)) - ALLOCATE(ZSIGMF (IIU,IJU,IKU)) - ZSIGMF(:,:,:)=0. - ZEXN(:,:,:)=(XPABST(:,:,:)/XP00)**(XRD/XCPD) - !$20131113 check3d on ZEXN - CALL MPPDB_CHECK3D(ZEXN,"physparan.7::ZEXN",PRECISION) - CALL ADD3DFIELD_ll( TZFIELDS_ll, ZEXN, 'PHYS_PARAM_n::ZEXN' ) - !$20131113 add update_halo_ll - CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll) - CALL CLEANLIST_ll(TZFIELDS_ll) - CALL MPPDB_CHECK3D(ZEXN,"physparam.7::ZEXN",PRECISION) - ! - CALL SHALLOW_MF_PACK(NRR,NRRL,NRRI, & - LMF_FLX,TPFILE,ZTIME_LES_MF, & - XIMPL_MF, XTSTEP, & - XDZZ, XZZ,XDXHAT(1),XDYHAT(1), & - XRHODJ, XRHODREF, XPABST, ZEXN, ZSFTH, ZSFRV, & - XTHT,XRT,XUT,XVT,XTKET,XSVT, & - XRTHS,XRRS,XRUS,XRVS,XRSVS, & - ZSIGMF,XRC_MF, XRI_MF, XCF_MF, XWTHVMF) -! -ELSE - XWTHVMF(:,:,:)=0. - XRC_MF(:,:,:)=0. - XRI_MF(:,:,:)=0. - XCF_MF(:,:,:)=0. -ENDIF -! -CALL SECOND_MNH2(ZTIME4) - - IF( LTRANS ) THEN - XUT(:,:,:) = XUT(:,:,:) - XUTRANS - XVT(:,:,:) = XVT(:,:,:) - XVTRANS - END IF - IF (CMF_CLOUD == 'STAT') THEN - XSIGS =SQRT( XSIGS**2 + ZSIGMF**2 ) - ENDIF - IF (CSCONV == 'EDKF') THEN - DEALLOCATE(ZSIGMF) - DEALLOCATE(ZEXN) - ENDIF -END IF -! -IF (LLES_CALL) CALL SWITCH_SBG_LES_n -! -CALL SECOND_MNH2(ZTIME2) -! -PTURB = PTURB + ZTIME2 - ZTIME1 - (XTIME_LES-ZTIME_LES_MF) - XTIME_LES_BU_PROCESS & - - XTIME_BU_PROCESS - (ZTIME4 - ZTIME3) -! -PMAFL = PMAFL + ZTIME4 - ZTIME3 - ZTIME_LES_MF -! -PTIME_BU = PTIME_BU + XTIME_LES_BU_PROCESS + XTIME_BU_PROCESS -! -! -!------------------------------------------------------------------------------- -! -!* deallocation of variables used in more than one parameterization -! -DEALLOCATE(ZSFU ) ! surface schemes + turbulence -DEALLOCATE(ZSFV ) -DEALLOCATE(ZSFTH ) -DEALLOCATE(ZSFRV ) -DEALLOCATE(ZSFSV ) -DEALLOCATE(ZSFCO2) -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE PHYS_PARAM_n - diff --git a/src/mesonh/ext/prep_ideal_case.f90 b/src/mesonh/ext/prep_ideal_case.f90 deleted file mode 100644 index 3a340fe6f..000000000 --- a/src/mesonh/ext/prep_ideal_case.f90 +++ /dev/null @@ -1,1950 +0,0 @@ -!MNH_LIC Copyright 1994-2021 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. -!----------------------------------------------------------------- -! ####################### - PROGRAM PREP_IDEAL_CASE -! ####################### -! -!!**** *PREP_IDEAL_CASE* - program to write an initial FM-file -!! -!! PURPOSE -!! ------- -! The purpose of this program is to prepare an initial meso-NH file -! (LFIFM and DESFM files) filled with some idealized fields. -! -! ---- The present version can provide two types of fields: -! -! 1) CIDEAL = 'CSTN' : 3D fields derived from a vertical profile with -! --------------- n levels of constant moist Brunt Vaisala frequency -! The vertical profile is read in EXPRE file. -! These fields can be used for model runs -! -! 2) CIDEAL = 'RSOU' : 3D fields derived from a radiosounding. -! --------------- -! The radiosounding is read in EXPRE file. -! The following kind of data is permitted : -! YKIND = 'STANDARD' : Zsol, Psol, Tsol, TDsol -! (Pressure, dd, ff) , -! (Pressure, T, Td) -! YKIND = 'PUVTHVMR' : zsol, Psol, Thvsol, Rsol -! (Pressure, U, V) , -! (Pressure, THv, R) -! YKIND = 'PUVTHVHU' : zsol, Psol, Thvsol, Husol -! (Pressure, U, V) , -! (Pressure, THv, Hu) -! YKIND = 'ZUVTHVHU' : zsol, Psol, Thvsol, Husol -! (height, U, V) , -! (height, THv, Hu) -! YKIND = 'ZUVTHVMR' : zsol, Psol, Thvsol, Rsol -! (height, U, V) , -! (height, THv, R) -! YKIND = 'PUVTHDMR' : zsol, Psol, Thdsol, Rsol -! (Pressure, U, V) , -! (Pressure, THd, R) -! YKIND = 'PUVTHDHU' : zsol, Psol, Thdsol, Husol -! (Pressure, U, V) , -! (Pressure, THd, Hu) -! YKIND = 'ZUVTHDMR' : zsol, Psol, Thdsol, Rsol -! (height, U, V) , -! (height, THd, R) -! YKIND = 'ZUVTHLMR' : zsol, Psol, Thdsol, Rsol -! (height, U, V) , -! (height, THl, Rt) -! -! These fields can be used for model runs -! -! Cases (1) and (2) can be balanced -! (geostrophic, hydrostatic and anelastic balances) if desired. -! -! ---- The orography can be flat (YZS='FLAT'), but also -! sine-shaped (YZS='SINE') or bell-shaped (YZS='BELL') -! -! ---- The U(z) profile given in the RSOU and CSTN cases can -! be multiplied (CUFUN="Y*Z") by a function of y (function FUNUY) -! The V(z) profile given in the RSOU and CSTN cases can -! be multiplied (CVFUN="X*Z") by a function of x (function FUNVX). -! If it is not the case, i.e. U(y,z)=U(z) then CUFUN="ZZZ" and -! CVFUN="ZZZ" for V(y,z)=V(z). Instead of these separable forms, -! non-separables functions FUNUYZ (CUFUN="Y,Z") and FUNVXZ (CVFUN="X,Z") -! can be used to specify the wind components. -! -!!** METHOD -!! ------ -!! The directives and data to perform the preparation of the initial FM -!! file are stored in EXPRE file. This file is composed of two parts : -!! - a namelists-format part which is present in all cases -!! - a free-format part which contains data in cases -!! of discretised orography (CZS='DATA') -!! of radiosounding (CIDEAL='RSOU') or Nv=cste profile (CIDEAL='CSTN') -!! of forced version (LFORCING=.TRUE.) -!! -!! -!! The following PREP_IDEAL_CASE program : -!! -!! - initializes physical constants by calling INI_CST -!! -!! - sets default values for global variables which will be -!! written in DESFM file and for variables in EXPRE file (namelists part) -!! which will be written in LFIFM file. -!! -!! - reads the namelists part of EXPRE file which gives -!! informations about the preinitialization to perform, -!! -!! - allocates memory for arrays, -!! -!! - initializes fields depending on the -!! directives (CIDEAL in namelist NAM_CONF_PRE) : -!! -!! * grid variables : -!! The gridpoints are regularly spaced by XDELTAX, XDELTAY. -!! The grid is stretched along the z direction, the mesh varies -!! from XDZGRD near the ground to XDZTOP near the top and the -!! weigthing function is a TANH function characterized by its -!! center and width above and under this center -!! The orography is initialized following the kind of orography -!! (YZS in namelist NAM_CONF_PRE) and the degrees of freedom : -!! sine-shape ---> ZHMAX, IEXPX,IEXPY -!! bell-shape ---> ZHMAX, ZAX,ZAY,IIZS,IJZS -!! The horizontal grid variables are initialized following -!! the kind of geometry (LCARTESIAN in namelist NAM_CONF_PRE) -!! and the grid parameters XLAT0,XLON0,XBETA in both geometries -!! and XRPK,XLONORI,XLATORI in conformal projection. -!! In the case of initialization from a radiosounding, the -!! date and time is read in free-part of the EXPRE file. In other -!! cases year, month and day are set to NUNDEF and time to 0. -!! -!! * prognostic fields : -!! -!! U,V,W, Theta and r. are first determined. They are -!! multiplied by rhoj after the anelastic reference state -!! computation. -!! For the CSTN and RSOU cases, the determination of -!! Theta and rv is performed respectively by SET_RSOU -!! and by SET_CSTN which call the common routine SET_MASS. -!! These three routines have the following actions : -!! --- The input vertical profile is converted in -!! variables (U,V,thetav,r) and interpolated -!! on a mixed grid (with VERT_COORD) as in PREP_REAL_CASE -!! --- A variation of the u-wind component( x-model axis component) -!! is possible in y direction, a variation of the v-wind component -!! (y-model axis component) is possible in x direction. -!! --- Thetav could be computed with thermal wind balance -!! (LGEOSBAL=.TRUE. with call of SET_GEOSBAL) -!! --- The mass fields (theta and r ) and the wind components are -!! then interpolated on the model grid with orography as in -!! PREP_REAL_CASE with the option LSHIFT -!! --- An anelastic correction is applied in PRESSURE_IN_PREP in -!! the case of non-vanishing orography. -!! -!! * anelastic reference state variables : -!! -!! 1D reference state : -!! RSOU and CSTN cases : rhorefz and thvrefz are computed -!! by SET_REFZ (called by SET_MASS). -!! They are deduced from thetav and r on the model grid -!! without orography. -!! The 3D reference state is computed by SET_REF -!! -!! * The total mass of dry air is computed by TOTAL_DMASS -!! -!! - writes the DESFM file, -!! -!! - writes the LFIFM file . -!! -!! EXTERNAL -!! -------- -!! DEFAULT_DESFM : to set default values for variables which can be -!! contained in DESFM file -!! DEFAULT_EXPRE : to set default values for other global variables -!! which can be contained in namelist-part of EXPRE file -!! Module MODE_GRIDPROJ : contains conformal projection routines -!! SM_GRIDPROJ : to compute some grid variables, in -!! case of conformal projection. -!! Module MODE_GRIDCART : contains cartesian geometry routines -!! SM_GRIDCART : to compute some grid variables, in -!! case of cartesian geometry. -!! SET_RSOU : to initialize mass fields from a radiosounding -!! SET_CSTN : to initialize mass fields from a vertical profile of -!! n layers of Nv=cste -!! SET_REF : to compute rhoJ -!! RESSURE_IN_PREP : to apply an anelastic correction in the case of -!! non-vanishing orography -!! IO_File_open : to open a FM-file (DESFM + LFIFM) -!! WRITE_DESFM : to write the DESFM file -!! WRI_LFIFM : to write the LFIFM file -!! IO_File_close : to close a FM-file (DESFM + LFIFM) -!! -!! MXM,MYM,MZM : Shuman operators -!! WGUESS : to compute W with the continuity equation from -!! the U,V values -!! -!! -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! Module MODD_PARAMETERS : contains parameters -!! Module MODD_DIM1 : contains dimensions -!! Module MODD_CONF : contains configuration variables for -!! all models -!! Module MODD_CST : contains physical constants -!! Module MODD_GRID : contains grid variables for all models -!! Module MODD_GRID1 : contains grid variables -!! Module MODD_TIME : contains time variables for all models -!! Module MODD_TIME1 : contains time variables -!! Module MODD_REF : contains reference state variables for -!! all models -!! Module MODD_REF1 : contains reference state variables -!! Module MODD_LUNIT : contains variables which concern names -!! and logical unit numbers of files for all models -!! Module MODD_FIELD1 : contains prognostics variables -!! Module MODD_GR_FIELD1 : contains the surface prognostic variables -!! Module MODD_LSFIELD1 : contains Larger Scale fields -!! Module MODD_DYN1 : contains dynamic control variables for model 1 -!! Module MODD_LBC1 : contains lbc control variables for model 1 -!! -!! -!! Module MODN_CONF1 : contains configuration variables for model 1 -!! and the NAMELIST list -!! Module MODN_LUNIT1 : contains variables which concern names -!! and logical unit numbers of files and -!! the NAMELIST list -!! -!! -!! REFERENCE -!! --------- -!! Book2 of MESO-NH documentation (program PREP_IDEAL_CASE) -!! -!! AUTHOR -!! ------ -!! V. Ducrocq *Meteo France* -!! -!! MODIFICATIONS -!! ------------- -!! Original 05/05/94 -!! updated V. Ducrocq 27/06/94 -!! updated P.M. 27/07/94 -!! updated V. Ducrocq 23/08/94 -!! updated V. Ducrocq 01/09/94 -!! namelist changes J. Stein 26/10/94 -!! namelist changes J. Stein 04/11/94 -!! remove the second step of the geostrophic balance 14/11/94 (J.Stein) -!! add grid stretching in the z direction + Larger scale fields + -!! cleaning 6/12/94 (J.Stein) -!! periodize the orography and the grid sizes in the periodic case -!! 19/12/94 (J.Stein) -!! correct a bug in the Larger Scale Fields initialization -!! 19/12/94 (J.Stein) -!! add the vertical grid stretching 02/01/95 (J. Stein) -!! Total mass of dry air computation 02/01/95 (J.P.Lafore) -!! add the 1D switch 13/01/95 (J. Stein) -!! enforce a regular vertical grid if desired 18/01/95 (J. Stein) -!! add the tdtcur initialization 26/01/95 (J. Stein) -!! bug in the test of the type of RS localization 25/02/95 (J. Stein) -!! remove R from the historical variables 16/03/95 (J. Stein) -!! error on the grid stretching 30/06/95 (J. Stein) -!! add the soil fields 01/09/95 (S.Belair) -!! change the streching function and the wind guess -!! (J. Stein and V.Masson) 21/09/95 -!! reset to FALSE LUSERC,..,LUSERH 12/12/95 (J. Stein) -!! enforce the RS localization in 1D and 2D config. -!! + add the 'TSZ0' option for the soil variables 28/01/96 (J. Stein) -!! initialization of domain from center point 31/01/96 (V. Masson) -!! add the constant file reading 05/02/96 (J. Stein) -!! enter vertical model levels values 20/10/95 (T.Montmerle) -!! add LFORCING option 19/02/96 (K. Suhre) -!! modify structure of NAM_CONF_PRE 20/02/96 (J.-P. Pinty) -!! default of the domain center when use of pgd file 12/03/96 (V. Masson) -!! change the surface initialization 20/03/96 ( Stein, -!! Bougeault, Kastendeutsch ) -!! change the DEFAULT_DESFMN CALL 17/04/96 ( Lafore ) -!! set the STORAGE_TYPE to 'TT' (a single instant) 30/04/96 (Stein, -!! Jabouille) -!! new wguess to spread the divergence 15/05/96 (Stein) -!! set LTHINSHELL to TRUE + return to the old wguess 29/08/96 (Stein) -!! MY_NAME and DAD_NAME writing for nesting 30/07/96 (Lafore) -!! MY_NAME and DAD_NAME reading in pgd file 26/09/96 (Masson) -!! and reading of pgd grid in a new routine -!! XXHAT and XYHAT are set to 0. at origine point 02/10/96 (Masson) -!! add LTHINSHELL in namelist NAM_CONF_PRE 08/10/96 (Masson) -!! restores use of TS and T2 26/11/96 (Masson) -!! value XUNDEF for soil and vegetation fields on sea 27/11/96 (Masson) -!! use of HUG and HU2 in both ISBA and TSZ0 cases 04/12/96 (Masson) -!! add initialization of chemical variables 06/08/96 (K. Suhre) -!! add MANUAL option for the terrain elevation 12/12/96 (J.-P. Pinty) -!! set DATA instead of MANUAL for the terrain -!! elevation option -!! add new anelastic equations' systems 29/06/97 (Stein) -!! split mode_lfifm_pgd 29/07/97 (Masson) -!! add directional z0 and subgrid scale orography 31/07/97 (Masson) -!! separates surface treatment in PREP_IDEAL_SURF 15/03/99 (Masson) -!! new PGD fields allocations 15/03/99 (Masson) -!! iterative call to pressure solver 15/03/99 (Masson) -!! removes TSZ0 case 04/01/00 (Masson) -!! parallelization 18/06/00 (Pinty) -!! adaptation for patch approach 02/07/00 (Solmon/Masson) -!! bug in W LB field on Y direction 05/03/01 (Stein) -!! add module MODD_NSV for NSV variable 01/02/01 (D. Gazen) -!! allow namelists in different orders 15/10/01 (I. Mallet) -!! allow LUSERC and LUSERI in 1D configuration 05/06/02 (P. Jabouille) -!! add ZUVTHLMR case (move in set_rsou latter) 05/12/02 Jabouille/Masson -!! move LHORELAX_SV (after INI_NSV) 30/04/04 (Pinty) -!! Correction Parallel bug IBEG & IDEND evalution 13/11/08 J.Escobar -!! add the option LSHIFT for interpolation of 26/10/10 (G.Tanguy) -!! correction for XHAT & parallelizarion of ZSDATA 23/09/11 J.Escobar -!! the vertical profile (as in PREP_REAL_CASE) -!! add use MODI of SURFEX routines 10/10/111 J.Escobar -!! -!! For 2D modeling: -!! Initialization of ADVFRC profiles (SET_ADVFRC) 06/2010 (P.Peyrille) -!! when LDUMMY(2)=T in PRE_IDEA1.nam -!! USE MODDB_ADVFRC_n for grid-nesting 02*2012 (M. Tomasini) -!! LBOUSS in MODD_REF 07/2013 (C.Lac) -!! Correction for ZS in PGD file 04/2014 (G. TANGUY) -!! Bug : remove NC WRITE_HGRID 05/2014 (S. Bielli via J.Escobar ) -!! BUG if ZFRC and ZFRC_ADV or ZFRC_REL are used together 11/2014 (G. Delautier) -!! Bug : detected with cray compiler , -!! missing '&' in continuation string 3/12/2014 J.Escobar -!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 -!! 06/2016 (G.Delautier) phasage surfex 8 -!! P.Wautelet : 08/07/2016 : removed MNH_NCWRIT define -!! 01/2018 (G.Delautier) SURFEX 8.1 -! P. Wautelet: 05/2016-04/2018: new data structures and calls for I/O -! P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list -! P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables -! P. Wautelet 28/03/2019: use MNHTIME for time measurement variables -! P. Wautelet 28/03/2019: use TFILE instead of unit number for set_iluout_timing -! P. Wautelet 19/04/2019: removed unused dummy arguments and variables -! P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function -! P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine -! F. Auguste 02/2021: add IBM -! P. Wautelet 09/03/2021: move some chemistry initializations to ini_nsv -! Jean-Luc Redelsperger 03/2021: ocean LES case -! P. Wautelet 06/07/2021: use FINALIZE_MNH -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_PARAMETERS ! Declarative modules -USE MODD_ARGSLIST_ll, ONLY : LIST_ll -USE MODD_DIM_n -USE MODD_CONF -USE MODD_CST -USE MODD_GRID -USE MODD_GRID_n -USE MODD_IBM_LSF, ONLY: CIBM_TYPE, LIBM_LSF, NIBM_SMOOTH, XIBM_SMOOTH -USE MODD_IBM_PARAM_n, ONLY: XIBM_LS -USE MODD_METRICS_n -USE MODD_PGDDIM -USE MODD_PGDGRID -USE MODD_TIME -USE MODD_TIME_n -USE MODD_PARAM_ICE, ONLY: PARAM_ICE_ASSOCIATE -USE MODD_REF -USE MODD_REF_n -USE MODD_LUNIT -USE MODD_FIELD_n -USE MODD_DYN_n -USE MODD_LBC_n -USE MODD_LSFIELD_n -USE MODD_PARAM_n -USE MODD_CH_MNHC_n, ONLY: LUSECHEM, LUSECHAQ, LUSECHIC, LCH_PH, LCH_INIT_FIELD -USE MODD_CH_AEROSOL,ONLY: LORILAM, CORGANIC, LVARSIGI, LVARSIGJ, LINITPM, XINIRADIUSI, & - XINIRADIUSJ, XINISIGI, XINISIGJ, XN0IMIN, XN0JMIN, CRGUNIT -USE MODD_DUST, ONLY: LDUST, NMODE_DST, CRGUNITD, XINISIG, XINIRADIUS, XN0MIN -USE MODD_SALT, ONLY: LSALT, NMODE_SLT, CRGUNITS, XINISIG_SLT, XINIRADIUS_SLT, XN0MIN_SLT -USE MODD_VAR_ll, ONLY: NPROC -USE MODD_LUNIT, ONLY: TLUOUT0, TOUTDATAFILE -USE MODD_LUNIT_n -USE MODD_IO, ONLY: TFILE_DUMMY, TFILE_OUTPUTLISTING -USE MODD_CONF_n -USE MODD_NSV, ONLY: NSV -use modd_precision, only: LFIINT, MNHREAL_MPI, MNHTIME -! -USE MODN_BLANK_n -! -USE MODE_FINALIZE_MNH, only: FINALIZE_MNH -USE MODE_THERMO -USE MODE_POS -USE MODE_GRIDCART ! Executive modules -USE MODE_GRIDPROJ -USE MODE_GATHER_ll -USE MODE_IO, only: IO_Config_set, IO_Init, IO_Pack_set -USE MODE_IO_FIELD_READ, only: IO_Field_read -USE MODE_IO_FIELD_WRITE, only: IO_Field_write, IO_Header_write -USE MODE_IO_FILE, only: IO_File_close, IO_File_open -USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list -USE MODE_ll -USE MODE_MODELN_HANDLER -use mode_field, only: Alloc_field_scalars, Ini_field_list, Ini_field_scalars -USE MODE_MSG -! -USE MODI_DEFAULT_DESFM_n ! Interface modules -USE MODI_DEFAULT_EXPRE -USE MODI_IBM_INIT_LS -USE MODI_READ_HGRID -USE MODI_SHUMAN -USE MODI_SET_RSOU -USE MODI_SET_CSTN -USE MODI_SET_FRC -USE MODI_PRESSURE_IN_PREP -USE MODI_WRITE_DESFM_n -USE MODI_WRITE_LFIFM_n -USE MODI_METRICS -USE MODI_UPDATE_METRICS -USE MODI_SET_REF -USE MODI_SET_PERTURB -USE MODI_TOTAL_DMASS -USE MODI_CH_INIT_FIELD_n -USE MODI_INI_NSV -USE MODI_READ_PRE_IDEA_NAM_n -USE MODI_ZSMT_PIC -USE MODI_ZSMT_PGD -USE MODI_READ_VER_GRID -USE MODI_READ_ALL_NAMELISTS -USE MODI_PGD_GRID_SURF_ATM -USE MODI_SPLIT_GRID -USE MODI_PGD_SURF_ATM -USE MODI_ICE_ADJUST_BIS -USE MODI_WRITE_PGD_SURF_ATM_n -USE MODI_PREP_SURF_MNH -USE MODI_INIT_SALT -USE MODI_AER2LIMA -USE MODD_PARAM_LIMA -! -!JUAN -USE MODE_SPLITTINGZ_ll -USE MODD_SUB_MODEL_n -USE MODE_MNH_TIMING -USE MODN_CONFZ -!JUAN -! -USE MODI_VERSION -USE MODI_INIT_PGD_SURF_ATM -USE MODI_WRITE_SURF_ATM_N -USE MODD_MNH_SURFEX_n -! Modif ADVFRC -USE MODD_2D_FRC -USE MODD_ADVFRC_n ! Modif for grid-nesting -USE MODI_SETADVFRC -USE MODD_RELFRC_n ! Modif for grid-nesting -USE MODI_SET_RELFRC -! -USE MODI_INI_CST -USE MODI_INI_NEB -USE MODD_NEB, ONLY: NEB -USE MODI_WRITE_HGRID -USE MODD_MPIF -USE MODD_VAR_ll -USE MODD_IO, ONLY: TFILEDATA,TFILE_SURFEX -! -USE MODE_MPPDB -! -USE MODD_GET_n -! -USE MODN_CONFIO, ONLY : NAM_CONFIO -! -IMPLICIT NONE -! -!* 0.1 Declarations of global variables not declared in the modules -! -REAL, DIMENSION(:,:,:), ALLOCATABLE :: XJ ! Jacobian -REAL :: XLATCEN=XUNDEF, XLONCEN=XUNDEF ! latitude and longitude of the center of - ! the domain for initialization. This - ! point is vertical vorticity point - ! ------------------------ -REAL :: XDELTAX=0.5E4, XDELTAY=0.5E4 ! horizontal mesh lengths - ! used to determine XXHAT,XYHAT -! -INTEGER :: NLUPRE,NLUOUT ! Logical unit numbers for EXPRE file - ! and for output_listing file -INTEGER :: NRESP ! return code in FM routines -INTEGER :: NTYPE ! type of file (cpio or not) -INTEGER(KIND=LFIINT) :: NNPRAR ! number of articles predicted in the LFIFM file -LOGICAL :: GFOUND ! Return code when searching namelist -! -INTEGER :: JLOOP,JILOOP,JJLOOP ! Loop indexes -! -INTEGER :: NIB,NJB,NKB ! Begining useful area in x,y,z directions -INTEGER :: NIE,NJE ! Ending useful area in x,y directions -INTEGER :: NIU,NJU,NKU ! Upper bounds in x,y,z directions -CHARACTER(LEN=4) :: CIDEAL ='CSTN' ! kind of idealized fields - ! 'CSTN' : Nv=cste case - ! 'RSOU' : radiosounding case -CHARACTER(LEN=4) :: CZS ='FLAT' ! orography selector - ! 'FLAT' : zero orography - ! 'SINE' : sine-shaped orography - ! 'BELL' : bell-shaped orography -REAL :: XHMAX=XUNDEF ! Maximum height for orography -REAL :: NEXPX=3,NEXPY=1 ! Exponents for orography in case of CZS='SINE' -REAL :: XAX= 1.E4, XAY=1.E4 ! Widths for orography in case CZS='BELL' - ! along x and y -INTEGER :: NIZS = 5, NJZS = 5 ! Localization of the center in - ! case CZS ='BELL' -! -!* 0.1.1 Declarations of local variables for N=cste and -! radiosounding cases : -! -INTEGER :: NYEAR,NMONTH,NDAY ! year, month and day in EXPRE file -REAL :: XTIME ! time in EXPRE file -LOGICAL :: LPERTURB =.FALSE. ! Logical to add a perturbation to - ! a basic state -LOGICAL :: LGEOSBAL =.FALSE. ! Logical to satisfy the geostrophic - ! balance - ! .TRUE. for geostrophic balance - ! .FALSE. to ignore this balance -LOGICAL :: LSHIFT =.FALSE. ! flag to perform vertical shift or not. -CHARACTER(LEN=3) :: CFUNU ='ZZZ' ! CHARACTER STRING for variation of - ! U in y direction - ! 'ZZZ' : U = U(Z) - ! 'Y*Z' : U = F(Y) * U(Z) - ! 'Y,Z' : U = G(Y,Z) -CHARACTER(LEN=3) :: CFUNV ='ZZZ' ! CHARACTER STRING for variation of - ! V in x direction - ! 'ZZZ' : V = V(Z) - ! 'Y*Z' : V = F(X) * V(Z) - ! 'Y,Z' : V = G(X,Z) -CHARACTER(LEN=6) :: CTYPELOC='IJGRID' ! Type of informations used to give the - ! localization of vertical profile - ! 'IJGRID' for (i,j) point on index space - ! 'XYHATM' for (x,y) coordinates on - ! conformal or cartesian plane - ! 'LATLON' for (latitude,longitude) on - ! spherical earth -REAL :: XLATLOC= 45., XLONLOC=0. - ! Latitude and longitude of the vertical - ! profile localization (used in case - ! CTYPELOC='LATLON') -REAL :: XXHATLOC=2.E4, XYHATLOC=2.E4 - ! (x,y) of the vertical profile - ! localization (used in cases - ! CTYPELOC='LATLON' and 'XYHATM') -INTEGER, DIMENSION(1) :: NILOC=4, NJLOC=4 - ! (i,j) of the vertical profile - ! localization -! -! -REAL,DIMENSION(:,:,:),ALLOCATABLE :: XCORIOZ ! Coriolis parameter (this - ! is exceptionnaly a 3D array - ! for computing needs) -! -! -!* 0.1.2 Declarations of local variables used when a PhysioGraphic Data -! file is used : -! -INTEGER :: JSV ! loop index on scalar var. -CHARACTER(LEN=28) :: CPGD_FILE=' ' ! Physio-Graphic Data file name -LOGICAL :: LREAD_ZS = .TRUE., & ! switch to use orography - ! coming from the PGD file - LREAD_GROUND_PARAM = .TRUE. ! switch to use soil parameters - ! useful for the soil scheme - ! coming from the PGD file - -INTEGER :: NSLEVE =12 ! number of iteration for smooth orography -REAL :: XSMOOTH_ZS = XUNDEF ! optional uniform smooth orography for SLEVE coordinate -CHARACTER(LEN=28) :: YPGD_NAME, YPGD_DAD_NAME ! general information -CHARACTER(LEN=2) :: YPGD_TYPE -! -INTEGER :: IINFO_ll ! return code of // routines -TYPE(LIST_ll), POINTER :: TZ_FIELDS_ll ! list of metric coefficient fields -! -INTEGER :: IISIZEXF,IJSIZEXF,IISIZEXFU,IJSIZEXFU ! dimensions of the -INTEGER :: IISIZEX4,IJSIZEX4,IISIZEX2,IJSIZEX2 ! West-east LB arrays -INTEGER :: IISIZEYF,IJSIZEYF,IISIZEYFV,IJSIZEYFV ! dimensions of the -INTEGER :: IISIZEY4,IJSIZEY4,IISIZEY2,IJSIZEY2 ! North-south LB arrays -INTEGER :: IBEG,IEND,IXOR,IXDIM,IYOR,IYDIM,ILBX,ILBY -REAL, DIMENSION(:), ALLOCATABLE :: ZXHAT_ll, ZYHAT_ll -! -REAL, DIMENSION(:,:,:), ALLOCATABLE ::ZTHL,ZT,ZRT,ZFRAC_ICE,& - ZEXN,ZLVOCPEXN,ZLSOCPEXN,ZCPH, & - ZRSATW, ZRSATI -REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZBUF - ! variables for adjustement -REAL :: ZDIST -! -!JUAN TIMING -REAL(kind=MNHTIME), DIMENSION(2) :: ZTIME1, ZTIME2, ZEND, ZTOT -CHARACTER :: YMI -INTEGER :: IMI -!JUAN TIMING -! -REAL, DIMENSION(:), ALLOCATABLE :: ZZS_ll -INTEGER :: IJ -! -REAL :: ZZS_MAX, ZZS_MAX_ll -INTEGER :: IJPHEXT -! -TYPE(TFILEDATA),POINTER :: TZEXPREFILE => NULL() -! -! -!* 0.2 Namelist declarations -! -NAMELIST/NAM_CONF_PRE/ LTHINSHELL,LCARTESIAN, &! Declarations in MODD_CONF - LPACK, &! - NVERB,CIDEAL,CZS, &!+global variables initialized - LBOUSS,LOCEAN,LPERTURB, &! at their declarations - LFORCING,CEQNSYS, &! at their declarations - LSHIFT,L2D_ADV_FRC,L2D_REL_FRC, & - NHALO , JPHEXT -NAMELIST/NAM_GRID_PRE/ XLON0,XLAT0, & ! Declarations in MODD_GRID - XBETA,XRPK, & - XLONORI,XLATORI -NAMELIST/NAM_GRIDH_PRE/ XLATCEN,XLONCEN, & ! local variables initialized - XDELTAX,XDELTAY, & ! at their declarations - XHMAX,NEXPX,NEXPY, & - XAX,XAY,NIZS,NJZS -NAMELIST/NAM_VPROF_PRE/LGEOSBAL, CFUNU,CFUNV, &! global variables initialized - CTYPELOC,XLATLOC,XLONLOC, &! at their declarations - XXHATLOC,XYHATLOC,NILOC,NJLOC -NAMELIST/NAM_REAL_PGD/CPGD_FILE, & ! Physio-Graphic Data file - ! name - LREAD_ZS, & ! switch to use orography - ! coming from the PGD file - LREAD_GROUND_PARAM -NAMELIST/NAM_SLEVE/NSLEVE, XSMOOTH_ZS -! -!* 0.3 Auxillary Namelist declarations -! -NAMELIST/NAM_AERO_PRE/ LORILAM, LINITPM, XINIRADIUSI, XINIRADIUSJ, & - XINISIGI, XINISIGJ, XN0IMIN, XN0JMIN, CRGUNIT, & - LDUST, LSALT, CRGUNITD, CRGUNITS,& - NMODE_DST, XINISIG, XINIRADIUS, XN0MIN,& - XINISIG_SLT, XINIRADIUS_SLT, XN0MIN_SLT, & - NMODE_SLT -! -NAMELIST/NAM_IBM_LSF/ LIBM_LSF, CIBM_TYPE, NIBM_SMOOTH, XIBM_SMOOTH -! -!------------------------------------------------------------------------------- -! -!* 0. PROLOGUE -! -------- -CALL MPPDB_INIT() -! -CALL GOTO_MODEL(1) -! -CALL IO_Init() -NULLIFY(TZ_FIELDS_ll) -CALL VERSION -CPROGRAM='IDEAL ' -! -!JUAN TIMING - XT_START = 0.0_MNHTIME - XT_STORE = 0.0_MNHTIME -! - CALL SECOND_MNH2(ZEND) -! -!JUAN TIMING -! -!* 1. INITIALIZE PHYSICAL CONSTANTS : -! ------------------------------ -! -NVERB = 5 -CALL INI_CST -CALL INI_NEB -! -!------------------------------------------------------------------------------- -! -! -!* 2. SET DEFAULT VALUES : -! -------------------- -! -! -!* 2.1 For variables in DESFM file -! -CALL ALLOC_FIELD_SCALARS() -CALL PARAM_ICE_ASSOCIATE() -CALL DEFAULT_DESFM_n(1) -! -CSURF = "NONE" -! -! -!* 2.2 For other global variables in EXPRE file -! -CALL DEFAULT_EXPRE -!------------------------------------------------------------------------------- -! -!* 3. READ THE EXPRE FILE : -! -------------------- -! -!* 3.1 initialize logical unit numbers (EXPRE and output-listing files) -! and open these files : -! -! -CALL IO_File_add2list(TLUOUT0,'OUTPUT_LISTING1','OUTPUTLISTING','WRITE') -CALL IO_File_open(TLUOUT0) -NLUOUT = TLUOUT0%NLU -!Set output files for PRINT_MSG -TLUOUT => TLUOUT0 -TFILE_OUTPUTLISTING => TLUOUT0 -! -CALL IO_File_add2list(TZEXPREFILE,'PRE_IDEA1.nam','NML','READ') -CALL IO_File_open(TZEXPREFILE) -NLUPRE=TZEXPREFILE%NLU -! -!* 3.2 read in NLUPRE the namelist informations -! -WRITE(NLUOUT,FMT=*) 'attempt to read ',TRIM(TZEXPREFILE%CNAME),' file' -CALL POSNAM(NLUPRE,'NAM_REAL_PGD',GFOUND,NLUOUT) -IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_REAL_PGD) -! -! -CALL POSNAM(NLUPRE,'NAM_CONF_PRE',GFOUND,NLUOUT) -IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_CONF_PRE) -!JUANZ -CALL POSNAM(NLUPRE,'NAM_CONFZ',GFOUND,NLUOUT) -IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_CONFZ) -!JUANZ -CALL POSNAM(NLUPRE,'NAM_CONFIO',GFOUND,NLUOUT) -IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_CONFIO) -CALL IO_Config_set() -CALL POSNAM(NLUPRE,'NAM_GRID_PRE',GFOUND,NLUOUT) -IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_GRID_PRE) -CALL POSNAM(NLUPRE,'NAM_GRIDH_PRE',GFOUND,NLUOUT) -IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_GRIDH_PRE) -CALL POSNAM(NLUPRE,'NAM_VPROF_PRE',GFOUND,NLUOUT) -IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_VPROF_PRE) -CALL POSNAM(NLUPRE,'NAM_BLANKN',GFOUND,NLUOUT) -CALL INIT_NAM_BLANKn -IF (GFOUND) THEN - READ(UNIT=NLUPRE,NML=NAM_BLANKn) - CALL UPDATE_NAM_BLANKn -END IF -CALL READ_PRE_IDEA_NAM_n(NLUPRE,NLUOUT) -CALL POSNAM(NLUPRE,'NAM_AERO_PRE',GFOUND,NLUOUT) -IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_AERO_PRE) -CALL POSNAM(NLUPRE,'NAM_IBM_LSF' ,GFOUND,NLUOUT) -IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_IBM_LSF ) -! -CALL INI_FIELD_LIST(1) -! -CALL INI_FIELD_SCALARS() -! Sea salt -CALL INIT_SALT -! -IF( LEN_TRIM(CPGD_FILE) /= 0 ) THEN - ! open the PGD_FILE - CALL IO_File_add2list(TPGDFILE,TRIM(CPGD_FILE),'PGD','READ',KLFINPRAR=NNPRAR,KLFITYPE=2,KLFIVERB=NVERB) - CALL IO_File_open(TPGDFILE) - - ! read the grid in the PGD file - CALL IO_Field_read(TPGDFILE,'IMAX', NIMAX) - CALL IO_Field_read(TPGDFILE,'JMAX', NJMAX) - CALL IO_Field_read(TPGDFILE,'JPHEXT',IJPHEXT) - - IF ( CPGD_FILE /= CINIFILEPGD) THEN - WRITE(NLUOUT,FMT=*) ' WARNING : in PRE_IDEA1.nam, in NAM_LUNITn you& - & have CINIFILEPGD= ',CINIFILEPGD - WRITE(NLUOUT,FMT=*) ' whereas in NAM_REAL_PGD you have CPGD_FILE = '& - ,CPGD_FILE - WRITE(NLUOUT,FMT=*) ' ' - WRITE(NLUOUT,FMT=*) ' CINIFILEPGD HAS BEEN SET TO ',CPGD_FILE - CINIFILEPGD=CPGD_FILE - END IF - IF ( IJPHEXT .NE. JPHEXT ) THEN - WRITE(NLUOUT,FMT=*) ' PREP_IDEAL_CASE : JPHEXT in PRE_IDEA1.nam/NAM_CONF_PRE ( or default value )& - & JPHEXT=',JPHEXT - WRITE(NLUOUT,FMT=*) ' different from PGD files=', CINIFILEPGD,' value JPHEXT=',IJPHEXT - WRITE(NLUOUT,FMT=*) '-> JOB ABORTED' - CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_IDEAL_CASE','') - !WRITE(NLUOUT,FMT=*) ' JPHEXT HAS BEEN SET TO ', IJPHEXT - !IJPHEXT = JPHEXT - END IF -END IF -! -NIMAX_ll=NIMAX !! _ll variables are global variables -NJMAX_ll=NJMAX !! but the old names are kept in PRE_IDEA1.nam file -! -!* 3.3 check some parameters: -! -L1D=.FALSE. ; L2D=.FALSE. -! -IF ((NIMAX == 1).OR.(NJMAX == 1)) THEN - L2D=.TRUE. - NJMAX_ll=1 - NIMAX_ll=MAX(NIMAX,NJMAX) - WRITE(NLUOUT,FMT=*) ' NJMAX HAS BEEN SET TO 1 SINCE 2D INITIAL FILE IS REQUIRED & - & (L2D=TRUE) )' -END IF -! -IF ((NIMAX == 1).AND.(NJMAX == 1)) THEN - L1D=.TRUE. - NIMAX_ll = 1 - NJMAX_ll = 1 - WRITE(NLUOUT,FMT=*) ' 1D INITIAL FILE IS REQUIRED (L1D=TRUE) ' -END IF -! -IF(.NOT. L1D) THEN - LHORELAX_UVWTH=.TRUE. - LHORELAX_RV=.TRUE. -ENDIF -! -NRIMX= MIN(JPRIMMAX,NIMAX_ll/2) -! -IF (L2D) THEN - NRIMY=0 -ELSE - NRIMY= MIN(JPRIMMAX,NJMAX_ll/2) -END IF -! -IF (L1D) THEN - NRIMX=0 - NRIMY=0 -END IF -! -IF (L1D .AND. ( LPERTURB .OR. LGEOSBAL .OR. & - (.NOT. LCARTESIAN ) .OR. (.NOT. LTHINSHELL) ))THEN - LGEOSBAL = .FALSE. - LPERTURB = .FALSE. - LCARTESIAN = .TRUE. - LTHINSHELL = .TRUE. - WRITE(NLUOUT,FMT=*) ' LGEOSBAL AND LPERTURB HAVE BEEN SET TO FALSE & - & AND LCARTESIAN AND LTHINSHELL TO TRUE & - & SINCE 1D INITIAL FILE IS REQUIRED (L1D=TRUE)' -END IF -! -IF (LGEOSBAL .AND. LSHIFT ) THEN - LSHIFT=.FALSE. - WRITE(NLUOUT,FMT=*) ' LSHIFT HAS BEEN SET TO FALSE SINCE & - & LGEOSBAL=.TRUE. IS REQUIRED ' -END IF -! -!* 3.4 compute the number of moist variables : -! -IF (.NOT.LUSERV) THEN - LUSERV = .TRUE. - WRITE(NLUOUT,FMT=*) ' LUSERV HAS BEEN RESET TO TRUE, SINCE A MOIST VARIABLE & - & IS PRESENT IN EXPRE FILE (CIDEAL = RSOU OR CSTN)' -END IF -! -IF((LUSERI .OR. LUSERC).AND. (CIDEAL /= 'RSOU')) THEN - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_IDEAL_CASE','use of hydrometeors is only allowed in RSOU case') -ENDIF -IF (LUSERI) THEN - LUSERC =.TRUE. - LUSERR =.TRUE. - LUSERI =.TRUE. - LUSERS =.TRUE. - LUSERG =.TRUE. - LUSERH =.FALSE. - CCLOUD='ICE3' -ELSEIF(LUSERC) THEN - LUSERR =.FALSE. - LUSERI =.FALSE. - LUSERS =.FALSE. - LUSERG =.FALSE. - LUSERH =.FALSE. - CCLOUD='REVE' -ELSE - LUSERC =.FALSE. - LUSERR =.FALSE. - LUSERI =.FALSE. - LUSERS =.FALSE. - LUSERG =.FALSE. - LUSERH =.FALSE. - LHORELAX_RC=.FALSE. - LHORELAX_RR=.FALSE. - LHORELAX_RI=.FALSE. - LHORELAX_RS=.FALSE. - LHORELAX_RG=.FALSE. - LHORELAX_RH=.FALSE. - CCLOUD='NONE' -! -END IF -! -NRR=0 -IF (LUSERV) THEN - NRR=NRR+1 - IDX_RVT = NRR -END IF -IF (LUSERC) THEN - NRR=NRR+1 - IDX_RCT = NRR -END IF -IF (LUSERR) THEN - NRR=NRR+1 - IDX_RRT = NRR -END IF -IF (LUSERI) THEN - NRR=NRR+1 - IDX_RIT = NRR -END IF -IF (LUSERS) THEN - NRR=NRR+1 - IDX_RST = NRR -END IF -IF (LUSERG) THEN - NRR=NRR+1 - IDX_RGT = NRR -END IF -IF (LUSERH) THEN - NRR=NRR+1 - IDX_RHT = NRR -END IF -! -! NRR=4 for RSOU case because RI and Rc always computed -IF (CIDEAL == 'RSOU' .AND. NRR < 4 ) NRR=4 -! -! -!* 3.5 Chemistry -! -IF (LORILAM .OR. LCH_INIT_FIELD) THEN - LUSECHEM = .TRUE. - IF (LORILAM) THEN - CORGANIC = "MPMPO" - LVARSIGI = .TRUE. - LVARSIGJ = .TRUE. - END IF -END IF -! initialise NSV_* variables -CALL INI_NSV(1) -LHORELAX_SV(:)=.FALSE. -IF(.NOT. L1D) LHORELAX_SV(1:NSV)=.TRUE. -! -!------------------------------------------------------------------------------- -! -!* 4. ALLOCATE MEMORY FOR ARRAYS : -! ---------------------------- -! -!* 4.1 Vertical Spatial grid -! -CALL READ_VER_GRID(TZEXPREFILE) -! -!* 4.2 Initialize parallel variables and compute array's dimensions -! -! -IF(LGEOSBAL) THEN - CALL SET_SPLITTING_ll('XSPLITTING') ! required for integration of thermal wind balance -ELSE - CALL SET_SPLITTING_ll('BSPLITTING') -ENDIF -CALL SET_JP_ll(1,JPHEXT,JPVEXT,JPHEXT) -CALL SET_DAD0_ll() -CALL SET_DIM_ll(NIMAX_ll, NJMAX_ll, NKMAX) -CALL IO_Pack_set(L1D,L2D,LPACK) -CALL SET_LBX_ll(CLBCX(1), 1) -CALL SET_LBY_ll(CLBCY(1), 1) -CALL SET_XRATIO_ll(1, 1) -CALL SET_YRATIO_ll(1, 1) -CALL SET_XOR_ll(1, 1) -CALL SET_XEND_ll(NIMAX_ll+2*JPHEXT, 1) -CALL SET_YOR_ll(1, 1) -CALL SET_YEND_ll(NJMAX_ll+2*JPHEXT, 1) -CALL SET_DAD_ll(0, 1) -CALL INI_PARAZ_ll(IINFO_ll) -! -! sizes of arrays of the extended sub-domain -! -CALL GET_DIM_EXT_ll('B',NIU,NJU) -CALL GET_DIM_PHYS_ll('B',NIMAX,NJMAX) -CALL GET_INDICE_ll(NIB,NJB,NIE,NJE) -CALL GET_OR_ll('B',IXOR,IYOR) -NKB=1+JPVEXT -NKU=NKMAX+2*JPVEXT -! -!* 4.3 Global variables absent from the modules : -! -ALLOCATE(XJ(NIU,NJU,NKU)) -SELECT CASE(CIDEAL) - CASE('RSOU','CSTN') - IF (LGEOSBAL) ALLOCATE(XCORIOZ(NIU,NJU,NKU)) ! exceptionally a 3D array - CASE DEFAULT ! undefined preinitialization - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_IDEAL_CASE','CIDEAL is not correctly defined') -END SELECT -! -!* 4.4 Prognostic variables at M instant (module MODD_FIELD1): -! -ALLOCATE(XUT(NIU,NJU,NKU)) -ALLOCATE(XVT(NIU,NJU,NKU)) -ALLOCATE(XWT(NIU,NJU,NKU)) -ALLOCATE(XTHT(NIU,NJU,NKU)) -ALLOCATE(XPABST(NIU,NJU,NKU)) -ALLOCATE(XRT(NIU,NJU,NKU,NRR)) -ALLOCATE(XSVT(NIU,NJU,NKU,NSV)) -! -!* 4.5 Grid variables (module MODD_GRID1 and MODD_METRICS1): -! -ALLOCATE(XMAP(NIU,NJU)) -ALLOCATE(XLAT(NIU,NJU)) -ALLOCATE(XLON(NIU,NJU)) -ALLOCATE(XDXHAT(NIU),XDYHAT(NJU)) -IF (LEN_TRIM(CPGD_FILE)==0) ALLOCATE(XZS(NIU,NJU)) -IF (LEN_TRIM(CPGD_FILE)==0) ALLOCATE(ZZS_ll(NIMAX_ll)) -IF (LEN_TRIM(CPGD_FILE)==0) ALLOCATE(XZSMT(NIU,NJU)) -ALLOCATE(XZZ(NIU,NJU,NKU)) -! -ALLOCATE(XDXX(NIU,NJU,NKU)) -ALLOCATE(XDYY(NIU,NJU,NKU)) -ALLOCATE(XDZX(NIU,NJU,NKU)) -ALLOCATE(XDZY(NIU,NJU,NKU)) -ALLOCATE(XDZZ(NIU,NJU,NKU)) -! -!* 4.6 Reference state variables (modules MODD_REF and MODD_REF1): -! -ALLOCATE(XRHODREFZ(NKU),XTHVREFZ(NKU)) -XTHVREFZ(:)=0.0 -IF (LCOUPLES) THEN - ! Arrays for reference state different in ocean and atmosphere - ALLOCATE(XRHODREFZO(NKU),XTHVREFZO(NKU)) - XTHVREFZO(:)=0.0 -END IF -IF(CEQNSYS == 'DUR') THEN - ALLOCATE(XRVREF(NIU,NJU,NKU)) -ELSE - ALLOCATE(XRVREF(0,0,0)) -END IF -ALLOCATE(XRHODREF(NIU,NJU,NKU),XTHVREF(NIU,NJU,NKU),XEXNREF(NIU,NJU,NKU)) -ALLOCATE(XRHODJ(NIU,NJU,NKU)) -! -!* 4.7 Larger Scale fields (modules MODD_LSFIELD1): -! -ALLOCATE(XLSUM(NIU,NJU,NKU)) -ALLOCATE(XLSVM(NIU,NJU,NKU)) -ALLOCATE(XLSWM(NIU,NJU,NKU)) -ALLOCATE(XLSTHM(NIU,NJU,NKU)) -IF ( NRR >= 1) THEN - ALLOCATE(XLSRVM(NIU,NJU,NKU)) -ELSE - ALLOCATE(XLSRVM(0,0,0)) -ENDIF -! -! allocate lateral boundary field used for coupling -! -IF ( L1D) THEN ! 1D case -! - NSIZELBX_ll=0 - NSIZELBXU_ll=0 - NSIZELBY_ll=0 - NSIZELBYV_ll=0 - NSIZELBXTKE_ll=0 - NSIZELBXR_ll=0 - NSIZELBXSV_ll=0 - NSIZELBYTKE_ll=0 - NSIZELBYR_ll=0 - NSIZELBYSV_ll=0 - ALLOCATE(XLBXUM(0,0,0)) - ALLOCATE(XLBYUM(0,0,0)) - ALLOCATE(XLBXVM(0,0,0)) - ALLOCATE(XLBYVM(0,0,0)) - ALLOCATE(XLBXWM(0,0,0)) - ALLOCATE(XLBYWM(0,0,0)) - ALLOCATE(XLBXTHM(0,0,0)) - ALLOCATE(XLBYTHM(0,0,0)) - ALLOCATE(XLBXTKEM(0,0,0)) - ALLOCATE(XLBYTKEM(0,0,0)) - ALLOCATE(XLBXRM(0,0,0,0)) - ALLOCATE(XLBYRM(0,0,0,0)) - ALLOCATE(XLBXSVM(0,0,0,0)) - ALLOCATE(XLBYSVM(0,0,0,0)) -! -ELSEIF( L2D ) THEN ! 2D case (not yet parallelized) -! - CALL GET_SIZEX_LB(NIMAX_ll,NJMAX_ll,NRIMX, & - IISIZEXF,IJSIZEXF,IISIZEXFU,IJSIZEXFU, & - IISIZEX4,IJSIZEX4,IISIZEX2,IJSIZEX2) - NSIZELBY_ll=0 - NSIZELBYV_ll=0 - NSIZELBYTKE_ll=0 - NSIZELBYR_ll=0 - NSIZELBYSV_ll=0 - ALLOCATE(XLBYUM(0,0,0)) - ALLOCATE(XLBYVM(0,0,0)) - ALLOCATE(XLBYWM(0,0,0)) - ALLOCATE(XLBYTHM(0,0,0)) - ALLOCATE(XLBYTKEM(0,0,0)) - ALLOCATE(XLBYRM(0,0,0,0)) - ALLOCATE(XLBYSVM(0,0,0,0)) - ! - IF ( LHORELAX_UVWTH ) THEN -!JUAN A REVOIR TODO_JPHEXT -! <<<<<<< prep_ideal_case.f90 - ! NSIZELBX_ll=2*NRIMX+2 - ! NSIZELBXU_ll=2*NRIMX+2 - ALLOCATE(XLBXUM(IISIZEXFU,NJU,NKU)) - ALLOCATE(XLBXVM(IISIZEXF,NJU,NKU)) - ALLOCATE(XLBXWM(IISIZEXF,NJU,NKU)) - ALLOCATE(XLBXTHM(IISIZEXF,NJU,NKU)) -! ======= - NSIZELBX_ll=2*NRIMX+2*JPHEXT - NSIZELBXU_ll=2*NRIMX+2*JPHEXT - ! ALLOCATE(XLBXUM(2*NRIMX+2*JPHEXT,NJU,NKU)) - ! ALLOCATE(XLBXVM(2*NRIMX+2*JPHEXT,NJU,NKU)) - ! ALLOCATE(XLBXWM(2*NRIMX+2*JPHEXT,NJU,NKU)) - ! ALLOCATE(XLBXTHM(2*NRIMX+2*JPHEXT,NJU,NKU)) -! >>>>>>> 1.3.2.4.2.3.2.14.2.8.2.11.2.2 - ELSE - NSIZELBX_ll= 2*JPHEXT ! 2 - NSIZELBXU_ll=2*(JPHEXT+1) ! 4 - ALLOCATE(XLBXUM(NSIZELBXU_ll,NJU,NKU)) - ALLOCATE(XLBXVM(NSIZELBX_ll,NJU,NKU)) - ALLOCATE(XLBXWM(NSIZELBX_ll,NJU,NKU)) - ALLOCATE(XLBXTHM(NSIZELBX_ll,NJU,NKU)) - END IF - ! - IF ( NRR > 0 ) THEN - IF ( LHORELAX_RV .OR. LHORELAX_RC .OR. LHORELAX_RR .OR. LHORELAX_RI & - .OR. LHORELAX_RS .OR. LHORELAX_RG .OR. LHORELAX_RH & - ) THEN -!JUAN A REVOIR TODO_JPHEXT -! <<<<<<< prep_ideal_case.f90 - ! NSIZELBXR_ll=2* NRIMX+2 - ALLOCATE(XLBXRM(IISIZEXF,NJU,NKU,NRR)) -! ======= - NSIZELBXR_ll=2*NRIMX+2*JPHEXT - ! ALLOCATE(XLBXRM(2*NRIMX+2*JPHEXT,NJU,NKU,NRR)) -! >>>>>>> 1.3.2.4.2.3.2.14.2.8.2.11.2.2 - ELSE - NSIZELBXR_ll=2*JPHEXT ! 2 - ALLOCATE(XLBXRM(NSIZELBXR_ll,NJU,NKU,NRR)) - ENDIF - ELSE - NSIZELBXR_ll=0 - ALLOCATE(XLBXRM(0,0,0,0)) - END IF - ! - IF ( NSV > 0 ) THEN - IF ( ANY( LHORELAX_SV(:)) ) THEN -!JUAN A REVOIR TODO_JPHEXT -! <<<<<<< prep_ideal_case.f90 - ! NSIZELBXSV_ll=2* NRIMX+2 - ALLOCATE(XLBXSVM(IISIZEXF,NJU,NKU,NSV)) -! ======= - NSIZELBXSV_ll=2*NRIMX+2*JPHEXT - ! ALLOCATE(XLBXSVM(2*NRIMX+2*JPHEXT,NJU,NKU,NSV)) -! >>>>>>> 1.3.2.4.2.3.2.14.2.8.2.11.2.2 - ELSE - NSIZELBXSV_ll=2*JPHEXT ! 2 - ALLOCATE(XLBXSVM(NSIZELBXSV_ll,NJU,NKU,NSV)) - END IF - ELSE - NSIZELBXSV_ll=0 - ALLOCATE(XLBXSVM(0,0,0,0)) - END IF -! -ELSE ! 3D case -! - CALL GET_SIZEX_LB(NIMAX_ll,NJMAX_ll,NRIMX, & - IISIZEXF,IJSIZEXF,IISIZEXFU,IJSIZEXFU, & - IISIZEX4,IJSIZEX4,IISIZEX2,IJSIZEX2) - CALL GET_SIZEY_LB(NIMAX_ll,NJMAX_ll,NRIMY, & - IISIZEYF,IJSIZEYF,IISIZEYFV,IJSIZEYFV, & - IISIZEY4,IJSIZEY4,IISIZEY2,IJSIZEY2) -! - IF ( LHORELAX_UVWTH ) THEN - NSIZELBX_ll=2*NRIMX+2*JPHEXT - NSIZELBXU_ll=2*NRIMX+2*JPHEXT - NSIZELBY_ll=2*NRIMY+2*JPHEXT - NSIZELBYV_ll=2*NRIMY+2*JPHEXT - ALLOCATE(XLBXUM(IISIZEXFU,IJSIZEXFU,NKU)) - ALLOCATE(XLBYUM(IISIZEYF,IJSIZEYF,NKU)) - ALLOCATE(XLBXVM(IISIZEXF,IJSIZEXF,NKU)) - ALLOCATE(XLBYVM(IISIZEYFV,IJSIZEYFV,NKU)) - ALLOCATE(XLBXWM(IISIZEXF,IJSIZEXF,NKU)) - ALLOCATE(XLBYWM(IISIZEYF,IJSIZEYF,NKU)) - ALLOCATE(XLBXTHM(IISIZEXF,IJSIZEXF,NKU)) - ALLOCATE(XLBYTHM(IISIZEYF,IJSIZEYF,NKU)) - ELSE - NSIZELBX_ll=2*JPHEXT ! 2 - NSIZELBXU_ll=2*(JPHEXT+1) ! 4 - NSIZELBY_ll=2*JPHEXT ! 2 - NSIZELBYV_ll=2*(JPHEXT+1) ! 4 - ALLOCATE(XLBXUM(IISIZEX4,IJSIZEX4,NKU)) - ALLOCATE(XLBYUM(IISIZEY2,IJSIZEY2,NKU)) - ALLOCATE(XLBXVM(IISIZEX2,IJSIZEX2,NKU)) - ALLOCATE(XLBYVM(IISIZEY4,IJSIZEY4,NKU)) - ALLOCATE(XLBXWM(IISIZEX2,IJSIZEX2,NKU)) - ALLOCATE(XLBYWM(IISIZEY2,IJSIZEY2,NKU)) - ALLOCATE(XLBXTHM(IISIZEX2,IJSIZEX2,NKU)) - ALLOCATE(XLBYTHM(IISIZEY2,IJSIZEY2,NKU)) - END IF - ! - IF ( NRR > 0 ) THEN - IF ( LHORELAX_RV .OR. LHORELAX_RC .OR. LHORELAX_RR .OR. LHORELAX_RI & - .OR. LHORELAX_RS .OR. LHORELAX_RG .OR. LHORELAX_RH & - ) THEN - NSIZELBXR_ll=2*NRIMX+2*JPHEXT - NSIZELBYR_ll=2*NRIMY+2*JPHEXT - ALLOCATE(XLBXRM(IISIZEXF,IJSIZEXF,NKU,NRR)) - ALLOCATE(XLBYRM(IISIZEYF,IJSIZEYF,NKU,NRR)) - ELSE - NSIZELBXR_ll=2*JPHEXT ! 2 - NSIZELBYR_ll=2*JPHEXT ! 2 - ALLOCATE(XLBXRM(IISIZEX2,IJSIZEX2,NKU,NRR)) - ALLOCATE(XLBYRM(IISIZEY2,IJSIZEY2,NKU,NRR)) - ENDIF - ELSE - NSIZELBXR_ll=0 - NSIZELBYR_ll=0 - ALLOCATE(XLBXRM(0,0,0,0)) - ALLOCATE(XLBYRM(0,0,0,0)) - END IF - ! - IF ( NSV > 0 ) THEN - IF ( ANY( LHORELAX_SV(:)) ) THEN - NSIZELBXSV_ll=2*NRIMX+2*JPHEXT - NSIZELBYSV_ll=2*NRIMY+2*JPHEXT - ALLOCATE(XLBXSVM(IISIZEXF,IJSIZEXF,NKU,NSV)) - ALLOCATE(XLBYSVM(IISIZEYF,IJSIZEYF,NKU,NSV)) - ELSE - NSIZELBXSV_ll=2*JPHEXT ! 2 - NSIZELBYSV_ll=2*JPHEXT ! 2 - ALLOCATE(XLBXSVM(IISIZEX2,IJSIZEX2,NKU,NSV)) - ALLOCATE(XLBYSVM(IISIZEY2,IJSIZEY2,NKU,NSV)) - END IF - ELSE - NSIZELBXSV_ll=0 - NSIZELBYSV_ll=0 - ALLOCATE(XLBXSVM(0,0,0,0)) - ALLOCATE(XLBYSVM(0,0,0,0)) - END IF -END IF -! -! -!------------------------------------------------------------------------------- -! -!* 5. INITIALIZE ALL THE MODEL VARIABLES -! ---------------------------------- -! -! -!* 5.1 Grid variables and RS localization: -! -!* 5.1.1 Horizontal Spatial grid : -! -IF( LEN_TRIM(CPGD_FILE) /= 0 ) THEN -!-------------------------------------------------------- -! the MESONH horizontal grid will be read in the PGD_FILE -!-------------------------------------------------------- - CALL READ_HGRID(1,TPGDFILE,YPGD_NAME,YPGD_DAD_NAME,YPGD_TYPE) -! control the cartesian option - IF( LCARTESIAN ) THEN - WRITE(NLUOUT,FMT=*) 'PREP_IDEAL_CASE : IN GENERAL, THE USE OF A PGD_FILE & - & IMPLIES THAT YOU MUST TAKE INTO ACCOUNT THE EARTH SPHERICITY' - WRITE(NLUOUT,FMT=*) 'NEVERTHELESS, LCARTESIAN HAS BEEN KEPT TO TRUE' - END IF -! -!* use of the externalized surface -! - CSURF = "EXTE" -! -! determine whether the model is flat or no -! - ZZS_MAX = ABS( MAXVAL(XZS(NIB:NIU-JPHEXT,NJB:NJU-JPHEXT))) - CALL MPI_ALLREDUCE(ZZS_MAX, ZZS_MAX_ll, 1, MNHREAL_MPI, MPI_MAX, & - NMNH_COMM_WORLD,IINFO_ll) - IF( ABS(ZZS_MAX_ll) < 1.E-10 ) THEN - LFLAT=.TRUE. - ELSE - LFLAT=.FALSE. - END IF -! - -ELSE -!------------------------------------------------------------------------ -! the MESONH horizontal grid is built from the PRE_IDEA1.nam informations -!------------------------------------------------------------------------ -! - ALLOCATE(XXHAT(NIU),XYHAT(NJU)) -! -! define the grid localization at the earth surface by the central point -! coordinates -! - IF (XLONCEN/=XUNDEF .OR. XLATCEN/=XUNDEF) THEN - IF (XLONCEN/=XUNDEF .AND. XLATCEN/=XUNDEF) THEN -! -! it should be noted that XLATCEN and XLONCEN refer to a vertical -! vorticity point and (XLATORI, XLONORI) refer to the mass point of -! conformal coordinates (0,0). This is to allow the centering of the model in -! a non-cyclic configuration regarding to XLATCEN or XLONCEN. -! - ALLOCATE(ZXHAT_ll(NIMAX_ll+2*JPHEXT),ZYHAT_ll(NJMAX_ll+2*JPHEXT)) - ZXHAT_ll=0. - ZYHAT_ll=0. - CALL SM_LATLON(XLATCEN,XLONCEN, & - -XDELTAX*(NIMAX_ll/2-0.5+JPHEXT), & - -XDELTAY*(NJMAX_ll/2-0.5+JPHEXT), & - XLATORI,XLONORI) - DEALLOCATE(ZXHAT_ll,ZYHAT_ll) -! - WRITE(NLUOUT,FMT=*) 'PREP_IDEAL_CASE : XLATORI=' , XLATORI, & - ' XLONORI= ', XLONORI - ELSE - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_IDEAL_CASE',& - 'latitude and longitude of the center point must be initialized alltogether or not') - END IF - END IF -! - IF (NPROC > 1) THEN - CALL GET_DIM_EXT_ll('B',IXDIM,IYDIM) - IBEG = IXOR-JPHEXT-1 - IEND = IBEG+IXDIM-1 - XXHAT(:) = (/ (REAL(JLOOP)*XDELTAX, JLOOP=IBEG,IEND) /) - IBEG = IYOR-JPHEXT-1 - IEND = IBEG+IYDIM-1 - XYHAT(:) = (/ (REAL(JLOOP)*XDELTAY, JLOOP=IBEG,IEND) /) -! - ELSE - XXHAT(:) = (/ (REAL(JLOOP-NIB)*XDELTAX, JLOOP=1,NIU) /) - XYHAT(:) = (/ (REAL(JLOOP-NJB)*XDELTAY, JLOOP=1,NJU) /) - END IF -END IF -! -!* 5.1.2 Orography and Gal-Chen Sommerville transformation : -! -IF ( LEN_TRIM(CPGD_FILE) == 0 .OR. .NOT. LREAD_ZS) THEN - SELECT CASE(CZS) ! 'FLAT' or 'SINE' or 'BELL' - CASE('FLAT') - LFLAT = .TRUE. - IF (XHMAX==XUNDEF) THEN - XZS(:,:) = 0. - ELSE - XZS(:,:) = XHMAX - END IF - CASE('SINE') ! sinus-shaped orography - IF (XHMAX==XUNDEF) XHMAX=300. - LFLAT =.FALSE. - XZS(:,:) = XHMAX & ! three-dimensional case - *SPREAD((/((SIN((XPI/(NIMAX_ll+2*JPHEXT-1))*JLOOP)**2)**NEXPX,JLOOP=IXOR-1,IXOR+NIU-2)/),2,NJU) & - *SPREAD((/((SIN((XPI/(NJMAX_ll+2*JPHEXT-1))*JLOOP)**2)**NEXPY,JLOOP=IYOR-1,IYOR+NJU-2)/),1,NIU) - IF(L1D) THEN ! one-dimensional case - XZS(:,:) = XHMAX - END IF - CASE('BELL') ! bell-shaped orography - IF (XHMAX==XUNDEF) XHMAX=300. - LFLAT = .FALSE. - IF(.NOT.L2D) THEN ! three-dimensional case - XZS(:,:) = XHMAX / ( 1. & - + ( (SPREAD(XXHAT(1:NIU),2,NJU) - REAL(NIZS) * XDELTAX) /XAX ) **2 & - + ( (SPREAD(XYHAT(1:NJU),1,NIU) - REAL(NJZS) * XDELTAY) /XAY ) **2 ) **1.5 - ELSE ! two-dimensional case - XZS(:,:) = XHMAX / ( 1. & - + ( (SPREAD(XXHAT(1:NIU),2,NJU) - REAL(NIZS) * XDELTAX) /XAX ) **2 ) - ENDIF - IF(L1D) THEN ! one-dimensional case - XZS(:,:) = XHMAX - END IF - CASE('COSI') ! (1+cosine)**4 shape - IF (XHMAX==XUNDEF) XHMAX=800. - LFLAT = .FALSE. - IF(L2D) THEN ! two-dimensional case - DO JILOOP = 1, NIU - ZDIST = XXHAT(JILOOP)-REAL(NIZS)*XDELTAX - IF( ABS(ZDIST)<(4.0*XAX) ) THEN - XZS(JILOOP,:) = (XHMAX/16.0)*( 1.0 + COS((XPI*ZDIST)/(4.0*XAX)) )**4 - ELSE - XZS(JILOOP,:) = 0.0 - ENDIF - END DO - ENDIF - CASE('SCHA') ! exp(-(x/a)**2)*cosine(pi*x/lambda)**2 shape - IF (XHMAX==XUNDEF) XHMAX=800. - LFLAT = .FALSE. - IF(L2D) THEN ! two-dimensional case - DO JILOOP = 1, NIU - ZDIST = XXHAT(JILOOP)-REAL(NIZS)*XDELTAX - IF( ABS(ZDIST)<(4.0*XAX) ) THEN - XZS(JILOOP,:) = XHMAX*EXP(-(ZDIST/XAY)**2)*COS((XPI*ZDIST)/XAX)**2 - ELSE - XZS(JILOOP,:) = 0.0 - ENDIF - END DO - ENDIF - CASE('AGNE') ! h*a**2/(x**2+a**2) shape - LFLAT = .FALSE. - IF(L2D) THEN ! two-dimensional case - DO JILOOP = 1, NIU - ZDIST = XXHAT(JILOOP)-REAL(NIZS)*XDELTAX - XZS(JILOOP,:) = XHMAX*(XAX**2)/(XAX**2+ZDIST**2) - END DO - ELSE ! three dimensionnal case - infinite profile in y direction - DO JILOOP = 1, NIU - ZDIST = XXHAT(JILOOP)-REAL(NIZS)*XDELTAX - XZS(JILOOP,:) = XHMAX*(XAX**2)/(XAX**2+ZDIST**2) - END DO - ENDIF - - CASE('DATA') ! discretized orography - LFLAT =.FALSE. - WRITE(NLUOUT,FMT=*) 'CZS="DATA", ATTEMPT TO READ ARRAY & - &XZS(NIB:NIU-JPHEXT:1,NJU-JPHEXT:NJB:-1) & - &starting from the first index' - CALL POSKEY(NLUPRE,NLUOUT,'ZSDATA') - DO JJLOOP = NJMAX_ll+2*JPHEXT-1,JPHEXT+1,-1 ! input like a map prior the sounding - READ(NLUPRE,FMT=*) ZZS_ll - IF ( ( JJLOOP <= ( NJU-JPHEXT + IYOR-1 ) ) .AND. ( JJLOOP >= ( NJB + IYOR-1 ) ) ) THEN - IJ = JJLOOP - ( IYOR-1 ) - XZS(NIB:NIU-JPHEXT,IJ) = ZZS_ll(IXOR:IXOR + NIU-JPHEXT - NIB ) - END IF - END DO -! - CASE DEFAULT ! undefined shape of orography - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_IDEAL_CASE','erroneous ground type') - END SELECT -! - CALL ADD2DFIELD_ll( TZ_FIELDS_ll, XZS, 'PREP_IDEAL_CASE::XZS' ) - CALL UPDATE_HALO_ll(TZ_FIELDS_ll,IINFO_ll) - CALL CLEANLIST_ll(TZ_FIELDS_ll) -! -END IF -! -!IF( ( LEN_TRIM(CPGD_FILE) /= 0 ) .AND. .NOT.LFLAT .AND. & -! ((CLBCX(1) /= "OPEN" ) .OR. & -! (CLBCX(2) /= "OPEN" ) .OR. (CLBCY(1) /= "OPEN" ) .OR. & -! (CLBCY(2) /= "OPEN" )) ) THEN -! !callabortstop -! CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_IDEAL_CASE','with a PGD file, you cannot be in a cyclic LBC') -!END IF -! -IF (LWEST_ll()) THEN - DO JILOOP = 1,JPHEXT - XZS(JILOOP,:) = XZS(NIB,:) - END DO -END IF -IF (LEAST_ll()) THEN - DO JILOOP = NIU-JPHEXT+1,NIU - XZS(JILOOP,:)=XZS(NIU-JPHEXT,:) - END DO -END IF -IF (LSOUTH_ll()) THEN - DO JJLOOP = 1,JPHEXT - XZS(:,JJLOOP)=XZS(:,NJB) - END DO -END IF -IF (LNORTH_ll()) THEN - DO JJLOOP =NJU-JPHEXT+1,NJU - XZS(:,JJLOOP)=XZS(:,NJU-JPHEXT) - END DO -END IF -! -IF ( LEN_TRIM(CPGD_FILE) == 0 .OR. .NOT. LREAD_ZS) THEN - IF (LSLEVE) THEN - CALL ZSMT_PIC(NSLEVE,XSMOOTH_ZS) - ELSE - XZSMT(:,:) = 0. - END IF -END IF -! -IF (LCARTESIAN) THEN - CALL SM_GRIDCART(XXHAT,XYHAT,XZHAT,XZS,LSLEVE,XLEN1,XLEN2,XZSMT,XDXHAT,XDYHAT,XZZ,XJ) - XMAP=1. -ELSE - CALL SM_GRIDPROJ(XXHAT,XYHAT,XZHAT,XZS,LSLEVE,XLEN1,XLEN2,XZSMT,XLATORI,XLONORI, & - XMAP,XLAT,XLON,XDXHAT,XDYHAT,XZZ,XJ) -END IF -!* 5.4.1 metrics coefficients and update halos: -! -CALL METRICS(XMAP,XDXHAT,XDYHAT,XZZ,XDXX,XDYY,XDZX,XDZY,XDZZ) -! -CALL UPDATE_METRICS(CLBCX,CLBCY,XDXX,XDYY,XDZX,XDZY,XDZZ) -! -!* 5.1.3 Compute the localization in index space of the vertical profile -! in CSTN and RSOU cases : -! -IF (CTYPELOC =='LATLON' ) THEN - IF (.NOT.LCARTESIAN) THEN ! compute (x,y) if - CALL SM_XYHAT(XLATORI,XLONORI, & ! the localization - XLATLOC,XLONLOC,XXHATLOC,XYHATLOC) ! is given in latitude - ELSE ! and longitude - WRITE(NLUOUT,FMT=*) 'CTYPELOC CANNOT BE LATLON IN CARTESIAN GEOMETRY' - WRITE(NLUOUT,FMT=*) '-> JOB ABORTED' - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_IDEAL_CASE','CTYPELOC cannot be LATLON in cartesian geometry') - END IF -END IF -! -ALLOCATE(ZXHAT_ll(NIMAX_ll+ 2 * JPHEXT),ZYHAT_ll(NJMAX_ll+2 * JPHEXT)) -CALL GATHERALL_FIELD_ll('XX',XXHAT,ZXHAT_ll,NRESP) !// -CALL GATHERALL_FIELD_ll('YY',XYHAT,ZYHAT_ll,NRESP) !// -IF (CTYPELOC /= 'IJGRID') THEN - NILOC = MINLOC(ABS(XXHATLOC-ZXHAT_ll(:))) - NJLOC = MINLOC(ABS(XYHATLOC-ZYHAT_ll(:))) -END IF -! -IF ( L1D .AND. ( NILOC(1) /= 1 .OR. NJLOC(1) /= 1 ) ) THEN - NILOC = 1 - NJLOC = 1 - WRITE(NLUOUT,FMT=*) 'FOR 1D CONFIGURATION, THE RS INFORMATIONS ARE TAKEN AT & - & I=1 AND J=1 (CENTRAL VERTICAL WITHOUT HALO)' -END IF -! -IF ( L2D .AND. ( NJLOC(1) /= 1 ) ) THEN - NJLOC = 1 - WRITE(NLUOUT,FMT=*) 'FOR 2D CONFIGURATION, THE RS INFORMATIONS ARE TAKEN AT & - & J=1 (CENTRAL PLANE WITHOUT HALO)' -END IF -! -!* 5.2 Prognostic variables (not multiplied by rhoJ) : u,v,w,theta,r -! and 1D anelastic reference state -! -! -!* 5.2.1 Use a Radiosounding : CIDEAL='RSOU'' -! -IF (CIDEAL == 'RSOU') THEN - WRITE(NLUOUT,FMT=*) 'CIDEAL="RSOU", attempt to read DATE' - CALL POSKEY(NLUPRE,NLUOUT,'RSOU') - READ(NLUPRE,FMT=*) NYEAR,NMONTH,NDAY,XTIME - TDTCUR = DATE_TIME(DATE(NYEAR,NMONTH,NDAY),XTIME) - TDTEXP = TDTCUR - TDTSEG = TDTCUR - TDTMOD = TDTCUR - WRITE(NLUOUT,FMT=*) 'CIDEAL="RSOU", ATTEMPT TO PROCESS THE SOUNDING DATA' - IF (LGEOSBAL) THEN - CALL SET_RSOU(TFILE_DUMMY,TZEXPREFILE,CFUNU,CFUNV,NILOC(1),NJLOC(1),LBOUSS, & - XJ,LSHIFT,XCORIOZ) - ELSE - CALL SET_RSOU(TFILE_DUMMY,TZEXPREFILE,CFUNU,CFUNV,NILOC(1),NJLOC(1),LBOUSS, & - XJ,LSHIFT) - END IF -! -!* 5.2.2 N=cste and U(z) : CIDEAL='CSTN' -! -ELSE IF (CIDEAL == 'CSTN') THEN - WRITE(NLUOUT,FMT=*) 'CIDEAL="CSTN", attempt to read DATE' - CALL POSKEY(NLUPRE,NLUOUT,'CSTN') - READ(NLUPRE,FMT=*) NYEAR,NMONTH,NDAY,XTIME - TDTCUR = DATE_TIME(DATE(NYEAR,NMONTH,NDAY),XTIME) - TDTEXP = TDTCUR - TDTSEG = TDTCUR - TDTMOD = TDTCUR - WRITE(NLUOUT,FMT=*) 'CIDEAL="CSTN", ATTEMPT TO PROCESS THE SOUNDING DATA' - IF (LGEOSBAL) THEN - CALL SET_CSTN(TFILE_DUMMY,TZEXPREFILE,CFUNU,CFUNV,NILOC(1),NJLOC(1),LBOUSS, & - XJ,LSHIFT,XCORIOZ) - ELSE - CALL SET_CSTN(TFILE_DUMMY,TZEXPREFILE,CFUNU,CFUNV,NILOC(1),NJLOC(1),LBOUSS, & - XJ,LSHIFT) - END IF -! -END IF -! -!* 5.3 Forcing variables -! -IF (LFORCING) THEN - WRITE(NLUOUT,FMT=*) 'FORCING IS ENABLED, ATTEMPT TO SET FORCING FIELDS' - CALL POSKEY(NLUPRE,NLUOUT,'ZFRC ','PFRC') - CALL SET_FRC(TZEXPREFILE) -END IF -! -!! --------------------------------------------------------------------- -! Modif PP ADV FRC -! 5.4.2 initialize profiles for adv forcings -IF (L2D_ADV_FRC) THEN - WRITE(NLUOUT,FMT=*) 'L2D_ADV_FRC IS SET TO TRUE' - WRITE(NLUOUT,FMT=*) 'ADVECTING FORCING USED IS USER MADE, NOT STANDARD ONE ' - WRITE(NLUOUT,FMT=*) 'IT IS FOR 2D IDEALIZED WAM STUDY ONLY ' - CALL POSKEY(NLUPRE,NLUOUT,'ZFRC_ADV') - CALL SET_ADVFRC(TZEXPREFILE) -ENDIF -IF (L2D_REL_FRC) THEN - WRITE(NLUOUT,FMT=*) 'L2D_REL_FRC IS SET TO TRUE' - WRITE(NLUOUT,FMT=*) 'RELAXATION FORCING USED IS USER MADE, NOT STANDARD ONE ' - WRITE(NLUOUT,FMT=*) 'IT IS FOR 2D IDEALIZED WAM STUDY ONLY ' - CALL POSKEY(NLUPRE,NLUOUT,'ZFRC_REL') - CALL SET_RELFRC(TZEXPREFILE) -ENDIF -!* 5.4 3D Reference state variables : -! -! -!* 5.4.1 metrics coefficients and update halos: -! -CALL METRICS(XMAP,XDXHAT,XDYHAT,XZZ,XDXX,XDYY,XDZX,XDZY,XDZZ) -! -CALL UPDATE_METRICS(CLBCX,CLBCY,XDXX,XDYY,XDZX,XDZY,XDZZ) -! -!* 5.4.2 3D reference state : -! -CALL SET_REF(0,TFILE_DUMMY, & - XZZ,XZHAT,XJ,XDXX,XDYY,CLBCX,CLBCY, & - XREFMASS,XMASS_O_PHI0,XLINMASS, & - XRHODREF,XTHVREF,XRVREF,XEXNREF,XRHODJ) -! -! -!* 5.5.1 Absolute pressure : -! -! -!* 5.5.2 Total mass of dry air Md computation : -! -CALL TOTAL_DMASS(XJ,XRHODREF,XDRYMASST) -! -! -!* 5.6 Complete prognostic variables (multipliy by rhoJ) at time t : -! -! U grid : gridpoint 2 -IF (LWEST_ll()) XUT(1,:,:) = 2.*XUT(2,:,:) - XUT(3,:,:) -! V grid : gridpoint 3 -IF (LSOUTH_ll()) XVT(:,1,:) = 2.*XVT(:,2,:) - XVT(:,3,:) -! SV : gridpoint 1 -XSVT(:,:,:,:) = 0. -! -! -!* 5.7 Larger scale fields initialization : -! -XLSUM(:,:,:) = XUT(:,:,:) ! these fields do not satisfy the -XLSVM(:,:,:) = XVT(:,:,:) ! lower boundary condition but are -XLSWM(:,:,:) = XWT(:,:,:) ! in equilibrium -XLSTHM(:,:,:)= XTHT(:,:,:) -XLSRVM(:,:,:)= XRT(:,:,:,1) -! -! enforce the vertical homogeneity under the ground and above the top of -! the model for the LS fields -! -XLSUM(:,:,NKB-1)=XLSUM(:,:,NKB) -XLSUM(:,:,NKU)=XLSUM(:,:,NKU-1) -XLSVM(:,:,NKB-1)=XLSVM(:,:,NKB) -XLSVM(:,:,NKU)=XLSVM(:,:,NKU-1) -XLSWM(:,:,NKB-1)=XLSWM(:,:,NKB) -XLSWM(:,:,NKU)=XLSWM(:,:,NKU-1) -XLSTHM(:,:,NKB-1)=XLSTHM(:,:,NKB) -XLSTHM(:,:,NKU)=XLSTHM(:,:,NKU-1) -IF ( NRR > 0 ) THEN - XLSRVM(:,:,NKB-1)=XLSRVM(:,:,NKB) - XLSRVM(:,:,NKU)=XLSRVM(:,:,NKU-1) -END IF -! -ILBX=SIZE(XLBXUM,1) -ILBY=SIZE(XLBYUM,2) -IF(LWEST_ll() .AND. .NOT. L1D) THEN - XLBXUM(1:NRIMX+JPHEXT, :,:) = XUT(2:NRIMX+JPHEXT+1, :,:) - XLBXVM(1:NRIMX+JPHEXT, :,:) = XVT(1:NRIMX+JPHEXT, :,:) - XLBXWM(1:NRIMX+JPHEXT, :,:) = XWT(1:NRIMX+JPHEXT, :,:) - XLBXTHM(1:NRIMX+JPHEXT, :,:) = XTHT(1:NRIMX+JPHEXT, :,:) - XLBXRM(1:NRIMX+JPHEXT, :,:,:) = XRT(1:NRIMX+JPHEXT, :,:,:) -ENDIF -IF(LEAST_ll() .AND. .NOT. L1D) THEN - XLBXUM(ILBX-NRIMX-JPHEXT+1:ILBX,:,:) = XUT(NIU-NRIMX-JPHEXT+1:NIU, :,:) - XLBXVM(ILBX-NRIMX-JPHEXT+1:ILBX,:,:) = XVT(NIU-NRIMX-JPHEXT+1:NIU, :,:) - XLBXWM(ILBX-NRIMX-JPHEXT+1:ILBX,:,:) = XWT(NIU-NRIMX-JPHEXT+1:NIU, :,:) - XLBXTHM(ILBX-NRIMX-JPHEXT+1:ILBX,:,:) = XTHT(NIU-NRIMX-JPHEXT+1:NIU, :,:) - XLBXRM(ILBX-NRIMX-JPHEXT+1:ILBX,:,:,:) = XRT(NIU-NRIMX-JPHEXT+1:NIU, :,:,:) -ENDIF -IF(LSOUTH_ll() .AND. .NOT. L1D .AND. .NOT. L2D) THEN - XLBYUM(:,1:NRIMY+JPHEXT, :) = XUT(:,1:NRIMY+JPHEXT, :) - XLBYVM(:,1:NRIMY+JPHEXT, :) = XVT(:,2:NRIMY+JPHEXT+1, :) - XLBYWM(:,1:NRIMY+JPHEXT, :) = XWT(:,1:NRIMY+JPHEXT, :) - XLBYTHM(:,1:NRIMY+JPHEXT, :) = XTHT(:,1:NRIMY+JPHEXT, :) - XLBYRM(:,1:NRIMY+JPHEXT, :,:) = XRT(:,1:NRIMY+JPHEXT, :,:) -ENDIF -IF(LNORTH_ll().AND. .NOT. L1D .AND. .NOT. L2D) THEN - XLBYUM(:,ILBY-NRIMY-JPHEXT+1:ILBY,:) = XUT(:,NJU-NRIMY-JPHEXT+1:NJU, :) - XLBYVM(:,ILBY-NRIMY-JPHEXT+1:ILBY,:) = XVT(:,NJU-NRIMY-JPHEXT+1:NJU, :) - XLBYWM(:,ILBY-NRIMY-JPHEXT+1:ILBY,:) = XWT(:,NJU-NRIMY-JPHEXT+1:NJU, :) - XLBYTHM(:,ILBY-NRIMY-JPHEXT+1:ILBY,:) = XTHT(:,NJU-NRIMY-JPHEXT+1:NJU, :) - XLBYRM(:,ILBY-NRIMY-JPHEXT+1:ILBY,:,:) = XRT(:,NJU-NRIMY-JPHEXT+1:NJU, :,:) -ENDIF -DO JSV = 1, NSV - IF(LWEST_ll() .AND. .NOT. L1D) & - XLBXSVM(1:NRIMX+JPHEXT, :,:,JSV) = XSVT(1:NRIMX+JPHEXT, :,:,JSV) - IF(LEAST_ll() .AND. .NOT. L1D) & - XLBXSVM(ILBX-NRIMX-JPHEXT+1:ILBX,:,:,JSV) = XSVT(NIU-NRIMX-JPHEXT+1:NIU, :,:,JSV) - IF(LSOUTH_ll() .AND. .NOT. L1D .AND. .NOT. L2D) & - XLBYSVM(:,1:NRIMY+JPHEXT, :,JSV) = XSVT(:,1:NRIMY+JPHEXT, :,JSV) - IF(LNORTH_ll() .AND. .NOT. L1D .AND. .NOT. L2D) & - XLBYSVM(:,ILBY-NRIMY-JPHEXT+1:ILBY,:,JSV) = XSVT(:,NJU-NRIMY-JPHEXT+1:NJU, :,JSV) -END DO -! -! -!* 5.8 Add a perturbation to a basic state : -! -IF(LPERTURB) CALL SET_PERTURB(TZEXPREFILE) -! -! -!* 5.9 Anelastic correction and pressure: -! -IF (.NOT.LOCEAN) THEN - CALL ICE_ADJUST_BIS(XPABST,XTHT,XRT) - IF ( .NOT. L1D ) CALL PRESSURE_IN_PREP(XDXX,XDYY,XDZX,XDZY,XDZZ) - CALL ICE_ADJUST_BIS(XPABST,XTHT,XRT) -END IF -! -! -!* 5.10 Compute THETA, vapor and cloud mixing ratio -! -IF (CIDEAL == 'RSOU') THEN - ALLOCATE(ZEXN(NIU,NJU,NKU)) - ALLOCATE(ZT(NIU,NJU,NKU)) - ALLOCATE(ZTHL(NIU,NJU,NKU)) - ALLOCATE(ZRT(NIU,NJU,NKU)) - ALLOCATE(ZCPH(NIU,NJU,NKU)) - ALLOCATE(ZLVOCPEXN(NIU,NJU,NKU)) - ALLOCATE(ZLSOCPEXN(NIU,NJU,NKU)) - ALLOCATE(ZFRAC_ICE(NIU,NJU,NKU)) - ALLOCATE(ZRSATW(NIU,NJU,NKU)) - ALLOCATE(ZRSATI(NIU,NJU,NKU)) - ALLOCATE(ZBUF(NIU,NJU,NKU,16)) - ZRT=XRT(:,:,:,1)+XRT(:,:,:,2)+XRT(:,:,:,4) -IF (LOCEAN) THEN - ZEXN(:,:,:)= 1. - ZT=XTHT - ZTHL=XTHT - ZCPH=XCPD+ XCPV * XRT(:,:,:,1) - ZLVOCPEXN = XLVTT - ZLSOCPEXN = XLSTT -ELSE - ZEXN=(XPABST/XP00) ** (XRD/XCPD) - ZT=XTHT*(XPABST/XP00)**(XRD/XCPD) - ZCPH=XCPD+ XCPV * XRT(:,:,:,1)+ XCL *XRT(:,:,:,2) + XCI * XRT(:,:,:,4) - ZLVOCPEXN = (XLVTT + (XCPV-XCL) * (ZT-XTT))/(ZCPH*ZEXN) - ZLSOCPEXN = (XLSTT + (XCPV-XCI) * (ZT-XTT))/(ZCPH*ZEXN) - ZTHL=XTHT-ZLVOCPEXN*XRT(:,:,:,2)-ZLSOCPEXN*XRT(:,:,:,4) - CALL TH_R_FROM_THL_RT(CST, NEB, SIZE(ZFRAC_ICE), 'T',ZFRAC_ICE,XPABST,ZTHL,ZRT,XTHT,XRT(:,:,:,1), & - XRT(:,:,:,2),XRT(:,:,:,4),ZRSATW, ZRSATI,OOCEAN=.FALSE.,& - PBUF=ZBUF) -END IF - DEALLOCATE(ZEXN) - DEALLOCATE(ZT) - DEALLOCATE(ZCPH) - DEALLOCATE(ZLVOCPEXN) - DEALLOCATE(ZLSOCPEXN) - DEALLOCATE(ZTHL) - DEALLOCATE(ZRT) - DEALLOCATE(ZBUF) -! Coherence test - IF ((.NOT. LUSERI) ) THEN - IF (MAXVAL(XRT(:,:,:,4))/= 0) THEN - WRITE(NLUOUT,FMT=*) "*********************************" - WRITE(NLUOUT,FMT=*) 'WARNING' - WRITE(NLUOUT,FMT=*) 'YOU HAVE LUSERI=FALSE ' - WRITE(NLUOUT,FMT=*) ' BUT WITH YOUR RADIOSOUNDING Ri/=0' - WRITE(NLUOUT,FMT=*) MINVAL(XRT(:,:,:,4)),MAXVAL(XRT(:,:,:,4)) - WRITE(NLUOUT,FMT=*) "*********************************" - ENDIF - ENDIF - IF ((.NOT. LUSERC)) THEN - IF (MAXVAL(XRT(:,:,:,2))/= 0) THEN - WRITE(NLUOUT,FMT=*) "*********************************" - WRITE(NLUOUT,FMT=*) 'WARNING' - WRITE(NLUOUT,FMT=*) 'YOU HAVE LUSERC=FALSE ' - WRITE(NLUOUT,FMT=*) 'BUT WITH YOUR RADIOSOUNDING RC/=0' - WRITE(NLUOUT,FMT=*) MINVAL(XRT(:,:,:,2)),MAXVAL(XRT(:,:,:,2)) - WRITE(NLUOUT,FMT=*) "*********************************" - ENDIF - ENDIF - ! on remet les bonnes valeurs pour NRR - IF(CCLOUD=='NONE') NRR=1 - IF(CCLOUD=='REVE') NRR=2 -END IF -! -!------------------------------------------------------------------------------- -! -!* 6. INITIALIZE SCALAR VARIABLES FOR CHEMISTRY -! ----------------------------------------- -! -! before calling chemistry -CCONF = 'START' -CSTORAGE_TYPE='TT' -CALL IO_File_close(TZEXPREFILE) ! Close the EXPRE file -! -IF ( LCH_INIT_FIELD ) CALL CH_INIT_FIELD_n(1, NLUOUT, NVERB) -! -! Initialization LIMA variables by ORILAM -IF (CCLOUD == 'LIMA' .AND. ((LORILAM).OR.(LDUST).OR.(LSALT))) & - CALL AER2LIMA(XSVT, XRHODREF, XRT(:,:,:,1), XPABST, XTHT, XZZ) -!------------------------------------------------------------------------------- -! -!* 7. INITIALIZE LEVELSET FOR IBM -! --------------------------- -! -IF (LIBM_LSF) THEN - ! - ! In their current state, the IBM can only be used in - ! combination with cartesian coordinates and flat orography. - ! - IF ((CZS.NE."FLAT").OR.(.NOT.LCARTESIAN)) THEN - CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_IDEAL_CASE','IBM can only be used with flat ground') - ENDIF - ! - ALLOCATE(XIBM_LS(NIU,NJU,NKU,4)) - ! - CALL IBM_INIT_LS(XIBM_LS) - ! -ENDIF -! -!------------------------------------------------------------------------------- -! -!* 8. WRITE THE FMFILE -! ---------------- -! -CALL SECOND_MNH2(ZTIME1) -! -NNPRAR = 22 + 2*(NRR+NSV) & ! 22 = number of grid variables + reference - + 8 + 17 ! state variables + dimension variables - ! 2*(8+NRR+NSV) + 1 = number of prognostic - ! variables at time t and t-dt -NTYPE=1 -! -CALL IO_File_add2list(TINIFILE,TRIM(CINIFILE),'MNH','WRITE',KLFINPRAR=NNPRAR,KLFITYPE=NTYPE,KLFIVERB=NVERB) -! -CALL IO_File_open(TINIFILE) -! -CALL IO_Header_write(TINIFILE) -! -CALL WRITE_DESFM_n(1,TINIFILE) -! -CALL WRITE_LFIFM_n(TINIFILE,'') ! There is no DAD model for PREP_IDEAL_CASE -! -CALL SECOND_MNH2(ZTIME2) -! -XT_STORE = XT_STORE + ZTIME2 - ZTIME1 -! -!------------------------------------------------------------------------------- -! -!* 9. EXTERNALIZED SURFACE -! -------------------- -! -! -IF (CSURF =='EXTE') THEN - IF (LEN_TRIM(CINIFILEPGD)==0) THEN - IF (LEN_TRIM(CPGD_FILE)/=0) THEN - CINIFILEPGD=CPGD_FILE - ELSE - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_IDEAL_CASE','CINIFILEPGD needed in NAM_LUNITn') - ENDIF - ENDIF - CALL SURFEX_ALLOC_LIST(1) - YSURF_CUR => YSURF_LIST(1) - CALL READ_ALL_NAMELISTS(YSURF_CUR,'MESONH','PRE',.FALSE.) - ! Switch to model 1 surface variables - CALL GOTO_SURFEX(1) - !* definition of physiographic fields - ! computed ... - IF (LEN_TRIM(CPGD_FILE)==0 .OR. .NOT. LREAD_GROUND_PARAM) THEN - TPGDFILE => TINIFILE - CALL PGD_GRID_SURF_ATM(YSURF_CUR%UG, YSURF_CUR%U,YSURF_CUR%GCP,'MESONH',TINIFILE%CNAME,'MESONH',.TRUE.,HDIR='-') - CALL PGD_SURF_ATM (YSURF_CUR,'MESONH',TINIFILE%CNAME,'MESONH',.TRUE.) - CALL IO_File_add2list(TINIFILEPGD,TRIM(CINIFILEPGD),'PGD','WRITE',KLFINPRAR=NNPRAR,KLFITYPE=NTYPE,KLFIVERB=NVERB) - CALL IO_File_open (TINIFILEPGD) - TPGDFILE => TINIFILEPGD - ELSE - ! ... or read from file. - CALL INIT_PGD_SURF_ATM( YSURF_CUR, 'MESONH', 'PGD', & - ' ', ' ', & - TDTCUR%nyear, TDTCUR%nmonth, & - TDTCUR%nday, TDTCUR%xtime ) -! - END IF - ! - !* forces orography from atmospheric file - IF (.NOT. LREAD_ZS) CALL MNHPUT_ZS_n - ! - ! on ecrit un nouveau fichier PGD que s'il n'existe pas - IF (LEN_TRIM(CPGD_FILE)==0 .OR. .NOT. LREAD_GROUND_PARAM) THEN - !* writing of physiographic fields in the file - CSTORAGE_TYPE='PG' - ! - CALL IO_Header_write(TINIFILEPGD) - CALL IO_Field_write(TINIFILEPGD,'JPHEXT', JPHEXT) - CALL IO_Field_write(TINIFILEPGD,'SURF','EXTE') - CALL IO_Field_write(TINIFILEPGD,'L1D', L1D) - CALL IO_Field_write(TINIFILEPGD,'L2D', L2D) - CALL IO_Field_write(TINIFILEPGD,'PACK',LPACK) - CALL WRITE_HGRID(1,TINIFILEPGD) - ! - TOUTDATAFILE => TINIFILEPGD - ! - TFILE_SURFEX => TINIFILEPGD - ALLOCATE(YSURF_CUR%DUO%CSELECT(0)) - CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH') - NULLIFY(TFILE_SURFEX) - CSTORAGE_TYPE='TT' - ENDIF - ! - ! - !* rereading of physiographic fields and definition of prognostic fields - !* writing of all surface fields - TOUTDATAFILE => TINIFILE - TFILE_SURFEX => TINIFILE - CALL PREP_SURF_MNH(' ',' ') - NULLIFY(TFILE_SURFEX) -ELSE - CSURF = "NONE" -END IF -! -!------------------------------------------------------------------------------- -! -!* 10. CLOSES THE FILE -! --------------- -! -IF (CSURF =='EXTE' .AND. (LEN_TRIM(CPGD_FILE)==0 .OR. .NOT. LREAD_GROUND_PARAM)) THEN - CALL IO_File_close(TINIFILEPGD) -ENDIF -CALL IO_File_close(TINIFILE) -IF( LEN_TRIM(CPGD_FILE) /= 0 ) THEN - CALL IO_File_close(TPGDFILE) -ENDIF -! -! -!------------------------------------------------------------------------------- -! -!* 11. PRINTS ON OUTPUT-LISTING -! ------------------------ -! -IF (NVERB >= 5) THEN - WRITE(NLUOUT,FMT=*) 'PREP_IDEAL_CASE: LCARTESIAN,CIDEAL,CZS=', & - LCARTESIAN,CIDEAL,CZS - WRITE(NLUOUT,FMT=*) 'PREP_IDEAL_CASE: LUSERV=',LUSERV - WRITE(NLUOUT,FMT=*) 'PREP_IDEAL_CASE: XLON0,XLAT0,XBETA,XRPK,XLONORI,XLATORI=', & - XLON0,XLAT0,XBETA,XRPK,XLONORI,XLATORI - WRITE(NLUOUT,FMT=*) 'PREP_IDEAL_CASE: XDELTAX,XDELTAY=',XDELTAX,XDELTAY - WRITE(NLUOUT,FMT=*) 'PREP_IDEAL_CASE: NVERB=',NVERB - IF(LCARTESIAN) THEN - WRITE(NLUOUT,FMT=*) 'PREP_IDEAL_CASE: No map projection used.' - ELSE - IF (XRPK == 1.) THEN - WRITE(NLUOUT,FMT=*) 'PREP_IDEAL_CASE: Polar stereo used.' - ELSE IF (XRPK == 0.) THEN - WRITE(NLUOUT,FMT=*) 'PREP_IDEAL_CASE: Mercator used.' - ELSE - WRITE(NLUOUT,FMT=*) 'PREP_IDEAL_CASE: Lambert used, cone factor=',XRPK - END IF - END IF -END IF -! -IF (NVERB >= 5) THEN - WRITE(NLUOUT,FMT=*) 'PREP_IDEAL_CASE: IIB, IJB, IKB=',NIB,NJB,NKB - WRITE(NLUOUT,FMT=*) 'PREP_IDEAL_CASE: IIU, IJU, IKU=',NIU,NJU,NKU -END IF -! -! -!* 28.1 print statistics! -! - ! - CALL SECOND_MNH2(ZTIME2) - XT_START=XT_START+ZTIME2-ZEND - ! - ! Set File Timing OUTPUT - ! - CALL SET_ILUOUT_TIMING(TLUOUT0) - ! - ! Compute global time - ! - CALL TIME_STAT_ll(XT_START,ZTOT) - ! - ! - IMI = 1 - CALL TIME_HEADER_ll(IMI) - ! - CALL TIME_STAT_ll(XT_STORE,ZTOT, ' STORE-FIELDS','=') - CALL TIMING_SEPARATOR('+') - CALL TIMING_SEPARATOR('+') - WRITE(YMI,FMT="(I0)") IMI - CALL TIME_STAT_ll(XT_START,ZTOT, ' MODEL'//YMI,'+') - CALL TIMING_SEPARATOR('+') - CALL TIMING_SEPARATOR('+') - CALL TIMING_SEPARATOR('+') -WRITE(NLUOUT,FMT=*) ' ' -WRITE(NLUOUT,FMT=*) '****************************************************' -WRITE(NLUOUT,FMT=*) '* PREP_IDEAL_CASE: PREP_IDEAL_CASE ENDS CORRECTLY. *' -WRITE(NLUOUT,FMT=*) '****************************************************' -! -CALL FINALIZE_MNH() -! -! -CONTAINS -INCLUDE "th_r_from_thl_rt.func.h" -INCLUDE "compute_frac_ice.func.h" -END PROGRAM PREP_IDEAL_CASE diff --git a/src/mesonh/ext/prep_real_case.f90 b/src/mesonh/ext/prep_real_case.f90 deleted file mode 100644 index 01b3b16db..000000000 --- a/src/mesonh/ext/prep_real_case.f90 +++ /dev/null @@ -1,1421 +0,0 @@ -!MNH_LIC Copyright 1995-2021 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. -!----------------------------------------------------------------- -! ###################### - PROGRAM PREP_REAL_CASE -! ###################### -! -!!**** *PREP_REAL_CASE* - program to write an initial FM file from real case -!! situation. -!! -!! PURPOSE -!! ------- -!! -!! The purpose of this program is to prepare an initial meso-NH file -!! (LFIFM and DESFM files) filled by some fields of a real situation. -!! General data are given by the MESO-NH user in the namelist file -!! 'PRE_REAL1.nam'. The fields are obtained from three sources: -!! - an atmospheric input file, which can be: -!! * an Aladin file, itself obtained from an Arpege file with -!! the Aladin routine "FULLPOS". -!! * a grib file (ECMWF, Grib Arpege or Grib Aladin) -!! * a MESONH file -!! - an physiographic data file. -!! -!! 1) Fields obtained from the Atmospheric file: -!! ----------------------------------------- -!! -!! - the projection parameters (checked with PGD file): -!! reference latitude and longitude -!! parameter of projection -!! angle of rotation of the domain -!! -!! - the horizontal grid definition (checked with PGD file): -!! grid mesh -!! latitude and longitude of the reference point -!! (with data from PRE_REAL1.nam) -!! -!! - thermodynamical 3D and 2D fields: -!! potential temperature -!! vapor mixing ratio -!! -!! - dynamical fields: -!! three components of the wind -!! -!! - reference anelastic state variables: -!! profile of virtual potential temperature -!! profile of dry density -!! Exner function at model top -!! -!! - total dry air mass -!! -!! -!! 2) Fields obtained from the physiographic data file: -!! ------------------------------------------------ -!! -!! - the projection parameters: -!! reference latitude and longitude -!! parameter of projection -!! angle of rotation of the domain -!! -!! - the horizontal grid definition: -!! grid mesh -!! latitude and longitude of the reference point -!! (with data from PRE_REAL1.nam) -!! - physiografic fields: (orographic, vegetation, soil and radiation fields) -!! -!! -!! 3) Data obtained from the namelist file PRE_REAL1.nam: -!! -------------------------------------------------- -!! -!! - type of equations system -!! - vertical grid definition -!! - number of points in x and y directions -!! - level of verbosity -!! - name of the different files -!! -!! -!!** METHOD -!! ------ -!! In this program, once the MESO-NH domain is calculated, all the -!! 2D or 3D fields are computed on the MESO-NH horizontal domain WITH -!! the external points. This is particularly important for the large -!! scale fields during the MESO-NH run. -!! -!! 1) The following PREP_REAL_CASE program: -!! -!! - set default values for global variables which will be written in -!! DESFM file (by calling DEFAULT_DESFM1); lateral boundary conditions -!! are open. -!! -!! - opens the different files (by calling OPEN_PRC_FILES). -!! -!! - initializes physical constants (by calling INI_CST). -!! -!! - initializes the horizontal domain from the data read in the -!! descriptive part of the Aladin file and the directives read in the -!! namelist file (routines READ_GENERAL and SET_SUBDOMAIN in -!! READ_ALL_DATA). This MESO-NH domain is a part of the Aladin domain. -!! -!! - initializes global variables from namelists and the MESO-NH -!! vertical grid definition variables in the namelist file -!! (routine READ_VER_GRID). -!! -!! - initializes the physiographic 2D fields from the physiographic data -!! file, in particular the MESO-NH orography. -!! -!! - reads the 3D and 2D variable fields in the Grib file -!! (routine READ_ALL_DATA_GRIB_CASE), -!! if HATMFILETYPE='GRIBEX': -!! absolute temperature -!! specific humidity -!! horizontal contravariant wind -!! surface pressure -!! large scale orography -!! -!! - reads the 3D and 2D variable fields in the input MESONH file -!! (routine READ_ALL_DATA_MESONH_CASE), if HATMFILETYPE='MESONH': -!! potential temperature -!! vapor mixing ratio -!! horizontal wind -!! other mixing ratios -!! turbulence prognostic and semi-prognostic variables -!! large scale orography -!! -!! - computes some geometric variables (routines SM_GRIDPROJ and METRICS), -!! in particular: -!! * altitude 3D array -!! * metric coefficients -!! * jacobian -!! -!! - initializes MESO-NH thermodynamical fields: -!! * changes of variables (routine VER_PREP_mmmmmm_CASE): -!! absolute temperature --> virtual potential temperature -!! specific humidity --> vapor mixing ratio -!! * interpolates/extrapolates the fields from the large scale -!! orography to the MESO-NH one (routine VER_INT_THERMO in -!! VER_THERMO, by using a shifting function method). -!! in water vapor case, the interpolations are always performed -!! on relative humidity. -!! * the pressure is computed on each grid by integration of the -!! hydrostatic equation from bottom or top. When input atmospheric -!! file is a MESO-NH one, information about the difference between -!! hydrostatic pressure and total pressure is kept and interpolated -!! during the entire PREP_REAL_CASE process. -!! * interpolates the fields to the MESO-NH vertical grid -!! (also by routine VER_INT_THERMO in VER_THERMO). -!! * computes the potential temperature (routine VER_THERMO). -!! * sets to zero the mixing ratios, except the vapor mixing ratio -!! (VER_THERMO). -!! -!! - initializes the reference anelastic state variables (routine SET_REFZ -!! in VER_THERMO). -!! -!! - computes the total dry air mass (routine DRY_MASS in VER_THERMO). -!! -!! - initializes MESO-NH dynamical variables: -!! * changes Aladin contravariant wind into true horizontal wind -!! (in subroutine VER_PREP). -!! * interpolates/extrapolates the momentum from the large scale -!! orography to the MESO-NH one (routine VER_INT_DYN in -!! VER_DYN, by using a shifting function method). -!! * interpolates the fields to the MESO-NH vertical grid -!! (also by routine VER_INT_DYN in VER_DYN). The fields -!! are located on a horizontal Arakawa A-grid, as the Aladin fields. -!! * The momentum is interpolated to the Arakawa C-grid -!! (routine VER_DYN). -!! * A first guess of the vertical momentum, verifying the -!! uncompressible continuity equation and the material lower boundary -!! condition against the ground, is computed (routine WGUESS). -!! * computes the final non-divergent wind field (routine -!! ANEL_BALANCE). -!! -!! - copies the interpolated fields also at t-dt and in the large scale -!! fields (routine INI_PROG_VAR). -!! -!! - writes the DESFM and LFIFM files (routines WRITE_DESFM1 and -!! WRITE_LFIFM1). -!! -!! -!! 2) Some conventions are used in this program and its subroutines because -!! of the number of different grids and fields: -!! -!! - subscripts: -!! * the subscripts I and J are used for all the horizontal grid. -!! * the subcript K is used for the MESO-NH vertical grid (increasing -!! from bottom to top). -!! * the subscript L is used for the Aladin or input Mesonh grids -!! (increasing from bottom to top). -!! -!! - suffixes: -!! * _LS: -!! If used for a geographic or horizontal grid definition variable, -!! this variable is connected to the large horizontal domain. -!! If used for a surface variable, this variable corresponds to -!! the large scale orography, and therefore will be modified. -!! If used for another variable, this variable is discretized -!! on the Aladin or input MESONH file vertical grid -!! (large-scale orography with input vertical discretization, -!! either coming from eta levels or input Gal-Chen grid). -!! * _MX: -!! Such a variable is discretized on the mixed grid. -!! (large-scale orography with output Gal-Chen vertical grid -!! discretization) -!! * _SH: -!! Such a variable is discretized on the shifted grid. -!! (fine orography with a shifted vertical grid, NOT Gal-Chen) -!! * no suffix: -!! The variable is discretized on the MESO-NH grid. -!! (fine orography with output Gal-Chen vertical grid discretization) -!! -!! - additional pre-suffixes: (for pressure, Exner and altitude fields) -!! * MASS: -!! The variable is discretized on a mass point -!! * FLUX: -!! The variable is discretized on a flux point -!! -!! -!! - names of variables: for a physical variable VAR: -!! * pVARs is the variable itself. -!! * pRHODVARs is the variable multiplied by the dry density rhod. -!! * pRHODJVARs is the variable multiplied by the dry density rhod -!! and the Jacobian. -!! * pRVARs is the variable multiplied by rhod_ref, the anelastic -!! reference state dry density and the Jacobian. -!! where p and s are the appropriate prefix and suffix. -!! -!! - allocation of arrays: the arrays are allocated -!! * just before their initialization for the general arrays stored in -!! modules. -!! * in the subroutine in which they are declared for the local arrays -!! in a subroutine. -!! * in the routine in which they are initialized for the arrays -!! defined in the monitor PREP_REAL_CASE. In this case they are in -!! fact passed as pointer to the subroutines to allow their -!! dynamical allocation (exception which confirms the rule: ZJ). -!! -!! -!! EXTERNAL -!! -------- -!! -!! Routine DEFAULT_DESFM1 : to set default values for variables which can be -!! contained in DESFM file. -!! Routine OPEN_PRC_FILES: to open all files. -!! Routine INI_CST : to initialize physical constants. -!! Routine READ_ALL_DATA_GRIB_CASE : to read all input data. -!! Routine READ_ALL_DATA_MESONH_CASE : to read all input data. -!! Routine SM_GRIDPROJ : to compute some grid variables, in case of -!! conformal projection. -!! Routine METRICS : to compute metric coefficients. -!! Routine VER_PREP_GRIBEX_CASE : to prepare the interpolations. -!! Routine VER_PREP_MESONH_CASE : to prepare the interpolations. -!! Routine VER_THERMO : to perform the interpolation of thermodynamical -!! variables. -!! Routine VER_DYN : to perform the interpolation of dynamical -!! variables. -!! Routine INI_PROG_VAR : to initialize the prognostic varaibles not yet -!! initialized -!! Routine WRITE_DESFM1 : to write a DESFM file. -!! Routine WRITE_LFIFM1 : to write a LFIFM file. -!! Routine IO_File_close : to close a FM-file (DESFM + LFIFM). -!! -!! Module MODE_GRIDPROJ : contains conformal projection routines -!! -!! Module MODI_DEFAULT_DESFM1 : interface module for routine DEFAULT_DESFM1 -!! Module MODI_OPEN_PRC_FILES : interface module for routine OPEN_PRC_FILES -!! Module MODI_READ_ALL_DATA_MESONH_CASE : interface module for routine -!! READ_ALL_DATA_MESONH_CASE -!! Module MODI_METRICS : interface module for routine METRICS -!! Module MODI_VER_PREP_GRIBEX_CASE : interface module for routine -!! VER_PREP_GRIBEX_CASE -!! Module MODI_VER_PREP_MESONH_CASE : interface module for routine -!! VER_PREP_MESONH_CASE -!! Module MODI_VER_THERMO : interface module for routine VER_THERMO -!! Module MODI_VER_DYN : interface module for routine VER_DYN -!! Module MODI_INI_PROG_VAR : interface module for routine INI_PROG_VAR -!! Module MODI_WRITE_DESFM1 : interface module for routine WRITE_DESFM1 -!! Module MODI_WRITE_LFIFM1 : interface module for routine WRITE_LFIFM1 -!! -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! Module MODD_CONF : contains configuration variables for all models. -!! NVERB : verbosity level for output-listing -!! Module MODD_CONF1 : contains configuration variables for model 1. -!! NRR : number of moist variables -!! Module MODD_LUNIT : contains logical unit and names of files. -!! Module MODD_LUNIT : contains logical unit and names of files (model1). -!! CINIFILE: name of the FM file which will be used for the MESO-NH run. -!! Module MODD_GRID1 : contains grid variables. -!! XLAT : latitude of the grid points -!! XLON : longitudeof the grid points -!! XXHAT : position xhat in the conformal plane -!! XYHAT : position yhat in the conformal plane -!! XDXHAT : horizontal local meshlength on the conformal plane -!! XDYHAT : horizontal local meshlength on the conformal plane -!! XZS : MESO-NH orography -!! XZZ : altitude -!! XZHAT : height zhat -!! XMAP : map factor -!! Module MODD_LBC1 : contains declaration of lateral boundary conditions -!! CLBCX : X-direction LBC type at left(1) and right(2) boundaries -!! CLBCY : Y-direction LBC type at left(1) and right(2) boundaries -!! Module MODD_PARAM1 : contains declaration of the parameterizations' names -!! -!! REFERENCE -!! --------- -!! -!! Book 2 -!! -!! AUTHOR -!! ------ -!! -!! V.Masson Meteo-France -!! -!! MODIFICATIONS -!! ------------- -!! Original 01/01/95 -!! Sept. 21, 1995 (J.Stein and V.Masson) surface pressure -!! Jan. 09, 1996 (V. Masson) pressure function deduced from -!! hydrostatic pressure -!! Jan. 31, 1996 (V. Masson) possibility to initialize -!! atmospheric fields from MESONH file -!! Mar. 18, 1996 (V. Masson) new vertical extrapolation of Ts -!! in case of initialization with MESONH file -!! Apr 17, 1996 (J. Stein ) change the DEFAULT_DESFM CALL -!! May 25, 1996 (V. Masson) Variable CSTORAGE_TYPE -!! Aug 26, 1996 (V. Masson) Only thinshell approximation is -!! currently available. -!! Sept 24, 1996 (V. Masson) add writing of varaibles for -!! nesting ('DAD_NAME', 'DXRATIO', 'DYRATIO') -!! Oct 11, 1996 (V. Masson) L1D and L2D configurations -!! Oct 28, 1996 (V. Masson) add deallocations and NVERB -!! default set to 1 -!! Dec 02, 1996 (V. Masson) vertical interpolation of -!! surface fields in aladin case -!! Dec 12, 1996 (V. Masson) add LS vertical velocity -!! Jan 16, 1997 (J. Stein) Durran's anelastic system -!! May 07, 1997 (V. Masson) add LS tke -!! Jun 27, 1997 (V. Masson) add absolute pressure -!! Jul 09, 1997 (V. Masson) add namelist NAM_REAL_CONF -!! Jul 10, 1997 (V. Masson) add LS epsilon -!! Aug 25, 1997 (V. Masson) add computing time analysis -!! Jan 20, 1998 (J. Stein) add LB and LS fields -!! Apr, 30, 1998 (V. Masson) Large scale VEG and LAI -!! Jun, 04, 1998 (V. Masson) Large scale D2 and Aladin ISBA -!! files -!! Jun, 04, 1998 (V. Masson) Add new soil interface var. -!! Jan 20, 1999 (J. Stein) add a Boundaries call -!! March 15 1999 (J. Pettre, V. Bousquet and V. Masson) -!! initialization from GRIB files -!! Jul 2000 (F.solmon/V.Masson) Adaptation for patch -!! according to GRIB or MESONH case -!! Nov 22, 2000 (P.Tulet, I. Mallet) initialization -!! from GRIB MOCAGE file -!! Fev 01, 2001 (D.Gazen) add module MODD_NSV for NSV variable -!! Jul 02, 2001 (J.Stein) add LCARTESIAN case -!! Oct 15, 2001 (I.Mallet) allow namelists in different orders -!! Dec 2003 (V.Masson) removes surface calls -!! Jun 01, 2002 (O.Nuissier) filtering of tropical cyclone -!! Aou 09, 2005 (D.Barbary) add CDADATMFILE CDADBOGFILE -!! May 2006 Remove KEPS -!! Feb 02, 2012 (C. Mari) interpolation from MOZART -!! add call to READ_CHEM_NETCDF_CASE & -!! VER_PREP_NETCDF_CASE -!! Mar 2012 Add NAM_NCOUT for netcdf output -!! July 2013 (Bosseur & Filippi) Adds Forefire -!! Mars 2014 (J.Escobar) Missing 'full' UPDATE_METRICS for arp2lfi // run -!! April 2014 (G.TANGUY) Add LCOUPLING -!! 2014 (M.Faivre) -!! Fevr 2015 (M.Moge) Cleaning up -!! Aug 2015 (M.Moge) removing EXTRAPOL on XDXX and XDYY in part 8 -!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 -!! M.Leriche 2015 : add LUSECHEM dans NAM_CH_CONF -!! Feb 02, 2012 (C. Mari & BV) interpolation from CAMS -!! add call to READ_CAMS_NETCDF_CASE & -!! VER_PREP_NETCDF_CASE -!! Modification 01/2016 (JP Pinty) Add LIMA -!! Modification 02/2016 (JP Pinty) Convert CAMS mix ratio to nbr conc -! -!! 06/2016 (G.Delautier) phasage surfex 8 -!! P.Wautelet : 08/07/2016 : removed MNH_NCWRIT define -!! B.VIE 2016 : LIMA -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -! P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list -! P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables -! S. Bielli 02/2019: sea salt: significant sea wave height influences salt emission; 5 salt modes -! P. Wautelet 20/03/2019: missing use MODI_INIT_SALT -! P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine -! T.Nagel 02/2021: add IBM -! P. Wautelet 06/07/2021: use FINALIZE_MNH -!! M. Leriche 26/01/2022: add reading of CAMS reanalysis for chemistry -!! and/or for LIMA -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_CH_M9_n -USE MODD_CH_MNHC_n, ONLY: LUSECHAQ_n=>LUSECHAQ,LUSECHIC_n=>LUSECHIC, LUSECHEM_n=>LUSECHEM -USE MODD_CONF -USE MODD_CONF_n -USE MODD_CST -USE MODD_DIM_n -!UPG*PT -USE MODD_CH_AEROSOL -USE MODD_DUST, ONLY: LDUST, NMODE_DST, CRGUNITD, XINISIG, XINIRADIUS, XN0MIN,& - LDSTCAMS -!UPG*PT - -USE MODD_DYN_n, CPRESOPT_n=>CPRESOPT, LRES_n=>LRES, XRES_n=>XRES , NITR_n=>NITR -USE MODD_FIELD_n -USE MODD_GR_FIELD_n -USE MODD_GRID -USE MODD_GRID_n -USE MODD_HURR_CONF -USE MODD_IBM_LSF, ONLY: CIBM_TYPE, LIBM_LSF, NIBM_SMOOTH, XIBM_SMOOTH -USE MODD_IBM_PARAM_n, ONLY: XIBM_LS -USE MODD_IO, ONLY: TFILEDATA, TFILE_SURFEX -USE MODD_LBC_n -USE MODD_LSFIELD_n -USE MODD_LUNIT, ONLY: TPGDFILE,TLUOUT0,TOUTDATAFILE -USE MODD_LUNIT_n, ONLY: CINIFILE,TINIFILE,TLUOUT -USE MODD_METRICS_n -USE MODD_MNH_SURFEX_n -USE MODD_NESTING -USE MODD_NSV -USE MODD_PARAMETERS -USE MODD_PARAM_n -USE MODD_PARAM_ICE, ONLY: PARAM_ICE_ASSOCIATE -USE MODD_PREP_REAL -USE MODD_REF_n -!UPG*PT -USE MODD_SALT, ONLY: LSALT, NMODE_SLT, CRGUNITS, XINISIG_SLT, XINIRADIUS_SLT, XN0MIN_SLT,& - LSLTCAMS -USE MODD_CH_AERO_n, ONLY: XM3D, XRHOP3D, XSIG3D, XRG3D, XN3D, XCTOTA3D -!UPG*PT -USE MODD_TURB_n -! -USE MODE_EXTRAPOL -use mode_field, only: Alloc_field_scalars, Ini_field_list, Ini_field_scalars -USE MODE_FINALIZE_MNH, only: FINALIZE_MNH -USE MODE_GRIDCART -USE MODE_GRIDPROJ -USE MODE_IO, only: IO_Init -USE MODE_IO_FIELD_READ, only: IO_Field_read -USE MODE_IO_FIELD_WRITE, only: IO_Header_write -USE MODE_IO_FILE, only: IO_File_close, IO_File_open -USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list, IO_File_find_byname -USE MODE_ll -USE MODE_MODELN_HANDLER -USE MODE_MPPDB -USE MODE_MSG -USE MODE_POS -USE MODE_SPLITTINGZ_ll -! -USE MODI_BOUNDARIES -USE MODI_COMPARE_DAD -USE MODI_DEALLOCATE_MODEL1 -USE MODI_DEALLOC_PARA_LL -USE MODI_DEFAULT_DESFM_n -USE MODI_ERROR_ON_TEMPERATURE -USE MODI_IBM_INIT_LS -USE MODI_INI_PROG_VAR -USE MODI_INIT_SALT -USE MODI_LIMA_MIXRAT_TO_NCONC -USE MODI_METRICS -USE MODI_MNHREAD_ZS_DUMMY_n -USE MODI_MNHWRITE_ZS_DUMMY_n -USE MODI_OPEN_PRC_FILES -USE MODI_PREP_SURF_MNH -USE MODI_PRESSURE_IN_PREP -USE MODI_READ_ALL_DATA_GRIB_CASE -USE MODI_READ_ALL_DATA_MESONH_CASE -USE MODI_READ_ALL_NAMELISTS -!UPG*PT -!USE MODI_READ_CAMS_DATA_NETCDF_CASE -!USE MODI_READ_CHEM_DATA_NETCDF_CASE -USE MODI_READ_CHEM_DATA_MOZART_CASE -USE MODI_READ_CHEM_DATA_CAMS_CASE -USE MODI_READ_LIMA_DATA_NETCDF_CASE -USE MODI_AER2LIMA -USE MODI_CH_AER_EQM_INIT_n -!UPG*PT -USE MODI_READ_VER_GRID -USE MODI_SECOND_MNH -USE MODI_SET_REF -USE MODI_UPDATE_METRICS -USE MODI_VER_DYN -USE MODI_VER_PREP_GRIBEX_CASE -USE MODI_VER_PREP_MESONH_CASE -USE MODI_VER_PREP_NETCDF_CASE -USE MODI_VERSION -USE MODI_VER_THERMO -USE MODI_WRITE_DESFM_n -USE MODI_WRITE_LFIFM_n -! -USE MODN_CONF, ONLY: JPHEXT , NHALO -USE MODN_CONFZ -USE MODN_PARAM_LIMA -! -IMPLICIT NONE -! -!* 0.1 Declaration of local variables -! ------------------------------ -! -CHARACTER(LEN=28) :: YATMFILE ! name of the Atmospheric file -CHARACTER(LEN=6) :: YATMFILETYPE! type of the Atmospheric file -CHARACTER(LEN=28) :: YCHEMFILE ! name of the Chemical file -CHARACTER(LEN=6) :: YCHEMFILETYPE! type of the Chemical file -!UP*PT -!CHARACTER(LEN=28) :: YCAMSFILE ! name of the input CAMS file -!CHARACTER(LEN=6) :: YCAMSFILETYPE! type of the input CAMS file -CHARACTER(LEN=28) :: YLIMAFILE ! name of the input MACC file -CHARACTER(LEN=6) :: YLIMAFILETYPE! type of the input MACC file -!UP*PT -CHARACTER(LEN=28) :: YSURFFILE ! name of the Surface file -CHARACTER(LEN=6) :: YSURFFILETYPE! type of the Surface file -CHARACTER(LEN=28) :: YPGDFILE ! name of the physiographic data -! ! file -! -CHARACTER(LEN=28) :: YDAD_NAME ! true name of the atmospheric file -! -!* other variables -! -REAL,DIMENSION(:,:,:), ALLOCATABLE:: ZJ ! Jacobian -! -!* file management variables and counters -! -INTEGER :: ILUOUT0 ! logical unit for listing file -INTEGER :: IPRE_REAL1 ! logical unit for namelist file -INTEGER :: IRESP ! return code in FM routines -LOGICAL :: GFOUND ! Return code when searching namelist -INTEGER :: NIU,NJU,NKU ! Upper bounds in x,y,z directions -! -REAL :: ZSTART, ZEND, ZTIME1, ZTIME2, ZTOT, ZALL ! for computing time analysis -REAL :: ZMISC, ZREAD, ZHORI, ZPREP, ZSURF, ZTHERMO, ZDYN, ZDIAG, ZWRITE -REAL :: ZDG ! diagnostics time in routines -INTEGER :: IINFO_ll ! return code of // routines -! Namelist model variables -CHARACTER(LEN=5) :: CPRESOPT -INTEGER :: NITR -LOGICAL :: LRES -REAL :: XRES -LOGICAL :: LSHIFT ! flag to perform vertical shift or not. -LOGICAL :: LDUMMY_REAL ! flag to read and interpolate - !dummy fields from GRIBex file -INTEGER :: JRR ! loop counter for moist var. -LOGICAL :: LUSECHAQ -LOGICAL :: LUSECHIC -LOGICAL :: LUSECHEM -INTEGER :: JN -! -TYPE(TFILEDATA),POINTER :: TZATMFILE => NULL() -TYPE(TFILEDATA),POINTER :: TZPRE_REAL1FILE => NULL() -! -! -!* 0.3 Declaration of namelists -! ------------------------ -! -NAMELIST/NAM_REAL_CONF/ NVERB, CEQNSYS, CPRESOPT, LSHIFT, LDUMMY_REAL, & - LRES, XRES, NITR,LCOUPLING, NHALO , JPHEXT -! Filtering and balancing of the large-scale and radar tropical cyclone -NAMELIST/NAM_HURR_CONF/ LFILTERING, CFILTERING, & -XLAMBDA, NK, XLATGUESS, XLONGUESS, XBOXWIND, XRADGUESS, NPHIL, NDIAG_FILT, & -NLEVELR0,LBOGUSSING, & -XLATBOG, XLONBOG, XVTMAXSURF, XRADWINDSURF, & -XMAX, XC, XRHO_Z, XRHO_ZZ, XB_0, XBETA_Z, XBETA_ZZ,& -XANGCONV0, XANGCONV1000, XANGCONV2000, & - CDADATMFILE, CDADBOGFILE - NAMELIST/NAM_AERO_CONF/ LORILAM, LINITPM, LDUST, XINIRADIUSI, XINIRADIUSJ,& - XINISIGI, XINISIGJ, XN0IMIN, XN0JMIN, CRGUNIT, CRGUNITD,& - LSALT, CRGUNITS, NMODE_DST, XINISIG, XINIRADIUS, XN0MIN,& -!UPG*PT - XINISIG_SLT, XINIRADIUS_SLT, XN0MIN_SLT, NMODE_SLT, & - LDSTCAMS, LSLTCAMS,CACTCCN,CCLOUD, NMOD_IFN, NMOD_CCN -!UPG*PT - -NAMELIST/NAM_CH_CONF/ LUSECHAQ,LUSECHIC,LUSECHEM -! -NAMELIST/NAM_IBM_LSF/ LIBM_LSF, CIBM_TYPE, NIBM_SMOOTH, XIBM_SMOOTH -! -! name of dad of input FM file -INTEGER :: II, IJ, IGRID, ILENGTH -CHARACTER (LEN=100) :: HCOMMENT -TYPE(LIST_ll), POINTER :: TZFIELDS_ll=>NULL() ! list of fields to exchange -!UPG*PT -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZLBXRHO, ZLBYRHO -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZLBXZZ, ZLBYZZ -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZLBXPABST, ZLBYPABST -INTEGER :: ILBX,ILBY,IIB,IJB,IIE,IJE -!UPG*PT - -!------------------------------------------------------------------------------- -! -CALL MPPDB_INIT() -! -CALL GOTO_MODEL(1,ONOFIELDLIST=.TRUE.) -! -ZDIAG = 0. -CALL SECOND_MNH (ZSTART) -! -ZHORI = 0. -ZSURF = 0. -ZTIME1 = ZSTART -! -!* 1. SET DEFAULT VALUES -! ------------------ -! -CALL VERSION -CPROGRAM='REAL ' -! -CALL ALLOC_FIELD_SCALARS() -CALL PARAM_ICE_ASSOCIATE() -CALL DEFAULT_DESFM_n(1) -NRR=1 -IDX_RVT = 1 -! -!------------------------------------------------------------------------------- -! -!* 2. OPENNING OF THE FILES -! --------------------- -CALL IO_Init() -! -CALL OPEN_PRC_FILES(TZPRE_REAL1FILE,YATMFILE, YATMFILETYPE,TZATMFILE & - ,YCHEMFILE,YCHEMFILETYPE & - ,YSURFFILE,YSURFFILETYPE & - ,YPGDFILE,TPGDFILE & -!UPG*PT -! ,YCAMSFILE,YCAMSFILETYPE) - ,YLIMAFILE,YLIMAFILETYPE) -!UPG*PT -ILUOUT0 = TLUOUT0%NLU -TLUOUT => TLUOUT0 -! -IF (YATMFILETYPE=='MESONH') THEN - LSHIFT = .FALSE. -ELSE IF (YATMFILETYPE=='GRIBEX') THEN - LSHIFT = .TRUE. -ELSE - LSHIFT = .TRUE. - WRITE(ILUOUT0,FMT=*) 'HATMFILETYPE WAS SET TO: '//TRIM(YATMFILETYPE) - WRITE(ILUOUT0,FMT=*) 'ONLY TWO VALUES POSSIBLE FOR HATMFILETYPE:' - WRITE(ILUOUT0,FMT=*) 'EITHER MESONH OR GRIBEX' - WRITE(ILUOUT0,FMT=*) '-> JOB ABORTED' - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_REAL_CASE','') -END IF -! -LCPL_AROME=.FALSE. -LCOUPLING=.FALSE. -! -!------------------------------------------------------------------------------- -! -!* 3. INITIALIZATION OF PHYSICAL CONSTANTS -! ------------------------------------ -! -CALL INI_CST -! -!------------------------------------------------------------------------------- -! -!* 4. READING OF NAMELIST -! ------------------- -! -!* 4.1 reading of configuration variables -! -IPRE_REAL1 = TZPRE_REAL1FILE%NLU -! -CALL INIT_NMLVAR -CALL POSNAM(IPRE_REAL1,'NAM_REAL_CONF',GFOUND,ILUOUT0) -IF (GFOUND) READ(IPRE_REAL1,NAM_REAL_CONF) -CALL POSNAM(IPRE_REAL1,'NAM_PARAM_LIMA',GFOUND,ILUOUT0) -IF (GFOUND) READ(IPRE_REAL1,NAM_PARAM_LIMA) -! -CALL INI_FIELD_LIST(1) -! -CALL INI_FIELD_SCALARS() -! -!* 4.2 reading of values of some configuration variables in namelist -! -! -!JUAN REALZ from prep_surfex -! -IF (YATMFILETYPE == 'GRIBEX') THEN -! -!* 4.1 Vertical Spatial grid -! -CALL INIT_NMLVAR() -CALL READ_VER_GRID(TZPRE_REAL1FILE) -! -CALL IO_Field_read(TPGDFILE,'IMAX',NIMAX) -CALL IO_Field_read(TPGDFILE,'JMAX',NJMAX) -! -NIMAX_ll=NIMAX !! _ll variables are global variables -NJMAX_ll=NJMAX !! but the old names are kept in PRE_IDEA1.nam file -! -CALL SET_JP_ll(JPMODELMAX,JPHEXT,JPVEXT,JPHEXT) -CALL SET_DAD0_ll() -!JUAN 4/04/2014 correction for PREP_REAL_CASE on Gribex files -!CALL SET_DIM_ll(NIMAX_ll, NJMAX_ll, 128) -CALL SET_DIM_ll(NIMAX_ll, NJMAX_ll, NKMAX) -CALL SET_LBX_ll('OPEN',1) -CALL SET_LBY_ll('OPEN', 1) -CALL SET_XRATIO_ll(1, 1) -CALL SET_YRATIO_ll(1, 1) -CALL SET_XOR_ll(1, 1) -CALL SET_XEND_ll(NIMAX_ll+2*JPHEXT, 1) -CALL SET_YOR_ll(1, 1) -CALL SET_YEND_ll(NJMAX_ll+2*JPHEXT, 1) -CALL SET_DAD_ll(0, 1) -!JUANZ -!CALL INI_PARA_ll(IINFO_ll) -CALL INI_PARAZ_ll(IINFO_ll) -!JUANZ - -! -! sizes of arrays of the extended sub-domain -! -CALL GET_DIM_PHYS_ll('B',NIMAX,NJMAX) -!!$CALL GET_DIM_EXT_ll('B',NIU,NJU) -!!$CALL GET_INDICE_ll(NIB,NJB,NIE,NJE) -!!$CALL GET_OR_ll('B',IXOR,IYOR) -ENDIF -!JUAN REALZ -! -LDUMMY_REAL= .FALSE. -LFILTERING= .FALSE. -CFILTERING= 'UVT ' -XLATGUESS= XUNDEF ; XLONGUESS= XUNDEF ; XBOXWIND=XUNDEF; XRADGUESS= XUNDEF -NK=50 ; XLAMBDA=0.2 ; NPHIL=24 -NLEVELR0=15 -NDIAG_FILT=-1 -LBOGUSSING= .FALSE. -XLATBOG= XUNDEF ; XLONBOG= XUNDEF -XVTMAXSURF= XUNDEF ; XRADWINDSURF= XUNDEF -XMAX=16000. ; XC=0.7 ; XRHO_Z=-0.3 ; XRHO_ZZ=0.9 -XB_0=1.65 ; XBETA_Z=-0.5 ; XBETA_ZZ=0.35 -XANGCONV0=0. ; XANGCONV1000=0. ; XANGCONV2000=0. -CDADATMFILE=' ' ; CDADBOGFILE=' ' -! -CALL INIT_NMLVAR -CALL POSNAM(IPRE_REAL1,'NAM_REAL_CONF',GFOUND,ILUOUT0) -IF (GFOUND) READ(IPRE_REAL1,NAM_REAL_CONF) -CALL POSNAM(IPRE_REAL1,'NAM_HURR_CONF',GFOUND,ILUOUT0) -IF (GFOUND) READ(IPRE_REAL1,NAM_HURR_CONF) -CALL POSNAM(IPRE_REAL1,'NAM_CH_CONF',GFOUND,ILUOUT0) -IF (GFOUND) READ(UNIT=IPRE_REAL1,NML=NAM_CH_CONF) -CALL UPDATE_MODD_FROM_NMLVAR -CALL POSNAM(IPRE_REAL1,'NAM_AERO_CONF',GFOUND,ILUOUT0) -IF (GFOUND) READ(IPRE_REAL1,NAM_AERO_CONF) -CALL POSNAM(IPRE_REAL1,'NAM_CONFZ',GFOUND,ILUOUT0) -IF (GFOUND) READ(UNIT=IPRE_REAL1,NML=NAM_CONFZ) -CALL POSNAM(IPRE_REAL1,'NAM_IBM_LSF' ,GFOUND,ILUOUT0) -IF (GFOUND) READ(UNIT=IPRE_REAL1,NML=NAM_IBM_LSF) -! -! Sea salt -CALL INIT_SALT -! -!* 4.3 set soil scheme to ISBA for initialization from GRIB -! -IF (YATMFILETYPE=='GRIBEX') THEN - CLBCX(:) ='OPEN' - CLBCY(:) ='OPEN' -END IF -! -CALL SECOND_MNH(ZTIME2) -ZMISC = ZTIME2 - ZTIME1 -!------------------------------------------------------------------------------- -! -!* 5. READING OF THE INPUT DATA -! ------------------------- -! -ZTIME1 = ZTIME2 -! -IF (YATMFILETYPE=='MESONH') THEN - CALL READ_ALL_DATA_MESONH_CASE(TZPRE_REAL1FILE,YATMFILE,TPGDFILE,YDAD_NAME) -ELSE IF (YATMFILETYPE=='GRIBEX') THEN - IF(LEN_TRIM(YCHEMFILE)>0 .AND. YCHEMFILETYPE=='GRIBEX')THEN - CALL READ_ALL_DATA_GRIB_CASE('ATM1',TZPRE_REAL1FILE,YATMFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL) - ELSE - CALL READ_ALL_DATA_GRIB_CASE('ATM0',TZPRE_REAL1FILE,YATMFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL) - END IF -! - YDAD_NAME=' ' -END IF -! -IF (NIMAX==1 .AND. NJMAX==1) THEN - L1D=.TRUE. - L2D=.FALSE. -ELSE IF (NJMAX==1) THEN - L1D=.FALSE. - L2D=.TRUE. -ELSE - L1D=.FALSE. - L2D=.FALSE. -END IF -! -! UPG*PT -!* 5.1 reading of the input chemical data -! -!IF(LEN_TRIM(YCHEMFILE)>0)THEN -! ! read again Nam_aero_conf -! CALL POSNAM(IPRE_REAL1,'NAM_AERO_CONF',GFOUND,ILUOUT0) -! IF (GFOUND) READ(IPRE_REAL1,NAM_AERO_CONF) -! IF(YCHEMFILETYPE=='GRIBEX') & -! CALL READ_ALL_DATA_GRIB_CASE('CHEM',TZPRE_REAL1FILE,YCHEMFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL) -! IF (YCHEMFILETYPE=='NETCDF') & -! CALL READ_CHEM_DATA_NETCDF_CASE(TZPRE_REAL1FILE,YCHEMFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL) -!END IF -! -!* 5.2 reading the input CAMS data -! -!IF(LEN_TRIM(YCAMSFILE)>0)THEN -! IF(YCAMSFILETYPE=='NETCDF') THEN -! CALL READ_CAMS_DATA_NETCDF_CASE(TZPRE_REAL1FILE,YCAMSFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL) -! ELSE -! CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_REAL_CASE','CANNOT READ CAMS GRIB FILES YET') -! END IF -!END IF -!* 5.1 reading CAMS or MACC files for init LIMA -! -IF(LEN_TRIM(YLIMAFILE)>0)THEN - IF(YLIMAFILETYPE=='NETCDF') THEN - CALL READ_LIMA_DATA_NETCDF_CASE(TZPRE_REAL1FILE,YLIMAFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL) - ELSE - WRITE(ILUOUT0,FMT=*) - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_REAL_CASE','Pb in MACC/CAMS file') - STOP - END IF -END IF -! -!* 5.2 reading of the input chemical data + dusts + salts if needed -! -IF(LEN_TRIM(YCHEMFILE)>0)THEN - ! read again Nam_aero_conf - CALL POSNAM(IPRE_REAL1,'NAM_AERO_CONF',GFOUND,ILUOUT0) - IF (GFOUND) READ(IPRE_REAL1,NAM_AERO_CONF) - IF(YCHEMFILETYPE=='GRIBEX') & - CALL READ_ALL_DATA_GRIB_CASE('CHEM',TZPRE_REAL1FILE,YCHEMFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL) - IF (YCHEMFILETYPE=='MOZART') & - CALL READ_CHEM_DATA_MOZART_CASE(TZPRE_REAL1FILE,YCHEMFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL) - IF (YCHEMFILETYPE=='CAMSEU') & - CALL READ_CHEM_DATA_CAMS_CASE(TZPRE_REAL1FILE,YCHEMFILE,TPGDFILE,ZHORI,NVERB, & - LDUMMY_REAL,LUSECHEM) -END IF - -!UPG*PT -! -CALL IO_File_close(TZPRE_REAL1FILE) -! -CALL SECOND_MNH(ZTIME2) -ZREAD = ZTIME2 - ZTIME1 - ZHORI -!------------------------------------------------------------------------------- -! -CALL IO_File_add2list(TINIFILE,CINIFILE,'MNH','WRITE',KLFITYPE=1,KLFIVERB=NVERB) -CALL IO_File_open(TINIFILE) -! -ZTIME1=ZTIME2 -! -!* 6. CONFIGURATION VARIABLES -! ----------------------- -! -!* 6.1 imposed values of some other configuration variables -! -CDCONV='NONE' -CSCONV='NONE' -CRAD='NONE' -CCONF='START' -NRIMX=6 -NRIMY=6 -LHORELAX_UVWTH=.TRUE. -LHORELAX_RV=LUSERV -LHORELAX_RC=LUSERC -LHORELAX_RR=LUSERR -LHORELAX_RI=LUSERI -LHORELAX_RS=LUSERS -LHORELAX_RG=LUSERG -LHORELAX_RH=LUSERH -LHORELAX_SV(:)=.FALSE. -LHORELAX_SVC2R2 = (NSV_C2R2 > 0) -LHORELAX_SVC1R3 = (NSV_C1R3 > 0) -LHORELAX_SVLIMA = (NSV_LIMA > 0) -LHORELAX_SVELEC = (NSV_ELEC > 0) -LHORELAX_SVCHEM = (NSV_CHEM > 0) -LHORELAX_SVCHIC = (NSV_CHIC > 0) -LHORELAX_SVDST = (NSV_DST > 0) -LHORELAX_SVSLT = (NSV_SLT > 0) -LHORELAX_SVAER = (NSV_AER > 0) -LHORELAX_SVPP = (NSV_PP > 0) -#ifdef MNH_FOREFIRE -LHORELAX_SVFF = (NSV_FF > 0) -#endif -LHORELAX_SVCS = (NSV_CS > 0) - -LHORELAX_SVLG = .FALSE. -LHORELAX_SV(1:NSV)=.TRUE. -IF ( CTURB /= 'NONE') THEN - LHORELAX_TKE = .TRUE. -ELSE - LHORELAX_TKE = .FALSE. -END IF -! -! -CSTORAGE_TYPE='TT' -!------------------------------------------------------------------------------- -! -!* 8. COMPUTATION OF GEOMETRIC VARIABLES -! ---------------------------------- -! -ZTIME1 = ZTIME2 -! -ALLOCATE(XMAP(SIZE(XXHAT),SIZE(XYHAT))) -ALLOCATE(XLAT(SIZE(XXHAT),SIZE(XYHAT))) -ALLOCATE(XLON(SIZE(XXHAT),SIZE(XYHAT))) -ALLOCATE(XDXHAT(SIZE(XXHAT))) -ALLOCATE(XDYHAT(SIZE(XYHAT))) -ALLOCATE(XZZ(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT))) -ALLOCATE(ZJ(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT))) -! -IF (LCARTESIAN) THEN - CALL SM_GRIDCART(XXHAT,XYHAT,XZHAT,XZS,LSLEVE,XLEN1,XLEN2,XZSMT,XDXHAT,XDYHAT,XZZ,ZJ) - XMAP=1. -ELSE - CALL SM_GRIDPROJ(XXHAT,XYHAT,XZHAT,XZS, & - LSLEVE,XLEN1,XLEN2,XZSMT,XLATORI,XLONORI, & - XMAP,XLAT,XLON,XDXHAT,XDYHAT,XZZ,ZJ ) -END IF -! -CALL MPPDB_CHECK2D(XZS,"prep_real_case8:XZS",PRECISION) -CALL MPPDB_CHECK2D(XMAP,"prep_real_case8:XMAP",PRECISION) -CALL MPPDB_CHECK2D(XLAT,"prep_real_case8:XLAT",PRECISION) -CALL MPPDB_CHECK2D(XLON,"prep_real_case8:XLON",PRECISION) -CALL MPPDB_CHECK3D(XZZ,"prep_real_case8:XZZ",PRECISION) -CALL MPPDB_CHECK3D(ZJ,"prep_real_case8:ZJ",PRECISION) -! -ALLOCATE(XDXX(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT))) -ALLOCATE(XDYY(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT))) -ALLOCATE(XDZX(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT))) -ALLOCATE(XDZY(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT))) -ALLOCATE(XDZZ(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT))) -! -!20131024 add update halo -!=> corrects on PDXX calculation in metrics and XDXX !! -CALL ADD3DFIELD_ll( TZFIELDS_ll, XZZ, 'PREP_REAL_CASE::XZZ' ) -CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll) -CALL CLEANLIST_ll(TZFIELDS_ll) -! -CALL METRICS(XMAP,XDXHAT,XDYHAT,XZZ,XDXX,XDYY,XDZX,XDZY,XDZZ) -! -CALL MPPDB_CHECK3D(XDXX,"prc8-beforeupdate_metrics:PDXX",PRECISION) -CALL MPPDB_CHECK3D(XDYY,"prc8-beforeupdate_metrics:PDYY",PRECISION) -CALL MPPDB_CHECK3D(XDZX,"prc8-beforeupdate_metrics:PDZX",PRECISION) -CALL MPPDB_CHECK3D(XDZY,"prc8-beforeupdate_metrics:PDZY",PRECISION) -! -CALL UPDATE_METRICS(CLBCX,CLBCY,XDXX,XDYY,XDZX,XDZY,XDZZ) -! -!20131112 add update_halo for XDYY and XDZY!! -CALL ADD3DFIELD_ll( TZFIELDS_ll, XDXX, 'PREP_REAL_CASE::XDXX' ) -CALL ADD3DFIELD_ll( TZFIELDS_ll, XDZX, 'PREP_REAL_CASE::XDZX' ) -CALL ADD3DFIELD_ll( TZFIELDS_ll, XDYY, 'PREP_REAL_CASE::XDYY' ) -CALL ADD3DFIELD_ll( TZFIELDS_ll, XDZY, 'PREP_REAL_CASE::XDZY' ) -CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll) -CALL CLEANLIST_ll(TZFIELDS_ll) - -!CALL EXTRAPOL('W',XDXX,XDZX) -!CALL EXTRAPOL('S',XDYY,XDZY) - -CALL SECOND_MNH(ZTIME2) - -ZMISC = ZMISC + ZTIME2 - ZTIME1 -!------------------------------------------------------------------------------- -! -!* 9. PREPARATION OF THE VERTICAL SHIFT AND INTERPOLATION -! --------------------------------------------------- -! -ZTIME1 = ZTIME2 -! -IF (YATMFILETYPE=='GRIBEX') THEN - CALL VER_PREP_GRIBEX_CASE('ATM ',ZDG) -ELSE IF (YATMFILETYPE=='MESONH') THEN - CALL VER_PREP_MESONH_CASE(ZDG) -END IF -! -IF (LEN_TRIM(YCHEMFILE)>0 .AND. YCHEMFILETYPE=='GRIBEX') THEN - CALL VER_PREP_GRIBEX_CASE('CHEM',ZDG) -END IF -!UPG*PT -!IF ((LEN_TRIM(YCHEMFILE)>0 .AND. YCHEMFILETYPE=='NETCDF') .OR. & -! (LEN_TRIM(YCAMSFILE)>0 .AND. YCAMSFILETYPE=='NETCDF')) THEN -! CALL VER_PREP_NETCDF_CASE(ZDG) -!END IF -IF (LEN_TRIM(YCHEMFILE)>0 .AND. ((YCHEMFILETYPE=='MOZART').OR. & - (YCHEMFILETYPE=='CAMSEU'))) THEN - CALL VER_PREP_NETCDF_CASE(ZDG,XSV_LS) - - DEALLOCATE(XSV_LS) -END IF -! -IF (LEN_TRIM(YLIMAFILE)>0 .AND. YLIMAFILETYPE=='NETCDF') THEN - CALL VER_PREP_NETCDF_CASE(ZDG,XSV_LS_LIMA) - DEALLOCATE(XSV_LS_LIMA) -END IF -!UPG*PT -! -CALL SECOND_MNH(ZTIME2) -ZPREP = ZTIME2 - ZTIME1 - ZDG -ZDIAG = ZDIAG + ZDG -!------------------------------------------------------------------------------- -! -!* 10. VERTICAL INTERPOLATION OF ALL THERMODYNAMICAL VARIABLES -! ------------------------------------------------------- -! -ZTIME1 = ZTIME2 -! -ALLOCATE(XPSURF(SIZE(XXHAT),SIZE(XYHAT))) -! -CALL EXTRAPOL('E',XEXNTOP2D) -IF (YATMFILETYPE=='GRIBEX') THEN - CALL VER_THERMO(TINIFILE,LSHIFT,XTHV_MX,XR_MX,XZS_LS,XZSMT_LS,XZMASS_MX,XZFLUX_MX,XPMHP_MX,ZJ, & - XDXX,XDYY,XEXNTOP2D,XPSURF,ZDG ) -ELSE IF (YATMFILETYPE=='MESONH') THEN - CALL VER_THERMO(TINIFILE,LSHIFT,XTHV_MX,XR_MX,XZS_LS,XZSMT_LS,XZMASS_MX,XZFLUX_MX,XPMHP_MX,ZJ, & - XDXX,XDYY,XEXNTOP2D,XPSURF,ZDG, & - XLSTH_MX,XLSRV_MX ) -END IF -! -CALL SECOND_MNH(ZTIME2) -ZTHERMO = ZTIME2 - ZTIME1 - ZDG -ZDIAG = ZDIAG + ZDG -!------------------------------------------------------------------------------- -! -!* 12. VERTICAL INTERPOLATION OF DYNAMICAL VARIABLES -! --------------------------------------------- -! -ZTIME1 = ZTIME2 -IF (YATMFILETYPE=='GRIBEX') THEN - CALL VER_DYN(LSHIFT,XU_MX,XV_MX,XW_MX,XRHOD_MX,XZFLUX_MX,XZMASS_MX,XZS_LS, & - XDXX,XDYY,XDZZ,XDZX,XDZY,ZJ,YATMFILETYPE ) -ELSE IF (YATMFILETYPE=='MESONH') THEN - CALL VER_DYN(LSHIFT,XU_MX,XV_MX,XW_MX,XRHOD_MX,XZFLUX_MX,XZMASS_MX,XZS_LS, & - XDXX,XDYY,XDZZ,XDZX,XDZY,ZJ,YATMFILETYPE, & - XLSU_MX,XLSV_MX,XLSW_MX ) -END IF -! -! -IF (ALLOCATED(XTHV_MX)) DEALLOCATE(XTHV_MX) -IF (ALLOCATED(XR_MX)) DEALLOCATE(XR_MX) -IF (ALLOCATED(XPMHP_MX)) DEALLOCATE(XPMHP_MX) -IF (ALLOCATED(XU_MX)) DEALLOCATE(XU_MX) -IF (ALLOCATED(XV_MX)) DEALLOCATE(XV_MX) -IF (ALLOCATED(XW_MX)) DEALLOCATE(XW_MX) -IF (ALLOCATED(XLSTH_MX)) DEALLOCATE(XLSTH_MX) -IF (ALLOCATED(XLSRV_MX)) DEALLOCATE(XLSRV_MX) -IF (ALLOCATED(XLSU_MX)) DEALLOCATE(XLSU_MX) -IF (ALLOCATED(XLSV_MX)) DEALLOCATE(XLSV_MX) -IF (ALLOCATED(XLSW_MX)) DEALLOCATE(XLSW_MX) -IF (ALLOCATED(XZFLUX_MX)) DEALLOCATE(XZFLUX_MX) -IF (ALLOCATED(XZMASS_MX)) DEALLOCATE(XZMASS_MX) -IF (ALLOCATED(XRHOD_MX)) DEALLOCATE(XRHOD_MX) -IF (ALLOCATED(XEXNTOP2D)) DEALLOCATE(XEXNTOP2D) -IF (ALLOCATED(XZS_LS)) DEALLOCATE(XZS_LS) -IF (ALLOCATED(XZSMT_LS)) DEALLOCATE(XZSMT_LS) -! -!------------------------------------------------------------------------------- -! -!* 13. ANELASTIC CORRECTION -! -------------------- -! -CALL PRESSURE_IN_PREP(XDXX,XDYY,XDZX,XDZY,XDZZ) -! -CALL SECOND_MNH(ZTIME2) -ZDYN = ZTIME2 - ZTIME1 -! -!------------------------------------------------------------------------------- -! -!* 14. INITIALIZATION OF THE REMAINING PROGNOSTIC VARIABLES (COPIES) -! ------------------------------------------------------------- -! -ZTIME1 = ZTIME2 -! -IF(LEN_TRIM(YCHEMFILE)>0 .AND. YCHEMFILETYPE=='MESONH')THEN - CALL INI_PROG_VAR(XTKE_MX,XSV_MX,YCHEMFILE) - LHORELAX_SVCHEM = (NSV_CHEM > 0) - LHORELAX_SVCHIC = (NSV_CHIC > 0) - LHORELAX_SVDST = (NSV_DST > 0) - LHORELAX_SVSLT = (NSV_SLT > 0) - LHORELAX_SVAER = (NSV_AER > 0) -ELSE -! -!UPG*PT -!IF (LEN_TRIM(YCAMSFILE)>0 .AND. YCAMSFILETYPE=='NETCDF') THEN -IF (LEN_TRIM(YLIMAFILE)>0 .AND. YLIMAFILETYPE=='NETCDF') THEN -!UPG*PT - CALL LIMA_MIXRAT_TO_NCONC(XPABST, XTHT, XRT(:,:,:,1), XSV_MX) -END IF -! - CALL INI_PROG_VAR(XTKE_MX,XSV_MX) -END IF -! - -! Initialization of ORILAM variables -IF (LORILAM) THEN - IF (.NOT.(ASSOCIATED(XN3D))) ALLOCATE(XN3D(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),JPMODE)) - IF (.NOT.(ASSOCIATED(XRG3D))) ALLOCATE(XRG3D(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),JPMODE)) - IF (.NOT.(ASSOCIATED(XSIG3D))) ALLOCATE(XSIG3D(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),JPMODE)) - IF (.NOT.(ASSOCIATED(XRHOP3D))) ALLOCATE(XRHOP3D(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),JPMODE)) - IF (.NOT.(ASSOCIATED(XM3D))) ALLOCATE(XM3D(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),JPMODE*3)) - IF (.NOT.(ASSOCIATED(XCTOTA3D))) & - ALLOCATE(XCTOTA3D(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),NSP+NCARB+NSOA,JPMODE)) - - CALL CH_AER_EQM_INIT_n(XSVT(:,:,:,NSV_CHEMBEG:NSV_CHEMEND),& - XSVT(:,:,:,NSV_AERBEG:NSV_AEREND),& - XM3D,XRHOP3D,XSIG3D,& - XRG3D,XN3D, XRHODREF, XCTOTA3D) -END IF -! -! Initialization LIMA variables by ORILAM -IF (CCLOUD == 'LIMA' .AND. ((LORILAM).OR.(LDUST).OR.(LSALT))) THEN - - ! Init LIMA by ORILAM - CALL AER2LIMA(XSVT, XRHODREF, XRT(:,:,:,1), XPABST, XTHT,XZZ) - - ! Init LB LIMA by ORILAM - ALLOCATE(ZLBXRHO(SIZE(XLBXSVM,1), SIZE(XLBXSVM,2), SIZE(XLBXSVM,3))) - ALLOCATE(ZLBYRHO(SIZE(XLBYSVM,1), SIZE(XLBYSVM,2), SIZE(XLBYSVM,3))) - ALLOCATE(ZLBXPABST(SIZE(XLBXSVM,1), SIZE(XLBXSVM,2), SIZE(XLBXSVM,3))) - ALLOCATE(ZLBYPABST(SIZE(XLBYSVM,1), SIZE(XLBYSVM,2), SIZE(XLBYSVM,3))) - ALLOCATE(ZLBXZZ(SIZE(XLBXSVM,1), SIZE(XLBXSVM,2), SIZE(XLBXSVM,3))) - ALLOCATE(ZLBYZZ(SIZE(XLBYSVM,1), SIZE(XLBYSVM,2), SIZE(XLBYSVM,3))) - - ILBX=SIZE(XLBXSVM,1)/2-JPHEXT - ILBY=SIZE(XLBYSVM,2)/2-JPHEXT - - CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) - - ZLBXRHO(1:ILBX+1,:,:) = XRHODREF(IIB-1:IIB-1+ILBX,:,:) - ZLBXRHO(ILBX+2:2*ILBX+2,:,:) = XRHODREF(IIE+1-ILBX:IIE+1,:,:) - ZLBYRHO(:,1:ILBY+1,:) = XRHODREF(:,IJB-1:IJB-1+ILBY,:) - ZLBYRHO(:,ILBY+2:2*ILBY+2,:) = XRHODREF(:,IJE+1-ILBY:IJE+1,:) - ZLBXPABST(1:ILBX+1,:,:) = XPABST(IIB-1:IIB-1+ILBX,:,:) - ZLBXPABST(ILBX+2:2*ILBX+2,:,:) = XPABST(IIE+1-ILBX:IIE+1,:,:) - ZLBYPABST(:,1:ILBY+1,:) = XPABST(:,IJB-1:IJB-1+ILBY,:) - ZLBYPABST(:,ILBY+2:2*ILBY+2,:) = XPABST(:,IJE+1-ILBY:IJE+1,:) - ZLBXZZ(1:ILBX+1,:,:) = XZZ(IIB-1:IIB-1+ILBX,:,:) - ZLBXZZ(ILBX+2:2*ILBX+2,:,:) = XZZ(IIE+1-ILBX:IIE+1,:,:) - ZLBYZZ(:,1:ILBY+1,:) = XZZ(:,IJB-1:IJB-1+ILBY,:) - ZLBYZZ(:,ILBY+2:2*ILBY+2,:) = XZZ(:,IJE+1-ILBY:IJE+1,:) - - CALL AER2LIMA(XLBXSVM, ZLBXRHO, XLBXRM(:,:,:,1), ZLBXPABST, XLBXTHM, ZLBXZZ) - CALL AER2LIMA(XLBYSVM, ZLBYRHO, XLBYRM(:,:,:,1), ZLBYPABST, XLBYTHM, ZLBYZZ) - - DEALLOCATE(ZLBXRHO) - DEALLOCATE(ZLBYRHO) - DEALLOCATE(ZLBXPABST) - DEALLOCATE(ZLBYPABST) - DEALLOCATE(ZLBXZZ) - DEALLOCATE(ZLBYZZ) - -END IF -! -IF (ALLOCATED(XSV_MX)) DEALLOCATE(XSV_MX) -IF (ALLOCATED(XTKE_MX)) DEALLOCATE(XTKE_MX) -! -CALL BOUNDARIES ( & - 0.,CLBCX,CLBCY,NRR,NSV,1, & - XLBXUM,XLBXVM,XLBXWM,XLBXTHM,XLBXTKEM,XLBXRM,XLBXSVM, & - XLBYUM,XLBYVM,XLBYWM,XLBYTHM,XLBYTKEM,XLBYRM,XLBYSVM, & - XLBXUM,XLBXVM,XLBXWM,XLBXTHM,XLBXTKEM,XLBXRM,XLBXSVM, & - XLBYUM,XLBYVM,XLBYWM,XLBYTHM,XLBYTKEM,XLBYRM,XLBYSVM, & - XRHODJ,XRHODREF, & - XUT, XVT, XWT, XTHT, XTKET, XRT, XSVT, XSRCT ) -! -CALL SECOND_MNH(ZTIME2) -ZMISC = ZMISC + ZTIME2 - ZTIME1 -! -!------------------------------------------------------------------------------- -! -!* 15. Error on temperature during interpolations -! ------------------------------------------ -! -ZTIME1 = ZTIME2 -! -IF (YATMFILETYPE=='GRIBEX' .AND. NVERB>1) THEN - CALL ERROR_ON_TEMPERATURE(XT_LS,XPMASS_LS,XPABST,XPS_LS,XPSURF) -END IF -! -IF (YATMFILETYPE=='GRIBEX') THEN - DEALLOCATE(XT_LS) - DEALLOCATE(XPMASS_LS) - DEALLOCATE(XPS_LS) -END IF -! -IF (ALLOCATED(XPSURF)) DEALLOCATE(XPSURF) -! -CALL SECOND_MNH(ZTIME2) -ZDIAG = ZDIAG + ZTIME2 - ZTIME1 -!------------------------------------------------------------------------------- -! -!* 16. INITIALIZE LEVELSET FOR IBM -! --------------------------- -! -IF (LIBM_LSF) THEN - ! - IF (.NOT.LCARTESIAN) THEN - CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_IDEAL_CASE','IBM can only be used with cartesian coordinates') - ENDIF - ! - CALL GET_DIM_EXT_ll('B',NIU,NJU) - NKU=NKMAX+2*JPVEXT - ! - ALLOCATE(XIBM_LS(NIU,NJU,NKU,4)) - ! - CALL IBM_INIT_LS(XIBM_LS) - ! -ENDIF -! -!------------------------------------------------------------------------------- -! -!* 17. WRITING OF THE MESO-NH FM-FILE -! ------------------------------ -! -ZTIME1 = ZTIME2 -! -CSTORAGE_TYPE='TT' -IF (YATMFILETYPE=='GRIBEX') THEN - CSURF = "EXTE" - DO JRR=1,NRR - IF (JRR==1) THEN - LUSERV=.TRUE. - IDX_RVT = JRR - END IF - IF (JRR==2) THEN - LUSERC=.TRUE. - IDX_RCT = JRR - END IF - IF (JRR==3) THEN - LUSERR=.TRUE. - IDX_RRT = JRR - END IF - IF (JRR==4) THEN - LUSERI=.TRUE. - IDX_RIT = JRR - END IF - IF (JRR==5) THEN - LUSERS=.TRUE. - IDX_RST = JRR - END IF - IF (JRR==6) THEN - LUSERG=.TRUE. - IDX_RGT = JRR - END IF - IF (JRR==7) THEN - LUSERH=.TRUE. - IDX_RHT = JRR - END IF - END DO -END IF -! -CALL WRITE_DESFM_n(1,TINIFILE) -CALL IO_Header_write(TINIFILE,HDAD_NAME=YDAD_NAME) -CALL WRITE_LFIFM_n(TINIFILE,YDAD_NAME) -! -CALL SECOND_MNH(ZTIME2) -ZWRITE = ZTIME2 - ZTIME1 -! -!------------------------------------------------------------------------------- -! -!* 18. OROGRAPHIC and DUMMY PHYSIOGRAPHIC FIELDS -! ----------------------------------------- -! -!* reading in the PGD file -! -CALL MNHREAD_ZS_DUMMY_n(TPGDFILE) -! -!* writing in the output file -! -TOUTDATAFILE => TINIFILE -CALL MNHWRITE_ZS_DUMMY_n(TINIFILE) -! -CALL DEALLOCATE_MODEL1(3) -! -IF (YATMFILETYPE=='MESONH'.AND. YATMFILE/=YPGDFILE) THEN - CALL IO_File_find_byname(TRIM(YATMFILE),TZATMFILE,IRESP) - CALL IO_File_close(TZATMFILE) -END IF -!------------------------------------------------------------------------------- -! -!* 19. INTERPOLATION OF SURFACE VARIABLES -! ---------------------------------- -! -IF (.NOT. LCOUPLING ) THEN - ZTIME1 = ZTIME2 -! - IF (CSURF=="EXTE") THEN - IF (YATMFILETYPE/='MESONH') THEN - CALL SURFEX_ALLOC_LIST(1) - YSURF_CUR => YSURF_LIST(1) - CALL READ_ALL_NAMELISTS(YSURF_CUR,'MESONH','PRE',.FALSE.) - ENDIF - CALL GOTO_SURFEX(1) - TFILE_SURFEX => TINIFILE - CALL PREP_SURF_MNH(YSURFFILE,YSURFFILETYPE) - NULLIFY(TFILE_SURFEX) - ENDIF -! - CALL SECOND_MNH(ZTIME2) - ZSURF = ZSURF + ZTIME2 - ZTIME1 -ENDIF -! -!------------------------------------------------------------------------------- -! -!* 20. EPILOGUE -! -------- -! -WRITE(ILUOUT0,*) -WRITE(ILUOUT0,*) -WRITE(ILUOUT0,*) -WRITE(ILUOUT0,*) '**************************************************' -WRITE(ILUOUT0,*) '* PREP_REAL_CASE: PREP_REAL_CASE ends correctly. *' -WRITE(ILUOUT0,*) '**************************************************' -WRITE(ILUOUT0,*) -! -!------------------------------------------------------------------------------- -! -CALL SECOND_MNH (ZEND) -! -ZTOT = ZEND - ZSTART ! for computing time analysis -! -ZALL = ZMISC + ZREAD + ZHORI + ZPREP + ZTHERMO + ZSURF + ZDYN + ZDIAG + ZWRITE -! -WRITE(ILUOUT0,*) -WRITE(ILUOUT0,*) ' ------------------------------------------------------------ ' -WRITE(ILUOUT0,*) '| |' -WRITE(ILUOUT0,*) '| COMPUTING TIME ANALYSIS in PREP_REAL_CASE |' -WRITE(ILUOUT0,*) '| |' -WRITE(ILUOUT0,*) '|------------------------------------------------------------|' -WRITE(ILUOUT0,*) '| | | |' -WRITE(ILUOUT0,*) '| ROUTINE NAME | CPU-TIME | PERCENTAGE % |' -WRITE(ILUOUT0,*) '| | | |' -WRITE(ILUOUT0,*) '|---------------------|-------------------|------------------|' -WRITE(ILUOUT0,*) '| | | |' -WRITE(UNIT=ILUOUT0,FMT=2) ZREAD, 100.*ZREAD/ZTOT -WRITE(UNIT=ILUOUT0,FMT=9) ZHORI, 100.*ZHORI/ZTOT -WRITE(UNIT=ILUOUT0,FMT=3) ZPREP, 100.*ZPREP/ZTOT -WRITE(UNIT=ILUOUT0,FMT=4) ZTHERMO, 100.*ZTHERMO/ZTOT -WRITE(UNIT=ILUOUT0,FMT=6) ZDYN, 100.*ZDYN/ZTOT -WRITE(UNIT=ILUOUT0,FMT=7) ZDIAG, 100.*ZDIAG/ZTOT -WRITE(UNIT=ILUOUT0,FMT=8) ZWRITE, 100.*ZWRITE/ZTOT -WRITE(UNIT=ILUOUT0,FMT=1) ZMISC, 100.*ZMISC/ZTOT -WRITE(UNIT=ILUOUT0,FMT=5) ZSURF, 100.*ZSURF/ZTOT -! -WRITE(UNIT=ILUOUT0,FMT=10) ZTOT , 100.*ZALL/ZTOT -WRITE(ILUOUT0,*) ' ------------------------------------------------------------ ' -! -! FORMATS -! ------- -! -2 FORMAT(' | READING OF DATA | ',F8.3,' | ',F8.3,' |') -9 FORMAT(' | HOR. INTERPOLATIONS | ',F8.3,' | ',F8.3,' |') -3 FORMAT(' | VER_PREP | ',F8.3,' | ',F8.3,' |') -4 FORMAT(' | VER_THERMO | ',F8.3,' | ',F8.3,' |') -6 FORMAT(' | VER_DYN | ',F8.3,' | ',F8.3,' |') -7 FORMAT(' | DIAGNOSTICS | ',F8.3,' | ',F8.3,' |') -8 FORMAT(' | WRITE | ',F8.3,' | ',F8.3,' |') -1 FORMAT(' | MISCELLANEOUS | ',F8.3,' | ',F8.3,' |') -5 FORMAT(' | SURFACE | ',F8.3,' | ',F8.3,' |') -10 FORMAT(' | PREP_REAL_CASE | ',F8.3,' | ',F8.3,' |') -! -!------------------------------------------------------------------------------- -! -IF (LEN_TRIM(YDAD_NAME)>0) THEN - WRITE(ILUOUT0,*) ' ' - WRITE(ILUOUT0,*) ' ------------------------------------------------------------' - WRITE(ILUOUT0,*) '| Nesting allowed |' - WRITE(ILUOUT0,*) '| DAD_NAME="',YDAD_NAME,'" |' - WRITE(ILUOUT0,*) ' ------------------------------------------------------------' - WRITE(ILUOUT0,*) ' ' -ELSE - WRITE(ILUOUT0,*) ' ' - WRITE(ILUOUT0,*) ' ------------------------------------------------------------' - WRITE(ILUOUT0,*) '| Nesting not allowed with a larger-scale model. |' - WRITE(ILUOUT0,*) '| The new file can only be used as model number 1 |' - WRITE(ILUOUT0,*) ' ------------------------------------------------------------' - WRITE(ILUOUT0,*) ' ' -END IF -! -!------------------------------------------------------------------------------- -! -CALL IO_File_close(TINIFILE) -CALL IO_File_close(TPGDFILE) -! -CALL FINALIZE_MNH() -! -!------------------------------------------------------------------------------- -! -CONTAINS - -SUBROUTINE INIT_NMLVAR -CPRESOPT=CPRESOPT_n -LRES=LRES_n -XRES=XRES_n -NITR=NITR_n -LUSECHAQ=LUSECHAQ_n -LUSECHIC=LUSECHIC_n -LUSECHEM=LUSECHEM_n -END SUBROUTINE INIT_NMLVAR - -SUBROUTINE UPDATE_MODD_FROM_NMLVAR -CPRESOPT_n=CPRESOPT -LRES_n=LRES -XRES_n=XRES -NITR_n=NITR -LUSECHAQ_n=LUSECHAQ -LUSECHIC_n=LUSECHIC -LUSECHEM_n=LUSECHEM -END SUBROUTINE UPDATE_MODD_FROM_NMLVAR - -END PROGRAM PREP_REAL_CASE diff --git a/src/mesonh/ext/resolved_cloud.f90 b/src/mesonh/ext/resolved_cloud.f90 deleted file mode 100644 index de801f6af..000000000 --- a/src/mesonh/ext/resolved_cloud.f90 +++ /dev/null @@ -1,1136 +0,0 @@ -!MNH_LIC Copyright 1994-2021 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. -!----------------------------------------------------------------- -! ########################## - MODULE MODI_RESOLVED_CLOUD -! ########################## -INTERFACE - SUBROUTINE RESOLVED_CLOUD ( HCLOUD, HACTCCN, HSCONV, HMF_CLOUD, & - KRR, KSPLITR, KSPLITG, KMI, KTCOUNT, & - HLBCX, HLBCY, TPFILE, HRAD, HTURBDIM, & - OSUBG_COND, OSIGMAS, HSUBG_AUCV, & - PTSTEP, PZZ, PRHODJ, PRHODREF, PEXNREF, & - PPABST, PTHT, PRT, PSIGS, PSIGQSAT, PMFCONV, & - PTHM, PRCM, PPABSTT, & - PW_ACT,PDTHRAD, PTHS, PRS, PSVT, PSVS, PSRCS, PCLDFR,& - PICEFR, & - PCIT, OSEDIC, OACTIT, OSEDC, OSEDI, & - ORAIN, OWARM, OHHONI, OCONVHG, & - PCF_MF,PRC_MF, PRI_MF, & - PINPRC,PINPRC3D,PINPRR,PINPRR3D, PEVAP3D, & - PINPRS,PINPRS3D,PINPRG,PINPRG3D,PINPRH,PINPRH3D, & - PSOLORG,PMI, & - PSPEEDC, PSPEEDR, PSPEEDS, PSPEEDG, PSPEEDH, & - PINDEP, PSUPSAT, PNACT, PNPRO,PSSPRO, PRAINFR, & - PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF, & - PSEA,PTOWN ) -! -USE MODD_IO, ONLY: TFILEDATA -! -CHARACTER(LEN=4), INTENT(IN) :: HCLOUD ! kind of cloud -CHARACTER(LEN=4), INTENT(IN) :: HACTCCN ! kind of CCN activation scheme - ! paramerization -CHARACTER(LEN=4), INTENT(IN) :: HSCONV ! Shallow convection scheme -CHARACTER(LEN=4), INTENT(IN) :: HMF_CLOUD! Type of statistical cloud -INTEGER, INTENT(IN) :: KRR ! Number of moist variables -INTEGER, INTENT(IN) :: KSPLITR ! Number of small time step - ! integrations for rain sedimendation -INTEGER, INTENT(IN) :: KSPLITG ! Number of small time step - ! integrations for ice sedimendation -INTEGER, INTENT(IN) :: KMI ! Model index -INTEGER, INTENT(IN) :: KTCOUNT ! Temporal loop counter -CHARACTER(LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX,HLBCY ! X and Y-direc. LBC type -TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file -CHARACTER(len=4), INTENT(IN) :: HRAD ! Radiation scheme name -CHARACTER(len=4), INTENT(IN) :: HTURBDIM ! Dimensionality of the - ! turbulence scheme -LOGICAL, INTENT(IN) :: OSUBG_COND ! Switch for Subgrid Cond. -LOGICAL, INTENT(IN) :: OSIGMAS ! Switch for Sigma_s: - ! use values computed in CONDENSATION - ! or that from turbulence scheme -CHARACTER(LEN=4), INTENT(IN) :: HSUBG_AUCV - ! Kind of Subgrid autoconversion method -REAL, INTENT(IN) :: PTSTEP ! Time step :XTSTEP in namelist -! -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! Height (z) -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ !Dry density * Jacobian -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF! Reference dry air density -REAL, DIMENSION(:,:,:), INTENT(IN) :: PEXNREF ! Reference Exner function -! -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABST ! abs. pressure at time t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHT ! Theta at time t -REAL, DIMENSION(:,:,:,:), INTENT(INOUT):: PRT ! Moist variables at time t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSIGS ! Sigma_s at time t -REAL, INTENT(IN) :: PSIGQSAT! coeff applied to qsat variance contribution -REAL, DIMENSION(:,:,:), INTENT(IN) :: PMFCONV ! convective mass flux -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHM ! Theta at time t-Dt -REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABSTT ! Pressure time t+Dt -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRCM ! Cloud water m.r. at time t-Dt -! -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PW_ACT ! W for CCN activation -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTHRAD! THeta RADiative Tendancy -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHS ! Theta source -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS ! Moist variable sources -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVT ! Scalar variable at time t -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS ! Scalar variable sources -! -! -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSRCS ! Second-order flux - ! s'rc'/2Sigma_s2 at time t+1 - ! multiplied by Lambda_3 -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCLDFR! Cloud fraction -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PICEFR! Cloud fraction -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCIT ! Pristine ice number - ! concentration at time t -LOGICAL, INTENT(IN) :: OSEDIC! Switch to activate the - ! cloud droplet sedimentation - ! for ICE3 -LOGICAL, INTENT(IN) :: OACTIT ! Switch to activate the - ! activation through temp. - ! evolution in C2R2 and KHKO -LOGICAL, INTENT(IN) :: OSEDC ! Switch to activate the - ! cloud droplet sedimentation - ! for C2R2 or KHKO -LOGICAL, INTENT(IN) :: OSEDI ! Switch to activate the - ! cloud crystal sedimentation -LOGICAL, INTENT(IN) :: ORAIN ! Switch to activate the - ! raindrop formation -LOGICAL, INTENT(IN) :: OWARM ! Control of the rain formation - ! by slow warm microphysical - ! processes -LOGICAL, INTENT(IN) :: OHHONI! enable haze freezing -LOGICAL, INTENT(IN) :: OCONVHG! Switch for conversion from - ! hail to graupel -! -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 solid mixing ratio -! -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRC ! Cloud instant precip -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRR ! Rain instant precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRR3D ! sed flux of precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PEVAP3D ! evap profile -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRS ! Snow instant precip -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRG ! Graupel instant precip -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRH ! Hail instant precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRC3D ! sed flux of precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRS3D ! sed flux of precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRG3D ! sed flux of precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRH3D ! sed flux of precip -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSOLORG ![%] solubility fraction of soa -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PMI -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDC ! Cloud sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDR ! Rain sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDS ! Snow sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDG ! Graupel sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDH ! Hail sedimentation speed -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINDEP ! Cloud instant deposition -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSUPSAT !sursat -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PNACT !concentrtaion d'aérosols activés au temps t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PNPRO !concentrtaion d'aérosols activés au temps t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSSPRO !sursat -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PRAINFR ! Rain fraction -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PHLC_HRC !HighLow liquid content -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PHLC_HCF !HighLow liquid cloud fraction -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PHLI_HRI !HighLow ice content -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PHLI_HCF !HighLow ice clous fraction -REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PSEA ! Land Sea mask -REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PTOWN ! Town fraction -! -END SUBROUTINE RESOLVED_CLOUD -END INTERFACE -END MODULE MODI_RESOLVED_CLOUD -! -! ########################################################################## - SUBROUTINE RESOLVED_CLOUD ( HCLOUD, HACTCCN, HSCONV, HMF_CLOUD, & - KRR, KSPLITR, KSPLITG, KMI, KTCOUNT, & - HLBCX, HLBCY, TPFILE, HRAD, HTURBDIM, & - OSUBG_COND, OSIGMAS, HSUBG_AUCV, & - PTSTEP, PZZ, PRHODJ, PRHODREF, PEXNREF, & - PPABST, PTHT, PRT, PSIGS, PSIGQSAT, PMFCONV, & - PTHM, PRCM, PPABSTT, & - PW_ACT,PDTHRAD, PTHS, PRS, PSVT, PSVS, PSRCS, PCLDFR,& - PICEFR, & - PCIT, OSEDIC, OACTIT, OSEDC, OSEDI, & - ORAIN, OWARM, OHHONI, OCONVHG, & - PCF_MF,PRC_MF, PRI_MF, & - PINPRC,PINPRC3D,PINPRR,PINPRR3D, PEVAP3D, & - PINPRS,PINPRS3D,PINPRG,PINPRG3D,PINPRH,PINPRH3D, & - PSOLORG,PMI, & - PSPEEDC, PSPEEDR, PSPEEDS, PSPEEDG, PSPEEDH, & - PINDEP, PSUPSAT, PNACT, PNPRO,PSSPRO, PRAINFR, & - PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF, & - PSEA,PTOWN ) -! ########################################################################## -! -!!**** * - compute the resolved clouds and precipitation -!! -!! PURPOSE -!! ------- -!! The purpose of this routine is to compute the microphysical sources -!! related to the resolved clouds and precipitation -!! -!! -!!** METHOD -!! ------ -!! The main actions of this routine is to call the routines computing the -!! microphysical sources. Before that: -!! - it computes the real absolute pressure, -!! - negative values of the current guess of all mixing ratio are removed. -!! This is done by a global filling algorithm based on a multiplicative -!! method (Rood, 1987), in order to conserved the total mass in the -!! simulation domain. -!! - Sources are transformed in physical tendencies, by removing the -!! multiplicative term Rhod*J. -!! - External points values are filled owing to the use of cyclic -!! l.b.c., in order to performe computations on the full domain. -!! After calling to microphysical routines, the physical tendencies are -!! switched back to prognostic variables. -!! -!! -!! EXTERNAL -!! -------- -!! Subroutine SLOW_TERMS: Computes the explicit microphysical sources -!! Subroutine FAST_TERMS: Performs the saturation adjustment for l -!! Subroutine RAIN_ICE : Computes the explicit microphysical sources for i -!! Subroutine ICE_ADJUST: Performs the saturation adjustment for i+l -!! MIN_ll,SUM3D_ll : distributed functions equivalent to MIN and SUM -!! -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! Module MODD_PARAMETERS : contains declarations of parameter variables -!! JPHEXT : Horizontal external points number -!! JPVEXT : Vertical external points number -!! Module MODD_CST -!! CST%XP00 ! Reference pressure -!! CST%XRD ! Gaz constant for dry air -!! CST%XCPD ! Cpd (dry air) -!! -!! REFERENCE -!! --------- -!! -!! Book1 and book2 of documentation ( routine RESOLVED_CLOUD ) -!! -!! AUTHOR -!! ------ -!! E. Richard * Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original 21/12/94 -!! Modifications: June 8, 1995 ( J.Stein ) -!! Cleaning to improve efficienty and clarity -!! in agreement with the MESO-NH coding norm -!! March 1, 1996 ( J.Stein ) -!! store the cloud fraction -!! March 18, 1996 ( J.Stein ) -!! check that ZMASSPOS /= 0 -!! Oct. 12, 1996 ( J.Stein ) -!! remove the negative values correction -!! for the KES2 case -!! Modifications: Dec 14, 1995 (J.-P. Pinty) -!! Add the mixed-phase option -!! Modifications: Jul 01, 1996 (J.-P. Pinty) -!! Change arg. list in routine FAST_TERMS -!! Modifications: Jan 27, 1997 (J.-P. Pinty) -!! add W and SV in arg. list -!! Modifications: March 23, 98 (E.Richard) -!! correction of negative value based on -!! rv+rc+ri and thetal or thetail conservation -!! Modifications: April 08, 98 (J.-P. Lafore and V. Ducrocq ) -!! modify the correction of negative values -!! Modifications: June 08, 00 (J.-P. Pinty and J.-M. Cohard) -!! add the C2R2 scheme -!! Modifications: April 08, 01 (J.-P. Pinty) -!! add the C3R5 scheme -!! Modifications: July 21, 01 (J.-P. Pinty) -!! Add OHHONI and PW_ACT (for haze freezing) -!! Modifications: Sept 21, 01 (J.-P. Pinty) -!! Add XCONC_CCN limitation -!! Modifications: Nov 21, 02 (J.-P. Pinty) -!! Add ICE4 and C3R5 options -!! June, 2005 (V. Masson) -!! Technical change in interface for scalar arguments -!! Modifications : March, 2006 (O.Geoffroy) -!! Add KHKO scheme -!! Modifications : March 2013 (O.Thouron) -!! Add prognostic supersaturation -!! July, 2015 (O.Nuissier/F.Duffourg) Add microphysics diagnostic for -!! aircraft, ballon and profiler -!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 -!! M.Mazoyer : 04/2016 : Temperature radiative tendency used for -!! activation by cooling (OACTIT) -!! Modification 01/2016 (JP Pinty) Add LIMA -!! 10/2016 M.Mazoyer New KHKO output fields -!! 10/2016 (C.Lac) Add droplet deposition -!! S.Riette : 11/2016 : ice_adjust before and after rain_ice -!! ICE3/ICE4 modified, old version under LRED=F -! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O -! P. Wautelet 01/02/2019: ZRSMIN is now allocatable (instead of size of XRTMIN which was sometimes not allocated) -! C. Lac 02/2019: add rain fraction as an output field -! 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 -! B. Vie 03/03/2020: use DTHRAD instead of dT/dt in Smax diagnostic computation -! P. Wautelet 11/06/2020: bugfix: correct ZSVS array indices -! P. Wautelet 11/06/2020: bugfix: add "Non local correction for precipitating species" for ICE4 -! P. Wautelet + Benoit Vié 06/2020: improve removal of negative scalar variables + adapt the corresponding budgets -! P. Wautelet 23/06/2020: remove ZSVS and ZSVT to improve code readability -! P. Wautelet 30/06/2020: move removal of negative scalar variables to Sources_neg_correct -! P. Wautelet 30/06/2020: remove non-local corrections -! B. Vie 06/2020: add prognostic supersaturation for LIMA -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -USE MODD_BUDGET, ONLY: TBUDGETS, TBUCONF -USE MODD_CH_AEROSOL, ONLY: LORILAM -USE MODD_DUST, ONLY: LDUST -USE MODD_CST, ONLY: CST -USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t -USE MODD_DUST , ONLY: LDUST -USE MODD_IO, ONLY: TFILEDATA -USE MODD_NEB, ONLY: NEB -USE MODD_NSV, ONLY: NSV, NSV_C1R3END, NSV_C2R2BEG, NSV_C2R2END, & - NSV_LIMA_BEG, NSV_LIMA_END, NSV_LIMA_CCN_FREE, NSV_LIMA_IFN_FREE, & - NSV_LIMA_NC, NSV_LIMA_NI, NSV_LIMA_NR, NSV_AEREND,NSV_DSTEND,NSV_SLTEND -USE MODD_PARAM_C2R2, ONLY: LSUPSAT -USE MODD_PARAMETERS, ONLY: JPHEXT, JPVEXT -USE MODD_PARAM_ICE, ONLY: CSEDIM, LADJ_BEFORE, LADJ_AFTER, CFRAC_ICE_ADJUST, LRED, & - PARAM_ICE -USE MODD_PARAM_LIMA, ONLY: LADJ, LCOLD, LPTSPLIT, LSPRO, NMOD_CCN, NMOD_IFN, NMOD_IMM -USE MODD_RAIN_ICE_DESCR, ONLY: XRTMIN, RAIN_ICE_DESCR -USE MODD_RAIN_ICE_PARAM, ONLY: RAIN_ICE_PARAM -USE MODD_SALT, ONLY: LSALT -USE MODD_TURB_n, ONLY: TURBN, CSUBG_AUCV_RI, CCONDENS, CLAMBDA3, CSUBG_MF_PDF -! -USE MODE_ll -USE MODE_FILL_DIMPHYEX, ONLY: FILL_DIMPHYEX -use mode_sources_neg_correct, only: Sources_neg_correct -! -USE MODI_C2R2_ADJUST -USE MODI_FAST_TERMS -USE MODI_GET_HALO -USE MODI_ICE_ADJUST -USE MODI_KHKO_NOTADJUST -USE MODI_LIMA -USE MODI_LIMA_ADJUST -USE MODI_LIMA_ADJUST_SPLIT -USE MODI_LIMA_COLD -USE MODI_LIMA_MIXED -USE MODI_LIMA_NOTADJUST -USE MODI_LIMA_WARM -USE MODI_RAIN_C2R2_KHKO -USE MODI_RAIN_ICE -USE MODI_RAIN_ICE_OLD -USE MODI_SHUMAN -USE MODI_SLOW_TERMS -USE MODI_AER2LIMA -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -! -! -CHARACTER(LEN=4), INTENT(IN) :: HCLOUD ! kind of cloud paramerization -CHARACTER(LEN=4), INTENT(IN) :: HACTCCN ! kind of CCN activation scheme -CHARACTER(LEN=4), INTENT(IN) :: HSCONV ! Shallow convection scheme -CHARACTER(LEN=4), INTENT(IN) :: HMF_CLOUD! Type of statistical cloud -INTEGER, INTENT(IN) :: KRR ! Number of moist variables -INTEGER, INTENT(IN) :: KSPLITR ! Number of small time step - ! integrations for rain sedimendation -INTEGER, INTENT(IN) :: KSPLITG ! Number of small time step - ! integrations for ice sedimendation -INTEGER, INTENT(IN) :: KMI ! Model index -INTEGER, INTENT(IN) :: KTCOUNT ! Temporal loop counter -CHARACTER(LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX,HLBCY ! X and Y-direc. LBC type -TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file -CHARACTER(len=4), INTENT(IN) :: HRAD ! Radiation scheme name -CHARACTER(len=4), INTENT(IN) :: HTURBDIM ! Dimensionality of the - ! turbulence scheme -LOGICAL, INTENT(IN) :: OSUBG_COND ! Switch for Subgrid Cond. -LOGICAL, INTENT(IN) :: OSIGMAS ! Switch for Sigma_s: - ! use values computed in CONDENSATION - ! or that from turbulence scheme -CHARACTER(LEN=4), INTENT(IN) :: HSUBG_AUCV - ! Kind of Subgrid autoconversion method -REAL, INTENT(IN) :: PTSTEP ! Time step :XTSTEP in namelist -! -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! Height (z) -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ !Dry density * Jacobian -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF! Reference dry air density -REAL, DIMENSION(:,:,:), INTENT(IN) :: PEXNREF ! Reference Exner function -! -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABST ! abs. pressure at time t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHT ! Theta at time t -REAL, DIMENSION(:,:,:,:), INTENT(INOUT):: PRT ! Moist variables at time t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSIGS ! Sigma_s at time t -REAL, INTENT(IN) :: PSIGQSAT! coeff applied to qsat variance contribution -REAL, DIMENSION(:,:,:), INTENT(IN) :: PMFCONV ! convective mass flux -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHM ! Theta at time t-Dt -REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABSTT ! Pressure time t+Dt -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRCM ! Cloud water m.r. at time t-Dt -! -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PW_ACT ! W for CCN activation -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTHRAD! THeta RADiative Tendancy -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHS ! Theta source -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS ! Moist variable sources -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVT ! Scalar variable at time t -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS ! Scalar variable sources -! -! -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSRCS ! Second-order flux - ! s'rc'/2Sigma_s2 at time t+1 - ! multiplied by Lambda_3 -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCLDFR! Cloud fraction -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PICEFR! Cloud fraction -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCIT ! Pristine ice number - ! concentration at time t -LOGICAL, INTENT(IN) :: OSEDIC! Switch to activate the - ! cloud droplet sedimentation - ! for ICE3 -LOGICAL, INTENT(IN) :: OACTIT ! Switch to activate the - ! activation through temp. - ! evolution in C2R2 and KHKO -LOGICAL, INTENT(IN) :: OSEDC ! Switch to activate the - ! cloud droplet sedimentation -LOGICAL, INTENT(IN) :: OSEDI ! Switch to activate the - ! cloud crystal sedimentation -LOGICAL, INTENT(IN) :: ORAIN ! Switch to activate the - ! raindrop formation -LOGICAL, INTENT(IN) :: OWARM ! Control of the rain formation - ! by slow warm microphysical - ! processes -LOGICAL, INTENT(IN) :: OHHONI! enable haze freezing -LOGICAL, INTENT(IN) :: OCONVHG! Switch for conversion from - ! hail to graupel -! -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 solid mixing ratio -! -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRC ! Cloud instant precip -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRR ! Rain instant precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRR3D ! sed flux of precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PEVAP3D ! evap profile -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRS ! Snow instant precip -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRG ! Graupel instant precip -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRH ! Hail instant precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRC3D ! sed flux of precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRS3D ! sed flux of precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRG3D ! sed flux of precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRH3D ! sed flux of precip -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSOLORG ![%] solubility fraction of soa -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PMI -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDC ! Cloud sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDR ! Rain sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDS ! Snow sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDG ! Graupel sedimentation speed -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDH ! Hail sedimentation speed -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINDEP ! Cloud instant deposition -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSUPSAT !sursat -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PNACT !concentrtaion d'aérosols activés au temps t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PNPRO !concentrtaion d'aérosols activés au temps t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSSPRO !sursat -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PRAINFR ! Rain fraction -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PHLC_HRC !HighLow liquid content -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PHLC_HCF !HighLow liquid cloud fraction -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PHLI_HRI !HighLow ice content -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PHLI_HCF !HighLow ice clous fraction -REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PSEA ! Land Sea mask -REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PTOWN ! Town fraction -! -! -!* 0.2 Declarations of local variables : -! -INTEGER :: JRR,JSV ! Loop index for the moist and scalar variables -INTEGER :: IIB ! Define the physical domain -INTEGER :: IIE ! -INTEGER :: IJB ! -INTEGER :: IJE ! -INTEGER :: IKB ! -INTEGER :: IKE ! -INTEGER :: IKU -INTEGER :: IINFO_ll ! return code of parallel routine -INTEGER :: JK,JI,JL -! -! -! -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: ZDZZ -real, dimension(:,:,:), allocatable :: ZEXN -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: ZZZ - ! model layer height -! REAL :: ZMASSTOT ! total mass for one water category -! ! including the negative values -! REAL :: ZMASSPOS ! total mass for one water category -! ! after removing the negative values -! REAL :: ZRATIO ! ZMASSTOT / ZMASSCOR -! -INTEGER :: ISVBEG ! first scalar index for microphysics -INTEGER :: ISVEND ! last scalar index for microphysics -REAL, DIMENSION(:), ALLOCATABLE :: ZRSMIN ! Minimum value for tendencies -!UPG*PT -REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZSVT ! scalar variable for microphysics only -!UPG*PT - -LOGICAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: LLMICRO ! mask to limit computation -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3), KRR) :: ZFPR -! -INTEGER :: JMOD, JMOD_IFN -LOGICAL :: GWEST,GEAST,GNORTH,GSOUTH -LOGICAL :: LMFCONV ! =SIZE(PMFCONV)!=0 -! BVIE work array waiting for PINPRI -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2)):: ZINPRI -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 -TYPE(DIMPHYEX_t) :: YLDIMPHYEX -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: ZDUM -ZSIGQSAT2D(:,:) = PSIGQSAT -! -!------------------------------------------------------------------------------ -! -!* 1. PRELIMINARY COMPUTATIONS -! ------------------------ -! -CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) -IKB=1+JPVEXT -IKE=SIZE(PZZ,3) - JPVEXT -IKU=SIZE(PZZ,3) -! -CALL FILL_DIMPHYEX(YLDIMPHYEX, SIZE(PZZ,1), SIZE(PZZ,2), SIZE(PZZ,3)) -! -GWEST = LWEST_ll() -GEAST = LEAST_ll() -GSOUTH = LSOUTH_ll() -GNORTH = LNORTH_ll() -! -LMFCONV=(SIZE(PMFCONV)/=0) -! -IF (HCLOUD == 'C2R2' .OR. HCLOUD == 'KHKO') THEN - ISVBEG = NSV_C2R2BEG - ISVEND = NSV_C2R2END -ELSE IF (HCLOUD == 'C3R5') THEN - ISVBEG = NSV_C2R2BEG - ISVEND = NSV_C1R3END -ELSE IF (HCLOUD == 'LIMA') THEN - ISVBEG = NSV_LIMA_BEG - IF (.NOT. LDUST .AND. .NOT. LSALT .AND. .NOT. LORILAM) THEN - ISVEND = NSV_LIMA_END - ELSE - IF (LORILAM) THEN - ISVEND = NSV_AEREND - END IF - IF (LDUST) THEN - ISVEND = NSV_DSTEND - END IF - IF (LSALT) THEN - ISVEND = NSV_SLTEND - END IF - END IF -ELSE - ISVBEG = 0 - ISVEND = 0 -END IF -! -! -! -!* 1. From ORILAM to LIMA: -! -IF (HCLOUD == 'LIMA' .AND. ((LORILAM).OR.(LDUST).OR.(LSALT))) THEN -! ORILAM : tendance s --> variable instant t -ALLOCATE(ZSVT(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3),NSV)) - DO JSV = 1, NSV - ZSVT(:,:,:,JSV) = PSVS(:,:,:,JSV) * PTSTEP / PRHODJ(:,:,:) - END DO - -CALL AER2LIMA(ZSVT(IIB:IIE,IJB:IJE,IKB:IKE,:),& - PRHODREF(IIB:IIE,IJB:IJE,IKB:IKE), & - PRT(IIB:IIE,IJB:IJE,IKB:IKE,1),& - PPABST(IIB:IIE,IJB:IJE,IKB:IKE),& - PTHT(IIB:IIE,IJB:IJE,IKB:IKE), & - PZZ(IIB:IIE,IJB:IJE,IKB:IKE)) - -! LIMA : variable instant t --> tendance s - PSVS(:,:,:,NSV_LIMA_CCN_FREE) = ZSVT(:,:,:,NSV_LIMA_CCN_FREE) * & - PRHODJ(:,:,:) / PTSTEP - PSVS(:,:,:,NSV_LIMA_CCN_FREE+1) = ZSVT(:,:,:,NSV_LIMA_CCN_FREE+1) * & - PRHODJ(:,:,:) / PTSTEP - PSVS(:,:,:,NSV_LIMA_CCN_FREE+2) = ZSVT(:,:,:,NSV_LIMA_CCN_FREE+2) * & - PRHODJ(:,:,:) / PTSTEP - - PSVS(:,:,:,NSV_LIMA_IFN_FREE) = ZSVT(:,:,:,NSV_LIMA_IFN_FREE) * & - PRHODJ(:,:,:) / PTSTEP - PSVS(:,:,:,NSV_LIMA_IFN_FREE+1) = ZSVT(:,:,:,NSV_LIMA_IFN_FREE+1) * & - PRHODJ(:,:,:) / PTSTEP - -DEALLOCATE(ZSVT) -END IF - -!UPG*PT -! -IF (HCLOUD(1:3)=='ICE' .AND. LRED) THEN - ALLOCATE(ZRSMIN(SIZE(XRTMIN))) - ZRSMIN(:) = XRTMIN(:) / PTSTEP -END IF -! -!* 2. TRANSFORMATION INTO PHYSICAL TENDENCIES -! --------------------------------------- -! -PTHS(:,:,:) = PTHS(:,:,:) / PRHODJ(:,:,:) -DO JRR = 1,KRR - PRS(:,:,:,JRR) = PRS(:,:,:,JRR) / PRHODJ(:,:,:) -END DO -! -IF (HCLOUD=='C2R2' .OR. HCLOUD=='C3R5' .OR. HCLOUD=='KHKO' .OR. HCLOUD=='LIMA') THEN - DO JSV = ISVBEG, ISVEND - PSVS(:,:,:,JSV) = PSVS(:,:,:,JSV) / PRHODJ(:,:,:) - ENDDO -ENDIF -! -! complete the lateral boundaries to avoid possible problems -! -DO JI=1,JPHEXT - PTHS(JI,:,:) = PTHS(IIB,:,:) - PTHS(IIE+JI,:,:) = PTHS(IIE,:,:) - PTHS(:,JI,:) = PTHS(:,IJB,:) - PTHS(:,IJE+JI,:) = PTHS(:,IJE,:) -! - PRS(JI,:,:,:) = PRS(IIB,:,:,:) - PRS(IIE+JI,:,:,:) = PRS(IIE,:,:,:) - PRS(:,JI,:,:) = PRS(:,IJB,:,:) - PRS(:,IJE+JI,:,:) = PRS(:,IJE,:,:) -END DO -! -! complete the physical boundaries to avoid some computations -! -IF(GWEST .AND. HLBCX(1) /= 'CYCL') PRT(:IIB-1,:,:,2:) = 0.0 -IF(GEAST .AND. HLBCX(2) /= 'CYCL') PRT(IIE+1:,:,:,2:) = 0.0 -IF(GSOUTH .AND. HLBCY(1) /= 'CYCL') PRT(:,:IJB-1,:,2:) = 0.0 -IF(GNORTH .AND. HLBCY(2) /= 'CYCL') PRT(:,IJE+1:,:,2:) = 0.0 -! -IF (HCLOUD=='C2R2' .OR. HCLOUD=='C3R5' .OR. HCLOUD=='KHKO' .OR. HCLOUD=='LIMA') THEN -DO JI=1,JPHEXT - PSVS(JI, :, :, ISVBEG:ISVEND) = PSVS(IIB, :, :, ISVBEG:ISVEND) - PSVS(IIE+JI, :, :, ISVBEG:ISVEND) = PSVS(IIE, :, :, ISVBEG:ISVEND) - PSVS(:, JI, :, ISVBEG:ISVEND) = PSVS(:, IJB, :, ISVBEG:ISVEND) - PSVS(:, IJE+JI, :, ISVBEG:ISVEND) = PSVS(:, IJE, :, ISVBEG:ISVEND) -END DO - ! -! complete the physical boundaries to avoid some computations -! - IF(GWEST .AND. HLBCX(1) /= 'CYCL') PSVT(:IIB-1, :, :, ISVBEG:ISVEND) = 0.0 - IF(GEAST .AND. HLBCX(2) /= 'CYCL') PSVT(IIE+1:, :, :, ISVBEG:ISVEND) = 0.0 - IF(GSOUTH .AND. HLBCY(1) /= 'CYCL') PSVT(:, :IJB-1, :, ISVBEG:ISVEND) = 0.0 - IF(GNORTH .AND. HLBCY(2) /= 'CYCL') PSVT(:, IJE+1:, :, ISVBEG:ISVEND) = 0.0 -ENDIF -! -! complete the vertical boundaries -! -PTHS(:,:,IKB-1) = PTHS(:,:,IKB) -PTHS(:,:,IKE+1) = PTHS(:,:,IKE) -! -PRS(:,:,IKB-1,:) = PRS(:,:,IKB,:) -PRS(:,:,IKE+1,:) = PRS(:,:,IKE,:) -! -PRT(:,:,IKB-1,:) = PRT(:,:,IKB,:) -PRT(:,:,IKE+1,:) = PRT(:,:,IKE,:) -! -IF (HCLOUD == 'C2R2' .OR. HCLOUD == 'C3R5' .OR. HCLOUD == 'KHKO' & - .OR. HCLOUD == 'LIMA') THEN - PSVS(:,:,IKB-1,ISVBEG:ISVEND) = PSVS(:,:,IKB,ISVBEG:ISVEND) - PSVS(:,:,IKE+1,ISVBEG:ISVEND) = PSVS(:,:,IKE,ISVBEG:ISVEND) - PSVT(:,:,IKB-1,ISVBEG:ISVEND) = PSVT(:,:,IKB,ISVBEG:ISVEND) - PSVT(:,:,IKE+1,ISVBEG:ISVEND) = PSVT(:,:,IKE,ISVBEG:ISVEND) -ENDIF -! -! -!* 3. REMOVE NEGATIVE VALUES -! ---------------------- -! -!* 3.1 Non local correction for precipitating species (Rood 87) -! -! IF ( HCLOUD == 'KESS' & -! .OR. HCLOUD == 'ICE3' .OR. HCLOUD == 'ICE4' & -! .OR. HCLOUD == 'C2R2' .OR. HCLOUD == 'C3R5' & -! .OR. HCLOUD == 'KHKO' .OR. HCLOUD == 'LIMA' ) THEN -! ! -! DO JRR = 3,KRR -! SELECT CASE (JRR) -! CASE(3,5,6,7) ! rain, snow, graupel and hail -! -! IF ( MIN_ll( PRS(:,:,:,JRR), IINFO_ll) < 0.0 ) THEN -! ! -! ! compute the total water mass computation -! ! -! ZMASSTOT = MAX( 0. , SUM3D_ll( PRS(:,:,:,JRR), IINFO_ll ) ) -! ! -! ! remove the negative values -! ! -! PRS(:,:,:,JRR) = MAX( 0., PRS(:,:,:,JRR) ) -! ! -! ! compute the new total mass -! ! -! ZMASSPOS = MAX(XMNH_TINY,SUM3D_ll( PRS(:,:,:,JRR), IINFO_ll ) ) -! ! -! ! correct again in such a way to conserve the total mass -! ! -! ZRATIO = ZMASSTOT / ZMASSPOS -! PRS(:,:,:,JRR) = PRS(:,:,:,JRR) * ZRATIO -! ! -! END IF -! END SELECT -! END DO -! END IF -! -!* 3.2 Adjustement for liquid and solid cloud -! -! Remove non-physical negative values (unnecessary in a perfect world) + corresponding budgets -call Sources_neg_correct( hcloud, 'NEGA', krr, ptstep, ppabst, ptht, prt, pths, prs, psvs, prhodj ) -! -!* 3.4 Limitations of Na and Nc to the CCN max number concentration -! -! Commented by O.Thouron 03/2013 -!IF ((HCLOUD == 'C2R2' .OR. HCLOUD == 'C3R5' .OR. HCLOUD == 'KHKO') & -! .AND.(XCONC_CCN > 0)) THEN -! IF ((HACTCCN /= 'ABRK')) THEN -! ZSVT(:,:,:,1) = MIN( ZSVT(:,:,:,1),XCONC_CCN ) -! ZSVT(:,:,:,2) = MIN( ZSVT(:,:,:,2),XCONC_CCN ) -! ZSVS(:,:,:,1) = MIN( ZSVS(:,:,:,1),XCONC_CCN ) -! ZSVS(:,:,:,2) = MIN( ZSVS(:,:,:,2),XCONC_CCN ) -! END IF -!END IF -! -! -!------------------------------------------------------------------------------- -! -SELECT CASE ( HCLOUD ) - CASE ('REVE') -! -!* 4. REVERSIBLE MICROPHYSICAL SCHEME -! ------------------------------- -! - CALL FAST_TERMS ( KRR, KMI, HRAD, HTURBDIM, & - HSCONV, HMF_CLOUD, OSUBG_COND, PTSTEP, & - PRHODJ, PSIGS, PPABST, & - PCF_MF,PRC_MF, & - PRVT=PRT(:,:,:,1), PRCT=PRT(:,:,:,2), & - PRVS=PRS(:,:,:,1), PRCS=PRS(:,:,:,2), & - PTHS=PTHS, PSRCS=PSRCS, PCLDFR=PCLDFR ) -! - CASE ('KESS') -! -!* 5. KESSLER MICROPHYSICAL SCHEME -! ---------------------------- -! -! -!* 5.1 Compute the explicit microphysical sources -! - CALL SLOW_TERMS ( KSPLITR, PTSTEP, KMI, HSUBG_AUCV, & - PZZ, PRHODJ, PRHODREF, PCLDFR, & - PTHT, PRT(:,:,:,1), PRT(:,:,:,2), PRT(:,:,:,3), PPABST, & - PTHS, PRS(:,:,:,1), PRS(:,:,:,2), PRS(:,:,:,3), & - PINPRR, PINPRR3D, PEVAP3D ) -! -!* 5.2 Perform the saturation adjustment -! - CALL FAST_TERMS ( KRR, KMI, HRAD, HTURBDIM, & - HSCONV, HMF_CLOUD, OSUBG_COND, PTSTEP, & - PRHODJ, PSIGS, PPABST, & - PCF_MF,PRC_MF, & - PRVT=PRT(:,:,:,1), PRCT=PRT(:,:,:,2), & - PRVS=PRS(:,:,:,1), PRCS=PRS(:,:,:,2), PRRS=PRS(:,:,:,3), & - PTHS=PTHS, PSRCS=PSRCS, PCLDFR=PCLDFR ) -! -! - CASE ('C2R2','KHKO') -! -!* 7. 2-MOMENT WARM MICROPHYSICAL SCHEME C2R2 or KHKO -! --------------------------------------- -! -! -!* 7.1 Compute the explicit microphysical sources -! -! - CALL RAIN_C2R2_KHKO ( HCLOUD, OACTIT, OSEDC, ORAIN, KSPLITR, PTSTEP, KMI, & - TPFILE, PZZ, PRHODJ, PRHODREF, PEXNREF, & - PPABST, PTHT, PRT(:,:,:,1), PRT(:,:,:,2), PRT(:,:,:,3), & - PTHM, PRCM, PPABSTT, & - PW_ACT,PDTHRAD,PTHS, PRS(:,:,:,1),PRS(:,:,:,2),PRS(:,:,:,3), & - PSVT(:,:,:,NSV_C2R2BEG), PSVT(:,:,:,NSV_C2R2BEG+1), & - PSVT(:,:,:,NSV_C2R2BEG+2), PSVS(:,:,:,NSV_C2R2BEG), & - PSVS(:,:,:,NSV_C2R2BEG+1), PSVS(:,:,:,NSV_C2R2BEG+2), & - PINPRC, PINPRR, PINPRR3D, PEVAP3D , & - PSVT(:,:,:,:), PSOLORG, PMI, HACTCCN, & - PINDEP, PSUPSAT, PNACT ) -! -! -!* 7.2 Perform the saturation adjustment -! - IF (LSUPSAT) THEN - CALL KHKO_NOTADJUST (KRR, KTCOUNT,TPFILE, HRAD, & - PTSTEP, PRHODJ, PPABSTT, PPABST, PRHODREF, PZZ, & - PTHT,PRT(:,:,:,1),PRT(:,:,:,2),PRT(:,:,:,3), & - PTHS,PRS(:,:,:,1),PRS(:,:,:,2),PRS(:,:,:,3), & - PSVS(:,:,:,NSV_C2R2BEG+1), PSVS(:,:,:,NSV_C2R2BEG), & - PSVS(:,:,:,NSV_C2R2BEG+3), PCLDFR, PSRCS, PNPRO, PSSPRO ) -! - ELSE - CALL C2R2_ADJUST ( KRR,TPFILE, HRAD, & - HTURBDIM, OSUBG_COND, PTSTEP, & - PRHODJ, PSIGS, PPABST, & - PTHS=PTHS, PRVS=PRS(:,:,:,1), PRCS=PRS(:,:,:,2), & - PCNUCS=PSVS(:,:,:,NSV_C2R2BEG), & - PCCS=PSVS(:,:,:,NSV_C2R2BEG+1), & - PSRCS=PSRCS, PCLDFR=PCLDFR, PRRS=PRS(:,:,:,3) ) -! - END IF -! - CASE ('ICE3') -! -!* 9. MIXED-PHASE MICROPHYSICAL SCHEME (WITH 3 ICE SPECIES) -! ----------------------------------------------------- -! - allocate( zexn( size( pzz, 1 ), size( pzz, 2 ), size( pzz, 3 ) ) ) - ZEXN(:,:,:)= (PPABST(:,:,:)/CST%XP00)**(CST%XRD/CST%XCPD) -! -!* 9.1 Compute the explicit microphysical sources -! -! - DO JK=IKB,IKE - ZDZZ(:,:,JK)=PZZ(:,:,JK+1)-PZZ(:,:,JK) - ENDDO - ZZZ = MZF( PZZ ) - IF(LRED .AND. LADJ_BEFORE) THEN - CALL ICE_ADJUST (YLDIMPHYEX,CST, RAIN_ICE_PARAM, NEB, TURBN, TBUCONF, KRR, & - CFRAC_ICE_ADJUST, & - 'ADJU', .FALSE., .FALSE., & - PTSTEP, ZSIGQSAT2D, & - PRHODJ, PEXNREF, PRHODREF, PSIGS, LMFCONV,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, & - OCOMPUTE_SRC=SIZE(PSRCS, 3)/=0, PSRCS=PSRCS, PCLDFR=PCLDFR, & - PRR=PRS(:,:,:,3)*PTSTEP, & - PRI=PRS(:,:,:,4)*PTSTEP, PRIS=PRS(:,:,:,4), & - PRS=PRS(:,:,:,5)*PTSTEP, & - PRG=PRS(:,:,:,6)*PTSTEP, & - TBUDGETS=TBUDGETS,KBUDGETS=SIZE(TBUDGETS), & - PHLC_HRC=PHLC_HRC, PHLC_HCF=PHLC_HCF, & - PHLI_HRI=PHLI_HRI, PHLI_HCF=PHLI_HCF ) - ENDIF - IF (LRED) THEN - LLMICRO(:,:,:) = .FALSE. - LLMICRO(IIB:IIE,IJB:IJE,IKB:IKE)=PRT(IIB:IIE,IJB:IJE,IKB:IKE,2)>XRTMIN(2) .OR. & - PRT(IIB:IIE,IJB:IJE,IKB:IKE,3)>XRTMIN(3) .OR. & - PRT(IIB:IIE,IJB:IJE,IKB:IKE,4)>XRTMIN(4) .OR. & - PRT(IIB:IIE,IJB:IJE,IKB:IKE,5)>XRTMIN(5) .OR. & - PRT(IIB:IIE,IJB:IJE,IKB:IKE,6)>XRTMIN(6) - LLMICRO(IIB:IIE,IJB:IJE,IKB:IKE)=LLMICRO(IIB:IIE,IJB:IJE,IKB:IKE) .OR. & - PRS(IIB:IIE,IJB:IJE,IKB:IKE,2)>ZRSMIN(2) .OR. & - PRS(IIB:IIE,IJB:IJE,IKB:IKE,3)>ZRSMIN(3) .OR. & - PRS(IIB:IIE,IJB:IJE,IKB:IKE,4)>ZRSMIN(4) .OR. & - PRS(IIB:IIE,IJB:IJE,IKB:IKE,5)>ZRSMIN(5) .OR. & - PRS(IIB:IIE,IJB:IJE,IKB:IKE,6)>ZRSMIN(6) - CALL RAIN_ICE (YLDIMPHYEX,CST, PARAM_ICE, RAIN_ICE_PARAM, RAIN_ICE_DESCR,TBUCONF,& - COUNT(LLMICRO), COUNT(LLMICRO), & - .FALSE., HSUBG_AUCV, CSUBG_AUCV_RI,& - PTSTEP, KRR, LLMICRO, ZEXN, & - ZDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT,PCLDFR,& - PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF, & - PTHT, PRT(:,:,:,1), PRT(:,:,:,2), & - PRT(:,:,:,3), PRT(:,:,:,4), & - PRT(:,:,:,5), PRT(:,:,:,6), & - PTHS, PRS(:,:,:,1), PRS(:,:,:,2), PRS(:,:,:,3), & - PRS(:,:,:,4), PRS(:,:,:,5), PRS(:,:,:,6), & - PINPRC,PINPRR, PEVAP3D, & - PINPRS, PINPRG, PINDEP, PRAINFR, PSIGS, & - TBUDGETS,SIZE(TBUDGETS), & - PSEA,PTOWN, PFPR=ZFPR ) - ELSE - CALL RAIN_ICE_OLD (YLDIMPHYEX, OSEDIC, CSEDIM, HSUBG_AUCV, OWARM, 1, IKU, 1, & - KSPLITR, PTSTEP, KRR, & - ZDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR,& - PTHT, PRT(:,:,:,1), PRT(:,:,:,2), & - PRT(:,:,:,3), PRT(:,:,:,4), & - PRT(:,:,:,5), PRT(:,:,:,6), & - PTHS, PRS(:,:,:,1), PRS(:,:,:,2), PRS(:,:,:,3), & - PRS(:,:,:,4), PRS(:,:,:,5), PRS(:,:,:,6), & - PINPRC,PINPRR, PINPRR3D, PEVAP3D, & - PINPRS, PINPRG, PSIGS,PINDEP, PRAINFR, & - PSEA, PTOWN, PFPR=ZFPR) - END IF - -! -!* 9.2 Perform the saturation adjustment over cloud ice and cloud water -! -! - IF (.NOT. LRED .OR. (LRED .AND. LADJ_AFTER) ) THEN - CALL ICE_ADJUST (YLDIMPHYEX,CST, RAIN_ICE_PARAM, NEB, TURBN, TBUCONF, KRR, & - CFRAC_ICE_ADJUST, & - 'DEPI', .FALSE., .FALSE., & - PTSTEP, ZSIGQSAT2D, & - PRHODJ, PEXNREF, PRHODREF, PSIGS, LMFCONV, 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, & - OCOMPUTE_SRC=SIZE(PSRCS, 3)/=0, PSRCS=PSRCS, PCLDFR=PCLDFR, & - PRR=PRS(:,:,:,3)*PTSTEP, & - PRI=PRS(:,:,:,4)*PTSTEP, PRIS=PRS(:,:,:,4), & - PRS=PRS(:,:,:,5)*PTSTEP, & - PRG=PRS(:,:,:,6)*PTSTEP, & - TBUDGETS=TBUDGETS,KBUDGETS=SIZE(TBUDGETS), & - PHLC_HRC=PHLC_HRC, PHLC_HCF=PHLC_HCF, & - PHLI_HRI=PHLI_HRI, PHLI_HCF=PHLI_HCF ) - END IF - - deallocate( zexn ) -! - CASE ('ICE4') -! -!* 10. MIXED-PHASE MICROPHYSICAL SCHEME (WITH 4 ICE SPECIES) -! ----------------------------------------------------- -! - allocate( zexn( size( pzz, 1 ), size( pzz, 2 ), size( pzz, 3 ) ) ) - ZEXN(:,:,:)= (PPABST(:,:,:)/CST%XP00)**(CST%XRD/CST%XCPD) -! -!* 10.1 Compute the explicit microphysical sources -! -! - DO JK=IKB,IKE - ZDZZ(:,:,JK)=PZZ(:,:,JK+1)-PZZ(:,:,JK) - ENDDO - ZZZ = MZF( PZZ ) - IF(LRED .AND. LADJ_BEFORE) THEN - CALL ICE_ADJUST (YLDIMPHYEX,CST, RAIN_ICE_PARAM, NEB, TURBN, TBUCONF, KRR, & - CFRAC_ICE_ADJUST, & - 'ADJU', .FALSE., .FALSE., & - PTSTEP, ZSIGQSAT2D, & - PRHODJ, PEXNREF, PRHODREF, PSIGS, LMFCONV,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, & - OCOMPUTE_SRC=SIZE(PSRCS, 3)/=0, PSRCS=PSRCS, PCLDFR=PCLDFR, & - PRR=PRS(:,:,:,3)*PTSTEP, & - PRI=PRS(:,:,:,4)*PTSTEP, PRIS=PRS(:,:,:,4), & - PRS=PRS(:,:,:,5)*PTSTEP, & - PRG=PRS(:,:,:,6)*PTSTEP, & - TBUDGETS=TBUDGETS,KBUDGETS=SIZE(TBUDGETS), & - PRH=PRS(:,:,:,7)*PTSTEP, & - PHLC_HRC=PHLC_HRC, PHLC_HCF=PHLC_HCF, & - PHLI_HRI=PHLI_HRI, PHLI_HCF=PHLI_HCF ) - ENDIF - IF (LRED) THEN - LLMICRO(:,:,:) = .FALSE. - LLMICRO(IIB:IIE,IJB:IJE,IKB:IKE)=PRT(IIB:IIE,IJB:IJE,IKB:IKE,2)>XRTMIN(2) .OR. & - PRT(IIB:IIE,IJB:IJE,IKB:IKE,3)>XRTMIN(3) .OR. & - PRT(IIB:IIE,IJB:IJE,IKB:IKE,4)>XRTMIN(4) .OR. & - PRT(IIB:IIE,IJB:IJE,IKB:IKE,5)>XRTMIN(5) .OR. & - PRT(IIB:IIE,IJB:IJE,IKB:IKE,6)>XRTMIN(6) .OR. & - PRT(IIB:IIE,IJB:IJE,IKB:IKE,7)>XRTMIN(7) - LLMICRO(IIB:IIE,IJB:IJE,IKB:IKE)=LLMICRO(IIB:IIE,IJB:IJE,IKB:IKE) .OR. & - PRS(IIB:IIE,IJB:IJE,IKB:IKE,2)>ZRSMIN(2) .OR. & - PRS(IIB:IIE,IJB:IJE,IKB:IKE,3)>ZRSMIN(3) .OR. & - PRS(IIB:IIE,IJB:IJE,IKB:IKE,4)>ZRSMIN(4) .OR. & - PRS(IIB:IIE,IJB:IJE,IKB:IKE,5)>ZRSMIN(5) .OR. & - PRS(IIB:IIE,IJB:IJE,IKB:IKE,6)>ZRSMIN(6) .OR. & - PRS(IIB:IIE,IJB:IJE,IKB:IKE,7)>ZRSMIN(7) - CALL RAIN_ICE (YLDIMPHYEX,CST, PARAM_ICE, RAIN_ICE_PARAM, RAIN_ICE_DESCR,TBUCONF,& - COUNT(LLMICRO), COUNT(LLMICRO), & - .FALSE., HSUBG_AUCV, CSUBG_AUCV_RI,& - PTSTEP, KRR, LLMICRO, ZEXN, & - ZDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR,& - PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF,& - PTHT, PRT(:,:,:,1), PRT(:,:,:,2), & - PRT(:,:,:,3), PRT(:,:,:,4), & - PRT(:,:,:,5), PRT(:,:,:,6), & - PTHS, PRS(:,:,:,1), PRS(:,:,:,2), PRS(:,:,:,3), & - PRS(:,:,:,4), PRS(:,:,:,5), PRS(:,:,:,6), & - PINPRC, PINPRR, PEVAP3D, & - PINPRS, PINPRG, PINDEP, PRAINFR, PSIGS, & - TBUDGETS,SIZE(TBUDGETS), & - PSEA, PTOWN, & - PRT(:,:,:,7), PRS(:,:,:,7), PINPRH, PFPR=ZFPR ) - ELSE - CALL RAIN_ICE_OLD (YLDIMPHYEX, OSEDIC, CSEDIM, HSUBG_AUCV, OWARM, 1, IKU, 1, & - KSPLITR, PTSTEP, KRR, & - ZDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR,& - PTHT, PRT(:,:,:,1), PRT(:,:,:,2), & - PRT(:,:,:,3), PRT(:,:,:,4), & - PRT(:,:,:,5), PRT(:,:,:,6), & - PTHS, PRS(:,:,:,1), PRS(:,:,:,2), PRS(:,:,:,3), & - PRS(:,:,:,4), PRS(:,:,:,5), PRS(:,:,:,6), & - PINPRC,PINPRR, PINPRR3D, PEVAP3D, & - PINPRS, PINPRG, PSIGS,PINDEP, PRAINFR, & - PSEA, PTOWN, & - PRT(:,:,:,7), PRS(:,:,:,7), PINPRH, PFPR=ZFPR) - END IF - - -! -!* 10.2 Perform the saturation adjustment over cloud ice and cloud water -! - IF (.NOT. LRED .OR. (LRED .AND. LADJ_AFTER) ) THEN - CALL ICE_ADJUST (YLDIMPHYEX,CST, RAIN_ICE_PARAM, NEB, TURBN, TBUCONF, KRR, & - CFRAC_ICE_ADJUST, & - 'DEPI', .FALSE., .FALSE., & - PTSTEP, ZSIGQSAT2D, & - PRHODJ, PEXNREF, PRHODREF, PSIGS, LMFCONV, 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, & - OCOMPUTE_SRC=SIZE(PSRCS, 3)/=0, PSRCS=PSRCS, PCLDFR=PCLDFR, & - PRR=PRS(:,:,:,3)*PTSTEP, & - PRI=PRS(:,:,:,4)*PTSTEP, PRIS=PRS(:,:,:,4), & - PRS=PRS(:,:,:,5)*PTSTEP, & - PRG=PRS(:,:,:,6)*PTSTEP, & - TBUDGETS=TBUDGETS,KBUDGETS=SIZE(TBUDGETS), & - PRH=PRS(:,:,:,7)*PTSTEP, & - PHLC_HRC=PHLC_HRC, PHLC_HCF=PHLC_HCF, & - PHLI_HRI=PHLI_HRI, PHLI_HCF=PHLI_HCF ) - END IF - - deallocate( zexn ) -! -! -!* 12. 2-MOMENT MIXED-PHASE MICROPHYSICAL SCHEME LIMA -! -------------------------------------------------------------- -! -! -!* 12.1 Compute the explicit microphysical sources -! - CASE ('LIMA') - ! - DO JK=IKB,IKE - ZDZZ(:,:,JK)=PZZ(:,:,JK+1)-PZZ(:,:,JK) - ENDDO - ZZZ = MZF( PZZ ) - IF (LPTSPLIT) THEN - CALL LIMA (1, IKU, 1, & - PTSTEP, TPFILE, & - PRHODREF, PEXNREF, ZDZZ, & - PRHODJ, PPABST, & - NMOD_CCN, NMOD_IFN, NMOD_IMM, & - PDTHRAD, PTHT, PRT, & - PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), PW_ACT, & - PTHS, PRS, PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & - PINPRC, PINDEP, PINPRR, ZINPRI, PINPRS, PINPRG, PINPRH, & - PEVAP3D, PCLDFR, PICEFR, PRAINFR ) - ELSE - - IF (OWARM) CALL LIMA_WARM(OACTIT, OSEDC, ORAIN, KSPLITR, PTSTEP, KMI, & - TPFILE, KRR, PZZ, PRHODJ, & - PRHODREF, PEXNREF, PW_ACT, PPABST, & - PDTHRAD, & - PTHT, PRT, PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & - PTHS, PRS, PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & - PINPRC, PINPRR, PINDEP, PINPRR3D, PEVAP3D ) -! - IF (LCOLD) CALL LIMA_COLD(OSEDI, OHHONI, KSPLITG, PTSTEP, KMI, & - KRR, PZZ, PRHODJ, & - PRHODREF, PEXNREF, PPABST, PW_ACT, & - PTHT, PRT, PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & - PTHS, PRS, PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & - PINPRS, PINPRG, PINPRH ) -! - IF (OWARM .AND. LCOLD) CALL LIMA_MIXED(OSEDI, OHHONI, KSPLITG, PTSTEP, KMI, & - KRR, PZZ, PRHODJ, & - PRHODREF, PEXNREF, PPABST, PW_ACT, & - PTHT, PRT, PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & - PTHS, PRS, PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END) ) - ENDIF -! -!* 12.2 Perform the saturation adjustment -! - IF (LSPRO) THEN - CALL LIMA_NOTADJUST (KMI, TPFILE, HRAD, & - PTSTEP, PRHODJ, PPABSTT, PPABST, PRHODREF, PEXNREF, PZZ, & - PTHT,PRT, PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & - PTHS,PRS, PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & - PCLDFR, PICEFR, PRAINFR, PSRCS ) - ELSE IF (LPTSPLIT) THEN - CALL LIMA_ADJUST_SPLIT(YLDIMPHYEX, KRR, KMI, TPFILE, CCONDENS, CLAMBDA3, & - OSUBG_COND, OSIGMAS, PTSTEP, PSIGQSAT, & - PRHODREF, PRHODJ, PEXNREF, PSIGS, PMFCONV, PPABST, PPABSTT, ZZZ,& - PDTHRAD, PW_ACT, & - PRT, PRS, PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & - PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & - PTHS, PSRCS, PCLDFR, PICEFR, PRC_MF, PRI_MF, PCF_MF ) - ELSE - CALL LIMA_ADJUST(KRR, KMI, TPFILE, & - OSUBG_COND, PTSTEP, & - PRHODREF, PRHODJ, PEXNREF, PPABST, PPABSTT, & - PRT, PRS, PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & - PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & - PTHS, PSRCS, PCLDFR, PICEFR, PRAINFR ) - ENDIF -! -END SELECT -! -IF(HCLOUD=='ICE3' .OR. HCLOUD=='ICE4' ) THEN - PINPRC3D=ZFPR(:,:,:,2) / CST%XRHOLW - PINPRR3D=ZFPR(:,:,:,3) / CST%XRHOLW - PINPRS3D=ZFPR(:,:,:,5) / CST%XRHOLW - PINPRG3D=ZFPR(:,:,:,6) / CST%XRHOLW - IF(KRR==7) PINPRH3D=ZFPR(:,:,:,7) / CST%XRHOLW - WHERE (PRT(:,:,:,2) > 1.E-04 ) - PSPEEDC=ZFPR(:,:,:,2) / (PRT(:,:,:,2) * PRHODREF(:,:,:)) - ENDWHERE - WHERE (PRT(:,:,:,3) > 1.E-04 ) - PSPEEDR=ZFPR(:,:,:,3) / (PRT(:,:,:,3) * PRHODREF(:,:,:)) - ENDWHERE - WHERE (PRT(:,:,:,5) > 1.E-04 ) - PSPEEDS=ZFPR(:,:,:,5) / (PRT(:,:,:,5) * PRHODREF(:,:,:)) - ENDWHERE - WHERE (PRT(:,:,:,6) > 1.E-04 ) - PSPEEDG=ZFPR(:,:,:,6) / (PRT(:,:,:,6) * PRHODREF(:,:,:)) - ENDWHERE - IF(KRR==7) THEN - WHERE (PRT(:,:,:,7) > 1.E-04 ) - PSPEEDH=ZFPR(:,:,:,7) / (PRT(:,:,:,7) * PRHODREF(:,:,:)) - ENDWHERE - ENDIF -ENDIF - -! Remove non-physical negative values (unnecessary in a perfect world) + corresponding budgets -call Sources_neg_correct( hcloud, 'NECON', krr, ptstep, ppabst, ptht, prt, pths, prs, psvs, prhodj ) - -!------------------------------------------------------------------------------- -! -! -!* 13. SWITCH BACK TO THE PROGNOSTIC VARIABLES -! --------------------------------------- -! -PTHS(:,:,:) = PTHS(:,:,:) * PRHODJ(:,:,:) -! -DO JRR = 1,KRR - PRS(:,:,:,JRR) = PRS(:,:,:,JRR) * PRHODJ(:,:,:) -END DO -! -IF (HCLOUD=='C2R2' .OR. HCLOUD=='C3R5' .OR. HCLOUD=='KHKO' .OR. HCLOUD=='LIMA') THEN - DO JSV = ISVBEG, ISVEND - PSVS(:,:,:,JSV) = PSVS(:,:,:,JSV) * PRHODJ(:,:,:) - ENDDO -ENDIF - -!------------------------------------------------------------------------------- -! -END SUBROUTINE RESOLVED_CLOUD diff --git a/src/mesonh/ext/set_rsou.f90 b/src/mesonh/ext/set_rsou.f90 deleted file mode 100644 index 352af8a53..000000000 --- a/src/mesonh/ext/set_rsou.f90 +++ /dev/null @@ -1,1640 +0,0 @@ -!MNH_LIC Copyright 1994-2021 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. -!----------------------------------------------------------------- -! #################### - MODULE MODI_SET_RSOU -! #################### -! -INTERFACE -! - SUBROUTINE SET_RSOU(TPFILE,TPEXPREFILE,HFUNU,HFUNV,KILOC,KJLOC,OBOUSS,& - PJ,OSHIFT,PCORIOZ) -! -USE MODD_IO, ONLY : TFILEDATA -! -TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! outpput data file -TYPE(TFILEDATA), INTENT(IN) :: TPEXPREFILE ! input data file -CHARACTER(LEN=*), INTENT(IN) :: HFUNU ! type of variation of U - ! in y direction -CHARACTER(LEN=*), INTENT(IN) :: HFUNV ! type of variation of V - ! in x direction -INTEGER, INTENT(IN) :: KILOC ! I Localisation of vertical profile -INTEGER, INTENT(IN) :: KJLOC ! J Localisation of vertical profile -LOGICAL, INTENT(IN) :: OBOUSS ! logical switch for Boussinesq version -REAL, DIMENSION(:,:,:), INTENT(IN) :: PJ ! jacobien -LOGICAL, INTENT(IN) :: OSHIFT ! logical switch for vertical shift -! -REAL, DIMENSION(:,:,:), INTENT(OUT), OPTIONAL :: PCORIOZ ! Coriolis parameter - ! (exceptionnaly 3D array) -! -END SUBROUTINE SET_RSOU -! -END INTERFACE -! -END MODULE MODI_SET_RSOU -! -! ######################################################################## - SUBROUTINE SET_RSOU(TPFILE,TPEXPREFILE,HFUNU,HFUNV,KILOC,KJLOC,OBOUSS, & - PJ,OSHIFT,PCORIOZ) -! ######################################################################## -! -!!**** *SET_RSOU * - to initialize mass fiels from a radiosounding -!! -!! PURPOSE -!! ------- -! The purpose of this routine is to initialize the mass field (theta,r, -! thetavrefz,rhorefz) on model grid from a radiosounding located at point -! (KILOC,KJLOC). -! -! The free-formatted part of EXPRE file contains the radiosounding data.The data -! are stored in following order : -! -! - year,month,day, time (these variables are read in PREINIT program) -! - kind of data in EXPRE file (see below for more explanations about -! YKIND) -! - ZGROUND -! - PGROUND -! - temperature variable at ground ( depending on the data Kind ) -! - moist variable at ground ( depending on the data Kind ) -! - number of wind data levels ( variable ILEVELU) -! - height , dd , ff | -! or or | ILEVELU times -! pressure, U , V | -! - number of mass levels ( variable ILEVELM), including the ground -! level -! - height , T , Td | -! or or or | (ILEVELM-1) times -! pressure, THeta_Dry , Mixing Ratio | -! or or | -! THeta_V , relative HUmidity| -! -! NB : the first mass level is at ground -! -! The following kind of data is permitted : -! YKIND = 'STANDARD' : ZGROUND, PGROUND, TGROUND, TDGROUND -! (Pressure, dd, ff) , -! (Pressure, T, Td) -! YKIND = 'PUVTHVMR' : zGROUND, PGROUND, ThvGROUND, RGROUND -! (Pressure, U, V) , -! (Pressure, THv, R) -! YKIND = 'PUVTHVHU' : zGROUND, PGROUND, ThvGROUND, HuGROUND -! (Pressure, U, V) , -! (Pressure, THv, Hu) -! YKIND = 'ZUVTHVHU' : zGROUND, PGROUND, ThvGROUND, HuGROUND -! (height, U, V) , -! (height, THv, Hu) -! YKIND = 'ZUVTHVMR' : zGROUND, PGROUND, ThvGROUND, RGROUND -! (height, U, V) , -! (height, THv, R) -! YKIND = 'PUVTHDMR' : zGROUND, PGROUND, ThdGROUND, RGROUND -! (Pressure, U, V) , -! (Pressure, THd, R) -! YKIND = 'PUVTHDHU' : zGROUND, PGROUND, ThdGROUND, HuGROUND -! (Pressure, U, V) , -! (Pressure, THd, Hu) -! YKIND = 'ZUVTHDMR' : zGROUND, PGROUND, ThdGROUND, -! RGROUND -! (height, U, V) , -! (height, THd, R) -! YKIND = 'PUVTHU' : ZGROUND, PGROUND, TGROUND, HuGROUND -! (Pressure, U, V) , -! (Pressure, T, Hu) -! -! For ocean-LES case the following kind of data is permitted -! -! YKIND = 'IDEALOCE' : ZGROUND (Water depth),PGROUND(Sfc Atmos Press), -! TGROUND (SST), RGROUND (SSS) -! (Depth , U, V) starting from sfc -! (Depth, T, S) -! (Time, LE, H, SW_d,SW_u,LW_d,LW_u,Stress_X,Stress_Y) -! -! YKIND = 'STANDOCE' : (Depth , Temp, Salinity, U, V) starting from sfc -! (Time, LE, H, SW_d,SW_u,LW_d,LW_u,Stress_X,Stress_Y) -! -!!** METHOD -!! ------ -!! The radiosounding is first read, then data are converted in order to -!! always obtain the following variables (case YKIND = 'ZUVTHVMR') : -!! (height,U,V) and (height,Thetav,r) which are the model variables. -!! That is to say : -!! - YKIND = 'STANDARD' : -!! dd,ff converted in U,V -!! Td + pressure ----> r -!! T,r ---> Tv + pressure ----> thetav -!! Pressure + thetav + ZGROUND ----> height (for mass levels) -!! Thetav at mass levels ----> thetav at wind levels -!! Pressure + thetav + ZGROUND + PGROUND ---->height (for wind levels) -!! - YKIND = 'PUVTHVMR' : -!! Pressure + thetav + ZGROUND ----> height (for mass levels) -!! Thetav at mass levels ----> thetav at wind levels -!! Pressure + thetav + ZGROUND + PGROUND ---->height (for wind levels) -!! - YKIND = 'PUVTHVHU' : -!! thetav + pressure ----> Tv +pressure +Hu ----> r -!! Pressure + thetav + ZGROUND ----> height (for mass levels) -!! Thetav at mass levels ----> thetav at wind levels -!! Pressure + thetav + ZGROUND + PGROUND ---->height (for wind levels) -!! - YKIND = 'ZUVTHVHU' : -!! height +thetav + PGROUND -----> pressure (for mass levels) -!! thetav + pressure ----> Tv +pressure +Hu ----> r -!! - YKIND = 'PUVTHDVMR' : -!! thetad + r ----> thetav -!! pressure + thetav + ZGROUND ----> height (for mass levels) -!! Thetav at mass levels ----> thetav at wind levels -!! Pressure + thetav + ZGROUND + PGROUND ---->height (for wind levels) -!! - YKIND = 'PUVTHDHU' : -!! thetad + pressure -----> T -!! T + pressure + Hu -----> r -!! thetad + r -----> thetav -!! pressure + thetav + ZGROUND ----> height (for mass levels) -!! Thetav at mass levels ----> thetav at wind levels -!! Pressure + thetav + ZGROUND + PGROUND ---->height (for wind levels) -!! - YKIND = 'ZUVTHDHU' : -!! thetad + r -----> thetav -!! - YKIND = 'PUVTHU' : -!! T + pressure -----> thetad -!! T + pressure + Hu -----> r -!! thetad + r -----> thetav -!! pressure + thetav + ZGROUND ----> height (for mass levels) -!! Thetav at mass levels ----> thetav at wind levels -!! -!! The following basic formula are used : -!! Rd es(Td) -!! r = -- ---------- -!! Rv P - es(Td) -!! -!! 1 + (Rv/Rd) r -!! Tv = -------------- T -!! 1 + r -!! -!! P00 Rd/Cpd 1 + (Rv/Rd) r -!! Thetav = Tv ( ---- ) = Thetad ( --------------) -!! P 1 + r -!! The integration of hydrostatic relation is used to compute height from -!! pressure and vice-versa. This is done by HEIGHT_PRESS and PRESS_HEIGHT -!! routines. -!! -!! Then, these data are interpolated on a vertical grid which is -!! a mixed grid calaculated with VERT_COORD from the vertical levels of MNH -!! grid and with a constant ororgraphy equal to the altitude of the vertical -!! profile (ZZGROUND) (It permits to keep low levels information with a -!! shifting function (as in PREP_REAL_CASE)) -!! -!! Then, the 3D mass and wind fields are deduced in SET_MASS -!! -!! -!! EXTERNAL -!! -------- -!! SET_MASS : to compute mass field on 3D-model grid -!! Module MODE_THERMO : contains thermodynamic routines -!! SM_FOES : To compute saturation vapor pressure from -!! temperature -!! SM_PMR_HU : to compute vapor mixing ratio from pressure, virtual -!! temperature and relative humidity -!! HEIGHT_PRESS : to compute height from pressure and thetav -!! by integration of hydrostatic relation -!! PRESS_HEIGHT : to compute pressure from height and thetav -!! by integration of hydrostatic relation -!! THETAVPU_THETAVPM : to interpolate thetav on wind levels -!! from thetav on mass levels -!! -!! Module MODI_HEIGHT_PRESS : interface for function HEIGHT_PRESS -!! Module MODI_PRESS_HEIGHT : interface for function PRESS_HEIGHT -!! Module MODI_THETAVPU_THETAVPM : interface for function -!! THETAVPU_THETVPM -!! Module MODI_SET_MASS : interface for subroutine SET_MASS -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! Module MODD_CST : contains physical constants -!! XPI : Pi -!! XRV : Gas constant for vapor -!! XRD : Gas constant for dry air -!! XCPD : Specific heat for dry air at constant pressure -!! -!! Module MODD_LUNIT1 : contains logical unit names -!! TLUOUT : name of output-listing -!! -!! Module MODD_CONF : contains configuration variables for all models. -!! NVERB : verbosity level for output-listing -!! -!! Module MODD_GRID1 : contains grid variables -!! XZHAT : height of w-levels of vertical model grid without orography -!! -!! REFERENCE -!! --------- -!! Book2 of MESO-NH documentation (routine SET_RSOU) -!! -!! -!! AUTHOR -!! ------ -!! V. Ducrocq * Meteo France * -!! -!! MODIFICATIONS -!! ------------- -!! Original 25/08/94 -!! J.Stein 06/12/94 change the way to prescribe the horizontal wind -!! variations + cleaning -!! J.Stein 18/01/95 bug corrections in the ILEVELM readings -!! J.Stein 16/04/95 put the same names of the declarative modules -!! in the descriptive part -!! J.Stein 30/01/96 use the RS ground pressure to initialize the -!! hydrostatic pressure computation -!! V.Masson 02/09/96 add allocation of ZTHVU in two cases -!! P.Jabouille 14/02/96 bug in extrapolation of ZMRM below the first level -!! Jabouille/Masson 05/12/02 add ZUVTHLMR case and hydrometeor initialization -!! P.Jabouille 29/10/03 add hydrometeor initialization for ZUVTHDMR case -!! G. Tanguy 26/10/10 change the interpolation of the RS : we use now a -!! mixed grid (PREP_REAL_CASE method) -!! add PUVTHU case -!! V.Masson 12/08/13 Parallelization of the initilization profile -!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -! P. Wautelet 19/04/2019: removed unused dummy arguments and variables -! JL Redelsperger 01/2021: Ocean LES cases added -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_CONF -USE MODD_CONF_n -USE MODD_CST -USE MODD_NEB, ONLY: NEB -USE MODD_DYN_n, ONLY: LOCEAN -USE MODD_FIELD_n -USE MODD_GRID -USE MODD_GRID_n -USE MODD_LUNIT_n, ONLY: TLUOUT -USE MODD_IO, ONLY: TFILEDATA -USE MODD_NETCDF -USE MODD_OCEANH -USE MODD_PARAMETERS, ONLY: JPHEXT -USE MODD_TYPE_DATE -! -USE MODE_ll -USE MODE_MSG -USE MODE_THERMO -! -USE MODI_COMPUTE_EXNER_FROM_GROUND -USE MODI_HEIGHT_PRESS -USE MODI_PRESS_HEIGHT -USE MODI_SET_MASS -USE MODI_SHUMAN -USE MODI_THETAVPU_THETAVPM -USE MODI_VERT_COORD -! -USE NETCDF ! for reading the NR files -! -IMPLICIT NONE -! -! -!* 0.1 Declarations of arguments : -! -TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! outpput data file -TYPE(TFILEDATA), INTENT(IN) :: TPEXPREFILE ! input data file -CHARACTER(LEN=*), INTENT(IN) :: HFUNU ! type of variation of U - ! in y direction -CHARACTER(LEN=*), INTENT(IN) :: HFUNV ! type of variation of V - ! in x direction -INTEGER, INTENT(IN) :: KILOC ! I Localisation of vertical profile -INTEGER, INTENT(IN) :: KJLOC ! J Localisation of vertical profile -LOGICAL, INTENT(IN) :: OBOUSS ! logical switch for Boussinesq version -LOGICAL, INTENT(IN) :: OSHIFT ! logical switch for vertical shift -REAL, DIMENSION(:,:,:), INTENT(OUT), OPTIONAL :: PCORIOZ ! Coriolis parameter - ! (exceptionnaly 3D array) -REAL, DIMENSION(:,:,:), INTENT(IN) :: PJ ! jacobien -! -! -!* 0.2 Declarations of local variables : -! -INTEGER :: ILUPRE ! logical unit number of the EXPRE return code -INTEGER :: ILUOUT ! Logical unit number for output-listing -! local variables for reading sea sfc flux forcing for ocean model -INTEGER :: IFRCLT -REAL, DIMENSION(:), ALLOCATABLE :: ZSSUFL_T,ZSSVFL_T,ZSSTFL_T,ZSSOLA_T ! -TYPE (DATE_TIME), DIMENSION(:), ALLOCATABLE :: ZFRCLT ! date/time of sea surface forcings -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! variables read in EXPRE file at the RS/CTD levels -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -CHARACTER(LEN=8) :: YKIND ! Kind of variables in - ! EXPRE FILE -INTEGER :: ILEVELU ! number of wind levels -REAL, DIMENSION(:), ALLOCATABLE :: ZHEIGHTU ! Height at wind levels -REAL, DIMENSION(:), ALLOCATABLE :: ZPRESSU ! Pressure at wind levels -REAL, DIMENSION(:), ALLOCATABLE :: ZTHVU ! Thetav at wind levels -REAL, DIMENSION(:), ALLOCATABLE :: ZU,ZV ! wind components -REAL, DIMENSION(:), ALLOCATABLE :: ZDD,ZFF ! dd (direction) and ff(force) - ! for wind -REAL :: ZZGROUND,ZPGROUND ! height and Pressure at ground -REAL :: ZTGROUND,ZTHVGROUND,ZTHDGROUND,ZTHLGROUND, & - ZTDGROUND,ZMRGROUND,ZHUGROUND - ! temperature and moisture - ! variables at ground -INTEGER :: ILEVELM ! number of mass levels -REAL, DIMENSION(:), ALLOCATABLE :: ZHEIGHTM ! Height at mass levels -REAL, DIMENSION(:), ALLOCATABLE :: ZPRESSM ! Pressure at mass levels -REAL, DIMENSION(:), ALLOCATABLE :: ZTHV ! Thetav at mass levels -REAL, DIMENSION(:), ALLOCATABLE :: ZTHD ! Theta (dry) at mass levels -REAL, DIMENSION(:), ALLOCATABLE :: ZTHL ! Thetal at mass levels -REAL, DIMENSION(:), ALLOCATABLE :: ZTH ! Theta at mass levels -REAL, DIMENSION(:), ALLOCATABLE :: ZT ! Temperature at mass levels -REAL, DIMENSION(:), ALLOCATABLE :: ZMR ! Vapor mixing ratio at mass levels -REAL, DIMENSION(:), ALLOCATABLE :: ZMRC ! cloud mixing ratio at mass levels -REAL, DIMENSION(:), ALLOCATABLE :: ZMRI ! ice mixing ratio or cloud concentration -REAL, DIMENSION(:), ALLOCATABLE :: ZRT ! total mixing ratio -REAL, DIMENSION(:), ALLOCATABLE :: ZPRESS ! pressure at mass level -REAL, DIMENSION(:), ALLOCATABLE :: ZHU ! relative humidity at mass levels -REAL, DIMENSION(:), ALLOCATABLE :: ZTD ! Td at mass levels -REAL, DIMENSION(:), ALLOCATABLE :: ZTV ! Tv at mass levels -REAL, DIMENSION(:), ALLOCATABLE :: ZEXN -REAL, DIMENSION(:), ALLOCATABLE :: ZCPH -REAL, DIMENSION(:), ALLOCATABLE :: ZLVOCPEXN -REAL, DIMENSION(:), ALLOCATABLE :: ZLSOCPEXN -REAL, DIMENSION(SIZE(XZHAT)) :: ZZFLUX_PROFILE ! altitude of flux points on the initialization columns -REAL, DIMENSION(SIZE(XZHAT)) :: ZZMASS_PROFILE ! altitude of mass points on the initialization columns -! -! fields on the grid of the model without orography -! -REAL, DIMENSION(SIZE(XZHAT)) :: ZUW,ZVW ! Wind at w model grid levels -REAL, DIMENSION(SIZE(XZHAT)) :: ZMRM ! vapor mixing ratio at mass model - !grid levels -REAL, DIMENSION(SIZE(XZHAT)) :: ZMRCM,ZMRIM -REAL, DIMENSION(SIZE(XZHAT)) :: ZTHVM ! Temperature at mass model grid levels -REAL, DIMENSION(SIZE(XZHAT)) :: ZTHLM ! Thetal at mass model grid levels -REAL, DIMENSION(SIZE(XZHAT)) :: ZTHM ! Thetal at mass model grid levels -REAL, DIMENSION(SIZE(XZHAT)) :: ZRHODM ! density at mass model grid level -REAL, DIMENSION(:), ALLOCATABLE :: ZMRT ! Total Vapor mixing ratio at mass levels on mixed grid -REAL, DIMENSION(:), ALLOCATABLE :: ZEXNMASS ! exner fonction at mass level -REAL, DIMENSION(:), ALLOCATABLE :: ZEXNFLUX ! exner fonction at flux level -REAL :: ZEXNSURF ! exner fonction at surface -REAL, DIMENSION(:), ALLOCATABLE :: ZPREFLUX ! pressure at flux model grid level -REAL, DIMENSION(:), ALLOCATABLE :: ZFRAC_ICE ! ice fraction -REAL, DIMENSION(:), ALLOCATABLE :: ZRSATW, ZRSATI -REAL :: ZDZSDH,ZDZ1SDH,ZDZ2SDH ! interpolation - ! working arrays -REAL, DIMENSION(:,:), ALLOCATABLE :: ZBUF -! -INTEGER :: JK,JKLEV,JKU,JKM,JKT,JJ,JI,JO,JLOOP ! Loop indexes -INTEGER :: IKU ! Upper bound in z direction -REAL :: ZRDSCPD,ZRADSDG, & ! Rd/Cpd, Pi/180., - ZRVSRD,ZRDSRV, & ! Rv/Rd, Rd/Rv - ZPTOP ! Pressure at domain top -LOGICAL :: GUSERC ! use of input data cloud -INTEGER :: IIB, IIE, IJB, IJE -INTEGER :: IXOR_ll, IYOR_ll -INTEGER :: IINFO_ll -LOGICAL :: GPROFILE_IN_PROC ! T : initialization profile is in current processor -! -REAL,DIMENSION(SIZE(XXHAT),SIZE(XYHAT)) ::ZZS_LS -REAL,DIMENSION(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT)) ::ZZFLUX_MX,ZZMASS_MX ! mixed grid -!------------------------------------------------------------------------------- -! For standard ocean version, reading external files -CHARACTER(LEN=256) :: yinfile, yinfisf ! files to be read -INTEGER :: IDX -INTEGER(KIND=CDFINT) :: INZ, INLATI, INLONGI -INTEGER(KIND=CDFINT) :: incid, ivarid, idimid, idimlen -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZOC_TEMPERATURE,ZOC_SALINITY,ZOC_U,ZOC_V -REAL, DIMENSION(:), ALLOCATABLE :: ZOC_DEPTH -REAL, DIMENSION(:), ALLOCATABLE :: ZOC_LE,ZOC_H -REAL, DIMENSION(:), ALLOCATABLE :: ZOC_SW_DOWN,ZOC_SW_UP,ZOC_LW_DOWN,ZOC_LW_UP -REAL, DIMENSION(:), ALLOCATABLE :: ZOC_TAUX,ZOC_TAUY - -!-------------------------------------------------------------------------------- -! -!* 1. PROLOGUE : INITIALIZE SOME CONSTANTS, RETRIEVE LOGICAL -! UNIT NUMBERS AND READ KIND OF DATA IN EXPRE FILE -! ------------------------------------------------------- -! -CALL GET_INDICE_ll(IIB,IJB,IIE,IJE) -CALL GET_OR_ll('B',IXOR_ll,IYOR_ll) -! -!* 1.1 initialize some constants -! -ZRDSCPD = XRD / XCPD -ZRADSDG = XPI/180. -ZRVSRD = XRV/XRD -ZRDSRV = XRD/XRV -! -!* 1.2 Retrieve logical unit numbers -! -ILUPRE = TPEXPREFILE%NLU -ILUOUT = TLUOUT%NLU -! -!* 1.3 Read data kind in EXPRE file -! -READ(ILUPRE,*) YKIND -WRITE(ILUOUT,*) 'YKIND read in set_rsou: ', YKIND -! -IF(LUSERC .AND. YKIND/='PUVTHDMR' .AND. YKIND/='ZUVTHDMR' .AND. YKIND/='ZUVTHLMR') THEN - CALL PRINT_MSG(NVERB_FATAL,'GEN','SET_RSOU','hydrometeors are not allowed for YKIND = '//trim(YKIND)) -ENDIF -! -IF(YKIND=='ZUVTHLMR' .AND. .NOT. LUSERC) THEN -!callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','SET_RSOU','LUSERC=T is required for YKIND=ZUVTHLMR') -ENDIF -! -GUSERC=.FALSE. -IF(LUSERC .AND. (YKIND == 'PUVTHDMR' .OR. YKIND == 'ZUVTHDMR')) GUSERC=.TRUE. -!------------------------------------------------------------------------------- -! -!* 2. READ DATA AND CONVERT IN (height,U,V), (height,Thetav,r) -! -------------------------------------------------------- -! -SELECT CASE(YKIND) -! -! 2.0.1 Ocean case 1 -! - CASE ('IDEALOCE') -! - XP00=XP00OCEAN - ! Read data in PRE_IDEA1.nam - ! Surface - WRITE(ILUOUT,FMT=*) 'Reading data for ideal ocean :IDEALOCE' - READ(ILUPRE,*) ZPTOP ! P_atmosphere at sfc =P top domain - READ(ILUPRE,*) ZTGROUND ! SST - READ(ILUPRE,*) ZMRGROUND ! SSS - WRITE(ILUOUT,FMT=*) 'Patm SST SSS', ZPTOP,ZTGROUND,ZMRGROUND - READ(ILUPRE,*) ILEVELU ! Read number of Current levels - ! Allocate required memory - ALLOCATE(ZHEIGHTU(ILEVELU),ZU(ILEVELU),ZV(ILEVELU)) - ALLOCATE(ZOC_U(ILEVELU,1,1),ZOC_V(ILEVELU,1,1)) - WRITE(ILUOUT,FMT=*) 'Level number for Current in data', ILEVELU - ! Read U and V at each wind level - DO JKU = 1,ILEVELU - READ(ILUPRE,*) ZHEIGHTU(JKU),ZOC_U(JKU,1,1),ZOC_V(JKU,1,1) - ! WRITE(ILUOUT,FMT=*) 'Leveldata D(m) under sfc: U_cur, V_cur', JKU, ZHEIGHTU(JKU),ZU(JKU),ZV(JKU) - END DO - DO JKU=1,ILEVELU - ! Z axis reoriented as in the model - IDX = ILEVELU-JKU+1 - ZU(JKU) = ZOC_U(IDX,1,1) - ZV(JKU) = ZOC_V(IDX,1,1) - ! ZHEIGHT used only in set_ rsou, defined as such ZHEIGHT(ILEVELM)=H_model - ! Z oriented in same time to have a model domain axis going - ! from 0m (ocean bottom/model bottom) towards H (ocean sfc/model top) - END DO - ! Read number of mass levels - READ(ILUPRE,*) ILEVELM - ! Allocate required memory - ALLOCATE(ZOC_DEPTH(ILEVELM)) - ALLOCATE(ZHEIGHTM(ILEVELM)) - ALLOCATE(ZTHL(ILEVELM),ZTH(ILEVELM),ZTHV(ILEVELM)) - ALLOCATE(ZMR(ILEVELM),ZRT(ILEVELM)) - ALLOCATE(ZOC_TEMPERATURE(ILEVELM,1,1),ZOC_SALINITY(ILEVELM,1,1)) - ! Read T and S at each mass level - DO JKM= 2,ILEVELM - READ(ILUPRE,*) ZOC_DEPTH(JKM),ZOC_TEMPERATURE(JKM,1,1),ZOC_SALINITY(JKM,1,1) - END DO - ! Complete the mass arrays with the ground informations read in EXPRE file - ZOC_DEPTH(1) = 0. - ZOC_TEMPERATURE(1,1,1)= ZTGROUND - ZOC_SALINITY(1,1,1)= ZMRGROUND - !!!!!!!!!!!!!!!!!!!!!!!!Inversing Axis!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! Going from the data (axis downward i.e inverse model) grid to the model grid (axis upward) - ! Uniform bathymetry; depth goes from ocean sfc downwards (data grid) - ! ZHEIGHT goes from the model domain bottom up to the sfc ocean (top of model domain) - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ZZGROUND = 0. - ZTGROUND = ZOC_TEMPERATURE(ILEVELM,1,1) - ZMRGROUND = ZOC_SALINITY(ILEVELM,1,1) - DO JKM= 1,ILEVELM - ! Z upward axis (oriented as in the model), i.e. - ! going from 0m (ocean bottom/model bottom) upward to H (ocean sfc/model top) - ! ZHEIGHT used only in set_ rsou, defined as such ZHEIGHT(ILEVELM)=H_model - IDX = ILEVELM-JKM+1 - ZTH(JKM) = ZOC_TEMPERATURE(IDX,1,1) - ZMR(JKM) = ZOC_SALINITY(IDX,1,1) - ZHEIGHTM(JKM)= ZOC_DEPTH(ILEVELM)- ZOC_DEPTH(IDX) - WRITE(ILUOUT,FMT=*) 'Model oriented initial data: JKM IDX depth T S ZHEIGHTM', & - JKM,IDX,ZOC_DEPTH(IDX),ZTH(JKM),ZMR(JKM),ZHEIGHTM(JKM) - END DO - ! mass levels of the RS - ZTHV = ZTH ! TV==THETA=TL - ZTHL = ZTH - ZRT = ZMR - !!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! READ Sea Surface Forcing ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! Reading the forcings from prep_idea1.nam - READ(ILUPRE,*) IFRCLT ! Number of time-dependent forcing - IF (IFRCLT > 99*8) THEN - ! CAUTION: number of forcing times is limited by the WRITE format 99(8E10.3) - ! and also by the name of forcing variables (format I3.3) - ! You have to modify those if you need more forcing times - CALL PRINT_MSG(NVERB_FATAL,'IO','SET_RSOU','maximum forcing times NFRCLT is 99*8') - END IF -! - WRITE(UNIT=ILUOUT,FMT='(" THERE ARE ",I2," SFC FLUX FORCINGs AT:")') IFRCLT - ALLOCATE(ZFRCLT(IFRCLT)) - ALLOCATE(ZSSUFL_T(IFRCLT)); ZSSUFL_T = 0.0 - ALLOCATE(ZSSVFL_T(IFRCLT)); ZSSVFL_T = 0.0 - ALLOCATE(ZSSTFL_T(IFRCLT)); ZSSTFL_T = 0.0 - ALLOCATE(ZSSOLA_T(IFRCLT)); ZSSOLA_T = 0.0 - DO JKT = 1,IFRCLT - WRITE(ILUOUT,FMT='(A, I4)') "SET_RSOU/Reading Sea Surface forcing: Number=", JKT - READ(ILUPRE,*) ZFRCLT(JKT)%nyear, ZFRCLT(JKT)%nmonth, & - ZFRCLT(JKT)%nday, ZFRCLT(JKT)%xtime - READ(ILUPRE,*) ZSSUFL_T(JKT) - READ(ILUPRE,*) ZSSVFL_T(JKT) - READ(ILUPRE,*) ZSSTFL_T(JKT) - READ(ILUPRE,*) ZSSOLA_T(JKT) - END DO -! - DO JKT = 1 , IFRCLT - WRITE(UNIT=ILUOUT,FMT='(F9.0, "s, date:", I3, "/", I3, "/", I5)') & - ZFRCLT(JKT)%xtime, ZFRCLT(JKT)%nday, & - ZFRCLT(JKT)%nmonth, ZFRCLT(JKT)%nyear - END DO - NINFRT= INT(ZFRCLT(2)%xtime) - WRITE(ILUOUT,FMT='(A)') & - "Number U-Stress, V-Stress, Heat turb Flux, Solar Flux Interval(s)",NINFRT - DO JKT = 1, IFRCLT - WRITE(ILUOUT,FMT='(I10,99(3F10.2))') JKT, ZSSUFL_T(JKT),ZSSVFL_T(JKT),ZSSTFL_T(JKT) - END DO - NFRCLT = IFRCLT - ALLOCATE(TFRCLT(NFRCLT)) - ALLOCATE(XSSUFL_T(NFRCLT));XSSUFL_T(:)=0. - ALLOCATE(XSSVFL_T(NFRCLT));XSSVFL_T(:)=0. - ALLOCATE(XSSTFL_T(NFRCLT));XSSTFL_T(:)=0. - ALLOCATE(XSSOLA_T(NFRCLT));XSSOLA_T(:)=0. -! - DO JKT=1,NFRCLT - TFRCLT(JKT)= ZFRCLT(JKT) - XSSUFL_T(JKT)=ZSSUFL_T(JKT)/XRH00OCEAN - XSSVFL_T(JKT)=ZSSVFL_T(JKT)/XRH00OCEAN - ! working in SI - XSSTFL_T(JKT)=ZSSTFL_T(JKT) /(3900.*XRH00OCEAN) - XSSOLA_T(JKT)=ZSSOLA_T(JKT) /(3900.*XRH00OCEAN) - END DO - DEALLOCATE(ZFRCLT) - DEALLOCATE(ZSSUFL_T) - DEALLOCATE(ZSSVFL_T) - DEALLOCATE(ZSSTFL_T) - DEALLOCATE(ZSSOLA_T) -! -!-------------------------------------------------------------------------------- -! 2.0.2 Ocean standard initialize from netcdf files -! U,V,T,S at Z levels + Forcings at model TOP (sea surface) -!-------------------------------------------------------------------------------- -! - CASE ('STANDOCE') -! - XP00=XP00OCEAN - READ(ILUPRE,*) ZPTOP ! P_atmosphere at sfc =P top domain - READ(ILUPRE,*) YINFILE, YINFISF - WRITE(ILUOUT,FMT=*) 'Netcdf files to read:', YINFILE, YINFISF - ! Open file containing initial profiles - CALL check(nf90_open(yinfile,NF90_NOWRITE,incid), "opening NC file") - ! Reading dimensions and lengths - CALL check( nf90_inq_dimid(incid, "depth",idimid), "getting depth dimension id" ) - CALL check( nf90_inquire_dimension(incid, idimid, len=INZ), "getting INZ" ) - CALL check( nf90_inquire_dimension(incid, INT(2,KIND=CDFINT), len=INLONGI), "getting NLONG" ) - CALL check( nf90_inquire_dimension(incid, INT(1,KIND=CDFINT), len=INLATI), "getting NLAT" ) -! - WRITE(ILUOUT,FMT=*) 'NB LEVLS READ INZ, NLONG NLAT ', INZ, INLONGI,INLATI - ALLOCATE(ZOC_TEMPERATURE(INLATI,INLONGI,INZ),ZOC_SALINITY(INLATI,INLONGI,INZ)) - ALLOCATE(ZOC_U(INLATI,INLONGI,INZ),ZOC_V(INLATI,INLONGI,INZ)) - ALLOCATE(ZOC_DEPTH(INZ)) - WRITE(ILUOUT,FMT=*) 'NETCDF READING ==> Temp' - CALL check(nf90_inq_varid(incid,"temperature",ivarid), "getting temp ivarid") - CALL check(nf90_get_var(incid,ivarid,ZOC_TEMPERATURE), "reading temp") - WRITE(ILUOUT,FMT=*) 'Netcdf Reading ==> salinity' - CALL check(nf90_inq_varid(incid,"salinity",ivarid), "getting salinity ivarid") - CALL check(nf90_get_var(incid,ivarid,ZOC_SALINITY), "reading salinity") - WRITE(ILUOUT,FMT=*) 'Netcdf ==> Reading depth' - CALL check(nf90_inq_varid(incid,"depth",ivarid), "getting depth ivarid") - CALL check(nf90_get_var(incid,ivarid,ZOC_DEPTH), "reading depth") - WRITE(ILUOUT,FMT=*) 'depth: max min ', MAXVAL(ZOC_DEPTH),MINVAL(ZOC_DEPTH) - WRITE(ILUOUT,FMT=*) 'depth 1 nz: ', ZOC_DEPTH(1),ZOC_DEPTH(INZ) - WRITE(ILUOUT,FMT=*) 'Netcdf Reading ==> Currents' - CALL check(nf90_inq_varid(incid,"u",ivarid), "getting u ivarid") - CALL check(nf90_get_var(incid,ivarid,ZOC_U), "reading u") - CALL check(nf90_inq_varid(incid,"v",ivarid), "getting v ivarid") - CALL check(nf90_get_var(incid,ivarid,ZOC_V), "reading v") - CALL check(nf90_close(incid), "closing yinfile") - WRITE(ILUOUT,FMT=*) 'End of initial file reading' -! - DO JKM=1,INZ - ZOC_TEMPERATURE(1,1,JKM)=ZOC_TEMPERATURE(1,1,JKM)+273.15 - WRITE(ILUOUT,FMT=*) 'Z T(Kelvin) S(Sverdup) U V K',& - JKM,ZOC_DEPTH(JKM),ZOC_TEMPERATURE(1,1,JKM),ZOC_SALINITY(1,1,JKM),ZOC_U(1,1,JKM),ZOC_V(1,1,JKM), JKM - ENDDO - ! number of data levels - ILEVELM=INZ - ! Model bottom - ZTGROUND = ZOC_TEMPERATURE(1,1,ILEVELM) - ZMRGROUND = ZOC_SALINITY(1,1,ILEVELM) - ZZGROUND=0. - ! Allocate required memory - ALLOCATE(ZHEIGHTM(ILEVELM)) - ALLOCATE(ZT(ILEVELM)) - ALLOCATE(ZTV(ILEVELM)) - ALLOCATE(ZMR(ILEVELM)) - ALLOCATE(ZTHV(ILEVELM)) - ALLOCATE(ZTHL(ILEVELM)) - ALLOCATE(ZRT(ILEVELM)) - ! Going from the inverse model grid (data) to the normal one - DO JKM= 1,ILEVELM - ! Z axis reoriented as in the model - IDX = ILEVELM-JKM+1 - ZT(JKM) = ZOC_TEMPERATURE(1,1,IDX) - ZMR(JKM) = ZOC_SALINITY(1,1,IDX) - ! ZHEIGHT used only in set_ rsou, defined as such ZHEIGHT(ILEVELM)=H_model - ! Z oriented in same time to have a model domain axis going - ! from 0m (ocean bottom/model bottom) towards H (ocean sfc/model top) - ! translation/inversion - ZHEIGHTM(JKM) = -ZOC_DEPTH(IDX) + ZOC_DEPTH(ILEVELM) - WRITE(ILUOUT,FMT=*) 'End gridmodel comput: JKM IDX depth T S ZHEIGHTM', & - JKM,IDX,ZOC_DEPTH(IDX),ZT(JKM),ZMR(JKM),ZHEIGHTM(JKM) - END DO - ! complete ther variables - ZTV = ZT - ZTHV = ZT - ZRT = ZMR - ZTHL = ZT - ZTH = ZT - ! INIT --- U V ----- - ILEVELU = INZ ! Same nb of levels for u,v,T,S - !Assume that current and temp are given at same level - ALLOCATE(ZHEIGHTU(ILEVELU)) - ALLOCATE(ZU(ILEVELU),ZV(ILEVELU)) - ZHEIGHTU=ZHEIGHTM - DO JKM= 1,ILEVELU - ! Z axis reoriented as in the model - IDX = ILEVELU-JKM+1 - ZU(JKM) = ZOC_U(1,1,IDX) - ZV(JKM) = ZOC_V(1,1,IDX) - ! ZHEIGHT used only in set_ rsou, defined as such ZHEIGHT(ILEVELM)=H_model - ! Z oriented in same time to have a model domain axis going - ! from 0m (ocean bottom/model bottom) towards H (ocean sfc/model top) - END DO -! - DEALLOCATE(ZOC_TEMPERATURE) - DEALLOCATE(ZOC_SALINITY) - DEALLOCATE(ZOC_U) - DEALLOCATE(ZOC_V) - DEALLOCATE(ZOC_DEPTH) -! - ! Reading/initializing surface forcings -! - WRITE(ILUOUT,FMT=*) 'netcdf sfc forcings file to be read:',yinfisf - ! Open of sfc forcing file - CALL check(nf90_open(yinfisf,NF90_NOWRITE,incid), "opening NC file") - ! Reading dimension and length - CALL check( nf90_inq_dimid(incid,"t",idimid), "getting time dimension id" ) - CALL check( nf90_inquire_dimension(incid, idimid, len=idimlen), "getting idimlen " ) -! - WRITE(ILUOUT,FMT=*) 'nb sfc-forcing time idimlen=',idimlen - ALLOCATE(ZOC_LE(idimlen)) - ALLOCATE(ZOC_H(idimlen)) - ALLOCATE(ZOC_SW_DOWN(idimlen)) - ALLOCATE(ZOC_SW_UP(idimlen)) - ALLOCATE(ZOC_LW_DOWN(idimlen)) - ALLOCATE(ZOC_LW_UP(idimlen)) - ALLOCATE(ZOC_TAUX(idimlen)) - ALLOCATE(ZOC_TAUY(idimlen)) -! - WRITE(ILUOUT,FMT=*)'Netcdf Reading ==> LE' - CALL check(nf90_inq_varid(incid,"LE",ivarid), "getting LE ivarid") - CALL check(nf90_get_var(incid,ivarid,ZOC_LE), "reading LE flux") - WRITE(ILUOUT,FMT=*)'Netcdf Reading ==> H' - CALL check(nf90_inq_varid(incid,"H",ivarid), "getting H ivarid") - CALL check(nf90_get_var(incid,ivarid,ZOC_H), "reading H flux") - WRITE(ILUOUT,FMT=*) 'Netcdf Reading ==> SW_DOWN' - CALL check(nf90_inq_varid(incid,"SW_DOWN",ivarid), "getting SW_DOWN ivarid") - CALL check(nf90_get_var(incid,ivarid,ZOC_SW_DOWN), "reading SW_DOWN") - WRITE(ILUOUT,FMT=*) 'Netcdf Reading ==> SW_UP' - CALL check(nf90_inq_varid(incid,"SW_UP",ivarid), "getting SW_UP ivarid") - CALL check(nf90_get_var(incid,ivarid,ZOC_SW_UP), "reading SW_UP") - WRITE(ILUOUT,FMT=*) 'Netcdf Reading ==> LW_DOWN' - CALL check(nf90_inq_varid(incid,"LW_DOWN",ivarid), "getting LW_DOWN ivarid") - CALL check(nf90_get_var(incid,ivarid,ZOC_LW_DOWN), "reading LW_DOWN") - WRITE(ILUOUT,FMT=*) 'Netcdf Reading ==> LW_UP' - CALL check(nf90_inq_varid(incid,"LW_UP",ivarid), "getting LW_UP ivarid") - CALL check(nf90_get_var(incid,ivarid,ZOC_LW_UP), "reading LW_UP") - WRITE(ILUOUT,FMT=*) 'Netcdf Reading ==> TAUX' - CALL check(nf90_inq_varid(incid,"TAUX",ivarid), "getting TAUX ivarid") - CALL check(nf90_get_var(incid,ivarid,ZOC_TAUX), "reading TAUX") - WRITE(ILUOUT,FMT=*) 'Netcdf Reading ==> TAUY' - CALL check(nf90_inq_varid(incid,"TAUY",ivarid), "getting TAUY ivarid") - CALL check(nf90_get_var(incid,ivarid,ZOC_TAUY), "reading TAUY") - CALL check(nf90_close(incid), "closing yinfifs") -! - WRITE(ILUOUT,FMT=*) ' Forcing-Number LE H SW_down SW_up LW_down LW_up TauX TauY' - DO JKM = 1, idimlen - WRITE(ILUOUT,FMT=*) JKM, ZOC_LE(JKM), ZOC_H(JKM),ZOC_SW_DOWN(JKM),ZOC_SW_UP(JKM),& - ZOC_LW_DOWN(JKM),ZOC_LW_UP(JKM),ZOC_TAUX(JKM),ZOC_TAUY(JKM) - ENDDO - ! IFRCLT FORCINGS at sea surface - IFRCLT=idimlen - ALLOCATE(ZFRCLT(IFRCLT)) - ALLOCATE(ZSSUFL_T(IFRCLT)); ZSSUFL_T = 0.0 - ALLOCATE(ZSSVFL_T(IFRCLT)); ZSSVFL_T = 0.0 - ALLOCATE(ZSSTFL_T(IFRCLT)); ZSSTFL_T = 0.0 - ALLOCATE(ZSSOLA_T(IFRCLT)); ZSSOLA_T = 0.0 - DO JKT=1,IFRCLT - ! Initial file for CINDY-DYNAMO: all fluxes correspond to the absolute value (>0) - ! modele ocean: axe z dirigé du bas vers la sfc de l'océan - ! => flux dirigé vers le haut (positif ocean vers l'atmopshere i.e. bas vers le haut) - ZSSOLA_T(JKT)=ZOC_SW_DOWN(JKT)-ZOC_SW_UP(JKT) - ZSSTFL_T(JKT)=(ZOC_LW_DOWN(JKT)-ZOC_LW_UP(JKT)-ZOC_LE(JKT)-ZOC_H(JKT)) - ! assume that Tau given on file is along Ox - ! rho_air UW_air = rho_ocean UW_ocean= N/m2 - ! uw_ocean - ZSSUFL_T(JKT)=ZOC_TAUX(JKT) - ZSSVFL_T(JKT)=ZOC_TAUY(JKT) - WRITE(ILUOUT,FMT=*) 'Forcing Nb Sol NSol UW_oc VW',& - JKT,ZSSOLA_T(JKT),ZSSTFL_T(JKT),ZSSUFL_T(JKT),ZSSVFL_T(JKT) - ENDDO - ! Allocate and Writing the corresponding variables in module MODD_OCEAN_FRC - NFRCLT=IFRCLT - ! value to read later on file ? - NINFRT=600 - ALLOCATE(TFRCLT(NFRCLT)) - ALLOCATE(XSSUFL_T(NFRCLT));XSSUFL_T(:)=0. - ALLOCATE(XSSVFL_T(NFRCLT));XSSVFL_T(:)=0. - ALLOCATE(XSSTFL_T(NFRCLT));XSSTFL_T(:)=0. - ALLOCATE(XSSOLA_T(NFRCLT));XSSOLA_T(:)=0. - ! on passe en unités SI, signe, etc pour le modele ocean - ! W/m2 => SI : /(CP_mer * rho_mer) - ! a revoir dans tt le code pour mettre de svaleurs plus exactes - DO JKT=1,NFRCLT - TFRCLT(JKT)= ZFRCLT(JKT) - XSSUFL_T(JKT)=ZSSUFL_T(JKT)/XRH00OCEAN - XSSVFL_T(JKT)=ZSSVFL_T(JKT)/XRH00OCEAN - XSSTFL_T(JKT)=ZSSTFL_T(JKT) /(3900.*XRH00OCEAN) - XSSOLA_T(JKT)=ZSSOLA_T(JKT) /(3900.*XRH00OCEAN) - END DO - DEALLOCATE(ZFRCLT) - DEALLOCATE(ZSSUFL_T) - DEALLOCATE(ZSSVFL_T) - DEALLOCATE(ZSSTFL_T) - DEALLOCATE(ZSSOLA_T) - DEALLOCATE(ZOC_LE) - DEALLOCATE(ZOC_H) - DEALLOCATE(ZOC_SW_DOWN) - DEALLOCATE(ZOC_SW_UP) - DEALLOCATE(ZOC_LW_DOWN) - DEALLOCATE(ZOC_LW_UP) - DEALLOCATE(ZOC_TAUX) - DEALLOCATE(ZOC_TAUY) - ! END OCEAN STANDARD -! -! -!* 2.1 ATMOSPHERIC STANDARD case : ZGROUND, PGROUND, TGROUND, TDGROUND -! (Pressure, dd, ff) , -! (Pressure, T, Td) -! - CASE ('STANDARD') - - READ(ILUPRE,*) ZZGROUND ! Read data at ground level - READ(ILUPRE,*) ZPGROUND - READ(ILUPRE,*) ZTGROUND - READ(ILUPRE,*) ZTDGROUND -! - READ(ILUPRE,*) ILEVELU ! Read number of wind levels - ALLOCATE(ZPRESSU(ILEVELU)) ! Allocate memory for arrays to be read - ALLOCATE(ZDD(ILEVELU),ZFF(ILEVELU)) - ALLOCATE(ZHEIGHTU(ILEVELU)) ! Allocate memory for needed - ALLOCATE(ZU(ILEVELU),ZV(ILEVELU)) ! arrays - ALLOCATE(ZTHVU(ILEVELU)) ! Allocate memory for intermediate - ! arrays -! - DO JKU = 1,ILEVELU ! Read data at wind levels - READ(ILUPRE,*) ZPRESSU(JKU),ZDD(JKU),ZFF(JKU) - END DO -! - READ(ILUPRE,*) ILEVELM ! Read number of mass levels - ! including the ground level - ALLOCATE(ZPRESSM(ILEVELM)) ! Allocate memory for arrays to be read - ALLOCATE(ZT(ILEVELM)) - ALLOCATE(ZTD(ILEVELM)) - ALLOCATE(ZHEIGHTM(ILEVELM)) ! Allocate memory for needed - ALLOCATE(ZTHV(ILEVELM)) ! arrays - ALLOCATE(ZMR(ILEVELM)) - ALLOCATE(ZTV(ILEVELM)) ! Allocate memory for intermediate arrays - ALLOCATE(ZTHL(ILEVELM)) - ALLOCATE(ZRT(ILEVELM)) -! -! - DO JKM= 2,ILEVELM ! Read data at mass levels - READ(ILUPRE,*) ZPRESSM(JKM),ZT(JKM),ZTD(JKM) - END DO - ZPRESSM(1)=ZPGROUND ! Mass level 1 is at the ground - ZT(1)=ZTGROUND - ZTD(1)=ZTDGROUND -! -! recover the North-South and West-East wind components - ZU(:) = ZFF(:)*COS(ZRADSDG*(270.-ZDD(:)) ) - ZV(:) = ZFF(:)*SIN(ZRADSDG*(270.-ZDD(:)) ) -! -! compute vapor mixing ratio - ZMR(:) = SM_FOES(ZTD(:)) & - / ( (ZPRESSM(:) - SM_FOES(ZTD(:))) * ZRVSRD ) -! -! compute Tv - ZTV(:) = ZT(:) * (1. + ZRVSRD * ZMR(:))/(1.+ZMR(:)) -! -! compute thetav - ZTHV(:) = ZTV(:) * (XP00/ ZPRESSM(:)) **(ZRDSCPD) -! -! compute height at the mass levels of the RS - ZHEIGHTM(:) = HEIGHT_PRESS(ZPRESSM,ZTHV,ZPGROUND,ZTHV(1),ZZGROUND) -! -! compute thetav and height at the wind levels of the RS - ZTHVU(:) = THETAVPU_THETAVPM(ZPRESSM,ZPRESSU,ZTHV) - ZHEIGHTU(:) = HEIGHT_PRESS(ZPRESSU,ZTHVU,ZPGROUND,ZTHV(1),ZZGROUND) -! -! Compute Thetal and Rt - ZRT(:)=ZMR(:) - ZTHL(:)=ZTHV(:)*(1+ZRT(:))/(1+ZRVSRD*ZRT(:)) -! -!* 2.2 PUVTHVMR case : zGROUND, PGROUND, ThvGROUND, RGROUND -! (Pressure, U, V) , -! (Pressure, THv, R) -! - CASE ('PUVTHVMR') -! -! Read data at ground level - READ(ILUPRE,*) ZZGROUND - READ(ILUPRE,*) ZPGROUND - READ(ILUPRE,*) ZTHVGROUND - READ(ILUPRE,*) ZMRGROUND -! -! Read number of wind levels - READ(ILUPRE,*) ILEVELU -! -! Allocate the required memory - ALLOCATE(ZPRESSU(ILEVELU)) - ALLOCATE(ZU(ILEVELU),ZV(ILEVELU)) - ALLOCATE(ZHEIGHTU(ILEVELU)) - ALLOCATE(ZTHVU(ILEVELU)) -! -! Read the data at each wind level of the RS - DO JKU =1,ILEVELU - READ(ILUPRE,*) ZPRESSU(JKU),ZU(JKU),ZV(JKU) - END DO -! -! Read number of mass levels - READ(ILUPRE,*) ILEVELM -! -! Allocate the required memory - ALLOCATE(ZPRESSM(ILEVELM)) - ALLOCATE(ZHEIGHTM(ILEVELM)) - ALLOCATE(ZTHV(ILEVELM)) - ALLOCATE(ZMR(ILEVELM)) - ALLOCATE(ZTHL(ILEVELM)) - ALLOCATE(ZRT(ILEVELM)) -! -! Read the data at each mass level of the RS - DO JKM = 2,ILEVELM - READ(ILUPRE,*) ZPRESSM(JKM),ZTHV(JKM),ZMR(JKM) - END DO -! -! Complete the mass arrays with the ground informations read in EXPRE file - ZPRESSM(1) = ZPGROUND - ZTHV(1) = ZTHVGROUND - ZMR(1) = ZMRGROUND -! -! Compute height of the mass levels of the RS - ZHEIGHTM(:) = HEIGHT_PRESS(ZPRESSM,ZTHV,ZPGROUND,ZTHV(1),ZZGROUND) -! -! Compute thetav and heigth at the wind levels of the RS - ZTHVU(:) = THETAVPU_THETAVPM(ZPRESSM,ZPRESSU,ZTHV) - ZHEIGHTU(:) = HEIGHT_PRESS(ZPRESSU,ZTHVU,ZPGROUND,ZTHV(1),ZZGROUND) -! -! on interpole thetal(=theta quand il n'y a pas d'eau liquide) et r total - ZRT(:)=ZMR(:) - ZTHL(:)=ZTHV(:)*(1+ZRT(:))/(1+ZRVSRD*ZRT(:)) -! -!* 2.3 PUVTHVHU case : zGROUND, PGROUND, ThvGROUND, HuGROUND -! (Pressure, U, V) , -! (Pressure, THv, Hu) -! - CASE ('PUVTHVHU') -! -! Read data at ground level - READ(ILUPRE,*) ZZGROUND - READ(ILUPRE,*) ZPGROUND - READ(ILUPRE,*) ZTHVGROUND - READ(ILUPRE,*) ZHUGROUND -! -! Read number of wind levels - READ(ILUPRE,*) ILEVELU -! -! Allocate the required memory - ALLOCATE(ZPRESSU(ILEVELU)) - ALLOCATE(ZU(ILEVELU),ZV(ILEVELU)) - ALLOCATE(ZHEIGHTU(ILEVELU)) - ALLOCATE(ZTHVU(ILEVELU)) -! -! Read the data at each wind level of the RS - DO JKU =1,ILEVELU - READ(ILUPRE,*) ZPRESSU(JKU),ZU(JKU),ZV(JKU) - END DO -! -! Read number of mass levels - READ(ILUPRE,*) ILEVELM -! -! Allocate the required memory - ALLOCATE(ZPRESSM(ILEVELM)) - ALLOCATE(ZTHV(ILEVELM)) - ALLOCATE(ZHU(ILEVELM)) - ALLOCATE(ZHEIGHTM(ILEVELM)) - ALLOCATE(ZMR(ILEVELM)) - ALLOCATE(ZTV(ILEVELM)) - ALLOCATE(ZTHL(ILEVELM)) - ALLOCATE(ZRT(ILEVELM)) -! -! Read the data at each mass level of the RS - DO JKM = 2,ILEVELM - READ(ILUPRE,*) ZPRESSM(JKM),ZTHV(JKM),ZHU(JKM) - END DO -! -! Complete the mass arrays with the ground informations read in EXPRE file - ZPRESSM(1) = ZPGROUND ! Mass level 1 is at the ground - ZTHV(1) = ZTHVGROUND - ZHU(1) = ZHUGROUND -! -! Compute Tv - ZTV(:)=ZTHV(:) * (ZPRESSM(:) / XP00) ** ZRDSCPD -! -! Compte mixing ratio - ZMR(:)=SM_PMR_HU(ZPRESSM(:),ZTV(:),ZHU(:),SPREAD(ZMR(:),2,1)) -! -! Compute height of the mass levels of the RS - ZHEIGHTM(:) = HEIGHT_PRESS(ZPRESSM,ZTHV,ZPGROUND,ZTHV(1),ZZGROUND) -! -! Compute thetav and height of the wind levels of the RS - ZTHVU(:) = THETAVPU_THETAVPM(ZPRESSM,ZPRESSU,ZTHV) - ZHEIGHTU(:) = HEIGHT_PRESS(ZPRESSU,ZTHVU,ZPGROUND,ZTHV(1),ZZGROUND) -! -! on interpole thetal(=theta quand il n'y a pas d'eau liquide) et r total - ZRT(:)=ZMR(:) - ZTHL(:)=ZTHV(:)*(1+ZRT(:))/(1+ZRVSRD*ZRT(:)) -! -!* 2.4 ZUVTHVHU case : zGROUND, PGROUND, ThvGROUND, HuGROUND -! (height, U, V) , -! (height, THv, Hu) -! - CASE ('ZUVTHVHU') -! Read data at ground level - READ(ILUPRE,*) ZZGROUND - READ(ILUPRE,*) ZPGROUND - READ(ILUPRE,*) ZTHVGROUND - READ(ILUPRE,*) ZHUGROUND -! -! Read number of wind levels - READ(ILUPRE,*) ILEVELU -! -! Allocate the required memory - ALLOCATE(ZPRESSU(ILEVELU)) - ALLOCATE(ZHEIGHTU(ILEVELU)) - ALLOCATE(ZU(ILEVELU),ZV(ILEVELU)) -! -! -! Read the data at each wind level of the RS - DO JKU = 1,ILEVELU - READ(ILUPRE,*) ZHEIGHTU(JKU),ZU(JKU),ZV(JKU) - END DO -! -! Read number of mass levels - READ(ILUPRE,*) ILEVELM -! -! Allocate the required memory - ALLOCATE(ZHEIGHTM(ILEVELM)) - ALLOCATE(ZTHV(ILEVELM)) - ALLOCATE(ZHU(ILEVELM)) - ALLOCATE(ZMR(ILEVELM)) - ALLOCATE(ZPRESSM(ILEVELM)) - ALLOCATE(ZTV(ILEVELM)) - ALLOCATE(ZTHL(ILEVELM)) - ALLOCATE(ZRT(ILEVELM)) -! -! Read the data at each mass level of the RS - DO JKM = 2,ILEVELM - READ(ILUPRE,*) ZHEIGHTM(JKM),ZTHV(JKM),ZHU(JKM) - END DO -! -! Complete the mass arrays with the ground informations read in EXPRE file - ZHEIGHTM(1) = ZZGROUND ! Mass level 1 is at the ground - ZTHV(1) = ZTHVGROUND - ZHU(1) = ZHUGROUND -! -! Compute Pressure at the mass levels of the RS - ZPRESSM= PRESS_HEIGHT(ZHEIGHTM,ZTHV,ZPGROUND,ZTHV(1),ZHEIGHTM(1)) -! -! Compute Tv and the mixing ratio at the mass levels of the RS - ZTV(:)=ZTHV(:) * (ZPRESSM(:) / XP00) ** ZRDSCPD - ZMR(:)=SM_PMR_HU(ZPRESSM(:),ZTV(:),ZHU(:),SPREAD(ZMR(:),2,1)) -! -! on interpole thetal(=theta quand il n'y a pas d'eau liquide) et r total - ZRT(:)=ZMR(:) - ZTHL(:)=ZTHV(:)*(1+ZRT(:))/(1+ZRVSRD*ZRT(:)) -! -! -!* 2.5 ZUVTHVMR case : zGROUND, PGROUND, ThvGROUND, RGROUND -! (height, U, V) , -! (height, THv, R) -! -! - CASE ('ZUVTHVMR') -! Read data at ground level - READ(ILUPRE,*) ZZGROUND - READ(ILUPRE,*) ZPGROUND - READ(ILUPRE,*) ZTHVGROUND - READ(ILUPRE,*) ZMRGROUND -! -! Read number of wind levels - READ(ILUPRE,*) ILEVELU -! -! Allocate the required memory - ALLOCATE(ZHEIGHTU(ILEVELU)) - ALLOCATE(ZU(ILEVELU),ZV(ILEVELU)) -! -! Read the data at each wind level of the RS - DO JKU = 1,ILEVELU - READ(ILUPRE,*) ZHEIGHTU(JKU),ZU(JKU),ZV(JKU) - END DO -! -! Read number of mass levels - READ(ILUPRE,*) ILEVELM -! -! Allocate the required memory - ALLOCATE(ZHEIGHTM(ILEVELM)) - ALLOCATE(ZTHV(ILEVELM)) - ALLOCATE(ZMR(ILEVELM)) - ALLOCATE(ZTHL(ILEVELM)) - ALLOCATE(ZRT(ILEVELM)) -! -! Read the data at each mass level of the RS - DO JKM=2,ILEVELM - READ(ILUPRE,*) ZHEIGHTM(JKM),ZTHV(JKM),ZMR(JKM) - END DO -! -! Complete the mass arrays with the ground informations read in EXPRE file - ZHEIGHTM(1)= ZZGROUND ! Mass level 1 is at the ground - ZTHV(1) = ZTHVGROUND - ZMR(1) = ZMRGROUND -! on interpole thetal(=theta quand il n'y a pas d'eau liquide) et r total - ZRT(:)=ZMR(:) - ZTHL(:)=ZTHV(:)*(1+ZRT(:))/(1+ZRVSRD*ZRT(:)) -! -! -!* 2.6 PUVTHDMR case : zGROUND, PGROUND, ThdGROUND, RGROUND -! (Pressure, U, V) , -! (Pressure, THd, R) -! - CASE ('PUVTHDMR') -! Read data at ground level - READ(ILUPRE,*) ZZGROUND - READ(ILUPRE,*) ZPGROUND - READ(ILUPRE,*) ZTHDGROUND - READ(ILUPRE,*) ZMRGROUND -! -! Read number of wind levels - READ(ILUPRE,*) ILEVELU -! -! Allocate the required memory - ALLOCATE(ZPRESSU(ILEVELU)) - ALLOCATE(ZU(ILEVELU),ZV(ILEVELU)) - ALLOCATE(ZTHVU(ILEVELU)) - ALLOCATE(ZHEIGHTU(ILEVELU)) -! -! Read the data at each wind level of the RS - DO JKU =1,ILEVELU - READ(ILUPRE,*) ZPRESSU(JKU),ZU(JKU),ZV(JKU) - END DO -! -! Read number of mass levels - READ(ILUPRE,*) ILEVELM -! -! Allocate the required memory - ALLOCATE(ZPRESSM(ILEVELM)) - ALLOCATE(ZTHD(ILEVELM)) - ALLOCATE(ZMR(ILEVELM)) - ALLOCATE(ZMRC(ILEVELM)) - ZMRC=0 - ALLOCATE(ZMRI(ILEVELM)) - ZMRI=0 - ALLOCATE(ZHEIGHTM(ILEVELM)) - ALLOCATE(ZTHV(ILEVELM)) - ALLOCATE(ZTHL(ILEVELM)) - ALLOCATE(ZRT(ILEVELM)) -! -! Read the data at each mass level of the RS - DO JKM=2,ILEVELM - IF(LUSERI) THEN - READ(ILUPRE,*) ZPRESSM(JKM),ZTHD(JKM),ZMR(JKM),ZMRC(JKM),ZMRI(JKM) - ELSEIF (GUSERC) THEN - READ(ILUPRE,*) ZPRESSM(JKM),ZTHD(JKM),ZMR(JKM),ZMRC(JKM) - ELSE - READ(ILUPRE,*) ZPRESSM(JKM),ZTHD(JKM),ZMR(JKM) - ENDIF - END DO -! -! Complete the mass arrays with the ground informations read in EXPRE file - ZPRESSM(1) = ZPGROUND ! Mass level 1 is at the ground - ZTHD(1) = ZTHDGROUND - ZMR(1) = ZMRGROUND - IF(GUSERC) ZMRC(1) = ZMRC(2) - IF(LUSERI) ZMRI(1) = ZMRI(2) -! -! Compute thetav at the mass levels of the RS - ZTHV(:) = ZTHD(:) * (1. + ZRVSRD *ZMR(:))/(1.+ZMR(:)+ZMRC(:)+ZMRI(:)) -! -! Compute the heights at the mass levels of the RS - ZHEIGHTM(:) = HEIGHT_PRESS(ZPRESSM,ZTHV,ZPGROUND,ZTHV(1),ZZGROUND) -! -! Compute thetav and heights of the wind levels - ZTHVU(:) = THETAVPU_THETAVPM(ZPRESSM,ZPRESSU,ZTHV) - ZHEIGHTU(:) = HEIGHT_PRESS(ZPRESSU,ZTHVU,ZPGROUND,ZTHV(1),ZZGROUND) -! -! Compute Theta l and Rt - IF (.NOT. GUSERC .AND. .NOT. LUSERI) THEN - ZRT(:)=ZMR(:) - ZTHL(:)=ZTHV(:)*(1+ZRT(:))/(1+ZRVSRD*ZRT(:)) - ELSE - ALLOCATE(ZEXN(ILEVELM)) - ALLOCATE(ZT(ILEVELM)) - ALLOCATE(ZCPH(ILEVELM)) - ALLOCATE(ZLVOCPEXN(ILEVELM)) - ALLOCATE(ZLSOCPEXN(ILEVELM)) - ZRT(:)=ZMR(:)+ZMRI(:)+ZMRC(:) - ZEXN(:)=(ZPRESSM/XP00) ** (XRD/XCPD) - ZT(:)=ZTHV*(ZPRESSM(:)/XP00)**(ZRDSCPD)*(1+ZRT(:))/(1+ZRVSRD*ZRT(:)) - ZCPH(:)=XCPD+ XCPV * ZMR(:)+ XCL *ZMRC(:) + XCI * ZMRI(:) - ZLVOCPEXN(:) = (XLVTT + (XCPV-XCL) * (ZT(:)-XTT))/(ZCPH*ZEXN(:)) - ZLSOCPEXN(:) = (XLSTT + (XCPV-XCI) * (ZT(:)-XTT))/(ZCPH*ZEXN(:)) - ZTHL(:)=ZTHV(:)*(1+ZRT(:))/(1+ZRVSRD*ZRT(:))-ZLVOCPEXN(:)*ZMRC(:)-ZLSOCPEXN(:)*ZMRI(:) - DEALLOCATE(ZEXN) - DEALLOCATE(ZT) - DEALLOCATE(ZCPH) - DEALLOCATE(ZLVOCPEXN) - DEALLOCATE(ZLSOCPEXN) - ENDIF -! -! -!* 2.7 PUVTHDHU case : zGROUND, PGROUND, ThdGROUND, HuGROUND -! (Pressure, U, V) , -! (Pressure, THd, Hu) -! - CASE ('PUVTHDHU') -! Read data at ground level - READ(ILUPRE,*) ZZGROUND - READ(ILUPRE,*) ZPGROUND - READ(ILUPRE,*) ZTHDGROUND - READ(ILUPRE,*) ZHUGROUND -! -! Read number of wind levels - READ(ILUPRE,*) ILEVELU -! -! Allocate the required memory - ALLOCATE(ZPRESSU(ILEVELU)) - ALLOCATE(ZU(ILEVELU),ZV(ILEVELU)) - ALLOCATE(ZTHVU(ILEVELU)) - ALLOCATE(ZHEIGHTU(ILEVELU)) -! -! Read the data at each wind level of the RS - DO JKU = 1,ILEVELU - READ(ILUPRE,*) ZPRESSU(JKU),ZU(JKU),ZV(JKU) - END DO -! -! Read number of mass levels - READ(ILUPRE,*) ILEVELM -! -! Allocate the required memory - ALLOCATE(ZPRESSM(ILEVELM)) - ALLOCATE(ZTHD(ILEVELM)) - ALLOCATE(ZHU(ILEVELM)) - ALLOCATE(ZHEIGHTM(ILEVELM)) - ALLOCATE(ZTHV(ILEVELM)) - ALLOCATE(ZMR(ILEVELM)) - ALLOCATE(ZT(ILEVELM)) - ALLOCATE(ZTHL(ILEVELM)) - ALLOCATE(ZRT(ILEVELM)) -! -! Read the data at each mass level of the RS - DO JKM =2,ILEVELM - READ(ILUPRE,*) ZPRESSM(JKM),ZTHD(JKM), ZHU(JKM) - END DO -! Complete the mass arrays with the ground informations read in EXPRE file - ZPRESSM(1) = ZPGROUND ! Mass level 1 is at the ground - ZTHD(1) = ZTHDGROUND - ZHU(1) = ZHUGROUND -! - ZT(:) = ZTHD(:) * (ZPRESSM(:)/XP00)**ZRDSCPD ! compute T and mixing ratio - ZMR(:) = ZRDSRV*SM_FOES(ZT(:))/((ZPRESSM(:)*100./ZHU(:)) -SM_FOES(ZT(:))) - -! Compute thetav at the mass levels of the RS - ZTHV(:) = ZTHD(:) * (1. + ZRVSRD *ZMR(:))/(1.+ZMR(:)) -! -! Compute height at mass levels - ZHEIGHTM(:) = HEIGHT_PRESS(ZPRESSM,ZTHV,ZPGROUND,ZTHV(1),ZZGROUND) -! -! Compute thetav and heights of the wind levels - ZTHVU(:) = THETAVPU_THETAVPM(ZPRESSM,ZPRESSU,ZTHV) - ZHEIGHTU(:) = HEIGHT_PRESS(ZPRESSU,ZTHVU,ZPGROUND,ZTHV(1),ZZGROUND) -! -! Compute thetal and Rt - ZRT(:)=ZMR(:) - ZTHL(:)=ZTHV(:)*(1+ZRT(:))/(1+ZRVSRD*ZRT(:)) -! -!* 2.8 ZUVTHDMR case : zGROUND, PGROUND, ThdGROUND, RGROUND -! (height, U, V) , -! (height, THd, R) -! - CASE ('ZUVTHDMR') -! Read data at ground level - READ(ILUPRE,*) ZZGROUND - READ(ILUPRE,*) ZPGROUND - READ(ILUPRE,*) ZTHDGROUND - READ(ILUPRE,*) ZMRGROUND -! -! Read number of wind levels - READ(ILUPRE,*) ILEVELU -! -! Allocate required memory - ALLOCATE(ZHEIGHTU(ILEVELU)) - ALLOCATE(ZU(ILEVELU),ZV(ILEVELU)) -! -! Read the data at each wind level of the RS - DO JKU = 1,ILEVELU - READ(ILUPRE,*) ZHEIGHTU(JKU),ZU(JKU),ZV(JKU) - END DO -! -! Read number of mass levels - READ(ILUPRE,*) ILEVELM -! -! Allocate required memory - ALLOCATE(ZHEIGHTM(ILEVELM)) - ALLOCATE(ZTHD(ILEVELM)) - ALLOCATE(ZMR(ILEVELM)) - ALLOCATE(ZTHV(ILEVELM)) - ALLOCATE(ZMRC(ILEVELM)) - ZMRC=0 - ALLOCATE(ZMRI(ILEVELM)) - ZMRI=0 - ALLOCATE(ZTHL(ILEVELM)) - ALLOCATE(ZRT(ILEVELM)) -! -! Read the data at each mass level of the RS - DO JKM= 2,ILEVELM - IF(LUSERI) THEN - READ(ILUPRE,*) ZHEIGHTM(JKM),ZTHD(JKM),ZMR(JKM),ZMRC(JKM),ZMRI(JKM) - ELSEIF (GUSERC) THEN - READ(ILUPRE,*) ZHEIGHTM(JKM),ZTHD(JKM),ZMR(JKM),ZMRC(JKM) - ELSE - READ(ILUPRE,*) ZHEIGHTM(JKM),ZTHD(JKM),ZMR(JKM) - ENDIF - END DO -! Complete the mass arrays with the ground informations read in EXPRE file - ZHEIGHTM(1) = ZZGROUND ! Mass level 1 is at ground - ZTHD(1) = ZTHDGROUND - ZMR(1) = ZMRGROUND - IF(GUSERC) ZMRC(1) = ZMRC(2) - IF(LUSERI) ZMRI(1) = ZMRI(2) -! Compute thetav at the mass levels of the RS - IF(LUSERI) THEN - ZTHV(:) = ZTHD(:) * (1. + ZRVSRD *ZMR(:))/(1.+ZMR(:)+ZMRC(:)+ZMRI(:)) - ELSEIF (GUSERC) THEN - ZTHV(:) = ZTHD(:) * (1. + ZRVSRD *ZMR(:))/(1.+ZMR(:)+ZMRC(:)) - ELSE - ZTHV(:) = ZTHD(:) * (1. + ZRVSRD *ZMR(:))/(1.+ZMR(:)) - ENDIF -! -! Compute Theta l and Rt - IF (.NOT. GUSERC .AND. .NOT. LUSERI) THEN - ZRT(:)=ZMR(:) - ZTHL(:)=ZTHV(:)*(1+ZRT(:))/(1+ZRVSRD*ZRT(:)) - ELSE - ALLOCATE(ZEXN(ILEVELM)) - ALLOCATE(ZEXNFLUX(ILEVELM)) - ALLOCATE(ZT(ILEVELM)) - ALLOCATE(ZCPH(ILEVELM)) - ALLOCATE(ZLVOCPEXN(ILEVELM)) - ALLOCATE(ZLSOCPEXN(ILEVELM)) - ZRT(:)=ZMR(:)+ZMRI(:)+ZMRC(:) - ZEXNSURF=(ZPGROUND/XP00) ** (XRD/XCPD) - CALL COMPUTE_EXNER_FROM_GROUND(ZTHV,ZHEIGHTM,ZEXNSURF,ZEXNFLUX,ZEXN) - ZT(:)=ZTHV*ZEXN(:)*(1+ZRT(:))/(1+ZRVSRD*ZRT(:)) - ZCPH(:)=XCPD+ XCPV * ZMR(:)+ XCL *ZMRC(:) + XCI * ZMRI(:) - ZLVOCPEXN(:) = (XLVTT + (XCPV-XCL) * (ZT(:)-XTT))/(ZCPH*ZEXN(:)) - ZLSOCPEXN(:) = (XLSTT + (XCPV-XCI) * (ZT(:)-XTT))/(ZCPH*ZEXN(:)) - ZTHL(:)=ZTHV(:)*(1+ZRT(:))/(1+ZRVSRD*ZRT(:))-ZLVOCPEXN(:)*ZMRC(:)-ZLSOCPEXN(:)*ZMRI(:) - DEALLOCATE(ZEXN) - DEALLOCATE(ZEXNFLUX) - DEALLOCATE(ZT) - DEALLOCATE(ZCPH) - DEALLOCATE(ZLVOCPEXN) - DEALLOCATE(ZLSOCPEXN) - ENDIF -! -! 2.9 ZUVTHLMR case : zGROUND, PGROUND, ThdGROUND, RGROUND -! (height, U, V) -! (height, THL, Rt) - -! - CASE ('ZUVTHLMR') -! Read data at ground level - READ(ILUPRE,*) ZZGROUND - READ(ILUPRE,*) ZPGROUND - READ(ILUPRE,*) ZTHLGROUND - READ(ILUPRE,*) ZMRGROUND -! -! Read number of wind levels - READ(ILUPRE,*) ILEVELU -! -! Allocate required memory - ALLOCATE(ZHEIGHTU(ILEVELU)) - ALLOCATE(ZU(ILEVELU),ZV(ILEVELU)) -! -! Read the data at each wind level of the RS - DO JKU = 1,ILEVELU - READ(ILUPRE,*) ZHEIGHTU(JKU),ZU(JKU),ZV(JKU) - END DO -! -! Read number of mass levels - READ(ILUPRE,*) ILEVELM -! -! Allocate required memory - ALLOCATE(ZHEIGHTM(ILEVELM)) - ALLOCATE(ZTHL(ILEVELM)) - ALLOCATE(ZTH(ILEVELM)) - ALLOCATE(ZMR(ILEVELM)) - ALLOCATE(ZTHV(ILEVELM)) - ALLOCATE(ZMRC(ILEVELM)) - ZMRC=0 - ALLOCATE(ZMRI(ILEVELM)) - ZMRI=0 - ALLOCATE(ZRT(ILEVELM)) -! -! Read the data at each mass level of the RS - DO JKM= 2,ILEVELM -! IF(LUSERI) THEN -! READ(ILUPRE,*) ZHEIGHTM(JKM),ZTHL(JKM),ZMR(JKM),ZMRC(JKM),ZMRI(JKM) -! ELSEIF (GUSERC) THEN - IF (GUSERC) THEN - READ(ILUPRE,*) ZHEIGHTM(JKM),ZTHL(JKM),ZMR(JKM),ZMRC(JKM) - ELSE - READ(ILUPRE,*) ZHEIGHTM(JKM),ZTHL(JKM),ZMR(JKM) - ENDIF - END DO -! Complete the mass arrays with the ground informations read in EXPRE file - ZHEIGHTM(1) = ZZGROUND ! Mass level 1 is at ground - ZTHL(1) = ZTHLGROUND - ZMR(1) = ZMRGROUND - IF(GUSERC) ZMRC(1) = ZMRC(2) -! IF(LUSERI) ZMRI(1) = ZMRI(2) -! -! Compute Rt - ZRT(:)=ZMR+ZMRC+ZMRI -! -!* 2.10 PUVTHU case : zGROUND, PGROUND, TempGROUND, HuGROUND -! (Pressure, U, V) , -! (Pressure, Temp, Hu) -! - CASE ('PUVTHU') -! Read data at ground level - READ(ILUPRE,*) ZZGROUND - READ(ILUPRE,*) ZPGROUND - READ(ILUPRE,*) ZTGROUND - READ(ILUPRE,*) ZHUGROUND -! -! Read number of wind levels - READ(ILUPRE,*) ILEVELU -! -! Allocate the required memory - ALLOCATE(ZPRESSU(ILEVELU)) - ALLOCATE(ZU(ILEVELU),ZV(ILEVELU)) - ALLOCATE(ZTHVU(ILEVELU)) - ALLOCATE(ZHEIGHTU(ILEVELU)) -! -! Read the data at each wind level of the RS - DO JKU = 1,ILEVELU - READ(ILUPRE,*) ZPRESSU(JKU),ZU(JKU),ZV(JKU) - END DO -! -! Read number of mass levels - READ(ILUPRE,*) ILEVELM -! -! Allocate the required memory - ALLOCATE(ZPRESSM(ILEVELM)) - ALLOCATE(ZTHD(ILEVELM)) - ALLOCATE(ZHU(ILEVELM)) - ALLOCATE(ZHEIGHTM(ILEVELM)) - ALLOCATE(ZTHV(ILEVELM)) - ALLOCATE(ZMR(ILEVELM)) - ALLOCATE(ZT(ILEVELM)) - ALLOCATE(ZTHL(ILEVELM)) - ALLOCATE(ZRT(ILEVELM)) - -! -! Read the data at each mass level of the RS - DO JKM =2,ILEVELM - READ(ILUPRE,*) ZPRESSM(JKM),ZT(JKM), ZHU(JKM) - END DO -! Complete the mass arrays with the ground informations read in EXPRE file - ZPRESSM(1) = ZPGROUND ! Mass level 1 is at the ground - ZT(1) = ZTGROUND - ZHU(1) = ZHUGROUND -! - ZTHD(:) = ZT(:) / (ZPRESSM(:)/XP00)**ZRDSCPD ! compute THD and mixing ratio - ZMR(:) = ZRDSRV*SM_FOES(ZT(:))/((ZPRESSM(:)*100./ZHU(:)) -SM_FOES(ZT(:))) -! Compute thetav at the mass levels of the RS - ZTHV(:) = ZTHD(:) * (1. + ZRVSRD *ZMR(:))/(1.+ZMR(:)) -! -! Compute height at mass levels - ZHEIGHTM(:) = HEIGHT_PRESS(ZPRESSM,ZTHV,ZPGROUND,ZTHV(1),ZZGROUND) -! -! Compute thetav and heights of the wind levels - ZTHVU(:) = THETAVPU_THETAVPM(ZPRESSM,ZPRESSU,ZTHV) - ZHEIGHTU(:) = HEIGHT_PRESS(ZPRESSU,ZTHVU,ZPGROUND,ZTHV(1),ZZGROUND) -! -! on interpole thetal(=theta quand il n'y a pas d'eau liquide) et r total - ZRT(:)=ZMR(:) - ZTHL(:)=ZTHV(:)*(1+ZRT(:))/(1+ZRVSRD*ZRT(:)) - CASE DEFAULT - CALL PRINT_MSG(NVERB_FATAL,'GEN','SET_RSOU','data type YKIND='//TRIM(YKIND)//' in PREFILE unknown') -END SELECT -! -!------------------------------------------------------------------------------- -! -!* 3. INTERPOLATE ON THE VERTICAL MIXED MODEL GRID -! --------------------------------------------------------- -! -! -! -IKU=SIZE(XZHAT) -! -!* 3.1 Compute mixed grid -! -IF (PRESENT(PCORIOZ)) THEN -! LGEOSBAL=T (no shift allowed, MNH grid without ororgraphy) - ZZS_LS(:,:)=0 -ELSE - IF (OSHIFT) THEN - ZZS_LS(:,:)=ZZGROUND - ELSE - ZZS_LS(:,:)=0 - ENDIF -ENDIF -CALL VERT_COORD(LSLEVE,ZZS_LS,ZZS_LS,XLEN1,XLEN2,XZHAT,ZZFLUX_MX) -ZZMASS_MX(:,:,:)=MZF(ZZFLUX_MX) -ZZMASS_MX(:,:,IKU)=1.5*ZZFLUX_MX(:,:,IKU)-0.5*ZZFLUX_MX(:,:,IKU-1) -! -!* 3.2 Interpolate and extrapolate U and V on w- mixed grid levels -! -!* vertical grid at initialization profile location -GPROFILE_IN_PROC=(KILOC+JPHEXT-IXOR_ll+1>=IIB .AND. KILOC+JPHEXT-IXOR_ll+1<=IIE) & - & .AND. (KJLOC+JPHEXT-IYOR_ll+1>=IJB .AND. KJLOC+JPHEXT-IYOR_ll+1<=IJE) -! -IF (GPROFILE_IN_PROC) THEN - ZZMASS_PROFILE(:) = ZZMASS_MX(KILOC+JPHEXT-IXOR_ll+1,KJLOC+JPHEXT-IYOR_ll+1,:) - ZZFLUX_PROFILE(:) = ZZFLUX_MX(KILOC+JPHEXT-IXOR_ll+1,KJLOC+JPHEXT-IYOR_ll+1,:) -ELSE - ZZMASS_PROFILE(:) = 0. - ZZFLUX_PROFILE(:) = 0. -END IF -DO JK = 1,IKU - CALL REDUCESUM_ll(ZZMASS_PROFILE(JK), IINFO_ll) - CALL REDUCESUM_ll(ZZFLUX_PROFILE(JK), IINFO_ll) -END DO - -! interpolation of U and V -DO JK = 1,IKU - IF (ZZFLUX_PROFILE(JK) <= ZHEIGHTU(1)) THEN ! extrapolation below the first level - ZDZSDH = (ZZFLUX_PROFILE(JK) - ZHEIGHTU(1)) / (ZHEIGHTU(2) - ZHEIGHTU(1)) - ZUW(JK) = ZU(1) + (ZU(2) - ZU(1)) * ZDZSDH - ZVW(JK) = ZV(1) + (ZV(2) - ZV(1)) * ZDZSDH - ELSE IF (ZZFLUX_PROFILE(JK) > ZHEIGHTU(ILEVELU) ) THEN ! extrapolation above the last - ZDZSDH = (ZZFLUX_PROFILE(JK) - ZHEIGHTU(ILEVELU)) & ! level - / (ZHEIGHTU(ILEVELU) - ZHEIGHTU(ILEVELU-1)) - ZUW(JK) = ZU(ILEVELU) + (ZU(ILEVELU) -ZU(ILEVELU -1)) * ZDZSDH - ZVW(JK) = ZV(ILEVELU) + (ZV(ILEVELU) -ZV(ILEVELU -1)) * ZDZSDH - ELSE ! interpolation between the first and last levels - DO JKLEV = 1,ILEVELU-1 - IF ( (ZZFLUX_PROFILE(JK) > ZHEIGHTU(JKLEV)).AND. & - (ZZFLUX_PROFILE(JK) <= ZHEIGHTU(JKLEV+1)) )THEN - ZDZ1SDH = (ZZFLUX_PROFILE(JK) - ZHEIGHTU(JKLEV)) & - / (ZHEIGHTU(JKLEV+1)-ZHEIGHTU(JKLEV)) - ZDZ2SDH = (ZHEIGHTU(JKLEV+1) - ZZFLUX_PROFILE(JK) ) & - / (ZHEIGHTU(JKLEV+1)-ZHEIGHTU(JKLEV)) - ZUW(JK) = (ZU(JKLEV) * ZDZ2SDH) + (ZU(JKLEV+1) *ZDZ1SDH) - ZVW(JK) = (ZV(JKLEV) * ZDZ2SDH) + (ZV(JKLEV+1) *ZDZ1SDH) - END IF - END DO - END IF -END DO -! -!* 3.3 Interpolate and extrapolate Thetav and r on mass mixed grid levels -! -ZMRCM=0 -ZMRIM=0 -DO JK = 1,IKU - IF (ZZMASS_PROFILE(JK) <= ZHEIGHTM(1)) THEN ! extrapolation below the first level - ZDZSDH = (ZZMASS_PROFILE(JK) - ZHEIGHTM(1)) / (ZHEIGHTM(2) - ZHEIGHTM(1)) - ZTHLM(JK) = ZTHL(1) + (ZTHL(2) - ZTHL(1)) * ZDZSDH - ZMRM(JK) = ZRT(1) + (ZRT(2) - ZRT(1)) * ZDZSDH - IF (GUSERC) ZMRCM(JK) = ZMRC(1) + (ZMRC(2) - ZMRC(1)) * ZDZSDH - IF (LUSERI) ZMRIM(JK) = ZMRI(1) + (ZMRI(2) - ZMRI(1)) * ZDZSDH - ELSE IF (ZZMASS_PROFILE(JK) > ZHEIGHTM(ILEVELM) ) THEN ! extrapolation above the last - ZDZSDH = (ZZMASS_PROFILE(JK) - ZHEIGHTM(ILEVELM)) & ! level - / (ZHEIGHTM(ILEVELM) - ZHEIGHTM(ILEVELM-1)) - ZTHLM(JK) = ZTHL(ILEVELM) + (ZTHL(ILEVELM) -ZTHL(ILEVELM -1)) * ZDZSDH - ZMRM(JK) = ZRT(ILEVELM) + (ZRT(ILEVELM) -ZRT(ILEVELM -1)) * ZDZSDH - IF (GUSERC) ZMRCM(JK) = ZMRC(ILEVELM) + (ZMRC(ILEVELM) -ZMRC(ILEVELM -1)) * ZDZSDH - IF (LUSERI) ZMRIM(JK) = ZMRI(ILEVELM) + (ZMRI(ILEVELM) -ZMRI(ILEVELM -1)) * ZDZSDH - ELSE ! interpolation between the first and last levels - DO JKLEV = 1,ILEVELM-1 - IF ( (ZZMASS_PROFILE(JK) > ZHEIGHTM(JKLEV)).AND. & - (ZZMASS_PROFILE(JK) <= ZHEIGHTM(JKLEV+1)) )THEN - ZDZ1SDH = (ZZMASS_PROFILE(JK) - ZHEIGHTM(JKLEV)) & - / (ZHEIGHTM(JKLEV+1)-ZHEIGHTM(JKLEV)) - ZDZ2SDH = (ZHEIGHTM(JKLEV+1) - ZZMASS_PROFILE(JK) ) & - / (ZHEIGHTM(JKLEV+1)-ZHEIGHTM(JKLEV)) - ZTHLM(JK) = (ZTHL(JKLEV) * ZDZ2SDH) + (ZTHL(JKLEV+1) *ZDZ1SDH) - ZMRM(JK) = (ZRT(JKLEV) * ZDZ2SDH) + (ZRT(JKLEV+1) *ZDZ1SDH) - IF (GUSERC) ZMRCM(JK) = (ZMRC(JKLEV) * ZDZ2SDH) + (ZMRC(JKLEV+1) *ZDZ1SDH) - IF (LUSERI) ZMRIM(JK) = (ZMRI(JKLEV) * ZDZ2SDH) + (ZMRI(JKLEV+1) *ZDZ1SDH) - END IF - END DO - END IF -END DO -! -! Compute thetaV rv ri and Rc with adjustement -ALLOCATE(ZEXNFLUX(IKU)) -ALLOCATE(ZEXNMASS(IKU)) -ALLOCATE(ZPRESS(IKU)) -ALLOCATE(ZPREFLUX(IKU)) -ALLOCATE(ZFRAC_ICE(IKU)) -ALLOCATE(ZRSATW(IKU)) -ALLOCATE(ZRSATI(IKU)) -ALLOCATE(ZMRT(IKU)) -ALLOCATE(ZBUF(IKU,16)) -ZMRT=ZMRM+ZMRCM+ZMRIM -ZTHVM=ZTHLM -! -IF (LOCEAN) THEN - ZRHODM(:)=XRH00OCEAN*(1.-XALPHAOC*(ZTHLM(:) - XTH00OCEAN)& - +XBETAOC* (ZMRM(:) - XSA00OCEAN)) - ZPREFLUX(IKU)=ZPTOP - DO JK=IKU-1,2,-1 - ZPREFLUX(JK) = ZPREFLUX(JK+1) + XG*ZRHODM(JK)*(ZZFLUX_PROFILE(JK+1)-ZZFLUX_PROFILE(JK)) - END DO - ZPGROUND=ZPREFLUX(2) - WRITE(ILUOUT,FMT=*)'ZPGROUND i.e. Pressure at ocean domain bottom',ZPGROUND - ZTHM=ZTHVM -ELSE -! Atmospheric case - ZEXNSURF=(ZPGROUND/XP00)**(XRD/XCPD) - DO JLOOP=1,20 ! loop for pression - CALL COMPUTE_EXNER_FROM_GROUND(ZTHVM,ZZMASS_PROFILE(:),ZEXNSURF,ZEXNFLUX,ZEXNMASS) - ZPRESS(:)=XP00*(ZEXNMASS(:))**(XCPD/XRD) - CALL TH_R_FROM_THL_RT(CST,NEB,SIZE(ZPRESS,1),'T',ZFRAC_ICE,ZPRESS,ZTHLM,ZMRT,ZTHM,ZMRM,ZMRCM,ZMRIM, & - ZRSATW, ZRSATI,OOCEAN=.FALSE.,& - PBUF=ZBUF) - ZTHVM(:)=ZTHM(:)*(1.+XRV/XRD*ZMRM(:))/(1.+(ZMRM(:)+ZMRIM(:)+ZMRCM(:))) - ENDDO -ENDIF -! -DEALLOCATE(ZEXNFLUX) -DEALLOCATE(ZEXNMASS) -DEALLOCATE(ZPRESS) -DEALLOCATE(ZFRAC_ICE) -DEALLOCATE(ZRSATW) -DEALLOCATE(ZRSATI) -DEALLOCATE(ZMRT) -DEALLOCATE(ZBUF) -!------------------------------------------------------------------------------- -! -!* 4. COMPUTE FIELDS ON THE MODEL GRID (WITH OROGRAPHY) -! ------------------------------------------------- -CALL SET_MASS(TPFILE,GPROFILE_IN_PROC, ZZFLUX_PROFILE, & - KILOC+JPHEXT,KJLOC+JPHEXT,ZZS_LS,ZZMASS_MX,ZZFLUX_MX,ZPGROUND,& - ZTHVM,ZMRM,ZUW,ZVW,OSHIFT,OBOUSS,PJ,HFUNU,HFUNV, & - PMRCM=ZMRCM,PMRIM=ZMRIM,PCORIOZ=PCORIOZ) -! -DEALLOCATE(ZPREFLUX) -DEALLOCATE(ZHEIGHTM) -DEALLOCATE(ZTHV) -DEALLOCATE(ZMR) -DEALLOCATE(ZTHL) -!------------------------------------------------------------------------------- -CONTAINS - SUBROUTINE CHECK( ISTATUS, YLOC ) - INTEGER(KIND=CDFINT), INTENT(IN) :: ISTATUS - CHARACTER(LEN=*), INTENT(IN) :: YLOC - - IF( ISTATUS /= NF90_NOERR ) THEN - CALL PRINT_MSG( NVERB_ERROR, 'IO', 'SET_RSOU', 'error at ' // Trim( yloc) // ': ' // NF90_STRERROR( ISTATUS ) ) - END IF - END SUBROUTINE check - ! - INCLUDE "th_r_from_thl_rt.func.h" - INCLUDE "compute_frac_ice.func.h" - ! -END SUBROUTINE SET_RSOU diff --git a/src/mesonh/ext/shallow_mf_pack.f90 b/src/mesonh/ext/shallow_mf_pack.f90 deleted file mode 100644 index ee2f7e2fb..000000000 --- a/src/mesonh/ext/shallow_mf_pack.f90 +++ /dev/null @@ -1,383 +0,0 @@ -!MNH_LIC Copyright 2010-2021 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. -!----------------------------------------------------------------- -! ###################### - MODULE MODI_SHALLOW_MF_PACK -! ###################### -! -INTERFACE -! ################################################################# - SUBROUTINE SHALLOW_MF_PACK(KRR,KRRL,KRRI, & - OMF_FLX,TPFILE,PTIME_LES, & - PIMPL_MF, PTSTEP, & - PDZZ, PZZ, PDX,PDY, & - PRHODJ, PRHODREF, & - PPABSM, PEXN, & - PSFTH,PSFRV, & - PTHM,PRM,PUM,PVM,PTKEM,PSVM, & - PRTHS,PRRS,PRUS,PRVS,PRSVS, & - PSIGMF,PRC_MF,PRI_MF,PCF_MF,PFLXZTHVMF ) -! ################################################################# -!! -use MODD_IO, only: TFILEDATA -use modd_precision, only: MNHTIME -! -!* 1.1 Declaration of Arguments -! -! -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. -LOGICAL, INTENT(IN) :: OMF_FLX ! switch to write the - ! MF fluxes in the synchronous FM-file -TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file -REAL(kind=MNHTIME),DIMENSION(2), INTENT(OUT) :: PTIME_LES ! time spent in LES computations -REAL, INTENT(IN) :: PIMPL_MF ! degre of implicitness -REAL, INTENT(IN) :: PTSTEP ! Dynamical timestep - -REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! Height of flux point -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZZ ! Metric coefficients -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! dry density * Grid size -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF ! dry density of the - ! reference state -REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABSM ! Pressure at time t-1 -REAL, DIMENSION(:,:,:), INTENT(IN) :: PEXN ! Exner function at t-dt - -REAL, DIMENSION(:,:), INTENT(IN) :: PSFTH,PSFRV ! normal surface fluxes of theta and Rv -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHM ! Theta at t-dt -REAL, DIMENSION(:,:,:,:),INTENT(IN):: PRM ! water var. at t-dt -REAL, DIMENSION(:,:,:), INTENT(IN) :: PUM,PVM ! wind components at t-dt -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKEM ! tke at t-dt - -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVM ! scalar variable a t-dt - -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRUS,PRVS,PRTHS ! Meso-NH sources -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRRS -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRSVS ! Scalar sources -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSIGMF,PRC_MF,PRI_MF,PCF_MF ! cloud info for the cloud scheme -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PFLXZTHVMF ! Thermal production for TKE scheme -! -REAL, INTENT(IN) :: PDX,PDY ! Size of mesh in X/Y directions -END SUBROUTINE SHALLOW_MF_PACK - -END INTERFACE -! -END MODULE MODI_SHALLOW_MF_PACK - -! ################################################################# - SUBROUTINE SHALLOW_MF_PACK(KRR,KRRL,KRRI, & - OMF_FLX,TPFILE,PTIME_LES, & - PIMPL_MF, PTSTEP, & - PDZZ, PZZ, PDX,PDY, & - PRHODJ, PRHODREF, & - PPABSM, PEXN, & - PSFTH,PSFRV, & - PTHM,PRM,PUM,PVM,PTKEM,PSVM, & - PRTHS,PRRS,PRUS,PRVS,PRSVS, & - PSIGMF,PRC_MF,PRI_MF,PCF_MF,PFLXZTHVMF ) -! ################################################################# -!! -!!**** *SHALLOW_MF_PACK* - -!! -!! -!! PURPOSE -!! ------- -!!**** The purpose of this routine is -!! -! -!!** METHOD -!! ------ -!! -!! EXTERNAL -!! -------- -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! V.Masson 09/2010 -! -------------------------------------------------------------------------- -! Modifications: -! R. Honnert 07/2012: introduction of vertical wind for the height of the thermal -! M. Leriche 02/2017: avoid negative values for sv tendencies -! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O -! S. Riette 11/2016: support for CFRAC_ICE_SHALLOW_MF -! P. Wautelet 28/03/2019: use MNHTIME for time measurement variables -! P. Wautelet 02/2020: use the new data structures and subroutines for budgets -! -------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_CST, ONLY: CST -USE MODD_NEB, ONLY: NEB -USE MODD_TURB_n, ONLY: TURBN -USE MODD_CTURB, ONLY: CSTURB -USE MODD_PARAM_MFSHALL_n, ONLY: PARAM_MFSHALLN -USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t -! -USE MODE_FILL_DIMPHYEX, ONLY: FILL_DIMPHYEX -! -USE MODD_BUDGET, ONLY: TBUDGETS,TBUCONF,lbudget_th,nbudget_th -USE MODD_CONF -USE MODD_IO, ONLY: TFILEDATA -USE modd_field, ONLY: tfielddata, TYPEREAL -USE MODD_NSV, ONLY: XSVMIN, NSV_LGBEG, NSV_LGEND -USE MODD_PARAMETERS -USE MODD_PARAM_ICE, ONLY: CFRAC_ICE_SHALLOW_MF -USE MODD_PARAM_MFSHALL_n -USE modd_precision, ONLY: MNHTIME - -USE mode_budget, ONLY: Budget_store_init, Budget_store_end, Budget_store_add -USE MODE_IO_FIELD_WRITE, ONLY: IO_Field_write - -USE MODI_DIAGNOS_LES_MF -USE MODI_SHALLOW_MF -USE MODI_SHUMAN -! -IMPLICIT NONE - -!* 0.1 Declaration of Arguments -! -! -! -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. -LOGICAL, INTENT(IN) :: OMF_FLX ! switch to write the - ! MF fluxes in the synchronous FM-file -TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file -REAL(kind=MNHTIME),DIMENSION(2), INTENT(OUT) :: PTIME_LES ! time spent in LES computations -REAL, INTENT(IN) :: PIMPL_MF ! degre of implicitness -REAL, INTENT(IN) :: PTSTEP ! Dynamical timestep - -REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! Height of flux point -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZZ ! Metric coefficients -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! dry density * Grid size -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF ! dry density of the - ! reference state -REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABSM ! Pressure at time t-1 -REAL, DIMENSION(:,:,:), INTENT(IN) :: PEXN ! Exner function at t-dt - -REAL, DIMENSION(:,:), INTENT(IN) :: PSFTH,PSFRV ! normal surface fluxes of theta and Rv -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHM ! Theta at t-dt -REAL, DIMENSION(:,:,:,:),INTENT(IN):: PRM ! water var. at t-dt -REAL, DIMENSION(:,:,:), INTENT(IN) :: PUM,PVM ! wind components at t-dt -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKEM ! tke at t-dt - -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVM ! scalar variable a t-dt - -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRUS,PRVS,PRTHS ! Meso-NH sources -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRRS -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRSVS ! Scalar sources -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSIGMF,PRC_MF,PRI_MF,PCF_MF ! cloud info for the cloud scheme -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PFLXZTHVMF ! Thermal production for TKE scheme -! -REAL, INTENT(IN) :: PDX,PDY ! Size of mesh in X/Y directions -! 0.2 Declaration of local variables -! -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZDUDT_TURB ! tendency of U by turbulence only -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZDVDT_TURB ! tendency of V by turbulence only -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZDTHLDT_TURB ! tendency of thl by turbulence only -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZDRTDT_TURB ! tendency of rt by turbulence only -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3),SIZE(PSVM,4)) :: ZDSVDT_TURB ! tendency of Sv by turbulence only -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZDUDT_MF ! tendency of U by massflux scheme -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZDVDT_MF ! tendency of V by massflux scheme -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZDTHLDT_MF ! tendency of thl by massflux scheme -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZDRTDT_MF ! tendency of Rt by massflux scheme -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3),SIZE(PSVM,4)) :: ZDSVDT_MF ! tendency of Sv by massflux scheme -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZSIGMF,ZRC_MF,ZRI_MF,ZCF_MF ! cloud info for the cloud scheme -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZFLXZTHVMF ! Thermal production for TKE scheme -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZFLXZTHMF -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZFLXZRMF -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZFLXZUMF -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZFLXZVMF -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZTHL_UP ! updraft characteristics -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZRT_UP ! updraft characteristics -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZRV_UP ! updraft characteristics -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZU_UP ! updraft characteristics -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZV_UP ! updraft characteristics -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZRC_UP ! updraft characteristics -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZRI_UP ! updraft characteristics -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZTHV_UP ! updraft characteristics -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZW_UP ! updraft characteristics -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZFRAC_UP ! updraft characteristics -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZEMF ! updraft characteristics -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZDETR ! updraft characteristics -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZENTR ! updraft characteristics -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZUMM ! wind on mass point -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZVMM ! wind on mass point -! -INTEGER,DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2)) :: IKLCL,IKETL,IKCTL ! level of LCL,ETL and CTL -INTEGER :: IIU, IJU, IKU, IKB, IKE, IRR, ISV -INTEGER :: JK,JRR,JSV ! Loop counters - - -LOGICAL :: LSTATNW ! switch for HARMONIE-AROME turb physics option - ! TODO: linked with modd_turbn + init at default_desfmn - -TYPE(TFIELDDATA) :: TZFIELD -TYPE(DIMPHYEX_t) :: YLDIMPHYEXPACK -!------------------------------------------------------------------------ -! -!!! 1. Initialisation -CALL FILL_DIMPHYEX(YLDIMPHYEXPACK, SIZE(PZZ,1), SIZE(PZZ,2), SIZE(PZZ,3)) -! -! Internal Domain -IIU=SIZE(PTHM,1) -IJU=SIZE(PTHM,2) -IKU=SIZE(PTHM,3) -IKB=1+JPVEXT -IKE=IKU-JPVEXT -! -! number of moist var -IRR=SIZE(PRM,4) -! number of scalar var -ISV=SIZE(PSVM,4) -! -! wind on mass points -ZUMM=MXF(PUM) -ZVMM=MYF(PVM) -! -!!! 2. Call of the physical parameterization of massflux vertical transport -! -LSTATNW = .FALSE. -! -CALL SHALLOW_MF(YLDIMPHYEXPACK, CST, NEB, PARAM_MFSHALLN, TURBN, CSTURB,& - KRR,KRRL,KRRI,ISV, & - CFRAC_ICE_SHALLOW_MF,LNOMIXLG,NSV_LGBEG,NSV_LGEND, & - PIMPL_MF, PTSTEP, & - PDZZ, PZZ, & - PRHODJ,PRHODREF, & - PPABSM, PEXN, & - PSFTH,PSFRV, & - PTHM,PRM,ZUMM,ZVMM,PTKEM,PSVM, & - ZDUDT_MF,ZDVDT_MF, & - ZDTHLDT_MF,ZDRTDT_MF,ZDSVDT_MF, & - ZSIGMF,ZRC_MF,ZRI_MF,ZCF_MF,ZFLXZTHVMF, & - ZFLXZTHMF,ZFLXZRMF,ZFLXZUMF,ZFLXZVMF, & - ZTHL_UP,ZRT_UP,ZRV_UP,ZRC_UP,ZRI_UP, & - ZU_UP, ZV_UP, ZTHV_UP, ZW_UP, & - ZFRAC_UP,ZEMF,ZDETR,ZENTR, & - IKLCL,IKETL,IKCTL,PDX,PDY,PRSVS,XSVMIN, & - TBUCONF, TBUDGETS,SIZE(TBUDGETS) ) -! -! Fill non-declared-explicit-dimensions output variables -PSIGMF(:,:,:) = ZSIGMF(:,:,:) -PRC_MF(:,:,:) = ZRC_MF(:,:,:) -PRI_MF(:,:,:) = ZRI_MF(:,:,:) -PCF_MF(:,:,:) = ZCF_MF(:,:,:) -PFLXZTHVMF(:,:,:) = ZFLXZTHVMF(:,:,:) -! -!!! 3. Compute source terms for Meso-NH pronostic variables -!!! ---------------------------------------------------- -! -! As the pronostic variable of Meso-Nh are not (yet) the conservative variables -! the thl tendency is put in th and the rt tendency in rv -! the adjustment will do later the repartition between vapor and cloud -PRTHS(:,:,:) = PRTHS(:,:,:) + & - PRHODJ(:,:,:)*ZDTHLDT_MF(:,:,:) -PRRS(:,:,:,1) = PRRS(:,:,:,1) + & - PRHODJ(:,:,:)*ZDRTDT_MF(:,:,:) -PRUS(:,:,:) = PRUS(:,:,:) +MXM( & - PRHODJ(:,:,:)*ZDUDT_MF(:,:,:)) -PRVS(:,:,:) = PRVS(:,:,:) +MYM( & - PRHODJ(:,:,:)*ZDVDT_MF(:,:,:)) -! -DO JSV=1,ISV - IF (LNOMIXLG .AND. JSV >= NSV_LGBEG .AND. JSV<= NSV_LGEND) CYCLE - PRSVS(:,:,:,JSV) = MAX((PRSVS(:,:,:,JSV) + & - PRHODJ(:,:,:)*ZDSVDT_MF(:,:,:,JSV)),XSVMIN(JSV)) -END DO -! -!!! 4. Prints the fluxes in output file -! -IF ( OMF_FLX .AND. tpfile%lopened ) THEN - ! stores the conservative potential temperature vertical flux - TZFIELD%CMNHNAME = 'MF_THW_FLX' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'MF_THW_FLX' - TZFIELD%CUNITS = 'K m s-1' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_MF_THW_FLX' - TZFIELD%NGRID = 4 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZTHMF) - ! - ! stores the conservative mixing ratio vertical flux - TZFIELD%CMNHNAME = 'MF_RCONSW_FLX' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'MF_RCONSW_FLX' - TZFIELD%CUNITS = 'K m s-1' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_MF_RCONSW_FLX' - TZFIELD%NGRID = 4 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZRMF) - ! - ! stores the theta_v vertical flux - TZFIELD%CMNHNAME = 'MF_THVW_FLX' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'MF_THVW_FLX' - TZFIELD%CUNITS = 'K m s-1' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_MF_THVW_FLX' - TZFIELD%NGRID = 4 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,PFLXZTHVMF) - ! - IF (PARAM_MFSHALLN%LMIXUV) THEN - ! stores the U momentum vertical flux - TZFIELD%CMNHNAME = 'MF_UW_FLX' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'MF_UW_FLX' - TZFIELD%CUNITS = 'm2 s-2' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_MF_UW_FLX' - TZFIELD%NGRID = 4 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZUMF) - ! - ! stores the V momentum vertical flux - TZFIELD%CMNHNAME = 'MF_VW_FLX' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'MF_VW_FLX' - TZFIELD%CUNITS = 'm2 s-2' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_MF_VW_FLX' - TZFIELD%NGRID = 4 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZVMF) - ! - END IF -END IF -! -!!! 5. Externalised LES Diagnostic for Mass Flux Scheme -!!! ------------------------------------------------ -! - CALL DIAGNOS_LES_MF(IIU,IJU,IKU,PTIME_LES, & - ZTHL_UP,ZRT_UP,ZRV_UP,ZRC_UP,ZRI_UP, & - ZU_UP,ZV_UP,ZTHV_UP,ZW_UP, & - ZFRAC_UP,ZEMF,ZDETR,ZENTR, & - ZFLXZTHMF,ZFLXZTHVMF,ZFLXZRMF, & - ZFLXZUMF,ZFLXZVMF, & - IKLCL,IKETL,IKCTL ) -! -END SUBROUTINE SHALLOW_MF_PACK diff --git a/src/mesonh/ext/switch_sbg_lesn.f90 b/src/mesonh/ext/switch_sbg_lesn.f90 deleted file mode 100644 index 2920680fa..000000000 --- a/src/mesonh/ext/switch_sbg_lesn.f90 +++ /dev/null @@ -1,589 +0,0 @@ -!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. -!----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source$ $Revision$ $Date$ -!----------------------------------------------------------------- -!----------------------------------------------------------------- -! ########################## - SUBROUTINE SWITCH_SBG_LES_n -! ########################## -! -!!**** *SWITCH_SBG_LESn* - moves LES subgrid quantities from modd_les -!! to modd_lesn or the contrary. -!! -!! PURPOSE -!! ------- -! -!! -!!** IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! V. Masson *Meteo France* -!! -!! MODIFICATIONS -!! ------------- -!! Original June 14, 2002 -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_LES -USE MODD_LES_n -USE MODD_CONF_n -USE MODD_NSV -! -USE MODI_SECOND_MNH -! -IMPLICIT NONE -! -REAL :: ZTIME1, ZTIME2 -!------------------------------------------------------------------------------- -! -!* 7.4 interactions of resolved and subgrid quantities -! ----------------------------------------------- -! -CALL SECOND_MNH(ZTIME1) -! -IF (.NOT. ASSOCIATED (X_LES_RES_W_SBG_WThl) ) THEN -! ______ - CALL LES_ALLOCATE('X_LES_RES_W_SBG_WThl',(/NLES_K,NLES_TIMES,NLES_MASKS/))! <w'w'Thl'> -! _____ - CALL LES_ALLOCATE('X_LES_RES_W_SBG_Thl2',(/NLES_K,NLES_TIMES,NLES_MASKS/))! <w'Thl'2> -! _____ - CALL LES_ALLOCATE('X_LES_RES_ddxa_U_SBG_UaU',(/NLES_K,NLES_TIMES,NLES_MASKS/))! <du'/dxa ua'u'> -! _____ - CALL LES_ALLOCATE('X_LES_RES_ddxa_V_SBG_UaV',(/NLES_K,NLES_TIMES,NLES_MASKS/))! <dv'/dxa ua'v'> -! _____ - CALL LES_ALLOCATE('X_LES_RES_ddxa_W_SBG_UaW',(/NLES_K,NLES_TIMES,NLES_MASKS/))! <dw'/dxa ua'w'> -! _______ - CALL LES_ALLOCATE('X_LES_RES_ddxa_W_SBG_UaThl',(/NLES_K,NLES_TIMES,NLES_MASKS/))! <dw'/dxa ua'Thl'> -! _____ - CALL LES_ALLOCATE('X_LES_RES_ddxa_Thl_SBG_UaW',(/NLES_K,NLES_TIMES,NLES_MASKS/))! <dThl'/dxa ua'w'> -! ___ - CALL LES_ALLOCATE('X_LES_RES_ddz_Thl_SBG_W2',(/NLES_K,NLES_TIMES,NLES_MASKS/))! <dThl'/dz w'2> -! _______ - CALL LES_ALLOCATE('X_LES_RES_ddxa_Thl_SBG_UaThl',(/NLES_K,NLES_TIMES,NLES_MASKS/))! <dThl'/dxa ua'Thl'> -! - IF (LUSERV) THEN -! _____ - CALL LES_ALLOCATE('X_LES_RES_W_SBG_WRt',(/NLES_K,NLES_TIMES,NLES_MASKS/))! <w'w'Rt'> -! ____ - CALL LES_ALLOCATE('X_LES_RES_W_SBG_Rt2',(/NLES_K,NLES_TIMES,NLES_MASKS/))! <w'Rt'2> -! _______ - CALL LES_ALLOCATE('X_LES_RES_W_SBG_ThlRt',(/NLES_K,NLES_TIMES,NLES_MASKS/))! <w'Thl'Rt'> -! ______ - CALL LES_ALLOCATE('X_LES_RES_ddxa_W_SBG_UaRt',(/NLES_K,NLES_TIMES,NLES_MASKS/))! <dw'/dxa ua'Rt'> -! _____ - CALL LES_ALLOCATE('X_LES_RES_ddxa_Rt_SBG_UaW',(/NLES_K,NLES_TIMES,NLES_MASKS/))! <dRt'/dxa ua'w'> -! ___ - CALL LES_ALLOCATE('X_LES_RES_ddz_Rt_SBG_W2',(/NLES_K,NLES_TIMES,NLES_MASKS/))! <dRt'/dz w'2> -! ______ - CALL LES_ALLOCATE('X_LES_RES_ddxa_Thl_SBG_UaRt',(/NLES_K,NLES_TIMES,NLES_MASKS/))! <dThl'/dxa ua'Rt'> -! _______ - CALL LES_ALLOCATE('X_LES_RES_ddxa_Rt_SBG_UaThl',(/NLES_K,NLES_TIMES,NLES_MASKS/))! <dRt'/dxa ua'Thl'> -! ______ - CALL LES_ALLOCATE('X_LES_RES_ddxa_Rt_SBG_UaRt',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <dRt'/dxa ua'Rt'> - ELSE - CALL LES_ALLOCATE('X_LES_RES_W_SBG_WRt',(/0,0,0/)) - CALL LES_ALLOCATE('X_LES_RES_W_SBG_Rt2',(/0,0,0/)) - CALL LES_ALLOCATE('X_LES_RES_W_SBG_ThlRt',(/0,0,0/)) - CALL LES_ALLOCATE('X_LES_RES_ddxa_W_SBG_UaRt',(/0,0,0/)) - CALL LES_ALLOCATE('X_LES_RES_ddxa_Rt_SBG_UaW',(/0,0,0/)) - CALL LES_ALLOCATE('X_LES_RES_ddz_Rt_SBG_W2',(/0,0,0/)) - CALL LES_ALLOCATE('X_LES_RES_ddxa_Thl_SBG_UaRt',(/0,0,0/)) - CALL LES_ALLOCATE('X_LES_RES_ddxa_Rt_SBG_UaThl',(/0,0,0/)) - CALL LES_ALLOCATE('X_LES_RES_ddxa_Rt_SBG_UaRt',(/0,0,0/)) - END IF -! ______ -CALL LES_ALLOCATE('X_LES_RES_ddxa_W_SBG_UaSv',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/)) ! <dw'/dxa ua'Sv'> -! _____ -CALL LES_ALLOCATE('X_LES_RES_ddxa_Sv_SBG_UaW',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/)) ! <dSv'/dxa ua'w'> -! ___ -CALL LES_ALLOCATE('X_LES_RES_ddz_Sv_SBG_W2',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/) ) ! <dSv'/dz w'2> -! ______ -CALL LES_ALLOCATE('X_LES_RES_ddxa_Sv_SBG_UaSv',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/)) ! <dSv'/dxa ua'Sv'> -! _____ -CALL LES_ALLOCATE('X_LES_RES_W_SBG_WSv',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/)) ! <w'w'Sv'> -! ____ -CALL LES_ALLOCATE('X_LES_RES_W_SBG_Sv2',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/)) ! <w'Sv'2> -! -! - X_LES_RES_W_SBG_WThl = XLES_RES_W_SBG_WThl - X_LES_RES_W_SBG_Thl2 = XLES_RES_W_SBG_Thl2 - X_LES_RES_ddxa_U_SBG_UaU = XLES_RES_ddxa_U_SBG_UaU - X_LES_RES_ddxa_V_SBG_UaV = XLES_RES_ddxa_V_SBG_UaV - X_LES_RES_ddxa_W_SBG_UaW = XLES_RES_ddxa_W_SBG_UaW - X_LES_RES_ddxa_W_SBG_UaThl = XLES_RES_ddxa_W_SBG_UaThl - X_LES_RES_ddxa_Thl_SBG_UaW = XLES_RES_ddxa_Thl_SBG_UaW - X_LES_RES_ddz_Thl_SBG_W2 = XLES_RES_ddz_Thl_SBG_W2 - X_LES_RES_ddxa_Thl_SBG_UaThl = XLES_RES_ddxa_Thl_SBG_UaThl - IF (LUSERV) THEN - X_LES_RES_W_SBG_WRt = XLES_RES_W_SBG_WRt - X_LES_RES_W_SBG_Rt2 = XLES_RES_W_SBG_Rt2 - X_LES_RES_W_SBG_ThlRt = XLES_RES_W_SBG_ThlRt - X_LES_RES_ddxa_W_SBG_UaRt = XLES_RES_ddxa_W_SBG_UaRt - X_LES_RES_ddxa_Rt_SBG_UaW = XLES_RES_ddxa_Rt_SBG_UaW - X_LES_RES_ddz_Rt_SBG_W2 = XLES_RES_ddz_Rt_SBG_W2 - X_LES_RES_ddxa_Thl_SBG_UaRt= XLES_RES_ddxa_Thl_SBG_UaRt - X_LES_RES_ddxa_Rt_SBG_UaThl= XLES_RES_ddxa_Rt_SBG_UaThl - X_LES_RES_ddxa_Rt_SBG_UaRt = XLES_RES_ddxa_Rt_SBG_UaRt - END IF - IF (NSV>0) THEN - X_LES_RES_ddxa_W_SBG_UaSv = XLES_RES_ddxa_W_SBG_UaSv - X_LES_RES_ddxa_Sv_SBG_UaW = XLES_RES_ddxa_Sv_SBG_UaW - X_LES_RES_ddz_Sv_SBG_W2 = XLES_RES_ddz_Sv_SBG_W2 - X_LES_RES_ddxa_Sv_SBG_UaSv = XLES_RES_ddxa_Sv_SBG_UaSv - X_LES_RES_W_SBG_WSv = XLES_RES_W_SBG_WSv - X_LES_RES_W_SBG_Sv2 = XLES_RES_W_SBG_Sv2 - END IF -! -! - CALL LES_ALLOCATE('X_LES_SUBGRID_U2',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <u'2> - CALL LES_ALLOCATE('X_LES_SUBGRID_V2',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <v'2> - CALL LES_ALLOCATE('X_LES_SUBGRID_W2',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <w'2> - CALL LES_ALLOCATE('X_LES_SUBGRID_Thl2',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <Thl'2> - CALL LES_ALLOCATE('X_LES_SUBGRID_UV',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <u'v'> - CALL LES_ALLOCATE('X_LES_SUBGRID_WU',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <w'u'> - CALL LES_ALLOCATE('X_LES_SUBGRID_WV',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <w'v'> - CALL LES_ALLOCATE('X_LES_SUBGRID_UThl',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <u'Thl'> - CALL LES_ALLOCATE('X_LES_SUBGRID_VThl',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <v'Thl'> - CALL LES_ALLOCATE('X_LES_SUBGRID_WThl',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <w'Thl'> - CALL LES_ALLOCATE('X_LES_SUBGRID_WThv',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <w'Thv'> - CALL LES_ALLOCATE('X_LES_SUBGRID_ThlThv',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <Thl'Thv'> - CALL LES_ALLOCATE('X_LES_SUBGRID_W2Thl',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <w'2Thl> - CALL LES_ALLOCATE('X_LES_SUBGRID_WThl2',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <w'Thl'2> - CALL LES_ALLOCATE('X_LES_SUBGRID_DISS_Tke',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <epsilon> - CALL LES_ALLOCATE('X_LES_SUBGRID_DISS_Thl2',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <epsilon_Thl2> - CALL LES_ALLOCATE('X_LES_SUBGRID_WP',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <w'p'> - CALL LES_ALLOCATE('X_LES_SUBGRID_PHI3',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! phi3 - CALL LES_ALLOCATE('X_LES_SUBGRID_LMix',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! Lmix - CALL LES_ALLOCATE('X_LES_SUBGRID_LDiss',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! Ldiss - CALL LES_ALLOCATE('X_LES_SUBGRID_Km',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! Km - CALL LES_ALLOCATE('X_LES_SUBGRID_Kh',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! Kh - CALL LES_ALLOCATE('X_LES_SUBGRID_ThlPz',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <Thl'dp'/dz> - CALL LES_ALLOCATE('X_LES_SUBGRID_UTke',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <u'Tke> - CALL LES_ALLOCATE('X_LES_SUBGRID_VTke',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <v'Tke> - CALL LES_ALLOCATE('X_LES_SUBGRID_WTke',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <w'Tke> - CALL LES_ALLOCATE('X_LES_SUBGRID_ddz_WTke',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <dw'Tke/dz> - - CALL LES_ALLOCATE('X_LES_SUBGRID_THLUP_MF',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! Thl of the Updraft - CALL LES_ALLOCATE('X_LES_SUBGRID_RTUP_MF',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! Rt of the Updraft - CALL LES_ALLOCATE('X_LES_SUBGRID_RVUP_MF',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! Rv of the Updraft - CALL LES_ALLOCATE('X_LES_SUBGRID_RCUP_MF',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! Rc of the Updraft - CALL LES_ALLOCATE('X_LES_SUBGRID_RIUP_MF',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! Ri of the Updraft - CALL LES_ALLOCATE('X_LES_SUBGRID_WUP_MF',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! Thl of the Updraft - CALL LES_ALLOCATE('X_LES_SUBGRID_MASSFLUX',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! Mass Flux - CALL LES_ALLOCATE('X_LES_SUBGRID_DETR',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! Detrainment - CALL LES_ALLOCATE('X_LES_SUBGRID_ENTR',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! Entrainment - CALL LES_ALLOCATE('X_LES_SUBGRID_FRACUP',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! Updraft Fraction - CALL LES_ALLOCATE('X_LES_SUBGRID_THVUP_MF',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! Thv of the Updraft - CALL LES_ALLOCATE('X_LES_SUBGRID_WTHLMF',(/NLES_K,NLES_TIMES,NLES_MASKS/))! Flux of thl - CALL LES_ALLOCATE('X_LES_SUBGRID_WRTMF',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! Flux of rt - CALL LES_ALLOCATE('X_LES_SUBGRID_WTHVMF',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! Flux of thv - CALL LES_ALLOCATE('X_LES_SUBGRID_WUMF',(/NLES_K,NLES_TIMES,NLES_MASKS/))! Flux of u - CALL LES_ALLOCATE('X_LES_SUBGRID_WVMF',(/NLES_K,NLES_TIMES,NLES_MASKS/))! Flux of v - - IF (LUSERV ) THEN - CALL LES_ALLOCATE('X_LES_SUBGRID_Rt2',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <Rt'2> - CALL LES_ALLOCATE('X_LES_SUBGRID_ThlRt',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <Thl'Rt'> - CALL LES_ALLOCATE('X_LES_SUBGRID_URt',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <u'Rt'> - CALL LES_ALLOCATE('X_LES_SUBGRID_VRt',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <v'Rt'> - CALL LES_ALLOCATE('X_LES_SUBGRID_WRt',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <w'Rt'> - CALL LES_ALLOCATE('X_LES_SUBGRID_RtThv',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <Rt'Thv'> - CALL LES_ALLOCATE('X_LES_SUBGRID_W2Rt',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <w'2Rt'> - CALL LES_ALLOCATE('X_LES_SUBGRID_WThlRt',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <w'Thl'Rt'> - CALL LES_ALLOCATE('X_LES_SUBGRID_WRt2',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <w'Rt'2> - CALL LES_ALLOCATE('X_LES_SUBGRID_DISS_Rt2',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <epsilon_Rt2> - CALL LES_ALLOCATE('X_LES_SUBGRID_DISS_ThlRt',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <epsilon_ThlRt> - CALL LES_ALLOCATE('X_LES_SUBGRID_RtPz',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <Rt'dp'/dz> - CALL LES_ALLOCATE('X_LES_SUBGRID_PSI3',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! psi3 - ELSE - CALL LES_ALLOCATE('X_LES_SUBGRID_Rt2',(/0,0,0/)) - CALL LES_ALLOCATE('X_LES_SUBGRID_ThlRt',(/0,0,0/)) - CALL LES_ALLOCATE('X_LES_SUBGRID_URt',(/0,0,0/)) - CALL LES_ALLOCATE('X_LES_SUBGRID_VRt',(/0,0,0/)) - CALL LES_ALLOCATE('X_LES_SUBGRID_WRt',(/0,0,0/)) - CALL LES_ALLOCATE('X_LES_SUBGRID_RtThv',(/0,0,0/)) - CALL LES_ALLOCATE('X_LES_SUBGRID_W2Rt',(/0,0,0/)) - CALL LES_ALLOCATE('X_LES_SUBGRID_WThlRt',(/0,0,0/)) - CALL LES_ALLOCATE('X_LES_SUBGRID_WRt2',(/0,0,0/)) - CALL LES_ALLOCATE('X_LES_SUBGRID_DISS_Rt2',(/0,0,0/)) - CALL LES_ALLOCATE('X_LES_SUBGRID_DISS_ThlRt',(/0,0,0/)) - CALL LES_ALLOCATE('X_LES_SUBGRID_RtPz',(/0,0,0/)) - CALL LES_ALLOCATE('X_LES_SUBGRID_PSI3',(/0,0,0/)) - END IF - IF (LUSERC ) THEN - CALL LES_ALLOCATE('X_LES_SUBGRID_Rc2',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <Rc'2> - CALL LES_ALLOCATE('X_LES_SUBGRID_URc',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <u'Rc'> - CALL LES_ALLOCATE('X_LES_SUBGRID_VRc',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <v'Rc'> - CALL LES_ALLOCATE('X_LES_SUBGRID_WRc',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <w'Rc'> - ELSE - CALL LES_ALLOCATE('X_LES_SUBGRID_Rc2',(/0,0,0/)) - CALL LES_ALLOCATE('X_LES_SUBGRID_URc',(/0,0,0/)) - CALL LES_ALLOCATE('X_LES_SUBGRID_VRc',(/0,0,0/)) - CALL LES_ALLOCATE('X_LES_SUBGRID_WRc',(/0,0,0/)) - END IF - IF (LUSERI ) THEN - CALL LES_ALLOCATE('X_LES_SUBGRID_Ri2',(/NLES_K,NLES_TIMES,NLES_MASKS/)) ! <Ri'2> - ELSE - CALL LES_ALLOCATE('X_LES_SUBGRID_Ri2',(/0,0,0/)) - END IF - IF (NSV>0 ) THEN - CALL LES_ALLOCATE('X_LES_SUBGRID_USv',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/)) ! <u'Sv'> - CALL LES_ALLOCATE('X_LES_SUBGRID_VSv',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/)) ! <v'Sv'> - CALL LES_ALLOCATE('X_LES_SUBGRID_WSv',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/)) ! <w'Sv'> - CALL LES_ALLOCATE('X_LES_SUBGRID_Sv2',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/)) ! <Sv'2> - CALL LES_ALLOCATE('X_LES_SUBGRID_SvThv',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/)) ! <Sv'Thv'> - CALL LES_ALLOCATE('X_LES_SUBGRID_W2Sv',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/)) ! <w'2Sv'> - CALL LES_ALLOCATE('X_LES_SUBGRID_WSv2',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/)) ! <w'Sv'2> - CALL LES_ALLOCATE('X_LES_SUBGRID_DISS_Sv2',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/)) ! <epsilon_Sv2> - CALL LES_ALLOCATE('X_LES_SUBGRID_SvPz',(/NLES_K,NLES_TIMES,NLES_MASKS,NSV/)) ! <Sv'dp'/dz> - ELSE - CALL LES_ALLOCATE('X_LES_SUBGRID_USv',(/0,0,0,0/)) - CALL LES_ALLOCATE('X_LES_SUBGRID_VSv',(/0,0,0,0/)) - CALL LES_ALLOCATE('X_LES_SUBGRID_WSv',(/0,0,0,0/)) - CALL LES_ALLOCATE('X_LES_SUBGRID_Sv2',(/0,0,0,0/)) - CALL LES_ALLOCATE('X_LES_SUBGRID_SvThv',(/0,0,0,0/)) - CALL LES_ALLOCATE('X_LES_SUBGRID_W2Sv',(/0,0,0,0/)) - CALL LES_ALLOCATE('X_LES_SUBGRID_WSv2',(/0,0,0,0/)) - CALL LES_ALLOCATE('X_LES_SUBGRID_DISS_Sv2',(/0,0,0,0/)) - CALL LES_ALLOCATE('X_LES_SUBGRID_SvPz',(/0,0,0,0/)) - END IF -! - X_LES_SUBGRID_U2 = XLES_SUBGRID_U2 - X_LES_SUBGRID_V2 = XLES_SUBGRID_V2 - X_LES_SUBGRID_W2 = XLES_SUBGRID_W2 - X_LES_SUBGRID_Thl2= XLES_SUBGRID_Thl2 - X_LES_SUBGRID_UV = XLES_SUBGRID_UV - X_LES_SUBGRID_WU = XLES_SUBGRID_WU - X_LES_SUBGRID_WV = XLES_SUBGRID_WV - X_LES_SUBGRID_UThl= XLES_SUBGRID_UThl - X_LES_SUBGRID_VThl= XLES_SUBGRID_VThl - X_LES_SUBGRID_WThl= XLES_SUBGRID_WThl - X_LES_SUBGRID_WThv = XLES_SUBGRID_WThv - X_LES_SUBGRID_ThlThv = XLES_SUBGRID_ThlThv - X_LES_SUBGRID_W2Thl = XLES_SUBGRID_W2Thl - X_LES_SUBGRID_WThl2 = XLES_SUBGRID_WThl2 - X_LES_SUBGRID_DISS_Tke = XLES_SUBGRID_DISS_Tke - X_LES_SUBGRID_DISS_Thl2= XLES_SUBGRID_DISS_Thl2 - X_LES_SUBGRID_WP = XLES_SUBGRID_WP - X_LES_SUBGRID_PHI3 = XLES_SUBGRID_PHI3 - X_LES_SUBGRID_LMix = XLES_SUBGRID_LMix - X_LES_SUBGRID_LDiss = XLES_SUBGRID_LDiss - X_LES_SUBGRID_Km = XLES_SUBGRID_Km - X_LES_SUBGRID_Kh = XLES_SUBGRID_Kh - X_LES_SUBGRID_ThlPz = XLES_SUBGRID_ThlPz - X_LES_SUBGRID_UTke= XLES_SUBGRID_UTke - X_LES_SUBGRID_VTke= XLES_SUBGRID_VTke - X_LES_SUBGRID_WTke= XLES_SUBGRID_WTke - X_LES_SUBGRID_ddz_WTke =XLES_SUBGRID_ddz_WTke - - X_LES_SUBGRID_THLUP_MF = XLES_SUBGRID_THLUP_MF - X_LES_SUBGRID_RTUP_MF = XLES_SUBGRID_RTUP_MF - X_LES_SUBGRID_RVUP_MF = XLES_SUBGRID_RVUP_MF - X_LES_SUBGRID_RCUP_MF = XLES_SUBGRID_RCUP_MF - X_LES_SUBGRID_RIUP_MF = XLES_SUBGRID_RIUP_MF - X_LES_SUBGRID_WUP_MF = XLES_SUBGRID_WUP_MF - X_LES_SUBGRID_MASSFLUX = XLES_SUBGRID_MASSFLUX - X_LES_SUBGRID_DETR = XLES_SUBGRID_DETR - X_LES_SUBGRID_ENTR = XLES_SUBGRID_ENTR - X_LES_SUBGRID_FRACUP = XLES_SUBGRID_FRACUP - X_LES_SUBGRID_THVUP_MF = XLES_SUBGRID_THVUP_MF - X_LES_SUBGRID_WTHLMF = XLES_SUBGRID_WTHLMF - X_LES_SUBGRID_WRTMF = XLES_SUBGRID_WRTMF - X_LES_SUBGRID_WTHVMF = XLES_SUBGRID_WTHVMF - X_LES_SUBGRID_WUMF = XLES_SUBGRID_WUMF - X_LES_SUBGRID_WVMF = XLES_SUBGRID_WVMF - - IF (LUSERV ) THEN - X_LES_SUBGRID_Rt2 = XLES_SUBGRID_Rt2 - X_LES_SUBGRID_ThlRt= XLES_SUBGRID_ThlRt - X_LES_SUBGRID_URt = XLES_SUBGRID_URt - X_LES_SUBGRID_VRt = XLES_SUBGRID_VRt - X_LES_SUBGRID_WRt = XLES_SUBGRID_WRt - X_LES_SUBGRID_RtThv = XLES_SUBGRID_RtThv - X_LES_SUBGRID_W2Rt = XLES_SUBGRID_W2Rt - X_LES_SUBGRID_WThlRt = XLES_SUBGRID_WThlRt - X_LES_SUBGRID_WRt2 = XLES_SUBGRID_WRt2 - X_LES_SUBGRID_DISS_Rt2= XLES_SUBGRID_DISS_Rt2 - X_LES_SUBGRID_DISS_ThlRt= XLES_SUBGRID_DISS_ThlRt - X_LES_SUBGRID_RtPz = XLES_SUBGRID_RtPz - X_LES_SUBGRID_PSI3 = XLES_SUBGRID_PSI3 - END IF - IF (LUSERC ) THEN - X_LES_SUBGRID_Rc2 = XLES_SUBGRID_Rc2 - X_LES_SUBGRID_URc = XLES_SUBGRID_URc - X_LES_SUBGRID_VRc = XLES_SUBGRID_VRc - X_LES_SUBGRID_WRc = XLES_SUBGRID_WRc - END IF - IF (LUSERI ) THEN - X_LES_SUBGRID_Ri2 = XLES_SUBGRID_Ri2 - END IF - IF (NSV>0 ) THEN - X_LES_SUBGRID_USv = XLES_SUBGRID_USv - X_LES_SUBGRID_VSv = XLES_SUBGRID_VSv - X_LES_SUBGRID_WSv = XLES_SUBGRID_WSv - X_LES_SUBGRID_Sv2 = XLES_SUBGRID_Sv2 - X_LES_SUBGRID_SvThv = XLES_SUBGRID_SvThv - X_LES_SUBGRID_W2Sv = XLES_SUBGRID_W2Sv - X_LES_SUBGRID_WSv2 = XLES_SUBGRID_WSv2 - X_LES_SUBGRID_DISS_Sv2 = XLES_SUBGRID_DISS_Sv2 - X_LES_SUBGRID_SvPz = XLES_SUBGRID_SvPz - END IF -! -! - CALL LES_ALLOCATE('X_LES_UW0',(/NLES_TIMES/)) - CALL LES_ALLOCATE('X_LES_VW0',(/NLES_TIMES/)) - CALL LES_ALLOCATE('X_LES_USTAR',(/NLES_TIMES/)) - CALL LES_ALLOCATE('X_LES_Q0',(/NLES_TIMES/)) - CALL LES_ALLOCATE('X_LES_E0',(/NLES_TIMES/)) - CALL LES_ALLOCATE('X_LES_SV0',(/NLES_TIMES,NSV/)) -! - X_LES_UW0 = XLES_UW0 - X_LES_VW0 = XLES_VW0 - X_LES_USTAR = XLES_USTAR - X_LES_Q0 = XLES_Q0 - X_LES_E0 = XLES_E0 - IF (NSV>0) X_LES_SV0 = XLES_SV0 - -ELSE -! - XLES_RES_W_SBG_WThl = X_LES_RES_W_SBG_WThl - XLES_RES_W_SBG_Thl2 = X_LES_RES_W_SBG_Thl2 - XLES_RES_ddxa_U_SBG_UaU = X_LES_RES_ddxa_U_SBG_UaU - XLES_RES_ddxa_V_SBG_UaV = X_LES_RES_ddxa_V_SBG_UaV - XLES_RES_ddxa_W_SBG_UaW = X_LES_RES_ddxa_W_SBG_UaW - XLES_RES_ddxa_W_SBG_UaThl = X_LES_RES_ddxa_W_SBG_UaThl - XLES_RES_ddxa_Thl_SBG_UaW = X_LES_RES_ddxa_Thl_SBG_UaW - XLES_RES_ddz_Thl_SBG_W2 = X_LES_RES_ddz_Thl_SBG_W2 - XLES_RES_ddxa_Thl_SBG_UaThl = X_LES_RES_ddxa_Thl_SBG_UaThl - IF (LUSERV) THEN - XLES_RES_W_SBG_WRt = X_LES_RES_W_SBG_WRt - XLES_RES_W_SBG_Rt2 = X_LES_RES_W_SBG_Rt2 - XLES_RES_W_SBG_ThlRt = X_LES_RES_W_SBG_ThlRt - XLES_RES_ddxa_W_SBG_UaRt = X_LES_RES_ddxa_W_SBG_UaRt - XLES_RES_ddxa_Rt_SBG_UaW = X_LES_RES_ddxa_Rt_SBG_UaW - XLES_RES_ddz_Rt_SBG_W2 = X_LES_RES_ddz_Rt_SBG_W2 - XLES_RES_ddxa_Thl_SBG_UaRt= X_LES_RES_ddxa_Thl_SBG_UaRt - XLES_RES_ddxa_Rt_SBG_UaThl= X_LES_RES_ddxa_Rt_SBG_UaThl - XLES_RES_ddxa_Rt_SBG_UaRt = X_LES_RES_ddxa_Rt_SBG_UaRt - END IF - IF (NSV>0) THEN - XLES_RES_ddxa_W_SBG_UaSv = X_LES_RES_ddxa_W_SBG_UaSv - XLES_RES_ddxa_Sv_SBG_UaW = X_LES_RES_ddxa_Sv_SBG_UaW - XLES_RES_ddz_Sv_SBG_W2 = X_LES_RES_ddz_Sv_SBG_W2 - XLES_RES_ddxa_Sv_SBG_UaSv = X_LES_RES_ddxa_Sv_SBG_UaSv - XLES_RES_W_SBG_WSv = X_LES_RES_W_SBG_WSv - XLES_RES_W_SBG_Sv2 = X_LES_RES_W_SBG_Sv2 - END IF - XLES_SUBGRID_U2 = X_LES_SUBGRID_U2 - XLES_SUBGRID_V2 = X_LES_SUBGRID_V2 - XLES_SUBGRID_W2 = X_LES_SUBGRID_W2 - XLES_SUBGRID_Thl2= X_LES_SUBGRID_Thl2 - XLES_SUBGRID_UV = X_LES_SUBGRID_UV - XLES_SUBGRID_WU = X_LES_SUBGRID_WU - XLES_SUBGRID_WV = X_LES_SUBGRID_WV - XLES_SUBGRID_UThl= X_LES_SUBGRID_UThl - XLES_SUBGRID_VThl= X_LES_SUBGRID_VThl - XLES_SUBGRID_WThl= X_LES_SUBGRID_WThl - XLES_SUBGRID_WThv = X_LES_SUBGRID_WThv - XLES_SUBGRID_ThlThv = X_LES_SUBGRID_ThlThv - XLES_SUBGRID_W2Thl = X_LES_SUBGRID_W2Thl - XLES_SUBGRID_WThl2 = X_LES_SUBGRID_WThl2 - XLES_SUBGRID_DISS_Tke = X_LES_SUBGRID_DISS_Tke - XLES_SUBGRID_DISS_Thl2= X_LES_SUBGRID_DISS_Thl2 - XLES_SUBGRID_WP = X_LES_SUBGRID_WP - XLES_SUBGRID_PHI3 = X_LES_SUBGRID_PHI3 - XLES_SUBGRID_LMix = X_LES_SUBGRID_LMix - XLES_SUBGRID_LDiss = X_LES_SUBGRID_LDiss - XLES_SUBGRID_Km = X_LES_SUBGRID_Km - XLES_SUBGRID_Kh = X_LES_SUBGRID_Kh - XLES_SUBGRID_ThlPz = X_LES_SUBGRID_ThlPz - XLES_SUBGRID_UTke= X_LES_SUBGRID_UTke - XLES_SUBGRID_VTke= X_LES_SUBGRID_VTke - XLES_SUBGRID_WTke= X_LES_SUBGRID_WTke - XLES_SUBGRID_ddz_WTke =X_LES_SUBGRID_ddz_WTke - - XLES_SUBGRID_THLUP_MF = X_LES_SUBGRID_THLUP_MF - XLES_SUBGRID_RTUP_MF = X_LES_SUBGRID_RTUP_MF - XLES_SUBGRID_RVUP_MF = X_LES_SUBGRID_RVUP_MF - XLES_SUBGRID_RCUP_MF = X_LES_SUBGRID_RCUP_MF - XLES_SUBGRID_RIUP_MF = X_LES_SUBGRID_RIUP_MF - XLES_SUBGRID_WUP_MF = X_LES_SUBGRID_WUP_MF - XLES_SUBGRID_MASSFLUX = X_LES_SUBGRID_MASSFLUX - XLES_SUBGRID_DETR = X_LES_SUBGRID_DETR - XLES_SUBGRID_ENTR = X_LES_SUBGRID_ENTR - XLES_SUBGRID_FRACUP = X_LES_SUBGRID_FRACUP - XLES_SUBGRID_THVUP_MF = X_LES_SUBGRID_THVUP_MF - XLES_SUBGRID_WTHLMF = X_LES_SUBGRID_WTHLMF - XLES_SUBGRID_WRTMF = X_LES_SUBGRID_WRTMF - XLES_SUBGRID_WTHVMF = X_LES_SUBGRID_WTHVMF - XLES_SUBGRID_WUMF = X_LES_SUBGRID_WUMF - XLES_SUBGRID_WVMF = X_LES_SUBGRID_WVMF - - IF (LUSERV ) THEN - XLES_SUBGRID_Rt2 = X_LES_SUBGRID_Rt2 - XLES_SUBGRID_ThlRt= X_LES_SUBGRID_ThlRt - XLES_SUBGRID_URt = X_LES_SUBGRID_URt - XLES_SUBGRID_VRt = X_LES_SUBGRID_VRt - XLES_SUBGRID_WRt = X_LES_SUBGRID_WRt - XLES_SUBGRID_RtThv = X_LES_SUBGRID_RtThv - XLES_SUBGRID_W2Rt = X_LES_SUBGRID_W2Rt - XLES_SUBGRID_WThlRt = X_LES_SUBGRID_WThlRt - XLES_SUBGRID_WRt2 = X_LES_SUBGRID_WRt2 - XLES_SUBGRID_DISS_Rt2= X_LES_SUBGRID_DISS_Rt2 - XLES_SUBGRID_DISS_ThlRt= X_LES_SUBGRID_DISS_ThlRt - XLES_SUBGRID_RtPz = X_LES_SUBGRID_RtPz - XLES_SUBGRID_PSI3 = X_LES_SUBGRID_PSI3 - END IF - IF (LUSERC ) THEN - XLES_SUBGRID_Rc2 = X_LES_SUBGRID_Rc2 - XLES_SUBGRID_URc = X_LES_SUBGRID_URc - XLES_SUBGRID_VRc = X_LES_SUBGRID_VRc - XLES_SUBGRID_WRc = X_LES_SUBGRID_WRc - END IF - IF (LUSERI ) THEN - XLES_SUBGRID_Ri2 = X_LES_SUBGRID_Ri2 - END IF - IF (NSV>0 ) THEN - XLES_SUBGRID_USv = X_LES_SUBGRID_USv - XLES_SUBGRID_VSv = X_LES_SUBGRID_VSv - XLES_SUBGRID_WSv = X_LES_SUBGRID_WSv - XLES_SUBGRID_Sv2 = X_LES_SUBGRID_Sv2 - XLES_SUBGRID_SvThv = X_LES_SUBGRID_SvThv - XLES_SUBGRID_W2Sv = X_LES_SUBGRID_W2Sv - XLES_SUBGRID_WSv2 = X_LES_SUBGRID_WSv2 - XLES_SUBGRID_DISS_Sv2 = X_LES_SUBGRID_DISS_Sv2 - XLES_SUBGRID_SvPz = X_LES_SUBGRID_SvPz - END IF - XLES_UW0 = X_LES_UW0 - XLES_VW0 = X_LES_VW0 - XLES_USTAR = X_LES_USTAR - XLES_Q0 = X_LES_Q0 - XLES_E0 = X_LES_E0 - IF (NSV>0) XLES_SV0 = X_LES_SV0 -! - CALL LES_DEALLOCATE('X_LES_RES_W_SBG_WThl') - CALL LES_DEALLOCATE('X_LES_RES_W_SBG_Thl2') - CALL LES_DEALLOCATE('X_LES_RES_ddxa_U_SBG_UaU') - CALL LES_DEALLOCATE('X_LES_RES_ddxa_V_SBG_UaV') - CALL LES_DEALLOCATE('X_LES_RES_ddxa_W_SBG_UaW') - CALL LES_DEALLOCATE('X_LES_RES_ddxa_W_SBG_UaThl') - CALL LES_DEALLOCATE('X_LES_RES_ddxa_Thl_SBG_UaW') - CALL LES_DEALLOCATE('X_LES_RES_ddz_Thl_SBG_W2') - CALL LES_DEALLOCATE('X_LES_RES_ddxa_Thl_SBG_UaThl') - CALL LES_DEALLOCATE('X_LES_RES_W_SBG_WRt') - CALL LES_DEALLOCATE('X_LES_RES_W_SBG_Rt2') - CALL LES_DEALLOCATE('X_LES_RES_W_SBG_ThlRt') - CALL LES_DEALLOCATE('X_LES_RES_ddxa_W_SBG_UaRt') - CALL LES_DEALLOCATE('X_LES_RES_ddxa_Rt_SBG_UaW') - CALL LES_DEALLOCATE('X_LES_RES_ddz_Rt_SBG_W2') - CALL LES_DEALLOCATE('X_LES_RES_ddxa_Thl_SBG_UaRt') - CALL LES_DEALLOCATE('X_LES_RES_ddxa_Rt_SBG_UaThl') - CALL LES_DEALLOCATE('X_LES_RES_ddxa_Rt_SBG_UaRt') - CALL LES_DEALLOCATE('X_LES_RES_ddxa_W_SBG_UaSv') - CALL LES_DEALLOCATE('X_LES_RES_ddxa_Sv_SBG_UaW') - CALL LES_DEALLOCATE('X_LES_RES_ddz_Sv_SBG_W2') - CALL LES_DEALLOCATE('X_LES_RES_ddxa_Sv_SBG_UaSv') - CALL LES_DEALLOCATE('X_LES_RES_W_SBG_WSv') - CALL LES_DEALLOCATE('X_LES_RES_W_SBG_Sv2') -! - CALL LES_DEALLOCATE('X_LES_SUBGRID_U2') - CALL LES_DEALLOCATE('X_LES_SUBGRID_V2') - CALL LES_DEALLOCATE('X_LES_SUBGRID_W2') - CALL LES_DEALLOCATE('X_LES_SUBGRID_Thl2') - CALL LES_DEALLOCATE('X_LES_SUBGRID_UV') - CALL LES_DEALLOCATE('X_LES_SUBGRID_WU') - CALL LES_DEALLOCATE('X_LES_SUBGRID_WV') - CALL LES_DEALLOCATE('X_LES_SUBGRID_UThl') - CALL LES_DEALLOCATE('X_LES_SUBGRID_VThl') - CALL LES_DEALLOCATE('X_LES_SUBGRID_WThl') - CALL LES_DEALLOCATE('X_LES_SUBGRID_WThv') - CALL LES_DEALLOCATE('X_LES_SUBGRID_ThlThv') - CALL LES_DEALLOCATE('X_LES_SUBGRID_W2Thl') - CALL LES_DEALLOCATE('X_LES_SUBGRID_WThl2') - CALL LES_DEALLOCATE('X_LES_SUBGRID_DISS_Tke') - CALL LES_DEALLOCATE('X_LES_SUBGRID_DISS_Thl2') - CALL LES_DEALLOCATE('X_LES_SUBGRID_WP') - CALL LES_DEALLOCATE('X_LES_SUBGRID_PHI3') - CALL LES_DEALLOCATE('X_LES_SUBGRID_LMix') - CALL LES_DEALLOCATE('X_LES_SUBGRID_LDiss') - CALL LES_DEALLOCATE('X_LES_SUBGRID_Km') - CALL LES_DEALLOCATE('X_LES_SUBGRID_Kh') - CALL LES_DEALLOCATE('X_LES_SUBGRID_ThlPz') - CALL LES_DEALLOCATE('X_LES_SUBGRID_UTke') - CALL LES_DEALLOCATE('X_LES_SUBGRID_VTke') - CALL LES_DEALLOCATE('X_LES_SUBGRID_WTke') - CALL LES_DEALLOCATE('X_LES_SUBGRID_ddz_WTke') - - CALL LES_DEALLOCATE('X_LES_SUBGRID_THLUP_MF') - CALL LES_DEALLOCATE('X_LES_SUBGRID_RTUP_MF') - CALL LES_DEALLOCATE('X_LES_SUBGRID_RVUP_MF') - CALL LES_DEALLOCATE('X_LES_SUBGRID_RCUP_MF') - CALL LES_DEALLOCATE('X_LES_SUBGRID_RIUP_MF') - CALL LES_DEALLOCATE('X_LES_SUBGRID_WUP_MF') - CALL LES_DEALLOCATE('X_LES_SUBGRID_MASSFLUX') - CALL LES_DEALLOCATE('X_LES_SUBGRID_DETR') - CALL LES_DEALLOCATE('X_LES_SUBGRID_ENTR') - CALL LES_DEALLOCATE('X_LES_SUBGRID_FRACUP') - CALL LES_DEALLOCATE('X_LES_SUBGRID_THVUP_MF') - CALL LES_DEALLOCATE('X_LES_SUBGRID_WTHLMF') - CALL LES_DEALLOCATE('X_LES_SUBGRID_WRTMF') - CALL LES_DEALLOCATE('X_LES_SUBGRID_WTHVMF') - CALL LES_DEALLOCATE('X_LES_SUBGRID_WUMF') - CALL LES_DEALLOCATE('X_LES_SUBGRID_WVMF') - - CALL LES_DEALLOCATE('X_LES_SUBGRID_Rt2') - CALL LES_DEALLOCATE('X_LES_SUBGRID_ThlRt') - CALL LES_DEALLOCATE('X_LES_SUBGRID_URt') - CALL LES_DEALLOCATE('X_LES_SUBGRID_VRt') - CALL LES_DEALLOCATE('X_LES_SUBGRID_WRt') - CALL LES_DEALLOCATE('X_LES_SUBGRID_RtThv') - CALL LES_DEALLOCATE('X_LES_SUBGRID_W2Rt') - CALL LES_DEALLOCATE('X_LES_SUBGRID_WThlRt') - CALL LES_DEALLOCATE('X_LES_SUBGRID_WRt2') - CALL LES_DEALLOCATE('X_LES_SUBGRID_DISS_Rt2') - CALL LES_DEALLOCATE('X_LES_SUBGRID_DISS_ThlRt') - CALL LES_DEALLOCATE('X_LES_SUBGRID_RtPz') - CALL LES_DEALLOCATE('X_LES_SUBGRID_PSI3') - CALL LES_DEALLOCATE('X_LES_SUBGRID_Rc2') - CALL LES_DEALLOCATE('X_LES_SUBGRID_URc') - CALL LES_DEALLOCATE('X_LES_SUBGRID_VRc') - CALL LES_DEALLOCATE('X_LES_SUBGRID_WRc') - CALL LES_DEALLOCATE('X_LES_SUBGRID_Ri2') - CALL LES_DEALLOCATE('X_LES_SUBGRID_USv') - CALL LES_DEALLOCATE('X_LES_SUBGRID_VSv') - CALL LES_DEALLOCATE('X_LES_SUBGRID_WSv') - CALL LES_DEALLOCATE('X_LES_SUBGRID_Sv2') - CALL LES_DEALLOCATE('X_LES_SUBGRID_SvThv') - CALL LES_DEALLOCATE('X_LES_SUBGRID_W2Sv') - CALL LES_DEALLOCATE('X_LES_SUBGRID_WSv2') - CALL LES_DEALLOCATE('X_LES_SUBGRID_DISS_Sv2') - CALL LES_DEALLOCATE('X_LES_SUBGRID_SvPz') - ! - CALL LES_DEALLOCATE('X_LES_UW0') - CALL LES_DEALLOCATE('X_LES_VW0') - CALL LES_DEALLOCATE('X_LES_USTAR') - CALL LES_DEALLOCATE('X_LES_Q0') - CALL LES_DEALLOCATE('X_LES_E0') - CALL LES_DEALLOCATE('X_LES_SV0') -! -END IF -! -CALL SECOND_MNH(ZTIME2) -! -XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1 -! -END SUBROUTINE SWITCH_SBG_LES_n diff --git a/src/mesonh/ext/write_lesn.f90 b/src/mesonh/ext/write_lesn.f90 deleted file mode 100644 index 9b6b326bc..000000000 --- a/src/mesonh/ext/write_lesn.f90 +++ /dev/null @@ -1,1319 +0,0 @@ -!MNH_LIC Copyright 2000-2021 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. -!----------------------------------------------------------------- -!###################### -module mode_write_les_n -!###################### - -use modd_field, only: tfield_metadata_base - -implicit none - -private - -public :: Write_les_n - - -character(len=:), allocatable :: cgroup -character(len=:), allocatable :: cgroupcomment - -logical :: ldoavg ! Compute and store time average -logical :: ldonorm ! Compute and store normalized field - -type(tfield_metadata_base) :: tfield -type(tfield_metadata_base) :: tfieldx -type(tfield_metadata_base) :: tfieldy - -interface Les_diachro_write - module procedure Les_diachro_write_1D, Les_diachro_write_2D, Les_diachro_write_3D, Les_diachro_write_4D -end interface - -contains - -!################################### -subroutine Write_les_n( tpdiafile ) -!################################### -! -! -!!**** *WRITE_LES_n* writes the LES final diagnostics for model _n -!! -!! -!! PURPOSE -!! ------- -!! -!! EXTERNAL -!! -------- -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! AUTHOR -!! ------ -!! V. Masson -!! -!! MODIFICATIONS -!! ------------- -!! Original 07/02/00 -!! 01/02/01 (D. Gazen) add module MODD_NSV for NSV variable -!! 06/11/02 (V. Masson) some minor bugs -!! 01/04/03 (V. Masson) idem -!! 10/10/09 (P. Aumond) Add user multimaskS -!! 11/15 (C.Lac) Add production terms of TKE -!! 10/2016 (C.Lac) Add droplet deposition -! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O -! C. Lac 02/2019: add rain fraction as a LES diagnostic -! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management -! P. Wautelet 12/10/2020: remove HLES_AVG dummy argument and group all 4 calls -! P. Wautelet 13/10/2020: bugfix: correct some names for LES_DIACHRO_2PT diagnostics (Ri) -! P. Wautelet 26/10/2020: bugfix: correct some comments and conditions + add missing RES_RTPZ -! P. Wautelet 26/10/2020: restructure subroutines to use tfield_metadata_base type -! -------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -use modd_conf_n, only: luserv, luserc, luserr, luseri, lusers, luserg, luserh -use modd_io, only: tfiledata -use modd_field, only: NMNHDIM_BUDGET_LES_TIME, NMNHDIM_BUDGET_LES_LEVEL, NMNHDIM_BUDGET_LES_SV, NMNHDIM_BUDGET_LES_MASK, & - NMNHDIM_BUDGET_LES_PDF, & - NMNHDIM_SPECTRA_2PTS_NI, NMNHDIM_SPECTRA_2PTS_NJ, NMNHDIM_SPECTRA_LEVEL, NMNHDIM_UNUSED, & - TYPEREAL -use modd_grid_n, only: xdxhat, xdyhat -use modd_nsv, only: nsv -use modd_les -use modd_les_n -use modd_param_n, only: ccloud -use modd_param_c2r2, only: ldepoc -use modd_param_ice, only: ldeposc -use modd_parameters, only: XUNDEF - -use mode_les_spec_n, only: Les_spec_n -use mode_modeln_handler, only: Get_current_model_index -use mode_write_les_budget_n, only: Write_les_budget_n -use mode_write_les_rt_budget_n, only: Write_les_rt_budget_n -use mode_write_les_sv_budget_n, only: Write_les_sv_budget_n - -IMPLICIT NONE -! -!* 0.1 declarations of arguments -! -TYPE(TFILEDATA), INTENT(IN) :: TPDIAFILE! file to write -! -! -!* 0.2 declaration of local variables -! -INTEGER :: IMASK -! -INTEGER :: JSV ! scalar loop counter -INTEGER :: JI ! loop counter -! -character(len=3) :: ynum -CHARACTER(len=5) :: YGROUP -character(len=7), dimension(nles_masks) :: ymasks -! -logical :: gdoavg ! Compute and store time average -logical :: gdonorm ! Compute and store normalized field -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZAVG_PTS_ll -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZUND_PTS_ll -REAL :: ZCART_PTS_ll -INTEGER :: IMI ! Current model inde -! -!------------------------------------------------------------------------------- -! -IF (.NOT. LLES) RETURN -! -! -!* 1. Initializations -! --------------- -! -IMI = GET_CURRENT_MODEL_INDEX() -! -! -!* 1.1 Normalization variables -! ----------------------- -! -IF (CLES_NORM_TYPE/='NONE' ) THEN - CALL LES_ALLOCATE('XLES_NORM_M', (/NLES_TIMES/)) - CALL LES_ALLOCATE('XLES_NORM_S', (/NLES_TIMES/)) - CALL LES_ALLOCATE('XLES_NORM_K', (/NLES_TIMES/)) - CALL LES_ALLOCATE('XLES_NORM_RHO',(/NLES_TIMES/)) - CALL LES_ALLOCATE('XLES_NORM_RV', (/NLES_TIMES/)) - CALL LES_ALLOCATE('XLES_NORM_SV', (/NLES_TIMES,NSV/)) - CALL LES_ALLOCATE('XLES_NORM_P', (/NLES_TIMES/)) - ! - IF (CLES_NORM_TYPE=='CONV') THEN - WHERE (XLES_WSTAR(:)>0.) - XLES_NORM_M(:) = XLES_BL_HEIGHT(:) - XLES_NORM_S(:) = XLES_NORM_M(:) / XLES_WSTAR(:) - XLES_NORM_K(:) = XLES_Q0(:) / XLES_WSTAR(:) - XLES_NORM_RHO(:) = XLES_MEAN_RHO(1,:,1) - XLES_NORM_RV(:) = XLES_E0(:) / XLES_WSTAR(:) - XLES_NORM_P(:) = XLES_MEAN_RHO(1,:,1) * XLES_WSTAR(:)**2 - ELSEWHERE - XLES_NORM_M(:) = 0. - XLES_NORM_S(:) = 0. - XLES_NORM_K(:) = 0. - XLES_NORM_RHO(:) = 0. - XLES_NORM_RV(:) = 0. - XLES_NORM_P(:) = 0. - END WHERE - DO JSV=1,NSV - WHERE (XLES_WSTAR(:)>0.) - XLES_NORM_SV(:,JSV)= XLES_SV0(:,JSV) / XLES_WSTAR(:) - ELSEWHERE - XLES_NORM_SV(:,JSV)= 0. - END WHERE - END DO - ELSE IF (CLES_NORM_TYPE=='EKMA') THEN - WHERE (XLES_USTAR(:)>0.) - XLES_NORM_M(:) = XLES_BL_HEIGHT(:) - XLES_NORM_S(:) = XLES_NORM_M(:) / XLES_USTAR(:) - XLES_NORM_K(:) = XLES_Q0(:) / XLES_USTAR(:) - XLES_NORM_RHO(:) = XLES_MEAN_RHO(1,:,1) - XLES_NORM_RV(:) = XLES_E0(:) / XLES_USTAR(:) - XLES_NORM_P(:) = XLES_MEAN_RHO(1,:,1) * XLES_USTAR(:)**2 - ELSEWHERE - XLES_NORM_M(:) = 0. - XLES_NORM_S(:) = 0. - XLES_NORM_K(:) = 0. - XLES_NORM_RHO(:) = 0. - XLES_NORM_RV(:) = 0. - XLES_NORM_P(:) = 0. - END WHERE - DO JSV=1,NSV - WHERE (XLES_USTAR(:)>0.) - XLES_NORM_SV(:,JSV)= XLES_SV0(:,JSV) / XLES_USTAR(:) - ELSEWHERE - XLES_NORM_SV(:,JSV)= 0. - END WHERE - END DO - ELSE IF (CLES_NORM_TYPE=='MOBU') THEN - XLES_NORM_M(:) = XLES_MO_LENGTH(:) - WHERE (XLES_USTAR(:)>0.) - XLES_NORM_S(:) = XLES_NORM_M(:) / XLES_USTAR(:) - XLES_NORM_K(:) = XLES_Q0(:) / XLES_USTAR(:) - XLES_NORM_RHO(:) = XLES_MEAN_RHO(1,:,1) - XLES_NORM_RV(:) = XLES_E0(:) / XLES_USTAR(:) - XLES_NORM_P(:) = XLES_MEAN_RHO(1,:,1) * XLES_USTAR(:)**2 - ELSEWHERE - XLES_NORM_S(:) = 0. - XLES_NORM_K(:) = 0. - XLES_NORM_RHO(:) = 0. - XLES_NORM_RV(:) = 0. - XLES_NORM_P(:) = 0. - END WHERE - DO JSV=1,NSV - WHERE (XLES_USTAR(:)>0.) - XLES_NORM_SV(:,JSV)= XLES_SV0(:,JSV) / XLES_USTAR(:) - ELSEWHERE - XLES_NORM_SV(:,JSV)= 0. - END WHERE - END DO - END IF -END IF -! -!* 1.2 Initializations for WRITE_DIACHRO -! --------------------------------- -! -NLES_CURRENT_TIMES=NLES_TIMES -! -CALL LES_ALLOCATE('XLES_CURRENT_Z',(/NLES_K/)) - -XLES_CURRENT_Z(:) = XLES_Z(:) -! -XLES_CURRENT_ZS = XLES_ZS -! -NLES_CURRENT_IINF=NLESn_IINF(IMI) -NLES_CURRENT_ISUP=NLESn_ISUP(IMI) -NLES_CURRENT_JINF=NLESn_JINF(IMI) -NLES_CURRENT_JSUP=NLESn_JSUP(IMI) -! -XLES_CURRENT_DOMEGAX=XDXHAT(1) -XLES_CURRENT_DOMEGAY=XDYHAT(1) - -tfield%ngrid = 0 !Not on the Arakawa grid -tfield%ntype = TYPEREAL -! -!* 2. (z,t) profiles (all masks) -! -------------- -IMASK = 1 -ymasks(imask) = 'cart' -IF (LLES_NEB_MASK) THEN - IMASK=IMASK+1 - ymasks(imask) = 'neb' - IMASK=IMASK+1 - ymasks(imask) = 'clear' -END IF -IF (LLES_CORE_MASK) THEN - IMASK=IMASK+1 - ymasks(imask) = 'core' - IMASK=IMASK+1 - ymasks(imask) = 'env' -END IF -IF (LLES_MY_MASK) THEN - DO JI=1,NLES_MASKS_USER - IMASK=IMASK+1 - Write( ynum, '( i3.3 )' ) ji - ymasks(imask) = 'user' // ynum - END DO -END IF -IF (LLES_CS_MASK) THEN - IMASK=IMASK+1 - ymasks(imask) = 'cs1' - IMASK=IMASK+1 - ymasks(imask) = 'cs2' - IMASK=IMASK+1 - ymasks(imask) = 'cs3' -END IF -! -!* 2.0 averaging diagnostics -! --------------------- -! -ALLOCATE(ZAVG_PTS_ll (NLES_K,NLES_TIMES,NLES_MASKS)) -ALLOCATE(ZUND_PTS_ll (NLES_K,NLES_TIMES,NLES_MASKS)) - -ZAVG_PTS_ll(:,:,:) = NLES_AVG_PTS_ll(:,:,:) -ZUND_PTS_ll(:,:,:) = NLES_UND_PTS_ll(:,:,:) -ZCART_PTS_ll = (NLESn_ISUP(IMI)-NLESn_IINF(IMI)+1) * (NLESn_JSUP(IMI)-NLESn_JINF(IMI)+1) - -tfield%ndims = 3 -tfield%ndimlist(1) = NMNHDIM_BUDGET_LES_LEVEL -tfield%ndimlist(2) = NMNHDIM_BUDGET_LES_TIME -tfield%ndimlist(3) = NMNHDIM_BUDGET_LES_MASK -tfield%ndimlist(4:) = NMNHDIM_UNUSED - -ldoavg = xles_temp_mean_start /= XUNDEF .and. xles_temp_mean_end /= XUNDEF -ldonorm = .false. - -cgroup = 'Miscellaneous' -cgroupcomment = 'Miscellaneous terms (geometry, various unclassified averaged terms...)' - -call Les_diachro_write( tpdiafile, zavg_pts_ll, 'AVG_PTS', 'number of points used for averaging', '1', ymasks ) -call Les_diachro_write( tpdiafile, zavg_pts_ll / zcart_pts_ll, 'AVG_PTSF', 'fraction of points used for averaging', '1', ymasks ) -call Les_diachro_write( tpdiafile, zund_pts_ll, 'UND_PTS', 'number of points below orography', '1', ymasks ) -call Les_diachro_write( tpdiafile, zund_pts_ll / zcart_pts_ll, 'UND_PTSF', 'fraction of points below orography', '1', ymasks ) - -DEALLOCATE(ZAVG_PTS_ll) -DEALLOCATE(ZUND_PTS_ll) -! -!* 2.1 mean quantities -! --------------- -! -cgroup = 'Mean' -cgroupcomment = 'Mean vertical profiles of the model variables' - -tfield%ndims = 3 -tfield%ndimlist(1) = NMNHDIM_BUDGET_LES_LEVEL -tfield%ndimlist(2) = NMNHDIM_BUDGET_LES_TIME -tfield%ndimlist(3) = NMNHDIM_BUDGET_LES_MASK -tfield%ndimlist(4:) = NMNHDIM_UNUSED - -ldoavg = xles_temp_mean_start /= XUNDEF .and. xles_temp_mean_end /= XUNDEF -ldonorm = trim(cles_norm_type) /= 'NONE' - -call Les_diachro_write( tpdiafile, XLES_MEAN_U, 'MEAN_U', 'Mean U Profile', 'm s-1', ymasks ) -call Les_diachro_write( tpdiafile, XLES_MEAN_V, 'MEAN_V', 'Mean V Profile', 'm s-1', ymasks ) -call Les_diachro_write( tpdiafile, XLES_MEAN_W, 'MEAN_W', 'Mean W Profile', 'm s-1', ymasks ) -call Les_diachro_write( tpdiafile, XLES_MEAN_P, 'MEAN_PRE', 'Mean pressure Profile', 'Pa', ymasks ) -call Les_diachro_write( tpdiafile, XLES_MEAN_DP, 'MEAN_DP', 'Mean Dyn production TKE Profile', 'm2 s-3', ymasks ) -call Les_diachro_write( tpdiafile, XLES_MEAN_TP, 'MEAN_TP', 'Mean Thermal production TKE Profile', 'm2 s-3', ymasks ) -call Les_diachro_write( tpdiafile, XLES_MEAN_TR, 'MEAN_TR', 'Mean transport production TKE Profile', 'm2 s-3', ymasks ) -call Les_diachro_write( tpdiafile, XLES_MEAN_DISS, 'MEAN_DISS', 'Mean Dissipation TKE Profile', 'm2 s-3', ymasks ) -call Les_diachro_write( tpdiafile, XLES_MEAN_LM, 'MEAN_LM', 'Mean mixing length Profile', 'm', ymasks ) -call Les_diachro_write( tpdiafile, XLES_MEAN_RHO, 'MEAN_RHO', 'Mean density Profile', 'kg m-3', ymasks ) -call Les_diachro_write( tpdiafile, XLES_MEAN_Th, 'MEAN_TH', 'Mean potential temperature Profile', 'K', ymasks ) -call Les_diachro_write( tpdiafile, XLES_MEAN_Mf, 'MEAN_MF', 'Mass-flux Profile', 'm s-1', ymasks ) -if ( luserc ) & -call Les_diachro_write( tpdiafile, XLES_MEAN_Thl, 'MEAN_THL', 'Mean liquid potential temperature Profile', 'K', ymasks ) -if ( luserv ) & -call Les_diachro_write( tpdiafile, XLES_MEAN_Thv, 'MEAN_THV', 'Mean virtual potential temperature Profile', 'K', ymasks ) -if ( luserc ) & -call Les_diachro_write( tpdiafile, XLES_MEAN_Rt, 'MEAN_RT', 'Mean Rt Profile', 'kg kg-1', ymasks ) -if ( luserv ) & -call Les_diachro_write( tpdiafile, XLES_MEAN_Rv, 'MEAN_RV', 'Mean Rv Profile', 'kg kg-1', ymasks ) -if ( luserv ) & -call Les_diachro_write( tpdiafile, XLES_MEAN_Rehu, 'MEAN_REHU', 'Mean Rh Profile', 'percent', ymasks ) -if ( luserv ) & -call Les_diachro_write( tpdiafile, XLES_MEAN_Qs, 'MEAN_QS', 'Mean Qs Profile', 'kg kg-1', ymasks ) -if ( luserc ) & -call Les_diachro_write( tpdiafile, XLES_MEAN_KHt, 'MEAN_KHT', 'Eddy-diffusivity (temperature) Profile', 'm2 s-1', ymasks ) -if ( luserc ) & -call Les_diachro_write( tpdiafile, XLES_MEAN_KHr, 'MEAN_KHR', 'Eddy-diffusivity (vapor) Profile', 'm2 s-1', ymasks ) -if ( luserc ) & -call Les_diachro_write( tpdiafile, XLES_MEAN_Rc, 'MEAN_RC', 'Mean Rc Profile', 'kg kg-1', ymasks ) -if ( luserc ) & -call Les_diachro_write( tpdiafile, XLES_MEAN_Cf, 'MEAN_CF', 'Mean Cf Profile', '1', ymasks ) -if ( luserc ) & -call Les_diachro_write( tpdiafile, XLES_MEAN_INDCf, 'MEAN_INDCF', 'Mean Cf>1-6 Profile (0 or 1)', '1', ymasks ) -if ( luserc ) & -call Les_diachro_write( tpdiafile, XLES_MEAN_INDCf2, 'MEAN_INDCF2', 'Mean Cf>1-5 Profile (0 or 1)', '1', ymasks ) -if ( luserr ) & -call Les_diachro_write( tpdiafile, XLES_MEAN_Rr, 'MEAN_RR', 'Mean Rr Profile', 'kg kg-1', ymasks ) -if ( luserr ) & -call Les_diachro_write( tpdiafile, XLES_MEAN_RF, 'MEAN_RF', 'Mean RF Profile', '1', ymasks ) -if ( luseri ) & -call Les_diachro_write( tpdiafile, XLES_MEAN_Ri, 'MEAN_RI', 'Mean Ri Profile', 'kg kg-1', ymasks ) -if ( luseri ) & -call Les_diachro_write( tpdiafile, XLES_MEAN_If, 'MEAN_IF', 'Mean If Profile', '1', ymasks ) -if ( lusers ) & -call Les_diachro_write( tpdiafile, XLES_MEAN_Rs, 'MEAN_RS', 'Mean Rs Profile', 'kg kg-1', ymasks ) -if ( luserg ) & -call Les_diachro_write( tpdiafile, XLES_MEAN_Rg, 'MEAN_RG', 'Mean Rg Profile', 'kg kg-1', ymasks ) -if ( luserh ) & -call Les_diachro_write( tpdiafile, XLES_MEAN_Rh, 'MEAN_RH', 'Mean Rh Profile', 'kg kg-1', ymasks ) - -if ( nsv > 0 ) then - tfield%ndims = 4 - tfield%ndimlist(1) = NMNHDIM_BUDGET_LES_LEVEL - tfield%ndimlist(2) = NMNHDIM_BUDGET_LES_TIME - tfield%ndimlist(3) = NMNHDIM_BUDGET_LES_MASK - tfield%ndimlist(4) = NMNHDIM_BUDGET_LES_SV - tfield%ndimlist(5:) = NMNHDIM_UNUSED - - call Les_diachro_write( tpdiafile, XLES_MEAN_Sv, 'MEAN_SV', 'Mean Sv Profiles', 'kg kg-1', ymasks ) - - tfield%ndims = 3 - !tfield%ndimlist(1) = NMNHDIM_BUDGET_LES_LEVEL - !tfield%ndimlist(2) = NMNHDIM_BUDGET_LES_TIME - !tfield%ndimlist(3) = NMNHDIM_BUDGET_LES_MASK - tfield%ndimlist(4) = NMNHDIM_UNUSED - !tfield%ndimlist(5:) = NMNHDIM_UNUSED -end if - -call Les_diachro_write( tpdiafile, XLES_MEAN_WIND, 'MEANWIND', 'Profile of Mean Modulus of Wind', 'm s-1', ymasks ) -call Les_diachro_write( tpdiafile, XLES_RESOLVED_MASSFX, 'MEANMSFX', 'Total updraft mass flux', 'kg m-2 s-1', ymasks ) - -if ( lles_pdf ) then - cgroup = 'PDF' - cgroupcomment = '' - - tfield%ndims = 4 - !tfield%ndimlist(1) = NMNHDIM_BUDGET_LES_LEVEL - !tfield%ndimlist(2) = NMNHDIM_BUDGET_LES_TIME - !tfield%ndimlist(3) = NMNHDIM_BUDGET_LES_MASK - tfield%ndimlist(4) = NMNHDIM_BUDGET_LES_PDF - tfield%ndimlist(5:) = NMNHDIM_UNUSED - - call Les_diachro_write( tpdiafile, XLES_PDF_TH, 'PDF_TH', 'Pdf potential temperature Profiles', '1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_PDF_W, 'PDF_W', 'Pdf vertical velocity Profiles', '1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_PDF_THV, 'PDF_THV', 'Pdf virtual pot. temp. Profiles', '1', ymasks ) - if ( luserv ) & - call Les_diachro_write( tpdiafile, XLES_PDF_RV, 'PDF_RV', 'Pdf Rv Profiles', '1', ymasks ) - if ( luserc ) then - call Les_diachro_write( tpdiafile, XLES_PDF_RC, 'PDF_RC', 'Pdf Rc Profiles', '1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_PDF_RT, 'PDF_RT', 'Pdf Rt Profiles', '1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_PDF_THL, 'PDF_THL', 'Pdf Thl Profiles', '1', ymasks ) - end if - if ( luserr ) & - call Les_diachro_write( tpdiafile, XLES_PDF_RR, 'PDF_RR', 'Pdf Rr Profiles', '1', ymasks ) - if ( luseri ) & - call Les_diachro_write( tpdiafile, XLES_PDF_RI, 'PDF_RI', 'Pdf Ri Profiles', '1', ymasks ) - if ( lusers ) & - call Les_diachro_write( tpdiafile, XLES_PDF_RS, 'PDF_RS', 'Pdf Rs Profiles', '1', ymasks ) - if ( luserg ) & - call Les_diachro_write( tpdiafile, XLES_PDF_RG, 'PDF_RG', 'Pdf Rg Profiles', '1', ymasks ) -end if -! -!* 2.2 resolved quantities -! ------------------- -! -if ( lles_resolved ) then - !Prepare metadata (used in Les_diachro_write calls) - ldoavg = xles_temp_mean_start /= XUNDEF .and. xles_temp_mean_end /= XUNDEF - ldonorm = trim(cles_norm_type) /= 'NONE' - - cgroup = 'Resolved' - cgroupcomment = 'Mean vertical profiles of the resolved fluxes, variances and covariances' - - tfield%ndims = 3 - tfield%ndimlist(1) = NMNHDIM_BUDGET_LES_LEVEL - tfield%ndimlist(2) = NMNHDIM_BUDGET_LES_TIME - tfield%ndimlist(3) = NMNHDIM_BUDGET_LES_MASK - tfield%ndimlist(4:) = NMNHDIM_UNUSED - - call Les_diachro_write( tpdiafile, XLES_RESOLVED_U2, 'RES_U2', 'Resolved <u2> variance', 'm2 s-2', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_V2, 'RES_V2', 'Resolved <v2> variance', 'm2 s-2', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_W2, 'RES_W2', 'Resolved <w2> variance', 'm2 s-2', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_UV, 'RES_UV', 'Resolved <uv> Flux', 'm2 s-2', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_WU, 'RES_WU', 'Resolved <wu> Flux', 'm2 s-2', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_WV, 'RES_WV', 'Resolved <wv> Flux', 'm2 s-2', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_Ke, 'RES_KE', 'Resolved TKE Profile', 'm2 s-2', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_P2, 'RES_P2', 'Resolved pressure variance', 'Pa2', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_UP, 'RES_UPZ', 'Resolved <up> horizontal Flux', 'Pa s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_VP, 'RES_VPZ', 'Resolved <vp> horizontal Flux', 'Pa s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_WP, 'RES_WPZ', 'Resolved <wp> vertical Flux', 'Pa s-1', ymasks ) - - if ( luserv ) & - call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThThv, 'RES_THTV', & - 'Resolved potential temperature - virtual potential temperature covariance', 'K2', ymasks ) - if ( luserc ) & - call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThlThv, 'RES_TLTV', & - 'Resolved liquid potential temperature - virtual potential temperature covariance', 'K2', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_Th2, 'RES_TH2', 'Resolved potential temperature variance', 'K2', ymasks ) - if ( luserc ) & - call Les_diachro_write( tpdiafile, XLES_RESOLVED_Thl2, 'RES_THL2', 'Resolved liquid potential temperature variance', 'K2',& - ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_UTh, 'RES_UTH', 'Resolved <uth> horizontal Flux', 'm K s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_VTh, 'RES_VTH', 'Resolved <vth> horizontal Flux', 'm K s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_WTh, 'RES_WTH', 'Resolved <wth> vertical Flux', 'm K s-1', ymasks ) - - if ( luserc ) then - call Les_diachro_write( tpdiafile, XLES_RESOLVED_UThl, 'RES_UTHL', 'Resolved <uthl> horizontal Flux', 'm K s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_VThl, 'RES_VTHL', 'Resolved <vthl> horizontal Flux', 'm K s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_WThl, 'RES_WTHL', 'Resolved <wthl> vertical Flux', 'm K s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_Rt2, 'RES_RT2', 'Resolved total water variance', 'kg2 kg-2', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_WRt, 'RES_WRT', 'Resolved <wrt> vertical Flux', 'm kg kg-1 s-1', ymasks ) - end if - - if ( luserv ) then - call Les_diachro_write( tpdiafile, XLES_RESOLVED_UThv, 'RES_UTHV', 'Resolved <uthv> horizontal Flux', 'm K s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_VThv, 'RES_VTHV', 'Resolved <vthv> horizontal Flux', 'm K s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_WThv, 'RES_WTHV', 'Resolved <wthv> vertical Flux', 'm K s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_Rv2, 'RES_RV2', 'Resolved water vapor variance', 'kg2 kg-2', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThRv, 'RES_THRV', 'Resolved <thrv> covariance', 'K kg kg-1', ymasks ) - if ( luserc ) & - call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThlRv, 'RES_TLRV', 'Resolved <thlrv> covariance', 'K kg kg-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThvRv, 'RES_TVRV', 'Resolved <thvrv> covariance', 'K kg kg-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_URv, 'RES_URV', 'Resolved <urv> horizontal flux', 'm kg kg-1 s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_VRv, 'RES_VRV', 'Resolved <vrv> horizontal flux', 'm kg kg-1 s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_WRv, 'RES_WRV', 'Resolved <wrv> vertical flux', 'm kg kg-1 s-1', ymasks ) - end if - - if ( luserc ) then - call Les_diachro_write( tpdiafile, XLES_RESOLVED_Rc2, 'RES_RC2', 'Resolved cloud water variance', 'kg2 kg-2', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThRc, 'RES_THRC', 'Resolved <thrc> covariance', 'K kg kg-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThlRc, 'RES_TLRC', 'Resolved <thlrc> covariance', 'K kg kg-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThvRc, 'RES_TVRC', 'Resolved <thvrc> covariance', 'K kg kg-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_URc, 'RES_URC', 'Resolved <urc> horizontal flux', 'm kg kg-1 s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_VRc, 'RES_VRC', 'Resolved <vrc> horizontal flux', 'm kg kg-1 s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_WRc, 'RES_WRC', 'Resolved <wrc> vertical flux', 'm kg kg-1 s-1', ymasks ) - end if - - if ( luseri ) then - call Les_diachro_write( tpdiafile, XLES_RESOLVED_Ri2, 'RES_RI2', 'Resolved cloud ice variance', 'kg2 kg-2', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThRi, 'RES_THRI', 'Resolved <thri> covariance', 'K kg kg-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThlRi, 'RES_TLRI', 'Resolved <thlri> covariance', 'K kg kg-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThvRi, 'RES_TVRI', 'Resolved <thvri> covariance', 'K kg kg-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_URi, 'RES_URI', 'Resolved <uri> horizontal flux', 'm kg kg-1 s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_VRi, 'RES_VRI', 'Resolved <vri> horizontal flux', 'm kg kg-1 s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_WRi, 'RES_WRI', 'Resolved <wri> vertical flux', 'm kg kg-1 s-1', ymasks ) - end if - - if ( luserr ) then - call Les_diachro_write( tpdiafile, XLES_RESOLVED_WRr, 'RES_WRR', 'Resolved <wrr> vertical flux', 'm kg kg-1 s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_INPRR3D, 'INPRR3D', 'Precipitation flux', 'm s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_MAX_INPRR3D, 'MAXINPR3D', 'Max Precip flux', 'm s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_EVAP3D, 'EVAP3D', 'Evaporation profile', 'kg kg-1 s-1', ymasks ) - end if - - if ( nsv > 0 ) then - tfield%ndims = 4 - tfield%ndimlist(1) = NMNHDIM_BUDGET_LES_LEVEL - tfield%ndimlist(2) = NMNHDIM_BUDGET_LES_TIME - tfield%ndimlist(3) = NMNHDIM_BUDGET_LES_MASK - tfield%ndimlist(4) = NMNHDIM_BUDGET_LES_SV - tfield%ndimlist(5:) = NMNHDIM_UNUSED - - call Les_diachro_write( tpdiafile, XLES_RESOLVED_Sv2, 'RES_SV2', 'Resolved scalar variables variances', 'kg2 kg-2', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThSv, 'RES_THSV', 'Resolved <ThSv> variance', 'K kg kg-1', ymasks ) - if ( luserc ) & - call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThlSv, 'RES_TLSV', 'Resolved <ThlSv> variance', 'K kg kg-1', ymasks ) - if ( luserv ) & - call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThvSv, 'RES_TVSV', 'Resolved <ThvSv> variance', 'K kg kg-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_USv, 'RES_USV', 'Resolved <uSv> horizontal flux', 'm kg kg-1 s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_VSv, 'RES_VSV', 'Resolved <vSv> horizontal flux', 'm kg kg-1 s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_WSv, 'RES_WSV', 'Resolved <wSv> vertical flux', 'm kg kg-1 s-1', ymasks ) - - tfield%ndims = 3 - !tfield%ndimlist(1) = NMNHDIM_BUDGET_LES_LEVEL - !tfield%ndimlist(2) = NMNHDIM_BUDGET_LES_TIME - !tfield%ndimlist(3) = NMNHDIM_BUDGET_LES_MASK - tfield%ndimlist(4) = NMNHDIM_UNUSED - !tfield%ndimlist(5:) = NMNHDIM_UNUSED - end if - - call Les_diachro_write( tpdiafile, XLES_RESOLVED_U3, 'RES_U3', 'Resolved <u3>', 'm3 s-3', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_V3, 'RES_V3', 'Resolved <v3>', 'm3 s-3', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_W3, 'RES_W3', 'Resolved <w3>', 'm3 s-3', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_U4, 'RES_U4', 'Resolved <u4>', 'm4 s-4', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_V4, 'RES_V4', 'Resolved <v4>', 'm4 s-4', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_W4, 'RES_W4', 'Resolved <w4>', 'm4 s-4', ymasks ) - - call Les_diachro_write( tpdiafile, XLES_RESOLVED_WThl2, 'RES_WTL2', 'Resolved <wThl2>', 'm K2 s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_W2Thl, 'RES_W2TL', 'Resolved <w2Thl>', 'm2 K s-2', ymasks ) - - if ( luserv ) then - call Les_diachro_write( tpdiafile, XLES_RESOLVED_WRv2, 'RES_WRV2', 'Resolved <wRv2>', 'm kg2 kg-2 s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_W2Rv, 'RES_W2RV', 'Resolved <w2Rv>', 'm2 kg kg-1 s-2', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_WRt2, 'RES_WRT2', 'Resolved <wRt2>', 'm kg2 kg-2 s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_W2Rt, 'RES_W2RT', 'Resolved <w2Rt>', 'm2 kg kg-1 s-2', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_WThlRv, 'RE_WTLRV', 'Resolved <wThlRv>', 'm K kg kg-1 s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_WThlRt, 'RE_WTLRT', 'Resolved <wThlRt>', 'm K kg kg-1 s-1', ymasks ) - end if - - if ( luserc ) then - call Les_diachro_write( tpdiafile, XLES_RESOLVED_WRc2, 'RES_WRC2', 'Resolved <wRc2>', 'm kg2 kg-2 s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_W2Rc, 'RES_W2RC', 'Resolved <w2Rc>', 'm2 kg kg-1 s-2', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_WThlRc, 'RE_WTLRC', 'Resolved <wThlRc>', 'm K kg kg-1 s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_WRvRc, 'RE_WRVRC', 'Resolved <wRvRc>', 'm kg2 kg-2 s-1', ymasks ) - end if - - if ( luseri ) then - call Les_diachro_write( tpdiafile, XLES_RESOLVED_WRi2, 'RES_WRI2', 'Resolved <wRi2>', 'm kg2 kg-2 s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_W2Ri, 'RES_W2RI', 'Resolved <w2Ri>', 'm2 kg kg-1 s-2', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_WThlRi, 'RE_WTLRI', 'Resolved <wThlRi>', 'm K kg kg-1 s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_WRvRi, 'RE_WRVRI', 'Resolved <wRvRi>', 'm kg2 kg-2 s-1', ymasks ) - end if - - if ( nsv > 0 ) then - tfield%ndims = 4 - tfield%ndimlist(1) = NMNHDIM_BUDGET_LES_LEVEL - tfield%ndimlist(2) = NMNHDIM_BUDGET_LES_TIME - tfield%ndimlist(3) = NMNHDIM_BUDGET_LES_MASK - tfield%ndimlist(4) = NMNHDIM_BUDGET_LES_SV - tfield%ndimlist(5:) = NMNHDIM_UNUSED - - call Les_diachro_write( tpdiafile, XLES_RESOLVED_WSv2, 'RES_WSV2', 'Resolved <wSv2>', 'm kg2 kg-2 s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_W2Sv, 'RES_W2SV', 'Resolved <w2Sv>', 'm2 kg kg-1 s-2', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_WThlSv, 'RE_WTLSV', 'Resolved <wThlSv>', 'm K kg kg-1 s-1', ymasks ) - if ( luserv ) & - call Les_diachro_write( tpdiafile, XLES_RESOLVED_WRvSv, 'RE_WRVSV', 'Resolved <wRvSv>', 'm kg2 kg-2 s-1', ymasks ) - - tfield%ndims = 3 - !tfield%ndimlist(1) = NMNHDIM_BUDGET_LES_LEVEL - !tfield%ndimlist(2) = NMNHDIM_BUDGET_LES_TIME - !tfield%ndimlist(3) = NMNHDIM_BUDGET_LES_MASK - tfield%ndimlist(4) = NMNHDIM_UNUSED - !tfield%ndimlist(5:) = NMNHDIM_UNUSED - end if - - call Les_diachro_write( tpdiafile, XLES_RESOLVED_ThlPz, 'RES_TLPZ', 'Resolved <Thldp/dz>', 'K Pa m-1', ymasks ) - if ( luserc ) & - call Les_diachro_write( tpdiafile, XLES_RESOLVED_RtPz, 'RES_RTPZ', 'Resolved <Rtdp/dz>', 'kg2 kg-2 Pa m-1', ymasks ) - if ( luserv ) & - call Les_diachro_write( tpdiafile, XLES_RESOLVED_RvPz, 'RES_RVPZ', 'Resolved <Rvdp/dz>', 'kg2 kg-2 Pa m-1', ymasks ) - if ( luserc ) & - call Les_diachro_write( tpdiafile, XLES_RESOLVED_RcPz, 'RES_RCPZ', 'Resolved <Rcdp/dz>', 'kg2 kg-2 Pa m-1', ymasks ) - if ( luseri ) & - call Les_diachro_write( tpdiafile, XLES_RESOLVED_RiPz, 'RES_RIPZ', 'Resolved <Ridp/dz>', 'kg2 kg-2 Pa m-1', ymasks ) - - if ( nsv > 0 ) then - tfield%ndims = 4 - tfield%ndimlist(1) = NMNHDIM_BUDGET_LES_LEVEL - tfield%ndimlist(2) = NMNHDIM_BUDGET_LES_TIME - tfield%ndimlist(3) = NMNHDIM_BUDGET_LES_MASK - tfield%ndimlist(4) = NMNHDIM_BUDGET_LES_SV - tfield%ndimlist(5:) = NMNHDIM_UNUSED - - call Les_diachro_write( tpdiafile, XLES_RESOLVED_SvPz, 'RES_SVPZ', 'Resolved <Svdp/dz>', 'kg2 kg-2 Pa m-1', ymasks ) - - tfield%ndims = 3 - !tfield%ndimlist(1) = NMNHDIM_BUDGET_LES_LEVEL - !tfield%ndimlist(2) = NMNHDIM_BUDGET_LES_TIME - !tfield%ndimlist(3) = NMNHDIM_BUDGET_LES_MASK - tfield%ndimlist(4) = NMNHDIM_UNUSED - !tfield%ndimlist(5:) = NMNHDIM_UNUSED - end if - - call Les_diachro_write( tpdiafile, XLES_RESOLVED_UKe, 'RES_UKE', 'Resolved flux of resolved kinetic energy', 'm3 s-3', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_VKe, 'RES_VKE', 'Resolved flux of resolved kinetic energy', 'm3 s-3', ymasks ) - call Les_diachro_write( tpdiafile, XLES_RESOLVED_WKe, 'RES_WKE', 'Resolved flux of resolved kinetic energy', 'm3 s-3', ymasks ) -end if -! -! -!* 2.3 subgrid quantities -! ------------------ -! -if ( lles_subgrid ) then - !Prepare metadata (used in Les_diachro_write calls) - ldoavg = xles_temp_mean_start /= XUNDEF .and. xles_temp_mean_end /= XUNDEF - ldonorm = trim(cles_norm_type) /= 'NONE' - - cgroup = 'Subgrid' - cgroupcomment = 'Mean vertical profiles of the subgrid fluxes, variances and covariances' - - tfield%ndims = 3 - tfield%ndimlist(1) = NMNHDIM_BUDGET_LES_LEVEL - tfield%ndimlist(2) = NMNHDIM_BUDGET_LES_TIME - tfield%ndimlist(3) = NMNHDIM_BUDGET_LES_MASK - tfield%ndimlist(4:) = NMNHDIM_UNUSED - - call Les_diachro_write( tpdiafile, XLES_SUBGRID_Tke, 'SBG_TKE', 'Subgrid TKE', 'm2 s-2', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_U2, 'SBG_U2', 'Subgrid <u2> variance', 'm2 s-2', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_V2, 'SBG_V2', 'Subgrid <v2> variance', 'm2 s-2', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_W2, 'SBG_W2', 'Subgrid <w2> variance', 'm2 s-2', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_UV, 'SBG_UV', 'Subgrid <uv> flux', 'm2 s-2', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_WU, 'SBG_WU', 'Subgrid <wu> flux', 'm2 s-2', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_WV, 'SBG_WV', 'Subgrid <wv> flux', 'm2 s-2', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_Thl2, 'SBG_THL2', 'Subgrid liquid potential temperature variance', & - 'K2', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_UThl, 'SBG_UTHL', 'Subgrid horizontal flux of liquid potential temperature', & - 'm K s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_VThl, 'SBG_VTHL', 'Subgrid horizontal flux of liquid potential temperature', & - 'm K s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_WThl, 'SBG_WTHL', 'Subgrid vertical flux of liquid potential temperature', & - 'm K s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_WP, 'SBG_WP', 'Subgrid <wp> vertical Flux', 'm Pa s-1', ymasks ) - - call Les_diachro_write( tpdiafile, XLES_SUBGRID_THLUP_MF, 'THLUP_MF', 'Subgrid <thl> of updraft', 'K', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_RTUP_MF, 'RTUP_MF', 'Subgrid <rt> of updraft', 'kg kg-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_RVUP_MF, 'RVUP_MF', 'Subgrid <rv> of updraft', 'kg kg-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_RCUP_MF, 'RCUP_MF', 'Subgrid <rc> of updraft', 'kg kg-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_RIUP_MF, 'RIUP_MF', 'Subgrid <ri> of updraft', 'kg kg-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_WUP_MF, 'WUP_MF', 'Subgrid <w> of updraft', 'm s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_MASSFLUX, 'MAFLX_MF', 'Subgrid <MF> of updraft', 'kg m-2 s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_DETR, 'DETR_MF', 'Subgrid <detr> of updraft', 'kg m-3 s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_ENTR, 'ENTR_MF', 'Subgrid <entr> of updraft', 'kg m-3 s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_FRACUP, 'FRCUP_MF', 'Subgrid <FracUp> of updraft', '1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_THVUP_MF, 'THVUP_MF', 'Subgrid <thv> of updraft', 'K', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_WTHLMF, 'WTHL_MF', 'Subgrid <wthl> of mass flux convection scheme', & - 'm K s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_WRTMF, 'WRT_MF', 'Subgrid <wrt> of mass flux convection scheme', & - 'm kg kg-1 s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_WTHVMF, 'WTHV_MF', 'Subgrid <wthv> of mass flux convection scheme', & - 'm K s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_WUMF, 'WU_MF', 'Subgrid <wu> of mass flux convection scheme', & - 'm2 s-2', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_WVMF, 'WV_MF', 'Subgrid <wv> of mass flux convection scheme', & - 'm2 s-2', ymasks ) - - call Les_diachro_write( tpdiafile, XLES_SUBGRID_PHI3, 'SBG_PHI3', 'Subgrid Phi3 function', '1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_LMix, 'SBG_LMIX', 'Subgrid Mixing Length', '1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_LDiss, 'SBG_LDIS', 'Subgrid Dissipation Length', '1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_Km, 'SBG_KM', 'Eddy diffusivity for momentum', 'm2 s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_Kh, 'SBG_KH', 'Eddy diffusivity for heat', 'm2 s-1', ymasks ) - - if ( luserv ) then - call Les_diachro_write( tpdiafile, XLES_SUBGRID_WThv, 'SBG_WTHV', 'Subgrid vertical flux of liquid potential temperature', & - 'm K s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_Rt2, 'SBG_RT2', 'Subgrid total water variance', 'kg2 kg-2', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_ThlRt, 'SBG_TLRT', 'Subgrid <thlrt> covariance', 'K kg kg-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_URt, 'SBG_URT', 'Subgrid total water horizontal flux', & - 'm kg kg-1 s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_VRt, 'SBG_VRT', 'Subgrid total water horizontal flux', & - 'm kg kg-1 s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_WRt, 'SBG_WRT', 'Subgrid total water vertical flux', & - 'm kg kg-1 s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_PSI3, 'SBG_PSI3', 'Subgrid Psi3 function', '1', ymasks ) - end if - - if ( luserc ) then - call Les_diachro_write( tpdiafile, XLES_SUBGRID_Rc2, 'SBG_RC2', 'Subgrid cloud water variance', 'kg2 kg-2', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_URc, 'SBG_URC', 'Subgrid cloud water horizontal flux', 'm kg kg-1 s-1', & - ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_VRc, 'SBG_VRC', 'Subgrid cloud water horizontal flux', 'm kg kg-1 s-1', & - ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_WRc, 'SBG_WRC', 'Subgrid cloud water vertical flux', 'm kg kg-1 s-1', & - ymasks ) - end if - - if ( nsv > 0 ) then - tfield%ndims = 4 - tfield%ndimlist(1) = NMNHDIM_BUDGET_LES_LEVEL - tfield%ndimlist(2) = NMNHDIM_BUDGET_LES_TIME - tfield%ndimlist(3) = NMNHDIM_BUDGET_LES_MASK - tfield%ndimlist(4) = NMNHDIM_BUDGET_LES_SV - tfield%ndimlist(5:) = NMNHDIM_UNUSED - - call Les_diachro_write( tpdiafile, XLES_SUBGRID_USv, 'SBG_USV', 'Subgrid <uSv> horizontal flux', 'm kg kg-1 s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_VSv, 'SBG_VSV', 'Subgrid <vSv> horizontal flux', 'm kg kg-1 s-1', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_WSv, 'SBG_WSV', 'Subgrid <wSv> vertical flux', 'm kg kg-1 s-1', ymasks ) - - tfield%ndims = 3 - !tfield%ndimlist(1) = NMNHDIM_BUDGET_LES_LEVEL - !tfield%ndimlist(2) = NMNHDIM_BUDGET_LES_TIME - !tfield%ndimlist(3) = NMNHDIM_BUDGET_LES_MASK - tfield%ndimlist(4) = NMNHDIM_UNUSED - !tfield%ndimlist(5:) = NMNHDIM_UNUSED - - - end if - - call Les_diachro_write( tpdiafile, XLES_SUBGRID_UTke, 'SBG_UTKE', 'Subgrid flux of subgrid kinetic energy', 'm3 s-3', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_VTke, 'SBG_VTKE', 'Subgrid flux of subgrid kinetic energy', 'm3 s-3', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_WTke, 'SBG_WTKE', 'Subgrid flux of subgrid kinetic energy', 'm3 s-3', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_W2Thl, 'SBG_W2TL', 'Subgrid flux of subgrid kinetic energy', 'm2 K s-2', ymasks ) - call Les_diachro_write( tpdiafile, XLES_SUBGRID_WThl2, 'SBG_WTL2', 'Subgrid flux of subgrid kinetic energy', 'm K2 s-1', ymasks ) -end if - - -!Prepare metadata (used in Les_diachro_write calls) -tfield%ndims = 2 -tfield%ndimlist(1) = NMNHDIM_BUDGET_LES_LEVEL -tfield%ndimlist(2) = NMNHDIM_BUDGET_LES_TIME -tfield%ndimlist(3:) = NMNHDIM_UNUSED - -ldoavg = xles_temp_mean_start /= XUNDEF .and. xles_temp_mean_end /= XUNDEF -ldonorm = trim(cles_norm_type) /= 'NONE' -! -!* 2.4 Updraft quantities -! ------------------ -! -if ( lles_updraft ) then - cgroup = 'Updraft' - cgroupcomment = 'Updraft vertical profiles of some resolved and subgrid fluxes, variances and covariances' - - call Les_diachro_write( tpdiafile, XLES_UPDRAFT, 'UP_FRAC', 'Updraft fraction', '1' ) - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_W, 'UP_W', 'Updraft W mean value', 'm s-1' ) - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Th, 'UP_TH', 'Updraft potential temperature mean value', 'K' ) - if ( luserc ) & - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Thl, 'UP_THL', 'Updraft liquid potential temperature mean value', 'K' ) - if ( luserv ) & - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Thv, 'UP_THV', 'Updraft virtual potential temperature mean value', 'K' ) - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Ke, 'UP_KE', 'Updraft resolved TKE mean value', 'm2 s-2' ) - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Tke, 'UP_TKE', 'Updraft subgrid TKE mean value', 'm2 s-2' ) - if ( luserv ) & - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Rv, 'UP_RV', 'Updraft water vapor mean value', 'kg kg-1' ) - if ( luserc ) & - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Rc, 'UP_RC', 'Updraft cloud water mean value', 'kg kg-1' ) - if ( luserr ) & - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Rr, 'UP_RR', 'Updraft rain mean value', 'kg kg-1' ) - if ( luseri ) & - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Ri, 'UP_RI', 'Updraft ice mean value', 'kg kg-1' ) - if ( lusers ) & - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Rs, 'UP_RS', 'Updraft snow mean value', 'kg kg-1' ) - if ( luserg ) & - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Rg, 'UP_RG', 'Updraft graupel mean value', 'kg kg-1' ) - if ( luserh ) & - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Rh, 'UP_RH', 'Updraft hail mean value', 'kg kg-1' ) - - if ( nsv > 0 ) then - tfield%ndims = 3 - tfield%ndimlist(1) = NMNHDIM_BUDGET_LES_LEVEL - tfield%ndimlist(2) = NMNHDIM_BUDGET_LES_TIME - tfield%ndimlist(3) = NMNHDIM_BUDGET_LES_SV - tfield%ndimlist(4:) = NMNHDIM_UNUSED - - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Sv, 'UP_SV', 'Updraft scalar variables mean values', 'kg kg-1' ) - - tfield%ndims = 2 - !tfield%ndimlist(1) = NMNHDIM_BUDGET_LES_LEVEL - !tfield%ndimlist(2) = NMNHDIM_BUDGET_LES_TIME - tfield%ndimlist(3) = NMNHDIM_UNUSED - !tfield%ndimlist(4:) = NMNHDIM_UNUSED - end if - - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Th2, 'UP_TH2', 'Updraft resolved Theta variance', 'K2' ) - if ( luserc ) & - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Thl2, 'UP_THL2', 'Updraft resolved Theta_l variance', 'K2' ) - if ( luserv ) & - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThThv, 'UP_THTV', 'Updraft resolved Theta Theta_v covariance', 'K2' ) - if ( luserc ) & - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThlThv, 'UP_TLTV', 'Updraft resolved Theta_l Theta_v covariance', 'K2' ) - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_WTh, 'UP_WTH', 'Updraft resolved WTh flux', 'm K s-1' ) - if ( luserc ) & - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_WThl, 'UP_WTHL', 'Updraft resolved WThl flux', 'm K s-1' ) - if ( luserv ) & - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_WThv, 'UP_WTHV', 'Updraft resolved WThv flux', 'm K s-1' ) - - if ( luserv ) then - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Rv2, 'UP_RV2', 'Updraft resolved water vapor variance', 'kg2 kg-2' ) - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThRv, 'UP_THRV', 'Updraft resolved <thrv> covariance', 'K kg kg-1' ) - if ( luserc ) & - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThlRv, 'UP_THLRV', 'Updraft resolved <thlrv> covariance', 'K kg kg-1' ) - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThvRv, 'UP_THVRV', 'Updraft resolved <thvrv> covariance', 'K kg kg-1' ) - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_WRv, 'UP_WRV', 'Updraft resolved <wrv> vertical flux', 'm kg kg-1 s-1' ) - end if - - if ( luserc ) then - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Rc2, 'UP_RC2', 'Updraft resolved cloud water variance', 'kg2 kg-2' ) - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThRc, 'UP_THRC', 'Updraft resolved <thrc> covariance', 'K kg kg-1' ) - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThlRc, 'UP_THLRC', 'Updraft resolved <thlrc> covariance', 'K kg kg-1' ) - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThvRc, 'UP_THVRC', 'Updraft resolved <thvrc> covariance', 'K kg kg-1' ) - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_WRc, 'UP_WRC', 'Updraft resolved <wrc> vertical flux', 'm kg kg-1 s-1' ) - end if - - if ( luseri ) then - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Ri2, 'UP_RI2', 'Updraft resolved cloud ice variance', 'kg2 kg-2' ) - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThRi, 'UP_THRI', 'Updraft resolved <thri> covariance', 'K kg kg-1' ) - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThlRi, 'UP_THLRI', 'Updraft resolved <thlri> covariance', 'K kg kg-1' ) - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThvRi, 'UP_THVRI', 'Updraft resolved <thvri> covariance', 'K kg kg-1' ) - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_WRi, 'UP_WRI', 'Updraft resolved <wri> vertical flux', 'm kg kg-1 s-1' ) - end if - - - if ( nsv > 0 ) then - tfield%ndims = 3 - tfield%ndimlist(1) = NMNHDIM_BUDGET_LES_LEVEL - tfield%ndimlist(2) = NMNHDIM_BUDGET_LES_TIME - tfield%ndimlist(3) = NMNHDIM_BUDGET_LES_SV - tfield%ndimlist(4:) = NMNHDIM_UNUSED - - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Sv2, 'UP_SV2', 'Updraft resolved scalar variables variances', 'kg2 kg-2' ) - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThSv, 'UP_THSV', 'Updraft resolved <ThSv> variance', 'K kg kg-1' ) - if ( luserc ) & - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThlSv, 'UP_THLSV', 'Updraft resolved <ThlSv> variance', 'K kg kg-1' ) - if ( luserv ) & - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_ThvSv, 'UP_THVSV', 'Updraft resolved <ThvSv> variance', 'K kg kg-1' ) - call Les_diachro_write( tpdiafile, XLES_UPDRAFT_WSv, 'UP_WSV', 'Updraft resolved <wSv> vertical flux', 'm kg kg-1 s-1' ) - - tfield%ndims = 2 - !tfield%ndimlist(1) = NMNHDIM_BUDGET_LES_LEVEL - !tfield%ndimlist(2) = NMNHDIM_BUDGET_LES_TIME - tfield%ndimlist(3) = NMNHDIM_UNUSED - !tfield%ndimlist(4:) = NMNHDIM_UNUSED - end if -end if -! -! -!* 2.5 Downdraft quantities -! -------------------- -! -if ( lles_downdraft ) then - cgroup = 'Downdraft' - cgroupcomment = 'Downdraft vertical profiles of some resolved and subgrid fluxes, variances and covariances' - - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT, 'DW_FRAC', 'Downdraft fraction', '1' ) - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_W, 'DW_W', 'Downdraft W mean value', 'm s-1' ) - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Th, 'DW_TH', 'Downdraft potential temperature mean value', 'K' ) - if ( luserc ) & - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Thl, 'DW_THL', 'Downdraft liquid potential temperature mean value', 'K' ) - if ( luserv ) & - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Thv, 'DW_THV', 'Downdraft virtual potential temperature mean value', 'K' ) - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Ke, 'DW_KE', 'Downdraft resolved TKE mean value', 'm2 s-2' ) - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Tke, 'DW_TKE', 'Downdraft subgrid TKE mean value', 'm2 s-2' ) - if ( luserv ) & - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Rv, 'DW_RV', 'Downdraft water vapor mean value', 'kg kg-1' ) - if ( luserc ) & - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Rc, 'DW_RC', 'Downdraft cloud water mean value', 'kg kg-1' ) - if ( luserr ) & - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Rr, 'DW_RR', 'Downdraft rain mean value', 'kg kg-1' ) - if ( luseri ) & - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Ri, 'DW_RI', 'Downdraft ice mean value', 'kg kg-1' ) - if ( lusers ) & - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Rs, 'DW_RS', 'Downdraft snow mean value', 'kg kg-1' ) - if ( luserg ) & - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Rg, 'DW_RG', 'Downdraft graupel mean value', 'kg kg-1' ) - if ( luserh ) & - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Rh, 'DW_RH', 'Downdraft hail mean value', 'kg kg-1' ) - - if ( nsv > 0 ) then - tfield%ndims = 3 - tfield%ndimlist(1) = NMNHDIM_BUDGET_LES_LEVEL - tfield%ndimlist(2) = NMNHDIM_BUDGET_LES_TIME - tfield%ndimlist(3) = NMNHDIM_BUDGET_LES_SV - tfield%ndimlist(4:) = NMNHDIM_UNUSED - - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Sv, 'DW_SV', 'Downdraft scalar variables mean values', 'kg kg-1' ) - - tfield%ndims = 2 - !tfield%ndimlist(1) = NMNHDIM_BUDGET_LES_LEVEL - !tfield%ndimlist(2) = NMNHDIM_BUDGET_LES_TIME - tfield%ndimlist(3) = NMNHDIM_UNUSED - !tfield%ndimlist(4:) = NMNHDIM_UNUSED - end if - - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Th2, 'DW_TH2', 'Downdraft resolved Theta variance', 'K2' ) - if ( luserc ) & - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Thl2, 'DW_THL2', 'Downdraft resolved Theta_l variance', 'K2' ) - if ( luserv ) & - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThThv, 'DW_THTV', 'Downdraft resolved Theta Theta_v covariance', 'K2' ) - if ( luserc ) & - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThlThv, 'DW_TLTV', 'Downdraft resolved Theta_l Theta_v covariance', 'K2' ) - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_WTh, 'DW_WTH', 'Downdraft resolved WTh flux', 'm K s-1' ) - if ( luserc ) & - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_WThl, 'DW_WTHL', 'Downdraft resolved WThl flux', 'm K s-1' ) - if ( luserv ) & - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_WThv, 'DW_WTHV', 'Downdraft resolved WThv flux', 'm K s-1' ) - - if ( luserv ) then - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Rv2, 'DW_RV2', 'Downdraft resolved water vapor variance', 'kg2 kg-2' ) - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThRv, 'DW_THRV', 'Downdraft resolved <thrv> covariance', 'K kg kg-1' ) - if ( luserc ) & - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThlRv, 'DW_THLRV', 'Downdraft resolved <thlrv> covariance', 'K kg kg-1' ) - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThvRv, 'DW_THVRV', 'Downdraft resolved <thvrv> covariance', 'K kg kg-1' ) - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_WRv, 'DW_WRV', 'Downdraft resolved <wrv> vertical flux', & - 'm kg kg-1 s-1' ) - end if - - if ( luserc ) then - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Rc2, 'DW_RC2', 'Downdraft resolved cloud water variance', 'kg2 kg-2' ) - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThRc, 'DW_THRC', 'Downdraft resolved <thrc> covariance', 'K kg kg-1' ) - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThlRc, 'DW_THLRC', 'Downdraft resolved <thlrc> covariance', 'K kg kg-1' ) - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThvRc, 'DW_THVRC', 'Downdraft resolved <thvrc> covariance', 'K kg kg-1' ) - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_WRc, 'DW_WRC', 'Downdraft resolved <wrc> vertical flux', & - 'm kg kg-1 s-1' ) - end if - - if ( luseri ) then - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Ri2, 'DW_RI2', 'Downdraft resolved cloud ice variance', 'kg2 kg-2' ) - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThRi, 'DW_THRI', 'Downdraft resolved <thri> covariance', 'K kg kg-1' ) - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThlRi, 'DW_THLRI', 'Downdraft resolved <thlri> covariance', 'K kg kg-1' ) - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThvRi, 'DW_THVRI', 'Downdraft resolved <thvri> covariance', 'K kg kg-1' ) - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_WRi, 'DW_WRI', 'Downdraft resolved <wri> vertical flux', & - 'm kg kg-1 s-1' ) - end if - - - if ( nsv > 0 ) then - tfield%ndims = 3 - tfield%ndimlist(1) = NMNHDIM_BUDGET_LES_LEVEL - tfield%ndimlist(2) = NMNHDIM_BUDGET_LES_TIME - tfield%ndimlist(3) = NMNHDIM_BUDGET_LES_SV - tfield%ndimlist(4:) = NMNHDIM_UNUSED - - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Sv2, 'DW_SV2', 'Downdraft resolved scalar variables variances', & - 'kg2 kg-2' ) - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThSv, 'DW_THSV', 'Downdraft resolved <ThSv> variance', & - 'K kg kg-1' ) - if ( luserc ) & - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThlSv, 'DW_THLSV', 'Downdraft resolved <ThlSv> variance', & - 'K kg kg-1' ) - if ( luserv ) & - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_ThvSv, 'DW_THVSV', 'Downdraft resolved <ThvSv> variance', & - 'K kg kg-1' ) - call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_WSv, 'DW_WSV', 'Downdraft resolved <wSv> vertical flux', & - 'm kg kg-1 s-1' ) - - tfield%ndims = 2 - !tfield%ndimlist(1) = NMNHDIM_BUDGET_LES_LEVEL - !tfield%ndimlist(2) = NMNHDIM_BUDGET_LES_TIME - tfield%ndimlist(3) = NMNHDIM_UNUSED - !tfield%ndimlist(4:) = NMNHDIM_UNUSED - end if -end if -! -!------------------------------------------------------------------------------- -! -!* 3. surface normalization parameters -! -------------------------------- -! -cgroup = 'Radiation' -cgroupcomment = 'Radiative terms' - -!Prepare metadata (used in Les_diachro_write calls) -tfield%ndims = 2 -tfield%ndimlist(1) = NMNHDIM_BUDGET_LES_LEVEL -tfield%ndimlist(2) = NMNHDIM_BUDGET_LES_TIME -tfield%ndimlist(3:) = NMNHDIM_UNUSED - -ldoavg = xles_temp_mean_start /= XUNDEF .and. xles_temp_mean_end /= XUNDEF -ldonorm = .false. - -call Les_diachro_write( tpdiafile, XLES_SWU, 'SWU', 'SW upward radiative flux', 'W m-2' ) -call Les_diachro_write( tpdiafile, XLES_SWD, 'SWD', 'SW downward radiative flux', 'W m-2' ) -call Les_diachro_write( tpdiafile, XLES_LWU, 'LWU', 'LW upward radiative flux', 'W m-2' ) -call Les_diachro_write( tpdiafile, XLES_LWD, 'LWD', 'LW downward radiative flux', 'W m-2' ) -call Les_diachro_write( tpdiafile, XLES_DTHRADSW, 'DTHRADSW', 'SW radiative temperature tendency', 'K s-1' ) -call Les_diachro_write( tpdiafile, XLES_DTHRADLW, 'DTHRADLW', 'LW radiative temperature tendency', 'K s-1' ) -!writes mean_effective radius at all levels -call Les_diachro_write( tpdiafile, XLES_RADEFF, 'RADEFF', 'Mean effective radius', 'micron' ) - - -cgroup = 'Surface' -cgroupcomment = 'Averaged surface fields' - -! !Prepare metadate (used in Les_diachro_write calls) -tfield%ndims = 1 -tfield%ndimlist(1) = NMNHDIM_BUDGET_LES_TIME -tfield%ndimlist(2:) = NMNHDIM_UNUSED - -call Les_diachro_write( tpdiafile, XLES_Q0, 'Q0', 'Sensible heat flux at the surface', 'm K s-1' ) -if ( luserv ) & -call Les_diachro_write( tpdiafile, XLES_E0, 'E0', 'Latent heat flux at the surface', 'kg kg-1 m s-1' ) - -if ( nsv > 0 ) then - tfield%ndims = 2 - tfield%ndimlist(1) = NMNHDIM_BUDGET_LES_TIME - tfield%ndimlist(2) = NMNHDIM_BUDGET_LES_SV - tfield%ndimlist(3:) = NMNHDIM_UNUSED - - call Les_diachro_write( tpdiafile, XLES_SV0, 'SV0', 'Scalar variable fluxes at the surface', 'kg kg-1 m s-1' ) - - tfield%ndims = 1 - !tfield%ndimlist(1) = NMNHDIM_BUDGET_LES_TIME - tfield%ndimlist(2) = NMNHDIM_UNUSED - !tfield%ndimlist(3:) = NMNHDIM_UNUSED -end if - -call Les_diachro_write( tpdiafile, XLES_USTAR, 'Ustar', 'Friction velocity', 'm s-1' ) -call Les_diachro_write( tpdiafile, XLES_WSTAR, 'Wstar', 'Convective velocity', 'm s-1' ) -call Les_diachro_write( tpdiafile, XLES_MO_LENGTH, 'L_MO', 'Monin-Obukhov length', 'm' ) -if ( luserr ) & -call Les_diachro_write( tpdiafile, XLES_PRECFR, 'PREC_FRAC', 'Fraction of columns where rain at surface', '1' ) -if ( luserr ) & -call Les_diachro_write( tpdiafile, XLES_INPRR, 'INST_PREC', 'Instantaneous precipitation rate', 'mm day-1' ) -if ( luserc ) & -call Les_diachro_write( tpdiafile, XLES_INPRC, 'INST_SEDIM', 'Instantaneous cloud precipitation rate', 'mm day-1' ) -if ( luserc .and. ( ldeposc .or. ldepoc ) ) & -call Les_diachro_write( tpdiafile, XLES_INDEP, 'INST_DEPOS', 'Instantaneous cloud deposition rate', 'mm day-1' ) -if ( luserr ) & -call Les_diachro_write( tpdiafile, XLES_RAIN_INPRR, 'RAIN_PREC', 'Instantaneous precipitation rate over rainy grid cells', & - 'mm day-1' ) -if ( luserr ) & -call Les_diachro_write( tpdiafile, XLES_ACPRR, 'ACCU_PREC', 'Accumulated precipitation rate', 'mm' ) - - -cgroup = 'Miscellaneous' -cgroupcomment = 'Miscellaneous terms (geometry, various unclassified averaged terms...)' - -call Les_diachro_write( tpdiafile, XLES_BL_HEIGHT, 'BL_H', 'Boundary Layer Height', 'm' ) -call Les_diachro_write( tpdiafile, XLES_INT_TKE, 'INT_TKE', 'Vertical integrated TKE', 'm2 s-2' ) -if ( luserc ) & -call Les_diachro_write( tpdiafile, XLES_ZCB, 'ZCB', 'Cloud base Height', 'm' ) -if ( luserc ) & -call Les_diachro_write( tpdiafile, XLES_CFtot, 'ZCFTOT', 'Total cloud cover (rc>1e-6)', '1' ) -if ( luserc ) & -call Les_diachro_write( tpdiafile, XLES_CF2tot, 'ZCF2TOT', 'Total cloud cover (rc>1e-5)', '1' ) -if ( luserc ) & -call Les_diachro_write( tpdiafile, XLES_LWP, 'LWP', 'Liquid Water path', 'kg m-2' ) -if ( luserc ) & -call Les_diachro_write( tpdiafile, XLES_LWPVAR, 'LWPVAR', 'Liquid Water path variance', 'kg m-4' ) -if ( luserr ) & -call Les_diachro_write( tpdiafile, XLES_RWP, 'RWP', 'Rain Water path', 'kg m-2' ) -if ( luseri ) & -call Les_diachro_write( tpdiafile, XLES_IWP, 'IWP', 'Ice Water path', 'kg m-2' ) -if ( lusers ) & -call Les_diachro_write( tpdiafile, XLES_SWP, 'SWP', 'Snow Water path', 'kg m-2' ) -if ( luserg ) & -call Les_diachro_write( tpdiafile, XLES_GWP, 'GWP', 'Graupel Water path', 'kg m-2' ) -if ( luserh ) & -call Les_diachro_write( tpdiafile, XLES_HWP, 'HWP', 'Hail Water path', 'kg m-2' ) -if ( luserc ) & -call Les_diachro_write( tpdiafile, XLES_ZMAXCF, 'ZMAXCF', 'Height of Cloud fraction maximum (rc>1e-6)', 'm' ) -if ( luserc ) & -call Les_diachro_write( tpdiafile, XLES_ZMAXCF2, 'ZMAXCF2', 'Height of Cloud fraction maximum (rc>1e-5)', 'm' ) - -!------------------------------------------------------------------------------- -! -!* 4. LES budgets -! ----------- -! -call Write_les_budget_n( tpdiafile ) - -if ( luserv ) call Write_les_rt_budget_n( tpdiafile ) - -if ( nsv > 0 ) call Write_les_sv_budget_n( tpdiafile ) -! -!------------------------------------------------------------------------------- -! -!* 5. (ni,z,t) and (nj,z,t) 2points correlations -! ------------------------------------------ -! -if ( nspectra_k > 0 ) then - tfieldx%cstdname = '' - tfieldx%ngrid = 0 !Not on the Arakawa grid - tfieldx%ntype = TYPEREAL - tfieldx%ndims = 3 - tfieldx%ndimlist(1) = NMNHDIM_SPECTRA_2PTS_NI - tfieldx%ndimlist(2) = NMNHDIM_SPECTRA_LEVEL - tfieldx%ndimlist(3) = NMNHDIM_BUDGET_LES_TIME - tfieldx%ndimlist(4:) = NMNHDIM_UNUSED - - tfieldy%cstdname = '' - tfieldy%ngrid = 0 !Not on the Arakawa grid - tfieldy%ntype = TYPEREAL - tfieldy%ndims = 3 - tfieldy%ndimlist(1) = NMNHDIM_SPECTRA_2PTS_NJ - tfieldy%ndimlist(2) = NMNHDIM_SPECTRA_LEVEL - tfieldy%ndimlist(3) = NMNHDIM_BUDGET_LES_TIME - tfieldy%ndimlist(4:) = NMNHDIM_UNUSED - - call Les_diachro_2pt_write( tpdiafile, XCORRi_UU, XCORRj_UU, 'UU', 'U*U 2 points correlations', 'm2 s-2' ) - call Les_diachro_2pt_write( tpdiafile, XCORRi_VV, XCORRj_VV, 'VV', 'V*V 2 points correlations', 'm2 s-2' ) - call Les_diachro_2pt_write( tpdiafile, XCORRi_WW, XCORRj_WW, 'WW', 'W*W 2 points correlations', 'm2 s-2' ) - call Les_diachro_2pt_write( tpdiafile, XCORRi_UV, XCORRj_UV, 'UV', 'U*V 2 points correlations', 'm2 s-2' ) - call Les_diachro_2pt_write( tpdiafile, XCORRi_WU, XCORRj_WU, 'WU', 'W*U 2 points correlations', 'm2 s-2' ) - call Les_diachro_2pt_write( tpdiafile, XCORRi_WV, XCORRj_WV, 'WV', 'W*V 2 points correlations', 'm2 s-2' ) - - call Les_diachro_2pt_write( tpdiafile, XCORRi_ThTh, XCORRj_ThTh, 'THTH', 'Th*Th 2 points correlations', 'K2' ) - if ( luserc ) & - call Les_diachro_2pt_write( tpdiafile, XCORRi_ThlThl, XCORRj_ThlThl, 'TLTL', 'Thl*Thl 2 points correlations', 'K2' ) - call Les_diachro_2pt_write( tpdiafile, XCORRi_WTh, XCORRj_WTh, 'WTH', 'W*Th 2 points correlations', 'm K s-1' ) - if ( luserc ) & - call Les_diachro_2pt_write( tpdiafile, XCORRi_WThl, XCORRj_WThl, 'WTHL', 'W*Thl 2 points correlations', 'm K s-1' ) - - if ( luserv ) then - call Les_diachro_2pt_write( tpdiafile, XCORRi_RvRv, XCORRj_RvRv, 'RVRV', 'rv*rv 2 points correlations', 'kg2 kg-2' ) - call Les_diachro_2pt_write( tpdiafile, XCORRi_ThRv, XCORRj_ThRv, 'THRV', 'TH*RV 2 points correlations', 'K kg kg-1' ) - if ( luserc ) & - call Les_diachro_2pt_write( tpdiafile, XCORRi_ThlRv, XCORRj_ThlRv, 'TLRV', 'thl*rv 2 points correlations', 'K kg kg-1' ) - call Les_diachro_2pt_write( tpdiafile, XCORRi_WRv, XCORRj_WRv, 'WRV', 'W*rv 2 points correlations', 'm kg s-1 kg-1' ) - end if - - if ( luserc ) then - call Les_diachro_2pt_write( tpdiafile, XCORRi_RcRc, XCORRj_RcRc, 'RCRC', 'rc*rc 2 points correlations', 'kg2 kg-2' ) - call Les_diachro_2pt_write( tpdiafile, XCORRi_ThRc, XCORRj_ThRc, 'THRC', 'th*rc 2 points correlations', 'K kg kg-1' ) - call Les_diachro_2pt_write( tpdiafile, XCORRi_ThlRc, XCORRj_ThlRc, 'TLRC', 'thl*rc 2 points correlations', 'K kg kg-1' ) - call Les_diachro_2pt_write( tpdiafile, XCORRi_WRc, XCORRj_WRc, 'WRC', 'W*rc 2 points correlations', 'm kg s-1 kg-1' ) - end if - - if ( luseri ) then - call Les_diachro_2pt_write( tpdiafile, XCORRi_RiRi, XCORRj_RiRi, 'RIRI', 'ri*ri 2 points correlations', 'kg2 kg-2' ) - call Les_diachro_2pt_write( tpdiafile, XCORRi_ThRi, XCORRj_ThRi, 'THRI', 'th*ri 2 points correlations', 'K kg kg-1' ) - call Les_diachro_2pt_write( tpdiafile, XCORRi_ThlRi, XCORRj_ThlRi, 'TLRI', 'thl*ri 2 points correlations', 'K kg kg-1' ) - call Les_diachro_2pt_write( tpdiafile, XCORRi_WRi, XCORRj_WRi, 'WRI', 'W*ri 2 points correlations', 'm kg s-1 kg-1' ) - end if - -!PW: TODO: ameliorer le ygroup (tenir compte de ce qu'est la variable scalaire et pas juste son jsv!) - do jsv = 1, nsv - Write( ygroup, fmt = "( a2, i3.3 )" ) "SS", jsv - call Les_diachro_2pt_write( tpdiafile, XCORRi_SvSv(:,:,:,JSV), XCORRj_SvSv(:,:,:,JSV), ygroup, & - 'Sv*Sv 2 points correlations','kg2 kg-2' ) - end do - -!PW: TODO: ameliorer le ygroup (tenir compte de ce qu'est la variable scalaire et pas juste son jsv!) - do jsv = 1, nsv - Write( ygroup, fmt = "( a2, i3.3 )" ) "WS", jsv - call Les_diachro_2pt_write( tpdiafile, XCORRi_WSv(:,:,:,JSV), XCORRj_WSv(:,:,:,JSV), ygroup, & - 'W*Sv 2 points correlations','m kg s-1 kg-1' ) - end do -end if -! -!------------------------------------------------------------------------------- -! -!* 6. spectra and time-averaged profiles (if first call to WRITE_LES_n) -! ---------------------------------- -! -call Les_spec_n( tpdiafile ) -! -!------------------------------------------------------------------------------- -! -!* 7. deallocations -! ------------- -! -CALL LES_DEALLOCATE('XLES_CURRENT_Z') - -IF (CLES_NORM_TYPE/='NONE' ) THEN - CALL LES_DEALLOCATE('XLES_NORM_M') - CALL LES_DEALLOCATE('XLES_NORM_S') - CALL LES_DEALLOCATE('XLES_NORM_K') - CALL LES_DEALLOCATE('XLES_NORM_RHO') - CALL LES_DEALLOCATE('XLES_NORM_RV') - CALL LES_DEALLOCATE('XLES_NORM_SV') - CALL LES_DEALLOCATE('XLES_NORM_P') -END IF - -end subroutine Write_les_n - -!------------------------------------------------------------------------------ - -subroutine Les_diachro_write_1D( tpdiafile, pdata, hmnhname, hcomment, hunits ) - -use modd_io, only: tfiledata - -use mode_les_diachro, only: Les_diachro - -type(tfiledata), intent(in) :: tpdiafile ! file to write -real, dimension(:), intent(in) :: pdata -character(len=*), intent(in) :: hmnhname -character(len=*), intent(in) :: hcomment -character(len=*), intent(in) :: hunits - -tfield%cmnhname = hmnhname -tfield%clongname = hmnhname -tfield%ccomment = hcomment -tfield%cunits = hunits - -call Les_diachro( tpdiafile, tfield, cgroup, cgroupcomment, ldoavg, ldonorm, pdata ) - -end subroutine Les_diachro_write_1D - -!------------------------------------------------------------------------------ - -subroutine Les_diachro_write_2D( tpdiafile, pdata, hmnhname, hcomment, hunits ) - -use modd_io, only: tfiledata - -use mode_les_diachro, only: Les_diachro - -type(tfiledata), intent(in) :: tpdiafile ! file to write -real, dimension(:,:), intent(in) :: pdata -character(len=*), intent(in) :: hmnhname -character(len=*), intent(in) :: hcomment -character(len=*), intent(in) :: hunits - -tfield%cmnhname = hmnhname -tfield%clongname = hmnhname -tfield%ccomment = hcomment -tfield%cunits = hunits - -call Les_diachro( tpdiafile, tfield, cgroup, cgroupcomment, ldoavg, ldonorm, pdata ) - -end subroutine Les_diachro_write_2D - -!------------------------------------------------------------------------------ - -subroutine Les_diachro_write_3D( tpdiafile, pdata, hmnhname, hcomment, hunits, hmasks ) - -use modd_io, only: tfiledata - -use mode_les_diachro, only: Les_diachro - -type(tfiledata), intent(in) :: tpdiafile ! file to write -real, dimension(:,:,:), intent(in) :: pdata -character(len=*), intent(in) :: hmnhname -character(len=*), intent(in) :: hcomment -character(len=*), intent(in) :: hunits -character(len=*), dimension(:), optional, intent(in) :: hmasks - -tfield%cmnhname = hmnhname -tfield%clongname = hmnhname -tfield%ccomment = hcomment -tfield%cunits = hunits - -call Les_diachro( tpdiafile, tfield, cgroup, cgroupcomment, ldoavg, ldonorm, pdata, hmasks = hmasks ) - -end subroutine Les_diachro_write_3D - -!------------------------------------------------------------------------------ - -subroutine Les_diachro_write_4D( tpdiafile, pdata, hmnhname, hcomment, hunits, hmasks ) - -use modd_io, only: tfiledata - -use mode_les_diachro, only: Les_diachro - -type(tfiledata), intent(in) :: tpdiafile ! file to write -real, dimension(:,:,:,:), intent(in) :: pdata -character(len=*), intent(in) :: hmnhname -character(len=*), intent(in) :: hcomment -character(len=*), intent(in) :: hunits -character(len=*), dimension(:), optional, intent(in) :: hmasks - -tfield%cmnhname = hmnhname -tfield%clongname = hmnhname -tfield%ccomment = hcomment -tfield%cunits = hunits - -call Les_diachro( tpdiafile, tfield, cgroup, cgroupcomment, ldoavg, ldonorm, pdata, hmasks = hmasks ) - -end subroutine Les_diachro_write_4D - -!------------------------------------------------------------------------------ - -subroutine Les_diachro_2pt_write( tpdiafile, zcorri, zcorrj, hmnhname, hcomment, hunits ) - -use modd_io, only: tfiledata - -use mode_les_diachro, only: Les_diachro_2pt - -type(tfiledata), intent(in) :: tpdiafile ! file to write -real, dimension(:,:,:), intent(in) :: zcorri ! 2 pts correlation data -real, dimension(:,:,:), intent(in) :: zcorrj ! 2 pts correlation data -character(len=*), intent(in) :: hmnhname -character(len=*), intent(in) :: hcomment -character(len=*), intent(in) :: hunits - -tfieldx%cmnhname = hmnhname -tfieldx%clongname = hmnhname -tfieldx%ccomment = hcomment -tfieldx%cunits = hunits - -tfieldy%cmnhname = hmnhname -tfieldy%clongname = hmnhname -tfieldy%ccomment = hcomment -tfieldy%cunits = hunits - -call Les_diachro_2pt( tpdiafile, tfieldx, tfieldy, zcorri, zcorrj ) - -end subroutine Les_diachro_2pt_write - -!------------------------------------------------------------------------------ - -end module mode_write_les_n -- GitLab