diff --git a/src/common/aux/modd_nsv.f90 b/src/common/aux/modd_nsv.f90 index 569539c404333b7b908e980a62d9c995894a2688..9cfa343c413e3b78171c89590cf04432585986fc 100644 --- a/src/common/aux/modd_nsv.f90 +++ b/src/common/aux/modd_nsv.f90 @@ -28,30 +28,35 @@ !! Pialat/Tulet 15/02/12 add ForeFire !! Modification 01/2016 (JP Pinty) Add LIMA !! V. Vionnet 07/17 add blowing snow -! P. Wautelet 10/03/2021: add CSVNAMES and CSVNAMES_A to store the name of all the scalar variables ! B. Vie 06/2021: add prognostic supersaturation for LIMA +! P. Wautelet 26/11/2021: add TSVLIST and TSVLIST_A to store the metadata of all the scalar variables ! A. Costes 12/2021: add Blaze fire model smoke -! +! P. Wautelet 14/01/2022: add CSV_CHEM_LIST(_A) to store the list of all chemical variables +! + NSV_CHEM_LIST(_A) the size of the list !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! -USE MODD_PARAMETERS, ONLY : JPMODELMAX, & ! Maximum allowed number of nested models - JPSVMAX, & ! Maximum number of scalar variables - JPSVNAMELGTMAX ! Maximum length of a scalar variable name +USE MODD_FIELD, ONLY: tfieldmetadata +USE MODD_PARAMETERS, ONLY: JPMODELMAX, & ! Maximum allowed number of nested models + JPSVMAX, & ! Maximum number of scalar variables + JPSVNAMELGTMAX, & ! Maximum length of a scalar variable name + NMNHNAMELGTMAX ! IMPLICIT NONE SAVE ! REAL,DIMENSION(JPSVMAX) :: XSVMIN ! minimum value for SV variables ! -LOGICAL :: LINI_NSV = .FALSE. ! becomes True when routine INI_NSV is called +LOGICAL :: LINI_NSV(JPMODELMAX) = .FALSE. ! becomes True when routine INI_NSV is called ! -CHARACTER(LEN=JPSVNAMELGTMAX), DIMENSION(:,:), ALLOCATABLE, TARGET :: CSVNAMES_A !Names of all the scalar variables +CHARACTER(LEN=NMNHNAMELGTMAX), DIMENSION(:,:), ALLOCATABLE, TARGET :: CSV_CHEM_LIST_A !Names of all the chemical variables +TYPE(tfieldmetadata), DIMENSION(:,:), ALLOCATABLE, TARGET :: TSVLIST_A !Metadata of all the scalar variables INTEGER,DIMENSION(JPMODELMAX)::NSV_A = 0 ! total number of scalar variables ! NSV_A = NSV_USER_A+NSV_C2R2_A+NSV_CHEM_A+.. +INTEGER,DIMENSION(JPMODELMAX)::NSV_CHEM_LIST_A = 0 ! total number of chemical variables (including dust, salt...) INTEGER,DIMENSION(JPMODELMAX)::NSV_USER_A = 0 ! number of user scalar variables with ! indices in the range : 1...NSV_USER_A ! @@ -90,7 +95,7 @@ INTEGER,DIMENSION(JPMODELMAX)::NSV_LGEND_A = 0 ! NSV_LGBEG_A...NSV_LGEND_A ! INTEGER,DIMENSION(JPMODELMAX)::NSV_LNOX_A = 0 ! number of lightning NOx INTEGER,DIMENSION(JPMODELMAX)::NSV_LNOXBEG_A = 0 ! with indices in the range : -INTEGER,DIMENSION(JPMODELMAX)::NSV_LNOXEND_A = 0 ! NSV_LNOXBEG_A...NSV_LNOXEND_A ! +INTEGER,DIMENSION(JPMODELMAX)::NSV_LNOXEND_A = 0 ! NSV_LNOXBEG_A...NSV_LNOXEND_A INTEGER,DIMENSION(JPMODELMAX)::NSV_DST_A = 0 ! number of dust scalar INTEGER,DIMENSION(JPMODELMAX)::NSV_DSTBEG_A = 0 ! with indices in the range : INTEGER,DIMENSION(JPMODELMAX)::NSV_DSTEND_A = 0 ! NSV_DSTBEG_A...NSV_DSTEND_A @@ -145,6 +150,7 @@ INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_SPRO_A = 0 ! Supersaturation INTEGER,DIMENSION(JPMODELMAX)::NSV_FF_A = 0 ! number of ForeFire scalar variables INTEGER,DIMENSION(JPMODELMAX)::NSV_FFBEG_A = 0 ! with indices in the range : INTEGER,DIMENSION(JPMODELMAX)::NSV_FFEND_A = 0 ! NSV_FFBEG_A...NSV_FFEND_A +! #endif ! Blaze smoke indexes INTEGER,DIMENSION(JPMODELMAX)::NSV_FIRE_A = 0 ! number of Blaze smoke scalar variables @@ -159,10 +165,15 @@ INTEGER,DIMENSION(JPMODELMAX)::NSV_SNWEND_A = 0 ! NSV_SNWBEG_A...NSV_SNWEND_A ! ! variables updated for the current model ! -CHARACTER(LEN=JPSVNAMELGTMAX), DIMENSION(:), POINTER :: CSVNAMES !Names of all the scalar variables +CHARACTER(LEN=NMNHNAMELGTMAX), DIMENSION(:), POINTER :: CSV_CHEM_LIST !Names of all the chemical variables +TYPE(tfieldmetadata), DIMENSION(:), POINTER :: TSVLIST !Metadata of all the scalar variables + CHARACTER(LEN=6), DIMENSION(:), ALLOCATABLE :: CSV ! name of the scalar variables + INTEGER :: NSV = 0 ! total number of user scalar variables ! +INTEGER :: NSV_CHEM_LIST = 0 ! total number of chemical variables (including dust, salt...) +! INTEGER :: NSV_USER = 0 ! number of user scalar variables with indices ! in the range : 1...NSV_USER INTEGER :: NSV_C2R2 = 0 ! number of liq scalar used in C2R2 and in C3R5 @@ -255,6 +266,7 @@ INTEGER :: NSV_LIMA_SPRO ! INTEGER :: NSV_FF = 0 ! number of ForeFire scalar variables INTEGER :: NSV_FFBEG = 0 ! with indices in the range : INTEGER :: NSV_FFEND = 0 ! NSV_FFBEG...NSV_FFEND +! #endif ! Blaze smoke INTEGER :: NSV_FIRE = 0 ! number of Blaze smoke scalar variables diff --git a/src/common/micro/ini_lima_cold_mixed.F90 b/src/common/micro/ini_lima_cold_mixed.F90 index 86fe95eaacde80b550227a17344e3bb7070aaeec..12fca326bcaa6f7a708376d180894b31f96662d0 100644 --- a/src/common/micro/ini_lima_cold_mixed.F90 +++ b/src/common/micro/ini_lima_cold_mixed.F90 @@ -154,7 +154,7 @@ REAL :: ZRHOIW ! ice density !* 1. CHARACTERISTICS OF THE SPECIES ! ------------------------------ ! -CALL RAIN_ICE_PARAM_ASSOCIATE() +!CALL RAIN_ICE_PARAM_ASSOCIATE() ! !* 1.2 Ice crystal characteristics ! diff --git a/src/common/micro/lima_adjust_split.F90 b/src/common/micro/lima_adjust_split.F90 index 4466132f20e4d641be439f29b0473e5cef456998..e4d3ce84b52cfc42370c6b5b18ad619b9a4550d2 100644 --- a/src/common/micro/lima_adjust_split.F90 +++ b/src/common/micro/lima_adjust_split.F90 @@ -296,8 +296,8 @@ REAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) & ZRI, ZRI_IN, & Z_SIGS, Z_SRCS, & ZW_MF, & - ZCND, ZS, ZVEC1 -REAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,3)) :: ZSIGQSAT2D, ZDUM + ZCND, ZS, ZVEC1, ZDUM +REAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2)) :: ZSIGQSAT2D ! INTEGER, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) :: IVEC1 ! diff --git a/src/mesonh/ext/boundaries.f90 b/src/mesonh/ext/boundaries.f90 index c74bce92f9e92c7c8ab278ff7d74f2e085446928..111dbc701d5c112ccc4d00cbf6331afb089f129c 100644 --- a/src/mesonh/ext/boundaries.f90 +++ b/src/mesonh/ext/boundaries.f90 @@ -199,6 +199,7 @@ USE MODD_PARAMETERS USE MODD_PARAM_LIMA, ONLY : NMOD_CCN, NMOD_IFN, LBOUND USE MODD_PARAM_n, ONLY : CELEC,CCLOUD USE MODD_PASPOL, ONLY : LPASPOL +USE MODD_PRECISION, ONLY: MNHREAL32 USE MODD_REF_n USE MODD_SALT, ONLY : LSALT @@ -420,6 +421,24 @@ ELSE ! END IF ! +! ============================================================ +! +! Reproductibility for RSTART -> truncate ZLB to real(knd=4) to have reproductible result +! +ZLBXVT(:,:,:) = real(ZLBXVT(:,:,:),kind=MNHREAL32) +ZLBXWT(:,:,:) = real(ZLBXWT(:,:,:),kind=MNHREAL32) +ZLBXTHT(:,:,:) = real(ZLBXTHT(:,:,:),kind=MNHREAL32) +IF ( SIZE(PTKET,1) /= 0 ) THEN + ZLBXTKET(:,:,:) = real(ZLBXTKET(:,:,:),kind=MNHREAL32) +END IF +IF ( KRR > 0) THEN + ZLBXRT(:,:,:,:) = real(ZLBXRT(:,:,:,:),kind=MNHREAL32) +END IF +IF ( KSV > 0) THEN + ZLBXSVT(:,:,:,:) = real(ZLBXSVT(:,:,:,:),kind=MNHREAL32) +END IF +! ============================================================ +! IF ( SIZE(PLBYTHS,1) /= 0 .AND. & ( HLBCY(1)=='OPEN' .OR. HLBCY(2)=='OPEN' )) THEN ZLBYUT(:,:,:) = PLBYUM(:,:,:) + ZTSTEP * PLBYUS(:,:,:) @@ -453,6 +472,24 @@ ELSE END IF ! ! +! ============================================================ +! +! Reproductibility for RSTART -> truncate ZLB to real(knd=4) to have reproductible result +! +ZLBYUT(:,:,:) = real(ZLBYUT(:,:,:),kind=MNHREAL32) +ZLBYWT(:,:,:) = real(ZLBYWT(:,:,:),kind=MNHREAL32) +ZLBYTHT(:,:,:) = real(ZLBYTHT(:,:,:),kind=MNHREAL32) +IF ( SIZE(PTKET,1) /= 0 ) THEN + ZLBYTKET(:,:,:) = real(ZLBYTKET(:,:,:),kind=MNHREAL32) +END IF +IF ( KRR > 0) THEN + ZLBYRT(:,:,:,:) = real(ZLBYRT(:,:,:,:),kind=MNHREAL32) +END IF +IF ( KSV > 0) THEN + ZLBYSVT(:,:,:,:) = real(ZLBYSVT(:,:,:,:),kind=MNHREAL32) +END IF +! ============================================================ +! !------------------------------------------------------------------------------- ! PONDERATION COEFF for Non-Normal velocities and pot temperature ! diff --git a/src/mesonh/ext/ini_budget.f90 b/src/mesonh/ext/ini_budget.f90 index 801952876e1ca4a93210909dbf147c264f8feee6..3adfe547cbf88c5ead1fe6ee53eda13afb2dd607 100644 --- a/src/mesonh/ext/ini_budget.f90 +++ b/src/mesonh/ext/ini_budget.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1995-2021 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1995-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. @@ -26,7 +26,7 @@ use modd_budget, only: nbudgets, tbudgets, NBUDGET_U, NBUDGET_V, NBUDGET_W, NBUDGET_TH, NBUDGET_TKE, & NBUDGET_RV, NBUDGET_RC, NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, & NBUDGET_RG, NBUDGET_RH, NBUDGET_SV1 -use modd_nsv, only: csvnames, nsv +use modd_nsv, only: nsv, tsvlist integer :: ibudget integer :: jsv @@ -91,8 +91,8 @@ tbudgets(NBUDGET_RH)%nid = NBUDGET_RH do jsv = 1, nsv ibudget = NBUDGET_SV1 - 1 + jsv - tbudgets(ibudget)%cname = Trim( csvnames(jsv) ) - tbudgets(ibudget)%ccomment = 'Budget for scalar variable ' // Trim( csvnames(jsv) ) + tbudgets(ibudget)%cname = Trim( tsvlist(jsv)%cmnhname ) + tbudgets(ibudget)%ccomment = 'Budget for scalar variable ' // Trim( tsvlist(jsv)%cmnhname ) tbudgets(ibudget)%nid = ibudget end do @@ -228,8 +228,8 @@ use modd_dyn, only: lcorio, xseglen use modd_dyn_n, only: xtstep, locean use modd_elec_descr, only: linductive, lrelax2fw_ion use modd_field, only: TYPEREAL -use modd_nsv, only: csvnames, & - nsv_aerbeg, nsv_aerend, nsv_aerdepbeg, nsv_aerdepend, nsv_c2r2beg, nsv_c2r2end, & +use modd_fire, only: lblaze +use modd_nsv, only: nsv_aerbeg, nsv_aerend, nsv_aerdepbeg, nsv_aerdepend, nsv_c2r2beg, nsv_c2r2end, & nsv_chembeg, nsv_chemend, nsv_chicbeg, nsv_chicend, nsv_csbeg, nsv_csend, & nsv_dstbeg, nsv_dstend, nsv_dstdepbeg, nsv_dstdepend, nsv_elecbeg, nsv_elecend, & #ifdef MNH_FOREFIRE @@ -238,11 +238,11 @@ use modd_nsv, only: csvnames, nsv_lgbeg, nsv_lgend, & nsv_lima_beg, nsv_lima_end, nsv_lima_ccn_acti, nsv_lima_ccn_free, nsv_lima_hom_haze, & nsv_lima_ifn_free, nsv_lima_ifn_nucl, nsv_lima_imm_nucl, & - nsv_lima_nc, nsv_lima_nr, nsv_lima_ni, nsv_lima_scavmass, nsv_lima_spro, & - nsv_lima_ns, nsv_lima_ng, nsv_lima_nh, & + nsv_lima_nc, nsv_lima_nr, nsv_lima_ni, nsv_lima_ns, nsv_lima_ng, nsv_lima_nh, & + nsv_lima_scavmass, nsv_lima_spro, & nsv_lnoxbeg, nsv_lnoxend, nsv_ppbeg, nsv_ppend, & nsv_sltbeg, nsv_sltend, nsv_sltdepbeg, nsv_sltdepend, nsv_snwbeg, nsv_snwend, & - nsv_user + nsv_user, tsvlist use modd_parameters, only: jphext use modd_param_c2r2, only: ldepoc_c2r2 => ldepoc, lrain_c2r2 => lrain, lsedc_c2r2 => lsedc, lsupsat_c2r2 => lsupsat use modd_param_ice, only: ladj_after, ladj_before, ldeposc_ice => ldeposc, lred, lsedic_ice => lsedic, lwarm_ice => lwarm @@ -1029,6 +1029,12 @@ if ( lbu_rth ) then tzsource%cmnhname = 'DCONV' tzsource%clongname = 'KAFR convection' tzsource%lavailable = hdconv == 'KAFR' .OR. hsconv == 'KAFR' + + call Budget_source_add( tbudgets(NBUDGET_TH), tzsource ) + + tzsource%cmnhname = 'BLAZE' + tzsource%clongname = 'blaze fire model contribution' + tzsource%lavailable = lblaze call Budget_source_add( tbudgets(NBUDGET_TH), tzsource ) tzsource%cmnhname = 'VTURB' @@ -1456,6 +1462,11 @@ if ( tbudgets(NBUDGET_RV)%lenabled ) then tzsource%lavailable = hdconv == 'KAFR' .OR. hsconv == 'KAFR' call Budget_source_add( tbudgets(NBUDGET_RV), tzsource ) + tzsource%cmnhname = 'BLAZE' + tzsource%clongname = 'blaze fire model contribution' + tzsource%lavailable = lblaze + call Budget_source_add( tbudgets(NBUDGET_RV), tzsource ) + tzsource%cmnhname = 'VTURB' tzsource%clongname = 'vertical turbulent diffusion' tzsource%lavailable = hturb == 'TKEL' @@ -2945,7 +2956,7 @@ SV_BUDGETS: do jsv = 1, ksv tbudgets(ibudget)%tsources(:)%ngroup = 0 - tzsource%ccomment = 'Budget of scalar variable ' // csvnames(jsv) + tzsource%ccomment = 'Budget of scalar variable ' // tsvlist(jsv)%cmnhname tzsource%ngrid = 1 tzsource%cunits = '1' @@ -4326,7 +4337,7 @@ end subroutine Budget_source_add subroutine Ini_budget_groups( tpbudgets, kbudim1, kbudim2, kbudim3 ) use modd_budget, only: tbudgetdata use modd_field, only: TYPEINT, TYPEREAL - use modd_parameters, only: NMNHNAMELGTMAX, NSTDNAMELGTMAX + use modd_parameters, only: NMNHNAMELGTMAX, NSTDNAMELGTMAX, NLONGNAMELGTMAX, NUNITLGTMAX, NCOMMENTLGTMAX use mode_tools, only: Quicksort @@ -4337,9 +4348,9 @@ subroutine Ini_budget_groups( tpbudgets, kbudim1, kbudim2, kbudim3 ) character(len=NMNHNAMELGTMAX) :: ymnhname character(len=NSTDNAMELGTMAX) :: ystdname - character(len=32) :: ylongname - character(len=40) :: yunits - character(len=100) :: ycomment + character(len=NLONGNAMELGTMAX) :: ylongname + character(len=NUNITLGTMAX) :: yunits + character(len=NCOMMENTLGTMAX) :: ycomment integer :: ji, jj, jk integer :: isources ! Number of source terms in a budget integer :: inbgroups ! Number of budget groups diff --git a/src/mesonh/ext/ini_nsv.f90 b/src/mesonh/ext/ini_nsv.f90 index 2ed8f9d4b1367d0dc4548910a5257b2eb4f08b24..3573e34ba187133e7b257c45e1af932de74f98c0 100644 --- a/src/mesonh/ext/ini_nsv.f90 +++ b/src/mesonh/ext/ini_nsv.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 2001-2021 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2001-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. @@ -67,19 +67,21 @@ END MODULE MODI_INI_NSV !! Modification 07/2017 (V. Vionnet) Add blowing snow condition ! P. Wautelet 09/03/2021: move some chemistry initializations to ini_nsv ! P. Wautelet 10/03/2021: move scalar variable name initializations to ini_nsv -! P. Wautelet 10/03/2021: add CSVNAMES and CSVNAMES_A to store the name of all the scalar variables ! P. Wautelet 30/03/2021: move NINDICE_CCN_IMM and NIMM initializations from init_aerosol_properties to ini_nsv ! B. Vie 06/2021: add prognostic supersaturation for LIMA +! P. Wautelet 26/11/2021: initialize TSVLIST_A ! A. Costes 12/2021: smoke tracer for fire model -!! +! P. Wautelet 14/01/2022: add CSV_CHEM_LIST(_A) to store the list of all chemical variables +! + NSV_CHEM_LIST(_A) the size of the list !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! USE MODD_BLOWSNOW, ONLY: CSNOWNAMES, LBLOWSNOW, NBLOWSNOW3D, YPSNOW_INI -USE MODD_CH_AEROSOL, ONLY: CAERONAMES, CDEAERNAMES, JPMODE, LAERINIT, LDEPOS_AER, LORILAM, & - LVARSIGI, LVARSIGJ, NCARB, NM6_AER, NSOA, NSP +USE MODD_CH_AEROSOL +! USE MODD_CH_AEROSOL, ONLY: CAERONAMES, CDEAERNAMES, JPMODE, LAERINIT, LDEPOS_AER, LORILAM, & +! LVARSIGI, LVARSIGJ, NCARB, NM6_AER, NSOA, NSP USE MODD_CH_M9_n, ONLY: CICNAMES, CNAMES, NEQ, NEQAQ USE MODD_CH_MNHC_n, ONLY: LCH_PH, LUSECHEM, LUSECHAQ, LUSECHIC, CCH_SCHEME, LCH_CONV_LINOX USE MODD_CONDSAMP, ONLY: LCONDSAMP, NCONDSAMP @@ -89,7 +91,7 @@ USE MODD_DIAG_FLAG, ONLY: LCHEMDIAG, LCHAQDIAG USE MODD_DUST, ONLY: CDEDSTNAMES, CDUSTNAMES, JPDUSTORDER, LDEPOS_DST, LDSTINIT, LDSTPRES, LDUST, & LRGFIX_DST, LVARSIG, NMODE_DST, YPDEDST_INI, YPDUST_INI USE MODD_DYN_n, ONLY: LHORELAX_SV,LHORELAX_SVC2R2,LHORELAX_SVC1R3, & - LHORELAX_SVLIMA, & + LHORELAX_SVFIRE, LHORELAX_SVLIMA, & LHORELAX_SVELEC,LHORELAX_SVCHEM,LHORELAX_SVLG, & LHORELAX_SVDST,LHORELAX_SVAER, LHORELAX_SVSLT, & LHORELAX_SVPP,LHORELAX_SVCS, LHORELAX_SVCHIC, & @@ -99,18 +101,17 @@ USE MODD_DYN_n, ONLY: LHORELAX_SVFF #endif USE MODD_ELEC_DESCR, ONLY: LLNOX_EXPLICIT USE MODD_ELEC_DESCR, ONLY: CELECNAMES +USE MODD_FIELD, ONLY: TFIELDMETADATA, TYPEREAL +USE MODD_FIRE #ifdef MNH_FOREFIRE USE MODD_FOREFIRE #endif -!Blaze fire model -USE MODD_FIRE -USE MODD_DYN_n, ONLY : LHORELAX_SVFIRE -! USE MODD_ICE_C1R3_DESCR, ONLY: C1R3NAMES USE MODD_LG, ONLY: CLGNAMES, XLG1MIN, XLG2MIN, XLG3MIN USE MODD_LUNIT_n, ONLY: TLUOUT USE MODD_NSV USE MODD_PARAM_C2R2, ONLY: LSUPSAT +USE MODD_PARAMETERS, ONLY: NCOMMENTLGTMAX, NLONGNAMELGTMAX, NUNITLGTMAX USE MODD_PARAM_LIMA, ONLY: NINDICE_CCN_IMM, NIMM, NMOD_CCN, LSCAV, LAERO_MASS, & NMOD_IFN, NMOD_IMM, LHHONI, & LSPRO, & @@ -142,17 +143,28 @@ INTEGER, INTENT(IN) :: KMI ! model index ! CHARACTER(LEN=2) :: YNUM2 CHARACTER(LEN=3) :: YNUM3 +CHARACTER(LEN=NCOMMENTLGTMAX) :: YCOMMENT +CHARACTER(LEN=NUNITLGTMAX) :: YUNITS +CHARACTER(LEN=NLONGNAMELGTMAX), DIMENSION(:), ALLOCATABLE :: YAEROLONGNAMES +CHARACTER(LEN=NLONGNAMELGTMAX), DIMENSION(:), ALLOCATABLE :: YDUSTLONGNAMES +CHARACTER(LEN=NLONGNAMELGTMAX), DIMENSION(:), ALLOCATABLE :: YSALTLONGNAMES INTEGER :: ILUOUT +INTEGER :: ICHIDX ! Index for position in CSV_CHEM_LIST_A array INTEGER :: ISV ! total number of scalar variables -INTEGER :: IMODEIDX, IMOMENTS +INTEGER :: IMODEIDX +INTEGER :: JAER INTEGER :: JI, JJ, JSV INTEGER :: JMODE, JMOM, JSV_NAME +INTEGER :: INMOMENTS_DST, INMOMENTS_SLT !Number of moments for dust or salt ! !------------------------------------------------------------------------------- ! -LINI_NSV = .TRUE. +LINI_NSV(KMI) = .TRUE. ILUOUT = TLUOUT%NLU + +ICHIDX = 0 +NSV_CHEM_LIST_A(KMI) = 0 ! ! Users scalar variables are first considered ! @@ -361,7 +373,6 @@ ELSE END IF ! #ifdef MNH_FOREFIRE - ! ForeFire tracers IF (LFOREFIRE .AND. NFFSCALARS .GT. 0) THEN NSV_FF_A(KMI) = NFFSCALARS @@ -416,6 +427,7 @@ IF (LUSECHEM .AND.(NEQ .GT. 0)) THEN NSV_CHEMBEG_A(KMI)= ISV+1 NSV_CHEMEND_A(KMI)= ISV+NSV_CHEM_A(KMI) ISV = NSV_CHEMEND_A(KMI) + NSV_CHEM_LIST_A(KMI) = NSV_CHEM_LIST_A(KMI) + NSV_CHEM_A(KMI) ELSE NSV_CHEM_A(KMI) = 0 ! force First index to be superior to last index @@ -439,6 +451,7 @@ IF ((LUSECHAQ .OR. LCHAQDIAG).AND.(NEQ .GT. 0)) THEN NSV_CHICBEG_A(KMI)= ISV+1 NSV_CHICEND_A(KMI)= ISV+NSV_CHIC_A(KMI) ISV = NSV_CHICEND_A(KMI) + NSV_CHEM_LIST_A(KMI) = NSV_CHEM_LIST_A(KMI) + NSV_CHIC_A(KMI) ELSE NSV_CHIC_A(KMI) = 0 NSV_CHICBEG_A(KMI)= 1 @@ -469,7 +482,6 @@ ELSE END IF ! aerosol variables IF (LORILAM.AND.(NEQ .GT. 0)) THEN - IF (ALLOCATED(XT_LS)) LAERINIT=.TRUE. NM6_AER = 0 IF (LVARSIGI) NM6_AER = 1 IF (LVARSIGJ) NM6_AER = NM6_AER + 1 @@ -477,6 +489,9 @@ IF (LORILAM.AND.(NEQ .GT. 0)) THEN NSV_AERBEG_A(KMI)= ISV+1 NSV_AEREND_A(KMI)= ISV+NSV_AER_A(KMI) ISV = NSV_AEREND_A(KMI) + NSV_CHEM_LIST_A(KMI) = NSV_CHEM_LIST_A(KMI) + NSV_AER_A(KMI) + + ALLOCATE( YAEROLONGNAMES(NSV_AER_A(KMI)) ) ELSE NSV_AER_A(KMI) = 0 ! force First index to be superior to last index @@ -489,6 +504,7 @@ IF (LORILAM .AND. LDEPOS_AER(KMI)) THEN NSV_AERDEPBEG_A(KMI)= ISV+1 NSV_AERDEPEND_A(KMI)= ISV+NSV_AERDEP_A(KMI) ISV = NSV_AERDEPEND_A(KMI) + NSV_CHEM_LIST_A(KMI) = NSV_CHEM_LIST_A(KMI) + NSV_AERDEP_A(KMI) ELSE NSV_AERDEP_A(KMI) = 0 ! force First index to be superior to last index @@ -505,15 +521,22 @@ IF (LDUST) THEN IF (ALLOCATED(XT_LS).AND. .NOT.(LDSTPRES)) LDSTINIT=.TRUE. IF (CPROGRAM == 'IDEAL ') LVARSIG = .TRUE. IF ((CPROGRAM == 'REAL ').AND.LDSTINIT) LVARSIG = .TRUE. - NSV_DST_A(KMI) = NMODE_DST*2 - IF (LRGFIX_DST) THEN - NSV_DST_A(KMI) = NMODE_DST - LVARSIG = .FALSE. + !Determine number of moments + IF ( LRGFIX_DST ) THEN + INMOMENTS_DST = 1 + IF ( LVARSIG ) CALL Print_msg( NVERB_WARNING, 'GEN', 'INI_NSV', 'LVARSIG forced to FALSE because LRGFIX_DST is TRUE' ) + LVARSIG = .FALSE. + ELSE IF ( LVARSIG ) THEN + INMOMENTS_DST = 3 + ELSE + INMOMENTS_DST = 2 END IF - IF (LVARSIG) NSV_DST_A(KMI) = NSV_DST_A(KMI) + NMODE_DST + !Number of entries = number of moments multiplied by number of modes + NSV_DST_A(KMI) = NMODE_DST * INMOMENTS_DST NSV_DSTBEG_A(KMI)= ISV+1 NSV_DSTEND_A(KMI)= ISV+NSV_DST_A(KMI) ISV = NSV_DSTEND_A(KMI) + NSV_CHEM_LIST_A(KMI) = NSV_CHEM_LIST_A(KMI) + NSV_DST_A(KMI) ELSE NSV_DST_A(KMI) = 0 ! force First index to be superior to last index @@ -526,6 +549,7 @@ IF ( LDUST .AND. LDEPOS_DST(KMI) ) THEN NSV_DSTDEPBEG_A(KMI)= ISV+1 NSV_DSTDEPEND_A(KMI)= ISV+NSV_DSTDEP_A(KMI) ISV = NSV_DSTDEPEND_A(KMI) + NSV_CHEM_LIST_A(KMI) = NSV_CHEM_LIST_A(KMI) + NSV_DSTDEP_A(KMI) ELSE NSV_DSTDEP_A(KMI) = 0 ! force First index to be superior to last index @@ -542,15 +566,22 @@ IF (LSALT) THEN IF (ALLOCATED(XT_LS).AND. .NOT.(LSLTPRES)) LSLTINIT=.TRUE. IF (CPROGRAM == 'IDEAL ') LVARSIG_SLT = .TRUE. IF ((CPROGRAM == 'REAL ').AND. LSLTINIT ) LVARSIG_SLT = .TRUE. - NSV_SLT_A(KMI) = NMODE_SLT*2 - IF (LRGFIX_SLT) THEN - NSV_SLT_A(KMI) = NMODE_SLT - LVARSIG_SLT = .FALSE. + !Determine number of moments + IF ( LRGFIX_SLT ) THEN + INMOMENTS_SLT = 1 + IF ( LVARSIG_SLT ) CALL Print_msg( NVERB_WARNING, 'GEN', 'INI_NSV', 'LVARSIG_SLT forced to FALSE because LRGFIX_SLT is TRUE' ) + LVARSIG_SLT = .FALSE. + ELSE IF ( LVARSIG_SLT ) THEN + INMOMENTS_SLT = 3 + ELSE + INMOMENTS_SLT = 2 END IF - IF (LVARSIG_SLT) NSV_SLT_A(KMI) = NSV_SLT_A(KMI) + NMODE_SLT + !Number of entries = number of moments multiplied by number of modes + NSV_SLT_A(KMI) = NMODE_SLT * INMOMENTS_SLT NSV_SLTBEG_A(KMI)= ISV+1 NSV_SLTEND_A(KMI)= ISV+NSV_SLT_A(KMI) ISV = NSV_SLTEND_A(KMI) + NSV_CHEM_LIST_A(KMI) = NSV_CHEM_LIST_A(KMI) + NSV_SLT_A(KMI) ELSE NSV_SLT_A(KMI) = 0 ! force First index to be superior to last index @@ -563,6 +594,7 @@ IF ( LSALT .AND. LDEPOS_SLT(KMI) ) THEN NSV_SLTDEPBEG_A(KMI)= ISV+1 NSV_SLTDEPEND_A(KMI)= ISV+NSV_SLTDEP_A(KMI) ISV = NSV_SLTDEPEND_A(KMI) + NSV_CHEM_LIST_A(KMI) = NSV_CHEM_LIST_A(KMI) + NSV_SLTDEP_A(KMI) ELSE NSV_SLTDEP_A(KMI) = 0 ! force First index to be superior to last index @@ -596,6 +628,7 @@ IF (.NOT.(LUSECHEM.OR.LCHEMDIAG) .AND. (LCH_CONV_LINOX.OR.LLNOX_EXPLICIT)) THEN NSV_LNOXBEG_A(KMI)= ISV+1 NSV_LNOXEND_A(KMI)= ISV+NSV_LNOX_A(KMI) ISV = NSV_LNOXEND_A(KMI) + NSV_CHEM_LIST_A(KMI) = NSV_CHEM_LIST_A(KMI) + NSV_LNOX_A(KMI) ELSE NSV_LNOX_A(KMI) = 0 ! force First index to be superior to last index @@ -604,7 +637,7 @@ ELSE NSV_LNOXEND_A(KMI)= 0 END IF ! -! finale number of NSV variable +! Final number of NSV variables ! NSV_A(KMI) = ISV ! @@ -726,26 +759,39 @@ IF ( LDUST ) THEN ! Initialization of dust names IF( .NOT. ALLOCATED( CDUSTNAMES ) ) THEN - IMOMENTS = ( NSV_DSTEND_A(KMI) - NSV_DSTBEG_A(KMI) + 1 ) / NMODE_DST - ALLOCATE( CDUSTNAMES(IMOMENTS * NMODE_DST) ) + ALLOCATE( CDUSTNAMES(NSV_DST_A(KMI)) ) + ALLOCATE( YDUSTLONGNAMES(NSV_DST_A(KMI)) ) !Loop on all dust modes - IF ( IMOMENTS == 1 ) THEN + IF ( INMOMENTS_DST == 1 ) THEN DO JMODE = 1, NMODE_DST IMODEIDX = JPDUSTORDER(JMODE) JSV_NAME = ( IMODEIDX - 1 ) * 3 + 2 CDUSTNAMES(JMODE) = YPDUST_INI(JSV_NAME) + !Add meaning of the ppv unit (here for moment 3) + YDUSTLONGNAMES(JMODE) = TRIM( YPDUST_INI(JSV_NAME) ) // ' [molec_{aer}/molec_{air}]' END DO ELSE DO JMODE = 1,NMODE_DST !Find which mode we are dealing with IMODEIDX = JPDUSTORDER(JMODE) - DO JMOM = 1, IMOMENTS + DO JMOM = 1, INMOMENTS_DST !Find which number this is of the list of scalars - JSV = ( JMODE - 1 ) * IMOMENTS + JMOM + JSV = ( JMODE - 1 ) * INMOMENTS_DST + JMOM !Find what name this corresponds to, always 3 moments assumed in YPDUST_INI JSV_NAME = ( IMODEIDX - 1) * 3 + JMOM !Get the right CDUSTNAMES which should follow the list of scalars transported in XSVM/XSVT CDUSTNAMES(JSV) = YPDUST_INI(JSV_NAME) + !Add meaning of the ppv unit + IF ( JMOM == 1 ) THEN !Corresponds to moment 0 + YDUSTLONGNAMES(JSV) = TRIM( YPDUST_INI(JSV_NAME) ) // ' [nb_aerosols/molec_{air}]' + ELSE IF ( JMOM == 2 ) THEN !Corresponds to moment 3 + YDUSTLONGNAMES(JSV) = TRIM( YPDUST_INI(JSV_NAME) ) // ' [molec_{aer}/molec_{air}]' + ELSE IF ( JMOM == 3 ) THEN !Corresponds to moment 6 + YDUSTLONGNAMES(JSV) = TRIM( YPDUST_INI(JSV_NAME) ) // ' [um6/molec_{air}*(cm3/m3)]' + ELSE + CALL Print_msg( NVERB_WARNING, 'GEN', 'INI_NSV', 'unknown moment for DUST' ) + YDUSTLONGNAMES(JMODE) = TRIM( YPDUST_INI(JSV_NAME) ) + END IF ENDDO ! Loop on moments ENDDO ! Loop on dust modes END IF @@ -769,26 +815,39 @@ IF ( LSALT ) THEN IF ( NMODE_SLT < 1 .OR. NMODE_SLT > 8 ) CALL Print_msg( NVERB_FATAL, 'GEN', 'INI_NSV', 'NMODE_SLT must in the 1 to 8 interval' ) IF( .NOT. ALLOCATED( CSALTNAMES ) ) THEN - IMOMENTS = ( NSV_SLTEND_A(KMI) - NSV_SLTBEG_A(KMI) + 1 ) / NMODE_SLT - ALLOCATE( CSALTNAMES(IMOMENTS * NMODE_SLT) ) + ALLOCATE( CSALTNAMES(NSV_SLT_A(KMI)) ) + ALLOCATE( YSALTLONGNAMES(NSV_DST_A(KMI)) ) !Loop on all dust modes - IF ( IMOMENTS == 1 ) THEN + IF ( INMOMENTS_SLT == 1 ) THEN DO JMODE = 1, NMODE_SLT IMODEIDX = JPSALTORDER(JMODE) JSV_NAME = ( IMODEIDX - 1 ) * 3 + 2 CSALTNAMES(JMODE) = YPSALT_INI(JSV_NAME) + !Add meaning of the ppv unit (here for moment 3) + YSALTLONGNAMES(JMODE) = TRIM( YPSALT_INI(JSV_NAME) ) // ' [molec_{aer}/molec_{air}]' END DO ELSE DO JMODE = 1, NMODE_SLT !Find which mode we are dealing with IMODEIDX = JPSALTORDER(JMODE) - DO JMOM = 1, IMOMENTS + DO JMOM = 1, INMOMENTS_SLT !Find which number this is of the list of scalars - JSV = ( JMODE - 1 ) * IMOMENTS + JMOM + JSV = ( JMODE - 1 ) * INMOMENTS_SLT + JMOM !Find what name this corresponds to, always 3 moments assumed in YPSALT_INI JSV_NAME = ( IMODEIDX - 1 ) * 3 + JMOM !Get the right CSALTNAMES which should follow the list of scalars transported in XSVM/XSVT CSALTNAMES(JSV) = YPSALT_INI(JSV_NAME) + !Add meaning of the ppv unit + IF ( JMOM == 1 ) THEN !Corresponds to moment 0 + YSALTLONGNAMES(JSV) = TRIM( YPSALT_INI(JSV_NAME) ) // ' [nb_aerosols/molec_{air}]' + ELSE IF ( JMOM == 2 ) THEN !Corresponds to moment 3 + YSALTLONGNAMES(JSV) = TRIM( YPSALT_INI(JSV_NAME) ) // ' [molec_{aer}/molec_{air}]' + ELSE IF ( JMOM == 3 ) THEN !Corresponds to moment 6 + YSALTLONGNAMES(JSV) = TRIM( YPSALT_INI(JSV_NAME) ) // ' [um6/molec_{air}*(cm3/m3)]' + ELSE + CALL Print_msg( NVERB_WARNING, 'GEN', 'INI_NSV', 'unknown moment for SALT' ) + YSALTLONGNAMES(JMODE) = TRIM( YPSALT_INI(JSV_NAME) ) + END IF ENDDO ! Loop on moments ENDDO ! Loop on dust modes END IF @@ -809,131 +868,421 @@ END IF ! Initialize scalar variable names for snow IF ( LBLOWSNOW ) THEN IF( .NOT. ALLOCATED( CSNOWNAMES ) ) THEN - IMOMENTS = ( NSV_SNWEND_A(KMI) - NSV_SNWBEG_A(KMI) + 1 ) - ALLOCATE( CSNOWNAMES(IMOMENTS) ) - DO JMOM = 1, IMOMENTS + ALLOCATE( CSNOWNAMES(NSV_SNW_A(KMI)) ) + DO JMOM = 1, NSV_SNW_A(KMI) CSNOWNAMES(JMOM) = YPSNOW_INI(JMOM) - ENDDO ! Loop on moments + END DO END IF END IF -!Fill CSVNAMES_A for model KMI +!Fill metadata for model KMI DO JSV = 1, NSV_USER_A(KMI) WRITE( YNUM3, '( I3.3 )' ) JSV - CSVNAMES_A(JSV,KMI) = 'SVUSER'//YNUM3 + + TSVLIST_A(JSV, KMI) = TFIELDMETADATA( & + CMNHNAME = 'SVUSER' // YNUM3, & + CSTDNAME = '', & + CLONGNAME = 'SVUSER' // YNUM3, & + CUNITS = 'kg kg-1', & + CDIR = 'XY', & + CCOMMENT = 'X_Y_Z_' // 'SVUSER' // YNUM3, & + NGRID = 1, & + NTYPE = TYPEREAL, & + NDIMS = 3, & + LTIMEDEP = .TRUE. ) END DO DO JSV = NSV_C2R2BEG_A(KMI), NSV_C2R2END_A(KMI) - CSVNAMES_A(JSV,KMI) = TRIM( C2R2NAMES(JSV-NSV_C2R2BEG_A(KMI)+1) ) + WRITE( YNUM3, '( I3.3 )' ) JSV + + TSVLIST_A(JSV, KMI) = TFIELDMETADATA( & + CMNHNAME = TRIM( C2R2NAMES(JSV-NSV_C2R2BEG_A(KMI)+1) ), & + CSTDNAME = '', & + CLONGNAME = TRIM( C2R2NAMES(JSV-NSV_C2R2BEG_A(KMI)+1) ), & + CUNITS = 'm-3', & + CDIR = 'XY', & + CCOMMENT = 'X_Y_Z_' // 'SVT' // YNUM3, & + NGRID = 1, & + NTYPE = TYPEREAL, & + NDIMS = 3, & + LTIMEDEP = .TRUE. ) END DO DO JSV = NSV_C1R3BEG_A(KMI), NSV_C1R3END_A(KMI) - CSVNAMES_A(JSV,KMI) = TRIM( C1R3NAMES(JSV-NSV_C1R3BEG_A(KMI)+1) ) + WRITE( YNUM3, '( I3.3 )' ) JSV + + TSVLIST_A(JSV, KMI) = TFIELDMETADATA( & + CMNHNAME = TRIM( C1R3NAMES(JSV-NSV_C2R2BEG_A(KMI)+1) ), & + CSTDNAME = '', & + CLONGNAME = TRIM( C1R3NAMES(JSV-NSV_C2R2BEG_A(KMI)+1) ), & + CUNITS = 'm-3', & + CDIR = 'XY', & + CCOMMENT = 'X_Y_Z_' // 'SVT' // YNUM3, & + NGRID = 1, & + NTYPE = TYPEREAL, & + NDIMS = 3, & + LTIMEDEP = .TRUE. ) END DO DO JSV = NSV_LIMA_BEG_A(KMI), NSV_LIMA_END_A(KMI) + WRITE( YNUM3, '( I3.3 )' ) JSV + + TSVLIST_A(JSV, KMI) = TFIELDMETADATA( & + CMNHNAME = 'SV LIMA ' // YNUM3, & + CSTDNAME = '', & + CLONGNAME = '', & + CUNITS = 'kg-1', & + CDIR = 'XY', & + CCOMMENT = 'X_Y_Z_' // 'SVT' // YNUM3, & + NGRID = 1, & + NTYPE = TYPEREAL, & + NDIMS = 3, & + LTIMEDEP = .TRUE. ) + IF ( JSV == NSV_LIMA_NC_A(KMI) ) THEN - CSVNAMES_A(JSV,KMI) = TRIM( CLIMA_WARM_NAMES(1) ) + TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_WARM_NAMES(1) ) ELSE IF ( JSV == NSV_LIMA_NR_A(KMI) ) THEN - CSVNAMES_A(JSV,KMI) = TRIM( CLIMA_WARM_NAMES(2) ) + TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_WARM_NAMES(2) ) ELSE IF ( JSV >= NSV_LIMA_CCN_FREE_A(KMI) .AND. JSV < NSV_LIMA_CCN_ACTI_A(KMI) ) THEN WRITE( YNUM2, '( I2.2 )' ) JSV - NSV_LIMA_CCN_FREE_A(KMI) + 1 - CSVNAMES_A(JSV,KMI) = TRIM( CLIMA_WARM_NAMES(3) ) // YNUM2 + TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_WARM_NAMES(3) ) // YNUM2 ELSE IF (JSV >= NSV_LIMA_CCN_ACTI_A(KMI) .AND. JSV < ( NSV_LIMA_CCN_ACTI_A(KMI) + NMOD_CCN ) ) THEN WRITE( YNUM2, '( I2.2 )' ) JSV - NSV_LIMA_CCN_ACTI_A(KMI) + 1 - CSVNAMES_A(JSV,KMI) = TRIM( CLIMA_WARM_NAMES(4) ) // YNUM2 + TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_WARM_NAMES(4) ) // YNUM2 ELSE IF ( JSV == NSV_LIMA_SCAVMASS_A(KMI) ) THEN - CSVNAMES_A(JSV,KMI) = TRIM( CAERO_MASS(1) ) + TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CAERO_MASS(1) ) + TSVLIST_A(JSV, KMI)%CUNITS = 'kg kg-1' ELSE IF ( JSV == NSV_LIMA_NI_A(KMI) ) THEN - CSVNAMES_A(JSV,KMI) = TRIM( CLIMA_COLD_NAMES(1) ) + TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_COLD_NAMES(1) ) ELSE IF ( JSV == NSV_LIMA_NS_A(KMI) ) THEN - CSVNAMES_A(JSV,KMI) = TRIM( CLIMA_COLD_NAMES(2) ) + TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_COLD_NAMES(2) ) ELSE IF ( JSV == NSV_LIMA_NG_A(KMI) ) THEN - CSVNAMES_A(JSV,KMI) = TRIM( CLIMA_COLD_NAMES(3) ) + TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_COLD_NAMES(3) ) ELSE IF ( JSV == NSV_LIMA_NH_A(KMI) ) THEN - CSVNAMES_A(JSV,KMI) = TRIM( CLIMA_COLD_NAMES(4) ) + TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_COLD_NAMES(4) ) ELSE IF ( JSV >= NSV_LIMA_IFN_FREE_A(KMI) .AND. JSV < NSV_LIMA_IFN_NUCL_A(KMI) ) THEN WRITE( YNUM2, '( I2.2 )' ) JSV - NSV_LIMA_IFN_FREE_A(KMI) + 1 - CSVNAMES_A(JSV,KMI) = TRIM( CLIMA_COLD_NAMES(5) ) // YNUM2 + TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_COLD_NAMES(5) ) // YNUM2 ELSE IF ( JSV >= NSV_LIMA_IFN_NUCL_A(KMI) .AND. JSV < ( NSV_LIMA_IFN_NUCL_A(KMI) + NMOD_IFN ) ) THEN WRITE( YNUM2, '( I2.2 )' ) JSV - NSV_LIMA_IFN_NUCL_A(KMI) + 1 - CSVNAMES_A(JSV,KMI) = TRIM( CLIMA_COLD_NAMES(6) ) // YNUM2 + TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_COLD_NAMES(6) ) // YNUM2 ELSE IF ( JSV >= NSV_LIMA_IMM_NUCL_A(KMI) .AND. JSV < ( NSV_LIMA_IMM_NUCL_A(KMI) + NMOD_IMM ) ) THEN WRITE( YNUM2, '( I2.2 )' ) NINDICE_CCN_IMM(JSV-NSV_LIMA_IMM_NUCL_A(KMI)+1) - CSVNAMES_A(JSV,KMI) = TRIM( CLIMA_COLD_NAMES(7) ) // YNUM2 + TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_COLD_NAMES(7) ) // YNUM2 ELSE IF ( JSV == NSV_LIMA_HOM_HAZE_A(KMI) ) THEN - CSVNAMES_A(JSV,KMI) = TRIM( CLIMA_COLD_NAMES(8) ) + TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_COLD_NAMES(8) ) ELSE IF ( JSV == NSV_LIMA_SPRO_A(KMI) ) THEN - CSVNAMES_A(JSV,KMI) = TRIM( CLIMA_WARM_NAMES(5) ) + TSVLIST_A(JSV, KMI)%CUNITS = '1' + TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_WARM_NAMES(5) ) ELSE CALL Print_msg( NVERB_FATAL, 'GEN', 'INI_NSV', 'invalid index for LIMA' ) END IF + + TSVLIST_A(JSV, KMI)%CLONGNAME = TRIM( TSVLIST_A(JSV, KMI)%CMNHNAME ) END DO DO JSV = NSV_ELECBEG_A(KMI), NSV_ELECEND_A(KMI) - CSVNAMES_A(JSV,KMI) = TRIM( CELECNAMES(JSV-NSV_ELECBEG_A(KMI)+1) ) + IF ( JSV > NSV_ELECBEG .AND. JSV < NSV_ELECEND ) THEN + YUNITS = 'C kg-1' + WRITE( YCOMMENT, '( A6, A3, I3.3 )' ) 'X_Y_Z_', 'SVT', JSV + ELSE + YUNITS = 'kg-1' + WRITE( YCOMMENT, '( A6, A3, I3.3, A8 )' ) 'X_Y_Z_', 'SVT', JSV, ' (nb ions/kg)' + END IF + + TSVLIST_A(JSV, KMI) = TFIELDMETADATA( & + CMNHNAME = TRIM( CELECNAMES(JSV-NSV_ELECBEG_A(KMI)+1) ), & + CSTDNAME = '', & + CLONGNAME = TRIM( CELECNAMES(JSV-NSV_ELECBEG_A(KMI)+1) ), & + CUNITS = TRIM( YUNITS ), & + CDIR = 'XY', & + CCOMMENT = TRIM( YCOMMENT ), & + NGRID = 1, & + NTYPE = TYPEREAL, & + NDIMS = 3, & + LTIMEDEP = .TRUE. ) END DO DO JSV = NSV_LGBEG_A(KMI), NSV_LGEND_A(KMI) - CSVNAMES_A(JSV,KMI) = TRIM( CLGNAMES(JSV-NSV_LGBEG_A(KMI)+1) ) + WRITE( YNUM3, '( I3.3 )' ) JSV + + TSVLIST_A(JSV, KMI) = TFIELDMETADATA( & + CMNHNAME = TRIM( CLGNAMES(JSV-NSV_LGBEG_A(KMI)+1) ), & + CSTDNAME = '', & + CLONGNAME = TRIM( CLGNAMES(JSV-NSV_LGBEG_A(KMI)+1) ), & + CUNITS = 'm', & + CDIR = 'XY', & + CCOMMENT = 'X_Y_Z_' // 'SVT' // YNUM3, & + NGRID = 1, & + NTYPE = TYPEREAL, & + NDIMS = 3, & + LTIMEDEP = .TRUE. ) END DO DO JSV = NSV_PPBEG_A(KMI), NSV_PPEND_A(KMI) WRITE( YNUM3, '( I3.3 )' ) JSV-NSV_PPBEG_A(KMI)+1 - CSVNAMES_A(JSV,KMI) = 'SVPP'//YNUM3 + + TSVLIST_A(JSV, KMI) = TFIELDMETADATA( & + CMNHNAME = 'SVPP' // YNUM3, & + CSTDNAME = '', & + CLONGNAME = 'SVPP' // YNUM3, & + CUNITS = 'kg kg-1', & + CDIR = 'XY', & + CCOMMENT = 'X_Y_Z_' // 'SVT' // YNUM3, & + NGRID = 1, & + NTYPE = TYPEREAL, & + NDIMS = 3, & + LTIMEDEP = .TRUE. ) END DO #ifdef MNH_FOREFIRE DO JSV = NSV_FFBEG_A(KMI), NSV_FFEND_A(KMI) WRITE( YNUM3, '( I3.3 )' ) JSV-NSV_FFBEG_A(KMI)+1 - CSVNAMES_A(JSV,KMI) = 'SVFF'//YNUM3 + + TSVLIST_A(JSV, KMI) = TFIELDMETADATA( & + CMNHNAME = 'SVFF' // YNUM3, & + CSTDNAME = '', & + CLONGNAME = 'SVFF' // YNUM3, & + CUNITS = 'kg kg-1', & + CDIR = 'XY', & + CCOMMENT = 'X_Y_Z_' // 'SVT' // YNUM3, & + NGRID = 1, & + NTYPE = TYPEREAL, & + NDIMS = 3, & + LTIMEDEP = .TRUE. ) END DO #endif DO JSV = NSV_CSBEG_A(KMI), NSV_CSEND_A(KMI) WRITE( YNUM3, '( I3.3 )' ) JSV-NSV_CSBEG_A(KMI) - CSVNAMES_A(JSV,KMI) = 'SVCS'//YNUM3 + + TSVLIST_A(JSV, KMI) = TFIELDMETADATA( & + CMNHNAME = 'SVCS' // YNUM3, & + CSTDNAME = '', & + CLONGNAME = 'SVCS' // YNUM3, & + CUNITS = 'kg kg-1', & + CDIR = 'XY', & + CCOMMENT = 'X_Y_Z_' // 'SVT' // YNUM3, & + NGRID = 1, & + NTYPE = TYPEREAL, & + NDIMS = 3, & + LTIMEDEP = .TRUE. ) END DO DO JSV = NSV_CHEMBEG_A(KMI), NSV_CHEMEND_A(KMI) - CSVNAMES_A(JSV,KMI) = TRIM( CNAMES(JSV-NSV_CHEMBEG_A(KMI)+1) ) + ICHIDX = ICHIDX + 1 + CSV_CHEM_LIST_A(ICHIDX, KMI) = TRIM( CNAMES(JSV-NSV_CHEMBEG_A(KMI)+1) ) + + WRITE( YNUM3, '( I3.3 )' ) JSV + + TSVLIST_A(JSV, KMI) = TFIELDMETADATA( & + CMNHNAME = TRIM( CNAMES(JSV-NSV_CHEMBEG_A(KMI)+1) ), & + CSTDNAME = '', & + CLONGNAME = TRIM( CNAMES(JSV-NSV_CHEMBEG_A(KMI)+1) ), & + CUNITS = 'ppv', & + CDIR = 'XY', & + CCOMMENT = 'X_Y_Z_' // 'SVT' // YNUM3, & + NGRID = 1, & + NTYPE = TYPEREAL, & + NDIMS = 3, & + LTIMEDEP = .TRUE. ) END DO DO JSV = NSV_CHICBEG_A(KMI), NSV_CHICEND_A(KMI) - CSVNAMES_A(JSV,KMI) = TRIM( CICNAMES(JSV-NSV_CHICBEG_A(KMI)+1) ) + ICHIDX = ICHIDX + 1 + CSV_CHEM_LIST_A(ICHIDX, KMI) = TRIM( CICNAMES(JSV-NSV_CHICBEG_A(KMI)+1) ) + + WRITE( YNUM3, '( I3.3 )' ) JSV + + TSVLIST_A(JSV, KMI) = TFIELDMETADATA( & + CMNHNAME = TRIM( CICNAMES(JSV-NSV_CHICBEG_A(KMI)+1) ), & + CSTDNAME = '', & + CLONGNAME = TRIM( CICNAMES(JSV-NSV_CHICBEG_A(KMI)+1) ), & + CUNITS = 'ppv', & + CDIR = 'XY', & + CCOMMENT = 'X_Y_Z_' // 'SVT' // YNUM3, & + NGRID = 1, & + NTYPE = TYPEREAL, & + NDIMS = 3, & + LTIMEDEP = .TRUE. ) END DO DO JSV = NSV_AERBEG_A(KMI), NSV_AEREND_A(KMI) - CSVNAMES_A(JSV,KMI) = TRIM( CAERONAMES(JSV-NSV_AERBEG_A(KMI)+1) ) + ICHIDX = ICHIDX + 1 + CSV_CHEM_LIST_A(ICHIDX, KMI) = TRIM( CAERONAMES(JSV-NSV_AERBEG_A(KMI)+1) ) + + WRITE( YNUM3, '( I3.3 )' ) JSV + + !Determine moment to add meaning of the ppv unit + JAER = JSV - NSV_AERBEG_A(KMI) + 1 + IF ( ANY( JAER == [JP_CH_M0i, JP_CH_M0j] ) ) THEN + !Moment 0 + YAEROLONGNAMES = TRIM( CAERONAMES(JAER) ) // ' [nb_aerosols/molec_{air}]' + ELSE IF ( ANY( JAER == [ JP_CH_SO4i, JP_CH_SO4j, JP_CH_NO3i, JP_CH_NO3j, JP_CH_H2Oi, JP_CH_H2Oj, JP_CH_NH3i, JP_CH_NH3j, & + JP_CH_OCi, JP_CH_OCj, JP_CH_BCi, JP_CH_BCj, JP_CH_DSTi, JP_CH_DSTj ] ) & + .OR. ( NSOA == 10 .AND. & + ANY( JAER == [ JP_CH_SOA1i, JP_CH_SOA1j, JP_CH_SOA2i, JP_CH_SOA2j, JP_CH_SOA3i, JP_CH_SOA3j, JP_CH_SOA4i, & + JP_CH_SOA4j, JP_CH_SOA5i, JP_CH_SOA5j, JP_CH_SOA6i, JP_CH_SOA6j, JP_CH_SOA7i, JP_CH_SOA7j, & + JP_CH_SOA8i, JP_CH_SOA8j, JP_CH_SOA9i, JP_CH_SOA9j, JP_CH_SOA10i, JP_CH_SOA10j ] ) ) ) THEN + !Moment 3 + YAEROLONGNAMES = TRIM( CAERONAMES(JAER) ) // ' [molec_{aer}/molec_{air}]' + ELSE IF ( ( LVARSIGI .AND. JSV == JP_CH_M6i ) .OR. ( LVARSIGJ .AND. JSV == JP_CH_M6j ) ) THEN + !Moment 6 + YAEROLONGNAMES = TRIM( CAERONAMES(JAER) ) // ' [um6/molec_{air}*(cm3/m3)]' + ELSE + CALL Print_msg( NVERB_WARNING, 'GEN', 'INI_NSV', 'unknown moment for AER' ) + YAEROLONGNAMES = TRIM( CAERONAMES(JAER) ) + END IF + + TSVLIST_A(JSV, KMI) = TFIELDMETADATA( & + CMNHNAME = TRIM( CAERONAMES(JSV-NSV_AERBEG_A(KMI)+1) ), & + CSTDNAME = '', & + CLONGNAME = TRIM( YAEROLONGNAMES(JSV-NSV_AERBEG_A(KMI)+1) ), & + CUNITS = 'ppv', & + CDIR = 'XY', & + CCOMMENT = 'X_Y_Z_' // 'SVT' // YNUM3, & + NGRID = 1, & + NTYPE = TYPEREAL, & + NDIMS = 3, & + LTIMEDEP = .TRUE. ) END DO DO JSV = NSV_AERDEPBEG_A(KMI), NSV_AERDEPEND_A(KMI) - CSVNAMES_A(JSV,KMI) = TRIM( CDEAERNAMES(JSV-NSV_AERDEPBEG_A(KMI)+1) ) + ICHIDX = ICHIDX + 1 + CSV_CHEM_LIST_A(ICHIDX, KMI) = TRIM( CDEAERNAMES(JSV-NSV_AERDEPBEG_A(KMI)+1) ) + + WRITE( YNUM3, '( I3.3 )' ) JSV + + TSVLIST_A(JSV, KMI) = TFIELDMETADATA( & + CMNHNAME = TRIM( CDEAERNAMES(JSV-NSV_AERDEPBEG_A(KMI)+1) ), & + CSTDNAME = '', & + CLONGNAME = TRIM( CDEAERNAMES(JSV-NSV_AERDEPBEG_A(KMI)+1) ), & + CUNITS = 'ppv', & + CDIR = 'XY', & + CCOMMENT = 'X_Y_Z_' // 'SVT' // YNUM3, & + NGRID = 1, & + NTYPE = TYPEREAL, & + NDIMS = 3, & + LTIMEDEP = .TRUE. ) END DO DO JSV = NSV_DSTBEG_A(KMI), NSV_DSTEND_A(KMI) - CSVNAMES_A(JSV,KMI) = TRIM( CDUSTNAMES(JSV-NSV_DSTBEG_A(KMI)+1) ) + ICHIDX = ICHIDX + 1 + CSV_CHEM_LIST_A(ICHIDX, KMI) = TRIM( CDUSTNAMES(JSV-NSV_DSTBEG_A(KMI)+1) ) + + WRITE( YNUM3, '( I3.3 )' ) JSV + + TSVLIST_A(JSV, KMI) = TFIELDMETADATA( & + CMNHNAME = TRIM( CDUSTNAMES(JSV-NSV_DSTBEG_A(KMI)+1) ), & + CSTDNAME = '', & + CLONGNAME = TRIM( YDUSTLONGNAMES(JSV-NSV_DSTBEG_A(KMI)+1) ), & + CUNITS = 'ppv', & + CDIR = 'XY', & + CCOMMENT = 'X_Y_Z_' // 'SVT' // YNUM3, & + NGRID = 1, & + NTYPE = TYPEREAL, & + NDIMS = 3, & + LTIMEDEP = .TRUE. ) END DO DO JSV = NSV_DSTDEPBEG_A(KMI), NSV_DSTDEPEND_A(KMI) - CSVNAMES_A(JSV,KMI) = TRIM( CDEDSTNAMES(JSV-NSV_DSTDEPBEG_A(KMI)+1) ) + ICHIDX = ICHIDX + 1 + CSV_CHEM_LIST_A(ICHIDX, KMI) = TRIM( CDEDSTNAMES(JSV-NSV_DSTDEPBEG_A(KMI)+1) ) + + WRITE( YNUM3, '( I3.3 )' ) JSV + + TSVLIST_A(JSV, KMI) = TFIELDMETADATA( & + CMNHNAME = TRIM( CDEDSTNAMES(JSV-NSV_DSTDEPBEG_A(KMI)+1) ), & + CSTDNAME = '', & + CLONGNAME = TRIM( CDEDSTNAMES(JSV-NSV_DSTDEPBEG_A(KMI)+1) ), & + CUNITS = 'ppv', & + CDIR = 'XY', & + CCOMMENT = 'X_Y_Z_' // 'SVT' // YNUM3, & + NGRID = 1, & + NTYPE = TYPEREAL, & + NDIMS = 3, & + LTIMEDEP = .TRUE. ) END DO DO JSV = NSV_SLTBEG_A(KMI), NSV_SLTEND_A(KMI) - CSVNAMES_A(JSV,KMI) = TRIM( CSALTNAMES(JSV-NSV_SLTBEG_A(KMI)+1) ) + ICHIDX = ICHIDX + 1 + CSV_CHEM_LIST_A(ICHIDX, KMI) = TRIM( CSALTNAMES(JSV-NSV_SLTBEG_A(KMI)+1) ) + + WRITE( YNUM3, '( I3.3 )' ) JSV + + TSVLIST_A(JSV, KMI) = TFIELDMETADATA( & + CMNHNAME = TRIM( CSALTNAMES(JSV-NSV_SLTBEG_A(KMI)+1) ), & + CSTDNAME = '', & + CLONGNAME = TRIM( YSALTLONGNAMES(JSV-NSV_SLTBEG_A(KMI)+1) ), & + CUNITS = 'ppv', & + CDIR = 'XY', & + CCOMMENT = 'X_Y_Z_' // 'SVT' // YNUM3, & + NGRID = 1, & + NTYPE = TYPEREAL, & + NDIMS = 3, & + LTIMEDEP = .TRUE. ) END DO DO JSV = NSV_SLTDEPBEG_A(KMI), NSV_SLTDEPEND_A(KMI) - CSVNAMES_A(JSV,KMI) = TRIM( CDESLTNAMES(JSV-NSV_SLTDEPBEG_A(KMI)+1) ) + ICHIDX = ICHIDX + 1 + CSV_CHEM_LIST_A(ICHIDX, KMI) = TRIM( CDESLTNAMES(JSV-NSV_SLTDEPBEG_A(KMI)+1) ) + + WRITE( YNUM3, '( I3.3 )' ) JSV + + TSVLIST_A(JSV, KMI) = TFIELDMETADATA( & + CMNHNAME = TRIM( CDESLTNAMES(JSV-NSV_SLTDEPBEG_A(KMI)+1) ), & + CSTDNAME = '', & + CLONGNAME = TRIM( CDESLTNAMES(JSV-NSV_SLTDEPBEG_A(KMI)+1) ), & + CUNITS = 'ppv', & + CDIR = 'XY', & + CCOMMENT = 'X_Y_Z_' // 'SVT' // YNUM3, & + NGRID = 1, & + NTYPE = TYPEREAL, & + NDIMS = 3, & + LTIMEDEP = .TRUE. ) END DO DO JSV = NSV_SNWBEG_A(KMI), NSV_SNWEND_A(KMI) - CSVNAMES_A(JSV,KMI) = TRIM( CSNOWNAMES(JSV-NSV_SNWBEG_A(KMI)+1) ) + WRITE( YNUM3, '( I3.3 )' ) JSV + + TSVLIST_A(JSV, KMI) = TFIELDMETADATA( & + CMNHNAME = TRIM( CSNOWNAMES(JSV-NSV_SNWBEG_A(KMI)+1) ), & + CSTDNAME = '', & + CLONGNAME = TRIM( CSNOWNAMES(JSV-NSV_SNWBEG_A(KMI)+1) ), & + CUNITS = 'kg kg-1', & + CDIR = 'XY', & + CCOMMENT = 'X_Y_Z_' // 'SVT' // YNUM3, & + NGRID = 1, & + NTYPE = TYPEREAL, & + NDIMS = 3, & + LTIMEDEP = .TRUE. ) END DO +!Check if there is at most 1 LINOX scalar variable +!if not, the name must be modified and different for all of them +IF ( NSV_LNOX_A(KMI) > 1 ) & + CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_NSV', 'NSV_LNOX_A>1: problem with the names of the corresponding scalar variables' ) + DO JSV = NSV_LNOXBEG_A(KMI), NSV_LNOXEND_A(KMI) - WRITE( YNUM3, '( I3.3 )' ) JSV-NSV_LNOXBEG_A(KMI)+1 - CSVNAMES_A(JSV,KMI) = 'SVLNOX'//YNUM3 + ICHIDX = ICHIDX + 1 + CSV_CHEM_LIST_A(ICHIDX, KMI) = 'LINOX' + + WRITE( YNUM3, '( I3.3 )' ) JSV + + TSVLIST_A(JSV, KMI) = TFIELDMETADATA( & + CMNHNAME = 'LINOX', & + CSTDNAME = '', & + CLONGNAME = 'LINOX', & + CUNITS = 'ppv', & + CDIR = 'XY', & + CCOMMENT = 'X_Y_Z_' // 'SVT' // YNUM3, & + NGRID = 1, & + NTYPE = TYPEREAL, & + NDIMS = 3, & + LTIMEDEP = .TRUE. ) END DO +IF ( ICHIDX /= NSV_CHEM_LIST_A(KMI) ) & + CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_NSV', 'ICHIDX /= NSV_CHEM_LIST_A(KMI)' ) + END SUBROUTINE INI_NSV diff --git a/src/mesonh/ext/modeln.f90 b/src/mesonh/ext/modeln.f90 index 8483c72b39309b33fbe9e17c19389311ff82e183..d1f6da84bd60cf9771f89e13f426e058d8284ba9 100644 --- a/src/mesonh/ext/modeln.f90 +++ b/src/mesonh/ext/modeln.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2023 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. @@ -9,10 +9,15 @@ ! INTERFACE ! - SUBROUTINE MODEL_n(KTCOUNT,OEXIT) + SUBROUTINE MODEL_n( KTCOUNT, TPBAKFILE, TPDTMODELN, OEXIT ) ! -INTEGER, INTENT(IN) :: KTCOUNT ! temporal loop index of model KMODEL -LOGICAL, INTENT(INOUT):: OEXIT ! switch for the end of the temporal loop +USE MODD_IO, ONLY: TFILEDATA +USE MODD_TYPE_DATE, ONLY: DATE_TIME +! +INTEGER, INTENT(IN) :: KTCOUNT ! Temporal loop index of model KMODEL +TYPE(TFILEDATA), POINTER, INTENT(OUT) :: TPBAKFILE ! Pointer for backup file +TYPE(DATE_TIME), INTENT(OUT) :: TPDTMODELN ! Time of current model computation +LOGICAL, INTENT(INOUT) :: OEXIT ! Switch for the end of the temporal loop ! END SUBROUTINE MODEL_n ! @@ -21,7 +26,7 @@ END INTERFACE END MODULE MODI_MODEL_n ! ################################### - SUBROUTINE MODEL_n(KTCOUNT, OEXIT) + SUBROUTINE MODEL_n( KTCOUNT, TPBAKFILE, TPDTMODELN, OEXIT ) ! ################################### ! !!**** *MODEL_n * -monitor of the model version _n @@ -274,6 +279,9 @@ END MODULE MODI_MODEL_n ! J.L. Redelsperger 03/2021: add Call NHOA_COUPLN (coupling O & A LES version) ! A. Costes 12/2021: add Blaze fire model ! C. Barthe 07/04/2022: deallocation of ZSEA +! P. Wautelet 08/12/2022: bugfix if no TDADFILE +! P. Wautelet 13/01/2023: manage close of backup files outside of MODEL_n +! (useful to close them in reverse model order (child before parent, needed by WRITE_BALLOON_n) !!------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -363,8 +371,10 @@ USE MODD_TIME_n USE MODD_TIMEZ USE MODD_TURB_CLOUD, ONLY: NMODEL_CLOUD,CTURBLEN_CLOUD,XCEI USE MODD_TURB_n +USE MODD_TYPE_DATE, ONLY: DATE_TIME USE MODD_VISCOSITY ! +USE MODE_AIRCRAFT_BALLOON use mode_budget, only: Budget_store_init, Budget_store_end USE MODE_DATETIME USE MODE_ELEC_ll @@ -382,9 +392,11 @@ USE MODE_MODELN_HANDLER USE MODE_MPPDB USE MODE_MSG USE MODE_ONE_WAY_n +USE MODE_WRITE_AIRCRAFT_BALLOON use mode_write_les_n, only: Write_les_n use mode_write_lfifmn_fordiachro_n, only: WRITE_LFIFMN_FORDIACHRO_n USE MODE_WRITE_PROFILER_n, ONLY: WRITE_PROFILER_n +USE MODE_WRITE_STATION_n, ONLY: WRITE_STATION_n ! USE MODI_ADDFLUCTUATIONS USE MODI_ADVECTION_METSV @@ -392,7 +404,6 @@ USE MODI_ADVECTION_UVW USE MODI_ADVECTION_UVW_CEN USE MODI_ADV_FORCING_n USE MODI_AER_MONITOR_n -USE MODI_AIRCRAFT_BALLOON USE MODI_BLOWSNOW USE MODI_BOUNDARIES USE MODI_BUDGET_FLAGS @@ -447,12 +458,10 @@ USE MODI_TURB_CLOUD_INDEX USE MODI_TWO_WAY USE MODI_UPDATE_NSV USE MODI_VISCOSITY -USE MODI_WRITE_AIRCRAFT_BALLOON USE MODI_WRITE_DESFM_n USE MODI_WRITE_DIAG_SURF_ATM_N USE MODI_WRITE_LFIFM_n USE MODI_WRITE_SERIES_n -USE MODI_WRITE_STATION_n USE MODI_WRITE_SURF_ATM_N ! USE MODD_FIRE @@ -462,8 +471,10 @@ IMPLICIT NONE ! ! ! -INTEGER, INTENT(IN) :: KTCOUNT -LOGICAL, INTENT(INOUT):: OEXIT +INTEGER, INTENT(IN) :: KTCOUNT ! Temporal loop index of model KMODEL +TYPE(TFILEDATA), POINTER, INTENT(OUT) :: TPBAKFILE ! Pointer for backup file +TYPE(DATE_TIME), INTENT(OUT) :: TPDTMODELN ! Time of current model computation +LOGICAL, INTENT(INOUT) :: OEXIT ! Switch for the end of the temporal loop ! !* 0.2 declarations of local variables ! @@ -482,6 +493,7 @@ REAL(kind=MNHTIME), DIMENSION(2) :: ZTIME_STEP,ZTIME_STEP_PTS CHARACTER :: YMI INTEGER :: IPOINTS CHARACTER(len=16) :: YTCOUNT,YPOINTS +CHARACTER(LEN=:), ALLOCATABLE :: YDADNAME ! INTEGER :: ISYNCHRO ! model synchronic index relative to its father ! = 1 for the first time step in phase with DAD @@ -552,16 +564,16 @@ LOGICAL :: GCLD ! conditionnal call for dust wet deposition LOGICAL :: GCLOUD_ONLY ! conditionnal radiation computations for ! the only cloudy columns REAL, DIMENSION(SIZE(XRSVS,1), SIZE(XRSVS,2), SIZE(XRSVS,3), NSV_AER) :: ZWETDEPAER - - ! -TYPE(TFILEDATA),POINTER :: TZBAKFILE, TZOUTFILE +TYPE(TFILEDATA),POINTER :: TZOUTFILE ! TYPE(TFILEDATA),SAVE :: TZDIACFILE !------------------------------------------------------------------------------- ! -TZBAKFILE=> NULL() +TPBAKFILE=> NULL() TZOUTFILE=> NULL() ! +TPDTMODELN = TDTCUR +! !* 0. MICROPHYSICAL SCHEME ! ------------------- SELECT CASE(CCLOUD) @@ -997,18 +1009,24 @@ IF ( nfile_backup_current < NBAK_NUMB ) THEN IF ( KTCOUNT == TBACKUPN(nfile_backup_current + 1)%NSTEP ) THEN nfile_backup_current = nfile_backup_current + 1 ! - TZBAKFILE => TBACKUPN(nfile_backup_current)%TFILE - IVERB = TZBAKFILE%NLFIVERB + TPBAKFILE => TBACKUPN(nfile_backup_current)%TFILE + IVERB = TPBAKFILE%NLFIVERB ! - CALL IO_File_open(TZBAKFILE) + CALL IO_File_open(TPBAKFILE) ! - CALL WRITE_DESFM_n(IMI,TZBAKFILE) + CALL WRITE_DESFM_n(IMI,TPBAKFILE) CALL IO_Header_write( TBACKUPN(nfile_backup_current)%TFILE ) - CALL WRITE_LFIFM_n( TBACKUPN(nfile_backup_current)%TFILE, TBACKUPN(nfile_backup_current)%TFILE%TDADFILE%CNAME ) - TOUTDATAFILE => TZBAKFILE - CALL MNHWRITE_ZS_DUMMY_n(TZBAKFILE) + IF ( ASSOCIATED( TBACKUPN(nfile_backup_current)%TFILE%TDADFILE ) ) THEN + YDADNAME = TBACKUPN(nfile_backup_current)%TFILE%TDADFILE%CNAME + ELSE + ! Set a dummy name for the dad file. Its non-zero size will allow the writing of some data in the backup file + YDADNAME = 'DUMMY' + END IF + CALL WRITE_LFIFM_n( TBACKUPN(nfile_backup_current)%TFILE, TRIM( YDADNAME ) ) + TOUTDATAFILE => TPBAKFILE + CALL MNHWRITE_ZS_DUMMY_n(TPBAKFILE) IF (CSURF=='EXTE') THEN - TFILE_SURFEX => TZBAKFILE + TFILE_SURFEX => TPBAKFILE CALL GOTO_SURFEX(IMI) CALL WRITE_SURF_ATM_n(YSURF_CUR,'MESONH','ALL',.FALSE.) IF ( KTCOUNT > 1) THEN @@ -1020,10 +1038,10 @@ IF ( nfile_backup_current < NBAK_NUMB ) THEN ! ! Reinitialize Lagragian variables at every model backup IF (LLG .AND. LINIT_LG .AND. CINIT_LG=='FMOUT') THEN - CALL INI_LG(XXHAT,XYHAT,XZZ,XSVT,XLBXSVM,XLBYSVM) + CALL INI_LG( XXHATM, XYHATM, XZZ, XSVT, XLBXSVM, XLBYSVM ) IF (IVERB>=5) THEN WRITE(UNIT=ILUOUT,FMT=*) '************************************' - WRITE(UNIT=ILUOUT,FMT=*) '*** Lagrangian variables refreshed after ',TRIM(TZBAKFILE%CNAME),' backup' + WRITE(UNIT=ILUOUT,FMT=*) '*** Lagrangian variables refreshed after ',TRIM(TPBAKFILE%CNAME),' backup' WRITE(UNIT=ILUOUT,FMT=*) '************************************' END IF END IF @@ -1034,11 +1052,11 @@ IF ( nfile_backup_current < NBAK_NUMB ) THEN ! ELSE !Necessary to have a 'valid' CNAME when calling some subroutines - TZBAKFILE => TFILE_DUMMY + TPBAKFILE => TFILE_DUMMY END IF ELSE !Necessary to have a 'valid' CNAME when calling some subroutines - TZBAKFILE => TFILE_DUMMY + TPBAKFILE => TFILE_DUMMY END IF ! IF ( nfile_output_current < NOUT_NUMB ) THEN @@ -1235,8 +1253,9 @@ 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) + CALL SM_GRIDPROJ( XXHAT, XYHAT, XZHAT, XXHATM, XYHATM, XZS, & + LSLEVE, XLEN1, XLEN2, XZSMT, XLATORI, XLONORI, & + XMAP, XLAT, XLON, XDXHAT, XDYHAT, XZZ, ZJ ) END IF ! IF ( LFORCING ) THEN @@ -1460,7 +1479,7 @@ XT_RELAX = XT_RELAX + ZTIME2 - ZTIME1 & ! ZTIME1 = ZTIME2 ! -CALL PHYS_PARAM_n( KTCOUNT, TZBAKFILE, & +CALL PHYS_PARAM_n( KTCOUNT, TPBAKFILE, & XT_RAD, XT_SHADOWS, XT_DCONV, XT_GROUND, & XT_MAFL, XT_DRAG, XT_EOL, XT_TURB, XT_TRACER, & ZTIME, ZWETDEPAER, GMASKkids, GCLOUD_ONLY ) @@ -1640,7 +1659,7 @@ XTIME_LES_BU_PROCESS = 0. ! CALL MPPDB_CHECK3DM("before ADVEC_METSV:XU/V/W/TH/TKE/T,XRHODJ",PRECISION,& & XUT, XVT, XWT, XTHT, XTKET,XRHODJ) - CALL ADVECTION_METSV ( TZBAKFILE, CUVW_ADV_SCHEME, & + CALL ADVECTION_METSV ( TPBAKFILE, CUVW_ADV_SCHEME, & CMET_ADV_SCHEME, CSV_ADV_SCHEME, CCLOUD, NSPLIT, & LSPLIT_CFL, XSPLIT_CFL, LCFL_WRIT, & CLBCX, CLBCY, NRR, NSV, TDTCUR, XTSTEP, & @@ -1742,7 +1761,7 @@ XT_ADVUVW = XT_ADVUVW + ZTIME2 - ZTIME1 - XTIME_LES_BU_PROCESS - XTIME_BU_PROCES !------------------------------------------------------------------------------- ! IF (NMODEL_CLOUD==IMI .AND. CTURBLEN_CLOUD/='NONE') THEN - CALL TURB_CLOUD_INDEX( XTSTEP, TZBAKFILE, & + CALL TURB_CLOUD_INDEX( XTSTEP, TPBAKFILE, & LTURB_DIAG, NRRI, & XRRS, XRT, XRHODJ, XDXX, XDYY, XDZZ, XDZX, XDZY, & XCEI ) @@ -1929,7 +1948,7 @@ IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN CALL MNHGET_SURF_PARAM_n (PSEA=ZSEA(:,:),PTOWN=ZTOWN(:,:)) CALL RESOLVED_CLOUD ( CCLOUD, CACTCCN, CSCONV, CMF_CLOUD, NRR, NSPLITR, & NSPLITG, IMI, KTCOUNT, & - CLBCX,CLBCY,TZBAKFILE, CRAD, CTURBDIM, & + CLBCX,CLBCY,TPBAKFILE, CRAD, CTURBDIM, & LSUBG_COND,LSIGMAS,CSUBG_AUCV,XTSTEP, & XZZ, XRHODJ, XRHODREF, XEXNREF, & ZPABST, XTHT,XRT,XSIGS,VSIGQSAT,XMFCONV,XTHM,XRCM, & @@ -1949,7 +1968,7 @@ IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN ELSE CALL RESOLVED_CLOUD ( CCLOUD, CACTCCN, CSCONV, CMF_CLOUD, NRR, NSPLITR, & NSPLITG, IMI, KTCOUNT, & - CLBCX,CLBCY,TZBAKFILE, CRAD, CTURBDIM, & + CLBCX,CLBCY,TPBAKFILE, CRAD, CTURBDIM, & LSUBG_COND,LSIGMAS,CSUBG_AUCV, & XTSTEP,XZZ, XRHODJ, XRHODREF, XEXNREF, & ZPABST, XTHT,XRT,XSIGS,VSIGQSAT,XMFCONV,XTHM,XRCM, & @@ -2151,16 +2170,14 @@ IF (LFLYER) THEN ALLOCATE(ZSEA(IIU,IJU)) ZSEA(:,:) = 0. CALL MNHGET_SURF_PARAM_n (PSEA=ZSEA(:,:)) - CALL AIRCRAFT_BALLOON(XTSTEP, & - XXHAT, XYHAT, XZZ, XMAP, XLONORI, XLATORI, & - XUT, XVT, XWT, XPABST, XTHT, XRT, XSVT, XTKET, XTSRAD, & - XRHODREF,XCIT,PSEA=ZSEA(:,:)) + CALL AIRCRAFT_BALLOON( XTSTEP, XZZ, XMAP, XLONORI, XLATORI, & + XUT, XVT, XWT, XPABST, XTHT, XRT, XSVT, XTKET, XTSRAD, & + XRHODREF, XCIT, PSEA = ZSEA(:,:) ) DEALLOCATE(ZSEA) ELSE - CALL AIRCRAFT_BALLOON(XTSTEP, & - XXHAT, XYHAT, XZZ, XMAP, XLONORI, XLATORI, & - XUT, XVT, XWT, XPABST, XTHT, XRT, XSVT, XTKET, XTSRAD, & - XRHODREF,XCIT) + CALL AIRCRAFT_BALLOON( XTSTEP, XZZ, XMAP, XLONORI, XLATORI, & + XUT, XVT, XWT, XPABST, XTHT, XRT, XSVT, XTKET, XTSRAD, & + XRHODREF, XCIT ) END IF END IF @@ -2169,10 +2186,8 @@ END IF !* 24.2 STATION (observation diagnostic) ! -------------------------------- ! -IF (LSTATION) & - CALL STATION_n(XTSTEP, & - XXHAT, XYHAT, XZZ, & - XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET, XTSRAD, XPABST ) +IF ( LSTATION ) & + CALL STATION_n( XZZ, XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET, XTSRAD, XPABST ) ! !--------------------------------------------------------- ! @@ -2184,16 +2199,14 @@ IF (LPROFILER) THEN ALLOCATE(ZSEA(IIU,IJU)) ZSEA(:,:) = 0. CALL MNHGET_SURF_PARAM_n (PSEA=ZSEA(:,:)) - CALL PROFILER_n(XTSTEP, & - XXHAT, XYHAT, XZZ,XRHODREF, & - XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET, XTSRAD, XPABST, & - XAER, MAX(XCLDFR,XICEFR), XCIT,PSEA=ZSEA(:,:)) + CALL PROFILER_n( XZZ, XRHODREF, & + XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET, & + XTSRAD, XPABST, XAER, XCIT, PSEA=ZSEA(:,:) ) DEALLOCATE(ZSEA) ELSE - CALL PROFILER_n(XTSTEP, & - XXHAT, XYHAT, XZZ,XRHODREF, & - XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET, XTSRAD, XPABST, & - XAER, MAX(XCLDFR,XICEFR), XCIT) + CALL PROFILER_n( XZZ, XRHODREF, & + XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET, & + XTSRAD, XPABST, XAER, XCIT ) END IF END IF ! @@ -2230,15 +2243,6 @@ XT_STEP_BUD = XT_STEP_BUD + ZTIME2 - ZTIME1 + XTIME_BU ! !------------------------------------------------------------------------------- ! -!* 26. FM FILE CLOSURE -! --------------- -! -IF ( tzbakfile%lopened ) THEN - CALL IO_File_close(TZBAKFILE) -END IF -! -!------------------------------------------------------------------------------- -! !* 27. CURRENT TIME REFRESH ! -------------------- ! @@ -2270,6 +2274,8 @@ IF (OEXIT) THEN CALL MENU_DIACHRO(TDIAFILE,'END') #endif CALL IO_File_close(TDIAFILE) + ! Free memory of flyer that is not present on the master process of the file (was allocated in WRITE_AIRCRAFT_BALLOON) + CALL AIRCRAFT_BALLOON_FREE_NONLOCAL( TDIAFILE ) END IF ! CALL IO_File_close(TINIFILE) diff --git a/src/mesonh/ext/radiations.f90 b/src/mesonh/ext/radiations.f90 index 43e9327e9a9106a8cfe4db3d24b093d53f4565c6..2ce3ff7dd8565c819745b9051509849eeee27520 100644 --- a/src/mesonh/ext/radiations.f90 +++ b/src/mesonh/ext/radiations.f90 @@ -134,7 +134,7 @@ USE MODD_CH_AEROSOL, ONLY: LORILAM USE MODD_CONF, ONLY: LCARTESIAN USE MODD_CST USE MODD_DUST, ONLY: LDUST -use modd_field, only: tfielddata, TYPEREAL +use modd_field, only: tfieldmetadata, TYPEREAL USE MODD_GRID , ONLY: XLAT0, XLON0 USE MODD_GRID_n , ONLY: XLAT, XLON USE MODD_IO, ONLY: TFILEDATA @@ -536,7 +536,7 @@ CHARACTER (LEN=2) :: YDIR ! Type of the data field INTEGER :: ISWB ! number of SW spectral bands (between radiations and surface schemes) INTEGER :: JSWB ! loop on SW spectral bands INTEGER :: JAE ! loop on aerosol class -TYPE(TFIELDDATA) :: TZFIELD +TYPE(TFIELDMeTaDATA) :: TZFIELD2D, TZFIELD3D ! REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PTHT,3)) :: ZDZPABST REAL :: ZMINVAL @@ -898,7 +898,7 @@ IF (CAOP=='EXPL') THEN IF (LORILAM) THEN CALL AEROOPT_GET( & - PSVT(IIB:IIE,IJB:IJE,:,NSV_AERBEG:NSV_AEREND) & !I [ppp] aerosols concentration + PSVT(IIB:IIE,IJB:IJE,:,NSV_AERBEG:NSV_AEREND) & !I [ppv] aerosols concentration ,PZZ(IIB:IIE,IJB:IJE,:) & !I [m] height of layers ,PRHODREF(IIB:IIE,IJB:IJE,:) & !I [kg/m3] density of air ,ZPIZA_AER_TMP(IIB:IIE,IJB:IJE,IKB-JPVEXT:IKE-JPVEXT,:) & !O [-] single scattering albedo of aerosols @@ -912,7 +912,7 @@ IF (CAOP=='EXPL') THEN ENDIF IF(LDUST) THEN CALL DUSTOPT_GET( & - PSVT(IIB:IIE,IJB:IJE,:,NSV_DSTBEG:NSV_DSTEND) & !I [ppp] Dust scalar concentration + PSVT(IIB:IIE,IJB:IJE,:,NSV_DSTBEG:NSV_DSTEND) & !I [ppv] Dust scalar concentration ,PZZ(IIB:IIE,IJB:IJE,:) & !I [m] height of layers ,PRHODREF(IIB:IIE,IJB:IJE,:) & !I [kg/m3] density of air ,ZPIZA_DST_TMP(IIB:IIE,IJB:IJE,IKB-JPVEXT:IKE-JPVEXT,:) & !O [-] single scattering albedo of dust @@ -927,7 +927,7 @@ IF (CAOP=='EXPL') THEN ENDIF IF(LSALT) THEN CALL SALTOPT_GET( & - PSVT(IIB:IIE,IJB:IJE,:,NSV_SLTBEG:NSV_SLTEND) & !I [ppp] sea salt scalar concentration + PSVT(IIB:IIE,IJB:IJE,:,NSV_SLTBEG:NSV_SLTEND) & !I [ppv] sea salt scalar concentration ,PZZ(IIB:IIE,IJB:IJE,:) & !I [m] height of layers ,PRHODREF(IIB:IIE,IJB:IJE,:) & !I [kg/m3] density of air ,PTHT(IIB:IIE,IJB:IJE,:) & !I [K] potential temperature @@ -2686,6 +2686,24 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_3D2(:,:,:) = 0.0 ZSTORE_2D(:,:) = 0.0 ! + TZFIELD2D = TFIELDMETADATA( & + CMNHNAME = 'generic 2D for radiations', & !Temporary name to ease identification + CSTDNAME = '', & + CDIR = 'XY', & + NGRID = 1, & + NTYPE = TYPEREAL, & + NDIMS = 2, & + LTIMEDEP = .TRUE. ) + + TZFIELD3D = TFIELDMETADATA( & + CMNHNAME = 'generic 3D for radiations', & !Temporary name to ease identification + CSTDNAME = '', & + CDIR = 'XY', & + NGRID = 1, & + NTYPE = TYPEREAL, & + NDIMS = 3, & + LTIMEDEP = .TRUE. ) + IF( KRAD_DIAG >= 1) THEN ! ILUOUT = TLUOUT%NLU @@ -2700,17 +2718,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - TZFIELD%CMNHNAME = 'SWF_DOWN' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'SWF_DOWN' - TZFIELD%CUNITS = 'W m-2' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_SWF_DOWN' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D) + TZFIELD3D%CMNHNAME = 'SWF_DOWN' + TZFIELD3D%CLONGNAME = 'SWF_DOWN' + TZFIELD3D%CUNITS = 'W m-2' + TZFIELD3D%CCOMMENT = 'X_Y_Z_SWF_DOWN' + CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK - JPVEXT @@ -2721,17 +2733,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - TZFIELD%CMNHNAME = 'SWF_UP' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'SWF_UP' - TZFIELD%CUNITS = 'W m-2' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_SWF_UP' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D) + TZFIELD3D%CMNHNAME = 'SWF_UP' + TZFIELD3D%CLONGNAME = 'SWF_UP' + TZFIELD3D%CUNITS = 'W m-2' + TZFIELD3D%CCOMMENT = 'X_Y_Z_SWF_UP' + CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK - JPVEXT @@ -2742,17 +2748,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - TZFIELD%CMNHNAME = 'LWF_DOWN' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'LWF_DOWN' - TZFIELD%CUNITS = 'W m-2' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_LWF_DOWN' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D) + TZFIELD3D%CMNHNAME = 'LWF_DOWN' + TZFIELD3D%CLONGNAME = 'LWF_DOWN' + TZFIELD3D%CUNITS = 'W m-2' + TZFIELD3D%CCOMMENT = 'X_Y_Z_LWF_DOWN' + CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK - JPVEXT @@ -2763,17 +2763,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - TZFIELD%CMNHNAME = 'LWF_UP' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'LWF_UP' - TZFIELD%CUNITS = 'W m-2' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_LWF_UP' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D) + TZFIELD3D%CMNHNAME = 'LWF_UP' + TZFIELD3D%CLONGNAME = 'LWF_UP' + TZFIELD3D%CUNITS = 'W m-2' + TZFIELD3D%CCOMMENT = 'X_Y_Z_LWF_UP' + CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK - JPVEXT @@ -2784,17 +2778,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - TZFIELD%CMNHNAME = 'LWF_NET' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'LWF_NET' - TZFIELD%CUNITS = 'W m-2' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_LWF_NET' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D) + TZFIELD3D%CMNHNAME = 'LWF_NET' + TZFIELD3D%CLONGNAME = 'LWF_NET' + TZFIELD3D%CUNITS = 'W m-2' + TZFIELD3D%CCOMMENT = 'X_Y_Z_LWF_NET' + CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK - JPVEXT @@ -2805,17 +2793,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - TZFIELD%CMNHNAME = 'SWF_NET' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'SWF_NET' - TZFIELD%CUNITS = 'W m-2' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_SWF_NET' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D) + TZFIELD3D%CMNHNAME = 'SWF_NET' + TZFIELD3D%CLONGNAME = 'SWF_NET' + TZFIELD3D%CUNITS = 'W m-2' + TZFIELD3D%CCOMMENT = 'X_Y_Z_SWF_NET' + CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D) ! DO JK=IKB,IKE DO JJ=IJB,IJE @@ -2824,17 +2806,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - TZFIELD%CMNHNAME = 'DTRAD_LW' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'DTRAD_LW' - TZFIELD%CUNITS = 'K day-1' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_DTRAD_LW' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D) + TZFIELD3D%CMNHNAME = 'DTRAD_LW' + TZFIELD3D%CLONGNAME = 'DTRAD_LW' + TZFIELD3D%CUNITS = 'K day-1' + TZFIELD3D%CCOMMENT = 'X_Y_Z_DTRAD_LW' + CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D) ! DO JK=IKB,IKE DO JJ=IJB,IJE @@ -2843,17 +2819,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - TZFIELD%CMNHNAME = 'DTRAD_SW' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'DTRAD_SW' - TZFIELD%CUNITS = 'K day-1' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_DTRAD_SW' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D) + TZFIELD3D%CMNHNAME = 'DTRAD_SW' + TZFIELD3D%CLONGNAME = 'DTRAD_SW' + TZFIELD3D%CUNITS = 'K day-1' + TZFIELD3D%CCOMMENT = 'X_Y_Z_DTRAD_SW' + CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D) ! DO JJ=IJB,IJE DO JI=IIB,IIE @@ -2861,17 +2831,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_2D(JI,JJ) = ZFLUX_TOP_GND_IRVISNIR(IIJ,5) END DO END DO - TZFIELD%CMNHNAME = 'RADSWD_VIS' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'RADSWD_VIS' - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_RADSWD_VIS' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 2 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D) + TZFIELD2D%CMNHNAME = 'RADSWD_VIS' + TZFIELD2D%CLONGNAME = 'RADSWD_VIS' + TZFIELD2D%CUNITS = '' + TZFIELD2D%CCOMMENT = 'X_Y_RADSWD_VIS' + CALL IO_Field_write(TPFILE,TZFIELD2D,ZSTORE_2D) ! DO JJ=IJB,IJE DO JI=IIB,IIE @@ -2879,17 +2843,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_2D(JI,JJ) = ZFLUX_TOP_GND_IRVISNIR(IIJ,6) END DO END DO - TZFIELD%CMNHNAME = 'RADSWD_NIR' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'RADSWD_NIR' - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_RADSWD_NIR' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 2 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D) + TZFIELD2D%CMNHNAME = 'RADSWD_NIR' + TZFIELD2D%CLONGNAME = 'RADSWD_NIR' + TZFIELD2D%CUNITS = '' + TZFIELD2D%CCOMMENT = 'X_Y_RADSWD_NIR' + CALL IO_Field_write(TPFILE,TZFIELD2D,ZSTORE_2D) ! DO JJ=IJB,IJE DO JI=IIB,IIE @@ -2897,17 +2855,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_2D(JI,JJ) = ZFLUX_TOP_GND_IRVISNIR(IIJ,4) END DO END DO - TZFIELD%CMNHNAME = 'RADLWD' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'RADLWD' - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_RADLWD' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 2 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D) + TZFIELD2D%CMNHNAME = 'RADLWD' + TZFIELD2D%CLONGNAME = 'RADLWD' + TZFIELD2D%CUNITS = '' + TZFIELD2D%CCOMMENT = 'X_Y_RADLWD' + CALL IO_Field_write(TPFILE,TZFIELD2D,ZSTORE_2D) END IF ! ! @@ -2921,17 +2873,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - TZFIELD%CMNHNAME = 'SWF_DOWN_CS' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'SWF_DOWN_CS' - TZFIELD%CUNITS = 'W m-2' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_SWF_DOWN_CS' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D) + TZFIELD3D%CMNHNAME = 'SWF_DOWN_CS' + TZFIELD3D%CLONGNAME = 'SWF_DOWN_CS' + TZFIELD3D%CUNITS = 'W m-2' + TZFIELD3D%CCOMMENT = 'X_Y_Z_SWF_DOWN_CS' + CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK - JPVEXT @@ -2942,17 +2888,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - TZFIELD%CMNHNAME = 'SWF_UP_CS' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'SWF_UP_CS' - TZFIELD%CUNITS = 'W m-2' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_SWF_UP_CS' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D) + TZFIELD3D%CMNHNAME = 'SWF_UP_CS' + TZFIELD3D%CLONGNAME = 'SWF_UP_CS' + TZFIELD3D%CUNITS = 'W m-2' + TZFIELD3D%CCOMMENT = 'X_Y_Z_SWF_UP_CS' + CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK - JPVEXT @@ -2963,17 +2903,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - TZFIELD%CMNHNAME = 'LWF_DOWN_CS' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'LWF_DOWN_CS' - TZFIELD%CUNITS = 'W m-2' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_LWF_DOWN_CS' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D) + TZFIELD3D%CMNHNAME = 'LWF_DOWN_CS' + TZFIELD3D%CLONGNAME = 'LWF_DOWN_CS' + TZFIELD3D%CUNITS = 'W m-2' + TZFIELD3D%CCOMMENT = 'X_Y_Z_LWF_DOWN_CS' + CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK - JPVEXT @@ -2984,17 +2918,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - TZFIELD%CMNHNAME = 'LWF_UP_CS' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'LWF_UP_CS' - TZFIELD%CUNITS = 'W m-2' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_LWF_UP_CS' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D) + TZFIELD3D%CMNHNAME = 'LWF_UP_CS' + TZFIELD3D%CLONGNAME = 'LWF_UP_CS' + TZFIELD3D%CUNITS = 'W m-2' + TZFIELD3D%CCOMMENT = 'X_Y_Z_LWF_UP_CS' + CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK - JPVEXT @@ -3005,17 +2933,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - TZFIELD%CMNHNAME = 'LWF_NET_CS' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'LWF_NET_CS' - TZFIELD%CUNITS = 'W m-2' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_LWF_NET_CS' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D) + TZFIELD3D%CMNHNAME = 'LWF_NET_CS' + TZFIELD3D%CLONGNAME = 'LWF_NET_CS' + TZFIELD3D%CUNITS = 'W m-2' + TZFIELD3D%CCOMMENT = 'X_Y_Z_LWF_NET_CS' + CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK - JPVEXT @@ -3026,17 +2948,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - TZFIELD%CMNHNAME = 'SWF_NET_CS' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'SWF_NET_CS' - TZFIELD%CUNITS = 'W m-2' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_SWF_NET_CS' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D) + TZFIELD3D%CMNHNAME = 'SWF_NET_CS' + TZFIELD3D%CLONGNAME = 'SWF_NET_CS' + TZFIELD3D%CUNITS = 'W m-2' + TZFIELD3D%CCOMMENT = 'X_Y_Z_SWF_NET_CS' + CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK-JPVEXT @@ -3047,17 +2963,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - TZFIELD%CMNHNAME = 'DTRAD_SW_CS' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'DTRAD_SW_CS' - TZFIELD%CUNITS = 'K day-1' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_DTRAD_SW_CS' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D) + TZFIELD3D%CMNHNAME = 'DTRAD_SW_CS' + TZFIELD3D%CLONGNAME = 'DTRAD_SW_CS' + TZFIELD3D%CUNITS = 'K day-1' + TZFIELD3D%CCOMMENT = 'X_Y_Z_DTRAD_SW_CS' + CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK-JPVEXT @@ -3068,17 +2978,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - TZFIELD%CMNHNAME = 'DTRAD_LW_CS' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'DTRAD_LW_CS' - TZFIELD%CUNITS = 'K day-1' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_DTRAD_LW_CS' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D) + TZFIELD3D%CMNHNAME = 'DTRAD_LW_CS' + TZFIELD3D%CLONGNAME = 'DTRAD_LW_CS' + TZFIELD3D%CUNITS = 'K day-1' + TZFIELD3D%CCOMMENT = 'X_Y_Z_DTRAD_LW_CS' + CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D) ! DO JJ=IJB,IJE DO JI=IIB,IIE @@ -3086,17 +2990,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_2D(JI,JJ) = ZFLUX_TOP_GND_IRVISNIR_CS(IIJ,5) END DO END DO - TZFIELD%CMNHNAME = 'RADSWD_VIS_CS' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'RADSWD_VIS_CS' - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_RADSWD_VIS_CS' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 2 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D) + TZFIELD2D%CMNHNAME = 'RADSWD_VIS_CS' + TZFIELD2D%CLONGNAME = 'RADSWD_VIS_CS' + TZFIELD2D%CUNITS = '' + TZFIELD2D%CCOMMENT = 'X_Y_RADSWD_VIS_CS' + CALL IO_Field_write(TPFILE,TZFIELD2D,ZSTORE_2D) ! DO JJ=IJB,IJE DO JI=IIB,IIE @@ -3104,17 +3002,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_2D(JI,JJ) = ZFLUX_TOP_GND_IRVISNIR_CS(IIJ,6) END DO END DO - TZFIELD%CMNHNAME = 'RADSWD_NIR_CS' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'RADSWD_NIR_CS' - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_RADSWD_NIR_CS' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 2 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D) + TZFIELD2D%CMNHNAME = 'RADSWD_NIR_CS' + TZFIELD2D%CLONGNAME = 'RADSWD_NIR_CS' + TZFIELD2D%CUNITS = '' + TZFIELD2D%CCOMMENT = 'X_Y_RADSWD_NIR_CS' + CALL IO_Field_write(TPFILE,TZFIELD2D,ZSTORE_2D) ! DO JJ=IJB,IJE DO JI=IIB,IIE @@ -3122,17 +3014,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_2D(JI,JJ) = ZFLUX_TOP_GND_IRVISNIR_CS(IIJ,4) END DO END DO - TZFIELD%CMNHNAME = 'RADLWD_CS' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'RADLWD_CS' - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_RADLWD_CS' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 2 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D) + TZFIELD2D%CMNHNAME = 'RADLWD_CS' + TZFIELD2D%CLONGNAME = 'RADLWD_CS' + TZFIELD2D%CUNITS = '' + TZFIELD2D%CCOMMENT = 'X_Y_RADLWD_CS' + CALL IO_Field_write(TPFILE,TZFIELD2D,ZSTORE_2D) END IF ! ! @@ -3143,17 +3029,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_2D(JI,JJ) = ZPLAN_ALB_VIS(IIJ) END DO END DO - TZFIELD%CMNHNAME = 'PLAN_ALB_VIS' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'PLAN_ALB_VIS' - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_PLAN_ALB_VIS' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 2 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D) + TZFIELD2D%CMNHNAME = 'PLAN_ALB_VIS' + TZFIELD2D%CLONGNAME = 'PLAN_ALB_VIS' + TZFIELD2D%CUNITS = '' + TZFIELD2D%CCOMMENT = 'X_Y_PLAN_ALB_VIS' + CALL IO_Field_write(TPFILE,TZFIELD2D,ZSTORE_2D) ! DO JJ=IJB,IJE DO JI=IIB,IIE @@ -3161,17 +3041,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_2D(JI,JJ) = ZPLAN_ALB_NIR(IIJ) END DO END DO - TZFIELD%CMNHNAME = 'PLAN_ALB_NIR' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'PLAN_ALB_NIR' - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_PLAN_ALB_NIR' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 2 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D) + TZFIELD2D%CMNHNAME = 'PLAN_ALB_NIR' + TZFIELD2D%CLONGNAME = 'PLAN_ALB_NIR' + TZFIELD2D%CUNITS = '' + TZFIELD2D%CCOMMENT = 'X_Y_PLAN_ALB_NIR' + CALL IO_Field_write(TPFILE,TZFIELD2D,ZSTORE_2D) ! DO JJ=IJB,IJE DO JI=IIB,IIE @@ -3179,17 +3053,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_2D(JI,JJ) = ZPLAN_TRA_VIS(IIJ) END DO END DO - TZFIELD%CMNHNAME = 'PLAN_TRA_VIS' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'PLAN_TRA_VIS' - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_PLAN_TRA_VIS' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 2 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D) + TZFIELD2D%CMNHNAME = 'PLAN_TRA_VIS' + TZFIELD2D%CLONGNAME = 'PLAN_TRA_VIS' + TZFIELD2D%CUNITS = '' + TZFIELD2D%CCOMMENT = 'X_Y_PLAN_TRA_VIS' + CALL IO_Field_write(TPFILE,TZFIELD2D,ZSTORE_2D) ! DO JJ=IJB,IJE DO JI=IIB,IIE @@ -3197,17 +3065,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_2D(JI,JJ) = ZPLAN_TRA_NIR(IIJ) END DO END DO - TZFIELD%CMNHNAME = 'PLAN_TRA_NIR' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'PLAN_TRA_NIR' - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_PLAN_TRA_NIR' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 2 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D) + TZFIELD2D%CMNHNAME = 'PLAN_TRA_NIR' + TZFIELD2D%CLONGNAME = 'PLAN_TRA_NIR' + TZFIELD2D%CUNITS = '' + TZFIELD2D%CCOMMENT = 'X_Y_PLAN_TRA_NIR' + CALL IO_Field_write(TPFILE,TZFIELD2D,ZSTORE_2D) ! DO JJ=IJB,IJE DO JI=IIB,IIE @@ -3215,17 +3077,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_2D(JI,JJ) = ZPLAN_ABS_VIS(IIJ) END DO END DO - TZFIELD%CMNHNAME = 'PLAN_ABS_VIS' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'PLAN_ABS_VIS' - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_PLAN_ABS_VIS' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 2 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D) + TZFIELD2D%CMNHNAME = 'PLAN_ABS_VIS' + TZFIELD2D%CLONGNAME = 'PLAN_ABS_VIS' + TZFIELD2D%CUNITS = '' + TZFIELD2D%CCOMMENT = 'X_Y_PLAN_ABS_VIS' + CALL IO_Field_write(TPFILE,TZFIELD2D,ZSTORE_2D) ! DO JJ=IJB,IJE DO JI=IIB,IIE @@ -3233,17 +3089,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_2D(JI,JJ) = ZPLAN_ABS_NIR(IIJ) END DO END DO - TZFIELD%CMNHNAME = 'PLAN_ABS_NIR' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'PLAN_ABS_NIR' - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_PLAN_ABS_NIR' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 2 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D) + TZFIELD2D%CMNHNAME = 'PLAN_ABS_NIR' + TZFIELD2D%CLONGNAME = 'PLAN_ABS_NIR' + TZFIELD2D%CUNITS = '' + TZFIELD2D%CCOMMENT = 'X_Y_PLAN_ABS_NIR' + CALL IO_Field_write(TPFILE,TZFIELD2D,ZSTORE_2D) ! ! END IF @@ -3259,17 +3109,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - TZFIELD%CMNHNAME = 'EFNEB_DOWN' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'EFNEB_DOWN' - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_EFNEB_DOWN' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D) + TZFIELD3D%CMNHNAME = 'EFNEB_DOWN' + TZFIELD3D%CLONGNAME = 'EFNEB_DOWN' + TZFIELD3D%CUNITS = '' + TZFIELD3D%CCOMMENT = 'X_Y_Z_EFNEB_DOWN' + CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK - JPVEXT @@ -3280,17 +3124,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - TZFIELD%CMNHNAME = 'EFNEB_UP' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'EFNEB_UP' - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_EFNEB_UP' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D) + TZFIELD3D%CMNHNAME = 'EFNEB_UP' + TZFIELD3D%CLONGNAME = 'EFNEB_UP' + TZFIELD3D%CUNITS = '' + TZFIELD3D%CCOMMENT = 'X_Y_Z_EFNEB_UP' + CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK - JPVEXT @@ -3301,17 +3139,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - TZFIELD%CMNHNAME = 'FLWP' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'FLWP' - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_FLWP' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D) + TZFIELD3D%CMNHNAME = 'FLWP' + TZFIELD3D%CLONGNAME = 'FLWP' + TZFIELD3D%CUNITS = '' + TZFIELD3D%CCOMMENT = 'X_Y_Z_FLWP' + CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK - JPVEXT @@ -3322,17 +3154,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - TZFIELD%CMNHNAME = 'FIWP' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'FIWP' - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_FIWP' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D) + TZFIELD3D%CMNHNAME = 'FIWP' + TZFIELD3D%CLONGNAME = 'FIWP' + TZFIELD3D%CUNITS = '' + TZFIELD3D%CCOMMENT = 'X_Y_Z_FIWP' + CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK - JPVEXT @@ -3343,17 +3169,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - TZFIELD%CMNHNAME = 'EFRADL' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'EFRADL' - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_RAD_microm' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D) + TZFIELD3D%CMNHNAME = 'EFRADL' + TZFIELD3D%CLONGNAME = 'EFRADL' + TZFIELD3D%CUNITS = '' + TZFIELD3D%CCOMMENT = 'X_Y_Z_RAD_microm' + CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK - JPVEXT @@ -3364,17 +3184,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - TZFIELD%CMNHNAME = 'EFRADI' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'EFRADI' - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_RAD_microm' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D) + TZFIELD3D%CMNHNAME = 'EFRADI' + TZFIELD3D%CLONGNAME = 'EFRADI' + TZFIELD3D%CUNITS = '' + TZFIELD3D%CCOMMENT = 'X_Y_Z_RAD_microm' + CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK - JPVEXT @@ -3385,17 +3199,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - TZFIELD%CMNHNAME = 'SW_NEB' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'SW_NEB' - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_SW_NEB' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D) + TZFIELD3D%CMNHNAME = 'SW_NEB' + TZFIELD3D%CLONGNAME = 'SW_NEB' + TZFIELD3D%CUNITS = '' + TZFIELD3D%CCOMMENT = 'X_Y_Z_SW_NEB' + CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK - JPVEXT @@ -3406,17 +3214,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - TZFIELD%CMNHNAME = 'RRTM_LW_NEB' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'RRTM_LW_NEB' - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_LW_NEB' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D) + TZFIELD3D%CMNHNAME = 'RRTM_LW_NEB' + TZFIELD3D%CLONGNAME = 'RRTM_LW_NEB' + TZFIELD3D%CUNITS = '' + TZFIELD3D%CCOMMENT = 'X_Y_Z_LW_NEB' + CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D) ! ! spectral bands IF (KSWB_OLD==6) THEN @@ -3433,41 +3235,23 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN END DO ! DO JBAND=1,KSWB_OLD - TZFIELD%CMNHNAME = 'ODAER_'//YBAND_NAME(JBAND) - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME) - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_OD_'//YBAND_NAME(JBAND) - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZTAUAZ(:,:,:,JBAND)) + TZFIELD3D%CMNHNAME = 'ODAER_'//YBAND_NAME(JBAND) + TZFIELD3D%CLONGNAME = 'ODAER_'//YBAND_NAME(JBAND) + TZFIELD3D%CUNITS = '' + TZFIELD3D%CCOMMENT = 'X_Y_Z_OD_'//YBAND_NAME(JBAND) + CALL IO_Field_write(TPFILE,TZFIELD3D,ZTAUAZ(:,:,:,JBAND)) ! - TZFIELD%CMNHNAME = 'SSAAER_'//YBAND_NAME(JBAND) - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME) - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_SSA_'//YBAND_NAME(JBAND) - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZPIZAZ(:,:,:,JBAND)) + TZFIELD3D%CMNHNAME = 'SSAAER_'//YBAND_NAME(JBAND) + TZFIELD3D%CLONGNAME = 'SSAAER_'//YBAND_NAME(JBAND) + TZFIELD3D%CUNITS = '' + TZFIELD3D%CCOMMENT = 'X_Y_Z_SSA_'//YBAND_NAME(JBAND) + CALL IO_Field_write(TPFILE,TZFIELD3D,ZPIZAZ(:,:,:,JBAND)) ! - TZFIELD%CMNHNAME = 'GAER_'//YBAND_NAME(JBAND) - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME) - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_G_'//YBAND_NAME(JBAND) - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZCGAZ(:,:,:,JBAND)) + TZFIELD3D%CMNHNAME = 'GAER_'//YBAND_NAME(JBAND) + TZFIELD3D%CLONGNAME = 'GAER_'//YBAND_NAME(JBAND) + TZFIELD3D%CUNITS = '' + TZFIELD3D%CCOMMENT = 'X_Y_Z_G_'//YBAND_NAME(JBAND) + CALL IO_Field_write(TPFILE,TZFIELD3D,ZCGAZ(:,:,:,JBAND)) ENDDO DO JBAND=1,KSWB_OLD @@ -3480,17 +3264,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - TZFIELD%CMNHNAME = 'OTH_'//YBAND_NAME(JBAND) - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME) - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_OTH_'//YBAND_NAME(JBAND) - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D) + TZFIELD3D%CMNHNAME = 'OTH_'//YBAND_NAME(JBAND) + TZFIELD3D%CLONGNAME = 'OTH_'//YBAND_NAME(JBAND) + TZFIELD3D%CUNITS = '' + TZFIELD3D%CCOMMENT = 'X_Y_Z_OTH_'//YBAND_NAME(JBAND) + CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK - JPVEXT @@ -3501,17 +3279,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - TZFIELD%CMNHNAME = 'SSA_'//YBAND_NAME(JBAND) - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME) - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_SSA_'//YBAND_NAME(JBAND) - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D) + TZFIELD3D%CMNHNAME = 'SSA_'//YBAND_NAME(JBAND) + TZFIELD3D%CLONGNAME = 'SSA_'//YBAND_NAME(JBAND) + TZFIELD3D%CUNITS = '' + TZFIELD3D%CCOMMENT = 'X_Y_Z_SSA_'//YBAND_NAME(JBAND) + CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK - JPVEXT @@ -3522,17 +3294,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - TZFIELD%CMNHNAME = 'ASF_'//YBAND_NAME(JBAND) - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME) - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_ASF_'//YBAND_NAME(JBAND) - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D) + TZFIELD3D%CMNHNAME = 'ASF_'//YBAND_NAME(JBAND) + TZFIELD3D%CLONGNAME = 'ASF_'//YBAND_NAME(JBAND) + TZFIELD3D%CUNITS = '' + TZFIELD3D%CCOMMENT = 'X_Y_Z_ASF_'//YBAND_NAME(JBAND) + CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D) END DO END IF ! @@ -3550,17 +3316,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - TZFIELD%CMNHNAME = 'O3CLIM' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'O3CLIM' - TZFIELD%CUNITS = 'Pa Pa-1' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_O3' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D) + TZFIELD3D%CMNHNAME = 'O3CLIM' + TZFIELD3D%CLONGNAME = 'O3CLIM' + TZFIELD3D%CUNITS = 'Pa Pa-1' + TZFIELD3D%CCOMMENT = 'X_Y_Z_O3' + CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D) ! !cumulated optical thickness of aerosols !cumul begin from the top of the domain, not from the TOA ! @@ -3581,17 +3341,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_2D(:,:) = ZSTORE_2D(:,:) + ZSTORE_3D(:,:,JK1) ZSTORE_3D2(:,:,JK1) = ZSTORE_2D(:,:) END DO - TZFIELD%CMNHNAME = 'CUM_AER_LAND' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'CUM_AER_LAND' - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_CUM_AER_OPT' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D2) + TZFIELD3D%CMNHNAME = 'CUM_AER_LAND' + TZFIELD3D%CLONGNAME = 'CUM_AER_LAND' + TZFIELD3D%CUNITS = '' + TZFIELD3D%CCOMMENT = 'X_Y_Z_CUM_AER_OPT' + CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D2) ! ! sea DO JK=IKB,IKE @@ -3610,17 +3364,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_3D2(:,:,JK1) = ZSTORE_2D(:,:) END DO ! - TZFIELD%CMNHNAME = 'CUM_AER_SEA' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'CUM_AER_SEA' - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_CUM_AER_OPT' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D2) + TZFIELD3D%CMNHNAME = 'CUM_AER_SEA' + TZFIELD3D%CLONGNAME = 'CUM_AER_SEA' + TZFIELD3D%CUNITS = '' + TZFIELD3D%CCOMMENT = 'X_Y_Z_CUM_AER_OPT' + CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D2) ! ! desert DO JK=IKB,IKE @@ -3639,17 +3387,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_3D2(:,:,JK1) = ZSTORE_2D(:,:) END DO ! - TZFIELD%CMNHNAME = 'CUM_AER_DES' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'CUM_AER_DES' - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_CUM_AER_OPT' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D2) + TZFIELD3D%CMNHNAME = 'CUM_AER_DES' + TZFIELD3D%CLONGNAME = 'CUM_AER_DES' + TZFIELD3D%CUNITS = '' + TZFIELD3D%CCOMMENT = 'X_Y_Z_CUM_AER_OPT' + CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D2) ! ! urban DO JK=IKB,IKE @@ -3668,17 +3410,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_3D2(:,:,JK1) = ZSTORE_2D(:,:) END DO ! - TZFIELD%CMNHNAME = 'CUM_AER_URB' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'CUM_AER_URB' - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_CUM_AER_OPT' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D2) + TZFIELD3D%CMNHNAME = 'CUM_AER_URB' + TZFIELD3D%CLONGNAME = 'CUM_AER_URB' + TZFIELD3D%CUNITS = '' + TZFIELD3D%CCOMMENT = 'X_Y_Z_CUM_AER_OPT' + CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D2) ! ! Volcanoes DO JK=IKB,IKE @@ -3697,17 +3433,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_3D2(:,:,JK1) = ZSTORE_2D(:,:) END DO ! - TZFIELD%CMNHNAME = 'CUM_AER_VOL' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'CUM_AER_VOL' - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_CUM_AER_OPT' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D2) + TZFIELD3D%CMNHNAME = 'CUM_AER_VOL' + TZFIELD3D%CLONGNAME = 'CUM_AER_VOL' + TZFIELD3D%CUNITS = '' + TZFIELD3D%CCOMMENT = 'X_Y_Z_CUM_AER_OPT' + CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D2) ! ! stratospheric background DO JK=IKB,IKE @@ -3726,17 +3456,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_3D2(:,:,JK1) = ZSTORE_2D(:,:) END DO ! - TZFIELD%CMNHNAME = 'CUM_AER_STRB' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'CUM_AER_STRB' - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_CUM_AER_OPT' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D2) + TZFIELD3D%CMNHNAME = 'CUM_AER_STRB' + TZFIELD3D%CLONGNAME = 'CUM_AER_STRB' + TZFIELD3D%CUNITS = '' + TZFIELD3D%CCOMMENT = 'X_Y_Z_CUM_AER_OPT' + CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D2) ENDIF END IF ! diff --git a/src/mesonh/ext/read_exsegn.f90 b/src/mesonh/ext/read_exsegn.f90 index 3cdde4746acdcbb8831b76422aec6f2c6819ee95..c036b6284dbf22f12927c5222fa9aed3f31121df 100644 --- a/src/mesonh/ext/read_exsegn.f90 +++ b/src/mesonh/ext/read_exsegn.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-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. @@ -21,7 +21,7 @@ INTERFACE OCONDSAMP,OBLOWSNOW, & KRIMX,KRIMY, KSV_USER, & HTURB,HTOM,ORMC01,HRAD,HDCONV,HSCONV,HCLOUD,HELEC, & - HEQNSYS,PTSTEP_ALL,HSTORAGE_TYPE,HINIFILEPGD ) + HEQNSYS,PTSTEP_ALL,HINIFILEPGD ) ! USE MODD_IO, ONLY: TFILEDATA ! @@ -72,7 +72,6 @@ CHARACTER (LEN=4), INTENT(IN) :: HCLOUD ! Kind of microphysical scheme CHARACTER (LEN=4), INTENT(IN) :: HELEC ! Kind of electrical scheme CHARACTER (LEN=*), INTENT(IN) :: HEQNSYS! type of equations' system REAL,DIMENSION(:), INTENT(INOUT):: PTSTEP_ALL ! Time STEP of ALL models -CHARACTER (LEN=*), INTENT(IN) :: HSTORAGE_TYPE ! type of initial file CHARACTER (LEN=*), INTENT(IN) :: HINIFILEPGD ! name of PGD file ! END SUBROUTINE READ_EXSEG_n @@ -95,7 +94,7 @@ END MODULE MODI_READ_EXSEG_n OCONDSAMP, OBLOWSNOW, & KRIMX,KRIMY, KSV_USER, & HTURB,HTOM,ORMC01,HRAD,HDCONV,HSCONV,HCLOUD,HELEC, & - HEQNSYS,PTSTEP_ALL,HSTORAGE_TYPE,HINIFILEPGD ) + HEQNSYS,PTSTEP_ALL,HINIFILEPGD ) ! ######################################################################### ! !!**** *READ_EXSEG_n * - routine to read the descriptor file EXSEG @@ -302,20 +301,24 @@ END MODULE MODI_READ_EXSEG_n ! P. Wautelet 09/03/2021: simplify allocation of scalar variable names ! P. Wautelet 09/03/2021: move some chemistry initializations to ini_nsv ! P. Wautelet 10/03/2021: move scalar variable name initializations to ini_nsv -! R. Honnert 23/04/2021: add ADAP mixing length and delete HRIO and BOUT from CMF_UPDRAFT +! R. Honnert 23/04/2021: add HM21 mixing length and delete HRIO and BOUT from CMF_UPDRAFT ! S. Riette 11/05/2021 HighLow cloud ! A. Costes 12/2021: add Blaze fire model +! P. Wautelet 27/04/2022: add namelist for profilers +! P. Wautelet 24/06/2022: remove check on CSTORAGE_TYPE for restart of ForeFire variables +! P. Wautelet 13/07/2022: add namelist for flyers and balloons +! P. Wautelet 19/08/2022: add namelist for aircrafts !------------------------------------------------------------------------------ ! !* 0. DECLARATIONS ! ------------ +USE MODD_AIRCRAFT_BALLOON, ONLY: NAIRCRAFTS, NBALLOONS USE MODD_BLOWSNOW USE MODD_BUDGET USE MODD_CH_AEROSOL USE MODD_CH_M9_n, ONLY : NEQ USE MODD_CONDSAMP USE MODD_CONF -USE MODD_CONF_n, ONLY: CSTORAGE_TYPE USE MODD_CONFZ ! USE MODD_DRAG_n USE MODD_DUST @@ -343,7 +346,9 @@ USE MODI_TEST_NAM_VAR USE MODN_2D_FRC USE MODN_ADV_n ! The final filling of these modules for the model n is +USE MODN_AIRCRAFTS, ONLY: AIRCRAFTS_NML_ALLOCATE, NAM_AIRCRAFTS USE MODN_BACKUP +USE MODN_BALLOONS, ONLY: BALLOONS_NML_ALLOCATE, NAM_BALLOONS USE MODN_BLANK_n USE MODN_BLOWSNOW USE MODN_BLOWSNOW_n @@ -365,6 +370,7 @@ USE MODN_ELEC USE MODN_EOL USE MODN_EOL_ADNR USE MODN_EOL_ALM +USE MODN_FLYERS #ifdef MNH_FOREFIRE USE MODN_FOREFIRE #endif @@ -394,6 +400,7 @@ USE MODN_PARAM_MFSHALL_n USE MODN_PARAM_n ! realized in subroutine ini_model n USE MODN_PARAM_RAD_n USE MODN_PASPOL +USE MODN_PROFILER_n USE MODN_RECYCL_PARAM_n USE MODN_SALT USE MODN_SERIES @@ -459,7 +466,6 @@ CHARACTER (LEN=4), INTENT(IN) :: HCLOUD ! Kind of microphysical scheme CHARACTER (LEN=4), INTENT(IN) :: HELEC ! Kind of electrical scheme CHARACTER (LEN=*), INTENT(IN) :: HEQNSYS! type of equations' system REAL,DIMENSION(:), INTENT(INOUT):: PTSTEP_ALL ! Time STEP of ALL models -CHARACTER (LEN=*), INTENT(IN) :: HSTORAGE_TYPE ! type of initial file CHARACTER (LEN=*), INTENT(IN) :: HINIFILEPGD ! name of PGD file ! !* 0.2 declarations of local variables @@ -504,6 +510,7 @@ CALL INIT_NAM_CH_MNHCN CALL INIT_NAM_CH_SOLVERN CALL INIT_NAM_SERIESN CALL INIT_NAM_BLOWSNOWN +CALL INIT_NAM_PROFILERn CALL INIT_NAM_STATIONn ! WRITE(UNIT=ILUOUT,FMT="(/,'READING THE EXSEG.NAM FILE')") @@ -559,6 +566,8 @@ CALL POSNAM(ILUSEG,'NAM_EOL_ADNR',GFOUND,ILUOUT) IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_EOL_ADNR) CALL POSNAM(ILUSEG,'NAM_EOL_ALM',GFOUND,ILUOUT) IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_EOL_ALM) +CALL POSNAM(ILUSEG,'NAM_PROFILERN',GFOUND,ILUOUT) +IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PROFILERn) CALL POSNAM(ILUSEG,'NAM_STATIONN',GFOUND,ILUOUT) IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_STATIONn) ! @@ -849,6 +858,21 @@ IF (KMI == 1) THEN IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_BLOWSNOW) CALL POSNAM(ILUSEG,'NAM_VISC',GFOUND,ILUOUT) IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_VISC) + + CALL POSNAM(ILUSEG,'NAM_FLYERS',GFOUND,ILUOUT) + IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_FLYERS) + + IF ( NAIRCRAFTS > 0 ) THEN + CALL AIRCRAFTS_NML_ALLOCATE( NAIRCRAFTS ) + CALL POSNAM(ILUSEG,'NAM_AIRCRAFTS',GFOUND,ILUOUT) + IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_AIRCRAFTS) + END IF + + IF ( NBALLOONS > 0 ) THEN + CALL BALLOONS_NML_ALLOCATE( NBALLOONS ) + CALL POSNAM(ILUSEG,'NAM_BALLOONS',GFOUND,ILUOUT) + IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_BALLOONS) + END IF END IF ! !------------------------------------------------------------------------------- @@ -892,7 +916,7 @@ CALL TEST_NAM_VAR(ILUOUT,'CLBCY(1)',CLBCY(1),'CYCL','WALL','OPEN') CALL TEST_NAM_VAR(ILUOUT,'CLBCY(2)',CLBCY(2),'CYCL','WALL','OPEN') ! CALL TEST_NAM_VAR(ILUOUT,'CTURBDIM',CTURBDIM,'1DIM','3DIM') -CALL TEST_NAM_VAR(ILUOUT,'CTURBLEN',CTURBLEN,'DELT','BL89','RM17','DEAR','BLKR','ADAP') +CALL TEST_NAM_VAR(ILUOUT,'CTURBLEN',CTURBLEN,'DELT','BL89','RM17','DEAR','BLKR','HM21') CALL TEST_NAM_VAR(ILUOUT,'CTOM',CTOM,'NONE','TM06') CALL TEST_NAM_VAR(ILUOUT,'CSUBG_AUCV',CSUBG_AUCV,'NONE','CLFR','SIGM','PDF','ADJU') CALL TEST_NAM_VAR(ILUOUT,'CSUBG_AUCV_RI',CSUBG_AUCV_RI,'NONE','CLFR','ADJU') @@ -1623,7 +1647,7 @@ ELSE END IF END IF ! -IF(CTURBLEN=='RM17' .OR. CTURBLEN=='ADAP') THEN +IF(CTURBLEN=='RM17' .OR. CTURBLEN=='HM21') THEN XCEDIS=0.34 ELSE XCEDIS=0.84 @@ -1762,7 +1786,6 @@ END IF IF (CCLOUD == 'LIMA') THEN IF (HCLOUD == 'LIMA') THEN CGETSVT(NSV_LIMA_BEG:NSV_LIMA_END)='READ' -!!JPP IF(HSTORAGE_TYPE=='TT') CGETSVT(NSV_LIMA_BEG:NSV_LIMA_END)='INIT' ELSE WRITE(UNIT=ILUOUT,FMT=9001) KMI WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR LIMA & @@ -2057,9 +2080,6 @@ END IF IF (LFOREFIRE) THEN IF (OFOREFIRE) THEN CGETSVT(NSV_FFBEG:NSV_FFEND)='READ' - IF(HSTORAGE_TYPE=='TT') THEN - CGETSVT(NSV_FFBEG:NSV_FFEND)='INIT' - END IF ELSE WRITE(UNIT=ILUOUT,FMT=9001) KMI WRITE(UNIT=ILUOUT,FMT='("THERE IS NO FOREFIRE SCALAR VARIABLES IN INITIAL FMFILE",/,& @@ -2073,9 +2093,6 @@ END IF IF (LBLAZE) THEN IF (OFIRE) THEN CGETSVT(NSV_FIREBEG:NSV_FIREEND)='READ' - IF(HSTORAGE_TYPE=='TT') THEN - CGETSVT(NSV_FIREBEG:NSV_FIREEND)='INIT' - END IF ELSE WRITE(UNIT=ILUOUT,FMT=9001) KMI WRITE(UNIT=ILUOUT,FMT='("THERE IS NO BLAZE SCALAR VARIABLES IN INITIAL FMFILE",/,& @@ -3021,6 +3038,7 @@ CALL UPDATE_NAM_CH_MNHCN CALL UPDATE_NAM_CH_SOLVERN CALL UPDATE_NAM_SERIESN CALL UPDATE_NAM_BLOWSNOWN +CALL UPDATE_NAM_PROFILERn CALL UPDATE_NAM_STATIONn !------------------------------------------------------------------------------- WRITE(UNIT=ILUOUT,FMT='(/)') diff --git a/tools/check_commit_mesonh.sh b/tools/check_commit_mesonh.sh index b31063a2c61d1dd6b853b2d36dfffa6a7dd319eb..16ee676292ee4259165fca92ac838927b075817d 100755 --- a/tools/check_commit_mesonh.sh +++ b/tools/check_commit_mesonh.sh @@ -168,10 +168,16 @@ if [ $compilation -eq 1 ]; then # tar xfz MNH-V5-5-0_PHYEX.tar.gz # rm MNH-V5-5-0_PHYEX.tar.gz # mv MNH-V5-5-0 $name - cp $TARGZDIR/MNH-V5-5-1-1abfa259.tar.gz . - tar xfz MNH-V5-5-1-1abfa259.tar.gz - rm MNH-V5-5-1-1abfa259.tar.gz - mv MNH-V5-5-1-1abfa259 $name +# cp $TARGZDIR/MNH-V5-5-1-1abfa259.tar.gz . +# tar xfz MNH-V5-5-1-1abfa259.tar.gz +# rm MNH-V5-5-1-1abfa259.tar.gz +# mv MNH-V5-5-1-1abfa259 $name + + cp $TARGZDIR/MNH-V5-5-1-4458a1e70.tar.gz . + tar xfz MNH-V5-5-1-4458a1e70.tar.gz + rm MNH-V5-5-1-4458a1e70.tar.gz + mv MNH-V5-5-1-4458a1e70 $name + cd $name/src rm -rf PHYEX