diff --git a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 b/src/LIB/SURCOUCHE/src/mode_netcdf.f90 index 3740c2a282f1492e7aaf773439038625e28c2d3b..4e12b6b4a8de2526b286301d1d20c9e696b9d1bf 100644 --- a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 +++ b/src/LIB/SURCOUCHE/src/mode_netcdf.f90 @@ -590,13 +590,14 @@ GETSTRDIMID = TMP%ID END FUNCTION GETSTRDIMID -SUBROUTINE FILLVDIMS(TPFILE, KSHAPE, HDIR, KVDIMS) -TYPE(TFILEDATA), INTENT(IN) :: TPFILE -INTEGER(KIND=IDCDF_KIND), DIMENSION(:), INTENT(IN) :: KSHAPE -CHARACTER(LEN=*), INTENT(IN) :: HDIR -INTEGER(KIND=IDCDF_KIND),DIMENSION(:), INTENT(OUT) :: KVDIMS +SUBROUTINE FILLVDIMS(TPFILE, TPFIELD, KSHAPE, KVDIMS) +TYPE(TFILEDATA), INTENT(IN) :: TPFILE +TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD +INTEGER(KIND=IDCDF_KIND),DIMENSION(:),INTENT(IN) :: KSHAPE +INTEGER(KIND=IDCDF_KIND),DIMENSION(:),INTENT(OUT) :: KVDIMS INTEGER :: II +CHARACTER(LEN=2) :: YDIR TYPE(DIMCDF), POINTER :: PTDIM TYPE(IOCDF), POINTER :: PIOCDF @@ -604,18 +605,19 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','FILLVDIMS','called') IF (SIZE(KSHAPE) < 1) CALL PRINT_MSG(NVERB_FATAL,'IO','FILLVDIMS','empty KSHAPE') +YDIR = TPFIELD%CDIR PIOCDF => TPFILE%TNCDIMS DO II=1, SIZE(KSHAPE) IF (II == 1) THEN - IF (HDIR == 'XX' .OR. HDIR == 'XY') THEN + IF (YDIR == 'XX' .OR. YDIR == 'XY') THEN IF (KSHAPE(II) == PIOCDF%DIM_NI%LEN) THEN PTDIM => PIOCDF%DIM_NI ELSE PTDIM => GETDIMCDF(TPFILE, KSHAPE(II)) END IF - ELSE IF (HDIR == 'YY') THEN + ELSE IF (YDIR == 'YY') THEN IF (KSHAPE(II) == PIOCDF%DIM_NJ%LEN) THEN PTDIM => PIOCDF%DIM_NJ ELSE @@ -626,7 +628,7 @@ DO II=1, SIZE(KSHAPE) KVDIMS(II) = PTDIM%ID END IF ELSE IF (II == 2) THEN - IF (HDIR == 'XY') THEN + IF (YDIR == 'XY') THEN IF (KSHAPE(II) == PIOCDF%DIM_NJ%LEN) THEN PTDIM => PIOCDF%DIM_NJ ELSE @@ -636,7 +638,7 @@ DO II=1, SIZE(KSHAPE) PTDIM => GETDIMCDF(TPFILE, KSHAPE(II)) END IF ELSE IF (II == 3) THEN - IF (HDIR == 'XY') THEN + IF (YDIR == 'XY') THEN IF (KSHAPE(II) == PIOCDF%DIM_LEVEL%LEN) THEN PTDIM => PIOCDF%DIM_LEVEL ELSE @@ -729,7 +731,7 @@ IF (STATUS /= NF90_NOERR) THEN END IF ! Get the netcdf dimensions - CALL FILLVDIMS(TPFILE, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS) + CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS) ! Define the variable IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN @@ -808,7 +810,7 @@ IF (STATUS /= NF90_NOERR) THEN END IF ! Get the netcdf dimensions - CALL FILLVDIMS(TZFILE, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS) + CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS) ! Define the variable IF (TZFILE%LNCREDUCE_FLOAT_PRECISION) THEN @@ -869,7 +871,7 @@ IF (STATUS /= NF90_NOERR) THEN END IF ! Get the netcdf dimensions - CALL FILLVDIMS(TPFILE, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS) + CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS) ! Define the variable IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN @@ -930,7 +932,7 @@ IF (STATUS /= NF90_NOERR) THEN END IF ! Get the netcdf dimensions - CALL FILLVDIMS(TPFILE, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS) + CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS) ! Define the variable IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN @@ -991,7 +993,7 @@ IF (STATUS /= NF90_NOERR) THEN END IF ! Get the netcdf dimensions - CALL FILLVDIMS(TPFILE, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS) + CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS) ! Define the variable IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN @@ -1052,7 +1054,7 @@ IF (STATUS /= NF90_NOERR) THEN END IF ! Get the netcdf dimensions - CALL FILLVDIMS(TPFILE, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS) + CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS) ! Define the variable IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN @@ -1186,7 +1188,7 @@ IF (STATUS /= NF90_NOERR) THEN END IF ! Get the netcdf dimensions - CALL FILLVDIMS(TPFILE, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS) + CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), IVDIMS) ! Define the variable #ifndef MNH_INT8 @@ -1242,7 +1244,7 @@ IF (STATUS /= NF90_NOERR) THEN END IF ! Get the netcdf dimensions - CALL FILLVDIMS(TPFILE, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS) + CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), IVDIMS) ! Define the variable #ifndef MNH_INT8 @@ -1302,7 +1304,7 @@ IF (STATUS /= NF90_NOERR) THEN END IF ! Get the netcdf dimensions - CALL FILLVDIMS(TPFILE, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS) + CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), IVDIMS) ! Define the variable #ifndef MNH_INT8 @@ -1415,7 +1417,7 @@ IF (STATUS /= NF90_NOERR) THEN END IF ! Get the netcdf dimensions - CALL FILLVDIMS(TPFILE, INT(SHAPE(OFIELD),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS) + CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(OFIELD),KIND=IDCDF_KIND), IVDIMS) ! Define the variable ! Use of NF90_INT1 datatype (=NF90_BYTE) that is enough to store a boolean @@ -1533,7 +1535,7 @@ STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) IF (STATUS /= NF90_NOERR) THEN ! Get the netcdf string dimensions id IVDIMS(1) = GETSTRDIMID(TPFILE,ILEN) - CALL FILLVDIMS(TPFILE, (/ISIZE/), TPFIELD%CDIR, IVDIMS(2:2)) + CALL FILLVDIMS(TPFILE, TPFIELD, (/ISIZE/), IVDIMS(2:2)) ! Define the variable STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_CHAR, IVDIMS, IVARID) IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_C1[NF90_DEF_VAR]') @@ -1625,7 +1627,7 @@ TZFIELD%CCOMMENT = 'YYYYMMDD' STATUS = NF90_INQ_VARID(INCID, TZFIELD%CMNHNAME, IVARID) IF (STATUS /= NF90_NOERR) THEN ! Get the netcdf dimensions - CALL FILLVDIMS(TPFILE, INT(SHAPE(ITDATE),KIND=IDCDF_KIND), TPFIELD%CDIR, IVDIMS) + CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(ITDATE),KIND=IDCDF_KIND), IVDIMS) ! Define the variable STATUS = NF90_DEF_VAR(INCID, TZFIELD%CMNHNAME, NF90_INT, IVDIMS, IVARID)