diff --git a/src/LIB/SURCOUCHE/src/mode_field.f90 b/src/LIB/SURCOUCHE/src/mode_field.f90 index 72df0987661f4e4b9b8106ae0b154da3af730cc2..86251adb153d0bbcf7e401e5a5b4142e6a54d9eb 100644 --- a/src/LIB/SURCOUCHE/src/mode_field.f90 +++ b/src/LIB/SURCOUCHE/src/mode_field.f90 @@ -1150,6 +1150,58 @@ ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL)) IDX = IDX+1 ! IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'SUPSATMAX' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: SUPSATMAX' +TFIELDLIST(IDX)%CUNITS = '' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'X_Y_Z_Supersaturation' +TFIELDLIST(IDX)%NGRID = 1 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 3 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'NACT' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: NACT' +TFIELDLIST(IDX)%CUNITS = '' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'X_Y_Z_Nact' +TFIELDLIST(IDX)%NGRID = 1 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 3 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'SSPRO' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: SSPRO' +TFIELDLIST(IDX)%CUNITS = '' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'X_Y_Z_Supersaturation' +TFIELDLIST(IDX)%NGRID = 1 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 3 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'NPRO' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: NPRO' +TFIELDLIST(IDX)%CUNITS = '' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'X_Y_Z_Nact' +TFIELDLIST(IDX)%NGRID = 1 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 3 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() TFIELDLIST(IDX)%CMNHNAME = 'PHC' TFIELDLIST(IDX)%CSTDNAME = '' TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: PHC' @@ -2709,8 +2761,12 @@ IF (CONF_MODEL(KFROM)%IDX_RHT>0) THEN CALL FIND_FIELD_ID_FROM_MNHNAME('RHT', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRT(:,:,:,CONF_MODEL(KFROM)%IDX_RHT) END IF ! -CALL FIND_FIELD_ID_FROM_MNHNAME('SRCT',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XSRCT -CALL FIND_FIELD_ID_FROM_MNHNAME('SIGS',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XSIGS +CALL FIND_FIELD_ID_FROM_MNHNAME('SUPSATMAX',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XSUPSAT +CALL FIND_FIELD_ID_FROM_MNHNAME('NACT', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XNACT +CALL FIND_FIELD_ID_FROM_MNHNAME('SSPRO', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XSSPRO +CALL FIND_FIELD_ID_FROM_MNHNAME('NPRO', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XNPRO +CALL FIND_FIELD_ID_FROM_MNHNAME('SRCT', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XSRCT +CALL FIND_FIELD_ID_FROM_MNHNAME('SIGS', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XSIGS ! IF (CPROGRAM == 'MESONH') THEN ! @@ -2946,8 +3002,12 @@ IF (CONF_MODEL(KTO)%IDX_RHT>0) THEN TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => TFIELDLIST(IID)%TFIELD_X4D(KTO)%DATA(:,:,:,CONF_MODEL(KTO)%IDX_RHT) END IF ! -CALL FIND_FIELD_ID_FROM_MNHNAME('SRCT',IID,IRESP); XSRCT => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA -CALL FIND_FIELD_ID_FROM_MNHNAME('SIGS',IID,IRESP); XSIGS => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA +CALL FIND_FIELD_ID_FROM_MNHNAME('SUPSATMAX',IID,IRESP); XSUPSAT => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA +CALL FIND_FIELD_ID_FROM_MNHNAME('NACT', IID,IRESP); XNACT => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA +CALL FIND_FIELD_ID_FROM_MNHNAME('SSPRO', IID,IRESP); XSSPRO => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA +CALL FIND_FIELD_ID_FROM_MNHNAME('NPRO', IID,IRESP); XNPRO => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA +CALL FIND_FIELD_ID_FROM_MNHNAME('SRCT', IID,IRESP); XSRCT => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA +CALL FIND_FIELD_ID_FROM_MNHNAME('SIGS', IID,IRESP); XSIGS => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA ! IF (CPROGRAM == 'MESONH') THEN ! diff --git a/src/MNH/c2r2_adjust.f90 b/src/MNH/c2r2_adjust.f90 index f9e099fe67de0815e3dabf96e49f979f721a3e28..48587b612d312a6f283d952d0320376487b0d6c3 100644 --- a/src/MNH/c2r2_adjust.f90 +++ b/src/MNH/c2r2_adjust.f90 @@ -165,6 +165,7 @@ USE MODD_NSV, ONLY : NSV_C2R2BEG USE MODI_CONDENS USE MODI_BUDGET ! +USE MODE_FIELD USE MODE_FM USE MODE_FMWRIT USE MODE_IO_ll @@ -219,20 +220,14 @@ REAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) & ! fields ! INTEGER :: IRESP ! Return code of FM routines -INTEGER :: IGRID ! C-grid indicator in LFIFM file -INTEGER :: ILENCH ! Length of comment string in LFIFM file INTEGER :: JITER,ITERMAX ! iterative loop for first order adjustment INTEGER :: ILUOUT ! Logical unit of output listing -CHARACTER (LEN=28) :: YFMFILE ! Name of FM-file to write -CHARACTER (LEN=100) :: YCOMMENT ! Comment string in LFIFM file -CHARACTER (LEN=16) :: YRECFM ! Name of the desired field in LFIFM file +TYPE(TFIELDDATA) :: TZFIELD !------------------------------------------------------------------------------- ! !* 1. PRELIMINARIES ! ------------- ! -YFMFILE = TPFILE%CNAME -! CALL FMLOOK_ll(HLUOUT,HLUOUT,ILUOUT,IRESP) ZEPS= XMV / XMD ! @@ -428,11 +423,16 @@ IF ( HRAD /= 'NONE' ) THEN END IF ! IF ( OCLOSE_OUT ) THEN - YRECFM ='NEB' - YCOMMENT='X_Y_Z_NEB (0)' - IGRID = 1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZW1,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'NEB' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: NEB' + TZFIELD%CUNITS = '1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_NEB' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZW1) END IF ! ! diff --git a/src/MNH/khko_notadjust.f90 b/src/MNH/khko_notadjust.f90 index e76310accb689f5951bd062a52a6d177fb2d225f..b3f7f9605b96f904e63fc3ed91cd993b776cb93c 100644 --- a/src/MNH/khko_notadjust.f90 +++ b/src/MNH/khko_notadjust.f90 @@ -111,11 +111,13 @@ USE MODD_NSV, ONLY : NSV_C2R2BEG USE MODD_RAIN_C2R2_DESCR, ONLY : XRTMIN ! +USE MODE_FIELD, ONLY: TFIELDDATA,TYPEREAL USE MODE_FM USE MODE_FMWRIT +USE MODE_IO_ll +! USE MODI_BUDGET USE MODI_PROGNOS -USE MODE_IO_ll ! IMPLICIT NONE ! @@ -165,12 +167,7 @@ REAL, DIMENSION(:,:,:), INTENT(OUT) :: PCLDFR ! Cloud fraction ! ! INTEGER :: IRESP ! Return code of FM routines -INTEGER :: IGRID ! C-grid indicator in LFIFM file -INTEGER :: ILENCH ! Length of comment string in LFIFM file INTEGER :: ILUOUT ! Logical unit of output listing -CHARACTER (LEN=28) :: YFMFILE ! Name of FM-file to write -CHARACTER (LEN=100) :: YCOMMENT ! Comment string in LFIFM file -CHARACTER (LEN=16) :: YRECFM ! Name of the desired field in LFIFM file ! For Activation : LOGICAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) & @@ -194,15 +191,14 @@ INTEGER, DIMENSION(:), ALLOCATABLE :: IVEC1 ! Vectors of indices for REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) ::& ZEXNT,ZEXNS,ZT,ZRVSAT,ZWORK,ZLV,ZCPH, ZW1, & ZACT, ZDZ -INTEGER :: JK ! For loop - +INTEGER :: JK ! For loop +TYPE(TFIELDDATA) :: TZFIELD + !------------------------------------------------------------------------------- ! !* 1. PRELIMINARIES ! ------------- ! -YFMFILE = TPFILE%CNAME -! CALL FMLOOK_ll(HLUOUT,HLUOUT,ILUOUT,IRESP) CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKB=1+JPVEXT @@ -396,16 +392,27 @@ END IF PNPRO(:,:,:) = ZACT(:,:,:) ! IF ( OCLOSE_OUT ) THEN - ILENCH=LEN(YCOMMENT) - YRECFM ='SURSAT' - YCOMMENT='X_Y_Z_NEB (0)' - IGRID = 1 - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZWORK,IGRID,ILENCH,YCOMMENT,IRESP) - ILENCH=LEN(YCOMMENT) - YRECFM ='ACT_OD' - YCOMMENT='X_Y_Z_NEB (0)' - IGRID = 1 - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZACT,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'SURSAT' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: SURSAT' + TZFIELD%CUNITS = '1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_NEB' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZWORK) + ! + TZFIELD%CMNHNAME = 'ACT_OD' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: ACT_OD' + TZFIELD%CUNITS = '1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_NEB' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZACT) END IF ! !* 7. STORE THE BUDGET TERMS diff --git a/src/MNH/modd_fieldn.f90 b/src/MNH/modd_fieldn.f90 index 8a0845b68ded82a12bd694c268b0fefe8ef055b6..d966c57c7ceda891c7323d21ad4ec6f2bafd10ae 100644 --- a/src/MNH/modd_fieldn.f90 +++ b/src/MNH/modd_fieldn.f90 @@ -71,14 +71,14 @@ TYPE FIELD_t ! REAL, DIMENSION(:,:,:), POINTER :: XTHT=>NULL() ! (rho theta) at time t REAL, DIMENSION(:,:,:), POINTER :: XRTHS=>NULL() ! Source of (rho theta) ! REAL, DIMENSION(:,:,:), POINTER :: XRTHS_CLD=>NULL() ! Source of (rho theta) from resolved_cloud - REAL, DIMENSION(:,:,:), POINTER :: XSUPSAT=>NULL() ! Sursat - ! at time t - REAL, DIMENSION(:,:,:), POINTER :: XNACT=>NULL() ! Sursat - ! at time t - REAL, DIMENSION(:,:,:), POINTER :: XNPRO=>NULL() ! Sursat - ! at time t - REAL, DIMENSION(:,:,:), POINTER :: XSSPRO=>NULL() ! Sursat - ! at time t +! REAL, DIMENSION(:,:,:), POINTER :: XSUPSAT=>NULL() ! Sursat +! ! at time t +! REAL, DIMENSION(:,:,:), POINTER :: XNACT=>NULL() ! Sursat +! ! at time t +! REAL, DIMENSION(:,:,:), POINTER :: XNPRO=>NULL() ! Sursat +! ! at time t +! REAL, DIMENSION(:,:,:), POINTER :: XSSPRO=>NULL() ! Sursat +! ! at time t ! REAL, DIMENSION(:,:,:), POINTER :: XTKET=>NULL() ! Kinetic energy ! ! at time t REAL, DIMENSION(:,:,:), POINTER :: XRTKES=>NULL() ! Source of kinetic energy @@ -163,10 +163,10 @@ FIELD_MODEL(KFROM)%XRWS=>XRWS !FIELD_MODEL(KFROM)%XTHT=>XTHT !Done in FIELDLIST_GOTO_MODEL FIELD_MODEL(KFROM)%XRTHS=>XRTHS !FIELD_MODEL(KFROM)%XRTHS_CLD=>XRTHS_CLD !Done in FIELDLIST_GOTO_MODEL -FIELD_MODEL(KFROM)%XSUPSAT=>XSUPSAT -FIELD_MODEL(KFROM)%XNACT=>XNACT -FIELD_MODEL(KFROM)%XNPRO=>XNPRO -FIELD_MODEL(KFROM)%XSSPRO=>XSSPRO +!FIELD_MODEL(KFROM)%XSUPSAT=>XSUPSAT !Done in FIELDLIST_GOTO_MODEL +!FIELD_MODEL(KFROM)%XNACT=>XNACT !Done in FIELDLIST_GOTO_MODEL +!FIELD_MODEL(KFROM)%XNPRO=>XNPRO !Done in FIELDLIST_GOTO_MODEL +!FIELD_MODEL(KFROM)%XSSPRO=>XSSPRO !Done in FIELDLIST_GOTO_MODEL !FIELD_MODEL(KFROM)%XTKET=>XTKET !Done in FIELDLIST_GOTO_MODEL FIELD_MODEL(KFROM)%XRTKES=>XRTKES !FIELD_MODEL(KFROM)%XPABST=>XPABST !Done in FIELDLIST_GOTO_MODEL @@ -198,10 +198,10 @@ XRWS=>FIELD_MODEL(KTO)%XRWS !XTHT=>FIELD_MODEL(KTO)%XTHT !Done in FIELDLIST_GOTO_MODEL XRTHS=>FIELD_MODEL(KTO)%XRTHS !XRTHS_CLD=>FIELD_MODEL(KTO)%XRTHS_CLD !Done in FIELDLIST_GOTO_MODEL -XSUPSAT=>FIELD_MODEL(KTO)%XSUPSAT -XNACT=>FIELD_MODEL(KTO)%XNACT -XSSPRO=>FIELD_MODEL(KTO)%XSSPRO -XNPRO=>FIELD_MODEL(KTO)%XNPRO +!XSUPSAT=>FIELD_MODEL(KTO)%XSUPSAT !Done in FIELDLIST_GOTO_MODEL +!XNACT=>FIELD_MODEL(KTO)%XNACT !Done in FIELDLIST_GOTO_MODEL +!XSSPRO=>FIELD_MODEL(KTO)%XSSPRO !Done in FIELDLIST_GOTO_MODEL +!XNPRO=>FIELD_MODEL(KTO)%XNPRO !Done in FIELDLIST_GOTO_MODEL !XTKET=>FIELD_MODEL(KTO)%XTKET !Done in FIELDLIST_GOTO_MODEL XRTKES=>FIELD_MODEL(KTO)%XRTKES !XPABST=>FIELD_MODEL(KTO)%XPABST !Done in FIELDLIST_GOTO_MODEL diff --git a/src/MNH/paspol.f90 b/src/MNH/paspol.f90 index 51f585ce3e5d1da72d88f554bf9af553124dfde0..ee02db5366973167bef1d4c488186718963b76df 100644 --- a/src/MNH/paspol.f90 +++ b/src/MNH/paspol.f90 @@ -92,6 +92,8 @@ USE MODD_GRID_n USE MODD_TIME_n USE MODD_SUB_PASPOL_n ! +USE MODE_FIELD, ONLY: TFIELDDATA,TYPEREAL +! !* 0. DECLARATIONS ! ------------ ! @@ -139,20 +141,10 @@ REAL :: ZP, ZTH, ZT, ZRHO, ZMASAIR !INTEGER :: J4PTI,J4PTJ,J9PTI,J9PTJ ! REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRHOM ! -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTEMPO, ZSVT ! Work array -! -! in LFI subroutines at the open of the file -INTEGER :: IGRID ! IGRID : grid indicator -INTEGER :: ILENCH ! ILENCH : length of comment string +REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTEMPO, ZSVT ! Work arrays ! -CHARACTER(LEN=28) :: YFMFILE ! Name of FM-file to write -CHARACTER(LEN=16) :: YRECFM ! Name of the article to be written -CHARACTER(LEN=100):: YCOMMENT ! Comment string -CHARACTER (LEN=2) :: YDIR ! Type of the data field -INTEGER :: IRESP ! IRESP : return-code if a problem appears - !in LFI subroutines at the open of the file -! - +INTEGER :: IRESP +TYPE(TFIELDDATA) :: TZFIELD ! ! !-------------------------------------------------------------------------------------- @@ -161,8 +153,6 @@ INTEGER :: IRESP ! IRESP : return-code if a problem appears !* 0. Initialisation ! ! -YFMFILE = TPFILE%CNAME -! CALL GET_DIM_EXT_ll('B',IIU,IJU) CALL GET_PHYSICAL_ll (IIB,IJB,IIE,IJE) ! @@ -171,7 +161,6 @@ IKB = 1 + JPVEXT IKE = IKU - JPVEXT ! ALLOCATE( ZRHOM(IIU,IJU,IKU) ) -ALLOCATE( ZTEMPO(IIU,IJU,IKU) ) ALLOCATE( ZSVT(IIU,IJU,IKU) ) ! ZSURF = (XXHAT(2)-XXHAT(1))*(XYHAT(2)-XYHAT(1)) ! Surface d'une maille. @@ -587,21 +576,29 @@ END DO !* 3.4 Ecriture conditionnelle. ! IF (OCLOSE_OUT) THEN - DO JSV=1,NSV_PP - ! - ZTEMPO(:,:,:)=XATC(:,:,:,JSV) - ! - IGRID = 1 - YDIR = 'XY' - WRITE(YRECFM,'(A3,I3.3)')'ATC',JSV+NSV_PPBEG-1 - WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','ATC',JSV+NSV_PPBEG-1,' (1/M3) ' - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZTEMPO,IGRID,ILENCH, & - YCOMMENT,IRESP) - END DO + ALLOCATE( ZTEMPO(IIU,IJU,IKU) ) + ! + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'm-3' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV=1,NSV_PP + ZTEMPO(:,:,:)=XATC(:,:,:,JSV) + ! + WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'ATC',JSV+NSV_PPBEG-1 + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','ATC',JSV+NSV_PPBEG-1 + ! + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZTEMPO) + END DO + ! + DEALLOCATE(ZTEMPO) ENDIF ! -DEALLOCATE(ZRHOM, ZTEMPO, ZSVT) +DEALLOCATE(ZRHOM, ZSVT) ! ! !------------------------------------------------------------------------------- diff --git a/src/MNH/radiations.f90 b/src/MNH/radiations.f90 index 7587dd433f4c7959dc007e0ec2a3e62cfc309b9e..acb209da2cec76ffd841828dff095339425bedb1 100644 --- a/src/MNH/radiations.f90 +++ b/src/MNH/radiations.f90 @@ -219,6 +219,7 @@ END MODULE MODI_RADIATIONS !* 0. DECLARATIONS ! ------------ ! +USE MODE_FIELD, ONLY: TFIELDDATA,TYPEREAL USE MODE_FMWRIT USE MODE_FM USE MODE_ll @@ -317,9 +318,10 @@ REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVT ! scalar variable ( C2R2 and C1R REAL, DIMENSION(:,:,:), POINTER :: POZON ! OZONE field from clim. REAL, DIMENSION(:,:,:,:), POINTER :: PAER ! AERosols optical thickness from clim. REAL, DIMENSION(:,:,:,:), POINTER :: PDST_WL ! AERosols Extinction by wavelength . -REAL, DIMENSION(:,:,:,:), POINTER :: PAER_CLIM ! AERosols optical thickness from clim. ! note : the vertical dimension of - ! these fields iclude the "radiation levels" - ! above domain top. +REAL, DIMENSION(:,:,:,:), POINTER :: PAER_CLIM ! AERosols optical thickness from clim. + ! note : the vertical dimension of + ! these fields include the "radiation levels" + ! above domain top ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF ![kg/m3] air density @@ -606,11 +608,6 @@ REAL, DIMENSION(SIZE(PDTHRAD,1),SIZE(PDTHRAD,2),SIZE(PDTHRAD,3)) & :: ZDTRAD_SW! SW temperature tendency INTEGER :: ILUOUT ! Logical unit number for output-listing INTEGER :: IRESP ! Return code of FM routines -INTEGER :: IGRID ! C-grid indicator in LFIFM file -INTEGER :: ILENCH ! Length of comment string in LFIFM file -CHARACTER (LEN=28) :: YFMFILE ! Name of FM-file to write -CHARACTER (LEN=100) :: YCOMMENT ! comment string in LFIFM file -CHARACTER (LEN=16) :: YRECFM ! Name of the desired field in LFIFM file REAL, DIMENSION(SIZE(PDTHRAD,1),SIZE(PDTHRAD,2),SIZE(PDTHRAD,3)) & :: ZSTORE_3D, ZSTORE_3D2! 3D work array for storage REAL, DIMENSION(SIZE(PDTHRAD,1),SIZE(PDTHRAD,2)) & @@ -622,6 +619,7 @@ CHARACTER (LEN=2) :: YDIR ! Type of the data field INTEGER :: ISWB ! number of SW spectral bands (between radiations and surface schemes) INTEGER :: JSWB ! loop on SW spectral bands INTEGER :: JAE ! loop on aerosol class +TYPE(TFIELDDATA) :: TZFIELD ! !------------------------------------------------------------------------- !------------------------------------------------------------------------- @@ -630,8 +628,6 @@ INTEGER :: JAE ! loop on aerosol class !* 1. COMPUTE DIMENSIONS OF ARRAYS AND OTHER INDICES ! ---------------------------------------------- ! -YFMFILE = TPFILE%CNAME -! CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) ! this definition must be coherent with ! the one used in ini_radiations routine IKU = SIZE(PTHT,3) @@ -2588,12 +2584,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - YDIR='XY' - YRECFM = 'SWF_DOWN' - YCOMMENT = 'X_Y_Z_SWF_DOWN (W/M2)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_3D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'SWF_DOWN' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: SWF_DOWN' + TZFIELD%CUNITS = 'W m-2' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_SWF_DOWN' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK - JPVEXT @@ -2604,11 +2604,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - YRECFM = 'SWF_UP' - YCOMMENT = 'X_Y_Z_SWF_UP (W/M2)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_3D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'SWF_UP' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: SWF_UP' + TZFIELD%CUNITS = 'W m-2' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_SWF_UP' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK - JPVEXT @@ -2619,11 +2624,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - YRECFM = 'LWF_DOWN' - YCOMMENT = 'X_Y_Z_LWF_DOWN (W/M2)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_3D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'LWF_DOWN' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: LWF_DOWN' + TZFIELD%CUNITS = 'W m-2' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_LWF_DOWN' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK - JPVEXT @@ -2634,11 +2644,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - YRECFM = 'LWF_UP' - YCOMMENT = 'X_Y_Z_LWF_UP (W/M2)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_3D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'LWF_UP' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: LWF_UP' + TZFIELD%CUNITS = 'W m-2' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_LWF_UP' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK - JPVEXT @@ -2649,11 +2664,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - YRECFM = 'LWF_NET' - YCOMMENT = 'X_Y_Z_LWF_NET (W/M2)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_3D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'LWF_NET' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: LWF_NET' + TZFIELD%CUNITS = 'W m-2' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_LWF_NET' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK - JPVEXT @@ -2664,11 +2684,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - YRECFM = 'SWF_NET' - YCOMMENT = 'X_Y_Z_SWF_NET (W/M2)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_3D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'SWF_NET' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: SWF_NET' + TZFIELD%CUNITS = 'W m-2' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_SWF_NET' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_3D) ! DO JK=IKB,IKE DO JJ=IJB,IJE @@ -2677,11 +2702,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - YRECFM = 'DTRAD_LW' - YCOMMENT = 'X_Y_Z_DTRAD_LW (K/DAY)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_3D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'DTRAD_LW' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: DTRAD_LW' + TZFIELD%CUNITS = 'K day-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_DTRAD_LW' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_3D) ! DO JK=IKB,IKE DO JJ=IJB,IJE @@ -2690,11 +2720,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - YRECFM = 'DTRAD_SW' - YCOMMENT = 'X_Y_Z_DTRAD_SW (K/DAY)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_3D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'DTRAD_SW' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: DTRAD_SW' + TZFIELD%CUNITS = 'K day-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_DTRAD_SW' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_3D) ! DO JJ=IJB,IJE DO JI=IIB,IIE @@ -2702,11 +2737,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_2D(JI,JJ) = ZFLUX_TOP_GND_IRVISNIR(IIJ,5) END DO END DO - YRECFM = 'RADSWD_VIS' - YCOMMENT = 'X_Y_RADSWD_VIS' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_2D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'RADSWD_VIS' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: RADSWD_VIS' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_RADSWD_VIS' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 2 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_2D) ! DO JJ=IJB,IJE DO JI=IIB,IIE @@ -2714,11 +2754,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_2D(JI,JJ) = ZFLUX_TOP_GND_IRVISNIR(IIJ,6) END DO END DO - YRECFM = 'RADSWD_NIR' - YCOMMENT = 'X_Y_Z_RADSWD_NIR' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_2D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'RADSWD_NIR' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: RADSWD_NIR' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_RADSWD_NIR' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 2 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_2D) ! DO JJ=IJB,IJE DO JI=IIB,IIE @@ -2726,11 +2771,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_2D(JI,JJ) = ZFLUX_TOP_GND_IRVISNIR(IIJ,4) END DO END DO - YRECFM = 'RADLWD' - YCOMMENT = 'X_Y_RADLWD' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_2D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'RADLWD' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: RADLWD' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_RADLWD' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 2 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_2D) END IF ! ! @@ -2744,12 +2794,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - YDIR='XY' - YRECFM = 'SWF_DOWN_CS' - YCOMMENT = 'X_Y_Z_SWF_DOWN_CS (W/M2)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_3D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'SWF_DOWN_CS' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: SWF_DOWN_CS' + TZFIELD%CUNITS = 'W m-2' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_SWF_DOWN_CS' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK - JPVEXT @@ -2760,11 +2814,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - YRECFM = 'SWF_UP_CS' - YCOMMENT = 'X_Y_Z_SWF_UP_CS (W/M2)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_3D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'SWF_UP_CS' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: SWF_UP_CS' + TZFIELD%CUNITS = 'W m-2' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_SWF_UP_CS' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK - JPVEXT @@ -2775,11 +2834,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - YRECFM = 'LWF_DOWN_CS' - YCOMMENT = 'X_Y_Z_LWF_DOWN (W/M2)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_3D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'LWF_DOWN_CS' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: LWF_DOWN_CS' + TZFIELD%CUNITS = 'W m-2' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_LWF_DOWN_CS' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK - JPVEXT @@ -2790,11 +2854,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - YRECFM = 'LWF_UP_CS' - YCOMMENT = 'X_Y_Z_LWF_UP_CS (W/M2)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_3D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'LWF_UP_CS' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: LWF_UP_CS' + TZFIELD%CUNITS = 'W m-2' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_LWF_UP_CS' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK - JPVEXT @@ -2805,11 +2874,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - YRECFM = 'LWF_NET_CS' - YCOMMENT = 'X_Y_Z_SWF_NET_CS (W/M2)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_3D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'LWF_NET_CS' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: LWF_NET_CS' + TZFIELD%CUNITS = 'W m-2' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_LWF_NET_CS' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK - JPVEXT @@ -2820,11 +2894,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - YRECFM = 'SWF_NET_CS' - YCOMMENT = 'X_Y_Z_SWF_NET_CS (W/M2)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_3D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'SWF_NET_CS' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: SWF_NET_CS' + TZFIELD%CUNITS = 'W m-2' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_SWF_NET_CS' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK-JPVEXT @@ -2835,11 +2914,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - YRECFM = 'DTRAD_SW_CS' - YCOMMENT = 'X_Y_Z_DTRAD_SW_CS (K/DAY)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_3D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'DTRAD_SW_CS' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: DTRAD_SW_CS' + TZFIELD%CUNITS = 'K day-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_DTRAD_SW_CS' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK-JPVEXT @@ -2850,11 +2934,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - YRECFM = 'DTRAD_LW_CS' - YCOMMENT = 'X_Y_Z_DTRAD_LW_CS (K/DAY)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_3D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'DTRAD_LW_CS' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: DTRAD_LW_CS' + TZFIELD%CUNITS = 'K day-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_DTRAD_LW_CS' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_3D) ! DO JJ=IJB,IJE DO JI=IIB,IIE @@ -2862,11 +2951,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_2D(JI,JJ) = ZFLUX_TOP_GND_IRVISNIR_CS(IIJ,5) END DO END DO - YRECFM = 'RADSWD_VIS_CS' - YCOMMENT = 'X_Y_RADSWD_VIS_CS' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_2D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'RADSWD_VIS_CS' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: RADSWD_VIS_CS' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_RADSWD_VIS_CS' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 2 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_2D) ! DO JJ=IJB,IJE DO JI=IIB,IIE @@ -2874,11 +2968,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_2D(JI,JJ) = ZFLUX_TOP_GND_IRVISNIR_CS(IIJ,6) END DO END DO - YRECFM = 'RADSWD_NIR_CS' - YCOMMENT = 'X_Y_RADSWD_NIR_CS' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_2D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'RADSWD_NIR_CS' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: RADSWD_NIR_CS' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_RADSWD_NIR_CS' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 2 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_2D) ! DO JJ=IJB,IJE DO JI=IIB,IIE @@ -2886,11 +2985,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_2D(JI,JJ) = ZFLUX_TOP_GND_IRVISNIR_CS(IIJ,4) END DO END DO - YRECFM = 'RADLWD_CS' - YCOMMENT = 'X_Y_RADLWD_CS' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_2D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'RADLWD_CS' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: RADLWD_CS' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_RADLWD_CS' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 2 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_2D) END IF ! ! @@ -2901,11 +3005,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_2D(JI,JJ) = ZPLAN_ALB_VIS(IIJ) END DO END DO - YRECFM = 'PLAN_ALB_VIS' - YCOMMENT = 'X_Y_PLAN_ALB_VIS' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_2D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'PLAN_ALB_VIS' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: PLAN_ALB_VIS' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_PLAN_ALB_VIS' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 2 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_2D) ! DO JJ=IJB,IJE DO JI=IIB,IIE @@ -2913,11 +3022,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_2D(JI,JJ) = ZPLAN_ALB_NIR(IIJ) END DO END DO - YRECFM = 'PLAN_ALB_NIR' - YCOMMENT = 'X_Y_PLAN_ALB_NIR' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_2D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'PLAN_ALB_NIR' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: PLAN_ALB_NIR' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_PLAN_ALB_NIR' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 2 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_2D) ! DO JJ=IJB,IJE DO JI=IIB,IIE @@ -2925,11 +3039,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_2D(JI,JJ) = ZPLAN_TRA_VIS(IIJ) END DO END DO - YRECFM = 'PLAN_TRA_VIS' - YCOMMENT = 'X_Y_PLAN_TRA_VIS' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_2D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'PLAN_TRA_VIS' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: PLAN_TRA_VIS' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_PLAN_TRA_VIS' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 2 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_2D) ! DO JJ=IJB,IJE DO JI=IIB,IIE @@ -2937,11 +3056,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_2D(JI,JJ) = ZPLAN_TRA_NIR(IIJ) END DO END DO - YRECFM = 'PLAN_TRA_NIR' - YCOMMENT = 'X_Y_PLAN_TRA_NIR' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_2D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'PLAN_TRA_NIR' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: PLAN_TRA_NIR' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_PLAN_TRA_NIR' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 2 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_2D) ! DO JJ=IJB,IJE DO JI=IIB,IIE @@ -2949,11 +3073,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_2D(JI,JJ) = ZPLAN_ABS_VIS(IIJ) END DO END DO - YRECFM = 'PLAN_ABS_VIS' - YCOMMENT = 'X_Y_PLAN_ABS_VIS' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_2D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'PLAN_ABS_VIS' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: PLAN_ABS_VIS' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_PLAN_ABS_VIS' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 2 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_2D) ! DO JJ=IJB,IJE DO JI=IIB,IIE @@ -2961,11 +3090,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_2D(JI,JJ) = ZPLAN_ABS_NIR(IIJ) END DO END DO - YRECFM = 'PLAN_ABS_NIR' - YCOMMENT = 'X_Y_PLAN_ABS_NIR' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_2D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'PLAN_ABS_NIR' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: PLAN_ABS_NIR' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_PLAN_ABS_NIR' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 2 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_2D) ! ! END IF @@ -2981,11 +3115,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - YRECFM = 'EFNEB_DOWN' - YCOMMENT = 'X_Y_Z_EFNEB_DOWN' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_3D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'EFNEB_DOWN' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: EFNEB_DOWN' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_EFNEB_DOWN' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK - JPVEXT @@ -2996,11 +3135,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - YRECFM = 'EFNEB_UP' - YCOMMENT = 'X_Y_Z_EFNEB_UP' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_3D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'EFNEB_UP' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: EFNEB_UP' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_EFNEB_UP' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK - JPVEXT @@ -3011,11 +3155,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - YRECFM = 'FLWP' - YCOMMENT = 'X_Y_Z_FLWP' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_3D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'FLWP' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: FLWP' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_FLWP' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK - JPVEXT @@ -3026,12 +3175,17 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - YRECFM = 'FIWP' - YCOMMENT = 'X_Y_Z_FIWP' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_3D,IGRID,ILENCH,YCOMMENT,IRESP) - ! + TZFIELD%CMNHNAME = 'FIWP' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: FIWP' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_FIWP' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_3D) + ! DO JK=IKB,IKE JKRAD = JK - JPVEXT DO JJ=IJB,IJE @@ -3041,12 +3195,17 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - YRECFM = 'EFRADL' - YCOMMENT = 'X_Y_Z_RAD_microm' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_3D,IGRID,ILENCH,YCOMMENT,IRESP) - + TZFIELD%CMNHNAME = 'EFRADL' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: EFRADL' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_RAD_microm' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_3D) + ! DO JK=IKB,IKE JKRAD = JK - JPVEXT DO JJ=IJB,IJE @@ -3056,12 +3215,17 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - YRECFM = 'EFRADI' - YCOMMENT = 'X_Y_Z_RAD_microm' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_3D,IGRID,ILENCH,YCOMMENT,IRESP) - ! + TZFIELD%CMNHNAME = 'EFRADI' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: EFRADI' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_RAD_microm' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_3D) + ! DO JK=IKB,IKE JKRAD = JK - JPVEXT DO JJ=IJB,IJE @@ -3071,11 +3235,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - YRECFM = 'SW_NEB' - YCOMMENT = 'X_Y_Z_SW_NEB' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_3D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'SW_NEB' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: SW_NEB' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_SW_NEB' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK - JPVEXT @@ -3086,11 +3255,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - YRECFM = 'RRTM_LW_NEB' - YCOMMENT = 'X_Y_Z_LW_NEB' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_3D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'RRTM_LW_NEB' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: RRTM_LW_NEB' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_LW_NEB' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_3D) ! ! spectral bands IF (KSWB==6) THEN @@ -3107,21 +3281,38 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN END DO ! DO JBAND=1,KSWB - YRECFM = 'ODAER_'//YBAND_NAME(JBAND) - YCOMMENT = 'X_Y_Z_OD_'//YBAND_NAME(JBAND) - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZTAUAZ(:,:,:,JBAND),IGRID,ILENCH,YCOMMENT,IRESP) - YRECFM = 'SSAAER_'//YBAND_NAME(JBAND) - YCOMMENT = 'X_Y_Z_SSA_'//YBAND_NAME(JBAND) - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZPIZAZ(:,:,:,JBAND),IGRID,ILENCH,YCOMMENT,IRESP) - YRECFM = 'GAER_'//YBAND_NAME(JBAND) - YCOMMENT = 'X_Y_Z_G_'//YBAND_NAME(JBAND) - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZCGAZ(:,:,:,JBAND),IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'ODAER_'//YBAND_NAME(JBAND) + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_OD_'//YBAND_NAME(JBAND) + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZTAUAZ(:,:,:,JBAND)) + ! + TZFIELD%CMNHNAME = 'SSAAER_'//YBAND_NAME(JBAND) + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_SSA_'//YBAND_NAME(JBAND) + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZPIZAZ(:,:,:,JBAND)) + ! + TZFIELD%CMNHNAME = 'GAER_'//YBAND_NAME(JBAND) + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_G_'//YBAND_NAME(JBAND) + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZCGAZ(:,:,:,JBAND)) ENDDO DO JBAND=1,KSWB @@ -3134,11 +3325,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - YRECFM = 'OTH_'//YBAND_NAME(JBAND) - YCOMMENT = 'X_Y_Z_OTH_'//YBAND_NAME(JBAND) - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_3D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'OTH_'//YBAND_NAME(JBAND) + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_OTH_'//YBAND_NAME(JBAND) + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK - JPVEXT @@ -3149,11 +3345,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - YRECFM = 'SSA_'//YBAND_NAME(JBAND) - YCOMMENT = 'X_Y_Z_SSA_'//YBAND_NAME(JBAND) - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_3D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'SSA_'//YBAND_NAME(JBAND) + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_SSA_'//YBAND_NAME(JBAND) + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_3D) ! DO JK=IKB,IKE JKRAD = JK - JPVEXT @@ -3164,11 +3365,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - YRECFM = 'ASF_'//YBAND_NAME(JBAND) - YCOMMENT = 'X_Y_Z_ASF_'//YBAND_NAME(JBAND) - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_3D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'ASF_'//YBAND_NAME(JBAND) + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_ASF_'//YBAND_NAME(JBAND) + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_3D) END DO END IF ! @@ -3186,12 +3392,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN END DO END DO END DO - YDIR='XY' - YRECFM = 'O3CLIM' - YCOMMENT = 'X_Y_Z_O3 Pa/Pa' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_3D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'O3CLIM' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: O3CLIM' + TZFIELD%CUNITS = 'Pa Pa-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_O3' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_3D) ! !cumulated optical thickness of aerosols !cumul begin from the top of the domain, not from the TOA ! @@ -3212,12 +3422,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_2D(:,:) = ZSTORE_2D(:,:) + ZSTORE_3D(:,:,JK1) ZSTORE_3D2(:,:,JK1) = ZSTORE_2D(:,:) END DO - YDIR='XY' - YRECFM = 'CUM_AER_LAND' - YCOMMENT = 'X_Y_Z_CUM_AER_OPT' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_3D2,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'CUM_AER_LAND' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: CUM_AER_LAND' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_CUM_AER_OPT' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_3D2) ! ! sea DO JK=IKB,IKE @@ -3236,12 +3450,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_3D2(:,:,JK1) = ZSTORE_2D(:,:) END DO ! - YDIR='XY' - YRECFM = 'CUM_AER_SEA' - YCOMMENT = 'X_Y_Z_CUM_AER_OPT' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_3D2,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'CUM_AER_SEA' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: CUM_AER_SEA' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_CUM_AER_OPT' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_3D2) ! ! desert DO JK=IKB,IKE @@ -3260,12 +3478,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_3D2(:,:,JK1) = ZSTORE_2D(:,:) END DO ! - YDIR='XY' - YRECFM = 'CUM_AER_DES' - YCOMMENT = 'X_Y_Z_CUM_AER_OPT' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_3D2,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'CUM_AER_DES' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: CUM_AER_DES' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_CUM_AER_OPT' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_3D2) ! ! urban DO JK=IKB,IKE @@ -3284,12 +3506,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_3D2(:,:,JK1) = ZSTORE_2D(:,:) END DO ! - YDIR='XY' - YRECFM = 'CUM_AER_URB' - YCOMMENT = 'X_Y_Z_CUM_AER_OPT' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_3D2,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'CUM_AER_URB' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: CUM_AER_URB' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_CUM_AER_OPT' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_3D2) ! ! Volcanoes DO JK=IKB,IKE @@ -3308,12 +3534,16 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_3D2(:,:,JK1) = ZSTORE_2D(:,:) END DO ! - YDIR='XY' - YRECFM = 'CUM_AER_VOL' - YCOMMENT = 'X_Y_Z_CUM_AER_OPT' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_3D2,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'CUM_AER_VOL' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: CUM_AER_VOL' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_CUM_AER_OPT' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_3D2) ! ! stratospheric background DO JK=IKB,IKE @@ -3332,16 +3562,19 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN ZSTORE_3D2(:,:,JK1) = ZSTORE_2D(:,:) END DO ! - YDIR='XY' - YRECFM = 'CUM_AER_STRB' - YCOMMENT = 'X_Y_Z_CUM_AER_OPT' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,YDIR,ZSTORE_3D2,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'CUM_AER_STRB' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: CUM_AER_STRB' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_CUM_AER_OPT' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZSTORE_3D2) ENDIF END IF ! - DEALLOCATE(ZNFLW_CS) DEALLOCATE(ZNFLW) DEALLOCATE(ZNFSW_CS) diff --git a/src/MNH/rain_c2r2_khko.f90 b/src/MNH/rain_c2r2_khko.f90 index 119979e1426170bb37365c817e64611b0adb3b7d..f90b32de3e749a832712412e02c61dac044a544d 100644 --- a/src/MNH/rain_c2r2_khko.f90 +++ b/src/MNH/rain_c2r2_khko.f90 @@ -238,10 +238,11 @@ USE MODD_SALT ! USE MODI_BUDGET ! +USE MODE_FIELD USE MODE_FM -USE MODE_ll USE MODE_FMWRIT USE MODI_GAMMA +USE MODE_ll ! IMPLICIT NONE ! @@ -324,9 +325,6 @@ INTEGER :: IKB ! INTEGER :: IKE ! INTEGER :: ISIZE ! INTEGER :: IRESP ! Return code of FM routines -INTEGER :: ILENG ! Length of comment string in LFIFM file -INTEGER :: IGRID ! C-grid indicator in LFIFM file -INTEGER :: ILENCH ! Length of comment string in LFIFM file ! REAL :: ZTSPLITR ! Small time step for rain sedimentation REAL :: ZEPS ! molar mass ratio @@ -425,9 +423,7 @@ REAL :: ZFACT, JSV, ZMU, ZALPHA REAL, DIMENSION(:), ALLOCATABLE :: ZRTMIN REAL, DIMENSION(:), ALLOCATABLE :: ZCTMIN REAL :: ZTMP -CHARACTER (LEN=28) :: YFMFILE ! Name of FM-file to write -CHARACTER (LEN=100) :: YCOMMENT ! Comment string in LFIFM file -CHARACTER (LEN=16) :: YRECFM ! Name of the desired field in LFIFM file +TYPE(TFIELDDATA) :: TZFIELD ! ! ! @@ -436,8 +432,6 @@ CHARACTER (LEN=16) :: YRECFM ! Name of the desired field in LFIFM file !* 1. COMPUTE THE SLOPE PARAMETERS ZLBDC,ZLBDR ! ---------------------------------------- ! -YFMFILE = TPFILE%CNAME -! CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKB=1+JPVEXT IKE=SIZE(PZZ,3) - JPVEXT @@ -601,13 +595,18 @@ INTEGER :: J1 !ZCHEN(:,:,IKE) = ZCHEN(:,:,IKE-1) !! !! -!IF ( OCLOSE_OUT ) THEN -! YRECFM ='ZCHEN' -! YCOMMENT='X_Y_Z_ZCHEN' -! ILENCH=LEN(YCOMMENT) -! IGRID = 1 -! CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZCHEN,IGRID,ILENCH,YCOMMENT,IRESP) -!END IF +! IF ( OCLOSE_OUT ) THEN +! TZFIELD%CMNHNAME = 'ZCHEN' +! TZFIELD%CSTDNAME = '' +! TZFIELD%CLONGNAME = 'MesoNH: ZCHEN' +! TZFIELD%CUNITS = '' +! TZFIELD%CDIR = 'XY' +! TZFIELD%CCOMMENT = 'X_Y_Z_ZCHEN' +! TZFIELD%NGRID = 1 +! TZFIELD%NTYPE = TYPEREAL +! TZFIELD%NDIMS = 3 +! CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZCHEN) +! END IF ! !------------------------------------------------------------------------------- ! @@ -880,11 +879,16 @@ INUCT = COUNTJV( GNUCT(:,:,:),I1(:),I2(:),I3(:)) ! END IF ! IF ( OCLOSE_OUT ) THEN - YRECFM ='SMAX' - YCOMMENT='X_Y_Z_SMAX' - ILENCH=LEN(YCOMMENT) - IGRID = 1 - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZZW1LOG,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'SMAX' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: SMAX' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_SMAX' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZZW1LOG) END IF ! !* 3.4 budget storage @@ -1898,23 +1902,27 @@ DO JN = 1 , KSPLITR END IF ! IF (OSEDC .AND. OCLOSE_OUT) THEN - YRECFM ='SEDFLUXC' - YCOMMENT='X_Y_Z_SEDFLUXC' - ILENCH=LEN(YCOMMENT) - IGRID = 1 - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZWSEDC,IGRID,ILENCH,YCOMMENT,IRESP) -! - YRECFM ='SEDFLUXR' - YCOMMENT='X_Y_Z_SEDFLUXR' - ILENCH=LEN(YCOMMENT) - IGRID = 1 - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZWSEDR,IGRID,ILENCH,YCOMMENT,IRESP) -! -! YRECFM ='SPEEDC' -! YCOMMENT='X_Y_Z_SPEEDC' -! ILENCH=LEN(YCOMMENT) -! IGRID = 1 -! CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',PSPEEDC,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'SEDFLUXC' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: SEDFLUXC' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_SEDFLUXC' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZWSEDC) + ! + TZFIELD%CMNHNAME = 'SEDFLUXR' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: SEDFLUXR' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_SEDFLUXR' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZWSEDR) END IF END DO ! diff --git a/src/MNH/shallow_mf_pack.f90 b/src/MNH/shallow_mf_pack.f90 index 8ebc554a588bee4976a9f788d5b6c729531c972e..637071ad243504c6f5ef8612fe9b5ad3d5a6b486 100644 --- a/src/MNH/shallow_mf_pack.f90 +++ b/src/MNH/shallow_mf_pack.f90 @@ -128,6 +128,7 @@ USE MODD_NSV USE MODD_PARAM_MFSHALL_n USE MODD_BUDGET +USE MODE_FIELD, ONLY: TFIELDDATA,TYPEREAL USE MODE_FMWRIT USE MODI_SHALLOW_MF @@ -254,12 +255,8 @@ REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3),SIZE(PSVM,4)) :: ZDSVDT INTEGER :: IIU, IJU, IKU, IKB, IKE, IRR, ISV INTEGER :: JK,JRR,JSV ! Loop counters -INTEGER :: IRESP ! Return code of FM routines -INTEGER :: IGRID ! C-grid indicator in LFIFM file -INTEGER :: ILENCH ! Length of comment string in LFIFM file -CHARACTER(LEN=28) :: YFMFILE ! Name of FM-file to write -CHARACTER (LEN=100) :: YCOMMENT ! comment string in LFIFM file -CHARACTER (LEN=16) :: YRECFM ! Name of the desired field in LFIFM file +INTEGER :: IRESP ! Return code of FM routines +TYPE(TFIELDDATA) :: TZFIELD !------------------------------------------------------------------------ !!! 1. Initialisation @@ -284,8 +281,6 @@ ZUMM=MXF(PUM) ZVMM=MYF(PVM) ZWMM=MZF(1,IKU,1,PWM) ! -YFMFILE = TPFILE%CNAME -! !!! 2. Pack input variables ! DO JK=1,IKU @@ -386,40 +381,69 @@ END DO ! IF ( OMF_FLX .AND. OCLOSE_OUT ) THEN ! stores the conservative potential temperature vertical flux - YRECFM ='MF_THW_FLX' - YCOMMENT='X_Y_Z_MF_THW_FLX (K*M/S)' - ILENCH = LEN(YCOMMENT) - IGRID = 4 ZWORK(:,:,:)=RESHAPE(ZFLXZTHMF (:,:),(/ IIU,IJU,IKU /) ) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZWORK,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'MF_THW_FLX' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: MF_THW_FLX' + TZFIELD%CUNITS = 'K m s-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_MF_THW_FLX' + TZFIELD%NGRID = 4 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZWORK) + ! ! stores the conservative mixing ratio vertical flux - YRECFM ='MF_RCONSW_FLX' - YCOMMENT='X_Y_Z_MF_RCONSW_FLX (K*M/S)' - ILENCH = LEN(YCOMMENT) - IGRID = 4 ZWORK(:,:,:)=RESHAPE(ZFLXZRMF(:,:),(/ IIU,IJU,IKU /) ) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZWORK,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'MF_RCONSW_FLX' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: MF_RCONSW_FLX' + TZFIELD%CUNITS = 'K m s-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_MF_RCONSW_FLX' + TZFIELD%NGRID = 4 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZWORK) + ! ! stores the theta_v vertical flux - YRECFM ='MF_THVW_FLX' - YCOMMENT='X_Y_Z_MF_THVW_FLX (K*M/S)' - ILENCH = LEN(YCOMMENT) - IGRID = 4 - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',PFLXZTHVMF,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'MF_THVW_FLX' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: MF_THVW_FLX' + TZFIELD%CUNITS = 'K m s-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_MF_THVW_FLX' + TZFIELD%NGRID = 4 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,PFLXZTHVMF) + ! IF (OMIXUV) THEN ! stores the U momentum vertical flux - YRECFM ='MF_UW_FLX' - YCOMMENT='X_Y_Z_MF_UW_FLX (M2/S2)' - ILENCH = LEN(YCOMMENT) - IGRID = 4 ZWORK(:,:,:)=RESHAPE(ZFLXZUMF(:,:),(/ IIU,IJU,IKU /) ) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZWORK,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'MF_UW_FLX' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: MF_UW_FLX' + TZFIELD%CUNITS = 'm2 s-2' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_MF_UW_FLX' + TZFIELD%NGRID = 4 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZWORK) + ! ! stores the V momentum vertical flux - YRECFM ='MF_VW_FLX' - YCOMMENT='X_Y_Z_MF_VW_FLX (M2/S2)' - ILENCH = LEN(YCOMMENT) - IGRID = 4 ZWORK(:,:,:)=RESHAPE(ZFLXZVMF(:,:),(/ IIU,IJU,IKU /) ) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZWORK,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'MF_VW_FLX' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: MF_VW_FLX' + TZFIELD%CUNITS = 'm2 s-2' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_MF_VW_FLX' + TZFIELD%NGRID = 4 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZWORK) ! END IF END IF diff --git a/src/MNH/turb_cloud_index.f90 b/src/MNH/turb_cloud_index.f90 index ee8eb7952f3ea5bf263decaf9d3895527c50b65f..0d49ad7110ebd52987a9bc091fd3980c4aa2c116 100644 --- a/src/MNH/turb_cloud_index.f90 +++ b/src/MNH/turb_cloud_index.f90 @@ -37,7 +37,7 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! Jacobian * dry density of REAL, DIMENSION(:,:,:), INTENT(IN) :: PDXX,PDYY,PDZZ,PDZX,PDZY ! metric coefficients REAL, DIMENSION(:,:,:), INTENT(OUT):: PCEI ! Cloud Entrainment instability - ! index to emphasize localy + ! index to emphasize locally ! turbulent fluxes ! END SUBROUTINE TURB_CLOUD_INDEX @@ -93,7 +93,10 @@ END MODULE MODI_TURB_CLOUD_INDEX ! USE MODD_IO_ll, ONLY: TFILEDATA USE MODD_PARAMETERS, ONLY: JPVEXT +! +USE MODE_FIELD, ONLY: TFIELDDATA,TYPEREAL USE MODE_FMWRIT +! USE MODI_GRADIENT_M ! IMPLICIT NONE @@ -119,7 +122,7 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! Jacobian * dry density of REAL, DIMENSION(:,:,:), INTENT(IN) :: PDXX,PDYY,PDZZ,PDZX,PDZY ! metric coefficients REAL, DIMENSION(:,:,:), INTENT(OUT):: PCEI ! Cloud Entrainment instability - ! index to emphasize localy + ! index to emphasize locally ! turbulent fluxes ! !* 0.2 declarations of local variables @@ -143,19 +146,13 @@ INTEGER :: IKU ! array size in k INTEGER, DIMENSION(SIZE(PRM,1),SIZE(PRM,2),SIZE(PRM,3)) :: IMASK_CLOUD ! 0 except cloudy points or adjacent points (1) INTEGER :: IRESP ! Return code of FM routines -INTEGER :: IGRID ! C-grid indicator in LFIFM file -INTEGER :: ILENCH ! Length of comment string in LFIFM file -CHARACTER (LEN=28) :: YFMFILE ! Name of FM-file to write -CHARACTER (LEN=100) :: YCOMMENT ! comment string in LFIFM file -CHARACTER (LEN=16) :: YRECFM ! Name of the desired field in LFIFM file +TYPE(TFIELDDATA) :: TZFIELD ! !------------------------------------------------------------------------------- ! !* 1. INITIALISATION ! -------------- ! -YFMFILE = TPFILE%CNAME -! CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKB = 1 + JPVEXT IKU = SIZE(PRM,3) @@ -261,53 +258,93 @@ ENDDO !* 2.5 Writing ! IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN - YRECFM ='RVCI' - YCOMMENT='X_Y_Z_RVCI (kg/kg)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZRVCI,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'RVCI' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: RVCI' + TZFIELD%CUNITS = 'kg kg-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_RVCI' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZRVCI) ! - YRECFM ='GX_RVCI' - YCOMMENT='X_Y_Z_GX_RVCI (kg/kg/m)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZG_RVCI(:,:,:,1),IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'GX_RVCI' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: GX_RVCI' + TZFIELD%CUNITS = 'kg kg-1 m-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_GX_RVCI' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZG_RVCI(:,:,:,1)) ! - YRECFM ='GY_RVCI' - YCOMMENT='X_Y_Z_GY_RVCI (kg/kg/m)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZG_RVCI(:,:,:,2),IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'GY_RVCI' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: GY_RVCI' + TZFIELD%CUNITS = 'kg kg-1 m-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_GY_RVCI' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZG_RVCI(:,:,:,2)) ! - YRECFM ='GNORM_RVCI' - YCOMMENT='X_Y_Z_NORM G (kg/kg/m)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZGNORM_RVCI,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'GNORM_RVCI' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: GNORM_RVCI' + TZFIELD%CUNITS = 'kg kg-1 m-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_NORM G' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZGNORM_RVCI) ! - YRECFM ='QX_RVCI' - YCOMMENT='X_Y_Z_QX_RVCI (kg/kg/m)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZQ_RVCI(:,:,:,1),IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'QX_RVCI' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: QX_RVCI' + TZFIELD%CUNITS = 'kg kg-1 m-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_QX_RVCI' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZQ_RVCI(:,:,:,1)) ! - YRECFM ='QY_RVCI' - YCOMMENT='X_Y_Z_QY_RVCI (kg/kg/m)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZQ_RVCI(:,:,:,2),IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'QY_RVCI' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: QY_RVCI' + TZFIELD%CUNITS = 'kg kg-1 m-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_QY_RVCI' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZQ_RVCI(:,:,:,2)) ! - YRECFM ='QNORM_RVCI' - YCOMMENT='X_Y_Z_QNORM_RVCI (kg/kg/m)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZQNORM_RVCI,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'QNORM_RVCI' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: QNORM_RVCI' + TZFIELD%CUNITS = 'kg kg-1 m-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_QNORM_RVCI' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZQNORM_RVCI) ! - YRECFM ='CEI' - YCOMMENT='X_Y_Z_CEI (kg/kg/m/s)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',PCEI,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'CEI' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: CEI' + TZFIELD%CUNITS = 'kg kg-1 m-1 s-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_CEI' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,PCEI) END IF ! END SUBROUTINE TURB_CLOUD_INDEX diff --git a/src/MNH/turb_hor_sv_flux.f90 b/src/MNH/turb_hor_sv_flux.f90 index 0ff2ace66e5ee05226f38c77439a52d04ca084a2..261b3da0a8d52d02cc5b975b82b13ae1937a5510 100644 --- a/src/MNH/turb_hor_sv_flux.f90 +++ b/src/MNH/turb_hor_sv_flux.f90 @@ -126,7 +126,9 @@ USE MODD_PARAMETERS USE MODD_NSV, ONLY : NSV_LGBEG,NSV_LGEND USE MODD_LES ! +USE MODE_FIELD, ONLY: TFIELDDATA,TYPEREAL USE MODE_FMWRIT +! USE MODI_GRADIENT_M USE MODI_GRADIENT_U USE MODI_GRADIENT_V @@ -184,29 +186,23 @@ REAL, DIMENSION(SIZE(PSVM,1),SIZE(PSVM,2),SIZE(PSVM,3)) & REAL, DIMENSION(SIZE(PSVM,1),SIZE(PSVM,2),1) :: ZWORK2D ! INTEGER :: IRESP ! Return code of FM routines -INTEGER :: IGRID ! C-grid indicator in LFIFM file -INTEGER :: ILENCH ! Length of comment string in LFIFM file INTEGER :: IKB,IKE ! Index values for the Beginning and End ! mass points of the domain INTEGER :: JSV ! loop counter INTEGER :: ISV ! number of scalar var. -CHARACTER (LEN=28) :: YFMFILE ! Name of FM-file to write -CHARACTER (LEN=100) :: YCOMMENT ! comment string in LFIFM file -CHARACTER (LEN=16) :: YRECFM ! Name of the desired field in LFIFM file REAL, DIMENSION(SIZE(PDZZ,1),SIZE(PDZZ,2),1+JPVEXT:3+JPVEXT) :: ZCOEFF ! coefficients for the uncentred gradient ! computation near the ground ! INTEGER :: IKU +TYPE(TFIELDDATA) :: TZFIELD REAL :: ZTIME1, ZTIME2 ! --------------------------------------------------------------------------- ! !* 1. PRELIMINARY COMPUTATIONS ! ------------------------ ! -YFMFILE = TPFILE%CNAME -! IKB = 1+JPVEXT IKE = SIZE(PSVM,3)-JPVEXT IKU = SIZE(PSVM,3) @@ -256,11 +252,16 @@ DO JSV=1,ISV ! ! stores <U SVth> IF ( OCLOSE_OUT .AND. OTURB_FLX ) THEN - WRITE(YRECFM,'("USV_FLX_",I3.3)') JSV - YCOMMENT='X_Y_Z_'//YRECFM//' (SVUNIT*M/S)' - IGRID = 2 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZFLXX,IGRID,ILENCH,YCOMMENT,IRESP) + WRITE(TZFIELD%CMNHNAME,'("USV_FLX_",I3.3)') JSV + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'SVUNIT m s-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME) + TZFIELD%NGRID = 2 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZFLXX) END IF ! IF (LLES_CALL .AND. KSPLT==1) THEN @@ -301,11 +302,16 @@ DO JSV=1,ISV ! ! stores <V SVth> IF ( OCLOSE_OUT .AND. OTURB_FLX ) THEN - WRITE(YRECFM,'("VSV_FLX_",I3.3)') JSV - YCOMMENT='X_Y_Z_'//YRECFM//' (SVUNIT*M/S)' - IGRID = 3 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,HLUOUT,'XY',ZFLXY,IGRID,ILENCH,YCOMMENT,IRESP) + WRITE(TZFIELD%CMNHNAME,'("VSV_FLX_",I3.3)') JSV + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'SVUNIT m s-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME) + TZFIELD%NGRID = 3 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,HLUOUT,IRESP,ZFLXY) END IF ! ELSE diff --git a/src/MNH/ver_thermo.f90 b/src/MNH/ver_thermo.f90 index 80b01052c524afe3270284fc9200502cad93a298..c2b758fe473f7174eaeb93caf73418bfc55e02c1 100644 --- a/src/MNH/ver_thermo.f90 +++ b/src/MNH/ver_thermo.f90 @@ -180,6 +180,7 @@ USE MODD_LUNIT_n USE MODD_PARAMETERS ! ! +USE MODE_FIELD, ONLY: TFIELDDATA,TYPEREAL USE MODE_FMWRIT USE MODE_FM USE MODD_DIM_n @@ -229,9 +230,6 @@ REAL, DIMENSION(SIZE(PJ,1),SIZE(PJ,2),SIZE(PJ,3)):: ZTHV REAL,DIMENSION(SIZE(PJ,1),SIZE(PJ,2),SIZE(PJ,3)) :: ZHEXNFLUX,ZHEXNMASS,ZPMHP REAL,DIMENSION(SIZE(PJ,1),SIZE(PJ,2),SIZE(PJ,3)) :: ZRHOD,ZSUMRT ! -CHARACTER(LEN=100) :: YCOMMENT -INTEGER :: ILENCH ! ILENCH : length of comment string -CHARACTER(LEN=16) :: YRECFM INTEGER :: IINFO_ll TYPE(LIST_ll), POINTER :: TZFIELDS_ll => NULL() ! list of fields to exchange ! @@ -239,6 +237,7 @@ INTEGER :: IISIZEXF,IJSIZEXF,IISIZEXFU,IJSIZEXFU ! dimensions of the INTEGER :: IISIZEX4,IJSIZEX4,IISIZEX2,IJSIZEX2 ! West-east LB arrays INTEGER :: IISIZEYF,IJSIZEYF,IISIZEYFV,IJSIZEYFV ! dimensions of the INTEGER :: IISIZEY4,IJSIZEY4,IISIZEY2,IJSIZEY2 ! North-south LB arrays +TYPE(TFIELDDATA) :: TZFIELD !------------------------------------------------------------------------------- ! @@ -306,10 +305,16 @@ DO JRR=1,SIZE(XRT,4) END DO ! IF (NVERB>=10) THEN - YRECFM='THV' - YCOMMENT='X_Y_Z_THV (K)' - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(CINIFILE,YRECFM,CLUOUT0,'XY',ZTHV(:,:,:),4,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'THV' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: THV' + TZFIELD%CUNITS = 'K' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_THV' + TZFIELD%NGRID = 4 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT0,IRESP,ZTHV) END IF !------------------------------------------------------------------------------- ! diff --git a/src/MNH/write_lbn.f90 b/src/MNH/write_lbn.f90 index f5a76edcfb87862cc4c9e6a70b9e5b163452fc4a..8d98c2183394171e8ed386be7b171dcca0374588 100644 --- a/src/MNH/write_lbn.f90 +++ b/src/MNH/write_lbn.f90 @@ -302,23 +302,34 @@ IF (NSV >=1) THEN & IGRID,ILENCH,YCOMMENT,IRESP) END IF END DO - DO JSV = NSV_C2R2BEG,NSV_C2R2END - IF(NSIZELBXSV_ll /= 0) THEN - YRECFM='LBX_'//TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1)) - WRITE(YCOMMENT,'(A6,A6,I3.3,A8)')'2_Y_Z_','LBXSVM',JSV,' (/M3)' - ILENCH=LEN(YCOMMENT) - CALL FMWRIT_LB(YFMFILE,YRECFM,CLUOUT,"LBX",XLBXSVM(:,:,:,JSV),IRIMX,NSIZELBXSV_ll,& - & IGRID,ILENCH,YCOMMENT,IRESP) - END IF -! - IF(NSIZELBYSV_ll /= 0) THEN - YRECFM='LBY_'//TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1)) - WRITE(YCOMMENT,'(A6,A6,I3.3,A8)')'X_2_Z_','LBYSVM',JSV,' (/M3)' - ILENCH=LEN(YCOMMENT) - CALL FMWRIT_LB(YFMFILE,YRECFM,CLUOUT,"LBY",XLBYSVM(:,:,:,JSV),IRIMY,NSIZELBYSV_ll,& - & IGRID,ILENCH,YCOMMENT,IRESP) - END IF - END DO + ! + IF (NSV_C2R2END>=NSV_C2R2BEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'm-3' + TZFIELD%CDIR = '--' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_C2R2BEG,NSV_C2R2END + IF(NSIZELBXSV_ll /= 0) THEN + TZFIELD%CLBTYPE = 'LBX' + TZFIELD%CMNHNAME = 'LBX_'//TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1)) + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + 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 + TZFIELD%CLBTYPE = 'LBY' + TZFIELD%CMNHNAME = 'LBY_'//TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1)) + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + 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 + END IF + ! DO JSV = NSV_C1R3BEG,NSV_C1R3END IF(NSIZELBXSV_ll /= 0) THEN YRECFM='LBX_'//TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1)) @@ -645,7 +656,7 @@ IF (NSV >=1) THEN TZFIELD%CMNHNAME = 'LBX_'//TRIM(CDUSTNAMES(JSV-NSV_DSTBEG+1)) TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) TZFIELD%CLBTYPE = 'LBX' - WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3,A8)')'2_Y_Z_','LBXSVM',JSV + 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 ! @@ -653,7 +664,7 @@ IF (NSV >=1) THEN TZFIELD%CMNHNAME = 'LBY_'//TRIM(CDUSTNAMES(JSV-NSV_DSTBEG+1)) TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) TZFIELD%CLBTYPE = 'LBY' - WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3,A8)')'X_2_Z_','LBYSVM',JSV + 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 @@ -834,20 +845,27 @@ IF (NSV >=1) THEN END DO ! passive pollutants DO JSV = NSV_PPBEG,NSV_PPEND + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'kg kg-1' + TZFIELD%CDIR = '--' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! IF(NSIZELBXSV_ll /= 0) THEN - YRECFM = 'LBX_PP' - 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_PP' + 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_PP' - 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_PP' + 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_lfin.f90 b/src/MNH/write_lfin.f90 index 3a50f97a1d43fb3a16e87aea385221f1dc195a6c..87e61abbfa21c03673b6ca98a2fe7894a09c88e4 100644 --- a/src/MNH/write_lfin.f90 +++ b/src/MNH/write_lfin.f90 @@ -671,14 +671,22 @@ IF (NSV >=1) THEN JSA=JSA+1 END DO ! microphysical C2R2 scheme scalar variables - DO JSV = NSV_C2R2BEG,NSV_C2R2END - YRECFM=TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))//'T' - WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (/M3)' - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH, & - YCOMMENT,IRESP) - JSA=JSA+1 - END DO + IF (NSV_C2R2END>=NSV_C2R2BEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'm-3' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_C2R2BEG,NSV_C2R2END + TZFIELD%CMNHNAME = TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))//'T' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XSVT(:,:,:,JSV)) + JSA=JSA+1 + END DO + END IF ! microphysical C3R5 scheme additional scalar variables DO JSV = NSV_C1R3BEG,NSV_C1R3END YRECFM=TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))//'T' @@ -691,12 +699,14 @@ IF (NSV >=1) THEN ! ! microphysical LIMA variables ! - TZFIELD%CSTDNAME = '' - TZFIELD%CUNITS = 'kg-1' - TZFIELD%CDIR = 'XY' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 + IF (NSV_LIMA_END>=NSV_LIMA_BEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'kg-1' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + END IF ! DO JSV = NSV_LIMA_BEG,NSV_LIMA_END ! @@ -918,41 +928,29 @@ IF (NSV >=1) THEN END DO ! Passive scalar variables IF (LPASPOL) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'kg kg-1' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! DO JSV = NSV_PPBEG,NSV_PPEND - WRITE(YRECFM,'(A3,I3.3)')'SVT',JSV - WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (KG/KG)' - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH, & - YCOMMENT,IRESP) + WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CCOMMENT = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME) + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,XSVT(:,:,:,JSV)) JSA=JSA+1 END DO END IF ! IF ( ((CCLOUD == 'KHKO') .OR.(CCLOUD == 'C2R2')) .AND. (.NOT. LSUPSAT)) THEN - YRECFM= 'SUPSATMAX' - YCOMMENT='X_Y_Z_Supersaturation' - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XSUPSAT(:,:,:),IGRID,ILENCH, & - YCOMMENT,IRESP) -! - YRECFM= 'NACT' - YCOMMENT='X_Y_Z_Nact' - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XNACT(:,:,:),IGRID,ILENCH, & - YCOMMENT,IRESP) + CALL IO_WRITE_FIELD(TPFILE,'SUPSATMAX',CLUOUT,IRESP,XSUPSAT(:,:,:)) + CALL IO_WRITE_FIELD(TPFILE,'NACT', CLUOUT,IRESP,XNACT(:,:,:)) END IF IF ( ((CCLOUD == 'KHKO') .OR.(CCLOUD == 'C2R2')) .AND. LSUPSAT) THEN - YRECFM= 'SSPRO' - YCOMMENT='X_Y_Z_Supersaturation' - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XSSPRO(:,:,:),IGRID,ILENCH, & - YCOMMENT,IRESP) -! - YRECFM= 'NPRO' - YCOMMENT='X_Y_Z_Nact' - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XNPRO(:,:,:),IGRID,ILENCH, & - YCOMMENT,IRESP) + CALL IO_WRITE_FIELD(TPFILE,'SSPRO',CLUOUT,IRESP,XSSPRO(:,:,:)) + CALL IO_WRITE_FIELD(TPFILE,'NPRO', CLUOUT,IRESP,XNPRO(:,:,:)) END IF ! #ifdef MNH_FOREFIRE