From 80c1ebbc8f120126decfcf0f099d032613b070ce Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Thu, 21 Feb 2019 10:55:08 +0100 Subject: [PATCH] Philippe 21/02/2019: bugfix: intent of read fields: OUT->INOUT to keep initial value if not found in file --- src/LIB/SURCOUCHE/src/mode_io_read_lfi.f90 | 33 ++++++++--------- src/LIB/SURCOUCHE/src/mode_io_read_nc4.f90 | 41 +++++++++++----------- 2 files changed, 38 insertions(+), 36 deletions(-) diff --git a/src/LIB/SURCOUCHE/src/mode_io_read_lfi.f90 b/src/LIB/SURCOUCHE/src/mode_io_read_lfi.f90 index 91e4e0031..17ec7f6e2 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_read_lfi.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_read_lfi.f90 @@ -5,9 +5,10 @@ !----------------------------------------------------------------- module mode_io_read_lfi ! Modifications: -! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -! Philippe Wautelet: 21/06/2018: read and write correctly if MNH_REAL=4 -! Philippe Wautelet: 14/12/2018: split fmreadwrit.f90 +! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 21/06/2018: read and write correctly if MNH_REAL=4 +! P. Wautelet 14/12/2018: split fmreadwrit.f90 +! P. Wautelet 21/02/2019: bugfix: intent of read fields: OUT->INOUT to keep initial value if not found in file ! USE MODD_IO_ll USE MODD_PARAMETERS, ONLY: NLFIMAXCOMMENTLENGTH @@ -47,7 +48,7 @@ IMPLICIT NONE ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD -REAL, INTENT(OUT) :: PFIELD ! array containing the data field +REAL, INTENT(INOUT) :: PFIELD ! array containing the data field INTEGER, INTENT(OUT) :: KRESP ! return-code if problems occured ! !* 0.2 Declarations of local variables @@ -86,7 +87,7 @@ IMPLICIT NONE ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD -REAL,DIMENSION(:),INTENT(OUT) :: PFIELD ! array containing the data field +REAL,DIMENSION(:),INTENT(INOUT) :: PFIELD ! array containing the data field INTEGER, INTENT(OUT) :: KRESP ! return-code if problems occured ! !* 0.2 Declarations of local variables @@ -120,7 +121,7 @@ IMPLICIT NONE ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD -REAL,DIMENSION(:,:),INTENT(OUT) :: PFIELD ! array containing the data field +REAL,DIMENSION(:,:),INTENT(INOUT) :: PFIELD ! array containing the data field INTEGER, INTENT(OUT) :: KRESP ! return-code if problems occured ! !* 0.2 Declarations of local variables @@ -154,7 +155,7 @@ IMPLICIT NONE ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD -REAL,DIMENSION(:,:,:),INTENT(OUT) :: PFIELD ! array containing the data field +REAL,DIMENSION(:,:,:),INTENT(INOUT) :: PFIELD ! array containing the data field INTEGER, INTENT(OUT) :: KRESP ! return-code if problems occured ! !* 0.2 Declarations of local variables @@ -188,7 +189,7 @@ IMPLICIT NONE ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD -REAL,DIMENSION(:,:,:,:),INTENT(OUT) :: PFIELD ! array containing the data field +REAL,DIMENSION(:,:,:,:),INTENT(INOUT) :: PFIELD ! array containing the data field INTEGER, INTENT(OUT) :: KRESP ! return-code if problems occured ! !* 0.2 Declarations of local variables @@ -222,7 +223,7 @@ IMPLICIT NONE ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD -REAL,DIMENSION(:,:,:,:,:),INTENT(OUT) :: PFIELD ! array containing the data field +REAL,DIMENSION(:,:,:,:,:),INTENT(INOUT) :: PFIELD ! array containing the data field INTEGER, INTENT(OUT) :: KRESP ! return-code if problems occured ! !* 0.2 Declarations of local variables @@ -256,7 +257,7 @@ IMPLICIT NONE ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD -REAL,DIMENSION(:,:,:,:,:,:),INTENT(OUT) :: PFIELD ! array containing the data field +REAL,DIMENSION(:,:,:,:,:,:),INTENT(INOUT) :: PFIELD ! array containing the data field INTEGER, INTENT(OUT) :: KRESP ! return-code if problems occured ! !* 0.2 Declarations of local variables @@ -290,7 +291,7 @@ IMPLICIT NONE ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA),INTENT(INOUT) :: TPFIELD -INTEGER, INTENT(OUT) :: KFIELD ! array containing the data field +INTEGER, INTENT(INOUT) :: KFIELD ! array containing the data field INTEGER, INTENT(OUT) :: KRESP ! return-code if problems occured ! !* 0.2 Declarations of local variables @@ -324,7 +325,7 @@ IMPLICIT NONE ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD -INTEGER,DIMENSION(:),INTENT(OUT) :: KFIELD ! array containing the data field +INTEGER,DIMENSION(:),INTENT(INOUT) :: KFIELD ! array containing the data field INTEGER, INTENT(OUT) :: KRESP ! return-code if problems occured ! !* 0.2 Declarations of local variables @@ -358,7 +359,7 @@ IMPLICIT NONE ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD -INTEGER,DIMENSION(:,:),INTENT(OUT) :: KFIELD ! array containing the data field +INTEGER,DIMENSION(:,:),INTENT(INOUT) :: KFIELD ! array containing the data field INTEGER, INTENT(OUT) :: KRESP ! return-code if problems occured ! !* 0.2 Declarations of local variables @@ -392,7 +393,7 @@ IMPLICIT NONE ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA),INTENT(INOUT) :: TPFIELD -LOGICAL, INTENT(OUT) :: OFIELD ! array containing the data field +LOGICAL, INTENT(INOUT) :: OFIELD ! array containing the data field INTEGER, INTENT(OUT) :: KRESP ! return-code if problems occured ! !* 0.2 Declarations of local variables @@ -439,7 +440,7 @@ IMPLICIT NONE ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD -LOGICAL,DIMENSION(:),INTENT(OUT) :: OFIELD ! array containing the data field +LOGICAL,DIMENSION(:),INTENT(INOUT) :: OFIELD ! array containing the data field INTEGER, INTENT(OUT) :: KRESP ! return-code if problems occured ! !* 0.2 Declarations of local variables @@ -494,7 +495,7 @@ IMPLICIT NONE ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA),INTENT(INOUT) :: TPFIELD -CHARACTER(LEN=*),INTENT(OUT) :: HFIELD ! array containing the data field +CHARACTER(LEN=*),INTENT(INOUT) :: HFIELD ! array containing the data field INTEGER, INTENT(OUT) :: KRESP ! return-code if problems occured ! !* 0.2 Declarations of local variables diff --git a/src/LIB/SURCOUCHE/src/mode_io_read_nc4.f90 b/src/LIB/SURCOUCHE/src/mode_io_read_nc4.f90 index 9fb6870ad..dbaf49d89 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_read_nc4.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_read_nc4.f90 @@ -3,12 +3,13 @@ !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- -! Modifications: -! P. Wautelet : may 2016 : use NetCDF Fortran module -! J.Escobar : 14/12/2017 : Correction for MNH_INT=8 -! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -! P. Wautelet : 13/12/2018 : split of mode_netcdf into multiple modules/files -! Philippe Wautelet: 10/01/2019: replace handle_err by io_handle_err_nc4 for better netCDF error messages +! Modifications: +! P. Wautelet may 2016 : use NetCDF Fortran module +! J. Escobar 14/12/2017: correction for MNH_INT=8 +! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 13/12/2018: split of mode_netcdf into multiple modules/files +! P. Wautelet 10/01/2019: replace handle_err by io_handle_err_nc4 for better netCDF error messages +! P. Wautelet 21/02/2019: bugfix: intent of read fields: OUT->INOUT to keep initial value if not found in file !----------------------------------------------------------------- #if defined(MNH_IOCDF4) module mode_io_read_nc4 @@ -258,7 +259,7 @@ END SUBROUTINE IO_READ_CHECK_FIELD_ATTR_NC4 SUBROUTINE IO_READ_FIELD_NC4_X0(TPFILE, TPFIELD, PFIELD, KRESP) TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD -REAL, INTENT(OUT) :: PFIELD +REAL, INTENT(INOUT) :: PFIELD INTEGER, INTENT(OUT) :: KRESP ! return-code INTEGER(KIND=IDCDF_KIND) :: STATUS @@ -313,7 +314,7 @@ END SUBROUTINE IO_READ_FIELD_NC4_X0 SUBROUTINE IO_READ_FIELD_NC4_X1(TPFILE, TPFIELD, PFIELD, KRESP) TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD -REAL,DIMENSION(:),INTENT(OUT) :: PFIELD +REAL,DIMENSION(:),INTENT(INOUT) :: PFIELD INTEGER, INTENT(OUT) :: KRESP ! return-code INTEGER(KIND=IDCDF_KIND) :: STATUS @@ -380,7 +381,7 @@ END SUBROUTINE IO_READ_FIELD_NC4_X1 SUBROUTINE IO_READ_FIELD_NC4_X2(TPFILE, TPFIELD, PFIELD, KRESP) TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD -REAL,DIMENSION(:,:),INTENT(OUT) :: PFIELD +REAL,DIMENSION(:,:),INTENT(INOUT) :: PFIELD INTEGER, INTENT(OUT) :: KRESP ! return-code INTEGER(KIND=IDCDF_KIND) :: STATUS @@ -462,7 +463,7 @@ END SUBROUTINE IO_READ_FIELD_NC4_X2 SUBROUTINE IO_READ_FIELD_NC4_X3(TPFILE, TPFIELD, PFIELD, KRESP) TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD -REAL,DIMENSION(:,:,:),INTENT(OUT) :: PFIELD +REAL,DIMENSION(:,:,:),INTENT(INOUT) :: PFIELD INTEGER, INTENT(OUT) :: KRESP ! return-code INTEGER(KIND=IDCDF_KIND) :: STATUS @@ -533,7 +534,7 @@ END SUBROUTINE IO_READ_FIELD_NC4_X3 SUBROUTINE IO_READ_FIELD_NC4_X4(TPFILE, TPFIELD, PFIELD, KRESP) TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD -REAL,DIMENSION(:,:,:,:),INTENT(OUT) :: PFIELD +REAL,DIMENSION(:,:,:,:),INTENT(INOUT) :: PFIELD INTEGER, INTENT(OUT) :: KRESP ! return-code INTEGER(KIND=IDCDF_KIND) :: STATUS @@ -607,7 +608,7 @@ END SUBROUTINE IO_READ_FIELD_NC4_X4 SUBROUTINE IO_READ_FIELD_NC4_X5(TPFILE, TPFIELD, PFIELD, KRESP) TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD -REAL,DIMENSION(:,:,:,:,:),INTENT(OUT) :: PFIELD +REAL,DIMENSION(:,:,:,:,:),INTENT(INOUT) :: PFIELD INTEGER, INTENT(OUT) :: KRESP ! return-code INTEGER(KIND=IDCDF_KIND) :: STATUS @@ -684,7 +685,7 @@ END SUBROUTINE IO_READ_FIELD_NC4_X5 SUBROUTINE IO_READ_FIELD_NC4_X6(TPFILE, TPFIELD, PFIELD, KRESP) TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD -REAL,DIMENSION(:,:,:,:,:,:),INTENT(OUT) :: PFIELD +REAL,DIMENSION(:,:,:,:,:,:),INTENT(INOUT) :: PFIELD INTEGER, INTENT(OUT) :: KRESP ! return-code INTEGER(KIND=IDCDF_KIND) :: STATUS @@ -763,7 +764,7 @@ END SUBROUTINE IO_READ_FIELD_NC4_X6 SUBROUTINE IO_READ_FIELD_NC4_N0(TPFILE, TPFIELD, KFIELD, KRESP) TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD -INTEGER, INTENT(OUT) :: KFIELD +INTEGER, INTENT(INOUT) :: KFIELD INTEGER, INTENT(OUT) :: KRESP ! return-code INTEGER(KIND=IDCDF_KIND) :: STATUS @@ -819,7 +820,7 @@ END SUBROUTINE IO_READ_FIELD_NC4_N0 SUBROUTINE IO_READ_FIELD_NC4_N1(TPFILE, TPFIELD, KFIELD, KRESP) TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD -INTEGER, DIMENSION(:), INTENT(OUT) :: KFIELD +INTEGER, DIMENSION(:), INTENT(INOUT) :: KFIELD INTEGER, INTENT(OUT) :: KRESP ! return-code INTEGER(KIND=IDCDF_KIND) :: STATUS @@ -887,7 +888,7 @@ END SUBROUTINE IO_READ_FIELD_NC4_N1 SUBROUTINE IO_READ_FIELD_NC4_N2(TPFILE, TPFIELD, KFIELD, KRESP) TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD -INTEGER, DIMENSION(:,:), INTENT(OUT) :: KFIELD +INTEGER, DIMENSION(:,:), INTENT(INOUT) :: KFIELD INTEGER, INTENT(OUT) :: KRESP ! return-code INTEGER(KIND=IDCDF_KIND) :: STATUS @@ -969,7 +970,7 @@ END SUBROUTINE IO_READ_FIELD_NC4_N2 SUBROUTINE IO_READ_FIELD_NC4_L0(TPFILE, TPFIELD, OFIELD, KRESP) TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD -LOGICAL, INTENT(OUT) :: OFIELD +LOGICAL, INTENT(INOUT) :: OFIELD INTEGER, INTENT(OUT) :: KRESP ! return-code INTEGER(KIND=IDCDF_KIND) :: STATUS @@ -1039,7 +1040,7 @@ END SUBROUTINE IO_READ_FIELD_NC4_L0 SUBROUTINE IO_READ_FIELD_NC4_L1(TPFILE, TPFIELD, OFIELD, KRESP) TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD -LOGICAL,DIMENSION(:),INTENT(OUT) :: OFIELD +LOGICAL,DIMENSION(:),INTENT(INOUT) :: OFIELD INTEGER, INTENT(OUT) :: KRESP ! return-code INTEGER(KIND=IDCDF_KIND) :: STATUS @@ -1126,7 +1127,7 @@ END SUBROUTINE IO_READ_FIELD_NC4_L1 SUBROUTINE IO_READ_FIELD_NC4_C0(TPFILE, TPFIELD, HFIELD, KRESP) TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD -CHARACTER(LEN=*), INTENT(OUT) :: HFIELD +CHARACTER(LEN=*), INTENT(INOUT) :: HFIELD INTEGER, INTENT(OUT) :: KRESP ! return-code INTEGER(KIND=IDCDF_KIND) :: STATUS @@ -1195,7 +1196,7 @@ USE MODE_DATETIME ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD -TYPE (DATE_TIME), INTENT(OUT) :: TPDATA +TYPE (DATE_TIME), INTENT(INOUT) :: TPDATA INTEGER, INTENT(OUT) :: KRESP ! return-code INTEGER(KIND=IDCDF_KIND) :: STATUS -- GitLab