From bb9433af58cd7f9c74fd05ccc89dcc30b694eceb Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Fri, 31 Mar 2017 15:56:47 +0200 Subject: [PATCH] Philippe 31/03/2017: IO: use IO_WRITE_FIELD for several fields (from testcase 001_2Drelief) --- src/MNH/advection_metsv.f90 | 84 +++++++++++-------- src/MNH/prandtl.f90 | 79 ++++++++++++------ src/MNH/tke_eps_sources.f90 | 98 +++++++++++++---------- src/MNH/turb.f90 | 133 +++++++++++++++++++------------ src/MNH/turb_hor_dyn_corr.f90 | 59 ++++++++------ src/MNH/turb_hor_thermo_corr.f90 | 57 +++++++------ src/MNH/turb_hor_thermo_flux.f90 | 100 ++++++++++++++--------- src/MNH/turb_hor_uv.f90 | 29 +++---- src/MNH/turb_hor_uw.f90 | 25 +++--- src/MNH/turb_hor_vw.f90 | 27 +++---- src/MNH/turb_ver.f90 | 58 ++++++++------ src/MNH/turb_ver_dyn_flux.f90 | 54 ++++++++----- src/MNH/turb_ver_thermo_corr.f90 | 54 ++++++++----- src/MNH/turb_ver_thermo_flux.f90 | 54 ++++++++----- src/MNH/write_lfin.f90 | 1 - 15 files changed, 540 insertions(+), 372 deletions(-) diff --git a/src/MNH/advection_metsv.f90 b/src/MNH/advection_metsv.f90 index 7085b2e6a..0e16e2b23 100644 --- a/src/MNH/advection_metsv.f90 +++ b/src/MNH/advection_metsv.f90 @@ -140,9 +140,6 @@ END MODULE MODI_ADVECTION_METSV !* 0. DECLARATIONS ! ------------ ! -USE MODE_FM -USE MODE_ll -USE MODE_IO_ll USE MODD_PARAM_n USE MODD_CONF, ONLY : LNEUTRAL,NHALO,L1D, L2D USE MODD_CTURB, ONLY : XTKEMIN @@ -151,6 +148,12 @@ USE MODD_BUDGET USE MODD_IO_ll, ONLY: TFILEDATA USE MODD_TYPE_DATE, ONLY: DATE_TIME ! +USE MODE_ll +USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL +USE MODE_FM +USE MODE_FMWRIT +USE MODE_IO_ll +! USE MODI_CONTRAV USE MODI_PPM_RHODJ USE MODI_PPM_MET @@ -159,7 +162,6 @@ USE MODI_ADV_BOUNDARIES USE MODI_BUDGET USE MODI_GET_HALO ! -USE MODE_FMWRIT !------------------------------------------------------------------------------- ! IMPLICIT NONE @@ -256,21 +258,15 @@ TYPE(LIST_ll), POINTER :: TZFIELDS1_ll ! list of fields to exchange ! ! INTEGER :: IRESP ! Return code of FM routines -INTEGER :: IGRID ! C-grid indicator in LFIFM file -INTEGER :: ILENCH ! Length of comment string in LFIFM file -CHARACTER (LEN=28) :: YFMFILE ! Name of FM-file to write -CHARACTER (LEN=100) :: YCOMMENT ! comment string in LFIFM file -CHARACTER (LEN=16) :: YRECFM ! Name of the desired field in LFIFM file INTEGER :: ILUOUT ! logical unit INTEGER :: ISPLIT_PPM ! temporal time splitting INTEGER :: IIB, IIE, IJB, IJE +TYPE(TFIELDDATA) :: TZFIELD !------------------------------------------------------------------------------- ! !* 0. INITIALIZATION ! -------------- ! -YFMFILE = TPFILE%CNAME -! CALL GET_INDICE_ll(IIB,IJB,IIE,IJE) ! GTKE=(SIZE(PTKET)/=0) @@ -311,29 +307,49 @@ END IF !* prints in the file the 3D Courant numbers (one should flag this) ! IF (OCLOSE_OUT .AND. OCFL_WRIT .AND. (.NOT. L1D)) THEN - YRECFM ='CFLU' - YCOMMENT='X_Y_Z_CFLU (-)' - IGRID = 1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZCFLU,IGRID,ILENCH,YCOMMENT,IRESP) - - YRECFM ='CFLV' - YCOMMENT='X_Y_Z_CFLV (-)' - IGRID = 1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZCFLV,IGRID,ILENCH,YCOMMENT,IRESP) - - YRECFM ='CFLW' - YCOMMENT='X_Y_Z_CFLW (-)' - IGRID = 1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZCFLW,IGRID,ILENCH,YCOMMENT,IRESP) - - YRECFM ='CFL' - YCOMMENT='X_Y_Z_CFL (-)' - IGRID = 1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZCFL,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'CFLU' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: CFLU' + TZFIELD%CUNITS = '1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_CFLU' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZCFLU) +! + TZFIELD%CMNHNAME = 'CFLV' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: CFLV' + TZFIELD%CUNITS = '1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_CFLV' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZCFLV) +! + TZFIELD%CMNHNAME = 'CFLW' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: CFLW' + TZFIELD%CUNITS = '1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_CFLW' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZCFLW) +! + TZFIELD%CMNHNAME = 'CFL' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: CFL' + TZFIELD%CUNITS = '1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_CFL' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZCFL) END IF ! !* prints in the output file the maximum CFL diff --git a/src/MNH/prandtl.f90 b/src/MNH/prandtl.f90 index d7f5d9235..a49b24f6f 100644 --- a/src/MNH/prandtl.f90 +++ b/src/MNH/prandtl.f90 @@ -205,6 +205,8 @@ USE MODD_CTURB USE MODD_IO_ll, ONLY: TFILEDATA USE MODD_PARAMETERS ! +USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL +! USE MODI_GRADIENT_M USE MODI_EMOIST USE MODI_ETHETA @@ -285,6 +287,7 @@ INTEGER:: JSV ! loop index for the scalar variables INTEGER :: JLOOP REAL :: ZMINVAL +TYPE(TFIELDDATA) :: TZFIELD ! --------------------------------------------------------------------------- ! YFMFILE = TPFILE%CNAME @@ -527,39 +530,65 @@ END DO IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN ! ! stores the RED_TH1 - YRECFM ='RED_TH1' - YCOMMENT='X_Y_Z_RED_TH1 (0)' - IGRID = 4 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',PREDTH1,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'RED_TH1' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: RED_TH1' + TZFIELD%CUNITS = '1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_RED_TH1' + TZFIELD%NGRID = 4 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,PREDTH1) ! ! stores the RED_R1 - YRECFM ='RED_R1' - YCOMMENT='X_Y_Z_RED_R1 (0)' - IGRID = 4 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',PREDR1,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'RED_R1' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: RED_R1' + TZFIELD%CUNITS = '1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_RED_R1' + TZFIELD%NGRID = 4 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,PREDR1) ! ! stores the RED2_TH3 - YRECFM ='RED2_TH3' - YCOMMENT='X_Y_Z_RED2_TH3 (0)' - IGRID = 4 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',PRED2TH3,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'RED2_TH3' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: RED2_TH3' + TZFIELD%CUNITS = '1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_RED2_TH3' + TZFIELD%NGRID = 4 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,PRED2TH3) ! ! stores the RED2_R3 - YRECFM ='RED2_R3' - YCOMMENT='X_Y_Z_RED2_R3 (0)' - IGRID = 4 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',PRED2R3,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'RED2_R3' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: RED2_R3' + TZFIELD%CUNITS = '1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_RED2_R3' + TZFIELD%NGRID = 4 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,PRED2R3) ! ! stores the RED2_THR3 - YRECFM ='RED2_THR3' - YCOMMENT='X_Y_Z_RED2_THR3 (0)' - IGRID = 4 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',PRED2THR3,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'RED2_THR3' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: RED2_THR3' + TZFIELD%CUNITS = '1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_RED2_THR3' + TZFIELD%NGRID = 4 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,PRED2THR3) + ! END IF ! !--------------------------------------------------------------------------- diff --git a/src/MNH/tke_eps_sources.f90 b/src/MNH/tke_eps_sources.f90 index d43f24667..8d3dc9ad8 100644 --- a/src/MNH/tke_eps_sources.f90 +++ b/src/MNH/tke_eps_sources.f90 @@ -45,7 +45,8 @@ LOGICAL, INTENT(IN) :: OCLOSE_OUT ! switch for syncronous ! file opening LOGICAL, INTENT(IN) :: OTURB_DIAG ! switch to write some ! diagnostic fields in the syncronous FM-file -REAL, DIMENSION(:,:,:), INTENT(INOUT):: PDP, PTRH ! Dyn. prod. of TKE +REAL, DIMENSION(:,:,:), INTENT(INOUT):: PDP ! Dyn. prod. of TKE +REAL, DIMENSION(:,:,:), INTENT(IN) :: PTRH REAL, DIMENSION(:,:,:), INTENT(INOUT):: PTP ! Ther. prod. of TKE REAL, DIMENSION(:,:,:), INTENT(INOUT):: PRTKES ! RHOD * Jacobian * ! TKE at t+deltat @@ -188,6 +189,10 @@ USE MODD_BUDGET USE MODD_LES USE MODD_DIAG_IN_RUN, ONLY : LDIAG_IN_RUN, XCURRENT_TKE_DISS ! +USE MODE_ll +USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL +USE MODE_FMWRIT +! USE MODI_GRADIENT_M USE MODI_GRADIENT_U USE MODI_GRADIENT_V @@ -196,10 +201,8 @@ USE MODI_SHUMAN USE MODI_TRIDIAG USE MODI_TRIDIAG_TKE USE MODI_BUDGET -USE MODE_FMWRIT USE MODI_LES_MEAN_SUBGRID ! -USE MODE_ll USE MODD_ARGSLIST_ll, ONLY : LIST_ll ! USE MODI_GET_HALO @@ -257,7 +260,6 @@ REAL, DIMENSION(SIZE(PTKEM,1),SIZE(PTKEM,2),SIZE(PTKEM,3)):: & ! temporarily store some diagnostics stored in FM file ZFLX, & ! horizontal or vertical flux of the treated variable ZSOURCE, & ! source of evolution for the treated variable - ZTR, & ! turbulent transport of TKE ZKEFF ! effectif diffusion coeff = LT * SQRT( TKE ) LOGICAL,DIMENSION(SIZE(PTKEM,1),SIZE(PTKEM,2),SIZE(PTKEM,3)) :: GTKENEG ! 3D mask .T. if TKE < XTKEMIN @@ -266,14 +268,10 @@ INTEGER :: IIB,IIE,IJB,IJE,IKB,IKE ! mass points of the domain INTEGER :: IIU,IJU,IKU ! array size in the 3 dimensions INTEGER :: IRESP ! Return code of FM routines -INTEGER :: IGRID ! C-grid indicator in LFIFM file -INTEGER :: ILENCH ! Length of comment string in LFIFM file -CHARACTER (LEN=28) :: YFMFILE ! Name of FM-file to write -CHARACTER (LEN=100) :: YCOMMENT ! comment string in LFIFM file -CHARACTER (LEN=16) :: YRECFM ! Name of the desired field in LFIFM file ! TYPE(LIST_ll), POINTER :: TZFIELDDISS_ll ! list of fields to exchange INTEGER :: IINFO_ll ! return code of parallel routine +TYPE(TFIELDDATA) :: TZFIELD ! !---------------------------------------------------------------------------- NULLIFY(TZFIELDDISS_ll) @@ -281,8 +279,6 @@ NULLIFY(TZFIELDDISS_ll) !* 1. PRELIMINARY COMPUTATIONS ! ------------------------ ! -YFMFILE = TPFILE%CNAME -! CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IIU=SIZE(PTKEM,1) IJU=SIZE(PTKEM,2) @@ -303,9 +299,9 @@ ZKEFF(:,:,:) = PLM(:,:,:) * SQRT(PTKEM(:,:,:)) ! Complete the sources of TKE with the horizontal turbulent explicit transport ! IF (HTURBDIM=='3DIM') THEN - ZTR=PTRH + PTR=PTRH ELSE - ZTR=0. + PTR=0. END IF ! ! @@ -322,7 +318,7 @@ PDP(:,:,IKB) = PDP(:,:,IKB) * (1. + PDZZ(:,:,IKB+KKL)/PDZZ(:,:,IKB)) ZFLX(:,:,:) = XCED * SQRT(PTKEM(:,:,:)) / PLEPS(:,:,:) ZSOURCE(:,:,:) = PRTKES(:,:,:) / PRHODJ(:,:,:) + PRTKESM(:,:,:) / PRHODJ(:,:,:) & - PTKEM(:,:,:) / PTSTEP & - + PDP(:,:,:) + PTP(:,:,:) + ZTR(:,:,:) - PEXPL * ZFLX(:,:,:) * PTKEM(:,:,:) + + PDP(:,:,:) + PTP(:,:,:) + PTR(:,:,:) - PEXPL * ZFLX(:,:,:) * PTKEM(:,:,:) ! !* 2.2 implicit vertical TKE transport ! @@ -371,13 +367,13 @@ IF ( LLES_CALL .OR. & ! ! Compute the whole turbulent TRansport of TKE: ! - ZTR(:,:,:)= ZTR - DZF(KKA,KKU,KKL, MZM(KKA,KKU,KKL,PRHODJ) * ZFLX / PDZZ ) /PRHODJ + PTR(:,:,:)= PTR - DZF(KKA,KKU,KKL, MZM(KKA,KKU,KKL,PRHODJ) * ZFLX / PDZZ ) /PRHODJ ! ! Storage in the LES configuration ! IF (LLES_CALL) THEN CALL LES_MEAN_SUBGRID( MZF(KKA,KKU,KKL,ZFLX), X_LES_SUBGRID_WTke ) - CALL LES_MEAN_SUBGRID( -ZTR, X_LES_SUBGRID_ddz_WTke ) + CALL LES_MEAN_SUBGRID( -PTR, X_LES_SUBGRID_ddz_WTke ) END IF ! END IF @@ -425,54 +421,70 @@ PRTHLS(:,:,:) = PRTHLS(:,:,:) + XCED * SQRT(PTKEM(:,:,:)) / PLEPS(:,:,:) * & !* 4. STORES SOME DIAGNOSTICS ! ----------------------- ! +PDISS(:,:,:) = -XCED * (PTKEM(:,:,:)**1.5) / PLEPS(:,:,:) +! IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN ! ! stores the dynamic production ! - YRECFM ='DP' - YCOMMENT='X_Y_Z_DP (M**2/S**3)' - IGRID = 1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',PDP,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'DP' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: DP' + TZFIELD%CUNITS = 'm2 s-3' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_DP' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,PDP) ! ! stores the thermal production ! - YRECFM ='TP' - YCOMMENT='X_Y_Z_TP (M**2/S**3)' - IGRID = 1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',PTP,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'TP' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: TP' + TZFIELD%CUNITS = 'm2 s-3' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_TP' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,PTP) ! ! stores the whole turbulent transport ! - YRECFM ='TR' - YCOMMENT='X_Y_Z_TR (M**2/S**3)' - IGRID = 1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZTR,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'TR' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: TR' + TZFIELD%CUNITS = 'm2 s-3' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_TR' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,PTR) ! ! stores the dissipation of TKE ! - YRECFM ='DISS' - YCOMMENT='X_Y_Z_DISS (M**2/S**3)' - IGRID = 1 - ILENCH=LEN(YCOMMENT) - ZFLX(:,:,:) =-XCED * (PTKEM(:,:,:)**1.5) / PLEPS(:,:,:) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZFLX,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'DISS' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: DISS' + TZFIELD%CUNITS = 'm2 s-3' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_DISS' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,PDISS) END IF ! ! Storage in the LES configuration of the Dynamic Production of TKE and ! the dissipation of TKE ! IF (LLES_CALL ) THEN - ZFLX(:,:,:) =-XCED * (PTKEM(:,:,:)**1.5) / PLEPS(:,:,:) - CALL LES_MEAN_SUBGRID( ZFLX, X_LES_SUBGRID_DISS_Tke ) + CALL LES_MEAN_SUBGRID( PDISS, X_LES_SUBGRID_DISS_Tke ) END IF ! -PTR=0. -PDISS=0. -PTR(:,:,:) = ZTR(:,:,:) -PDISS(:,:,:) = -XCED * (PTKEM(:,:,:)**1.5) / PLEPS(:,:,:) !---------------------------------------------------------------------------- ! ! diff --git a/src/MNH/turb.f90 b/src/MNH/turb.f90 index 0d2dd3745..0af10e62d 100644 --- a/src/MNH/turb.f90 +++ b/src/MNH/turb.f90 @@ -370,8 +370,9 @@ USE MODI_TM06 USE MODI_UPDATE_LM USE MODI_GET_HALO ! -USE MODE_SBL +USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL USE MODE_FMWRIT +USE MODE_SBL ! USE MODI_EMOIST USE MODI_ETHETA @@ -536,17 +537,13 @@ INTEGER :: IKTB,IKTE ! start, end of k loops in physical domain INTEGER :: JRR,JK,JSV ! loop counters INTEGER :: JI,JJ ! loop counters INTEGER :: IRESP ! Return code of FM routines -INTEGER :: IGRID ! C-grid indicator in LFIFM file -INTEGER :: ILENCH ! Length of comment string in LFIFM file -CHARACTER (LEN=28) :: YFMFILE ! Name of FM-file to write -CHARACTER (LEN=100) :: YCOMMENT ! comment string in LFIFM file -CHARACTER (LEN=16) :: YRECFM ! Name of the desired field in LFIFM file REAL :: ZL0 ! Max. Mixing Length in Blakadar formula REAL :: ZALPHA ! proportionnality constant between Dz/2 and ! ! BL89 mixing length near the surface ! REAL :: ZTIME1, ZTIME2 REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3)):: ZTT,ZEXNE,ZLV,ZLS,ZCPH +TYPE(TFIELDDATA) :: TZFIELD ! !------------------------------------------------------------------------------------------ ALLOCATE ( & @@ -595,8 +592,6 @@ ALLOCATE ( & !* 1.PRELIMINARIES ! ------------- ! -YFMFILE = TPFILE%CNAME -! !* 1.1 Set the internal domains, ZEXPL ! ! @@ -685,17 +680,27 @@ IF (KRRL >=1) THEN ! ! IF (OCLOSE_OUT .AND. OTURB_DIAG) THEN - YRECFM ='ATHETA' - YCOMMENT='X_Y_Z_ATHETA (M)' - IGRID = 1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZATHETA,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'ATHETA' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: ATHETA' + TZFIELD%CUNITS = 'm' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_ATHETA' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZATHETA) ! - YRECFM ='AMOIST' - YCOMMENT='X_Y_Z_AMOIST (M)' - IGRID = 1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZAMOIST,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'AMOIST' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: AMOIST' + TZFIELD%CUNITS = 'm' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_AMOIST' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZAMOIST) END IF ! ELSE @@ -1019,34 +1024,47 @@ END IF PLEM = ZLM ! IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN - YCOMMENT=' ' ! ! stores the mixing length ! - YRECFM ='LM' - YCOMMENT='X_Y_Z_LM (M)' - IGRID = 1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZLM,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'LM' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: LM' + TZFIELD%CUNITS = 'm' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'Mixing length' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZLM) ! IF (KRR /= 0) THEN ! ! stores the conservative potential temperature ! - YRECFM ='THLM' - YCOMMENT='X_Y_Z_THLM (KELVIN)' - IGRID = 1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',PTHLT,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'THLM' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: THLM' + TZFIELD%CUNITS = 'K' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'Conservative potential temperature' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,PTHLT) ! ! stores the conservative mixing ratio ! - YRECFM ='RNPM' - YCOMMENT='X_Y_Z_RNPM (KG/KG)' - IGRID = 1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',PRT(:,:,:,1),IGRID,ILENCH, & - YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'RNPM' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: RNPM' + TZFIELD%CUNITS = 'kg kg-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'Conservative mixing ratio' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,PRT(:,:,:,1)) END IF END IF ! @@ -1636,11 +1654,16 @@ ENDIF ! ! Impression before modification of the mixing length IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN - YRECFM ='LM_CLEAR_SKY' - YCOMMENT='X_Y_Z_LM CLEAR SKY (M)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZLM,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'LM_CLEAR_SKY' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: LM_CLEAR_SKY' + TZFIELD%CUNITS = 'm' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_LM CLEAR SKY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZLM) ENDIF ! ! Amplification of the mixing length when the criteria are verified @@ -1656,17 +1679,27 @@ WHERE (PCEI(:,:,:) == -1.) ZLM(:,:,:) = ZLM_CLOUD(:,:,:) ! ---------- ! IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN - YRECFM ='COEF_AMPL' - YCOMMENT='X_Y_Z_COEF AMPL (-)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZCOEF_AMPL,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'COEF_AMPL' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: COEF_AMPL' + TZFIELD%CUNITS = '1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_COEF AMPL' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZCOEF_AMPL) ! - YRECFM ='LM_CLOUD' - YCOMMENT='X_Y_Z_LM CLOUD (M)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZLM_CLOUD,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'LM_CLOUD' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: LM_CLOUD' + TZFIELD%CUNITS = 'm' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_LM CLOUD' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZLM_CLOUD) ! ENDIF ! diff --git a/src/MNH/turb_hor_dyn_corr.f90 b/src/MNH/turb_hor_dyn_corr.f90 index 603704529..68f8bc93a 100644 --- a/src/MNH/turb_hor_dyn_corr.f90 +++ b/src/MNH/turb_hor_dyn_corr.f90 @@ -146,6 +146,7 @@ END MODULE MODI_TURB_HOR_DYN_CORR !* 0. DECLARATIONS ! ------------ ! +USE MODD_ARGSLIST_ll, ONLY : LIST_ll USE MODD_CST USE MODD_CONF USE MODD_CTURB @@ -154,11 +155,10 @@ USE MODD_PARAMETERS USE MODD_LES USE MODD_NSV ! -! USE MODE_ll -USE MODD_ARGSLIST_ll, ONLY : LIST_ll -! +USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL USE MODE_FMWRIT +! USE MODI_GRADIENT_M USE MODI_GRADIENT_U USE MODI_GRADIENT_V @@ -237,16 +237,11 @@ REAL, DIMENSION(SIZE(PUM,1),SIZE(PUM,2),SIZE(PUM,3)) & REAL, DIMENSION(SIZE(PUM,1),SIZE(PUM,2)) ::ZDIRSINZW ! sinus of the angle between the vertical and the normal to the orography INTEGER :: IRESP ! Return code of FM routines -INTEGER :: IGRID ! C-grid indicator in LFIFM file -INTEGER :: ILENCH ! Length of comment string in LFIFM file INTEGER :: IKB,IKE ! Index values for the Beginning and End ! mass points of the domain INTEGER :: IKU INTEGER :: JSV ! scalar loop counter -CHARACTER (LEN=28) :: YFMFILE ! Name of FM-file to write -CHARACTER (LEN=100) :: YCOMMENT ! comment string in LFIFM file -CHARACTER (LEN=16) :: YRECFM ! Name of the desired field in LFIFM file ! REAL, DIMENSION(SIZE(PUM,1),SIZE(PUM,2),SIZE(PUM,3)) :: GX_U_M_PUM REAL, DIMENSION(SIZE(PVM,1),SIZE(PVM,2),SIZE(PVM,3)) :: GY_V_M_PVM @@ -272,12 +267,11 @@ REAL :: ZTIME1, ZTIME2 REAL, DIMENSION(SIZE(PDZZ,1),SIZE(PDZZ,2),1+JPVEXT:3+JPVEXT) :: ZCOEFF , ZDZZ ! coefficients for the uncentred gradient ! computation near the ground +TYPE(TFIELDDATA) :: TZFIELD ! -------------------------------------------------------------------------- ! !* 1. PRELIMINARY COMPUTATIONS ! ------------------------ -YFMFILE = TPFILE%CNAME -! NULLIFY(TZFIELDS_ll) ! IKB = 1+JPVEXT @@ -389,11 +383,16 @@ ZFLX(:,:,IKB-1:IKB-1) = 2. * ZFLX(:,:,IKB-1:IKB-1) - ZFLX(:,:,IKB:IKB) CALL UPDATE_HALO_ll(TZFIELDS_ll, IINFO_ll) IF ( OCLOSE_OUT .AND. OTURB_FLX ) THEN ! stores <U U> - YRECFM ='U_VAR' - YCOMMENT='X_Y_Z_U_VAR ( (M/S)**2)' - IGRID = 1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZFLX,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'U_VAR' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: U_VAR' + TZFIELD%CUNITS = '(m s-1)^2' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_U_VAR' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZFLX) END IF ! ! Complete the U tendency @@ -479,11 +478,16 @@ CALL UPDATE_HALO_ll(TZFIELDS_ll, IINFO_ll) ! IF ( OCLOSE_OUT .AND. OTURB_FLX ) THEN ! stores <V V> - YRECFM ='V_VAR' - YCOMMENT='X_Y_Z_V_VAR ( (M/S)**2)' - IGRID = 1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZFLX,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'V_VAR' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: V_VAR' + TZFIELD%CUNITS = '(m s-1)^2' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_V_VAR' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZFLX) END IF ! ! Complete the V tendency @@ -560,11 +564,16 @@ ZFLX(:,:,IKB-1) = 2. * ZFLX(:,:,IKB-1) - ZFLX(:,:,IKB) ! IF ( OCLOSE_OUT .AND. OTURB_FLX ) THEN ! stores <W W> - YRECFM ='W_VAR' - YCOMMENT='X_Y_Z_W_VAR ( (M/S)**2)' - IGRID = 1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZFLX,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'W_VAR' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: W_VAR' + TZFIELD%CUNITS = '(m s-1)^2' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_W_VAR' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZFLX) END IF ! ! Complete the W tendency diff --git a/src/MNH/turb_hor_thermo_corr.f90 b/src/MNH/turb_hor_thermo_corr.f90 index 9219d2832..3dad384b8 100644 --- a/src/MNH/turb_hor_thermo_corr.f90 +++ b/src/MNH/turb_hor_thermo_corr.f90 @@ -134,9 +134,9 @@ USE MODD_IO_ll, ONLY: TFILEDATA USE MODD_PARAMETERS USE MODD_LES ! -! -! +USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL USE MODE_FMWRIT +! USE MODI_GRADIENT_M USE MODI_GRADIENT_U USE MODI_GRADIENT_V @@ -204,26 +204,20 @@ REAL, DIMENSION(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3)) & ! work arrays ! INTEGER :: IRESP ! Return code of FM routines -INTEGER :: IGRID ! C-grid indicator in LFIFM file -INTEGER :: ILENCH ! Length of comment string in LFIFM file INTEGER :: IKB,IKE,IKU ! Index values for the Beginning and End ! mass points of the domain -CHARACTER (LEN=28) :: YFMFILE ! Name of FM-file to write -CHARACTER (LEN=100) :: YCOMMENT ! comment string in LFIFM file -CHARACTER (LEN=16) :: YRECFM ! Name of the desired field in LFIFM file REAL, DIMENSION(SIZE(PDZZ,1),SIZE(PDZZ,2),1+JPVEXT:3+JPVEXT) :: ZCOEFF ! coefficients for the uncentred gradient ! computation near the ground REAL :: ZTIME1, ZTIME2 +TYPE(TFIELDDATA) :: TZFIELD ! ! --------------------------------------------------------------------------- ! !* 1. PRELIMINARY COMPUTATIONS ! ------------------------ ! -YFMFILE = TPFILE%CNAME -! IKB = 1+JPVEXT IKE = SIZE(PTHLM,3)-JPVEXT IKU = SIZE(PTHLM,3) @@ -287,11 +281,16 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. OCLOSE_OUT ) & ! ! stores <THl THl> IF ( OTURB_FLX .AND. OCLOSE_OUT ) THEN - YRECFM ='THL_HVAR' - YCOMMENT='X_Y_Z_THL_HVAR (KELVIN**2)' - IGRID = 1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZFLX,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'THL_HVAR' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: THL_HVAR' + TZFIELD%CUNITS = 'K2' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_THL_HVAR' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZFLX) END IF ! ! Storage in the LES configuration (addition to TURB_VER computation) @@ -369,11 +368,16 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. OCLOSE_OUT ) & ! ! stores <THl Rnp> IF ( OTURB_FLX .AND. OCLOSE_OUT ) THEN - YRECFM ='THLR_HCOR' - YCOMMENT='X_Y_Z_THLR_HCOR (KELVIN*KG/KG)' - IGRID = 1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZFLX,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'THLR_HCOR' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: THLR_HCOR' + TZFIELD%CUNITS = 'K kg kg-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_THLR_HCOR' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZFLX) END IF ! ! Storage in the LES configuration (addition to TURB_VER computation) @@ -431,11 +435,16 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. OCLOSE_OUT ) & ! ! stores <Rnp Rnp> IF ( OTURB_FLX .AND. OCLOSE_OUT ) THEN - YRECFM ='R_HVAR' - YCOMMENT='X_Y_Z_R_HVAR (KG/KG **2)' - IGRID = 1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZFLX,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'R_HVAR' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: R_HVAR' + TZFIELD%CUNITS = '(kg kg-1)^2' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_R_HVAR' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZFLX) END IF ! ! Storage in the LES configuration (addition to TURB_VER computation) diff --git a/src/MNH/turb_hor_thermo_flux.f90 b/src/MNH/turb_hor_thermo_flux.f90 index 3b0c8944f..9207b3894 100644 --- a/src/MNH/turb_hor_thermo_flux.f90 +++ b/src/MNH/turb_hor_thermo_flux.f90 @@ -142,9 +142,9 @@ USE MODD_IO_ll, ONLY: TFILEDATA USE MODD_PARAMETERS USE MODD_LES ! -! -! +USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL USE MODE_FMWRIT +! USE MODI_GRADIENT_M USE MODI_GRADIENT_U USE MODI_GRADIENT_V @@ -219,26 +219,20 @@ REAL, DIMENSION(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3)) & ! !! REAL, DIMENSION(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3)) :: ZVPTV INTEGER :: IRESP ! Return code of FM routines -INTEGER :: IGRID ! C-grid indicator in LFIFM file -INTEGER :: ILENCH ! Length of comment string in LFIFM file INTEGER :: IKB,IKE,IKU ! Index values for the Beginning and End ! mass points of the domain -CHARACTER (LEN=28) :: YFMFILE ! Name of FM-file to write -CHARACTER (LEN=100) :: YCOMMENT ! comment string in LFIFM file -CHARACTER (LEN=16) :: YRECFM ! Name of the desired field in LFIFM file REAL, DIMENSION(SIZE(PDZZ,1),SIZE(PDZZ,2),1+JPVEXT:3+JPVEXT) :: ZCOEFF ! coefficients for the uncentred gradient ! computation near the ground ! REAL :: ZTIME1, ZTIME2 +TYPE(TFIELDDATA) :: TZFIELD ! --------------------------------------------------------------------------- ! !* 1. PRELIMINARY COMPUTATIONS ! ------------------------ ! -YFMFILE = TPFILE%CNAME -! IKB = 1+JPVEXT IKE = SIZE(PTHLM,3)-JPVEXT IKU = SIZE(PTHLM,3) @@ -330,11 +324,16 @@ END IF ! ! stores the horizontal <U THl> IF ( OCLOSE_OUT .AND. OTURB_FLX ) THEN - YRECFM ='UTHL_FLX' - YCOMMENT='X_Y_Z_UTHL_FLX (KELVIN*M/S) ' - IGRID = 2 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZFLX,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'UTHL_FLX' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: UTHL_FLX' + TZFIELD%CUNITS = 'K m s-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_UTHL_FLX' + TZFIELD%NGRID = 2 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZFLX) END IF ! IF (KSPLT==1 .AND. LLES_CALL) THEN @@ -427,11 +426,16 @@ IF (KRR/=0) THEN ! ! stores the horizontal <U Rnp> IF ( OCLOSE_OUT .AND. OTURB_FLX ) THEN - YRECFM ='UR_FLX' - YCOMMENT='X_Y_Z_UR_FLX (KG/KG * M/S) ' - IGRID = 2 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZFLX,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'UR_FLX' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: UR_FLX' + TZFIELD%CUNITS = 'kg kg-1 m s-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_UR_FLX' + TZFIELD%NGRID = 2 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZFLX) END IF ! IF (KSPLT==1 .AND. LLES_CALL) THEN @@ -470,10 +474,16 @@ END IF !! ! !! ! stores the horizontal <U VPT> !! IF ( OCLOSE_OUT .AND. OTURB_FLX ) THEN -!! YRECFM ='UVPT_FLX' -!! YCOMMENT='X_Y_Z_UVPT_FLX (KELVIN * M/S) ' -!! IGRID = 2 -!! CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZVPTU,IGRID,ILENCH,YCOMMENT,IRESP) +!! TZFIELD%CMNHNAME = 'UVPT_FLX' +!! TZFIELD%CSTDNAME = '' +!! TZFIELD%CLONGNAME = 'MesoNH: UVPT_FLX' +!! TZFIELD%CUNITS = 'K m s-1' +!! TZFIELD%CDIR = 'XY' +!! TZFIELD%CCOMMENT = 'X_Y_Z_UVPT_FLX' +!! TZFIELD%NGRID = 2 +!! TZFIELD%NTYPE = TYPEREAL +!! TZFIELD%NDIMS = 3 +!! CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZVPTU) !! END IF !!! !!ELSE @@ -566,11 +576,16 @@ END IF ! ! stores the horizontal <V THl> IF ( OCLOSE_OUT .AND. OTURB_FLX ) THEN - YRECFM ='VTHL_FLX' - YCOMMENT='X_Y_Z_VTHL_FLX (KELVIN*M/S) ' - IGRID = 3 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZFLX,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'VTHL_FLX' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: VTHL_FLX' + TZFIELD%CUNITS = 'K m s-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_VTHL_FLX' + TZFIELD%NGRID = 3 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZFLX) END IF ! IF (KSPLT==1 .AND. LLES_CALL) THEN @@ -672,11 +687,16 @@ IF (KRR/=0) THEN ! ! stores the horizontal <V Rnp> IF ( OCLOSE_OUT .AND. OTURB_FLX ) THEN - YRECFM ='VR_FLX' - YCOMMENT='X_Y_Z_VR_FLX (KG/KG * M/S) ' - IGRID = 3 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZFLX,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'VR_FLX' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: VR_FLX' + TZFIELD%CUNITS = 'kg kg-1 m s-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_VR_FLX' + TZFIELD%NGRID = 3 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZFLX) END IF ! IF (KSPLT==1 .AND. LLES_CALL) THEN @@ -719,10 +739,16 @@ END IF !! ! !! ! stores the horizontal <V VPT> !! IF ( OCLOSE_OUT .AND. OTURB_FLX ) THEN -!! YRECFM ='VVPT_FLX' -!! YCOMMENT='X_Y_Z_VVPT_FLX (KELVIN * M/S) ' -!! IGRID = 3 -!! CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZVPTV,IGRID,ILENCH,YCOMMENT,IRESP) +!! TZFIELD%CMNHNAME = 'VVPT_FLX' +!! TZFIELD%CSTDNAME = '' +!! TZFIELD%CLONGNAME = 'MesoNH: VVPT_FLX' +!! TZFIELD%CUNITS = 'K m s-1' +!! TZFIELD%CDIR = 'XY' +!! TZFIELD%CCOMMENT = 'X_Y_Z_VVPT_FLX' +!! TZFIELD%NGRID = 3 +!! TZFIELD%NTYPE = TYPEREAL +!! TZFIELD%NDIMS = 3 +!! CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZVPTV) !! END IF !!! !!ELSE diff --git a/src/MNH/turb_hor_uv.f90 b/src/MNH/turb_hor_uv.f90 index 589fdeb33..924053d35 100644 --- a/src/MNH/turb_hor_uv.f90 +++ b/src/MNH/turb_hor_uv.f90 @@ -138,9 +138,9 @@ USE MODD_IO_ll, ONLY: TFILEDATA USE MODD_PARAMETERS USE MODD_LES ! -! -! +USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL USE MODE_FMWRIT +! USE MODI_GRADIENT_M USE MODI_GRADIENT_U USE MODI_GRADIENT_V @@ -213,33 +213,24 @@ REAL, DIMENSION(SIZE(PUM,1),SIZE(PUM,2),SIZE(PUM,3)) & REAL, DIMENSION(SIZE(PUM,1),SIZE(PUM,2)) ::ZDIRSINZW ! sinus of the angle between the vertical and the normal to the orography INTEGER :: IRESP ! Return code of FM routines -INTEGER :: IGRID ! C-grid indicator in LFIFM file -INTEGER :: ILENCH ! Length of comment string in LFIFM file INTEGER :: IKB,IKE,IKU ! Index values for the Beginning and End ! mass points of the domain -CHARACTER (LEN=28) :: YFMFILE ! Name of FM-file to write -CHARACTER (LEN=100) :: YCOMMENT ! comment string in LFIFM file -CHARACTER (LEN=16) :: YRECFM ! Name of the desired field in LFIFM file ! REAL, DIMENSION(SIZE(PUM,1),SIZE(PUM,2),SIZE(PUM,3)) :: GY_U_UV_PUM REAL, DIMENSION(SIZE(PVM,1),SIZE(PVM,2),SIZE(PVM,3)) :: GX_V_UV_PVM ! REAL :: ZTIME1, ZTIME2 +TYPE(TFIELDDATA) :: TZFIELD ! --------------------------------------------------------------------------- ! !* 1. PRELIMINARY COMPUTATIONS ! ------------------------ ! -YFMFILE = TPFILE%CNAME -! IKB = 1+JPVEXT IKE = SIZE(PUM,3)-JPVEXT IKU = SIZE(PUM,3) ! -! -ILENCH=LEN(YCOMMENT) -! ZDIRSINZW(:,:) = SQRT( 1. - PDIRCOSZW(:,:)**2 ) ! GX_V_UV_PVM = GX_V_UV(1,IKU,1,PVM,PDXX,PDZZ,PDZX) @@ -293,10 +284,16 @@ ZFLX(:,:,IKB-1:IKB-1) = 2. * MXM( MYM( ZFLX(:,:,IKB-1:IKB-1) ) ) & ! ! stores <U V> IF ( OCLOSE_OUT .AND. OTURB_FLX ) THEN - YRECFM ='UV_FLX' - YCOMMENT='X_Y_Z_UV_FLX ( (M/S) **2 ) ' - IGRID = 5 - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZFLX,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'UV_FLX' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: UV_FLX' + TZFIELD%CUNITS = '(m s-1)^2' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_UV_FLX' + TZFIELD%NGRID = 5 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZFLX) END IF ! ! diff --git a/src/MNH/turb_hor_uw.f90 b/src/MNH/turb_hor_uw.f90 index e24c21c15..146e972f0 100644 --- a/src/MNH/turb_hor_uw.f90 +++ b/src/MNH/turb_hor_uw.f90 @@ -130,7 +130,9 @@ USE MODD_PARAMETERS USE MODD_LES USE MODD_NSV ! +USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL USE MODE_FMWRIT +! USE MODI_GRADIENT_M USE MODI_GRADIENT_U USE MODI_GRADIENT_V @@ -190,26 +192,20 @@ REAL, DIMENSION(SIZE(PWM,1),SIZE(PWM,2),SIZE(PWM,3)) & ! work arrays ! INTEGER :: IRESP ! Return code of FM routines -INTEGER :: IGRID ! C-grid indicator in LFIFM file -INTEGER :: ILENCH ! Length of comment string in LFIFM file INTEGER :: IKB,IKE,IKU ! Index values for the Beginning and End ! mass points of the domain INTEGER :: JSV ! scalar loop counter -CHARACTER (LEN=28) :: YFMFILE ! Name of FM-file to write -CHARACTER (LEN=100) :: YCOMMENT ! comment string in LFIFM file -CHARACTER (LEN=16) :: YRECFM ! Name of the desired field in LFIFM file ! REAL, DIMENSION(SIZE(PWM,1),SIZE(PWM,2),SIZE(PWM,3)) :: GX_W_UW_PWM ! REAL :: ZTIME1, ZTIME2 +TYPE(TFIELDDATA) :: TZFIELD ! --------------------------------------------------------------------------- ! !* 1. PRELIMINARY COMPUTATIONS ! ------------------------ ! -YFMFILE = TPFILE%CNAME -! IKB = 1+JPVEXT IKE = SIZE(PWM,3)-JPVEXT IKU = SIZE(PWM,3) @@ -237,11 +233,16 @@ ZFLX(:,:,IKB-1)=2.*ZFLX(:,:,IKB)- ZFLX(:,:,IKB+1) ! ! stores <U W> IF ( OCLOSE_OUT .AND. OTURB_FLX ) THEN - YRECFM ='UW_HFLX' - YCOMMENT='X_Y_Z_UW_HFLX ( (M/S) **2 ) ' - IGRID = 6 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZFLX,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'UW_HFLX' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: UW_HFLX' + TZFIELD%CUNITS = '(m s-1)^2' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_UW_HFLX' + TZFIELD%NGRID = 6 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZFLX) END IF ! ! diff --git a/src/MNH/turb_hor_vw.f90 b/src/MNH/turb_hor_vw.f90 index 511cddb92..5cfd834c1 100644 --- a/src/MNH/turb_hor_vw.f90 +++ b/src/MNH/turb_hor_vw.f90 @@ -126,9 +126,9 @@ USE MODD_PARAMETERS USE MODD_LES USE MODD_NSV ! -! -! +USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL USE MODE_FMWRIT +! USE MODI_GRADIENT_M USE MODI_GRADIENT_U USE MODI_GRADIENT_V @@ -187,26 +187,20 @@ REAL, DIMENSION(SIZE(PWM,1),SIZE(PWM,2),SIZE(PWM,3)) & ! !! REAL, DIMENSION(SIZE(PWM,1),SIZE(PWM,2),SIZE(PWM,3)) :: ZVPTV INTEGER :: IRESP ! Return code of FM routines -INTEGER :: IGRID ! C-grid indicator in LFIFM file -INTEGER :: ILENCH ! Length of comment string in LFIFM file INTEGER :: IKB,IKE,IKU ! Index values for the Beginning and End ! mass points of the domain INTEGER :: JSV ! scalar loop counter -CHARACTER (LEN=28) :: YFMFILE ! Name of FM-file to write -CHARACTER (LEN=100) :: YCOMMENT ! comment string in LFIFM file -CHARACTER (LEN=16) :: YRECFM ! Name of the desired field in LFIFM file ! REAL, DIMENSION(SIZE(PWM,1),SIZE(PWM,2),SIZE(PWM,3)) :: GY_W_VW_PWM ! REAL :: ZTIME1, ZTIME2 +TYPE(TFIELDDATA) :: TZFIELD ! --------------------------------------------------------------------------- ! !* 1. PRELIMINARY COMPUTATIONS ! ------------------------ ! -YFMFILE = TPFILE%CNAME -! IKB = 1+JPVEXT IKE = SIZE(PWM,3)-JPVEXT IKU = SIZE(PWM,3) @@ -241,11 +235,16 @@ ZFLX(:,:,IKB-1)= 2.*ZFLX(:,:,IKB) - ZFLX(:,:,IKB+1) ! ! stores <V W> IF ( OCLOSE_OUT .AND. OTURB_FLX ) THEN - YRECFM ='VW_HFLX' - YCOMMENT='X_Y_Z_VW_HFLX ( (M/S) **2 ) ' - IGRID = 7 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZFLX,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'VW_HFLX' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: VW_HFLX' + TZFIELD%CUNITS = '(m s-1)^2' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_VW_HFLX' + TZFIELD%NGRID = 7 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZFLX) END IF ! ! compute the source for rho*V due to this residual flux ( the other part is diff --git a/src/MNH/turb_ver.f90 b/src/MNH/turb_ver.f90 index d828ead7f..131b99ee2 100644 --- a/src/MNH/turb_ver.f90 +++ b/src/MNH/turb_ver.f90 @@ -352,6 +352,7 @@ USE MODI_TURB_VER_SV_CORR USE MODI_LES_MEAN_SUBGRID USE MODI_SBL_DEPTH ! +USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL USE MODE_FMWRIT USE MODE_PRANDTL ! @@ -485,11 +486,6 @@ REAL, ALLOCATABLE, DIMENSION(:,:,:,:) :: & ZRED2THS, & ! 3D Redeslperger number R*2_thsv ZRED2RS ! 3D Redeslperger number R*2_rsv INTEGER :: IRESP ! Return code of FM routines -INTEGER :: IGRID ! C-grid indicator in LFIFM file -INTEGER :: ILENCH ! Length of comment string in LFIFM file -CHARACTER (LEN=28) :: YFMFILE ! Name of FM-file to write -CHARACTER (LEN=100) :: YCOMMENT ! comment string in LFIFM file -CHARACTER (LEN=16) :: YRECFM ! Name of the desired field in LFIFM file ! LOGICAL :: GUSERV ! flag to use water vapor INTEGER :: IKB,IKE ! index value for the Beginning @@ -497,6 +493,7 @@ INTEGER :: IKB,IKE ! index value for the Beginning INTEGER :: JSV ! loop counter on scalar variables REAL :: ZTIME1 REAL :: ZTIME2 +TYPE(TFIELDDATA) :: TZFIELD !---------------------------------------------------------------------------- ALLOCATE ( ZBETA(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3)) ,& ZSQRT_TKE(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3)),& @@ -529,8 +526,6 @@ ALLOCATE ( & ! !* 1. PRELIMINARIES ! ------------- -YFMFILE = TPFILE%CNAME -! PTP (:,:,:) = 0. PDP (:,:,:) = 0. ! @@ -718,33 +713,46 @@ IF ( OTURB_FLX .AND. OCLOSE_OUT ) THEN ! ! stores the Turbulent Prandtl number ! - YRECFM ='PHI3' - YCOMMENT='X_Y_Z_PHI3 (0)' - IGRID = 4 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZPHI3,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'PHI3' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: PHI3' + TZFIELD%CUNITS = '1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'Turbulent Prandtl number' + TZFIELD%NGRID = 4 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZPHI3) ! ! stores the Turbulent Schmidt number ! - YRECFM ='PSI3' - YCOMMENT='X_Y_Z_PSI3 (0)' - IGRID = 4 - ILENCH=LEN(YCOMMENT) -! - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZPSI3,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'PSI3' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: PSI3' + TZFIELD%CUNITS = '1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'Turbulent Schmidt number' + TZFIELD%NGRID = 4 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZPSI3) ! ! ! stores the Turbulent Schmidt number for the scalar variables ! + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = '1' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 4 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 DO JSV=1,NSV - WRITE(YRECFM, '("PSI_SV_",I3.3)') JSV - YCOMMENT='X_Y_Z_'//YRECFM//' (0)' - IGRID = 4 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZPSI_SV(:,:,:,JSV), & - IGRID,ILENCH,YCOMMENT,IRESP) + WRITE(TZFIELD%CMNHNAME, '("PSI_SV_",I3.3)') JSV + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CCOMMENT = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME) + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZPSI_SV(:,:,:,JSV)) END DO - +! END IF ! ! diff --git a/src/MNH/turb_ver_dyn_flux.f90 b/src/MNH/turb_ver_dyn_flux.f90 index 1c9197f1b..fe9cca182 100644 --- a/src/MNH/turb_ver_dyn_flux.f90 +++ b/src/MNH/turb_ver_dyn_flux.f90 @@ -312,6 +312,7 @@ USE MODI_LES_MEAN_SUBGRID ! USE MODI_SECOND_MNH USE MODE_ll +USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL ! IMPLICIT NONE ! @@ -395,17 +396,12 @@ REAL, DIMENSION(SIZE(PUM,1),SIZE(PUM,2),SIZE(PUM,3)) :: & ZSOURCE, & ! source of evolution for the treated variable ZKEFF ! effectif diffusion coeff = LT * SQRT( TKE ) INTEGER :: IRESP ! Return code of FM routines -INTEGER :: IGRID ! C-grid indicator in LFIFM file -INTEGER :: ILENCH ! Length of comment string in LFIFM file INTEGER :: IIB,IIE, & ! I index values for the Beginning and End IJB,IJE, & ! mass points of the domain in the 3 direct. IKB,IKE ! INTEGER :: IKT ! array size in k direction INTEGER :: IKTB,IKTE ! start, end of k loops in physical domain INTEGER :: JSV ! scalar loop counter -CHARACTER (LEN=28) :: YFMFILE ! Name of FM-file to write -CHARACTER (LEN=100) :: YCOMMENT ! comment string in LFIFM file -CHARACTER (LEN=16) :: YRECFM ! Name of the desired field in LFIFM file REAL, DIMENSION(SIZE(PDZZ,1),SIZE(PDZZ,2),1) :: ZCOEFFLXU, & ZCOEFFLXV, ZUSLOPEM, ZVSLOPEM ! coefficients for the surface flux @@ -414,13 +410,12 @@ REAL, DIMENSION(SIZE(PDZZ,1),SIZE(PDZZ,2),1) :: ZCOEFFLXU, & INTEGER :: IIU,IJU ! size of array in x,y,z directions ! REAL :: ZTIME1, ZTIME2 +TYPE(TFIELDDATA) :: TZFIELD !---------------------------------------------------------------------------- ! !* 1. PRELIMINARIES ! ------------- ! -YFMFILE = TPFILE%CNAME -! IIU=SIZE(PUM,1) IJU=SIZE(PUM,2) CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) @@ -523,11 +518,16 @@ ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) ! IF ( OTURB_FLX .AND. OCLOSE_OUT ) THEN ! stores the U wind component vertical flux - YRECFM ='UW_VFLX' - YCOMMENT='X_Y_Z_UW_VFLX (M**2/S**2)' - IGRID = 4 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZFLXZ,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'UW_VFLX' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: UW_VFLX' + TZFIELD%CUNITS = 'm^2 s-2' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'U wind component vertical flux' + TZFIELD%NGRID = 4 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZFLXZ) END IF ! ! first part of total momentum flux @@ -692,11 +692,16 @@ ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) ! IF ( OTURB_FLX .AND. OCLOSE_OUT ) THEN ! stores the V wind component vertical flux - YRECFM ='VW_VFLX' - YCOMMENT='X_Y_Z_VW_VFLX (M**2/S**2)' - IGRID = 4 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZFLXZ,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'VW_VFLX' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: VW_VFLX' + TZFIELD%CUNITS = 'm^2 s-2' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'V wind component vertical flux' + TZFIELD%NGRID = 4 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZFLXZ) END IF ! ! second part of total momentum flux @@ -807,11 +812,16 @@ IF ( OTURB_FLX .AND. OCLOSE_OUT .AND. HTURBDIM == '1DIM') THEN ! to be tested & ! +XCMFB*(4./3.)*PLM(:,:,:)/SQRT(PTKEM(:,:,:))*PTP(:,:,:) ! stores the W variance - YRECFM ='W_VVAR' - YCOMMENT='X_Y_Z_W_VVAR (M**2/S**2)' - IGRID = 1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZFLXZ,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'W_VVAR' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: W_VVAR' + TZFIELD%CUNITS = 'm^2 s-2' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_W_VVAR' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZFLXZ) END IF ! !---------------------------------------------------------------------------- diff --git a/src/MNH/turb_ver_thermo_corr.f90 b/src/MNH/turb_ver_thermo_corr.f90 index be4c50886..e7eb6cbd5 100644 --- a/src/MNH/turb_ver_thermo_corr.f90 +++ b/src/MNH/turb_ver_thermo_corr.f90 @@ -336,6 +336,7 @@ USE MODI_LES_MEAN_SUBGRID USE MODI_PRANDTL USE MODI_TRIDIAG_THERMO ! +USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL USE MODE_PRANDTL ! USE MODI_SECOND_MNH @@ -436,14 +437,9 @@ REAL, DIMENSION(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3)) :: & ZDFDDRDZ, & ! dF/d(dr/dz) Z3RDMOMENT ! 3 order term in flux or variance equation INTEGER :: IRESP ! Return code of FM routines -INTEGER :: IGRID ! C-grid indicator in LFIFM file -INTEGER :: ILENCH ! Length of comment string in LFIFM file INTEGER :: IKB,IKE ! I index values for the Beginning and End ! mass points of the domain in the 3 direct. INTEGER :: I1,I2 ! For ZCOEFF allocation -CHARACTER (LEN=28) :: YFMFILE ! Name of FM-file to write -CHARACTER (LEN=100) :: YCOMMENT ! comment string in LFIFM file -CHARACTER (LEN=16) :: YRECFM ! Name of the desired field in LFIFM file REAL, DIMENSION(:,:,:),ALLOCATABLE :: ZCOEFF ! coefficients for the uncentred gradient ! computation near the ground @@ -456,13 +452,12 @@ LOGICAL :: GFWTH ! flag to use w'2th' LOGICAL :: GFR2 ! flag to use w'r'2 LOGICAL :: GFWR ! flag to use w'2r' LOGICAL :: GFTHR ! flag to use w'th'r' +TYPE(TFIELDDATA) :: TZFIELD !---------------------------------------------------------------------------- ! !* 1. PRELIMINARIES ! ------------- ! -YFMFILE = TPFILE%CNAME -! IKB=KKA+JPVEXT_TURB*KKL IKE=KKU-JPVEXT_TURB*KKL I1=MIN(KKA+JPVEXT_TURB*KKL,KKA+JPVEXT_TURB*KKL+2*KKL) @@ -586,11 +581,16 @@ END IF ! ! stores <THl THl> IF ( OTURB_FLX .AND. OCLOSE_OUT ) THEN - YRECFM ='THL_VVAR' - YCOMMENT='X_Y_Z_THL_VVAR (KELVIN**2)' - IGRID = 1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZFLXZ,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'THL_VVAR' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: THL_VVAR' + TZFIELD%CUNITS = 'K^2' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_THL_VVAR' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZFLXZ) END IF ! ! and we store in LES configuration @@ -707,11 +707,16 @@ END IF END IF ! stores <THl Rnp> IF ( OTURB_FLX .AND. OCLOSE_OUT ) THEN - YRECFM ='THLRCONS_VCOR' - YCOMMENT='X_Y_Z_THLRCONS_VCOR (KELVIN*KG/KG)' - IGRID = 1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZFLXZ,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'THLRCONS_VCOR' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: THLRCONS_VCOR' + TZFIELD%CUNITS = 'K kg kg-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_THLRCONS_VCOR' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZFLXZ) END IF ! ! and we store in LES configuration @@ -808,11 +813,16 @@ END IF END IF ! stores <Rnp Rnp> IF ( OTURB_FLX .AND. OCLOSE_OUT ) THEN - YRECFM ='RTOT_VVAR' - YCOMMENT='X_Y_Z_RTOT_VVAR (KG/KG **2)' - IGRID = 1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZFLXZ,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'RTOT_VVAR' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: RTOT_VVAR' + TZFIELD%CUNITS = '(kg kg-1)^2' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_RTOT_VVAR' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZFLXZ) END IF ! ! and we store in LES configuration diff --git a/src/MNH/turb_ver_thermo_flux.f90 b/src/MNH/turb_ver_thermo_flux.f90 index 72b8262d6..8534d59fd 100644 --- a/src/MNH/turb_ver_thermo_flux.f90 +++ b/src/MNH/turb_ver_thermo_flux.f90 @@ -354,6 +354,7 @@ USE MODI_PRANDTL USE MODI_TRIDIAG_THERMO USE MODI_TM06_H ! +USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL USE MODE_PRANDTL ! USE MODI_SECOND_MNH @@ -464,15 +465,10 @@ REAL, DIMENSION(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3)) :: & ZDFDDRDZ, & ! dF/d(dr/dz) Z3RDMOMENT ! 3 order term in flux or variance equation INTEGER :: IRESP ! Return code of FM routines -INTEGER :: IGRID ! C-grid indicator in LFIFM file -INTEGER :: ILENCH ! Length of comment string in LFIFM file INTEGER :: IKB,IKE ! I index values for the Beginning and End ! mass points of the domain in the 3 direct. INTEGER :: IKT ! array size in k direction INTEGER :: IKTB,IKTE ! start, end of k loops in physical domain -CHARACTER (LEN=28) :: YFMFILE ! Name of FM-file to write -CHARACTER (LEN=100) :: YCOMMENT ! comment string in LFIFM file -CHARACTER (LEN=16) :: YRECFM ! Name of the desired field in LFIFM file ! REAL :: ZTIME1, ZTIME2 ! @@ -483,13 +479,12 @@ LOGICAL :: GFWTH ! flag to use w'2th' LOGICAL :: GFR2 ! flag to use w'r'2 LOGICAL :: GFWR ! flag to use w'2r' LOGICAL :: GFTHR ! flag to use w'th'r' +TYPE(TFIELDDATA) :: TZFIELD !---------------------------------------------------------------------------- ! !* 1. PRELIMINARIES ! ------------- ! -YFMFILE = TPFILE%CNAME -! IKT =SIZE(PTHLM,3) IKTE =IKT-JPVEXT_TURB IKTB =1+JPVEXT_TURB @@ -620,11 +615,16 @@ ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) IF ( OTURB_FLX .AND. OCLOSE_OUT ) THEN ! stores the conservative potential temperature vertical flux - YRECFM ='THW_FLX' - YCOMMENT='X_Y_Z_THW_FLX (K*M/S)' - IGRID = 4 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZFLXZ,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'THW_FLX' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: THW_FLX' + TZFIELD%CUNITS = 'K m s-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'Conservative potential temperature vertical flux' + TZFIELD%NGRID = 4 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZFLXZ) END IF ! ! Contribution of the conservative temperature flux to the buoyancy flux @@ -792,11 +792,16 @@ IF (KRR /= 0) THEN ! IF ( OTURB_FLX .AND. OCLOSE_OUT ) THEN ! stores the conservative mixing ratio vertical flux - YRECFM ='RCONSW_FLX' - YCOMMENT='X_Y_Z_RCONSW_FLX (KG*M/S/KG)' - IGRID = 4 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZFLXZ,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'RCONSW_FLX' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: RCONSW_FLX' + TZFIELD%CUNITS = 'kg m s-1 kg-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'Conservative mixing ratio vertical flux' + TZFIELD%NGRID = 4 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZFLXZ) END IF ! ! Contribution of the conservative water flux to the Buoyancy flux @@ -868,11 +873,16 @@ IF ( ((OTURB_FLX .AND. OCLOSE_OUT) .OR. LLES_CALL) .AND. (KRRL > 0) ) THEN ! ! store the liquid water mixing ratio vertical flux IF ( OTURB_FLX .AND. OCLOSE_OUT ) THEN - YRECFM ='RCW_FLX' - YCOMMENT='X_Y_Z_RCW_FLX (KG*M/S/KG)' - IGRID = 4 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZFLXZ,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'RCW_FLX' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: RCW_FLX' + TZFIELD%CUNITS = 'kg m s-1 kg-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'Liquid water mixing ratio vertical flux' + TZFIELD%NGRID = 4 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZFLXZ) END IF ! ! and we store in LES configuration this subgrid flux <w'rc'> diff --git a/src/MNH/write_lfin.f90 b/src/MNH/write_lfin.f90 index 57aab16bf..fbc542002 100644 --- a/src/MNH/write_lfin.f90 +++ b/src/MNH/write_lfin.f90 @@ -240,7 +240,6 @@ USE MODD_LIMA_PRECIP_SCAVENGING_n USE MODE_FMWRIT USE MODE_ll USE MODD_IO_ll, ONLY: TFILEDATA -USE MODE_FIELD, ONLY: TFIELDDATA USE MODE_IO_ll, ONLY: UPCASE,CLOSE_ll USE MODE_FIELD USE MODE_GRIDPROJ -- GitLab