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