From 8247c372ab165fa59d52603e8b97eee82c0837f5 Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Fri, 7 Apr 2017 15:21:56 +0200 Subject: [PATCH] Philippe 07/04/2017: added new fields to TFIELDLIST + use IO_WRITE_FIELD for several fields (chosen form testcase 011_KW78CHEM) --- src/LIB/SURCOUCHE/src/mode_field.f90 | 37 +++++++++++++++++ src/MNH/modd_ch_phn.f90 | 12 +++--- src/MNH/write_lbn.f90 | 20 +++++----- src/MNH/write_lfin.f90 | 60 ++++++++++++++-------------- 4 files changed, 84 insertions(+), 45 deletions(-) diff --git a/src/LIB/SURCOUCHE/src/mode_field.f90 b/src/LIB/SURCOUCHE/src/mode_field.f90 index f485d1f13..4eabb17f7 100644 --- a/src/LIB/SURCOUCHE/src/mode_field.f90 +++ b/src/LIB/SURCOUCHE/src/mode_field.f90 @@ -1150,6 +1150,32 @@ 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' +TFIELDLIST(IDX)%CUNITS = '1' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'pH in cloud' +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 = 'PHR' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: PHR' +TFIELDLIST(IDX)%CUNITS = '1' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'pH in rain' +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 = 'LSUM' TFIELDLIST(IDX)%CSTDNAME = '' TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: LSUM' @@ -2583,6 +2609,7 @@ USE MODD_GRID_n USE MODD_LSFIELD_n USE MODD_PARAM_n USE MODD_PAST_FIELD_n +USE MODD_CH_PH_n USE MODD_PRECIP_n USE MODD_RADIATIONS_n USE MODD_REF_n @@ -2723,6 +2750,11 @@ CALL FIND_FIELD_ID_FROM_MNHNAME('DUM',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFR CALL FIND_FIELD_ID_FROM_MNHNAME('DVM',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XDVM CALL FIND_FIELD_ID_FROM_MNHNAME('DWM',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XDWM ! +! MODD_CH_PH_n variables +! +CALL FIND_FIELD_ID_FROM_MNHNAME('PHC',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XPHC +CALL FIND_FIELD_ID_FROM_MNHNAME('PHR',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XPHR +! ! MODD_LSFIELD_n variables ! CALL FIND_FIELD_ID_FROM_MNHNAME('LSUM', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XLSUM @@ -2953,6 +2985,11 @@ CALL FIND_FIELD_ID_FROM_MNHNAME('DUM',IID,IRESP); XDUM => TFIELDLIST(IID)%TFIELD CALL FIND_FIELD_ID_FROM_MNHNAME('DVM',IID,IRESP); XDVM => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA CALL FIND_FIELD_ID_FROM_MNHNAME('DWM',IID,IRESP); XDWM => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA ! +! MODD_CH_PH_n variables +! +CALL FIND_FIELD_ID_FROM_MNHNAME('PHC',IID,IRESP); XPHC => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA +CALL FIND_FIELD_ID_FROM_MNHNAME('PHR',IID,IRESP); XPHR => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA +! ! MODD_LSFIELD_n variables ! CALL FIND_FIELD_ID_FROM_MNHNAME('LSUM', IID,IRESP); XLSUM => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA diff --git a/src/MNH/modd_ch_phn.f90 b/src/MNH/modd_ch_phn.f90 index f02801756..a120f5478 100644 --- a/src/MNH/modd_ch_phn.f90 +++ b/src/MNH/modd_ch_phn.f90 @@ -44,8 +44,8 @@ IMPLICIT NONE TYPE CH_PH_t ! - REAL, POINTER, DIMENSION(:,:,:) :: XPHC ! cloud - REAL, POINTER, DIMENSION(:,:,:) :: XPHR ! rain +! REAL, POINTER, DIMENSION(:,:,:) :: XPHC ! cloud +! REAL, POINTER, DIMENSION(:,:,:) :: XPHR ! rain REAL, POINTER, DIMENSION(:,:,:) :: XACPRAQ ! sum of aqueous chemical species fall at the surface by rain ! in moles i / m2 (ratio with XACPRR for concentration REAL, POINTER, DIMENSION(:,:) :: XACPHR ! mean PH in accumulated surface rain @@ -66,14 +66,14 @@ SUBROUTINE CH_PH_GOTO_MODEL(KFROM, KTO) INTEGER, INTENT(IN) :: KFROM, KTO ! ! Save current state for allocated arrays -CH_PH_MODEL(KFROM)%XPHC=>XPHC -CH_PH_MODEL(KFROM)%XPHR=>XPHR +!CH_PH_MODEL(KFROM)%XPHC=>XPHC !Done in FIELDLIST_GOTO_MODEL +!CH_PH_MODEL(KFROM)%XPHR=>XPHR !Done in FIELDLIST_GOTO_MODEL CH_PH_MODEL(KFROM)%XACPHR=>XACPHR CH_PH_MODEL(KFROM)%XACPRAQ=>XACPRAQ ! ! Current model is set to model KTO -XPHC=>CH_PH_MODEL(KTO)%XPHC -XPHR=>CH_PH_MODEL(KTO)%XPHR +!XPHC=>CH_PH_MODEL(KTO)%XPHC !Done in FIELDLIST_GOTO_MODEL +!XPHR=>CH_PH_MODEL(KTO)%XPHR !Done in FIELDLIST_GOTO_MODEL XACPHR=>CH_PH_MODEL(KTO)%XACPHR XACPRAQ=>CH_PH_MODEL(KTO)%XACPRAQ diff --git a/src/MNH/write_lbn.f90 b/src/MNH/write_lbn.f90 index 1bc762938..a589610a9 100644 --- a/src/MNH/write_lbn.f90 +++ b/src/MNH/write_lbn.f90 @@ -490,19 +490,19 @@ IF (NSV >=1) THEN ! DO JSV = NSV_CHICBEG,NSV_CHICEND IF(NSIZELBXSV_ll /= 0) THEN - YRECFM = 'LBX_'//TRIM(UPCASE(CICNAMES(JSV-NSV_CHICBEG+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(CICNAMES(JSV-NSV_CHICBEG+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(CICNAMES(JSV-NSV_CHICBEG+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(CICNAMES(JSV-NSV_CHICBEG+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_lfin.f90 b/src/MNH/write_lfin.f90 index 524fdaaa7..b706ce9d4 100644 --- a/src/MNH/write_lfin.f90 +++ b/src/MNH/write_lfin.f90 @@ -1020,48 +1020,50 @@ IF (NSV >=1) THEN ! IF (LUSECHIC) THEN DO JSV = NSV_CHICBEG,NSV_CHICEND - YRECFM=TRIM(UPCASE(CICNAMES(JSV-NSV_CHICBEG+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 M + TZFIELD%CMNHNAME = TRIM(UPCASE(CICNAMES(JSV-NSV_CHICBEG+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 M END DO ENDIF IF (LUSECHAQ.AND.NRR>=3) THEN ! accumulated moles of aqueous species that fall at the surface (mol i/m2) - DO JSV = NSV_CHACBEG+NSV_CHAC/2,NSV_CHACEND - YRECFM='ACPR_'//TRIM(UPCASE(CNAMES(JSV-NSV_CHEMBEG+1))) - ZWORK2D(:,:) = XACPRAQ(:,:,JSV-NSV_CHACBEG-NSV_CHAC/2+1) - YCOMMENT = 'X_Y_Accumulated moles of aqueous species at the surface (mol i/m2)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZWORK2D,IGRID,ILENCH,YCOMMENT,IRESP) - END DO + TZFIELD%NDIMS = 2 + DO JSV = NSV_CHACBEG+NSV_CHAC/2,NSV_CHACEND + TZFIELD%CMNHNAME = 'ACPR_'//TRIM(UPCASE(CNAMES(JSV-NSV_CHEMBEG+1))) + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'mol i m-2' + TZFIELD%CCOMMENT = 'X_Y_Accumulated moles of aqueous species at the surface' + ZWORK2D(:,:) = XACPRAQ(:,:,JSV-NSV_CHACBEG-NSV_CHAC/2+1) + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK2D) + END DO + TZFIELD%NDIMS = 3 END IF IF (LUSECHAQ.AND.LCH_PH) THEN ! pH values in cloud - YRECFM = 'PHC' - YCOMMENT='X_Y_Z_PHC' - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XPHC,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_WRITE_FIELD(TPFILE,'PHC',CLUOUT,IRESP,XPHC) IF (NRR>=3) THEN - YRECFM = 'PHR' - YCOMMENT='X_Y_Z_PHR' - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XPHR,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_WRITE_FIELD(TPFILE,'PHR',CLUOUT,IRESP,XPHR) ! compute mean pH in accumulated surface water !ZWORK2D(:,:) = 10**(-XCH_PHINIT) WHERE (XACPRR > 0.) - ZWORK2D(:,:) = XACPHR(:,:) *1E3 / XACPRR(:,:) ! moles of H+ / l of water + ZWORK2D(:,:) = XACPHR(:,:) *1E3 / XACPRR(:,:) ! moles of H+ / l of water ELSE WHERE - ZWORK2D(:,:) = XUNDEF + ZWORK2D(:,:) = XUNDEF END WHERE WHERE ((ZWORK2D(:,:) < 1E-1).AND.(ZWORK2D(:,:) > 1E-14)) - ZWORK2D(:,:) = -ALOG10(ZWORK2D(:,:)) ! mean pH of surface water + ZWORK2D(:,:) = -LOG10(ZWORK2D(:,:)) ! mean pH of surface water END WHERE - YRECFM = 'MEANPHR' - YCOMMENT='X_Y_MEAN_PH' - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZWORK2D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'MEANPHR' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: MEANPHR' + TZFIELD%CUNITS = '1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_MEAN_PH' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 2 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZWORK2D) ENDIF ENDIF ELSE IF (LCH_CONV_LINOX) THEN -- GitLab