From 4984995a2448aa59ed053957e7de9e1b2caa10e8 Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Thu, 3 May 2018 09:27:46 +0200 Subject: [PATCH] Philippe 03/05/2018: IO: improve/correct some field data (snow + FRC) --- src/MNH/read_field.f90 | 4 +- src/MNH/write_lfifm1_for_diag.f90 | 95 +++++++++++++++++++------------ src/MNH/write_lfin.f90 | 87 +++++++++++++--------------- 3 files changed, 98 insertions(+), 88 deletions(-) diff --git a/src/MNH/read_field.f90 b/src/MNH/read_field.f90 index 12e8b2194..8551cd5f2 100644 --- a/src/MNH/read_field.f90 +++ b/src/MNH/read_field.f90 @@ -1077,7 +1077,7 @@ END IF ! IF (NSV_SNWEND>=NSV_SNWBEG) THEN TZFIELD%CSTDNAME = '' - TZFIELD%CUNITS = 'kg/kg' + TZFIELD%CUNITS = 'kg kg-1' TZFIELD%CDIR = 'XY' TZFIELD%NGRID = 1 TZFIELD%NTYPE = TYPEREAL @@ -1097,7 +1097,7 @@ IF (NSV_SNWEND>=NSV_SNWBEG) THEN END IF IF (NSV_SNW>=1) THEN TZFIELD%CSTDNAME = '' - TZFIELD%CUNITS = 'kg/kg' + TZFIELD%CUNITS = 'kg kg-1' TZFIELD%CDIR = 'XY' TZFIELD%NGRID = 1 TZFIELD%NTYPE = TYPEREAL diff --git a/src/MNH/write_lfifm1_for_diag.f90 b/src/MNH/write_lfifm1_for_diag.f90 index 58f88436d..813765c59 100644 --- a/src/MNH/write_lfifm1_for_diag.f90 +++ b/src/MNH/write_lfifm1_for_diag.f90 @@ -1302,92 +1302,114 @@ END IF ! Blowing snow variables ! IF(LBLOWSNOW) THEN + TZFIELD%CMNHNAME = 'SNWSUBL3D' TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'kg m-3 s-1' TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_INstantaneous 3D Drifting snow sublimation flux' TZFIELD%NGRID = 1 TZFIELD%NTYPE = TYPEREAL TZFIELD%NDIMS = 3 TZFIELD%LTIMEDEP = .TRUE. - ! - TZFIELD%CUNITS = 'KG/M3/S' - TZFIELD%CMNHNAME = 'SNWSUBL3D' - TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME) - TZFIELD%CCOMMENT = 'X_Y_INstantaneous 3D Drifting snow sublimation flux (KG/M3/S)' CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSNWSUBL3D(:,:,:)) -! + ! ZWORK21(:,:) = 0. DO JK = IKB,IKE ZWORK21(:,:) = ZWORK21(:,:)+XSNWSUBL3D(:,:,JK) * & (XZZ(:,:,JK+1)-XZZ(:,:,JK))/XRHOLW*3600*24 END DO ZWORK21(:,:) = ZWORK21(:,:)*1000. ! vapor water in mm unit - TZFIELD%CUNITS = 'mmSWE/day' + ! TZFIELD%CMNHNAME = 'COL_SNWSUBL' + TZFIELD%CSTDNAME = '' TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME) - TZFIELD%NDIMS = 2 + TZFIELD%CUNITS = 'mm day-1' + TZFIELD%CDIR = 'XY' TZFIELD%CCOMMENT = 'X_Y_Column Sublimation Rate (mmSWE/day)' + TZFIELD%NGRID = 4 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 2 + TZFIELD%LTIMEDEP = .TRUE. CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21(:,:)) -! + ! IF(.NOT.ALLOCATED(ZBET_SNW)) & ALLOCATE(ZBET_SNW(SIZE(XSVT,1), SIZE(XSVT,2), SIZE(XSVT,3))) IF(.NOT.ALLOCATED(ZRG_SNW)) & ALLOCATE(ZRG_SNW(SIZE(XSVT,1), SIZE(XSVT,2), SIZE(XSVT,3))) IF(.NOT.ALLOCATED(ZMA_SNW)) & ALLOCATE(ZMA_SNW(SIZE(XSVT,1), SIZE(XSVT,2), SIZE(XSVT,3),NBLOWSNOW3D)) -! - CALL PPP2SNOW(XSVT(:,:,:,NSV_SNWBEG:NSV_SNWEND),XRHODREF,& + ! + CALL PPP2SNOW(XSVT(:,:,:,NSV_SNWBEG:NSV_SNWEND),XRHODREF,& PBET3D=ZBET_SNW, PRG3D=ZRG_SNW, PM3D=ZMA_SNW) -! - - TZFIELD%CUNITS = 'm' + ! TZFIELD%CMNHNAME = 'SNWRGA' + TZFIELD%CSTDNAME = '' TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME) - TZFIELD%CCOMMENT = 'RG (mean) SNOW (m)' + TZFIELD%CUNITS = 'm' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'RG (mean) SNOW' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL TZFIELD%NDIMS = 3 + TZFIELD%LTIMEDEP = .TRUE. CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZRG_SNW(:,:,:)) - - - TZFIELD%CUNITS = 'm' + ! TZFIELD%CMNHNAME = 'SNWBETA' + TZFIELD%CSTDNAME = '' TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME) - TZFIELD%CCOMMENT = 'BETA SNOW (m)' + TZFIELD%CUNITS = 'm' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'BETA SNOW' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL TZFIELD%NDIMS = 3 + TZFIELD%LTIMEDEP = .TRUE. CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZBET_SNW(:,:,:)) - - TZFIELD%CUNITS = '#/m3' + ! TZFIELD%CMNHNAME = 'SNWNOA' + TZFIELD%CSTDNAME = '' TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'm-3' + TZFIELD%CDIR = 'XY' TZFIELD%CCOMMENT = 'NUM CONC SNOW (#/m3)' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL TZFIELD%NDIMS = 3 + TZFIELD%LTIMEDEP = .TRUE. CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZMA_SNW(:,:,:,1)) - - TZFIELD%CUNITS = 'kg/m3' + ! TZFIELD%CMNHNAME = 'SNWMASS' + TZFIELD%CSTDNAME = '' TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME) - TZFIELD%CCOMMENT = 'MASS CONC SNOW (kg/m3)' + TZFIELD%CUNITS = 'kg m-3' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'MASS CONC SNOW' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL TZFIELD%NDIMS = 3 + TZFIELD%LTIMEDEP = .TRUE. CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZMA_SNW(:,:,:,2)) - + ! ZWORK21(:,:) = 0. DO JK = IKB,IKE ZWORK21(:,:) = ZWORK21(:,:)+ZMA_SNW(:,:,JK,2) * & (XZZ(:,:,JK+1)-XZZ(:,:,JK))/XRHOLW END DO ZWORK21(:,:) = ZWORK21(:,:)*1000. ! vapor water in mm unit + TZFIELD%CMNHNAME = 'THDS' TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'mm' TZFIELD%CDIR = 'XY' - TZFIELD%NGRID = 1 + TZFIELD%CCOMMENT = 'X_Y_THickness of Drifting Snow (mm SWE)' + TZFIELD%NGRID = 4 TZFIELD%NTYPE = TYPEREAL TZFIELD%NDIMS = 2 TZFIELD%LTIMEDEP = .TRUE. - TZFIELD%CUNITS = 'MM SWE' - TZFIELD%CMNHNAME = 'THDS' - TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME) - TZFIELD%CCOMMENT = 'X_Y_THickness of Drifting Snow (MM SWE)' CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21(:,:)) - - END IF +! ! Lagrangian variables IF (LTRAJ) THEN TZFIELD%CSTDNAME = '' @@ -2925,19 +2947,18 @@ END IF IF(LWIND_CONTRAV) THEN!$ CALL CONTRAV ((/"TEST","TEST"/),(/"TEST","TEST"/),XUT,XVT,XWT,XDXX,XDYY,XDZZ,XDZX,XDZY, & ZWORK31,ZWORK32,ZWORK33,2) - + ! TZFIELD%CMNHNAME = 'WNORM' TZFIELD%CSTDNAME = '' TZFIELD%CLONGNAME = 'WNORM' - TZFIELD%CUNITS = 'm/s' + TZFIELD%CUNITS = 'm s-1' TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Z_W surface normal wind (m/s)' - TZFIELD%NGRID = 2 + TZFIELD%CCOMMENT = 'X_Y_Z_W surface normal wind' + TZFIELD%NGRID = 4 TZFIELD%NTYPE = TYPEREAL TZFIELD%NDIMS = 3 TZFIELD%LTIMEDEP = .TRUE. CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK33) - END IF !------------------------------------------------------------------------------- ! diff --git a/src/MNH/write_lfin.f90 b/src/MNH/write_lfin.f90 index 3918143c9..3056e0260 100644 --- a/src/MNH/write_lfin.f90 +++ b/src/MNH/write_lfin.f90 @@ -963,7 +963,7 @@ IF (NSV >=1) THEN DO JSV = NSV_SNWBEG,NSV_SNWEND TZFIELD%CMNHNAME=TRIM(CSNOWNAMES(JSV-NSV_SNWBEG+1))//'T' TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME) - WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (KG/KG)' + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV)) JSA=JSA+1 END DO @@ -977,7 +977,7 @@ IF (NSV >=1) THEN DO JSV = 1,(NSV_SNW) WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SNOWCANO_M',JSV TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME) - WRITE(TZFIELD%CCOMMENT,'(A6,A8,I3.3,A8)')'X_Y_Z_','SNOWCANO',JSV,' (KG/KG)' + WRITE(TZFIELD%CCOMMENT,'(A6,A8,I3.3)')'X_Y_Z_','SNOWCANO',JSV CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSNWCANO(:,:,JSV)) JSA=JSA+1 END DO @@ -1762,60 +1762,49 @@ IF (CPROGRAM /= 'IDEAL') THEN END IF ! END IF - - IF(LBLOWSNOW) THEN - IF (ASSOCIATED(XSNWSUBL3D)) THEN - IF (SIZE(XSNWSUBL3D) /= 0 ) THEN - - TZFIELD%CMNHNAME = 'SNWSUBL3D' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'SNWSUBL3D' - TZFIELD%CUNITS = 'KG/M3/S' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_INstantaneous 3D Drifting snow sublimation flux (KG/M3/S)' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSNWSUBL3D(:,:,:)) - ZWORK2D(:,:) = 0. - DO JK = IKB,IKE - ZWORK2D(:,:) = ZWORK2D(:,:)+XSNWSUBL3D(:,:,JK) * & - (XZZ(:,:,JK+1)-XZZ(:,:,JK))/XRHOLW*3600*24 - END DO - ZWORK2D(:,:) = ZWORK2D(:,:)*1000. ! vapor water in mm unit - - TZFIELD%CMNHNAME = 'COL_SNWSUBL' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'COL_SNWSUBL' - TZFIELD%CUNITS = 'mmSWE/day' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = 'X_Y_Column Sublimation Rate (mmSWE/day)' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 2 - TZFIELD%LTIMEDEP = .TRUE. - CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK2D(:,:)) - END IF +! +IF(LBLOWSNOW) THEN + IF (ASSOCIATED(XSNWSUBL3D)) THEN + IF (SIZE(XSNWSUBL3D) /= 0 ) THEN + TZFIELD%CMNHNAME = 'SNWSUBL3D' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'kg m-3 s-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_INstantaneous 3D Drifting snow sublimation flux' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + TZFIELD%LTIMEDEP = .TRUE. + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSNWSUBL3D(:,:,:)) + ZWORK2D(:,:) = 0. + DO JK = IKB,IKE + ZWORK2D(:,:) = ZWORK2D(:,:)+XSNWSUBL3D(:,:,JK) * & + (XZZ(:,:,JK+1)-XZZ(:,:,JK))/XRHOLW*3600*24 + END DO + ZWORK2D(:,:) = ZWORK2D(:,:)*1000. ! vapor water in mm unit + ! + TZFIELD%CMNHNAME = 'COL_SNWSUBL' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'mm day-1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Column Sublimation Rate (mmSWE/day)' + TZFIELD%NGRID = 4 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 2 + TZFIELD%LTIMEDEP = .TRUE. + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK2D(:,:)) END IF - ENDIF + END IF +ENDIF ! !* 1.11 Forcing variables ! ! IF (LFORCING) THEN ! - TZFIELD%CMNHNAME = 'FRC' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'FRC' - TZFIELD%CUNITS = '1' - TZFIELD%CDIR = '--' - TZFIELD%CCOMMENT = 'Number of forcing profiles' - TZFIELD%NGRID = 0 - TZFIELD%NTYPE = TYPEINT - TZFIELD%NDIMS = 0 - TZFIELD%LTIMEDEP = .FALSE. - CALL IO_WRITE_FIELD(TPFILE,TZFIELD,NFRC) + CALL IO_WRITE_FIELD(TPFILE,'FRC',NFRC) ! DO JT=1,NFRC ! -- GitLab