From 4f9d140ccdc3847d3842f003c0870c06cdbb4f4a Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Tue, 25 Jun 2019 14:48:29 +0200
Subject: [PATCH] Philippe 25/06/2019: LFI2CDF: add support for 3D integer
 arrays

---
 LIBTOOLS/tools/lfi2cdf/src/mode_util.f90 | 31 +++++++++++++++++-------
 1 file changed, 22 insertions(+), 9 deletions(-)

diff --git a/LIBTOOLS/tools/lfi2cdf/src/mode_util.f90 b/LIBTOOLS/tools/lfi2cdf/src/mode_util.f90
index 7a4d853e9..1713d2e65 100644
--- a/LIBTOOLS/tools/lfi2cdf/src/mode_util.f90
+++ b/LIBTOOLS/tools/lfi2cdf/src/mode_util.f90
@@ -6,11 +6,12 @@
 ! Modifications:
 !  P. Wautelet 07/02/2019: force TYPE to a known value for IO_FILE_ADD2LIST
 !  P. Wautelet 10/04/2019: use IO_Err_handle_nc4 to handle netCDF errors
+!  P. Wautelet 25/06/2019: add support for 3D integer arrays
 !-----------------------------------------------------------------
 MODULE mode_util
   USE MODD_IO,         ONLY: TFILE_ELT
   USE MODD_NETCDF,     ONLY: DIMCDF, CDFINT
-  USE MODD_PARAMETERS, ONLY: NLFIMAXCOMMENTLENGTH, NMNHNAMELGTMAX
+  USE MODD_PARAMETERS, ONLY: JPVEXT, NLFIMAXCOMMENTLENGTH, NMNHNAMELGTMAX
   use modd_precision,  only: LFIINT
 
   USE MODE_FIELD
@@ -687,14 +688,15 @@ END DO
     INTEGER(KIND=CDFINT),DIMENSION(NF90_MAX_VAR_DIMS) :: IDIMLEN
     logical,dimension(knaf)                  :: gtimedep_in, gtimedep_out
 
-    CHARACTER(LEN=:),       ALLOCATABLE :: YTAB0D
-    INTEGER,DIMENSION(:),   ALLOCATABLE :: ITAB1D, ITAB1D2
-    INTEGER,DIMENSION(:,:), ALLOCATABLE :: ITAB2D, ITAB2D2
-    LOGICAL,DIMENSION(:),   ALLOCATABLE :: GTAB1D
-    REAL,DIMENSION(:),      ALLOCATABLE :: XTAB1D, XTAB1D2
-    REAL,DIMENSION(:,:),    ALLOCATABLE :: XTAB2D, XTAB2D2
-    REAL,DIMENSION(:,:,:),  ALLOCATABLE :: XTAB3D, XTAB3D2
-    REAL,DIMENSION(:,:,:,:),ALLOCATABLE :: XTAB4D, XTAB4D2
+    CHARACTER(LEN=:),            ALLOCATABLE :: YTAB0D
+    INTEGER, DIMENSION(:),       ALLOCATABLE :: ITAB1D, ITAB1D2
+    INTEGER, DIMENSION(:,:),     ALLOCATABLE :: ITAB2D, ITAB2D2
+    INTEGER, DIMENSION(:,:,:),   ALLOCATABLE :: ITAB3D, ITAB3D2
+    LOGICAL, DIMENSION(:),       ALLOCATABLE :: GTAB1D
+    REAL,    DIMENSION(:),       ALLOCATABLE :: XTAB1D, XTAB1D2
+    REAL,    DIMENSION(:,:),     ALLOCATABLE :: XTAB2D, XTAB2D2
+    REAL,    DIMENSION(:,:,:),   ALLOCATABLE :: XTAB3D, XTAB3D2
+    REAL,    DIMENSION(:,:,:,:), ALLOCATABLE :: XTAB4D, XTAB4D2
     TYPE(DATE_TIME)                     :: TZDATE
 
 
@@ -742,6 +744,10 @@ END DO
           ALLOCATE(ITAB2D(IDIMLEN(1),IDIMLEN(2)))
           IF (tpreclist(ji)%calc) ALLOCATE(ITAB2D2(IDIMLEN(1),IDIMLEN(2)))
           CALL IO_Field_read(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,ITAB2D)
+        CASE (3)
+          ALLOCATE(ITAB3D(IDIMLEN(1),IDIMLEN(2),IDIMLEN(3)))
+          IF (tpreclist(ji)%calc) ALLOCATE(ITAB3D2(IDIMLEN(1),IDIMLEN(2),IDIMLEN(3)))
+          CALL IO_Field_read(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,ITAB3D)
         CASE DEFAULT
           CALL PRINT_MSG(NVERB_WARNING,'IO','fill_files','too many dimensions for ' &
                          //TRIM(tpreclist(ISRC)%name)//' => ignored')
@@ -762,6 +768,9 @@ END DO
           CASE (2)
             CALL IO_Field_read(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,ITAB2D2)
             ITAB2D(:,:) = ITAB2D(:,:) + ITAB2D2(:,:)
+          CASE (3)
+            CALL IO_Field_read(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,ITAB3D2)
+            ITAB3D(:,:,:) = ITAB3D(:,:,:) + ITAB3D2(:,:,:)
           END SELECT
         END DO
 
@@ -779,6 +788,10 @@ END DO
           CALL IO_Field_write(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,ITAB2D)
           DEALLOCATE(ITAB2D)
           IF (tpreclist(ji)%calc) DEALLOCATE(ITAB2D2)
+        CASE (3)
+          CALL IO_Field_write(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,ITAB3D)
+          DEALLOCATE(ITAB3D)
+          IF (tpreclist(ji)%calc) DEALLOCATE(ITAB3D2)
         END SELECT
 
 
-- 
GitLab