From f7adf0aae5b91e14ea1ccc41613e92dd857e0137 Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Mon, 15 May 2017 16:30:10 +0200 Subject: [PATCH] Philippe 15/05/2017: IO: end of replacements of FMWRIT calls by IO_WRITE_FIELD calls --- src/LIB/SURCOUCHE/src/mode_field.f90 | 134 +++++- src/MNH/compute_r00.f90 | 98 +++-- src/MNH/goto_model_wrapper.f90 | 4 +- src/MNH/modd_deep_convectionn.f90 | 125 ++---- src/MNH/write_budget.f90 | 19 +- src/MNH/write_diachro.f90 | 4 +- src/MNH/write_lfifm1_for_diag_supp.f90 | 545 +++++++++++++------------ src/MNH/write_surf_mnh.f90 | 42 +- 8 files changed, 532 insertions(+), 439 deletions(-) diff --git a/src/LIB/SURCOUCHE/src/mode_field.f90 b/src/LIB/SURCOUCHE/src/mode_field.f90 index 667862b5a..376b78821 100644 --- a/src/LIB/SURCOUCHE/src/mode_field.f90 +++ b/src/LIB/SURCOUCHE/src/mode_field.f90 @@ -12,7 +12,7 @@ USE MODE_MSG ! IMPLICIT NONE ! -INTEGER,PRIVATE,PARAMETER :: MAXFIELDS = 200 +INTEGER,PRIVATE,PARAMETER :: MAXFIELDS = 250 INTEGER,PARAMETER :: TYPEUNDEF = -1, TYPEINT = 1, TYPELOG = 2, TYPEREAL = 3, TYPECHAR = 4, TYPEDATE = 5 ! TYPE TFIELDPTR_C0D @@ -2051,7 +2051,7 @@ TFIELDLIST(IDX)%CSTDNAME = '' TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: DIRFLASWD' TFIELDLIST(IDX)%CUNITS = 'W m-2' TFIELDLIST(IDX)%CDIR = 'XY' -TFIELDLIST(IDX)%CCOMMENT = 'X_Y_DIRect Downward Long Waves on FLAT surface' +TFIELDLIST(IDX)%CCOMMENT = 'X_Y_DIRect Downward Short Waves on FLAT surface' TFIELDLIST(IDX)%NGRID = 1 TFIELDLIST(IDX)%NTYPE = TYPEREAL TFIELDLIST(IDX)%NDIMS = 3 @@ -2064,7 +2064,7 @@ TFIELDLIST(IDX)%CSTDNAME = '' TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: SCAFLASWD' TFIELDLIST(IDX)%CUNITS = 'W m-2' TFIELDLIST(IDX)%CDIR = 'XY' -TFIELDLIST(IDX)%CCOMMENT = 'X_Y_SCAttered Downward Long Waves on FLAT surface' +TFIELDLIST(IDX)%CCOMMENT = 'X_Y_SCAttered Downward Short Waves on FLAT surface' TFIELDLIST(IDX)%NGRID = 1 TFIELDLIST(IDX)%NTYPE = TYPEREAL TFIELDLIST(IDX)%NDIMS = 3 @@ -2077,7 +2077,7 @@ TFIELDLIST(IDX)%CSTDNAME = '' TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: DIRSRFSWD' TFIELDLIST(IDX)%CUNITS = 'W m-2' TFIELDLIST(IDX)%CDIR = 'XY' -TFIELDLIST(IDX)%CCOMMENT = 'X_Y_DIRect Downward Long Waves' +TFIELDLIST(IDX)%CCOMMENT = 'X_Y_DIRect Downward Short Waves' TFIELDLIST(IDX)%NGRID = 1 TFIELDLIST(IDX)%NTYPE = TYPEREAL TFIELDLIST(IDX)%NDIMS = 3 @@ -2127,7 +2127,7 @@ IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() TFIELDLIST(IDX)%CMNHNAME = 'DIR_ALB' TFIELDLIST(IDX)%CSTDNAME = '' TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: DIR_ALB' -TFIELDLIST(IDX)%CUNITS = '' +TFIELDLIST(IDX)%CUNITS = '1' TFIELDLIST(IDX)%CDIR = 'XY' TFIELDLIST(IDX)%CCOMMENT = 'X_Y_DIRect ALBedo' TFIELDLIST(IDX)%NGRID = 1 @@ -2140,7 +2140,7 @@ IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() TFIELDLIST(IDX)%CMNHNAME = 'SCA_ALB' TFIELDLIST(IDX)%CSTDNAME = '' TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: SCA_ALB' -TFIELDLIST(IDX)%CUNITS = '' +TFIELDLIST(IDX)%CUNITS = '1' TFIELDLIST(IDX)%CDIR = 'XY' TFIELDLIST(IDX)%CCOMMENT = 'X_Y_SCAttered ALBedo' TFIELDLIST(IDX)%NGRID = 1 @@ -2153,7 +2153,7 @@ IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() TFIELDLIST(IDX)%CMNHNAME = 'EMIS' TFIELDLIST(IDX)%CSTDNAME = '' TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: EMIS' -TFIELDLIST(IDX)%CUNITS = '' +TFIELDLIST(IDX)%CUNITS = '1' TFIELDLIST(IDX)%CDIR = 'XY' TFIELDLIST(IDX)%CCOMMENT = 'X_Y_EMISsivity' TFIELDLIST(IDX)%NGRID = 1 @@ -2285,6 +2285,84 @@ ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL)) IDX = IDX+1 ! IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'DSVCONV' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: DSVCONV' +TFIELDLIST(IDX)%CUNITS = 's-1' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'Tracer tendencies' +TFIELDLIST(IDX)%NGRID = 1 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 4 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X4D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'PRLFLXCONV' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: PRLFLXCONV' +TFIELDLIST(IDX)%CUNITS = 'm s-1' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'X_Y_Liquid Precipitation Convective Flux' +TFIELDLIST(IDX)%NGRID = 4 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 3 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'PRSFLXCONV' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: PRSFLXCONV' +TFIELDLIST(IDX)%CUNITS = 'm s-1' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'X_Y_Solid Precipitation Convective Flux' +TFIELDLIST(IDX)%NGRID = 4 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 3 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'UMFCONV' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: UMFCONV' +TFIELDLIST(IDX)%CUNITS = 'kg s-1 m-2' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'X_Y_Updraft Convective Mass Flux' +TFIELDLIST(IDX)%NGRID = 4 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 3 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'DMFCONV' +TFIELDLIST(IDX)%CSTDNAME = 'X_Y_Downdraft Convective Mass Flux' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: DMFCONV' +TFIELDLIST(IDX)%CUNITS = 'kg s-1 m-2' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = '' +TFIELDLIST(IDX)%NGRID = 4 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 3 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'MFCONV' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: MFCONV' +TFIELDLIST(IDX)%CUNITS = 'kg s-1 m-2' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'X_Y_Convective Mass Flux' +TFIELDLIST(IDX)%NGRID = 4 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 3 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() TFIELDLIST(IDX)%CMNHNAME = 'CAPE' TFIELDLIST(IDX)%CSTDNAME = '' TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: CAPE' @@ -2298,6 +2376,32 @@ ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL)) IDX = IDX+1 ! IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'CLTOPCONV' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: CLTOPCONV' +TFIELDLIST(IDX)%CUNITS = '1' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'Convective cloud top level' +TFIELDLIST(IDX)%NGRID = 1 +TFIELDLIST(IDX)%NTYPE = TYPEINT +TFIELDLIST(IDX)%NDIMS = 2 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_N2D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'CLBASCONV' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: CLBASCONV' +TFIELDLIST(IDX)%CUNITS = '1' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'Convective cloud base level' +TFIELDLIST(IDX)%NGRID = 1 +TFIELDLIST(IDX)%NTYPE = TYPEINT +TFIELDLIST(IDX)%NDIMS = 2 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_N2D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() TFIELDLIST(IDX)%CMNHNAME = 'IC_RATE' TFIELDLIST(IDX)%CSTDNAME = '' TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: IC_RATE' @@ -3462,7 +3566,15 @@ IF (TRIM(CPROGRAM) /= 'PGD' .AND. TRIM(CPROGRAM) /= 'NESPGD' .AND. TRIM(CPROGRAM CALL FIND_FIELD_ID_FROM_MNHNAME('PRCONV', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XPRCONV CALL FIND_FIELD_ID_FROM_MNHNAME('PACCONV', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XPACCONV CALL FIND_FIELD_ID_FROM_MNHNAME('PRSCONV', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XPRSCONV + CALL FIND_FIELD_ID_FROM_MNHNAME('DSVCONV', IID,IRESP); TFIELDLIST(IID)%TFIELD_X4D(KFROM)%DATA => XDSVCONV + CALL FIND_FIELD_ID_FROM_MNHNAME('PRLFLXCONV', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XPRLFLXCONV + CALL FIND_FIELD_ID_FROM_MNHNAME('PRSFLXCONV', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XPRSFLXCONV + CALL FIND_FIELD_ID_FROM_MNHNAME('UMFCONV', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XUMFCONV + CALL FIND_FIELD_ID_FROM_MNHNAME('DMFCONV', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XDMFCONV + CALL FIND_FIELD_ID_FROM_MNHNAME('MFCONV', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XMFCONV CALL FIND_FIELD_ID_FROM_MNHNAME('CAPE', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XCAPE + CALL FIND_FIELD_ID_FROM_MNHNAME('CLTOPCONV', IID,IRESP); TFIELDLIST(IID)%TFIELD_N2D(KFROM)%DATA => NCLTOPCONV + CALL FIND_FIELD_ID_FROM_MNHNAME('CLBASCONV', IID,IRESP); TFIELDLIST(IID)%TFIELD_N2D(KFROM)%DATA => NCLBASCONV CALL FIND_FIELD_ID_FROM_MNHNAME('IC_RATE', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XIC_RATE CALL FIND_FIELD_ID_FROM_MNHNAME('CG_RATE', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XCG_RATE CALL FIND_FIELD_ID_FROM_MNHNAME('IC_TOTAL_NB',IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XIC_TOTAL_NUMBER @@ -3854,7 +3966,15 @@ IF (TRIM(CPROGRAM) /= 'PGD' .AND. TRIM(CPROGRAM) /= 'NESPGD' .AND. TRIM(CPROGRAM CALL FIND_FIELD_ID_FROM_MNHNAME('PRCONV', IID,IRESP); XPRCONV => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA CALL FIND_FIELD_ID_FROM_MNHNAME('PACCONV', IID,IRESP); XPACCONV => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA CALL FIND_FIELD_ID_FROM_MNHNAME('PRSCONV', IID,IRESP); XPRSCONV => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA + CALL FIND_FIELD_ID_FROM_MNHNAME('DSVCONV', IID,IRESP); XDSVCONV => TFIELDLIST(IID)%TFIELD_X4D(KTO)%DATA + CALL FIND_FIELD_ID_FROM_MNHNAME('PRLFLXCONV', IID,IRESP); XPRLFLXCONV => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA + CALL FIND_FIELD_ID_FROM_MNHNAME('PRSFLXCONV', IID,IRESP); XPRSFLXCONV => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA + CALL FIND_FIELD_ID_FROM_MNHNAME('UMFCONV', IID,IRESP); XUMFCONV => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA + CALL FIND_FIELD_ID_FROM_MNHNAME('DMFCONV', IID,IRESP); XDMFCONV => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA + CALL FIND_FIELD_ID_FROM_MNHNAME('MFCONV', IID,IRESP); XMFCONV => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA CALL FIND_FIELD_ID_FROM_MNHNAME('CAPE', IID,IRESP); XCAPE => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA + CALL FIND_FIELD_ID_FROM_MNHNAME('CLTOPCONV', IID,IRESP); NCLTOPCONV => TFIELDLIST(IID)%TFIELD_N2D(KTO)%DATA + CALL FIND_FIELD_ID_FROM_MNHNAME('CLBASCONV', IID,IRESP); NCLBASCONV => TFIELDLIST(IID)%TFIELD_N2D(KTO)%DATA CALL FIND_FIELD_ID_FROM_MNHNAME('IC_RATE', IID,IRESP); XIC_RATE => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA CALL FIND_FIELD_ID_FROM_MNHNAME('CG_RATE', IID,IRESP); XCG_RATE => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA CALL FIND_FIELD_ID_FROM_MNHNAME('IC_TOTAL_NB',IID,IRESP); XIC_TOTAL_NUMBER => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA diff --git a/src/MNH/compute_r00.f90 b/src/MNH/compute_r00.f90 index 7425b458a..a537e5e55 100644 --- a/src/MNH/compute_r00.f90 +++ b/src/MNH/compute_r00.f90 @@ -79,6 +79,7 @@ USE MODI_SHUMAN ! USE MODD_VAR_ll ! +USE MODE_FIELD USE MODE_FM USE MODE_FMWRIT USE MODE_FMREAD @@ -102,7 +103,6 @@ INTEGER :: ININAR ! number of articles present in INTEGER :: ITYPE ! type of file (conv2dia and transfer) ! CHARACTER(LEN=100) :: YCOMMENT -CHARACTER(LEN=28) :: YFMFILE ! Name of FM-file to write CHARACTER(LEN=16) :: YRECFM INTEGER :: IFILECUR,JFILECUR,NIU,NJU,NKU,IGRID,ILENCH INTEGER :: NFILES,JLOOP @@ -126,6 +126,7 @@ INTEGER :: INBR_START REAL :: ZXMAX,ZYMAX,ZZMAX ! domain extrema INTEGER, DIMENSION(100) :: NBRFILES INTEGER :: IKU +TYPE(TFIELDDATA) :: TZFIELD ! !------------------------------------------------------------------------------- ! @@ -136,8 +137,6 @@ ITYPE=2 ZSPVAL=-1.E+11 IKU=SIZE(XZHAT) ! -YFMFILE = TPFILE%CNAME -! !------------------------------------------------------------------------------- ! !* 2.0 FIND THE FILE TO BE TREATED AND THE INIT-SV FILES @@ -297,31 +296,42 @@ DO JFILECUR=1,NFILES ! computing the new origin ! IF (GSTART) THEN - IGRID=1 PRINT *,'INBR_START',INBR_START,' NBRFILES(JFILECUR)',NBRFILES(JFILECUR) - WRITE(YRECFM,'(A2,I2.2)')'X0',INBR_START - WRITE(YCOMMENT,'(A8,I2.2)')'X_Y_Z_X0',INBR_START - YCOMMENT=YCOMMENT(1:10)//YDATE//' (KM)' - PRINT *,'YCOMMENT = ',YCOMMENT - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',ZX00(:,:,:),IGRID,ILENCH, & - YCOMMENT,IRESP) + WRITE(TZFIELD%CMNHNAME,'(A2,I2.2)')'X0',INBR_START + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'km' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)//YDATE + PRINT *,'YCOMMENT = ',TRIM(TZFIELD%CCOMMENT) + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZX00(:,:,:)) ! - WRITE(YRECFM,'(A2,I2.2)')'Y0',INBR_START - WRITE(YCOMMENT,'(A8,I2.2)')'X_Y_Z_Y0',INBR_START - YCOMMENT=YCOMMENT(1:10)//YDATE//' (KM)' - PRINT *,'YCOMMENT = ',YCOMMENT - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',ZY00(:,:,:),IGRID,ILENCH, & - YCOMMENT,IRESP) + WRITE(TZFIELD%CMNHNAME,'(A2,I2.2)')'Y0',INBR_START + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'km' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)//YDATE + PRINT *,'YCOMMENT = ',TRIM(TZFIELD%CCOMMENT) + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZY00(:,:,:)) ! - WRITE(YRECFM,'(A2,I2.2)')'Z0',INBR_START - WRITE(YCOMMENT,'(A8,I2.2)')'X_Y_Z_Z0',INBR_START - YCOMMENT=YCOMMENT(1:10)//YDATE//' (KM)' - PRINT *,'YCOMMENT = ',YCOMMENT - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',ZZ00(:,:,:),IGRID,ILENCH, & - YCOMMENT,IRESP) + WRITE(TZFIELD%CMNHNAME,'(A2,I2.2)')'Z0',INBR_START + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'km' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)//YDATE + PRINT *,'YCOMMENT = ',TRIM(TZFIELD%CCOMMENT) + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZZ00(:,:,:)) END IF ! ! @@ -339,23 +349,29 @@ DO JFILECUR=1,NFILES ! IF (GSTART) THEN ! - WRITE(YRECFM,'(A3,I2.2)')'TH0',INBR_START - WRITE(YCOMMENT,'(A9,I2.2)')'X_Y_Z_TH0',INBR_START - YCOMMENT=YCOMMENT(1:11)//YDATE//' (K)' - PRINT *,'YCOMMENT = ',YCOMMENT - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY', & - ZWORK1(:,:,:),IGRID,ILENCH, & - YCOMMENT,IRESP) + WRITE(TZFIELD%CMNHNAME,'(A3,I2.2)')'TH0',INBR_START + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'K' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)//YDATE + PRINT *,'YCOMMENT = ',TRIM(TZFIELD%CCOMMENT) + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK1(:,:,:)) ! - WRITE(YRECFM,'(A3,I2.2)')'RV0',INBR_START - WRITE(YCOMMENT,'(A9,I2.2)')'X_Y_Z_RV0',INBR_START - YCOMMENT=YCOMMENT(1:11)//YDATE//' (G/KG)' - PRINT *,'YCOMMENT = ',YCOMMENT - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY', & - ZWORK2(:,:,:),IGRID,ILENCH, & - YCOMMENT,IRESP) + WRITE(TZFIELD%CMNHNAME,'(A3,I2.2)')'RV0',INBR_START + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'g kg-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)//YDATE + PRINT *,'YCOMMENT = ',TRIM(TZFIELD%CCOMMENT) + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK2(:,:,:)) ENDIF !* 4.4 compute the origin of the particules using one more segment ! diff --git a/src/MNH/goto_model_wrapper.f90 b/src/MNH/goto_model_wrapper.f90 index de8216031..cc4c35b41 100644 --- a/src/MNH/goto_model_wrapper.f90 +++ b/src/MNH/goto_model_wrapper.f90 @@ -39,7 +39,7 @@ USE MODD_CLOUDPAR_n USE MODD_CLOUD_MF_n USE MODD_CONF_n USE MODD_CURVCOR_n -USE MODD_DEEP_CONVECTION_n +!USE MODD_DEEP_CONVECTION_n USE MODD_DIM_n USE MODD_DUMMY_GR_FIELD_n USE MODD_DYN_n @@ -135,7 +135,7 @@ CALL CLOUDPAR_GOTO_MODEL(KFROM, KTO) CALL CLOUD_MF_GOTO_MODEL(KFROM, KTO) CALL CONF_GOTO_MODEL(KFROM, KTO) CALL CURVCOR_GOTO_MODEL(KFROM, KTO) -CALL DEEP_CONVECTION_GOTO_MODEL(KFROM, KTO) +!CALL DEEP_CONVECTION_GOTO_MODEL(KFROM, KTO) CALL DIM_GOTO_MODEL(KFROM, KTO) CALL DUMMY_GR_FIELD_GOTO_MODEL(KFROM, KTO) CALL DYN_GOTO_MODEL(KFROM, KTO) diff --git a/src/MNH/modd_deep_convectionn.f90 b/src/MNH/modd_deep_convectionn.f90 index b86efd55f..a4311353c 100644 --- a/src/MNH/modd_deep_convectionn.f90 +++ b/src/MNH/modd_deep_convectionn.f90 @@ -43,112 +43,39 @@ USE MODD_PARAMETERS, ONLY: JPMODELMAX IMPLICIT NONE -TYPE DEEP_CONVECTION_t -! -! INTEGER, DIMENSION(:,:),POINTER :: NCOUNTCONV=>NULL()! convective counter used -! ! to refresh the -! ! convective tendencies -! REAL, DIMENSION(:,:,:) ,POINTER :: XDTHCONV=>NULL() ! convective TH tendency (K/s) -! REAL, DIMENSION(:,:,:) ,POINTER :: XDRVCONV=>NULL() ! convective r_v tendency (1/s) -! REAL, DIMENSION(:,:,:) ,POINTER :: XDRCCONV=>NULL() ! convective r_c tendency (1/s) -! REAL, DIMENSION(:,:,:) ,POINTER :: XDRICONV=>NULL() ! convective r_i tendency (1/s) -! REAL, DIMENSION(:,:) ,POINTER :: XPRCONV=>NULL() ! total precipitation rate (m/s) -! REAL, DIMENSION(:,:) ,POINTER :: XPRSCONV=>NULL() ! solid precipitation rate (m/s) -! REAL, DIMENSION(:,:) ,POINTER :: XPACCONV=>NULL() ! accumulated convective -! ! precipitation (m) - REAL, DIMENSION(:,:,:,:),POINTER ::XDSVCONV=>NULL() ! tracer tendencies (1/s) -! diagnostic variables - REAL, DIMENSION(:,:,:) ,POINTER :: XUMFCONV=>NULL() ! updraft mass flux (kg/s m2) - REAL, DIMENSION(:,:,:) ,POINTER :: XDMFCONV=>NULL() ! downdraft mass flux (kg/s m2) - REAL, DIMENSION(:,:,:) ,POINTER :: XMFCONV=>NULL() ! convective mass flux (kg/s m2) - REAL, DIMENSION(:,:,:) ,POINTER ::XPRLFLXCONV=>NULL()! liquid precip flux (m/s) - REAL, DIMENSION(:,:,:) ,POINTER ::XPRSFLXCONV=>NULL()! solid precip flux (m/s) -! REAL, DIMENSION(:,:) ,POINTER :: XCAPE=>NULL() ! CAPE (J/kg) - INTEGER,DIMENSION(:,:), POINTER :: NCLTOPCONV=>NULL()! convective cloud top level - INTEGER,DIMENSION(:,:), POINTER :: NCLBASCONV=>NULL()! convective cloud base level -! -! REAL, DIMENSION(:,:) , POINTER :: XIC_RATE=>NULL() ! IC lightning frequency -! REAL, DIMENSION(:,:) , POINTER :: XCG_RATE=>NULL() ! CG lightning frequency -! REAL, DIMENSION(:,:) , POINTER :: XIC_TOTAL_NUMBER=>NULL() !Total number of IC -! REAL, DIMENSION(:,:) , POINTER :: XCG_TOTAL_NUMBER=>NULL() !Total number of CG - -END TYPE DEEP_CONVECTION_t - -TYPE(DEEP_CONVECTION_t), DIMENSION(JPMODELMAX), TARGET, SAVE :: DEEP_CONVECTION_MODEL +INTEGER, DIMENSION(:,:),POINTER :: NCOUNTCONV=>NULL() ! convective counter used + ! to refresh the + ! convective tendencies +REAL, DIMENSION(:,:,:) ,POINTER :: XDTHCONV=>NULL() ! convective TH tendency (K/s) +REAL, DIMENSION(:,:,:) ,POINTER :: XDRVCONV=>NULL() ! convective r_v tendency (1/s) +REAL, DIMENSION(:,:,:) ,POINTER :: XDRCCONV=>NULL() ! convective r_c tendency (1/s) +REAL, DIMENSION(:,:,:) ,POINTER :: XDRICONV=>NULL() ! convective r_i tendency (1/s) +REAL, DIMENSION(:,:) ,POINTER :: XPRCONV=>NULL() ! total precipitation rate (m/s) +REAL, DIMENSION(:,:) ,POINTER :: XPRSCONV=>NULL() ! solid precipitation rate (m/s) +REAL, DIMENSION(:,:) ,POINTER :: XPACCONV=>NULL() ! accumulated convective + ! precipitation (m) +REAL, DIMENSION(:,:,:,:),POINTER ::XDSVCONV=>NULL() ! tracer tendencies (1/s) +!diagnostic variables +REAL, DIMENSION(:,:,:) ,POINTER :: XUMFCONV=>NULL() ! updraft mass flux (kg/s m2) +REAL, DIMENSION(:,:,:) ,POINTER :: XDMFCONV=>NULL() ! downdraft mass flux (kg/s m2) +REAL, DIMENSION(:,:,:) ,POINTER :: XMFCONV=>NULL() ! convective mass flux (kg/s m2) +REAL, DIMENSION(:,:,:) ,POINTER :: XPRLFLXCONV=>NULL() ! liquid precip flux (m/s) +REAL, DIMENSION(:,:,:) ,POINTER :: XPRSFLXCONV=>NULL() ! solid precip flux (m/s) +REAL, DIMENSION(:,:) ,POINTER :: XCAPE=>NULL() ! CAPE (J/kg) +INTEGER,DIMENSION(:,:), POINTER :: NCLTOPCONV=>NULL() ! convective cloud top level +INTEGER,DIMENSION(:,:), POINTER :: NCLBASCONV=>NULL() ! convective cloud base level -INTEGER, DIMENSION(:,:),POINTER :: NCOUNTCONV=>NULL() -REAL, DIMENSION(:,:,:) ,POINTER :: XDTHCONV=>NULL() -REAL, DIMENSION(:,:,:) ,POINTER :: XDRVCONV=>NULL() -REAL, DIMENSION(:,:,:) ,POINTER :: XDRCCONV=>NULL() -REAL, DIMENSION(:,:,:) ,POINTER :: XDRICONV=>NULL() -REAL, DIMENSION(:,:) ,POINTER :: XPRCONV=>NULL() -REAL, DIMENSION(:,:) ,POINTER :: XPRSCONV=>NULL() -REAL, DIMENSION(:,:) ,POINTER :: XPACCONV=>NULL() -REAL, DIMENSION(:,:,:,:),POINTER :: XDSVCONV=>NULL() -REAL, DIMENSION(:,:,:) ,POINTER :: XUMFCONV=>NULL() -REAL, DIMENSION(:,:,:) ,POINTER :: XDMFCONV=>NULL() -REAL, DIMENSION(:,:,:) ,POINTER :: XMFCONV=>NULL() -REAL, DIMENSION(:,:,:) ,POINTER :: XPRLFLXCONV=>NULL() -REAL, DIMENSION(:,:,:) ,POINTER :: XPRSFLXCONV=>NULL() -REAL, DIMENSION(:,:) ,POINTER :: XCAPE=>NULL() -INTEGER,DIMENSION(:,:), POINTER :: NCLTOPCONV=>NULL() -INTEGER,DIMENSION(:,:), POINTER :: NCLBASCONV=>NULL() -REAL, DIMENSION(:,:) ,POINTER :: XIC_RATE=>NULL() -REAL, DIMENSION(:,:) ,POINTER :: XCG_RATE=>NULL() -REAL, DIMENSION(:,:) ,POINTER :: XIC_TOTAL_NUMBER=>NULL() -REAL, DIMENSION(:,:) ,POINTER :: XCG_TOTAL_NUMBER=>NULL() +REAL, DIMENSION(:,:) , POINTER :: XIC_RATE=>NULL() ! IC lightning frequency +REAL, DIMENSION(:,:) , POINTER :: XCG_RATE=>NULL() ! CG lightning frequency +REAL, DIMENSION(:,:) , POINTER :: XIC_TOTAL_NUMBER=>NULL() ! Total number of IC +REAL, DIMENSION(:,:) , POINTER :: XCG_TOTAL_NUMBER=>NULL() ! Total number of CG CONTAINS SUBROUTINE DEEP_CONVECTION_GOTO_MODEL(KFROM, KTO) -INTEGER, INTENT(IN) :: KFROM, KTO ! -! Save current state for allocated arrays -!DEEP_CONVECTION_MODEL(KFROM)%NCOUNTCONV=>NCOUNTCONV !Done in FIELDLIST_GOTO_MODEL -!DEEP_CONVECTION_MODEL(KFROM)%XDTHCONV=>XDTHCONV !Done in FIELDLIST_GOTO_MODEL -!DEEP_CONVECTION_MODEL(KFROM)%XDRVCONV=>XDRVCONV !Done in FIELDLIST_GOTO_MODEL -!DEEP_CONVECTION_MODEL(KFROM)%XDRCCONV=>XDRCCONV !Done in FIELDLIST_GOTO_MODEL -!DEEP_CONVECTION_MODEL(KFROM)%XDRICONV=>XDRICONV !Done in FIELDLIST_GOTO_MODEL -!DEEP_CONVECTION_MODEL(KFROM)%XPRCONV=>XPRCONV !Done in FIELDLIST_GOTO_MODEL -!DEEP_CONVECTION_MODEL(KFROM)%XPRSCONV=>XPRSCONV !Done in FIELDLIST_GOTO_MODEL -!DEEP_CONVECTION_MODEL(KFROM)%XPACCONV=>XPACCONV !Done in FIELDLIST_GOTO_MODEL -DEEP_CONVECTION_MODEL(KFROM)%XDSVCONV=>XDSVCONV -DEEP_CONVECTION_MODEL(KFROM)%XUMFCONV=>XUMFCONV -DEEP_CONVECTION_MODEL(KFROM)%XDMFCONV=>XDMFCONV -DEEP_CONVECTION_MODEL(KFROM)%XMFCONV=>XMFCONV -DEEP_CONVECTION_MODEL(KFROM)%XPRLFLXCONV=>XPRLFLXCONV -DEEP_CONVECTION_MODEL(KFROM)%XPRSFLXCONV=>XPRSFLXCONV -!DEEP_CONVECTION_MODEL(KFROM)%XCAPE=>XCAPE !Done in FIELDLIST_GOTO_MODEL -DEEP_CONVECTION_MODEL(KFROM)%NCLTOPCONV=>NCLTOPCONV -DEEP_CONVECTION_MODEL(KFROM)%NCLBASCONV=>NCLBASCONV -!DEEP_CONVECTION_MODEL(KFROM)%XIC_RATE=>XIC_RATE !Done in FIELDLIST_GOTO_MODEL -!DEEP_CONVECTION_MODEL(KFROM)%XCG_RATE=>XCG_RATE !Done in FIELDLIST_GOTO_MODEL -!DEEP_CONVECTION_MODEL(KFROM)%XIC_TOTAL_NUMBER=>XIC_TOTAL_NUMBER !Done in FIELDLIST_GOTO_MODEL -!DEEP_CONVECTION_MODEL(KFROM)%XCG_TOTAL_NUMBER=>XCG_TOTAL_NUMBER !Done in FIELDLIST_GOTO_MODEL +INTEGER, INTENT(IN) :: KFROM, KTO ! -! Current model is set to model KTO -!NCOUNTCONV=>DEEP_CONVECTION_MODEL(KTO)%NCOUNTCONV !Done in FIELDLIST_GOTO_MODEL -!XDTHCONV=>DEEP_CONVECTION_MODEL(KTO)%XDTHCONV !Done in FIELDLIST_GOTO_MODEL -!XDRVCONV=>DEEP_CONVECTION_MODEL(KTO)%XDRVCONV !Done in FIELDLIST_GOTO_MODEL -!XDRCCONV=>DEEP_CONVECTION_MODEL(KTO)%XDRCCONV !Done in FIELDLIST_GOTO_MODEL -!XDRICONV=>DEEP_CONVECTION_MODEL(KTO)%XDRICONV !Done in FIELDLIST_GOTO_MODEL -!XPRCONV=>DEEP_CONVECTION_MODEL(KTO)%XPRCONV !Done in FIELDLIST_GOTO_MODEL -!XPRSCONV=>DEEP_CONVECTION_MODEL(KTO)%XPRSCONV !Done in FIELDLIST_GOTO_MODEL -!XPACCONV=>DEEP_CONVECTION_MODEL(KTO)%XPACCONV !Done in FIELDLIST_GOTO_MODEL -XDSVCONV=>DEEP_CONVECTION_MODEL(KTO)%XDSVCONV -XUMFCONV=>DEEP_CONVECTION_MODEL(KTO)%XUMFCONV -XDMFCONV=>DEEP_CONVECTION_MODEL(KTO)%XDMFCONV -XMFCONV=>DEEP_CONVECTION_MODEL(KTO)%XMFCONV -XPRLFLXCONV=>DEEP_CONVECTION_MODEL(KTO)%XPRLFLXCONV -XPRSFLXCONV=>DEEP_CONVECTION_MODEL(KTO)%XPRSFLXCONV -!XCAPE=>DEEP_CONVECTION_MODEL(KTO)%XCAPE !Done in FIELDLIST_GOTO_MODEL -NCLTOPCONV=>DEEP_CONVECTION_MODEL(KTO)%NCLTOPCONV -NCLBASCONV=>DEEP_CONVECTION_MODEL(KTO)%NCLBASCONV -!XIC_RATE=>DEEP_CONVECTION_MODEL(KTO)%XIC_RATE !Done in FIELDLIST_GOTO_MODEL -!XCG_RATE=>DEEP_CONVECTION_MODEL(KTO)%XCG_RATE !Done in FIELDLIST_GOTO_MODEL -!XIC_TOTAL_NUMBER=>DEEP_CONVECTION_MODEL(KTO)%XIC_TOTAL_NUMBER !Done in FIELDLIST_GOTO_MODEL -!XCG_TOTAL_NUMBER=>DEEP_CONVECTION_MODEL(KTO)%XCG_TOTAL_NUMBER !Done in FIELDLIST_GOTO_MODEL - END SUBROUTINE DEEP_CONVECTION_GOTO_MODEL END MODULE MODD_DEEP_CONVECTION_n diff --git a/src/MNH/write_budget.f90 b/src/MNH/write_budget.f90 index af0ca344e..81b52ee41 100644 --- a/src/MNH/write_budget.f90 +++ b/src/MNH/write_budget.f90 @@ -167,11 +167,7 @@ INTEGER, INTENT(IN) :: KSV ! Number of Scalar Variables INTEGER :: IRESP ! IRESP : return-code if a problem appears ! at the open of the file ! LFI routines -INTEGER :: IGRID ! IGRID : grid indicator -INTEGER :: ILENCH ! ILENCH : length of comment string -! CHARACTER(LEN=16) :: YRECFM ! Name of the article to be written -CHARACTER(LEN=20) :: YCOMMENT ! Comment string INTEGER :: JT,JPROC,JMASK ! ! @@ -1038,11 +1034,16 @@ SELECT CASE (CBUTYPE) ! !* 3.1 storage of the masks array ! - WRITE(YRECFM,FMT="('MASK_',I4.4,'.MASK')") NBUTSHIFT - WRITE(YCOMMENT,FMT="('X_Y_MASK',I4.4)") NBUTSHIFT - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFILEDIA,YRECFM,HLUOUT,'XY',ZWORKMASK(:,:,:,:,:,:),IGRID, & - ILENCH,YCOMMENT,IRESP) + WRITE(TZFIELD%CMNHNAME,FMT="('MASK_',I4.4,'.MASK')") NBUTSHIFT + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + WRITE(TZFIELD%CCOMMENT,FMT="('X_Y_MASK',I4.4)") NBUTSHIFT + TZFIELD%NGRID = 0 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 6 + CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,HLUOUT,IRESP,ZWORKMASK(:,:,:,:,:,:)) WRITE(YRECFM,FMT="('MASK_',I4.4)") NBUTSHIFT CALL MENU_DIACHRO(TPDIAFILE,HLUOUT,YRECFM) DEALLOCATE(ZWORKMASK) diff --git a/src/MNH/write_diachro.f90 b/src/MNH/write_diachro.f90 index 7beb7069c..a6f9c873e 100644 --- a/src/MNH/write_diachro.f90 +++ b/src/MNH/write_diachro.f90 @@ -473,9 +473,7 @@ IF(PRESENT(PMASK))THEN TZFIELD%NGRID = KGRID(1) TZFIELD%NTYPE = TYPEREAL TZFIELD%NDIMS = 6 - !PW: not yet implemented CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,HLUOUTDIA,IRESPDIA,PMASK) - CALL FMWRIT(TPDIAFILE%CNAME,TZFIELD%CMNHNAME,HLUOUTDIA,'XY',PMASK,KGRID(1), & - LEN_TRIM(YCOMMENT),YCOMMENT,IRESPDIA) + CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,HLUOUTDIA,IRESPDIA,PMASK) ENDIF ! ! 9eme enregistrement TRAJY diff --git a/src/MNH/write_lfifm1_for_diag_supp.f90 b/src/MNH/write_lfifm1_for_diag_supp.f90 index 70ab6b28e..c49ddf0aa 100644 --- a/src/MNH/write_lfifm1_for_diag_supp.f90 +++ b/src/MNH/write_lfifm1_for_diag_supp.f90 @@ -167,13 +167,6 @@ TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file ! INTEGER :: IRESP ! IRESP : return-code if a problem appears ! at the open of the file LFI routines -INTEGER :: IGRID ! IGRID : grid indicator -INTEGER :: ILENCH ! ILENCH : length of comment string -! -CHARACTER(LEN=28) :: YFMFILE ! Name of FM-file to write -CHARACTER(LEN=16) :: YRECFM ! Name of the article to be written -CHARACTER(LEN=100):: YCOMMENT ! Comment string -! INTEGER :: IIU,IJU,IKU,IIB,IJB,IKB,IIE,IJE,IKE ! Arrays bounds INTEGER :: IKRAD ! @@ -214,8 +207,6 @@ TYPE(TFIELDDATA),DIMENSION(2) :: TZFIELD2 ! !* 0. ARRAYS BOUNDS INITIALIZATION ! -YFMFILE = TPFILE%CNAME -! IIU=SIZE(XTHT,1) IJU=SIZE(XTHT,2) IKU=SIZE(XTHT,3) @@ -230,17 +221,8 @@ ZTEMP(:,:,:)=XTHT(:,:,:)*(XPABST(:,:,:)/ XP00) **(XRD/XCPD) ! ! #ifdef MNH_NCWRIT ! IF (LNETCDF.AND..NOT.LCARTESIAN) THEN -! YRECFM='LAT' -! YCOMMENT='X_Y_latitude (degree)' -! IGRID=1 -! ILENCH=LEN(YCOMMENT) -! CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XLAT,IGRID,ILENCH,YCOMMENT,IRESP) -! ! -! YRECFM='LON' -! YCOMMENT='X_Y_longitude (degree)' -! IGRID=1 -! ILENCH=LEN(YCOMMENT) -! CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XLON,IGRID,ILENCH,YCOMMENT,IRESP) +! CALL IO_WRITE_FIELD(TPFILE,'LAT',CLUOUT,IRESP,XLAT) +! CALL IO_WRITE_FIELD(TPFILE,'LON',CLUOUT,IRESP,XLON) ! END IF ! #endif ! @@ -271,6 +253,7 @@ IF (NCONV_KF >= 0) THEN TZFIELD%NGRID = 4 TZFIELD%NTYPE = TYPEREAL TZFIELD%NDIMS = 2 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK21) ! ! base height (km) of convective clouds ZWORK21(:,:)= 0. @@ -299,89 +282,110 @@ IF (NCONV_KF >= 1) THEN CALL IO_WRITE_FIELD(TPFILE,'DRICONV',CLUOUT,IRESP,XDRICONV) ! IF ( LCHTRANS .AND. NSV > 0 ) THEN - IGRID=1 ! User scalar variables - DO JSV = 1, NSV_USER - WRITE(YRECFM,'(A7,I3.3)')'DSVCONV',JSV - WRITE(YCOMMENT,'(A6,A2,I3.3,A26)')'X_Y_Z_','SV',JSV,' CONVective tendency (1/s)' - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XDSVCONV(:,:,:,JSV), & - IGRID,ILENCH,YCOMMENT,IRESP) - END DO + IF (NSV_USER>0) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 's-1' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = 1, NSV_USER + WRITE(TZFIELD%CMNHNAME,'(A7,I3.3)')'DSVCONV',JSV + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A2,I3.3,A20)')'X_Y_Z_','SV',JSV,' CONVective tendency' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XDSVCONV(:,:,:,JSV)) + END DO + END IF ! microphysical C2R2 scheme scalar variables - DO JSV = NSV_C2R2BEG, NSV_C2R2END - YRECFM = 'DSVCONV_'//TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1)) - WRITE(YCOMMENT,'(A6,A,A26)')'X_Y_Z_',TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1)), & - ' CONVective tendency (1/s)' - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XDSVCONV(:,:,:,JSV), & - IGRID,ILENCH,YCOMMENT,IRESP) - END DO + IF (NSV_C2R2END>=NSV_C2R2BEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 's-1' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_C2R2BEG, NSV_C2R2END + TZFIELD%CMNHNAME = 'DSVCONV_'//TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1)) + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CCOMMENT = 'X_Y_Z_'//TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))//' CONVective tendency (1/s)' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XDSVCONV(:,:,:,JSV)) + END DO + END IF ! microphysical C3R5 scheme additional scalar variables - DO JSV = NSV_C1R3BEG,NSV_C1R3END - YRECFM='DSVCONV_'//TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1)) - WRITE(YCOMMENT,'(A6,A,A26)')'X_Y_Z_',TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1)), & - ' CONVective tendency (1/s)' - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XDSVCONV(:,:,:,JSV), & - IGRID,ILENCH,YCOMMENT,IRESP) - END DO + IF (NSV_C1R3END>=NSV_C1R3BEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 's-1' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_C1R3BEG,NSV_C1R3END + TZFIELD%CMNHNAME = 'DSVCONV_'//TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1)) + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CCOMMENT = 'X_Y_Z_'//TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))//' CONVective tendency (1/s)' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XDSVCONV(:,:,:,JSV)) + END DO + END IF ! electrical scalar variables - DO JSV = NSV_ELECBEG,NSV_ELECEND - YRECFM = 'DSVCONV_'//TRIM(CELECNAMES(JSV-NSV_ELECBEG+1)) - WRITE(YCOMMENT,'(A6,A,A26)')'X_Y_Z_',TRIM(CELECNAMES(JSV-NSV_ELECBEG+1)),& - ' CONVective tendency (1/s)' - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XDSVCONV(:,:,:,JSV), & - IGRID,ILENCH,YCOMMENT,IRESP) - END DO + IF (NSV_ELECEND>=NSV_ELECBEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 's-1' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_ELECBEG,NSV_ELECEND + TZFIELD%CMNHNAME = 'DSVCONV_'//TRIM(CELECNAMES(JSV-NSV_ELECBEG+1)) + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CCOMMENT = 'X_Y_Z_'//TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))//' CONVective tendency (1/s)' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XDSVCONV(:,:,:,JSV)) + END DO + END IF ! chemical scalar variables - DO JSV = NSV_CHEMBEG, NSV_CHEMEND - YRECFM = 'DSVCONV_'//TRIM(CNAMES(JSV-NSV_CHEMBEG+1)) - WRITE(YCOMMENT,'(A6,A,A26)')'X_Y_Z_',TRIM(CNAMES(JSV-NSV_CHEMBEG+1)), & - ' CONVective tendency (1/s)' - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XDSVCONV(:,:,:,JSV), & - IGRID,ILENCH,YCOMMENT,IRESP) - END DO + IF (NSV_CHEMEND>=NSV_CHEMBEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 's-1' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_CHEMBEG, NSV_CHEMEND + TZFIELD%CMNHNAME = 'DSVCONV_'//TRIM(CNAMES(JSV-NSV_CHEMBEG+1)) + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CCOMMENT = 'X_Y_Z_'//TRIM(CNAMES(JSV-NSV_CHEMBEG+1))//' CONVective tendency (1/s)' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XDSVCONV(:,:,:,JSV)) + END DO + END IF ! lagrangian variables - DO JSV = NSV_LGBEG,NSV_LGEND - YRECFM='DSVCONV_'//TRIM(CLGNAMES(JSV-NSV_LGBEG+1)) - WRITE(YCOMMENT,'(A6,A,A26)')'X_Y_Z_',TRIM(CLGNAMES(JSV-NSV_LGBEG+1)), & - ' CONVective tendency (1/s)' - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XDSVCONV(:,:,:,JSV), & - IGRID,ILENCH,YCOMMENT,IRESP) - END DO + IF (NSV_LGEND>=NSV_LGBEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 's-1' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_LGBEG,NSV_LGEND + TZFIELD%CMNHNAME = 'DSVCONV_'//TRIM(CLGNAMES(JSV-NSV_LGBEG+1)) + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CCOMMENT = 'X_Y_Z_'//TRIM(CLGNAMES(JSV-NSV_LGBEG+1))//' CONVective tendency (1/s)' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XDSVCONV(:,:,:,JSV)) + END DO + END IF END IF ! END IF IF (NCONV_KF >= 2) THEN -! - YRECFM = 'PRLFLXCONV' - YCOMMENT = 'X_Y_Liquid Precipitation Convective Flux (m/s)' - IGRID = 4 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XPRLFLXCONV,IGRID,ILENCH,YCOMMENT,IRESP) -! - YRECFM = 'PRSFLXCONV' - YCOMMENT = 'X_Y_Solid Precipitation Convective Flux (m/s)' - IGRID = 4 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XPRSFLXCONV,IGRID,ILENCH,YCOMMENT,IRESP) -! - YRECFM = 'UMFCONV' - YCOMMENT = 'X_Y_Updraft Convective Mass Flux (kg/s m**2)' - IGRID = 4 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XUMFCONV,IGRID,ILENCH,YCOMMENT,IRESP) -! - YRECFM = 'DMFCONV' - YCOMMENT = 'X_Y_Downdraft Convective Mass Flux (kg/s m**2)' - IGRID = 4 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XDMFCONV,IGRID,ILENCH,YCOMMENT,IRESP) -! + CALL IO_WRITE_FIELD(TPFILE,'PRLFLXCONV',CLUOUT,IRESP,XPRLFLXCONV) + CALL IO_WRITE_FIELD(TPFILE,'PRSFLXCONV',CLUOUT,IRESP,XPRSFLXCONV) + CALL IO_WRITE_FIELD(TPFILE,'UMFCONV', CLUOUT,IRESP,XUMFCONV) + CALL IO_WRITE_FIELD(TPFILE,'DMFCONV', CLUOUT,IRESP,XDMFCONV) END IF !------------------------------------------------------------------------------- ! @@ -521,79 +525,18 @@ END IF ! IF (NRAD_3D >= 0) THEN IF (CRAD /= 'NONE') THEN -! - YRECFM = 'DTHRAD' - YCOMMENT = 'X_Y_Z_RADiative heating/cooling rate (K/s)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XDTHRAD,IGRID,ILENCH,YCOMMENT,IRESP) -! - YRECFM = 'FLALWD' - YCOMMENT = 'X_Y_Downward Long Waves on FLAT surface (W/M2)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XFLALWD,IGRID,ILENCH,YCOMMENT,IRESP) -! - YRECFM = 'DIRFLASWD' - YCOMMENT = 'X_Y_DIRect Downward Short Waves on FLAT surface (W/M2)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XDIRFLASWD,IGRID,ILENCH,YCOMMENT,IRESP) -! - YRECFM = 'SCAFLASWD' - YCOMMENT = 'X_Y_SCAttered Downward Short Waves on FLAT surface (W/M2)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XSCAFLASWD,IGRID,ILENCH,YCOMMENT,IRESP) -! - YRECFM = 'DIRSRFSWD' - YCOMMENT = 'X_Y_DIRect Downward Short Waves (W/M2)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XDIRSRFSWD,IGRID,ILENCH,YCOMMENT,IRESP) -! - YRECFM = 'CLEARCOL_TM1' - YCOMMENT = 'TRACE OF CLOUD' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',NCLEARCOL_TM1,IGRID,ILENCH,YCOMMENT,IRESP) -! - YRECFM = 'ZENITH' - YCOMMENT = 'X_Y_ZENITH (RAD)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XZENITH,IGRID,ILENCH,YCOMMENT,IRESP) -! - YRECFM = 'AZIM' - YCOMMENT = 'X_Y_AZIMuth (RAD)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XAZIM,IGRID,ILENCH,YCOMMENT,IRESP) -! - YRECFM = 'DIR_ALB' - YCOMMENT = 'X_Y_DIRect ALBedo (-)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XDIR_ALB,IGRID,ILENCH,YCOMMENT,IRESP) -! - YRECFM = 'SCA_ALB' - YCOMMENT = 'X_Y_SCAttered ALBedo (-)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XSCA_ALB,IGRID,ILENCH,YCOMMENT,IRESP) -! - YRECFM = 'EMIS' - YCOMMENT = 'X_Y_EMISsivity (-)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XEMIS,IGRID,ILENCH,YCOMMENT,IRESP) -! - YRECFM = 'TSRAD' - YCOMMENT = 'X_Y_RADiative Surface Temperature (K)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XTSRAD,IGRID,ILENCH,YCOMMENT,IRESP) -! + CALL IO_WRITE_FIELD(TPFILE,'DTHRAD', CLUOUT,IRESP,XDTHRAD) + CALL IO_WRITE_FIELD(TPFILE,'FLALWD', CLUOUT,IRESP,XFLALWD) + CALL IO_WRITE_FIELD(TPFILE,'DIRFLASWD', CLUOUT,IRESP,XDIRFLASWD) + CALL IO_WRITE_FIELD(TPFILE,'SCAFLASWD', CLUOUT,IRESP,XSCAFLASWD) + CALL IO_WRITE_FIELD(TPFILE,'DIRSRFSWD', CLUOUT,IRESP,XDIRSRFSWD) + CALL IO_WRITE_FIELD(TPFILE,'CLEARCOL_TM1',CLUOUT,IRESP,NCLEARCOL_TM1) + CALL IO_WRITE_FIELD(TPFILE,'ZENITH', CLUOUT,IRESP,XZENITH) + CALL IO_WRITE_FIELD(TPFILE,'AZIM', CLUOUT,IRESP,XAZIM) + CALL IO_WRITE_FIELD(TPFILE,'DIR_ALB', CLUOUT,IRESP,XDIR_ALB) + CALL IO_WRITE_FIELD(TPFILE,'SCA_ALB', CLUOUT,IRESP,XSCA_ALB) + CALL IO_WRITE_FIELD(TPFILE,'EMIS', CLUOUT,IRESP,XEMIS) + CALL IO_WRITE_FIELD(TPFILE,'TSRAD', CLUOUT,IRESP,XTSRAD) ELSE PRINT*,'YOU WANT DIAGNOSTICS RELATED TO RADIATION' PRINT*,' BUT NO RADIATIVE SCHEME WAS ACTIVATED IN THE MODEL' @@ -602,15 +545,21 @@ END IF IF (NRAD_3D >= 1) THEN IF (LDUST) THEN !Dust optical depth between two vertical levels - YRECFM = 'DSTAOD3D' - YCOMMENT = 'X_Y_Z_DuST Aerosol Optical Depth (m)' - ILENCH=LEN(YCOMMENT) ZWORK31(:,:,:)=0. DO JK=IKB,IKE IKRAD = JK - JPVEXT ZWORK31(:,:,JK)= XAER(:,:,IKRAD,3) END DO - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',ZWORK31,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'DSTAOD3D' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: DSTAOD3D' + TZFIELD%CUNITS = 'm' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_DuST Aerosol Optical Depth' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK31) !Dust optical depth ZWORK21(:,:)=0.0 DO JK=IKB,IKE @@ -621,31 +570,49 @@ IF (NRAD_3D >= 1) THEN ENDDO ENDDO ENDDO - YRECFM = 'DSTAOD2D' - YCOMMENT = 'X_Y_DuST Aerosol Optical Depth (m)' - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',ZWORK21,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'DSTAOD2D' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: DSTAOD2D' + TZFIELD%CUNITS = 'm' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_DuST Aerosol Optical Depth' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 2 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK21) !Dust extinction (optical depth per km) - YRECFM = 'DSTEXT' - YCOMMENT = 'X_Y_Z_DuST EXTinction (1/km) ' - ILENCH=LEN(YCOMMENT) DO JK=IKB,IKE IKRAD = JK - JPVEXT ZWORK31(:,:,JK)= XAER(:,:,IKRAD,3)/(XZZ(:,:,JK+1)-XZZ(:,:,JK))*1.D3 ENDDO - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',ZWORK31,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'DSTEXT' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: DSTEXT' + TZFIELD%CUNITS = 'km-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_DuST EXTinction' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK31) END IF IF (LSALT) THEN !Salt optical depth between two vertical levels - YRECFM = 'SLTAOD3D' - YCOMMENT = 'X_Y_Z_Salt Aerosol Optical Depth (m)' - ILENCH=LEN(YCOMMENT) ZWORK31(:,:,:)=0. DO JK=IKB,IKE IKRAD = JK - JPVEXT ZWORK31(:,:,JK)= XAER(:,:,IKRAD,2) END DO - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',ZWORK31,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'SLTAOD3D' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: SLTAOD3D' + TZFIELD%CUNITS = 'm' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_Salt Aerosol Optical Depth' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK31) !Salt optical depth ZWORK21(:,:)=0.0 DO JK=IKB,IKE @@ -656,31 +623,49 @@ IF (NRAD_3D >= 1) THEN ENDDO ENDDO ENDDO - YRECFM = 'SLTAOD2D' - YCOMMENT = 'X_Y_Salt Aerosol Optical Depth (m)' - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',ZWORK21,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'SLTAOD2D' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: SLTAOD2D' + TZFIELD%CUNITS = 'm' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Salt Aerosol Optical Depth' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 2 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK21) !Salt extinction (optical depth per km) - YRECFM = 'SLTEXT' - YCOMMENT = 'X_Y_Z_Salt EXTinction (1/km) ' - ILENCH=LEN(YCOMMENT) DO JK=IKB,IKE IKRAD = JK - JPVEXT ZWORK31(:,:,JK)= XAER(:,:,IKRAD,2)/(XZZ(:,:,JK+1)-XZZ(:,:,JK))*1.D3 ENDDO - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',ZWORK31,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'SLTEXT' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: SLTEXT' + TZFIELD%CUNITS = 'km-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_Salt EXTinction' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK31) END IF IF (LORILAM) THEN !Orilam anthropogenic optical depth between two vertical levels - YRECFM = 'AERAOD3D' - YCOMMENT = 'X_Y_Z_Anthropogenic Aerosol Optical Depth (m)' - ILENCH=LEN(YCOMMENT) ZWORK31(:,:,:)=0. DO JK=IKB,IKE IKRAD = JK - JPVEXT ZWORK31(:,:,JK)= XAER(:,:,IKRAD,4) END DO - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',ZWORK31,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'AERAOD3D' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: AERAOD3D' + TZFIELD%CUNITS = 'm' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_Anthropogenic Aerosol Optical Depth' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK31) !Orilam anthropogenic optical depth ZWORK21(:,:)=0.0 DO JK=IKB,IKE @@ -691,21 +676,32 @@ IF (NRAD_3D >= 1) THEN ENDDO ENDDO ENDDO - YRECFM = 'AERAOD2D' - YCOMMENT = 'X_Y_Anthropogenic Aerosol Optical Depth (m)' - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',ZWORK21,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'AERAOD2D' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: AERAOD2D' + TZFIELD%CUNITS = 'm' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Anthropogenic Aerosol Optical Depth' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 2 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK21) !Orilam anthropogenic extinction (optical depth per km) - YRECFM = 'AEREXT' - YCOMMENT = 'X_Y_Z_Anthropogenic EXTinction (1/km) ' - ILENCH=LEN(YCOMMENT) DO JK=IKB,IKE IKRAD = JK - JPVEXT ZWORK31(:,:,JK)= XAER(:,:,IKRAD,4)/(XZZ(:,:,JK+1)-XZZ(:,:,JK))*1.D3 ENDDO - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',ZWORK31,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'AEREXT' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: AEREXT' + TZFIELD%CUNITS = 'km-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_Anthropogenic EXTinction' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK31) END IF - END IF ! !------------------------------------------------------------------------------- @@ -756,17 +752,27 @@ IF (LEN_TRIM(CRAD_SAT) /= 0 .AND. NRR /=0) THEN LSUBG_COND, LRAD_SUBG_COND, ZIRBT, ZWVBT, & INDGEO(JI),VSIGQSAT ) ! - YRECFM =TRIM(YNAM_SAT(JI))//'_IRBT' - YCOMMENT =TRIM(YNAM_SAT(JI))//' Infra-Red Brightness Temperature (K)' - IGRID =1 - ILENCH =LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',ZIRBT,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = TRIM(YNAM_SAT(JI))//'_IRBT' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'K' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = TRIM(YNAM_SAT(JI))//' Infra-Red Brightness Temperature' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 2 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZIRBT) ! - YRECFM =TRIM(YNAM_SAT(JI))//'_WVBT' - YCOMMENT =TRIM(YNAM_SAT(JI))//' Water-Vapor Brightness Temperature (K)' - IGRID =1 - ILENCH =LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',ZWVBT,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = TRIM(YNAM_SAT(JI))//'_WVBT' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'K' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = TRIM(YNAM_SAT(JI))//' Water-Vapor Brightness Temperature' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 2 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWVBT) END DO DEALLOCATE(ZIRBT,ZWVBT) END IF @@ -963,6 +969,13 @@ ALLOCATE(ZWORK34(IIU,IJU,IKU)) ZPRES(:,:,IPRES)=XISOPR(JI)*100. END DO PRINT *,'PRESSURE LEVELS WHERE TO INTERPOLATE=',ZPRES(1,1,:) + ! + TZFIELD%CSTDNAME = '' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 2 + ! ! !* Standard Variables ! @@ -972,12 +985,11 @@ ALLOCATE(ZWORK34(IIU,IJU,IKU)) CALL PINTER(XTHT, XPABST, XZZ, ZTEMP, ZWRES, ZPRES, & IIU, IJU, IKU, IKB, IPRES, 'LOG', 'RHU.') DO JK=1,IPRES - ZWORK21(:,:) = ZWRES(:,:,JK) - YRECFM='THT'//TRIM(YPRES(JK))//'HPA' - YCOMMENT='X_Y_potential temperature '//TRIM(YPRES(JK))//'hPa (K)' - IGRID=1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',ZWORK21,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'THT'//TRIM(YPRES(JK))//'HPA' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'K' + TZFIELD%CCOMMENT = 'X_Y_potential temperature '//TRIM(YPRES(JK))//' hPa' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWRES(:,:,JK)) END DO ! ********************* ! Wind @@ -986,24 +998,22 @@ ALLOCATE(ZWORK34(IIU,IJU,IKU)) CALL PINTER(ZWORK31, XPABST, XZZ, ZTEMP, ZWRES, ZPRES, & IIU, IJU, IKU, IKB, IPRES, 'LOG', 'RHU.') DO JK=1,IPRES - ZWORK21(:,:) = ZWRES(:,:,JK) - YRECFM='UT'//TRIM(YPRES(JK))//'HPA' - YCOMMENT='X_Y_U component of wind '//TRIM(YPRES(JK))//'hPa (m/s)' - IGRID=1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',ZWORK21,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'UT'//TRIM(YPRES(JK))//'HPA' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'm s-1' + TZFIELD%CCOMMENT = 'X_Y_U component of wind '//TRIM(YPRES(JK))//' hPa' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWRES(:,:,JK)) END DO ! ZWORK31(:,:,:) = MYF(XVT(:,:,:)) CALL PINTER(ZWORK31, XPABST, XZZ, ZTEMP, ZWRES, ZPRES, & IIU, IJU, IKU, IKB, IPRES, 'LOG', 'RHU.') DO JK=1,IPRES - ZWORK21(:,:) = ZWRES(:,:,JK) - YRECFM='VT'//TRIM(YPRES(JK))//'HPA' - YCOMMENT='X_Y_V component of wind '//TRIM(YPRES(JK))//'hPa (m/s)' - IGRID=1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',ZWORK21,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'VT'//TRIM(YPRES(JK))//'HPA' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'm s-1' + TZFIELD%CCOMMENT = 'X_Y_V component of wind '//TRIM(YPRES(JK))//' hPa' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWRES(:,:,JK)) END DO ! ********************* ! Water Vapour Mixing Ratio @@ -1011,12 +1021,11 @@ ALLOCATE(ZWORK34(IIU,IJU,IKU)) CALL PINTER(XRT(:,:,:,1), XPABST, XZZ, ZTEMP, ZWRES, ZPRES, & IIU, IJU, IKU, IKB, IPRES, 'LOG', 'RHU.') DO JK=1,IPRES - ZWORK21(:,:) = 1.E+3*ZWRES(:,:,JK) - YRECFM='MRV'//TRIM(YPRES(JK))//'HPA' - YCOMMENT='X_Y_Vapor Mixing Ratio '//TRIM(YPRES(JK))//'hPa (g/kg)' - IGRID=1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',ZWORK21,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'MRV'//TRIM(YPRES(JK))//'HPA' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'g kg-1' + TZFIELD%CCOMMENT = 'X_Y_Vapor Mixing Ratio '//TRIM(YPRES(JK))//' hPa' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWRES(:,:,JK)*1.E3) END DO ! ********************* ! Geopotential in meters @@ -1025,12 +1034,11 @@ ALLOCATE(ZWORK34(IIU,IJU,IKU)) CALL PINTER(ZWORK31, XPABST, XZZ, ZTEMP, ZWRES, ZPRES, & IIU, IJU, IKU, IKB, IPRES, 'LOG', 'RHU.') DO JK=1,IPRES - ZWORK21(:,:) = ZWRES(:,:,JK) - YRECFM='ALT'//TRIM(YPRES(JK))//'HPA' - YCOMMENT='X_Y_ALTitude '//TRIM(YPRES(JK))//'hPa (m)' - IGRID=1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',ZWORK21,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'ALT'//TRIM(YPRES(JK))//'HPA' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'm' + TZFIELD%CCOMMENT = 'X_Y_ALTitude '//TRIM(YPRES(JK))//' hPa' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWRES(:,:,JK)) END DO ! DEALLOCATE(ZWRES,ZPRES,ZWORK32,ZWORK33,ZWORK34) @@ -1065,6 +1073,13 @@ ALLOCATE(ZWORK34(IIU,IJU,IKU)) ZTH(:) = XISOTH(1:ITH) PRINT *,'POTENTIAL TEMPERATURE LEVELS WHERE TO INTERPOLATE=',ZTH(:) + ! + TZFIELD%CSTDNAME = '' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 2 + ! ! !* Standard Variables ! @@ -1073,12 +1088,11 @@ ALLOCATE(ZWORK34(IIU,IJU,IKU)) ! ********************* CALL ZINTER(XPABST, XTHT, ZWTH, ZTH, IIU, IJU, IKU, IKB, ITH, XUNDEF) DO JK=1,ITH - ZWORK21(:,:) = ZWTH(:,:,JK) - YRECFM='PABST'//TRIM(YTH(JK))//'K' - YCOMMENT='X_Y_pressure '//TRIM(YTH(JK))//'K (Pa)' - IGRID=1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',ZWORK21,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'PABST'//TRIM(YTH(JK))//'K' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'Pa' + TZFIELD%CCOMMENT = 'X_Y_pressure '//TRIM(YTH(JK))//' K' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWTH(:,:,JK)) END DO ! ********************* ! Potential Vorticity @@ -1102,12 +1116,11 @@ ALLOCATE(ZWORK34(IIU,IJU,IKU)) ZPOVO(:,:,IKU)=-1.E+11 CALL ZINTER(ZPOVO, XTHT, ZWTH, ZTH, IIU, IJU, IKU, IKB, ITH, XUNDEF) DO JK=1,ITH - ZWORK21(:,:) = ZWTH(:,:,JK) - YRECFM='POVOT'//TRIM(YTH(JK))//'K' - YCOMMENT='X_Y_POtential VOrticity '//TRIM(YTH(JK))//'K (PVU)' - IGRID=1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',ZWORK21,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'POVOT'//TRIM(YTH(JK))//'K' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'PVU' + TZFIELD%CCOMMENT = 'X_Y_POtential VOrticity '//TRIM(YTH(JK))//' K' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWTH(:,:,JK)) END DO ! ********************* ! Wind @@ -1115,23 +1128,21 @@ ALLOCATE(ZWORK34(IIU,IJU,IKU)) ZWORK31(:,:,:) = MXF(XUT(:,:,:)) CALL ZINTER(ZWORK31, XTHT, ZWTH, ZTH, IIU, IJU, IKU, IKB, ITH, XUNDEF) DO JK=1,ITH - ZWORK21(:,:) = ZWTH(:,:,JK) - YRECFM='UT'//TRIM(YTH(JK))//'K' - YCOMMENT='X_Y_U component of wind '//TRIM(YTH(JK))//'K (m/s)' - IGRID=1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',ZWORK21,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'UT'//TRIM(YTH(JK))//'K' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'm s-1' + TZFIELD%CCOMMENT = 'X_Y_U component of wind '//TRIM(YTH(JK))//' K' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWTH(:,:,JK)) END DO ! ZWORK31(:,:,:) = MYF(XVT(:,:,:)) CALL ZINTER(ZWORK31, XTHT, ZWTH, ZTH, IIU, IJU, IKU, IKB, ITH, XUNDEF) DO JK=1,ITH - ZWORK21(:,:) = ZWTH(:,:,JK) - YRECFM='VT'//TRIM(YTH(JK))//'K' - YCOMMENT='X_Y_V component of wind '//TRIM(YTH(JK))//'K (m/s)' - IGRID=1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',ZWORK21,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'VT'//TRIM(YTH(JK))//'K' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'm s-1' + TZFIELD%CCOMMENT = 'X_Y_V component of wind '//TRIM(YTH(JK))//' K' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWTH(:,:,JK)) END DO ! DEALLOCATE(ZWTH,ZTH,ZWORK32,ZWORK33,ZWORK34) diff --git a/src/MNH/write_surf_mnh.f90 b/src/MNH/write_surf_mnh.f90 index 0c632e9c2..3eb1def7d 100644 --- a/src/MNH/write_surf_mnh.f90 +++ b/src/MNH/write_surf_mnh.f90 @@ -1464,12 +1464,14 @@ END SUBROUTINE WRITE_SURFT0_MNH !* 0. DECLARATIONS ! ------------ ! +USE MODE_FIELD, ONLY: TFIELDDATA, TYPEINT, TYPEREAL USE MODE_FM USE MODE_FMWRIT USE MODE_MSG ! -USE MODD_IO_SURF_MNH, ONLY : COUT, COUTFILE, NLUOUT -USE MODD_CONF_n, ONLY : CSTORAGE_TYPE +USE MODD_IO_ll, ONLY: TFILE_SURFEX +USE MODD_IO_SURF_MNH, ONLY : COUT, COUTFILE, NLUOUT +USE MODD_CONF_n, ONLY : CSTORAGE_TYPE ! ! IMPLICIT NONE @@ -1488,9 +1490,9 @@ CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! Comment string !* 0.2 Declarations of local variables ! ! -CHARACTER(LEN=LEN_HREC) :: YRECFM ! Name of the article to be written INTEGER, DIMENSION(3,KL1) :: ITDATE CHARACTER(LEN=5) :: YMSG +TYPE(TFIELDDATA) :: TZFIELD !------------------------------------------------------------------------------- ! CALL PRINT_MSG(NVERB_DEBUG,'IO','WRITE_SURFT1_MNH','writing '//TRIM(HREC)) @@ -1499,21 +1501,39 @@ IF( HREC=='DTCUR' .AND. CSTORAGE_TYPE/='SU' ) THEN CALL PRINT_MSG(NVERB_DEBUG,'IO','WRITE_SURFT1_MNH',TRIM(HREC)//' not written in file by externalized surface') RETURN ELSE -! - YRECFM=TRIM(HREC)//'%TDATE' -! + ! ITDATE(1,:) = KYEAR (:) ITDATE(2,:) = KMONTH (:) ITDATE(3,:) = KDAY (:) - CALL FMWRIT(COUTFILE,YRECFM,COUT,'--',ITDATE(:,:),0,LEN(HCOMMENT),HCOMMENT,KRESP) -! + ! + TZFIELD%CMNHNAME = TRIM(HREC)//'%TDATE' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'SURFEX: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = '' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = TRIM(HCOMMENT) + TZFIELD%NGRID = 0 + TZFIELD%NTYPE = TYPEINT + TZFIELD%NDIMS = 2 + ! + CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,COUT,KRESP,ITDATE(:,:)) + ! IF (KRESP /=0) THEN WRITE ( YMSG, '( I5 )' ) KRESP CALL PRINT_MSG(NVERB_ERROR,'IO','WRITE_SURFT1_MNH','error when writing article '//TRIM(HREC)//' KRESP='//YMSG) END IF -! - YRECFM=TRIM(HREC)//'%TIME' - CALL FMWRIT(COUTFILE,YRECFM,COUT,'--',PTIME(:),0,LEN(HCOMMENT),HCOMMENT,KRESP) + ! + TZFIELD%CMNHNAME = TRIM(HREC)//'%TIME' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'SURFEX: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = '' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = TRIM(HCOMMENT) + TZFIELD%NGRID = 0 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 1 + ! + CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,COUT,KRESP,PTIME(:)) ! IF (KRESP /=0) THEN WRITE ( YMSG, '( I5 )' ) KRESP -- GitLab