diff --git a/src/LIB/SURCOUCHE/src/mode_field.f90 b/src/LIB/SURCOUCHE/src/mode_field.f90 index 27aa93d13d4471d532e62dcd71bb96057ad94c18..f485d1f133b2f1e8a04666036a7adb6af0b5fd83 100644 --- a/src/LIB/SURCOUCHE/src/mode_field.f90 +++ b/src/LIB/SURCOUCHE/src/mode_field.f90 @@ -1675,6 +1675,24 @@ IDX = IDX+1 END IF ! CPROGRAM=MESONH ! ! +IF (CPROGRAM == 'MESONH' .OR. TRIM(CPROGRAM) == 'DIAG') THEN +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'CIT' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: CIT' +TFIELDLIST(IDX)%CUNITS = 'm-3' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'X_Y_Z_Cloud Ice concentration' +TFIELDLIST(IDX)%NGRID = 1 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 3 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL)) +IDX = IDX+1 +! +END IF ! CPROGRAM=MESONH .OR. DIAG +! +! IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() TFIELDLIST(IDX)%CMNHNAME = 'RHODREF' TFIELDLIST(IDX)%CSTDNAME = '' @@ -1972,6 +1990,58 @@ TFIELDLIST(IDX)%NDIMS = 2 ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(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' +TFIELDLIST(IDX)%CUNITS = 's-1' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'X_Y_IntraCloud lightning Rate' +TFIELDLIST(IDX)%NGRID = 1 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 2 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'CG_RATE' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: CG_RATE' +TFIELDLIST(IDX)%CUNITS = 's-1' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'X_Y_CloudGround lightning Rate' +TFIELDLIST(IDX)%NGRID = 1 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 2 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'IC_TOTAL_NB' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: IC_TOTAL_NB' +TFIELDLIST(IDX)%CUNITS = '1' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'X_Y_IntraCloud lightning Number' +TFIELDLIST(IDX)%NGRID = 1 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 2 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'CG_TOTAL_NB' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: CG_TOTAL_NB' +TFIELDLIST(IDX)%CUNITS = '1' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'X_Y_CloudGround lightning Number' +TFIELDLIST(IDX)%NGRID = 1 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 2 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL)) +IDX = IDX+1 +! END IF !CDCONV /= 'NONE' .OR. CSCONV == 'KAFR' END IF !CPROGRAM/=PGD , NESPGD, SPAWN ! @@ -2081,6 +2151,58 @@ ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL)) IDX = IDX+1 ! IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'INPRC' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: INPRC' +TFIELDLIST(IDX)%CUNITS = 'm s-1' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'X_Y_INstantaneous Cloud Precipitation Rain Rate' +TFIELDLIST(IDX)%NGRID = 1 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 2 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'ACPRC' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: ACPRC' +TFIELDLIST(IDX)%CUNITS = 'm' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'X_Y_ACcumulated Cloud Precipitation Rain Rate' +TFIELDLIST(IDX)%NGRID = 1 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 2 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'INDEP' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: INDEP' +TFIELDLIST(IDX)%CUNITS = 'm s-1' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'X_Y_INstantaneous Cloud Deposition Rate' +TFIELDLIST(IDX)%NGRID = 1 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 2 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'ACDEP' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: ACDEP' +TFIELDLIST(IDX)%CUNITS = 'm' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'X_Y_ACcumulated Cloud Deposition Rate' +TFIELDLIST(IDX)%NGRID = 1 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 2 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() TFIELDLIST(IDX)%CMNHNAME = 'INPRR' TFIELDLIST(IDX)%CSTDNAME = 'rainfall_rate' TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: INPRR' @@ -2133,6 +2255,84 @@ TFIELDLIST(IDX)%NDIMS = 2 ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL)) IDX = IDX+1 ! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'INPRS' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: INPRS' +TFIELDLIST(IDX)%CUNITS = 'm s-1' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'X_Y_INstantaneous PRecipitation Snow Rate' +TFIELDLIST(IDX)%NGRID = 1 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 2 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'ACPRS' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: ACPRS' +TFIELDLIST(IDX)%CUNITS = 'm' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'X_Y_ACcumulated PRecipitation Snow Rate' +TFIELDLIST(IDX)%NGRID = 1 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 2 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'INPRG' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: INPRG' +TFIELDLIST(IDX)%CUNITS = 'm s-1' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'X_Y_INstantaneous PRecipitation Graupel Rate' +TFIELDLIST(IDX)%NGRID = 1 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 2 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'ACPRG' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: ACPRG' +TFIELDLIST(IDX)%CUNITS = 'm' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'X_Y_ACcumulated PRecipitation Graupel Rate' +TFIELDLIST(IDX)%NGRID = 1 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 2 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'INPRH' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: INPRH' +TFIELDLIST(IDX)%CUNITS = 'm s-1' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'X_Y_INstantaneous PRecipitation Hail Rate' +TFIELDLIST(IDX)%NGRID = 1 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 2 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'ACPRH' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: ACPRH' +TFIELDLIST(IDX)%CUNITS = 'm' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'X_Y_ACcumulated PRecipitation Hail Rate' +TFIELDLIST(IDX)%NGRID = 1 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 2 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL)) +IDX = IDX+1 +! WRITE(YMSG,'("number of used fields=",I4," out of ",I4)') IDX-1,MAXFIELDS CALL PRINT_MSG(NVERB_INFO,'GEN','INI_FIELD_LIST',TRIM(YMSG)) ! @@ -2510,6 +2710,7 @@ IF (CPROGRAM == 'MESONH') THEN TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XRRS_CLD(:,:,:,CONF_MODEL(KFROM)%IDX_RHT) END IF CALL FIND_FIELD_ID_FROM_MNHNAME('CLDFR',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XCLDFR + CALL FIND_FIELD_ID_FROM_MNHNAME('CIT', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XCIT ! END IF ! @@ -2607,14 +2808,18 @@ END IF ! IF (TRIM(CPROGRAM) /= 'PGD' .AND. TRIM(CPROGRAM) /= 'NESPGD' .AND. TRIM(CPROGRAM) /= 'SPAWN') THEN IF (CDCONV /= 'NONE' .OR. CSCONV == 'KAFR') THEN - CALL FIND_FIELD_ID_FROM_MNHNAME('COUNTCONV',IID,IRESP); TFIELDLIST(IID)%TFIELD_N2D(KFROM)%DATA => NCOUNTCONV - CALL FIND_FIELD_ID_FROM_MNHNAME('DTHCONV', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XDTHCONV - CALL FIND_FIELD_ID_FROM_MNHNAME('DRVCONV', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XDRVCONV - CALL FIND_FIELD_ID_FROM_MNHNAME('DRCCONV', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XDRCCONV - CALL FIND_FIELD_ID_FROM_MNHNAME('DRICONV', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XDRICONV - CALL FIND_FIELD_ID_FROM_MNHNAME('PRCONV', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XPRCONV - CALL FIND_FIELD_ID_FROM_MNHNAME('PRSCONV', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XPRSCONV - CALL FIND_FIELD_ID_FROM_MNHNAME('PACCONV', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XPACCONV + CALL FIND_FIELD_ID_FROM_MNHNAME('COUNTCONV', IID,IRESP); TFIELDLIST(IID)%TFIELD_N2D(KFROM)%DATA => NCOUNTCONV + CALL FIND_FIELD_ID_FROM_MNHNAME('DTHCONV', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XDTHCONV + CALL FIND_FIELD_ID_FROM_MNHNAME('DRVCONV', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XDRVCONV + CALL FIND_FIELD_ID_FROM_MNHNAME('DRCCONV', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XDRCCONV + CALL FIND_FIELD_ID_FROM_MNHNAME('DRICONV', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XDRICONV + 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('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 + CALL FIND_FIELD_ID_FROM_MNHNAME('CG_TOTAL_NB',IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XCG_TOTAL_NUMBER END IF END IF ! @@ -2631,10 +2836,20 @@ CALL FIND_FIELD_ID_FROM_MNHNAME('SSO_STDEV',IID,IRESP); TFIELDLIST(IID)%TFIELD_X ! ! MODD_PRECIP_n variables ! +CALL FIND_FIELD_ID_FROM_MNHNAME('INPRC', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XINPRC +CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRC', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XACPRC +CALL FIND_FIELD_ID_FROM_MNHNAME('INDEP', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XINDEP +CALL FIND_FIELD_ID_FROM_MNHNAME('ACDEP', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XACDEP CALL FIND_FIELD_ID_FROM_MNHNAME('INPRR', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XINPRR CALL FIND_FIELD_ID_FROM_MNHNAME('INPRR3D',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XINPRR3D CALL FIND_FIELD_ID_FROM_MNHNAME('EVAP3D', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XEVAP3D CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRR', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XACPRR +CALL FIND_FIELD_ID_FROM_MNHNAME('INPRS', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XINPRS +CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRS', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XACPRS +CALL FIND_FIELD_ID_FROM_MNHNAME('INPRG', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XINPRG +CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRG', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XACPRG +CALL FIND_FIELD_ID_FROM_MNHNAME('INPRH', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XINPRH +CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRH', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XACPRH ! ! ! @@ -2726,6 +2941,7 @@ IF (CPROGRAM == 'MESONH') THEN CALL FIND_FIELD_ID_FROM_MNHNAME('WS_PRES',IID,IRESP); XRWS_PRES => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA CALL FIND_FIELD_ID_FROM_MNHNAME('THS_CLD',IID,IRESP); XRTHS_CLD => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA CALL FIND_FIELD_ID_FROM_MNHNAME('CLDFR', IID,IRESP); XCLDFR => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA + CALL FIND_FIELD_ID_FROM_MNHNAME('CIT', IID,IRESP); XCIT => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA END IF ! ! MODD_PAST_FIELD_n variables @@ -2929,15 +3145,18 @@ END IF ! IF (TRIM(CPROGRAM) /= 'PGD' .AND. TRIM(CPROGRAM) /= 'NESPGD' .AND. TRIM(CPROGRAM) /= 'SPAWN') THEN IF (CDCONV /= 'NONE' .OR. CSCONV == 'KAFR') THEN - CALL FIND_FIELD_ID_FROM_MNHNAME('COUNTCONV',IID,IRESP); NCOUNTCONV => TFIELDLIST(IID)%TFIELD_N2D(KTO)%DATA - CALL FIND_FIELD_ID_FROM_MNHNAME('DTHCONV', IID,IRESP); XDTHCONV => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA - CALL FIND_FIELD_ID_FROM_MNHNAME('DRVCONV', IID,IRESP); XDRVCONV => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA - CALL FIND_FIELD_ID_FROM_MNHNAME('DRCCONV', IID,IRESP); XDRCCONV => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA - CALL FIND_FIELD_ID_FROM_MNHNAME('DRICONV', IID,IRESP); XDRICONV => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA - CALL FIND_FIELD_ID_FROM_MNHNAME('PRCONV', IID,IRESP); XPRCONV => 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('PACCONV', IID,IRESP); XPACCONV => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA - + CALL FIND_FIELD_ID_FROM_MNHNAME('COUNTCONV', IID,IRESP); NCOUNTCONV => TFIELDLIST(IID)%TFIELD_N2D(KTO)%DATA + CALL FIND_FIELD_ID_FROM_MNHNAME('DTHCONV', IID,IRESP); XDTHCONV => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA + CALL FIND_FIELD_ID_FROM_MNHNAME('DRVCONV', IID,IRESP); XDRVCONV => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA + CALL FIND_FIELD_ID_FROM_MNHNAME('DRCCONV', IID,IRESP); XDRCCONV => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA + CALL FIND_FIELD_ID_FROM_MNHNAME('DRICONV', IID,IRESP); XDRICONV => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA + 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('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 + CALL FIND_FIELD_ID_FROM_MNHNAME('CG_TOTAL_NB',IID,IRESP); XCG_TOTAL_NUMBER => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA END IF END IF ! @@ -2954,10 +3173,20 @@ CALL FIND_FIELD_ID_FROM_MNHNAME('SSO_STDEV',IID,IRESP); XSSO_STDEV => TFIEL ! ! MODD_PRECIP_n variables ! +CALL FIND_FIELD_ID_FROM_MNHNAME('INPRC', IID,IRESP); XINPRC => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA +CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRC', IID,IRESP); XACPRC => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA +CALL FIND_FIELD_ID_FROM_MNHNAME('INDEP', IID,IRESP); XINDEP => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA +CALL FIND_FIELD_ID_FROM_MNHNAME('ACDEP', IID,IRESP); XACDEP => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA CALL FIND_FIELD_ID_FROM_MNHNAME('INPRR', IID,IRESP); XINPRR => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA CALL FIND_FIELD_ID_FROM_MNHNAME('INPRR3D',IID,IRESP); XINPRR3D => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA CALL FIND_FIELD_ID_FROM_MNHNAME('EVAP3D', IID,IRESP); XEVAP3D => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRR', IID,IRESP); XACPRR => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA +CALL FIND_FIELD_ID_FROM_MNHNAME('INPRS', IID,IRESP); XINPRS => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA +CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRS', IID,IRESP); XACPRS => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA +CALL FIND_FIELD_ID_FROM_MNHNAME('INPRG', IID,IRESP); XINPRG => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA +CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRG', IID,IRESP); XACPRG => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA +CALL FIND_FIELD_ID_FROM_MNHNAME('INPRH', IID,IRESP); XINPRH => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA +CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRH', IID,IRESP); XACPRH => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA ! END IF !KFROM/=KTO ! diff --git a/src/MNH/goto_model_wrapper.f90 b/src/MNH/goto_model_wrapper.f90 index 834db53558eec2041befa3a8d7e54f9f2d3a12cd..c6ec88e2760cd76aa147093b6bf53529ccedc66f 100644 --- a/src/MNH/goto_model_wrapper.f90 +++ b/src/MNH/goto_model_wrapper.f90 @@ -170,7 +170,7 @@ CALL PASPOL_GOTO_MODEL(KFROM, KTO) #ifdef MNH_FOREFIRE CALL FOREFIRE_GOTO_MODEL(KFROM, KTO) #endif -CALL PRECIP_GOTO_MODEL(KFROM, KTO) +!CALL PRECIP_GOTO_MODEL(KFROM, KTO) CALL ELEC_GOTO_MODEL(KFROM, KTO) CALL PROFILER_GOTO_MODEL(KFROM, KTO) CALL RADIATIONS_GOTO_MODEL(KFROM, KTO) diff --git a/src/MNH/modd_deep_convectionn.f90 b/src/MNH/modd_deep_convectionn.f90 index ed180329cab7ea380ba33da2d187dd3766868617..7b19db8a81a73083610da0f3873451af6b539053 100644 --- a/src/MNH/modd_deep_convectionn.f90 +++ b/src/MNH/modd_deep_convectionn.f90 @@ -67,10 +67,10 @@ TYPE DEEP_CONVECTION_t 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 +! 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 @@ -121,10 +121,10 @@ DEEP_CONVECTION_MODEL(KFROM)%XPRSFLXCONV=>XPRSFLXCONV DEEP_CONVECTION_MODEL(KFROM)%XCAPE=>XCAPE DEEP_CONVECTION_MODEL(KFROM)%NCLTOPCONV=>NCLTOPCONV DEEP_CONVECTION_MODEL(KFROM)%NCLBASCONV=>NCLBASCONV -DEEP_CONVECTION_MODEL(KFROM)%XIC_RATE=>XIC_RATE -DEEP_CONVECTION_MODEL(KFROM)%XCG_RATE=>XCG_RATE -DEEP_CONVECTION_MODEL(KFROM)%XIC_TOTAL_NUMBER=>XIC_TOTAL_NUMBER -DEEP_CONVECTION_MODEL(KFROM)%XCG_TOTAL_NUMBER=>XCG_TOTAL_NUMBER +!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 ! ! Current model is set to model KTO !NCOUNTCONV=>DEEP_CONVECTION_MODEL(KTO)%NCOUNTCONV !Done in FIELDLIST_GOTO_MODEL @@ -144,10 +144,10 @@ XPRSFLXCONV=>DEEP_CONVECTION_MODEL(KTO)%XPRSFLXCONV XCAPE=>DEEP_CONVECTION_MODEL(KTO)%XCAPE NCLTOPCONV=>DEEP_CONVECTION_MODEL(KTO)%NCLTOPCONV NCLBASCONV=>DEEP_CONVECTION_MODEL(KTO)%NCLBASCONV -XIC_RATE=>DEEP_CONVECTION_MODEL(KTO)%XIC_RATE -XCG_RATE=>DEEP_CONVECTION_MODEL(KTO)%XCG_RATE -XIC_TOTAL_NUMBER=>DEEP_CONVECTION_MODEL(KTO)%XIC_TOTAL_NUMBER -XCG_TOTAL_NUMBER=>DEEP_CONVECTION_MODEL(KTO)%XCG_TOTAL_NUMBER +!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 diff --git a/src/MNH/modd_fieldn.f90 b/src/MNH/modd_fieldn.f90 index 3f3d0a469d18df7c926920d77b4f74d7c2898bab..8a0845b68ded82a12bd694c268b0fefe8ef055b6 100644 --- a/src/MNH/modd_fieldn.f90 +++ b/src/MNH/modd_fieldn.f90 @@ -103,7 +103,7 @@ TYPE FIELD_t ! REAL, DIMENSION(:,:,:), POINTER :: XSIGS=>NULL() ! =sqrt(<s's'>) for the ! ! Subgrid Condensation ! REAL, DIMENSION(:,:,:), POINTER :: XCLDFR=>NULL() ! cloud fraction - REAL, DIMENSION(:,:,:), POINTER :: XCIT=>NULL() ! Pristine ice concentration +! REAL, DIMENSION(:,:,:), POINTER :: XCIT=>NULL() ! Pristine ice concentration REAL, DIMENSION(:,:,:), POINTER :: XTHM=>NULL() ! Theta at Previous time step REAL, DIMENSION(:,:,:), POINTER :: XRCM=>NULL() ! Cloud mixing ratio at Previous time step REAL, DIMENSION(:,:,:), POINTER :: XPABSM=>NULL() ! Theta at Previous time step @@ -180,7 +180,7 @@ FIELD_MODEL(KFROM)%XSRC=>XSRC !FIELD_MODEL(KFROM)%XSRCT=>XSRCT !Done in FIELDLIST_GOTO_MODEL !FIELD_MODEL(KFROM)%XSIGS=>XSIGS !Done in FIELDLIST_GOTO_MODEL !FIELD_MODEL(KFROM)%XCLDFR=>XCLDFR !Done in FIELDLIST_GOTO_MODEL -FIELD_MODEL(KFROM)%XCIT=>XCIT +!FIELD_MODEL(KFROM)%XCIT=>XCIT !Done in FIELDLIST_GOTO_MODEL FIELD_MODEL(KFROM)%XTHM=>XTHM FIELD_MODEL(KFROM)%XPABSM=>XPABSM FIELD_MODEL(KFROM)%XRCM=>XRCM @@ -217,7 +217,7 @@ XSRC=>FIELD_MODEL(KTO)%XSRC !XSRCT=>FIELD_MODEL(KTO)%XSRCT !Done in FIELDLIST_GOTO_MODEL !XSIGS=>FIELD_MODEL(KTO)%XSIGS !Done in FIELDLIST_GOTO_MODEL !XCLDFR=>FIELD_MODEL(KTO)%XCLDFR !Done in FIELDLIST_GOTO_MODEL -XCIT=>FIELD_MODEL(KTO)%XCIT +!XCIT=>FIELD_MODEL(KTO)%XCIT !Done in FIELDLIST_GOTO_MODEL XTHM=>FIELD_MODEL(KTO)%XTHM XPABSM=>FIELD_MODEL(KTO)%XPABSM XRCM=>FIELD_MODEL(KTO)%XRCM diff --git a/src/MNH/modd_precipn.f90 b/src/MNH/modd_precipn.f90 index 645ec2b2a3cb673285791931b759e1b8d535d259..fffa53c9c990562e8c9a2f521610fab63e88a5ad 100644 --- a/src/MNH/modd_precipn.f90 +++ b/src/MNH/modd_precipn.f90 @@ -45,30 +45,14 @@ USE MODD_PARAMETERS, ONLY: JPMODELMAX IMPLICIT NONE -TYPE PRECIP_t -! - REAL, DIMENSION(:,:), POINTER :: XINPRC=>NULL(), XACPRC=>NULL(), & - XINDEP=>NULL(), XACDEP=>NULL(), & -! XINPRR=>NULL(), XACPRR=>NULL(), & - XINPRS=>NULL(), XACPRS=>NULL(), XINPRG=>NULL(), & - XACPRG=>NULL(), XINPRH=>NULL(), XACPRH=>NULL() - ! Instant and cumul of ground - ! precipitation fields of Cloud,Rain, - ! Snow, Graupel and Hail -! REAL, DIMENSION(:,:,:), POINTER :: XINPRR3D=>NULL(), & !Instant precip 3D -! XEVAP3D=>NULL()! Evap profile 3D -! -END TYPE PRECIP_t - -TYPE(PRECIP_t), DIMENSION(JPMODELMAX), TARGET, SAVE :: PRECIP_MODEL - -REAL, DIMENSION(:,:), POINTER :: XINPRC=>NULL(), XACPRC=>NULL(), & - XINDEP=>NULL(), XACDEP=>NULL(), & - XINPRR=>NULL(), XACPRR=>NULL(), & - XINPRG=>NULL(), XINPRS=>NULL(), XACPRS=>NULL(), & - XACPRG=>NULL(), XINPRH=>NULL(), XACPRH=>NULL() - REAL, DIMENSION(:,:,:), POINTER :: XINPRR3D=>NULL(), & !Instant precip 3D - XEVAP3D=>NULL()! Evap profile 3D +REAL, DIMENSION(:,:), POINTER :: XINPRC=>NULL(), XACPRC=>NULL(), & ! Instant and cumul of ground + XINDEP=>NULL(), XACDEP=>NULL(), & ! precipitation fields of Cloud, Rain, + XINPRR=>NULL(), XACPRR=>NULL(), & ! Snow, Graupel and Hail + XINPRS=>NULL(), XACPRS=>NULL(), & + XINPRG=>NULL(), XACPRG=>NULL(), & + XINPRH=>NULL(), XACPRH=>NULL() +REAL, DIMENSION(:,:,:), POINTER :: XINPRR3D=>NULL(), & !Instant precip 3D + XEVAP3D =>NULL() ! Evap profile 3D CONTAINS @@ -76,40 +60,6 @@ SUBROUTINE PRECIP_GOTO_MODEL(KFROM, KTO) ! INTEGER, INTENT(IN) :: KFROM, KTO ! -INTEGER :: IID,IRESP -! -! Save current state for allocated arrays -PRECIP_MODEL(KFROM)%XINPRC=>XINPRC -PRECIP_MODEL(KFROM)%XACPRC=>XACPRC -PRECIP_MODEL(KFROM)%XINDEP=>XINDEP -PRECIP_MODEL(KFROM)%XACDEP=>XACDEP -!PRECIP_MODEL(KFROM)%XINPRR=>XINPRR !Done in FIELDLIST_GOTO_MODEL -!PRECIP_MODEL(KFROM)%XINPRR3D=>XINPRR3D !Done in FIELDLIST_GOTO_MODEL -!PRECIP_MODEL(KFROM)%XEVAP3D=>XEVAP3D !Done in FIELDLIST_GOTO_MODEL -!PRECIP_MODEL(KFROM)%XACPRR=>XACPRR !Done in FIELDLIST_GOTO_MODEL -PRECIP_MODEL(KFROM)%XINPRS=>XINPRS -PRECIP_MODEL(KFROM)%XACPRS=>XACPRS -PRECIP_MODEL(KFROM)%XINPRG=>XINPRG -PRECIP_MODEL(KFROM)%XACPRG=>XACPRG -PRECIP_MODEL(KFROM)%XINPRH=>XINPRH -PRECIP_MODEL(KFROM)%XACPRH=>XACPRH -! -! Current model is set to model KTO -XINPRC=>PRECIP_MODEL(KTO)%XINPRC -XACPRC=>PRECIP_MODEL(KTO)%XACPRC -XINDEP=>PRECIP_MODEL(KTO)%XINDEP -XACDEP=>PRECIP_MODEL(KTO)%XACDEP -!XINPRR=>PRECIP_MODEL(KTO)%XINPRR !Done in FIELDLIST_GOTO_MODEL -!XINPRR3D=>PRECIP_MODEL(KTO)%XINPRR3D !Done in FIELDLIST_GOTO_MODEL -!XEVAP3D=>PRECIP_MODEL(KTO)%XEVAP3D !Done in FIELDLIST_GOTO_MODEL -!XACPRR=>PRECIP_MODEL(KTO)%XACPRR !Done in FIELDLIST_GOTO_MODEL -XINPRS=>PRECIP_MODEL(KTO)%XINPRS -XACPRS=>PRECIP_MODEL(KTO)%XACPRS -XINPRG=>PRECIP_MODEL(KTO)%XINPRG -XACPRG=>PRECIP_MODEL(KTO)%XACPRG -XINPRH=>PRECIP_MODEL(KTO)%XINPRH -XACPRH=>PRECIP_MODEL(KTO)%XACPRH - END SUBROUTINE PRECIP_GOTO_MODEL END MODULE MODD_PRECIP_n diff --git a/src/MNH/modd_spawn.f90 b/src/MNH/modd_spawn.f90 index 6dcdc45869f468969550fe77856bd421c78f2375..1e61f69b440d4d8c6165ebada9157fdc455a07c7 100644 --- a/src/MNH/modd_spawn.f90 +++ b/src/MNH/modd_spawn.f90 @@ -90,9 +90,20 @@ REAL,DIMENSION(:,:,:),SAVE,POINTER :: XLSVM1 REAL,DIMENSION(:,:,:),SAVE,POINTER :: XLSWM1 REAL,DIMENSION(:,:,:),SAVE,POINTER :: XLSTHM1 REAL,DIMENSION(:,:,:),SAVE,POINTER :: XLSRVM1 +! +REAL,DIMENSION(:,:), SAVE,POINTER :: XINPRC1 +REAL,DIMENSION(:,:), SAVE,POINTER :: XACPRC1 +REAL,DIMENSION(:,:), SAVE,POINTER :: XINDEP1 +REAL,DIMENSION(:,:), SAVE,POINTER :: XACDEP1 REAL,DIMENSION(:,:), SAVE,POINTER :: XINPRR1 REAL,DIMENSION(:,:,:),SAVE,POINTER :: XINPRR3D1 REAL,DIMENSION(:,:,:),SAVE,POINTER :: XEVAP3D1 REAL,DIMENSION(:,:), SAVE,POINTER :: XACPRR1 +REAL,DIMENSION(:,:), SAVE,POINTER :: XINPRS1 +REAL,DIMENSION(:,:), SAVE,POINTER :: XACPRS1 +REAL,DIMENSION(:,:), SAVE,POINTER :: XINPRG1 +REAL,DIMENSION(:,:), SAVE,POINTER :: XACPRG1 +REAL,DIMENSION(:,:), SAVE,POINTER :: XINPRH1 +REAL,DIMENSION(:,:), SAVE,POINTER :: XACPRH1 ! END MODULE MODD_SPAWN diff --git a/src/MNH/spawn_surf2_rain.f90 b/src/MNH/spawn_surf2_rain.f90 index dd984b3ce2366fb83061305307318bdad10af1f8..38b6f46d8dd148e04ad3ccf8af316f36a76d14de 100644 --- a/src/MNH/spawn_surf2_rain.f90 +++ b/src/MNH/spawn_surf2_rain.f90 @@ -116,7 +116,6 @@ END MODULE MODI_SPAWN_SURF2_RAIN !* 0. DECLARATIONS ! ------------ USE MODD_LBC_n, ONLY : LBC_MODEL -USE MODD_PRECIP_n,ONLY : PRECIP_MODEL USE MODD_BIKHARDT_n USE MODD_LUNIT_n, ONLY : CLUOUT USE MODD_FIELD_n, ONLY : XTHT @@ -204,14 +203,14 @@ IF (KDXRATIO == 1 .AND. KDYRATIO == 1 ) THEN ! !* 3.1 special case of spawning - no change of resolution : ! - IF (SIZE(PRECIP_MODEL(1)%XINPRC) /= 0 ) THEN - PINPRC(:,:) = PRECIP_MODEL(1)%XINPRC(KXOR:KXEND,KYOR:KYEND) - PACPRC(:,:) = PRECIP_MODEL(1)%XACPRC(KXOR:KXEND,KYOR:KYEND) + IF (SIZE(XINPRC1) /= 0 ) THEN + PINPRC(:,:) = XINPRC1(KXOR:KXEND,KYOR:KYEND) + PACPRC(:,:) = XACPRC1(KXOR:KXEND,KYOR:KYEND) END IF ! - IF (SIZE(PRECIP_MODEL(1)%XINDEP) /= 0 ) THEN - PINDEP(:,:) = PRECIP_MODEL(1)%XINDEP(KXOR:KXEND,KYOR:KYEND) - PACDEP(:,:) = PRECIP_MODEL(1)%XACDEP(KXOR:KXEND,KYOR:KYEND) + IF (SIZE(XINDEP1) /= 0 ) THEN + PINDEP(:,:) = XINDEP1(KXOR:KXEND,KYOR:KYEND) + PACDEP(:,:) = XACDEP1(KXOR:KXEND,KYOR:KYEND) END IF ! IF (SIZE(XINPRR1) /= 0 ) THEN @@ -221,19 +220,19 @@ IF (KDXRATIO == 1 .AND. KDYRATIO == 1 ) THEN PACPRR(:,:) = XACPRR1 (KXOR:KXEND,KYOR:KYEND) END IF ! - IF (SIZE(PRECIP_MODEL(1)%XINPRS) /= 0 ) THEN - PINPRS(:,:) = PRECIP_MODEL(1)%XINPRS(KXOR:KXEND,KYOR:KYEND) - PACPRS(:,:) = PRECIP_MODEL(1)%XACPRS(KXOR:KXEND,KYOR:KYEND) + IF (SIZE(XINPRS1) /= 0 ) THEN + PINPRS(:,:) = XINPRS1(KXOR:KXEND,KYOR:KYEND) + PACPRS(:,:) = XACPRS1(KXOR:KXEND,KYOR:KYEND) END IF ! - IF (SIZE(PRECIP_MODEL(1)%XINPRG) /= 0 ) THEN - PINPRG(:,:) = PRECIP_MODEL(1)%XINPRG(KXOR:KXEND,KYOR:KYEND) - PACPRG(:,:) = PRECIP_MODEL(1)%XACPRG(KXOR:KXEND,KYOR:KYEND) + IF (SIZE(XINPRG1) /= 0 ) THEN + PINPRG(:,:) = XINPRG1(KXOR:KXEND,KYOR:KYEND) + PACPRG(:,:) = XACPRG1(KXOR:KXEND,KYOR:KYEND) END IF ! - IF (SIZE(PRECIP_MODEL(1)%XINPRH) /= 0 ) THEN - PINPRH(:,:) = PRECIP_MODEL(1)%XINPRH(KXOR:KXEND,KYOR:KYEND) - PACPRH(:,:) = PRECIP_MODEL(1)%XACPRH(KXOR:KXEND,KYOR:KYEND) + IF (SIZE(XINPRH1) /= 0 ) THEN + PINPRH(:,:) = XINPRH1(KXOR:KXEND,KYOR:KYEND) + PACPRH(:,:) = XACPRH1(KXOR:KXEND,KYOR:KYEND) END IF ! ! @@ -249,32 +248,32 @@ ELSE ! IF ( YMETHOD == 'BI' ) THEN ! - IF (SIZE(PRECIP_MODEL(1)%XINPRC) /= 0 ) THEN - IDIMX = SIZE(PRECIP_MODEL(1)%XINPRC,1) - IDIMY = SIZE(PRECIP_MODEL(1)%XINPRC,2) + IF (SIZE(XINPRC1) /= 0 ) THEN + IDIMX = SIZE(XINPRC1,1) + IDIMY = SIZE(XINPRC1,2) CALL BIKHARDT(XBMX1,XBMX2,XBMX3,XBMX4,XBMY1,XBMY2,XBMY3,XBMY4, & XBFX1,XBFX2,XBFX3,XBFX4,XBFY1,XBFY2,XBFY3,XBFY4, & 2,2,IDIMX-1,IDIMY-1,KDXRATIO,KDYRATIO,1, & - LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,PRECIP_MODEL(1)%XINPRC,PINPRC) + LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,XINPRC1,PINPRC) CALL BIKHARDT(XBMX1,XBMX2,XBMX3,XBMX4,XBMY1,XBMY2,XBMY3,XBMY4, & XBFX1,XBFX2,XBFX3,XBFX4,XBFY1,XBFY2,XBFY3,XBFY4, & 2,2,IDIMX-1,IDIMY-1,KDXRATIO,KDYRATIO,1, & - LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,PRECIP_MODEL(1)%XACPRC,PACPRC) + LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,XACPRC1,PACPRC) PINPRC(:,:)=MAX(0.,PINPRC(:,:)) PACPRC(:,:)=MAX(0.,PACPRC(:,:)) END IF ! - IF (SIZE(PRECIP_MODEL(1)%XINDEP) /= 0 ) THEN - IDIMX = SIZE(PRECIP_MODEL(1)%XINDEP,1) - IDIMY = SIZE(PRECIP_MODEL(1)%XINDEP,2) + IF (SIZE(XINDEP1) /= 0 ) THEN + IDIMX = SIZE(XINDEP1,1) + IDIMY = SIZE(XINDEP1,2) CALL BIKHARDT(XBMX1,XBMX2,XBMX3,XBMX4,XBMY1,XBMY2,XBMY3,XBMY4, & XBFX1,XBFX2,XBFX3,XBFX4,XBFY1,XBFY2,XBFY3,XBFY4, & 2,2,IDIMX-1,IDIMY-1,KDXRATIO,KDYRATIO,1, & - LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,PRECIP_MODEL(1)%XINDEP,PINDEP) + LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,XINDEP1,PINDEP) CALL BIKHARDT(XBMX1,XBMX2,XBMX3,XBMX4,XBMY1,XBMY2,XBMY3,XBMY4, & XBFX1,XBFX2,XBFX3,XBFX4,XBFY1,XBFY2,XBFY3,XBFY4, & 2,2,IDIMX-1,IDIMY-1,KDXRATIO,KDYRATIO,1, & - LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,PRECIP_MODEL(1)%XACDEP,PACDEP) + LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,XACDEP1,PACDEP) PINDEP(:,:)=MAX(0.,PINDEP(:,:)) PACDEP(:,:)=MAX(0.,PACDEP(:,:)) END IF @@ -304,47 +303,47 @@ ELSE PACPRR(:,:)=MAX(0.,PACPRR(:,:)) END IF ! - IF (SIZE(PRECIP_MODEL(1)%XINPRS) /= 0 ) THEN - IDIMX = SIZE(PRECIP_MODEL(1)%XINPRS,1) - IDIMY = SIZE(PRECIP_MODEL(1)%XINPRS,2) + IF (SIZE(XINPRS1) /= 0 ) THEN + IDIMX = SIZE(XINPRS1,1) + IDIMY = SIZE(XINPRS1,2) CALL BIKHARDT(XBMX1,XBMX2,XBMX3,XBMX4,XBMY1,XBMY2,XBMY3,XBMY4, & XBFX1,XBFX2,XBFX3,XBFX4,XBFY1,XBFY2,XBFY3,XBFY4, & 2,2,IDIMX-1,IDIMY-1,KDXRATIO,KDYRATIO,1, & - LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,PRECIP_MODEL(1)%XINPRS,PINPRS) + LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,XINPRS1,PINPRS) CALL BIKHARDT(XBMX1,XBMX2,XBMX3,XBMX4,XBMY1,XBMY2,XBMY3,XBMY4, & XBFX1,XBFX2,XBFX3,XBFX4,XBFY1,XBFY2,XBFY3,XBFY4, & 2,2,IDIMX-1,IDIMY-1,KDXRATIO,KDYRATIO,1, & - LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,PRECIP_MODEL(1)%XACPRS,PACPRS) + LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,XACPRS1,PACPRS) PINPRS(:,:)=MAX(0.,PINPRS(:,:)) PACPRS(:,:)=MAX(0.,PACPRS(:,:)) END IF ! - IF (SIZE(PRECIP_MODEL(1)%XINPRG) /= 0 ) THEN - IDIMX = SIZE(PRECIP_MODEL(1)%XINPRG,1) - IDIMY = SIZE(PRECIP_MODEL(1)%XINPRG,2) + IF (SIZE(XINPRG1) /= 0 ) THEN + IDIMX = SIZE(XINPRG1,1) + IDIMY = SIZE(XINPRG1,2) CALL BIKHARDT(XBMX1,XBMX2,XBMX3,XBMX4,XBMY1,XBMY2,XBMY3,XBMY4, & XBFX1,XBFX2,XBFX3,XBFX4,XBFY1,XBFY2,XBFY3,XBFY4, & 2,2,IDIMX-1,IDIMY-1,KDXRATIO,KDYRATIO,1, & - LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,PRECIP_MODEL(1)%XINPRG,PINPRG) + LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,XINPRG1,PINPRG) CALL BIKHARDT(XBMX1,XBMX2,XBMX3,XBMX4,XBMY1,XBMY2,XBMY3,XBMY4, & XBFX1,XBFX2,XBFX3,XBFX4,XBFY1,XBFY2,XBFY3,XBFY4, & 2,2,IDIMX-1,IDIMY-1,KDXRATIO,KDYRATIO,1, & - LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,PRECIP_MODEL(1)%XACPRG,PACPRG) + LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,XACPRG1,PACPRG) PINPRG(:,:)=MAX(0.,PINPRG(:,:)) PACPRG(:,:)=MAX(0.,PACPRG(:,:)) END IF ! - IF (SIZE(PRECIP_MODEL(1)%XINPRH) /= 0 ) THEN - IDIMX = SIZE(PRECIP_MODEL(1)%XINPRH,1) - IDIMY = SIZE(PRECIP_MODEL(1)%XINPRH,2) + IF (SIZE(XINPRH1) /= 0 ) THEN + IDIMX = SIZE(XINPRH1,1) + IDIMY = SIZE(XINPRH1,2) CALL BIKHARDT(XBMX1,XBMX2,XBMX3,XBMX4,XBMY1,XBMY2,XBMY3,XBMY4, & XBFX1,XBFX2,XBFX3,XBFX4,XBFY1,XBFY2,XBFY3,XBFY4, & 2,2,IDIMX-1,IDIMY-1,KDXRATIO,KDYRATIO,1, & - LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,PRECIP_MODEL(1)%XINPRH,PINPRH) + LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,XINPRH1,PINPRH) CALL BIKHARDT(XBMX1,XBMX2,XBMX3,XBMX4,XBMY1,XBMY2,XBMY3,XBMY4, & XBFX1,XBFX2,XBFX3,XBFX4,XBFY1,XBFY2,XBFY3,XBFY4, & 2,2,IDIMX-1,IDIMY-1,KDXRATIO,KDYRATIO,1, & - LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,PRECIP_MODEL(1)%XACPRH,PACPRH) + LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,XACPRH1,PACPRH) PINPRH(:,:)=MAX(0.,PINPRH(:,:)) PACPRH(:,:)=MAX(0.,PACPRH(:,:)) END IF @@ -359,7 +358,7 @@ END IF ! ---------------------------- ! IF (PRESENT(HSONFILE)) THEN - IF (SIZE(PRECIP_MODEL(1)%XINPRC) /= 0 ) THEN + IF (SIZE(XINPRC1) /= 0 ) THEN ALLOCATE(ZINPRC1(KIUSON,KJUSON)) ALLOCATE(ZACPRC1(KIUSON,KJUSON)) YGETRRT='READ' @@ -368,7 +367,7 @@ IF (PRESENT(HSONFILE)) THEN ALLOCATE(ZACPRC1(0,0)) YGETRRT='SKIP' END IF - IF (SIZE(PRECIP_MODEL(1)%XINDEP) /= 0 ) THEN + IF (SIZE(XINDEP1) /= 0 ) THEN ALLOCATE(ZINDEP1(KIUSON,KJUSON)) ALLOCATE(ZACDEP1(KIUSON,KJUSON)) YGETRRT='READ' @@ -390,7 +389,7 @@ IF (PRESENT(HSONFILE)) THEN ALLOCATE(ZACPRR1(0,0)) YGETRRT='SKIP' END IF - IF (SIZE(PRECIP_MODEL(1)%XINPRS) /= 0 ) THEN + IF (SIZE(XINPRS1) /= 0 ) THEN ALLOCATE(ZINPRS1(KIUSON,KJUSON)) ALLOCATE(ZACPRS1(KIUSON,KJUSON)) YGETRST='READ' @@ -399,7 +398,7 @@ IF (PRESENT(HSONFILE)) THEN ALLOCATE(ZACPRS1(0,0)) YGETRST='SKIP' END IF - IF (SIZE(PRECIP_MODEL(1)%XINPRG) /= 0 ) THEN + IF (SIZE(XINPRG1) /= 0 ) THEN ALLOCATE(ZINPRG1(KIUSON,KJUSON)) ALLOCATE(ZACPRG1(KIUSON,KJUSON)) YGETRGT='READ' @@ -408,7 +407,7 @@ IF (PRESENT(HSONFILE)) THEN ALLOCATE(ZACPRG1(0,0)) YGETRGT='SKIP' END IF - IF (SIZE(PRECIP_MODEL(1)%XINPRH) /= 0 ) THEN + IF (SIZE(XINPRH1) /= 0 ) THEN ALLOCATE(ZINPRH1(KIUSON,KJUSON)) ALLOCATE(ZACPRH1(KIUSON,KJUSON)) YGETRHT='READ' @@ -422,11 +421,11 @@ IF (PRESENT(HSONFILE)) THEN ZINPRC1,ZACPRC1,ZINDEP1,ZACDEP1,ZINPRR1,ZINPRR3D1,ZEVAP3D1, & ZACPRR1,ZINPRS1,ZACPRS1, & ZINPRG1,ZACPRG1,ZINPRH1,ZACPRH1 ) - IF (SIZE(PRECIP_MODEL(1)%XINPRC) /= 0 ) THEN + IF (SIZE(XINPRC1) /= 0 ) THEN PINPRC(KIB2:KIE2,KJB2:KJE2) = ZINPRC1(KIB1:KIE1,KJB1:KJE1) PACPRC(KIB2:KIE2,KJB2:KJE2) = ZACPRC1(KIB1:KIE1,KJB1:KJE1) END IF - IF (SIZE(PRECIP_MODEL(1)%XINDEP) /= 0 ) THEN + IF (SIZE(XINDEP1) /= 0 ) THEN PINDEP(KIB2:KIE2,KJB2:KJE2) = ZINDEP1(KIB1:KIE1,KJB1:KJE1) PACDEP(KIB2:KIE2,KJB2:KJE2) = ZACDEP1(KIB1:KIE1,KJB1:KJE1) END IF @@ -444,19 +443,19 @@ IF (PRESENT(HSONFILE)) THEN DEALLOCATE(ZINPRR3D1) DEALLOCATE(ZEVAP3D1) DEALLOCATE(ZACPRR1) - IF (SIZE(PRECIP_MODEL(1)%XINPRS) /= 0 ) THEN + IF (SIZE(XINPRS1) /= 0 ) THEN PINPRS(KIB2:KIE2,KJB2:KJE2) = ZINPRS1(KIB1:KIE1,KJB1:KJE1) PACPRS(KIB2:KIE2,KJB2:KJE2) = ZACPRS1(KIB1:KIE1,KJB1:KJE1) END IF DEALLOCATE(ZINPRS1) DEALLOCATE(ZACPRS1) - IF (SIZE(PRECIP_MODEL(1)%XINPRG) /= 0 ) THEN + IF (SIZE(XINPRG1) /= 0 ) THEN PINPRG(KIB2:KIE2,KJB2:KJE2) = ZINPRG1(KIB1:KIE1,KJB1:KJE1) PACPRG(KIB2:KIE2,KJB2:KJE2) = ZACPRG1(KIB1:KIE1,KJB1:KJE1) END IF DEALLOCATE(ZINPRG1) DEALLOCATE(ZACPRG1) - IF (SIZE(PRECIP_MODEL(1)%XINPRH) /= 0 ) THEN + IF (SIZE(XINPRH1) /= 0 ) THEN PINPRH(KIB2:KIE2,KJB2:KJE2) = ZINPRH1(KIB1:KIE1,KJB1:KJE1) PACPRH(KIB2:KIE2,KJB2:KJE2) = ZACPRH1(KIB1:KIE1,KJB1:KJE1) END IF diff --git a/src/MNH/spawning.f90 b/src/MNH/spawning.f90 index b537f31b57ad43e937899570366cc0edb833aaff..e835499141e1e13ea3e540b8128f2181cc79b537 100644 --- a/src/MNH/spawning.f90 +++ b/src/MNH/spawning.f90 @@ -289,10 +289,22 @@ XLSVM1 => XLSVM XLSWM1 => XLSWM XLSTHM1 => XLSTHM XLSRVM1 => XLSRVM +! +XINPRC1 => XINPRC +XACPRC1 => XACPRC +XINDEP1 => XINDEP +XACDEP1 => XACDEP XINPRR1 => XINPRR XINPRR3D1 => XINPRR3D XEVAP3D1 => XEVAP3D XACPRR1 => XACPRR +XINPRS1 => XINPRS +XACPRS1 => XACPRS +XINPRG1 => XINPRG +XACPRG1 => XACPRG +XINPRH1 => XINPRH +XACPRH1 => XACPRH + ! END SUBROUTINE SET_POINTERS_TO_MODEL1 ! diff --git a/src/MNH/uv_to_zonal_and_merid.f90 b/src/MNH/uv_to_zonal_and_merid.f90 index f30f3ba305d600dd4a3cfce460ce3190d01845b2..c47045258bbd42d26838eb7290c8ef64e2bff308 100644 --- a/src/MNH/uv_to_zonal_and_merid.f90 +++ b/src/MNH/uv_to_zonal_and_merid.f90 @@ -8,35 +8,33 @@ MODULE MODI_UV_TO_ZONAL_AND_MERID ! ################################# INTERFACE UV_TO_ZONAL_AND_MERID - SUBROUTINE UV_TO_ZONAL_AND_MERID3D(PU,PV,KGRID,PZC,PMC,TPFILE,HRECU,HRECV,HCOMMENT) + SUBROUTINE UV_TO_ZONAL_AND_MERID3D(PU,PV,KGRID,PZC,PMC,TPFILE,TZFIELDS) ! USE MODD_IO_ll, ONLY: TFILEDATA +USE MODE_FIELD, ONLY: TFIELDDATA ! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PU ! input U component -REAL, DIMENSION(:,:,:), INTENT(IN) :: PV ! input V component -INTEGER, INTENT(IN) :: KGRID ! grid positions of components -REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(OUT) :: PZC ! output U component -REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(OUT) :: PMC ! output V component -TYPE(TFILEDATA), OPTIONAL, INTENT(IN) :: TPFILE ! Output file -CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: HRECU ! Name of the U article -CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: HRECV ! Name of the V article -CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: HCOMMENT ! Comment string +REAL, DIMENSION(:,:,:), INTENT(IN) :: PU ! Input U component +REAL, DIMENSION(:,:,:), INTENT(IN) :: PV ! Input V component +INTEGER, INTENT(IN) :: KGRID ! Grid positions of components +REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(OUT) :: PZC ! Output U component +REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(OUT) :: PMC ! Output V component +TYPE(TFILEDATA), OPTIONAL, INTENT(IN) :: TPFILE ! Output file +TYPE(TFIELDDATA),DIMENSION(2), OPTIONAL, INTENT(IN) :: TZFIELDS ! Fields characteristics ! END SUBROUTINE UV_TO_ZONAL_AND_MERID3D ! - SUBROUTINE UV_TO_ZONAL_AND_MERID2D(PU,PV,KGRID,PZC,PMC,TPFILE,HRECU,HRECV,HCOMMENT) + SUBROUTINE UV_TO_ZONAL_AND_MERID2D(PU,PV,KGRID,PZC,PMC,TPFILE,TZFIELDS) ! USE MODD_IO_ll, ONLY: TFILEDATA +USE MODE_FIELD, ONLY: TFIELDDATA ! -REAL, DIMENSION(:,:), INTENT(IN) :: PU ! input U component -REAL, DIMENSION(:,:), INTENT(IN) :: PV ! input V component -INTEGER, INTENT(IN) :: KGRID ! grid positions of components -REAL, DIMENSION(:,:), OPTIONAL, INTENT(OUT) :: PZC ! output U component -REAL, DIMENSION(:,:), OPTIONAL, INTENT(OUT) :: PMC ! output V component -TYPE(TFILEDATA), OPTIONAL, INTENT(IN) :: TPFILE ! Output file -CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: HRECU ! Name of the U article -CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: HRECV ! Name of the V article -CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: HCOMMENT ! Comment string +REAL, DIMENSION(:,:), INTENT(IN) :: PU ! Input U component +REAL, DIMENSION(:,:), INTENT(IN) :: PV ! Input V component +INTEGER, INTENT(IN) :: KGRID ! Grid positions of components +REAL, DIMENSION(:,:), OPTIONAL, INTENT(OUT) :: PZC ! Output U component +REAL, DIMENSION(:,:), OPTIONAL, INTENT(OUT) :: PMC ! Output V component +TYPE(TFILEDATA), OPTIONAL, INTENT(IN) :: TPFILE ! Output file +TYPE(TFIELDDATA),DIMENSION(2), OPTIONAL, INTENT(IN) :: TZFIELDS ! Fields characteristics ! END SUBROUTINE UV_TO_ZONAL_AND_MERID2D ! @@ -48,26 +46,25 @@ END MODULE MODI_UV_TO_ZONAL_AND_MERID ! ################################### INTERFACE ! - SUBROUTINE UV_TO_ZONAL_AND_MERID3D(PU,PV,KGRID,PZC,PMC,TPFILE,HRECU,HRECV,HCOMMENT) + SUBROUTINE UV_TO_ZONAL_AND_MERID3D(PU,PV,KGRID,PZC,PMC,TPFILE,TZFIELDS) ! USE MODD_IO_ll, ONLY: TFILEDATA +USE MODE_FIELD, ONLY: TFIELDDATA ! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PU ! input U component -REAL, DIMENSION(:,:,:), INTENT(IN) :: PV ! input V component -INTEGER, INTENT(IN) :: KGRID ! grid positions of components -REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(OUT) :: PZC ! output U component -REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(OUT) :: PMC ! output V component -TYPE(TFILEDATA), OPTIONAL, INTENT(IN) :: TPFILE ! Output file -CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: HRECU ! Name of the U article -CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: HRECV ! Name of the V article -CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: HCOMMENT ! Comment string +REAL, DIMENSION(:,:,:), INTENT(IN) :: PU ! Input U component +REAL, DIMENSION(:,:,:), INTENT(IN) :: PV ! Input V component +INTEGER, INTENT(IN) :: KGRID ! Grid positions of components +REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(OUT) :: PZC ! Output U component +REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(OUT) :: PMC ! Output V component +TYPE(TFILEDATA), OPTIONAL, INTENT(IN) :: TPFILE ! Output file +TYPE(TFIELDDATA),DIMENSION(2), OPTIONAL, INTENT(IN) :: TZFIELDS ! Fields characteristics ! END SUBROUTINE UV_TO_ZONAL_AND_MERID3D END INTERFACE END MODULE MODI_UV_TO_ZONAL_AND_MERID3D ! ! ########################################## - SUBROUTINE UV_TO_ZONAL_AND_MERID3D(PU,PV,KGRID,PZC,PMC, TPFILE,HRECU,HRECV,HCOMMENT) + SUBROUTINE UV_TO_ZONAL_AND_MERID3D(PU,PV,KGRID,PZC,PMC,TPFILE,TZFIELDS) ! ########################################## ! !!**** *UV_TO_ZONAL_AND_MERID* - compute the zonal and meridien components @@ -106,14 +103,16 @@ END MODULE MODI_UV_TO_ZONAL_AND_MERID3D USE MODD_CONF USE MODD_CST USE MODD_GRID -USE MODD_IO_ll, ONLY: TFILEDATA +USE MODD_IO_ll, ONLY: TFILEDATA,NVERB_ERROR,NVERB_INFO,NVERB_WARNING USE MODD_PARAMETERS USE MODD_DIM_n USE MODD_GRID_n USE MODD_LUNIT_n ! +USE MODE_FIELD, ONLY: TFIELDDATA USE MODE_FM USE MODE_FMWRIT +USE MODE_MSG ! USE MODI_SHUMAN ! @@ -121,29 +120,25 @@ IMPLICIT NONE ! !* 0.1 declarations of arguments ! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PU ! input U component -REAL, DIMENSION(:,:,:), INTENT(IN) :: PV ! input V component -INTEGER, INTENT(IN) :: KGRID ! grid positions of components -REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(OUT) :: PZC ! output U component -REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(OUT) :: PMC ! output V component -TYPE(TFILEDATA), OPTIONAL, INTENT(IN) :: TPFILE ! Output file -CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: HRECU ! Name of the U article -CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: HRECV ! Name of the V article -CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: HCOMMENT ! Comment string +REAL, DIMENSION(:,:,:), INTENT(IN) :: PU ! Input U component +REAL, DIMENSION(:,:,:), INTENT(IN) :: PV ! Input V component +INTEGER, INTENT(IN) :: KGRID ! Grid positions of components +REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(OUT) :: PZC ! Output U component +REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(OUT) :: PMC ! Output V component +TYPE(TFILEDATA), OPTIONAL, INTENT(IN) :: TPFILE ! Output file +TYPE(TFIELDDATA),DIMENSION(2), OPTIONAL, INTENT(IN) :: TZFIELDS ! Fields characteristics ! !* 0.2 declarations of local variables ! INTEGER :: IKU REAL :: ZRAD_O_DG -REAL, DIMENSION(:,:), ALLOCATABLE :: ZWORK2 -REAL, DIMENSION(:,:,:), ALLOCATABLE:: ZWORK3 -REAL, DIMENSION(:,:,:), ALLOCATABLE:: ZZC,ZMC +REAL, DIMENSION(:,:), ALLOCATABLE :: ZWORK2 +REAL, DIMENSION(:,:,:),ALLOCATABLE :: ZWORK3 +REAL, DIMENSION(:,:,:),ALLOCATABLE :: ZZC,ZMC ! INTEGER :: IGRID ! grid indicator INTEGER :: IRESP ! return-code for the file routines -INTEGER :: ILENCH ! length of comment string INTEGER :: ILUOUT ! logical unit for output listing -CHARACTER(LEN=28) :: YFMFILE ! Name of FM-file to write !----------------------------------------------------------------- ! @@ -168,7 +163,8 @@ DEALLOCATE(ZWORK2) ! Zonal and Meridien components of wind ! IF (KGRID==23) THEN - WRITE(ILUOUT,*) '- zonal and meridien components of winds are computed' + WRITE(ILUOUT,*) '- zonal and meridian components of winds are computed' + CALL PRINT_MSG(NVERB_INFO,'GEN','UV_TO_ZONAL_AND_MERID3D','zonal and meridian components of winds are computed') WHERE ( (PU(:,:,:) /= XUNDEF) .AND. (PV(:,:,:) /= XUNDEF) ) ZZC(:,:,:) = PU(:,:,:) *MXM(COS(ZWORK3(:,:,:))) & + MYF(MXM(PV(:,:,:))) *MXM(SIN(ZWORK3(:,:,:))) @@ -179,7 +175,8 @@ IF (KGRID==23) THEN ZMC(:,:,:) = XUNDEF END WHERE ELSE IF (KGRID==11) THEN - WRITE(ILUOUT,*) '- zonal and meridien components of winds are computed' + WRITE(ILUOUT,*) '- zonal and meridian components of winds are computed' + CALL PRINT_MSG(NVERB_INFO,'GEN','UV_TO_ZONAL_AND_MERID3D','zonal and meridian components of winds are computed') WHERE ( (PU(:,:,:) /= XUNDEF) .AND. (PV(:,:,:) /= XUNDEF) ) ZZC(:,:,:) = PU(:,:,:) *COS(ZWORK3(:,:,:)) +PV(:,:,:) *SIN(ZWORK3(:,:,:)) ZMC(:,:,:) = - PU(:,:,:) *SIN(ZWORK3(:,:,:)) +PV(:,:,:) *COS(ZWORK3(:,:,:)) @@ -192,6 +189,7 @@ ELSE IF (KGRID==0) THEN ! in this case, input winds are ZONal and MERidien ! and, output ones are in MesoNH grid (mass points) WRITE(ILUOUT,*) '- components of winds are replaced in MesoNH grid' + CALL PRINT_MSG(NVERB_INFO,'GEN','UV_TO_ZONAL_AND_MERID3D','components of winds are replaced in MesoNH grid') WHERE ( (PU(:,:,:) /= XUNDEF) .AND. (PV(:,:,:) /= XUNDEF) ) ZZC(:,:,:) = COS(ZWORK3(:,:,:))* PU(:,:,:) - SIN(ZWORK3(:,:,:))* PV(:,:,:) ZMC(:,:,:) = SIN(ZWORK3(:,:,:))* PU(:,:,:) + COS(ZWORK3(:,:,:))* PV(:,:,:) @@ -201,29 +199,38 @@ ELSE IF (KGRID==0) THEN END WHERE ELSE WRITE(ILUOUT,*) '- warning in uv_to_zonal_and_merid: no computation for GRID= ',KGRID + CALL PRINT_MSG(NVERB_ERROR,'GEN','UV_TO_ZONAL_AND_MERID3D','invalid KGRID value') RETURN END IF ! -IF (PRESENT(TPFILE)) THEN - YFMFILE = TPFILE%CNAME - ILENCH=LEN(HCOMMENT) - SELECT CASE (KGRID) - CASE(23) - IGRID=2 - CALL FMWRIT(YFMFILE,HRECU,CLUOUT,'XY',ZZC,IGRID,ILENCH,HCOMMENT,IRESP) - IGRID=3 - CALL FMWRIT(YFMFILE,HRECV,CLUOUT,'XY',ZMC,IGRID,ILENCH,HCOMMENT,IRESP) - CASE(11,0) - IGRID=1 - CALL FMWRIT(YFMFILE,HRECU,CLUOUT,'XY',ZZC,IGRID,ILENCH,HCOMMENT,IRESP) - IGRID=1 - CALL FMWRIT(YFMFILE,HRECV,CLUOUT,'XY',ZMC,IGRID,ILENCH,HCOMMENT,IRESP) - END SELECT -ELSE IF (PRESENT(PZC) .AND. PRESENT(PMC)) THEN - PZC(:,:,:) = ZZC(:,:,:) - PMC(:,:,:) = ZMC(:,:,:) +IF(PRESENT(TPFILE)) THEN + IF(.NOT.PRESENT(TZFIELDS)) THEN + CALL PRINT_MSG(NVERB_WARNING,'IO','UV_TO_ZONAL_AND_MERID3D','TPFILE provided without TZFIELDS') + RETURN + END IF + ! + IF ( KGRID==23 ) THEN + IF ( TZFIELDS(1)%NGRID/=2 .OR. TZFIELDS(2)%NGRID/=3 ) THEN + CALL PRINT_MSG(NVERB_WARNING,'IO','UV_TO_ZONAL_AND_MERID3D','inconsistent values for TZFIELDS(x)%NGRID') + END IF + ELSE IF ( KGRID==0 .OR. KGRID==11 ) THEN + IF ( TZFIELDS(1)%NGRID/=1 .OR. TZFIELDS(2)%NGRID/=1 ) THEN + CALL PRINT_MSG(NVERB_WARNING,'IO','UV_TO_ZONAL_AND_MERID3D','inconsistent values for TZFIELDS(x)%NGRID') + END IF + END IF + ! + IF ( TZFIELDS(1)%CDIR/='XY' .OR. TZFIELDS(2)%CDIR/='XY' ) THEN + CALL PRINT_MSG(NVERB_WARNING,'IO','UV_TO_ZONAL_AND_MERID3D','inconsistent values for TZFIELDS(x)%HDIR') + END IF + ! + CALL IO_WRITE_FIELD(TPFILE,TZFIELDS(1),CLUOUT,IRESP,ZZC(:,:,:)) + CALL IO_WRITE_FIELD(TPFILE,TZFIELDS(2),CLUOUT,IRESP,ZMC(:,:,:)) +ELSE IF (PRESENT(PZC).AND.PRESENT(PMC)) THEN + PZC(:,:,:)=ZZC(:,:,:) + PMC(:,:,:)=ZMC(:,:,:) ELSE WRITE(ILUOUT,*) '- warning in uv_to_zonal_and_merid3d: bad optional arguments' + CALL PRINT_MSG(NVERB_WARNING,'GEN','UV_TO_ZONAL_AND_MERID3D','bad optional arguments') RETURN END IF ! @@ -235,7 +242,7 @@ END SUBROUTINE UV_TO_ZONAL_AND_MERID3D ! ! ! ########################################## - SUBROUTINE UV_TO_ZONAL_AND_MERID2D(PU,PV,KGRID,PZC,PMC,TPFILE,HRECU,HRECV,HCOMMENT) + SUBROUTINE UV_TO_ZONAL_AND_MERID2D(PU,PV,KGRID,PZC,PMC,TPFILE,TZFIELDS) ! ########################################## ! !!**** *UV_TO_ZONAL_AND_MERID* - compute the zonal and meridien components @@ -271,35 +278,34 @@ END SUBROUTINE UV_TO_ZONAL_AND_MERID3D !* 0. DECLARATIONS ! ------------ ! +USE MODD_IO_ll, ONLY: TFILEDATA,NVERB_WARNING USE MODD_LUNIT_n -USE MODI_UV_TO_ZONAL_AND_MERID3D +! +USE MODE_FIELD, ONLY: TFIELDDATA USE MODE_FM USE MODE_FMWRIT -USE MODD_IO_ll, ONLY: TFILEDATA +USE MODE_MSG +! +USE MODI_UV_TO_ZONAL_AND_MERID3D ! IMPLICIT NONE ! !* 0.1 declarations of arguments ! -REAL, DIMENSION(:,:), INTENT(IN) :: PU ! input U component -REAL, DIMENSION(:,:), INTENT(IN) :: PV ! input V component -INTEGER, INTENT(IN) :: KGRID ! grid positions of components -REAL, DIMENSION(:,:), OPTIONAL, INTENT(OUT) :: PZC ! output U component -REAL, DIMENSION(:,:), OPTIONAL, INTENT(OUT) :: PMC ! output V component -TYPE(TFILEDATA), OPTIONAL, INTENT(IN) :: TPFILE ! Output file -CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: HRECU ! Name of the U article -CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: HRECV ! Name of the V article -CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: HCOMMENT ! Comment string +REAL, DIMENSION(:,:), INTENT(IN) :: PU ! Input U component +REAL, DIMENSION(:,:), INTENT(IN) :: PV ! Input V component +INTEGER, INTENT(IN) :: KGRID ! Grid positions of components +REAL, DIMENSION(:,:), OPTIONAL, INTENT(OUT) :: PZC ! Output U component +REAL, DIMENSION(:,:), OPTIONAL, INTENT(OUT) :: PMC ! Output V component +TYPE(TFILEDATA), OPTIONAL, INTENT(IN) :: TPFILE ! Output file +TYPE(TFIELDDATA),DIMENSION(2), OPTIONAL, INTENT(IN) :: TZFIELDS ! Fields characteristics ! !* 0.2 declarations of local variables ! REAL, DIMENSION(SIZE(PU,1),SIZE(PU,2),1) :: ZU3D,ZV3D REAL, DIMENSION(SIZE(PU,1),SIZE(PU,2),1) :: ZZC3D,ZMC3D -INTEGER :: IGRID ! grid indicator INTEGER :: IRESP ! return-code for the file routines -INTEGER :: ILENCH ! length of comment string INTEGER :: ILUOUT ! logical unit for output listing -CHARACTER(LEN=28) :: YFMFILE ! Name of FM-file to write ! !----------------------------------------------------------------- ! @@ -311,25 +317,33 @@ ZV3D(:,:,1)=PV(:,:) CALL UV_TO_ZONAL_AND_MERID3D(ZU3D,ZV3D,KGRID,PZC=ZZC3D,PMC=ZMC3D) ! IF(PRESENT(TPFILE)) THEN - YFMFILE = TPFILE%CNAME - ILENCH=LEN(HCOMMENT) - SELECT CASE (KGRID) - CASE(23) - IGRID=2 - CALL FMWRIT(YFMFILE,HRECU,CLUOUT,'XY',ZZC3D(:,:,1),IGRID,ILENCH,HCOMMENT,IRESP) - IGRID=3 - CALL FMWRIT(YFMFILE,HRECV,CLUOUT,'XY',ZMC3D(:,:,1),IGRID,ILENCH,HCOMMENT,IRESP) - CASE(11,0) - IGRID=1 - CALL FMWRIT(YFMFILE,HRECU,CLUOUT,'XY',ZZC3D(:,:,1),IGRID,ILENCH,HCOMMENT,IRESP) - IGRID=1 - CALL FMWRIT(YFMFILE,HRECV,CLUOUT,'XY',ZMC3D(:,:,1),IGRID,ILENCH,HCOMMENT,IRESP) - END SELECT + IF(.NOT.PRESENT(TZFIELDS)) THEN + CALL PRINT_MSG(NVERB_WARNING,'IO','UV_TO_ZONAL_AND_MERID2D','TPFILE provided without TZFIELDS') + RETURN + END IF + ! + IF ( KGRID==23 ) THEN + IF ( TZFIELDS(1)%NGRID/=2 .OR. TZFIELDS(2)%NGRID/=3 ) THEN + CALL PRINT_MSG(NVERB_WARNING,'IO','UV_TO_ZONAL_AND_MERID2D','inconsistent values for TZFIELDS(x)%NGRID') + END IF + ELSE IF ( KGRID==0 .OR. KGRID==11 ) THEN + IF ( TZFIELDS(1)%NGRID/=1 .OR. TZFIELDS(2)%NGRID/=1 ) THEN + CALL PRINT_MSG(NVERB_WARNING,'IO','UV_TO_ZONAL_AND_MERID2D','inconsistent values for TZFIELDS(x)%NGRID') + END IF + END IF + ! + IF ( TZFIELDS(1)%CDIR/='XY' .OR. TZFIELDS(2)%CDIR/='XY' ) THEN + CALL PRINT_MSG(NVERB_WARNING,'IO','UV_TO_ZONAL_AND_MERID2D','inconsistent values for TZFIELDS(x)%HDIR') + END IF + ! + CALL IO_WRITE_FIELD(TPFILE,TZFIELDS(1),CLUOUT,IRESP,ZZC3D(:,:,1)) + CALL IO_WRITE_FIELD(TPFILE,TZFIELDS(2),CLUOUT,IRESP,ZMC3D(:,:,1)) ELSE IF (PRESENT(PZC).AND.PRESENT(PMC)) THEN PZC(:,:)=ZZC3D(:,:,1) PMC(:,:)=ZMC3D(:,:,1) ELSE WRITE(ILUOUT,*) '- warning in uv_to_zonal_and_merid2d: bad optional arguments' + CALL PRINT_MSG(NVERB_WARNING,'GEN','UV_TO_ZONAL_AND_MERID2D','bad optional arguments') RETURN END IF ! diff --git a/src/MNH/write_lbn.f90 b/src/MNH/write_lbn.f90 index f46ada8da769760f13afe05a53299c8bb06c245e..1bc762938b9cb1aee12e7bdf259ecdaa26fdab02 100644 --- a/src/MNH/write_lbn.f90 +++ b/src/MNH/write_lbn.f90 @@ -263,21 +263,35 @@ TZFIELD%CLBTYPE = 'NONE' !Just to be careful ! IF (NSV >=1) THEN - YRECFM = 'HORELAX_SV' - YCOMMENT=' ' - ILENCH=LEN(YCOMMENT) - GHORELAX_SV=ANY ( LHORELAX_SV ) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,GHORELAX_SV,IGRID,ILENCH,YCOMMENT,IRESP) + GHORELAX_SV=ANY ( LHORELAX_SV ) +! + TZFIELD%CMNHNAME = 'HORELAX_SV' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: HORELAX_SV' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = '' + TZFIELD%NGRID = 0 + TZFIELD%NTYPE = TYPELOG + TZFIELD%NDIMS = 0 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,GHORELAX_SV) +! IGRID=1 IRIMX =(NSIZELBXSV_ll-2*JPHEXT)/2 IRIMY =(NSIZELBYSV_ll-2*JPHEXT)/2 DO JSV = 1,NSV_USER IF(NSIZELBXSV_ll /= 0) THEN - WRITE(YRECFM,'(A6,I3.3)')'LBXSVM',JSV - WRITE(YCOMMENT,'(A6,A6,I3.3,A8)')'2_Y_Z_','LBXSVM',JSV,' (KG/KG)' - ILENCH=LEN(YCOMMENT) - CALL FMWRIT_LB(YFMFILE,YRECFM,CLUOUT,"LBX",XLBXSVM(:,:,:,JSV),IRIMX,NSIZELBXSV_ll,& - & IGRID,ILENCH,YCOMMENT,IRESP) + WRITE(TZFIELD%CMNHNAME,'(A6,I3.3)')'LBXSVM',JSV + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBX' + TZFIELD%CUNITS = 'kg kg-1' + TZFIELD%CDIR = '--' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3,A8)')'2_Y_Z_','LBXSVM',JSV + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,CLUOUT,NSIZELBXSV_ll,IRESP,XLBXSVM(:,:,:,JSV)) END IF ! IF(NSIZELBYSV_ll /= 0) THEN @@ -450,21 +464,27 @@ IF (NSV >=1) THEN END IF ! + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'kg kg-1' + TZFIELD%CDIR = '--' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 DO JSV = NSV_CHEMBEG,NSV_CHEMEND IF(NSIZELBXSV_ll /= 0) THEN - YRECFM = 'LBX_'//TRIM(UPCASE(CNAMES(JSV-NSV_CHEMBEG+1))) - WRITE(YCOMMENT,'(A6,A6,I3.3,A8)')'2_Y_Z_','LBXSVM',JSV,' (KG/KG)' - ILENCH=LEN(YCOMMENT) - CALL FMWRIT_LB(YFMFILE,YRECFM,CLUOUT,"LBX",XLBXSVM(:,:,:,JSV),IRIMX,NSIZELBXSV_ll,& - & IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'LBX_'//TRIM(UPCASE(CNAMES(JSV-NSV_CHEMBEG+1))) + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBX' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV + CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,CLUOUT,NSIZELBXSV_ll,IRESP,XLBXSVM(:,:,:,JSV)) END IF ! IF(NSIZELBYSV_ll /= 0) THEN - YRECFM = 'LBY_'//TRIM(UPCASE(CNAMES(JSV-NSV_CHEMBEG+1))) - WRITE(YCOMMENT,'(A6,A6,I3.3,A8)')'X_2_Z_','LBYSVM',JSV,' (KG/KG)' - ILENCH=LEN(YCOMMENT) - CALL FMWRIT_LB(YFMFILE,YRECFM,CLUOUT,"LBY",XLBYSVM(:,:,:,JSV),IRIMY,NSIZELBYSV_ll,& - & IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'LBY_'//TRIM(UPCASE(CNAMES(JSV-NSV_CHEMBEG+1))) + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBY' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV + CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,CLUOUT,NSIZELBYSV_ll,IRESP,XLBYSVM(:,:,:,JSV)) END IF END DO ! diff --git a/src/MNH/write_lfifm1_for_diag.f90 b/src/MNH/write_lfifm1_for_diag.f90 index 8d9a8fe9609b6a8b37179d91cd50da19702e5d47..c86eb04355b60b469ae6b4a5e1f31283dc0ee998 100644 --- a/src/MNH/write_lfifm1_for_diag.f90 +++ b/src/MNH/write_lfifm1_for_diag.f90 @@ -229,6 +229,7 @@ USE MODI_GPS_ZENITH USE MODI_GATHER_ll ! USE MODE_GRIDPROJ +USE MODE_FIELD USE MODE_FMWRIT USE MODE_ll USE MODE_IO_ll @@ -258,14 +259,11 @@ CHARACTER(LEN=28) :: YFMFILE2 ! Temporary variable to store FM-file name CHARACTER(LEN=16) :: YRECFM ! Name of the article to be written CHARACTER(LEN=100):: YCOMMENT ! Comment string ! -CHARACTER(LEN=2) :: YSTORAGE_TYPE ! type of the new DIAG file ('DI') -! CHARACTER(LEN=3) :: YFRC ! to mark the time of the forcing CHARACTER(LEN=31) :: YFGRI ! file name for GPS stations ! INTEGER :: IIU,IJU,IKU,IIB,IJB,IKB,IIE,IJE,IKE ! Arrays bounds ! -INTEGER :: IRR INTEGER :: JLOOP,JI,JJ,JK,JSV,JT,JH,JV,JEL ! loop index INTEGER :: IMI ! Current model index ! @@ -326,6 +324,8 @@ INTEGER :: ILUOUT0 ! Logical unit number for output-listing ! CHARACTER(LEN=2) :: INDICE INTEGER :: I +TYPE(TFIELDDATA) :: TZFIELD +TYPE(TFIELDDATA),DIMENSION(2) :: TZFIELD2 ! ! LIMA LIDAR REAL,DIMENSION(:,:,:,:), ALLOCATABLE :: ZTMP1, ZTMP2, ZTMP3, ZTMP4 @@ -351,126 +351,43 @@ CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP) ! !* 1.0 YFMFILE2 and HDADFILE : ! -YRECFM='MASDEV' -YCOMMENT=' ' -IGRID=0 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',NMASDEV,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='BUGFIX' -YCOMMENT=' ' -IGRID=0 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',NBUGFIX,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='BIBUSER' -YCOMMENT=' ' -IGRID=0 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',CBIBUSER,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='PROGRAM' -YCOMMENT=' ' -IGRID=0 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',CPROGRAM,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='L1D' -YCOMMENT=' ' -IGRID=0 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',L1D,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='L2D' -YCOMMENT=' ' -IGRID=0 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',L2D,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='PACK' -YCOMMENT=' ' -IGRID=0 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',LPACK,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='MY_NAME' -YCOMMENT=' ' -IGRID=0 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',YFMFILE2,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='DAD_NAME' -YCOMMENT=' ' -IGRID=0 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',HDADFILE,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_WRITE_FIELD(TPFILE,'MASDEV', CLUOUT,IRESP,NMASDEV) +CALL IO_WRITE_FIELD(TPFILE,'BUGFIX', CLUOUT,IRESP,NBUGFIX) +CALL IO_WRITE_FIELD(TPFILE,'BIBUSER', CLUOUT,IRESP,CBIBUSER) +CALL IO_WRITE_FIELD(TPFILE,'PROGRAM', CLUOUT,IRESP,CPROGRAM) +! +CALL IO_WRITE_FIELD(TPFILE,'L1D', CLUOUT,IRESP,L1D) +CALL IO_WRITE_FIELD(TPFILE,'L2D', CLUOUT,IRESP,L2D) +CALL IO_WRITE_FIELD(TPFILE,'PACK', CLUOUT,IRESP,LPACK) +! +CALL IO_WRITE_FIELD(TPFILE,'MY_NAME', CLUOUT,IRESP,TPFILE%CNAME) +CALL IO_WRITE_FIELD(TPFILE,'DAD_NAME', CLUOUT,IRESP,HDADFILE) ! IF (LEN_TRIM(HDADFILE)>0) THEN - CALL FMWRIT(YFMFILE2,'DXRATIO',CLUOUT,'--',NDXRATIO_ALL(1),0,ILENCH,YCOMMENT,IRESP) - CALL FMWRIT(YFMFILE2,'DYRATIO',CLUOUT,'--',NDYRATIO_ALL(1),0,ILENCH,YCOMMENT,IRESP) - CALL FMWRIT(YFMFILE2,'XOR',CLUOUT,'--',NXOR_ALL(1),0,ILENCH,YCOMMENT,IRESP) - CALL FMWRIT(YFMFILE2,'YOR',CLUOUT,'--',NYOR_ALL(1),0,ILENCH,YCOMMENT,IRESP) + CALL IO_WRITE_FIELD(TPFILE,'DXRATIO',CLUOUT,IRESP,NDXRATIO_ALL(1)) + CALL IO_WRITE_FIELD(TPFILE,'DYRATIO',CLUOUT,IRESP,NDYRATIO_ALL(1)) + CALL IO_WRITE_FIELD(TPFILE,'XOR', CLUOUT,IRESP,NXOR_ALL(1)) + CALL IO_WRITE_FIELD(TPFILE,'YOR', CLUOUT,IRESP,NYOR_ALL(1)) END IF ! -YRECFM='SURF' -YCOMMENT=' ' -IGRID=0 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',CSURF,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_WRITE_FIELD(TPFILE,'SURF', CLUOUT,IRESP,CSURF) ! !* 1.1 Type and Dimensions : ! -YRECFM='STORAGE_TYPE' -YCOMMENT=' ' -IGRID=0 -ILENCH=LEN(YCOMMENT) -YSTORAGE_TYPE='DI' -CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',YSTORAGE_TYPE,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='IMAX' -YCOMMENT=' ' -IGRID=0 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',NIMAX_ll,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='JMAX' -YCOMMENT=' ' -IGRID=0 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',NJMAX_ll,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='KMAX' -YCOMMENT=' ' -IGRID=0 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',NKMAX,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='JPHEXT' -YCOMMENT=' ' -IGRID=0 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',JPHEXT,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_WRITE_FIELD(TPFILE,'STORAGE_TYPE',CLUOUT,IRESP,'DI') +! +CALL IO_WRITE_FIELD(TPFILE,'IMAX',CLUOUT,IRESP,NIMAX_ll) +CALL IO_WRITE_FIELD(TPFILE,'JMAX',CLUOUT,IRESP,NJMAX_ll) +CALL IO_WRITE_FIELD(TPFILE,'KMAX',CLUOUT,IRESP,NKMAX) +! +CALL IO_WRITE_FIELD(TPFILE,'JPHEXT',CLUOUT,IRESP,JPHEXT) ! !* 1.2 Grid variables : ! IF (.NOT.LCARTESIAN) THEN - YRECFM='RPK' - YCOMMENT='projection parameter' - IGRID=0 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',XRPK,IGRID,ILENCH,YCOMMENT,IRESP) -! - YRECFM='LONORI' - YCOMMENT='longitude of the origin point (DEGREES)' - IGRID=0 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',XLONORI,IGRID,ILENCH,YCOMMENT,IRESP) -! - YRECFM='LATORI' - YCOMMENT='latitude of the origin point (DEGREES)' - IGRID=0 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',XLATORI,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_WRITE_FIELD(TPFILE,'RPK', CLUOUT,IRESP,XRPK) + CALL IO_WRITE_FIELD(TPFILE,'LONORI',CLUOUT,IRESP,XLONORI) + CALL IO_WRITE_FIELD(TPFILE,'LATORI',CLUOUT,IRESP,XLATORI) ! !* diagnostic of 1st mass point ! @@ -482,130 +399,53 @@ IF (.NOT.LCARTESIAN) THEN CALL SM_LATLON(XLATORI,XLONORI,ZXHATM,ZYHATM,ZLATOR,ZLONOR) DEALLOCATE(ZXHAT_ll,ZYHAT_ll) ! - YRECFM='LONOR' - YCOMMENT='longitude of the mass point 1-1 (DEGREES)' - IGRID=0 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',ZLONOR,IGRID,ILENCH,YCOMMENT,IRESP) -! - YRECFM='LATOR' - YCOMMENT='latitude of the mass point 1-1 (DEGREES)' - IGRID=0 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',ZLATOR,IGRID,ILENCH,YCOMMENT,IRESP) + !LONOR and LATOR not in TFIELDLIST because local variables + TZFIELD%CMNHNAME = 'LONOR' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: LONOR' + TZFIELD%CUNITS = 'degree' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = 'Longitude of 1st mass point' + TZFIELD%NGRID = 0 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 0 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZLONOR) +! + TZFIELD%CMNHNAME = 'LATOR' + TZFIELD%CLONGNAME = 'MesoNH: LATOR' + TZFIELD%CCOMMENT = 'Latitude of 1st mass point' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZLATOR) ! END IF ! -YRECFM='THINSHELL' -YCOMMENT=' ' -IGRID=0 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',LTHINSHELL,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='LAT0' -YCOMMENT='reference latitude for conformal projection (DEGREES)' -IGRID=0 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',XLAT0,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='LON0' -YCOMMENT='reference longitude for conformal projection (DEGREES)' -IGRID=0 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',XLON0,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='BETA' -YCOMMENT='rotation angle (DEGREES)' -IGRID=0 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',XBETA,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='XHAT' -YCOMMENT='Position x in the conformal or cartesian plane (METERS)' -IGRID=2 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XX',XXHAT,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='YHAT' -YCOMMENT='Position y in the conformal or cartesian plane (METERS)' -IGRID=3 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'YY',XYHAT,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='ZHAT' -YCOMMENT='height level without orography (METERS)' -IGRID=4 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',XZHAT,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='ZS' -YCOMMENT='orography (METERS)' -IGRID=4 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',XZS,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='ZSMT' -YCOMMENT='smooth orography (METERS)' -IGRID=4 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',XZSMT,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='SLEVE' -YCOMMENT=' ' -IGRID=4 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',LSLEVE,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_WRITE_FIELD(TPFILE,'THINSHELL',CLUOUT,IRESP,LTHINSHELL) +CALL IO_WRITE_FIELD(TPFILE,'LAT0',CLUOUT,IRESP,XLAT0) +CALL IO_WRITE_FIELD(TPFILE,'LON0',CLUOUT,IRESP,XLON0) +CALL IO_WRITE_FIELD(TPFILE,'BETA',CLUOUT,IRESP,XBETA) +! +CALL IO_WRITE_FIELD(TPFILE,'XHAT',CLUOUT,IRESP,XXHAT) +CALL IO_WRITE_FIELD(TPFILE,'YHAT',CLUOUT,IRESP,XYHAT) +CALL IO_WRITE_FIELD(TPFILE,'ZHAT',CLUOUT,IRESP,XZHAT) +! +CALL IO_WRITE_FIELD(TPFILE,'ZS', CLUOUT,IRESP,XZS) +CALL IO_WRITE_FIELD(TPFILE,'ZSMT', CLUOUT,IRESP,XZSMT) +CALL IO_WRITE_FIELD(TPFILE,'SLEVE',CLUOUT,IRESP,LSLEVE) ! IF (LSLEVE) THEN - YRECFM='LEN1' - YCOMMENT=' ' - IGRID=4 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',XLEN1,IGRID,ILENCH,YCOMMENT,IRESP) - YRECFM='LEN2' - YCOMMENT=' ' - IGRID=4 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',XLEN2,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_WRITE_FIELD(TPFILE,'LEN1',CLUOUT,IRESP,XLEN1) + CALL IO_WRITE_FIELD(TPFILE,'LEN2',CLUOUT,IRESP,XLEN2) END IF ! -YRECFM='DTCUR' -YCOMMENT=' ' -ILENCH=LEN(YCOMMENT) -IGRID=0 -CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',TDTCUR,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='DTEXP' ! array of rank 3 for date is written in file -YCOMMENT=' ' -ILENCH=LEN(YCOMMENT) -IGRID=0 -CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',TDTEXP,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='DTMOD' ! array of rank 3 for date is written in file -YCOMMENT=' ' -ILENCH=LEN(YCOMMENT) -IGRID=0 -CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',TDTMOD,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='DTSEG' ! array of rank 3 for date is written in file -IGRID=0 -YCOMMENT=' ' -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',TDTSEG,IGRID,ILENCH,YCOMMENT,IRESP) ! -!* 1.3 Configuration variables : +CALL IO_WRITE_FIELD(TPFILE,'DTMOD',CLUOUT,IRESP,TDTMOD) +CALL IO_WRITE_FIELD(TPFILE,'DTCUR',CLUOUT,IRESP,TDTCUR) +CALL IO_WRITE_FIELD(TPFILE,'DTEXP',CLUOUT,IRESP,TDTEXP) +CALL IO_WRITE_FIELD(TPFILE,'DTSEG',CLUOUT,IRESP,TDTSEG) ! -YRECFM='CARTESIAN' -YCOMMENT='Logical for cartesian geometry ' -IGRID=0 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',LCARTESIAN,IGRID,ILENCH,YCOMMENT,IRESP) +!* 1.3 Configuration variables : ! -YRECFM='LBOUSS' -YCOMMENT='Logical for Boussinesq' -IGRID=0 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',LBOUSS,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_WRITE_FIELD(TPFILE,'CARTESIAN',CLUOUT,IRESP,LCARTESIAN) +CALL IO_WRITE_FIELD(TPFILE,'LBOUSS', CLUOUT,IRESP,LBOUSS) ! IF (LCARTESIAN .AND. LWIND_ZM) THEN LWIND_ZM=.FALSE. @@ -613,35 +453,12 @@ IF (LCARTESIAN .AND. LWIND_ZM) THEN END IF !* 1.4 Reference state variables : ! -YRECFM='RHOREFZ' -YCOMMENT='rhodz for reference state without orography (kg/m3)' -IGRID=4 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',XRHODREFZ,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='THVREFZ' -YCOMMENT='thetavz for reference state without orography (K)' -IGRID=4 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',XTHVREFZ,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='EXNTOP' -YCOMMENT='Exner function at model top' -IGRID=4 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'--',XEXNTOP,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='RHODREF' -YCOMMENT='Dry density for reference state with orography (kg/m3)' -IGRID=1 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',XRHODREF,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='THVREF' -YCOMMENT='Thetav for reference state with orography (K)' -IGRID=1 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',XTHVREF,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_WRITE_FIELD(TPFILE,'RHOREFZ',CLUOUT,IRESP,XRHODREFZ) +CALL IO_WRITE_FIELD(TPFILE,'THVREFZ',CLUOUT,IRESP,XTHVREFZ) +CALL IO_WRITE_FIELD(TPFILE,'EXNTOP', CLUOUT,IRESP,XEXNTOP) +! +CALL IO_WRITE_FIELD(TPFILE,'RHODREF',CLUOUT,IRESP,XRHODREF) +CALL IO_WRITE_FIELD(TPFILE,'THVREF', CLUOUT,IRESP,XTHVREF) ! ! !* 1.5 Variables necessary for plots @@ -650,19 +467,11 @@ CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',XTHVREF,IGRID,ILENCH,YCOMMENT,IRESP) ! level or constant theta level or constant PV level ! IF (INDEX(CISO,'PR') /= 0) THEN - YRECFM='PABST' - YCOMMENT='X_Y_Z_ABSolute Pressure (Pa)' - IGRID=1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',XPABST,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_WRITE_FIELD(TPFILE,'PABST',CLUOUT,IRESP,XPABST) END IF ! IF (INDEX(CISO,'TK') /= 0) THEN - YRECFM='THT' - YCOMMENT='X_Y_Z_potential temperature (K)' - IGRID=1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',XTHT,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_WRITE_FIELD(TPFILE,'THT',CLUOUT,IRESP,XTHT) END IF ! ZCORIOZ(:,:,:)=SPREAD( XCORIOZ(:,:),DIM=3,NCOPIES=IKU ) @@ -683,65 +492,61 @@ ZPOVO(:,:,:)= ZPOVO(:,:,:)*1E6/XRHODREF(:,:,:) ZPOVO(:,:,1) =-1.E+11 ZPOVO(:,:,IKU)=-1.E+11 IF (INDEX(CISO,'EV') /= 0) THEN - YRECFM='POVOT' - YCOMMENT='X_Y_Z_POtential VOrticity (PVU)' - IGRID=1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',ZPOVO,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'POVOT' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: POVOT' + TZFIELD%CUNITS = 'PVU' ! 1 PVU = 1e-6 m^2 s^-1 K kg^-1 + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_POtential VOrticity' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZPOVO) END IF ! ! IF (LVAR_RS) THEN - YRECFM='UT' - YCOMMENT='X_Y_Z_U component of wind (m/s)' - IGRID=2 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',XUT,IGRID,ILENCH,YCOMMENT,IRESP) - ! - YRECFM='VT' - YCOMMENT='X_Y_Z_V component of wind (m/s)' - IGRID=3 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',XVT,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_WRITE_FIELD(TPFILE,'UT',CLUOUT,IRESP,XUT) + CALL IO_WRITE_FIELD(TPFILE,'VT',CLUOUT,IRESP,XVT) ! IF (LWIND_ZM) THEN - YCOMMENT='X_Y_Z_Zonal and Meridian components of horizontal wind (M/S)' - CALL UV_TO_ZONAL_AND_MERID(XUT,XVT,23, & - TPFILE=TPFILE,HRECU='UM_ZM',HRECV='VM_ZM',HCOMMENT=YCOMMENT) + TZFIELD2(1)%CMNHNAME = 'UM_ZM' + TZFIELD2(1)%CSTDNAME = '' + TZFIELD2(1)%CLONGNAME = 'MesoNH: UM_ZM' + TZFIELD2(1)%CUNITS = 'm s-1' + TZFIELD2(1)%CDIR = 'XY' + TZFIELD2(1)%CCOMMENT = 'Zonal component of horizontal wind' + TZFIELD2(1)%NGRID = 2 + TZFIELD2(1)%NTYPE = TYPEREAL + TZFIELD2(1)%NDIMS = 3 + ! + TZFIELD2(2)%CMNHNAME = 'VM_ZM' + TZFIELD2(2)%CSTDNAME = '' + TZFIELD2(2)%CLONGNAME = 'MesoNH: VM_ZM' + TZFIELD2(2)%CUNITS = 'm s-1' + TZFIELD2(2)%CDIR = 'XY' + TZFIELD2(2)%CCOMMENT = 'Meridian component of horizontal wind' + TZFIELD2(2)%NGRID = 3 + TZFIELD2(2)%NTYPE = TYPEREAL + TZFIELD2(2)%NDIMS = 3 + ! + CALL UV_TO_ZONAL_AND_MERID(XUT,XVT,23,TPFILE=TPFILE,TZFIELDS=TZFIELD2) END IF ! - YRECFM='WT' - YCOMMENT='X_Y_Z_vertical wind (m/s)' - IGRID=4 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',XWT,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_WRITE_FIELD(TPFILE,'WT',CLUOUT,IRESP,XWT) ! ! write mixing ratio for water vapor required to plot radio-soundings ! IF (LUSERV) THEN - YRECFM='RVT' - YCOMMENT='X_Y_Z_Vapor mixing Ratio (KG/KG)' - IGRID=1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',XRT(:,:,:,1),IGRID,ILENCH, & - YCOMMENT,IRESP) + CALL IO_WRITE_FIELD(TPFILE,'RVT',CLUOUT,IRESP,XRT(:,:,:,IDX_RVT)) END IF END IF ! !* Latitude and Longitude arrays ! IF (.NOT.LCARTESIAN) THEN - YRECFM='LAT' - YCOMMENT='X_Y_latitude (degrees)' - IGRID=1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',XLAT,IGRID,ILENCH,YCOMMENT,IRESP) - ! - YRECFM='LON' - YCOMMENT='X_Y_longitude (degrees)' - IGRID=1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE2,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 ! ! @@ -1132,94 +937,79 @@ ENDIF ! IF (LVAR_MRW .OR. LLIMA_DIAG) THEN IF (NRR >=1) THEN - IRR=0 ! Moist variables are written - IGRID=1 ! individually in file + ! Moist variables are written individually in file + TZFIELD%CSTDNAME = '' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 IF (LUSERV) THEN - IRR=IRR+1 - YRECFM= 'MRV' - YCOMMENT='X_Y_Z_MRV (G/KG)' - ILENCH=LEN(YCOMMENT) - ZWORK31(:,:,:)=XRT(:,:,:,IRR)*1.E3 - CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK31,IGRID,ILENCH, & - YCOMMENT,IRESP) - + TZFIELD%CMNHNAME = 'MRV' + TZFIELD%CLONGNAME = 'MesoNH: MRV' + TZFIELD%CUNITS = 'g kg-1' + TZFIELD%CCOMMENT = 'X_Y_Z_MRV' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XRT(:,:,:,IDX_RVT)*1.E3) END IF IF (LUSERC) THEN - IRR=IRR+1 - YRECFM= 'MRC' - YCOMMENT='X_Y_Z_MRC (G/KG)' - ILENCH=LEN(YCOMMENT) - ZWORK31(:,:,:)=XRT(:,:,:,IRR)*1.E3 - CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK31,IGRID,ILENCH, & - YCOMMENT,IRESP) - YRECFM= 'VRC' - YCOMMENT='X_Y_Z_VRC (vol/vol)' - ILENCH=LEN(YCOMMENT) - ZWORK31(:,:,:)=XRT(:,:,:,IRR)*XRHODREF(:,:,:)/1.E3 - CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK31,IGRID,ILENCH, & - YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'MRC' + TZFIELD%CLONGNAME = 'MesoNH: MRC' + TZFIELD%CUNITS = 'g kg-1' + TZFIELD%CCOMMENT = 'X_Y_Z_MRC' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XRT(:,:,:,IDX_RCT)*1.E3) +! + TZFIELD%CMNHNAME = 'VRC' + TZFIELD%CLONGNAME = 'MesoNH: VRC' + TZFIELD%CUNITS = '' !vol/vol + TZFIELD%CCOMMENT = 'X_Y_Z_VRC (vol/vol)' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XRT(:,:,:,IDX_RCT)*XRHODREF(:,:,:)/1.E3) END IF IF (LUSERR) THEN - IRR=IRR+1 - YRECFM= 'MRR' - YCOMMENT='X_Y_Z_MRR (G/KG)' - ILENCH=LEN(YCOMMENT) - ZWORK31(:,:,:)=XRT(:,:,:,IRR)*1.E3 - CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK31,IGRID,ILENCH, & - YCOMMENT,IRESP) - YRECFM= 'VRR' - YCOMMENT='X_Y_Z_VRR (vol/vol)' - ILENCH=LEN(YCOMMENT) - ZWORK31(:,:,:)=XRT(:,:,:,IRR)*XRHODREF(:,:,:)/1.E3 - CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK31,IGRID,ILENCH, & - YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'MRR' + TZFIELD%CLONGNAME = 'MesoNH: MRR' + TZFIELD%CUNITS = 'g kg-1' + TZFIELD%CCOMMENT = 'X_Y_Z_MRR' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XRT(:,:,:,IDX_RRT)*1.E3) +! + TZFIELD%CMNHNAME = 'VRR' + TZFIELD%CLONGNAME = 'MesoNH: VRR' + TZFIELD%CUNITS = '' !vol/vol + TZFIELD%CCOMMENT = 'X_Y_Z_VRR (vol/vol)' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XRT(:,:,:,IDX_RRT)*XRHODREF(:,:,:)/1.E3) END IF IF (LUSERI) THEN - IRR = IRR+1 - YRECFM= 'MRI' - YCOMMENT='X_Y_Z_MRI (G/KG)' - ILENCH=LEN(YCOMMENT) - ZWORK31(:,:,:)=XRT(:,:,:,IRR)*1.E3 - CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK31,IGRID,ILENCH, & - YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'MRI' + TZFIELD%CLONGNAME = 'MesoNH: MRI' + TZFIELD%CUNITS = 'g kg-1' + TZFIELD%CCOMMENT = 'X_Y_Z_MRI' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XRT(:,:,:,IDX_RIT)*1.E3) +! IF (LUSECI) THEN - YRECFM= 'CIT' - YCOMMENT='X_Y_Z_CIT (/M3)' - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',XCIT(:,:,:),IGRID,ILENCH, & - YCOMMENT,IRESP) + CALL IO_WRITE_FIELD(TPFILE,'CIT',CLUOUT,IRESP,XCIT(:,:,:)) END IF END IF IF (LUSERS) THEN - IRR = IRR+1 - YRECFM= 'MRS' - YCOMMENT='X_Y_Z_MRS (G/KG)' - ILENCH=LEN(YCOMMENT) - ZWORK31(:,:,:)=XRT(:,:,:,IRR)*1.E3 - CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK31,IGRID,ILENCH, & - YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'MRS' + TZFIELD%CLONGNAME = 'MesoNH: MRS' + TZFIELD%CUNITS = 'g kg-1' + TZFIELD%CCOMMENT = 'X_Y_Z_MRS' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XRT(:,:,:,IDX_RST)*1.E3) END IF IF (LUSERG) THEN - IRR = IRR+1 - YRECFM= 'MRG' - YCOMMENT='X_Y_Z_RG (G/KG)' - ILENCH=LEN(YCOMMENT) - ZWORK31(:,:,:)=XRT(:,:,:,IRR)*1.E3 - CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK31,IGRID,ILENCH, & - YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'MRG' + TZFIELD%CLONGNAME = 'MesoNH: MRG' + TZFIELD%CUNITS = 'g kg-1' + TZFIELD%CCOMMENT = 'X_Y_Z_MRG' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XRT(:,:,:,IDX_RGT)*1.E3) END IF IF (LUSERH) THEN - IRR = IRR+1 - YRECFM= 'MRH' - YCOMMENT='X_Y_Z_RH (G/KG)' - ILENCH=LEN(YCOMMENT) - ZWORK31(:,:,:)=XRT(:,:,:,IRR)*1.E3 - CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK31,IGRID,ILENCH, & - YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'MRH' + TZFIELD%CLONGNAME = 'MesoNH: MRH' + TZFIELD%CUNITS = 'g kg-1' + TZFIELD%CCOMMENT = 'X_Y_Z_MRH' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XRT(:,:,:,IDX_RHT)*1.E3) END IF END IF END IF - ! !* Scalar Variables ! @@ -1353,12 +1143,16 @@ END IF ! chemical scalar variables in gas phase PPBV IF (LCHEMDIAG) THEN DO JSV = NSV_CHGSBEG,NSV_CHGSEND - YRECFM=TRIM(UPCASE(CNAMES(JSV-NSV_CHGSBEG+1)))//'T' - WRITE(YCOMMENT,'(A6,A4,I3.3,A7)')'X_Y_Z_','CHIM',JSV,' (ppbv)' - ILENCH=LEN(YCOMMENT) - ZWORK31(:,:,:)=XSVT(:,:,:,JSV)*1.E9 - CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK31,IGRID,ILENCH, & - YCOMMENT,IRESP) + TZFIELD%CMNHNAME = TRIM(UPCASE(CNAMES(JSV-NSV_CHGSBEG+1)))//'T' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'ppbv' + TZFIELD%CDIR = 'XY' + WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3)')'X_Y_Z_','CHIM',JSV + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XSVT(:,:,:,JSV)*1.E9) END DO END IF IF (LCHAQDIAG) THEN !aqueous concentration in M @@ -2019,9 +1813,27 @@ IF (LVAR_LS) THEN CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',XLSVM,IGRID,ILENCH,YCOMMENT,IRESP) ! IF (LWIND_ZM) THEN - YCOMMENT='X_Y_Z_Large Scale Zonal and Meridian components of horizontal wind (M/S)' - CALL UV_TO_ZONAL_AND_MERID(XLSUM,XLSVM,23, & - TPFILE=TPFILE,HRECU='LSUM_ZM',HRECV='LSVM_ZM',HCOMMENT=YCOMMENT) + TZFIELD2(1)%CMNHNAME = 'LSUM_ZM' + TZFIELD2(1)%CSTDNAME = '' + TZFIELD2(1)%CLONGNAME = 'MesoNH: LSUM_ZM' + TZFIELD2(1)%CUNITS = 'm s-1' + TZFIELD2(1)%CDIR = 'XY' + TZFIELD2(1)%CCOMMENT = 'Large Scale Zonal component of horizontal wind' + TZFIELD2(1)%NGRID = 2 + TZFIELD2(1)%NTYPE = TYPEREAL + TZFIELD2(1)%NDIMS = 3 + ! + TZFIELD2(2)%CMNHNAME = 'LSVM_ZM' + TZFIELD2(2)%CSTDNAME = '' + TZFIELD2(2)%CLONGNAME = 'MesoNH: LSVM_ZM' + TZFIELD2(2)%CUNITS = 'm s-1' + TZFIELD2(2)%CDIR = 'XY' + TZFIELD2(2)%CCOMMENT = 'Large Scale Meridian component of horizontal wind' + TZFIELD2(2)%NGRID = 3 + TZFIELD2(2)%NTYPE = TYPEREAL + TZFIELD2(2)%NDIMS = 3 + ! + CALL UV_TO_ZONAL_AND_MERID(XLSUM,XLSVM,23,TPFILE=TPFILE,TZFIELDS=TZFIELD2) ENDIF ! YRECFM='LSWM' @@ -2354,9 +2166,27 @@ IF (LVORT) THEN CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK32,IGRID,ILENCH,YCOMMENT,IRESP) ! IF (LWIND_ZM) THEN - YCOMMENT='X_Y_Z_Zonal and Meridian components of horizontal vorticity (M/S)' - CALL UV_TO_ZONAL_AND_MERID(ZWORK31,ZWORK32,23, & - TPFILE=TPFILE,HRECU='UM1_ZM',HRECV='VM1_ZM',HCOMMENT=YCOMMENT) + TZFIELD2(1)%CMNHNAME = 'UM1_ZM' + TZFIELD2(1)%CSTDNAME = '' + TZFIELD2(1)%CLONGNAME = 'MesoNH: UM1_ZM' + TZFIELD2(1)%CUNITS = 'm s-1' + TZFIELD2(1)%CDIR = 'XY' + TZFIELD2(1)%CCOMMENT = 'Zonal component of horizontal vorticity' + TZFIELD2(1)%NGRID = 2 + TZFIELD2(1)%NTYPE = TYPEREAL + TZFIELD2(1)%NDIMS = 3 + ! + TZFIELD2(2)%CMNHNAME = 'VM1_ZM' + TZFIELD2(2)%CSTDNAME = '' + TZFIELD2(2)%CLONGNAME = 'MesoNH: VM1_ZM' + TZFIELD2(2)%CUNITS = 'm s-1' + TZFIELD2(2)%CDIR = 'XY' + TZFIELD2(2)%CCOMMENT = 'Meridian component of horizontal vorticity' + TZFIELD2(2)%NGRID = 3 + TZFIELD2(2)%NTYPE = TYPEREAL + TZFIELD2(2)%NDIMS = 3 + ! + CALL UV_TO_ZONAL_AND_MERID(ZWORK31,ZWORK32,23,TPFILE=TPFILE,TZFIELDS=TZFIELD2) ENDIF ! ! Vorticity z @@ -2568,9 +2398,27 @@ IF (LGEO .OR. LAGEO) THEN CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK32,IGRID,ILENCH,YCOMMENT,IRESP) ! IF (LWIND_ZM) THEN - YCOMMENT='X_Y_Z_Zonal and Meridian components of GEOstrophic wind (m/s)' - CALL UV_TO_ZONAL_AND_MERID(ZWORK31,ZWORK32,23, & - TPFILE=TPFILE,HRECU='UM88_ZM',HRECV='VM88_ZM',HCOMMENT=YCOMMENT) + TZFIELD2(1)%CMNHNAME = 'UM88_ZM' + TZFIELD2(1)%CSTDNAME = '' + TZFIELD2(1)%CLONGNAME = 'MesoNH: UM88_ZM' + TZFIELD2(1)%CUNITS = 'm s-1' + TZFIELD2(1)%CDIR = 'XY' + TZFIELD2(1)%CCOMMENT = 'Zonal component of GEOstrophic wind' + TZFIELD2(1)%NGRID = 2 + TZFIELD2(1)%NTYPE = TYPEREAL + TZFIELD2(1)%NDIMS = 3 + ! + TZFIELD2(2)%CMNHNAME = 'VM88_ZM' + TZFIELD2(2)%CSTDNAME = '' + TZFIELD2(2)%CLONGNAME = 'MesoNH: VM88_ZM' + TZFIELD2(2)%CUNITS = 'm s-1' + TZFIELD2(2)%CDIR = 'XY' + TZFIELD2(2)%CCOMMENT = 'Meridian component of GEOstrophic wind' + TZFIELD2(2)%NGRID = 3 + TZFIELD2(2)%NTYPE = TYPEREAL + TZFIELD2(2)%NDIMS = 3 + ! + CALL UV_TO_ZONAL_AND_MERID(ZWORK31,ZWORK32,23,TPFILE=TPFILE,TZFIELDS=TZFIELD2) ENDIF ! ! wm necessary to plot vertical cross sections of wind vectors @@ -2598,9 +2446,27 @@ IF (LGEO .OR. LAGEO) THEN CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',ZWORK32,IGRID,ILENCH,YCOMMENT,IRESP) ! IF (LWIND_ZM) THEN - YCOMMENT='X_Y_Z_Zonal and Meridian components of AGEOstrophic wind (m/s)' - CALL UV_TO_ZONAL_AND_MERID(ZWORK31,ZWORK32,23, & - TPFILE=TPFILE,HRECU='UM89_ZM',HRECV='VM89_ZM',HCOMMENT=YCOMMENT) + TZFIELD2(1)%CMNHNAME = 'UM89_ZM' + TZFIELD2(1)%CSTDNAME = '' + TZFIELD2(1)%CLONGNAME = 'MesoNH: UM89_ZM' + TZFIELD2(1)%CUNITS = 'm s-1' + TZFIELD2(1)%CDIR = 'XY' + TZFIELD2(1)%CCOMMENT = 'Zonal component of AGEOstrophic wind' + TZFIELD2(1)%NGRID = 2 + TZFIELD2(1)%NTYPE = TYPEREAL + TZFIELD2(1)%NDIMS = 3 + ! + TZFIELD2(2)%CMNHNAME = 'VM89_ZM' + TZFIELD2(2)%CSTDNAME = '' + TZFIELD2(2)%CLONGNAME = 'MesoNH: VM89_ZM' + TZFIELD2(2)%CUNITS = 'm s-1' + TZFIELD2(2)%CDIR = 'XY' + TZFIELD2(2)%CCOMMENT = 'Meridian component of AGEOstrophic wind' + TZFIELD2(2)%NGRID = 3 + TZFIELD2(2)%NTYPE = TYPEREAL + TZFIELD2(2)%NDIMS = 3 + ! + CALL UV_TO_ZONAL_AND_MERID(ZWORK31,ZWORK32,23,TPFILE=TPFILE,TZFIELDS=TZFIELD2) ENDIF ! ! wm necessary to plot vertical cross sections of wind vectors @@ -3336,31 +3202,10 @@ IF (ALLOCATED(ZTHETAV)) DEALLOCATE(ZTHETAV) !* Ligthning ! IF ( LCH_CONV_LINOX ) THEN - YRECFM = 'IC_RATE' - YCOMMENT = 'X_Y_IC_RATE (/s)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',XIC_RATE,IGRID,ILENCH,YCOMMENT,IRESP) - - YRECFM = 'CG_RATE' - YCOMMENT = 'X_Y_CG_RATE (/s)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',XCG_RATE,IGRID,ILENCH,YCOMMENT,IRESP) - - YRECFM = 'IC_TOTAL_NB' - YCOMMENT = 'X_Y_IC_TOTAL_NUMBER (no unit)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',XIC_TOTAL_NUMBER,IGRID,ILENCH, & - YCOMMENT,IRESP) - - YRECFM = 'CG_TOTAL_NB' - YCOMMENT = 'X_Y_CG_TOTAL_NUMBER (no unit)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE2,YRECFM,CLUOUT,'XY',XCG_TOTAL_NUMBER,IGRID,ILENCH, & - YCOMMENT,IRESP) + CALL IO_WRITE_FIELD(TPFILE,'IC_RATE', CLUOUT,IRESP,XIC_RATE) + CALL IO_WRITE_FIELD(TPFILE,'CG_RATE', CLUOUT,IRESP,XCG_RATE) + CALL IO_WRITE_FIELD(TPFILE,'IC_TOTAL_NB',CLUOUT,IRESP,XIC_TOTAL_NUMBER) + CALL IO_WRITE_FIELD(TPFILE,'CG_TOTAL_NB',CLUOUT,IRESP,XCG_TOTAL_NUMBER) END IF !------------------------------------------------------------------------------- !------------------------------------------------------------------------------- diff --git a/src/MNH/write_lfifm1_for_diag_supp.f90 b/src/MNH/write_lfifm1_for_diag_supp.f90 index 4a5e8c32215424beb55669a0f638da6fc8ad8ba3..1d083e16e46aae0eecb98fc1369f74a48c876d04 100644 --- a/src/MNH/write_lfifm1_for_diag_supp.f90 +++ b/src/MNH/write_lfifm1_for_diag_supp.f90 @@ -152,6 +152,7 @@ USE MODI_CALL_RTTOV11 USE MODI_RADTR_SATEL USE MODI_UV_TO_ZONAL_AND_MERID ! +USE MODE_FIELD USE MODE_FMWRIT ! USE MODI_GET_SURF_UNDEF @@ -207,10 +208,14 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZTH REAL,DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZPOVO REAL,DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZVOX,ZVOY,ZVOZ REAL,DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZCORIOZ +TYPE(TFIELDDATA) :: TZFIELD +TYPE(TFIELDDATA),DIMENSION(2) :: TZFIELD2 !------------------------------------------------------------------------------- ! !* 0. ARRAYS BOUNDS INITIALIZATION ! +YFMFILE = TPFILE%CNAME +! IIU=SIZE(XTHT,1) IJU=SIZE(XTHT,2) IKU=SIZE(XTHT,3) @@ -817,62 +822,106 @@ IF (CSURF=='EXTE') THEN ILEVEL=ILEVEL+1 !level just higher END DO ! - - YCOMMENT='X_Y_components of wind at 10m (m/s)' - IGRID=0 - ! in this case (argument IGRID=0), input winds are ZONal and MERidien - ! and, output ones are in MesoNH grid - IF (.NOT. LCARTESIAN) THEN - CALL UV_TO_ZONAL_AND_MERID(XCURRENT_ZON10M,XCURRENT_MER10M,IGRID, & - TPFILE=TPFILE,HRECU='UM10',HRECV='VM10',HCOMMENT=YCOMMENT) - ELSE - YRECFM ='UM10' - YCOMMENT ='X_Y_UM10 (m/s)' - IGRID =1 - ILENCH =LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XCURRENT_ZON10M,IGRID,ILENCH,YCOMMENT,IRESP) - YRECFM ='VM10' - YCOMMENT ='X_Y_VM10 (m/s)' - IGRID =1 - ILENCH =LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XCURRENT_MER10M,IGRID,ILENCH,YCOMMENT,IRESP) - ENDIF - ! - IF (SIZE(XTKET)>0) THEN - ZWORK21(:,:)= 0. - ZWORK21(:,:) = SQRT(XCURRENT_ZON10M(:,:)**2+XCURRENT_MER10M(:,:)**2) - ZWORK21(:,:) =ZWORK21(:,:) + 4. * SQRT(XTKET(:,:,IKB)) - YRECFM ='FF10MAX' - YCOMMENT ='X_Y_FF10MAX (m/s)' - IGRID =1 - ILENCH =LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',ZWORK21,IGRID,ILENCH,YCOMMENT,IRESP) - END IF + ! in this case (argument KGRID=0), input winds are ZONal and MERidian + ! and, output ones are in MesoNH grid + IF (.NOT. LCARTESIAN) THEN + TZFIELD2(1)%CMNHNAME = 'UM10' + TZFIELD2(1)%CSTDNAME = '' + TZFIELD2(1)%CLONGNAME = 'MesoNH: UM10' + TZFIELD2(1)%CUNITS = 'm s-1' + TZFIELD2(1)%CDIR = 'XY' + TZFIELD2(1)%CCOMMENT = 'Zonal wind at 10m' + TZFIELD2(1)%NGRID = 1 + TZFIELD2(1)%NTYPE = TYPEREAL + TZFIELD2(1)%NDIMS = 2 + ! + TZFIELD2(2)%CMNHNAME = 'VM10' + TZFIELD2(2)%CSTDNAME = '' + TZFIELD2(2)%CLONGNAME = 'MesoNH: VM10' + TZFIELD2(2)%CUNITS = 'm s-1' + TZFIELD2(2)%CDIR = 'XY' + TZFIELD2(2)%CCOMMENT = 'Meridian wind at 10m' + TZFIELD2(2)%NGRID = 1 + TZFIELD2(2)%NTYPE = TYPEREAL + TZFIELD2(2)%NDIMS = 2 + ! + CALL UV_TO_ZONAL_AND_MERID(XCURRENT_ZON10M,XCURRENT_MER10M,KGRID=0,TPFILE=TPFILE,TZFIELDS=TZFIELD2) + ELSE + TZFIELD%CMNHNAME = 'UM10' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: UM10' + TZFIELD%CUNITS = 'm s-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'Zonal wind at 10m' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 2 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XCURRENT_ZON10M) + ! + TZFIELD%CMNHNAME = 'VM10' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: VM10' + TZFIELD%CUNITS = 'm s-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'Meridian wind at 10m' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 2 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XCURRENT_MER10M) + ENDIF + ! + IF (SIZE(XTKET)>0) THEN + ZWORK21(:,:) = SQRT(XCURRENT_ZON10M(:,:)**2+XCURRENT_MER10M(:,:)**2) + ZWORK21(:,:) = ZWORK21(:,:) + 4. * SQRT(XTKET(:,:,IKB)) + TZFIELD%CMNHNAME = 'FF10MAX' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: FF10MAX' + TZFIELD%CUNITS = 'm s-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_FF10MAX' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 2 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK21) + END IF + ! IF(ANY(XCURRENT_SFCO2/=XUNDEF))THEN - YCOMMENT='CO2 flux (mg/m2/s)' - ILENCH=LEN(YCOMMENT) - YRECFM='SFCO2' - IGRID=1 - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XCURRENT_SFCO2,IGRID,ILENCH, & - YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'SFCO2' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: SFCO2' + TZFIELD%CUNITS = 'mg m-2 s-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'CO2 Surface flux' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 2 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XCURRENT_SFCO2) END IF ! IF(ANY(XCURRENT_SW/=XUNDEF))THEN - YCOMMENT='SW (W/m2)' - ILENCH=LEN(YCOMMENT) - YRECFM='SW' - IGRID=1 - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XCURRENT_SW,IGRID,ILENCH, & - YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'SW' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: SW' + TZFIELD%CUNITS = 'W m-2' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'incoming ShortWave at the surface' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 2 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XCURRENT_SW) END IF ! IF(ANY(XCURRENT_LW/=XUNDEF))THEN - YCOMMENT='LW (W/m2)' - ILENCH=LEN(YCOMMENT) - YRECFM='LW' - IGRID=1 - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XCURRENT_LW,IGRID,ILENCH, & - YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'LW' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: LW' + TZFIELD%CUNITS = 'W m-2' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'incoming LongWave at the surface' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 2 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XCURRENT_LW) END IF END IF @@ -1090,41 +1139,54 @@ END IF ! ------------------------------- ! IF (NEQ_BUDGET>0) THEN - IGRID=1 - DO JSV = 1, NEQ_BUDGET - YRECFM=TRIM(CNAMES_BUDGET(JSV))//'_BUDGET' - WRITE(YCOMMENT,'(A6,A5,A7,A8)')'X_Y_Z_',CNAMES_BUDGET(JSV),'_BUDGET','(ppp/s)' - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XTCHEM(JSV)%XB_REAC(:,:,:,:),IGRID,ILENCH,& - YCOMMENT,IRESP) - END DO -! - DO JSV=1, NEQ_BUDGET - YRECFM=TRIM(CNAMES_BUDGET(JSV))//'_CHREACLIST' - WRITE(YCOMMENT,'(A5,A14)')CNAMES_BUDGET(JSV),'_REACTION_LIST' - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XTCHEM(JSV)%NB_REAC(:),IGRID,ILENCH,& - YCOMMENT,IRESP) - END DO + TZFIELD%CSTDNAME = '' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + ! + TZFIELD%CUNITS = 'ppp s-1' + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 4 + ! + DO JSV = 1, NEQ_BUDGET + TZFIELD%CMNHNAME = TRIM(CNAMES_BUDGET(JSV))//'_BUDGET' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CCOMMENT = 'X_Y_Z_'//TRIM(CNAMES_BUDGET(JSV))//'_BUDGET' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XTCHEM(JSV)%XB_REAC(:,:,:,:)) + END DO + ! + TZFIELD%CUNITS = '' + TZFIELD%NTYPE = TYPEINT + TZFIELD%NDIMS = 1 + ! + DO JSV=1, NEQ_BUDGET + TZFIELD%CMNHNAME = TRIM(CNAMES_BUDGET(JSV))//'_CHREACLIST' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CCOMMENT = TRIM(CNAMES_BUDGET(JSV))//'_REACTION_LIST' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XTCHEM(JSV)%NB_REAC(:)) + END DO END IF ! ! ! chemical prod/loss terms IF (NEQ_PLT>0) THEN - IGRID=1 - DO JSV = 1, NEQ_PLT - YRECFM=TRIM(CNAMES_PRODLOSST(JSV))//'_PROD' - WRITE(YCOMMENT,'(A6,A8,A5,A8)')'X_Y_Z_',CNAMES_PRODLOSST(JSV),'_PROD','(ppp/s)' - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XPROD(:,:,:,JSV),IGRID,ILENCH,& - YCOMMENT,IRESP) -! - YRECFM=TRIM(CNAMES_PRODLOSST(JSV))//'_LOSS' - WRITE(YCOMMENT,'(A6,A8,A5,A8)')'X_Y_Z_',CNAMES_PRODLOSST(JSV),'_LOSS','(ppp/s)' - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XLOSS(:,:,:,JSV),IGRID,ILENCH,& - YCOMMENT,IRESP) - END DO + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'ppp s-1' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = 1, NEQ_PLT + TZFIELD%CMNHNAME = TRIM(CNAMES_PRODLOSST(JSV))//'_PROD' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CCOMMENT = 'X_Y_Z_'//TRIM(CNAMES_PRODLOSST(JSV))//'_PROD' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XPROD(:,:,:,JSV)) + ! + TZFIELD%CMNHNAME = TRIM(CNAMES_PRODLOSST(JSV))//'_LOSS' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CCOMMENT = 'X_Y_Z_'//TRIM(CNAMES_PRODLOSST(JSV))//'_LOSS' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XLOSS(:,:,:,JSV)) + END DO END IF ! ! diff --git a/src/MNH/write_lfin.f90 b/src/MNH/write_lfin.f90 index fbc54200234ef99bc5327f1b3bc5878bdff70662..524fdaaa7b6e937dcb83af93aab97afb797c3306 100644 --- a/src/MNH/write_lfin.f90 +++ b/src/MNH/write_lfin.f90 @@ -652,12 +652,7 @@ IF (NRR >=1) THEN CALL IO_WRITE_FIELD(TPFILE,'RIT',CLUOUT,IRESP,XRT(:,:,:,IDX_RIT)) WRITE (ILUOUT,*) IDX_RIT,' RI min-max ',MIN_ll(XRT(:,:,:,IDX_RIT),INFO_ll),MAX_ll(XRT(:,:,:,IDX_RIT),INFO_ll) IF ( CPROGRAM == 'MESONH' .AND. CCLOUD(1:3) == 'ICE') THEN - IGRID=1 - YRECFM= 'CIT' - YCOMMENT='X_Y_Z_Cloud Ice concentration (/M3)' - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XCIT(:,:,:), IGRID,ILENCH, & - YCOMMENT,IRESP) + CALL IO_WRITE_FIELD(TPFILE,'CIT',CLUOUT,IRESP,XCIT(:,:,:)) END IF END IF IF (LUSERS) THEN @@ -1007,14 +1002,22 @@ IF (NSV >=1) THEN IF (ICH_NBR /=0) ALLOCATE(YCHNAMES(ICH_NBR)) ! chemical scalar variables IF (LUSECHEM) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! DO JSV = NSV_CHEMBEG,NSV_CHEMEND - YRECFM=TRIM(UPCASE(CNAMES(JSV-NSV_CHEMBEG+1)))//'T' - WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (ppp)' - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH, & - YCOMMENT,IRESP) - YCHNAMES(JSV-JSA)=YRECFM(1:LEN_TRIM(YRECFM)-1) ! without T + TZFIELD%CMNHNAME = TRIM(UPCASE(CNAMES(JSV-NSV_CHEMBEG+1)))//'T' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (ppp)' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XSVT(:,:,:,JSV)) + ! + YCHNAMES(JSV-JSA)=TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1) ! without T END DO + ! IF (LUSECHIC) THEN DO JSV = NSV_CHICBEG,NSV_CHICEND YRECFM=TRIM(UPCASE(CICNAMES(JSV-NSV_CHICBEG+1)))//'T' @@ -1262,18 +1265,28 @@ END IF ! Valeur IMOMENTS DO JSV=1,ICH_NBR WRITE(ILUOUT,*)JSV,TRIM(YCHNAMES(JSV)) END DO - YRECFM='NSV.DIM' - YCOMMENT=' ' - IGRID=0 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'--',ICH_NBR,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'NSV.DIM' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: NSV.DIM' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = 'Number of chemical variables' + TZFIELD%NGRID = 0 + TZFIELD%NTYPE = TYPEINT + TZFIELD%NDIMS = 0 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ICH_NBR) ! IF (ICH_NBR/=0) THEN - YRECFM='NSV.TITRE' - YCOMMENT=' ' - IGRID=0 - ILENCH=LEN(YCOMMENT) - ILREC=LEN(YRECFM) + TZFIELD%CMNHNAME = 'NSV.TITRE' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: NSV.TITRE' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = '' + TZFIELD%NGRID = 0 + TZFIELD%NTYPE = TYPEINT + TZFIELD%NDIMS = 1 + ILREC=LEN(YCHNAMES(1)) ILENG=ILREC*ICH_NBR ALLOCATE(ICH_NAMES(ILENG)) DO JSV = 1,ICH_NBR @@ -1281,7 +1294,7 @@ END IF ! Valeur IMOMENTS ICH_NAMES(ILREC*(JSV-1)+JT) = ICHAR(YCHNAMES(JSV)(JT:JT)) ENDDO ENDDO - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'--',ICH_NAMES,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ICH_NAMES) DEALLOCATE(YCHNAMES,ICH_NAMES) END IF ! @@ -1437,34 +1450,11 @@ IF (CDCONV /= 'NONE' .OR. CSCONV == 'KAFR') THEN TZFIELD%CUNITS = 'mm hour-1' CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XPRSCONV*3.6E6) ! - IF ( LCH_CONV_LINOX ) THEN - YRECFM = 'IC_RATE' - YCOMMENT = 'X_Y_IntraCloud lightning Rate (/s)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XIC_RATE,IGRID,ILENCH, & - YCOMMENT,IRESP) - - YRECFM = 'CG_RATE' - YCOMMENT = 'X_Y_CloudGround lightning Rate (/s)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XCG_RATE,IGRID,ILENCH, & - YCOMMENT,IRESP) - - YRECFM = 'IC_TOTAL_NB' - YCOMMENT = 'X_Y_IntraCloud lightning Number (-)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XIC_TOTAL_NUMBER,IGRID,ILENCH, & - YCOMMENT,IRESP) - - YRECFM = 'CG_TOTAL_NB' - YCOMMENT = 'X_Y_CloudGround lightning Number (-)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XCG_TOTAL_NUMBER,IGRID,ILENCH, & - YCOMMENT,IRESP) + IF ( LCH_CONV_LINOX ) THEN + CALL IO_WRITE_FIELD(TPFILE,'IC_RATE', CLUOUT,IRESP,XIC_RATE) + CALL IO_WRITE_FIELD(TPFILE,'CG_RATE', CLUOUT,IRESP,XCG_RATE) + CALL IO_WRITE_FIELD(TPFILE,'IC_TOTAL_NB',CLUOUT,IRESP,XIC_TOTAL_NUMBER) + CALL IO_WRITE_FIELD(TPFILE,'CG_TOTAL_NB',CLUOUT,IRESP,XCG_TOTAL_NUMBER) END IF ! IF ( LCHTRANS .AND. NSV > 0 ) THEN @@ -1576,19 +1566,15 @@ IF (CPROGRAM /= 'IDEAL') THEN ! IF (ASSOCIATED(XINPRC)) THEN IF (SIZE(XINPRC) /= 0 ) THEN - YRECFM = 'INPRC' - YCOMMENT = 'X_Y_INstantaneous Cloud Precipitation Rain Rate (MM/H)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XINPRC*3.6E6,IGRID,ILENCH, & - YCOMMENT,IRESP) ! unit conversion + CALL FIND_FIELD_ID_FROM_MNHNAME('INPRC',IID,IRESP) + TZFIELD = TFIELDLIST(IID) + TZFIELD%CUNITS = 'mm hour-1' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XINPRC*3.6E6) ! - YRECFM = 'ACPRC' - YCOMMENT = 'X_Y_ACcumulated Cloud Precipitation Rain Rate (MM)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XACPRC*1.0E3,IGRID,ILENCH, & - YCOMMENT,IRESP) ! unit conversion + CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRC',IID,IRESP) + TZFIELD = TFIELDLIST(IID) + TZFIELD%CUNITS = 'mm' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XACPRC*1.0E3) ENDIF ENDIF ! @@ -1612,55 +1598,43 @@ IF (CPROGRAM /= 'IDEAL') THEN ! IF (ASSOCIATED(XINPRS)) THEN IF (SIZE(XINPRS) /= 0 ) THEN - YRECFM = 'INPRS' - YCOMMENT = 'X_Y_INstantaneous PRecipitation Snow Rate (MM/H)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XINPRS*3.6E6,IGRID,ILENCH, & - YCOMMENT,IRESP) ! unit conversion + CALL FIND_FIELD_ID_FROM_MNHNAME('INPRS',IID,IRESP) + TZFIELD = TFIELDLIST(IID) + TZFIELD%CUNITS = 'mm hour-1' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XINPRS*3.6E6) ! - YRECFM = 'ACPRS' - YCOMMENT = 'X_Y_ACcumulated PRecipitation Snow Rate (MM)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XACPRS*1.0E3,IGRID,ILENCH, & - YCOMMENT,IRESP) ! unit conversion + CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRS',IID,IRESP) + TZFIELD = TFIELDLIST(IID) + TZFIELD%CUNITS = 'mm' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XACPRS*1.0E3) END IF END IF ! IF (ASSOCIATED(XINPRG)) THEN IF (SIZE(XINPRG) /= 0 ) THEN - YRECFM = 'INPRG' - YCOMMENT = 'X_Y_INstantaneous PRecipitation Graupel Rate (MM/H)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XINPRG*3.6E6,IGRID,ILENCH, & - YCOMMENT,IRESP) ! unit conversion + CALL FIND_FIELD_ID_FROM_MNHNAME('INPRG',IID,IRESP) + TZFIELD = TFIELDLIST(IID) + TZFIELD%CUNITS = 'mm hour-1' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XINPRG*3.6E6) ! - YRECFM = 'ACPRG' - YCOMMENT = 'X_Y_ACcumulated PRecipitation Graupel Rate (MM)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XACPRG*1.0E3,IGRID,ILENCH, & - YCOMMENT,IRESP) ! unit conversion + CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRG',IID,IRESP) + TZFIELD = TFIELDLIST(IID) + TZFIELD%CUNITS = 'mm' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XACPRG*1.0E3) END IF END IF ! IF (ASSOCIATED(XINPRH)) THEN IF (SIZE(XINPRH) /= 0 ) THEN - YRECFM = 'INPRH' - YCOMMENT = 'X_Y_INstantaneous PRecipitation Hail Rate (MM/H)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XINPRH*3.6E6,IGRID,ILENCH, & - YCOMMENT,IRESP) ! unit conversion + CALL FIND_FIELD_ID_FROM_MNHNAME('INPRH',IID,IRESP) + TZFIELD = TFIELDLIST(IID) + TZFIELD%CUNITS = 'mm hour-1' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XINPRH*3.6E6) ! - YRECFM = 'ACPRH' - YCOMMENT = 'X_Y_ACcumulated PRecipitation Hail Rate (MM)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XACPRH*1.0E3,IGRID,ILENCH, & - YCOMMENT,IRESP) ! unit conversion + CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRH',IID,IRESP) + TZFIELD = TFIELDLIST(IID) + TZFIELD%CUNITS = 'mm' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XACPRH*1.0E3) ENDIF ENDIF ! @@ -1670,23 +1644,31 @@ IF (CPROGRAM /= 'IDEAL') THEN IF (SIZE(XINPRG) /= 0 ) ZWORK2D = ZWORK2D + XINPRG IF (SIZE(XINPRH) /= 0 ) ZWORK2D = ZWORK2D + XINPRH IF (SIZE(XINPRC) /= 0 ) ZWORK2D = ZWORK2D + XINPRC - YRECFM = 'INPRT' - YCOMMENT = 'X_Y_Total INstantaneaous PRecipitation rate (MM/H)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZWORK2D*3.6E6,IGRID,ILENCH, & - YCOMMENT,IRESP) ! unit conversion + TZFIELD%CMNHNAME = 'INPRT' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: INPRT' + TZFIELD%CUNITS = 'mm hour-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Total INstantaneaous PRecipitation rate' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 2 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK2D*3.6E6) ! ZWORK2D = XACPRR + XACPRS IF (SIZE(XINPRG) /= 0 ) ZWORK2D = ZWORK2D + XACPRG IF (SIZE(XINPRH) /= 0 ) ZWORK2D = ZWORK2D + XACPRH IF (SIZE(XINPRC) /= 0 ) ZWORK2D = ZWORK2D + XACPRC - YRECFM = 'ACPRT' - YCOMMENT = 'X_Y_Total ACcumulated PRecipitation rate (MM)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZWORK2D*1.0E3,IGRID,ILENCH, & - YCOMMENT,IRESP) ! unit conversion + TZFIELD%CMNHNAME = 'ACPRT' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: ACPRT' + TZFIELD%CUNITS = 'mm ' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Total ACcumulated PRecipitation rate' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 2 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK2D*1.0E3) END IF END IF !