From a1e246df7df5bcb3b884a5a326894a7b7afa1df4 Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Fri, 3 Feb 2023 10:24:09 +0100
Subject: [PATCH] Philippe 03/02/2023: bugfix: correct ndimlist

---
 src/MNH/write_lfifm1_for_diag.f90 |  50 ++++++++-----
 src/MNH/write_lfin.f90            | 112 +++++++++++++++++++++---------
 2 files changed, 111 insertions(+), 51 deletions(-)

diff --git a/src/MNH/write_lfifm1_for_diag.f90 b/src/MNH/write_lfifm1_for_diag.f90
index 3b14e62c4..a6099e6a0 100644
--- a/src/MNH/write_lfifm1_for_diag.f90
+++ b/src/MNH/write_lfifm1_for_diag.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2022 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2023 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -323,7 +323,7 @@ INTEGER :: ILUOUT0 ! Logical unit number for output-listing
 CHARACTER(LEN=2)  :: INDICE
 CHARACTER(LEN=100) :: YMSG
 INTEGER           :: IID
-TYPE(TFIELDMETADATA)               :: TZFIELD
+TYPE(TFIELDMETADATA)               :: TZFIELD, TZFIELD2D
 TYPE(TFIELDMETADATA), DIMENSION(2) :: TZFIELD2
 !
 ! LIMA LIDAR
@@ -1513,6 +1513,15 @@ IF (LDUST) THEN
     NDIMS      = 3,                        &
     LTIMEDEP   = .TRUE.                    )
 
+  TZFIELD2D = TFIELDMETADATA(              &
+    CMNHNAME   = 'generic for dust modes', &
+    CSTDNAME   = '',                       &
+    CDIR       = 'XY',                     &
+    NGRID      = 1,                        &
+    NTYPE      = TYPEREAL,                 &
+    NDIMS      = 2,                        &
+    LTIMEDEP   = .TRUE.                    )
+
   DO JJ=1,NMODE_DST
     WRITE(TZFIELD%CMNHNAME,'(A6,I1)')'DSTRGA',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
@@ -1553,6 +1562,7 @@ IF (LDUST) THEN
       ZWORK31(:,:,JK) = ZWORK31(:,:,JK) *(XZZ(:,:,JK+1)-XZZ(:,:,JK))      &
                        *1.d-6 ! Convert to ug/m2-->g/m2 in each layer
     END DO
+    !
     DO JK=IKB,IKE
       DO JT=IJB,IJE
         DO JI=IIB,IIE
@@ -1560,14 +1570,11 @@ IF (LDUST) THEN
         ENDDO
       ENDDO
     ENDDO
-    WRITE(TZFIELD%CMNHNAME,'(A7,I1)')'DSTBRDN',JJ
-    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    TZFIELD%CUNITS     = 'g m-2'
-    WRITE(TZFIELD%CCOMMENT,'(A6,I1)')'BURDEN',JJ
-    TZFIELD%NDIMS      = 2
-    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
-    !
-    TZFIELD%NDIMS      = 3
+    WRITE(TZFIELD2D%CMNHNAME,'(A7,I1)')'DSTBRDN',JJ
+    TZFIELD2D%CLONGNAME  = TRIM(TZFIELD2D%CMNHNAME)
+    TZFIELD2D%CUNITS     = 'g m-2'
+    WRITE(TZFIELD2D%CCOMMENT,'(A6,I1)')'BURDEN',JJ
+    CALL IO_Field_write(TPFILE,TZFIELD2D,ZWORK21)
   ENDDO
 END IF
 IF (LDUST.AND.LDEPOS_DST(IMI)) THEN
@@ -1695,6 +1702,15 @@ IF (LSALT) THEN
     NDIMS      = 3,                        &
     LTIMEDEP   = .TRUE.                    )
   !
+  TZFIELD2D = TFIELDMETADATA(              &
+    CMNHNAME   = 'generic for salt modes', &
+    CSTDNAME   = '',                       &
+    CDIR       = 'XY',                     &
+    NGRID      = 1,                        &
+    NTYPE      = TYPEREAL,                 &
+    NDIMS      = 2,                        &
+    LTIMEDEP   = .TRUE.                    )
+  !
   DO JJ=1,NMODE_SLT
     WRITE(TZFIELD%CMNHNAME,'(A6,I1)')'SLTRGA',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
@@ -1735,6 +1751,7 @@ IF (LSALT) THEN
       ZWORK31(:,:,JK) = ZWORK31(:,:,JK) *(XZZ(:,:,JK+1)-XZZ(:,:,JK))      &
                        *1.d-6 ! Convert to ug/m2-->g/m2 in each layer
     END DO
+    !
     DO JK=IKB,IKE
       DO JT=IJB,IJE
         DO JI=IIB,IIE
@@ -1742,14 +1759,11 @@ IF (LSALT) THEN
         ENDDO
       ENDDO
     ENDDO
-    WRITE(TZFIELD%CMNHNAME,'(A7,I1)')'SLTBRDN',JJ
-    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    TZFIELD%CUNITS     = 'g m-2'
-    WRITE(TZFIELD%CCOMMENT,'(A6,I1)')'BURDEN',JJ
-    TZFIELD%NDIMS      = 2
-    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
-    !
-    TZFIELD%NDIMS      = 3
+    WRITE(TZFIELD2D%CMNHNAME,'(A7,I1)')'SLTBRDN',JJ
+    TZFIELD2D%CLONGNAME  = TRIM(TZFIELD2D%CMNHNAME)
+    TZFIELD2D%CUNITS     = 'g m-2'
+    WRITE(TZFIELD2D%CCOMMENT,'(A6,I1)')'BURDEN',JJ
+    CALL IO_Field_write(TPFILE,TZFIELD2D,ZWORK21)
   ENDDO
 END IF
 IF (LSALT.AND.LDEPOS_SLT(IMI)) THEN
diff --git a/src/MNH/write_lfin.f90 b/src/MNH/write_lfin.f90
index a2847e0dc..f20b46cef 100644
--- a/src/MNH/write_lfin.f90
+++ b/src/MNH/write_lfin.f90
@@ -698,10 +698,9 @@ IF (MEAN_COUNT /= 0) THEN
     CSTDNAME   = '',                                 &
     CDIR       = 'XY',                               &
     NTYPE      = TYPEREAL,                           &
+    NGRID      = 2,                                  &
     NDIMS      = 3,                                  &
     LTIMEDEP   = .TRUE.                              )
-!
-  TZFIELD%NGRID      = 2
 !
   TZFIELD%CMNHNAME   = 'UMME'
   TZFIELD%CLONGNAME  = 'UMME'
@@ -754,7 +753,15 @@ IF (MEAN_COUNT /= 0) THEN
     CALL IO_Field_write(TPFILE,TZFIELD,ZWORK3D)
     !
   END IF
-  TZFIELD%NGRID      = 3
+!
+  TZFIELD = TFIELDMETADATA(                          &
+    CMNHNAME   = 'generic for mean_count variables', & !Temporary name to ease identification
+    CSTDNAME   = '',                                 &
+    CDIR       = 'XY',                               &
+    NTYPE      = TYPEREAL,                           &
+    NGRID      = 3,                                  &
+    NDIMS      = 3,                                  &
+    LTIMEDEP   = .TRUE.                              )
 !
   TZFIELD%CMNHNAME   = 'VMME'
   TZFIELD%CLONGNAME  = 'VMME'
@@ -776,7 +783,14 @@ IF (MEAN_COUNT /= 0) THEN
   TZFIELD%CCOMMENT   = 'X_Y_Z_V component of max wind'
   CALL IO_Field_write(TPFILE,TZFIELD,XVM_MAX)
 !
-  TZFIELD%NGRID      = 4
+  TZFIELD = TFIELDMETADATA(                          &
+    CMNHNAME   = 'generic for mean_count variables', & !Temporary name to ease identification
+    CSTDNAME   = '',                                 &
+    CDIR       = 'XY',                               &
+    NTYPE      = TYPEREAL,                           &
+    NGRID      = 4,                                  &
+    NDIMS      = 3,                                  &
+    LTIMEDEP   = .TRUE.                              )
 !
   TZFIELD%CMNHNAME   = 'WMME'
   TZFIELD%CLONGNAME  = 'WMME'
@@ -798,7 +812,14 @@ IF (MEAN_COUNT /= 0) THEN
   TZFIELD%CCOMMENT   = 'X_Y_Z_vertical max wind'
   CALL IO_Field_write(TPFILE,TZFIELD,XWM_MAX)
 !
-  TZFIELD%NGRID      = 1
+  TZFIELD = TFIELDMETADATA(                          &
+    CMNHNAME   = 'generic for mean_count variables', & !Temporary name to ease identification
+    CSTDNAME   = '',                                 &
+    CDIR       = 'XY',                               &
+    NTYPE      = TYPEREAL,                           &
+    NGRID      = 1,                                  &
+    NDIMS      = 3,                                  &
+    LTIMEDEP   = .TRUE.                              )
 !
   TZFIELD%CMNHNAME   = 'CMME'
   TZFIELD%CLONGNAME  = 'CMME'
@@ -1048,6 +1069,8 @@ IF (NSV >= 1 ) THEN
         TZFIELD%CUNITS     = 'mol m-2'
         TZFIELD%CCOMMENT   = 'X_Y_Accumulated moles of aqueous species at the surface'
         TZFIELD%NDIMS      = 2
+        TZFIELD%NDIMLIST(3)  = TZFIELD%NDIMLIST(4) ! Necessary if LTIMEDEP=.TRUE.
+        TZFIELD%NDIMLIST(4:) = NMNHDIM_UNUSED
         ZWORK2D(:,:)  = XACPRAQ(:,:,JSV-NSV_CHACBEG-NSV_CHAC/2+1)
         CALL IO_Field_write(TPFILE,TZFIELD,ZWORK2D)
       END DO
@@ -1066,16 +1089,17 @@ IF (NSV >= 1 ) THEN
         WHERE ((ZWORK2D(:,:) < 1E-1).AND.(ZWORK2D(:,:) > 1E-14))
           ZWORK2D(:,:) = -LOG10(ZWORK2D(:,:))           ! mean pH of surface water
         END WHERE
-        TZFIELD%CMNHNAME   = 'MEANPHR'
-        TZFIELD%CSTDNAME   = ''
-        TZFIELD%CLONGNAME  = 'MEANPHR'
-        TZFIELD%CUNITS     = '1'
-        TZFIELD%CDIR       = 'XY'
-        TZFIELD%CCOMMENT   = 'X_Y_MEAN_PH'
-        TZFIELD%NGRID      = 1
-        TZFIELD%NTYPE      = TYPEREAL
-        TZFIELD%NDIMS      = 2
-        TZFIELD%LTIMEDEP = .TRUE.
+        TZFIELD = TFIELDMETADATA(     &
+          CMNHNAME   = 'MEANPHR',     &
+          CSTDNAME   = '',            &
+          CLONGNAME  = 'MEANPHR',     &
+          CUNITS     = '1',           &
+          CDIR       = 'XY',          &
+          CCOMMENT   = 'X_Y_MEAN_PH', &
+          NGRID      = 1,             &
+          NTYPE      = TYPEREAL,      &
+          NDIMS      = 2,             &
+          LTIMEDEP = .TRUE.           )
         CALL IO_Field_write(TPFILE,TZFIELD,ZWORK2D)
       ENDIF
     ENDIF
@@ -2013,9 +2037,8 @@ SELECT CASE(CMETH_EOL)
       CDIR       = '--',                        &
       NGRID      = 1,                           &
       NTYPE      = TYPEREAL,                    &
+      NDIMS      = 1,                           &
       LTIMEDEP   = .TRUE.                       )
-!
-    TZFIELD%NDIMS      = 1
 !
     TZFIELD%CMNHNAME   = 'THRUT'
     TZFIELD%CLONGNAME  = 'THRUSTT_EOL'
@@ -2035,7 +2058,14 @@ SELECT CASE(CMETH_EOL)
     TZFIELD%CCOMMENT   = 'RID instantaneous power (W) of wind turbines'
     CALL IO_Field_write(TPFILE,TZFIELD,XPOWT)
 !
-    TZFIELD%NDIMS      = 3
+    TZFIELD = TFIELDMETADATA(                   &
+      CMNHNAME   = 'generic for ALM variables', & !Temporary name to ease identification
+      CSTDNAME   = '',                          &
+      CDIR       = '--',                        &
+      NGRID      = 1,                           &
+      NTYPE      = TYPEREAL,                    &
+      NDIMS      = 3,                           &
+      LTIMEDEP   = .TRUE.                       )
 !
     TZFIELD%CMNHNAME   = 'ELT_RAD'
     TZFIELD%CLONGNAME  = 'ELT_RAD'
@@ -2061,7 +2091,14 @@ SELECT CASE(CMETH_EOL)
     TZFIELD%CCOMMENT   = 'RID_BID_EID instantaneous drag (N) in relative frame'
     CALL IO_Field_write(TPFILE,TZFIELD,XFDRAG_GLB)
 !
-    TZFIELD%NDIMS      = 4
+    TZFIELD = TFIELDMETADATA(                   &
+      CMNHNAME   = 'generic for ALM variables', & !Temporary name to ease identification
+      CSTDNAME   = '',                          &
+      CDIR       = '--',                        &
+      NGRID      = 1,                           &
+      NTYPE      = TYPEREAL,                    &
+      NDIMS      = 4,                           &
+      LTIMEDEP   = .TRUE.                       )
 !
     TZFIELD%CMNHNAME   = 'FAERO_RE'
     TZFIELD%CLONGNAME  = 'AERODYNAMIC FORCE RE'
@@ -2083,9 +2120,8 @@ SELECT CASE(CMETH_EOL)
         CDIR       = '--',                             &
         NGRID      = 1,                                &
         NTYPE      = TYPEREAL,                         &
+        NDIMS      = 1,                                &
         LTIMEDEP   = .TRUE.                            )
-!
-      TZFIELD%NDIMS      = 1
 !
       TZFIELD%CMNHNAME   = 'THRUMME'
       TZFIELD%CLONGNAME  = 'MEAN_THRUST_EOL'
@@ -2105,20 +2141,30 @@ SELECT CASE(CMETH_EOL)
       TZFIELD%CCOMMENT   = 'RID mean power of the wind turbines (W)'
       CALL IO_Field_write(TPFILE,TZFIELD,XPOW_SUM/MEAN_COUNT)
 !
-      TZFIELD%NDIMS      = 3
-!
-      TZFIELD%CMNHNAME   = 'AOAMME'
-      TZFIELD%CLONGNAME  = 'MEAN_ANGLE_OF_ATTACK'
-      TZFIELD%CUNITS     = 'rad'
-      TZFIELD%CCOMMENT   = 'RID_BID_EID mean angle of attack (rad)'
+      TZFIELD = TFIELDMETADATA(                                &
+        CMNHNAME   = 'AOAMME',                                 &
+        CSTDNAME   = '',                                       &
+        CLONGNAME  = 'MEAN_ANGLE_OF_ATTACK',                   &
+        CUNITS     = 'rad',                                    &
+        CDIR       = '--',                                     &
+        CCOMMENT   = 'RID_BID_EID mean angle of attack (rad)', &
+        NGRID      = 1,                                        &
+        NTYPE      = TYPEREAL,                                 &
+        NDIMS      = 3,                                        &
+        LTIMEDEP   = .TRUE.                                    )
       CALL IO_Field_write(TPFILE,TZFIELD,XAOA_SUM/MEAN_COUNT)
 !
-      TZFIELD%NDIMS      = 4
-!
-      TZFIELD%CMNHNAME   = 'FAEROMME_RE'
-      TZFIELD%CLONGNAME  = 'MEAN_AERODYNAMIC_FORCE_RE'
-      TZFIELD%CUNITS     = 'N'
-      TZFIELD%CCOMMENT   = 'RID_BID_EID_XYZ mean forces (N) in RE'
+      TZFIELD = TFIELDMETADATA(                               &
+        CMNHNAME   = 'FAEROMME_RE',                           &
+        CSTDNAME   = '',                                      &
+        CLONGNAME  = 'MEAN_AERODYNAMIC_FORCE_RE',             &
+        CUNITS     = 'N',                                     &
+        CDIR       = '--',                                    &
+        CCOMMENT   = 'RID_BID_EID_XYZ mean forces (N) in RE', &
+        NGRID      = 1,                                       &
+        NTYPE      = TYPEREAL,                                &
+        NDIMS      = 4,                                       &
+        LTIMEDEP   = .TRUE.                                   )
       CALL IO_Field_write(TPFILE,TZFIELD,XFAERO_RE_SUM/MEAN_COUNT)
 !
     END IF
-- 
GitLab