From 9b684d9459c76e967e4c98b5711e87c289cded7e Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Mon, 28 Jun 2021 15:30:02 +0200 Subject: [PATCH] Philippe 28/06/2021: netCDF: use correct integer datatypes for netCDF integers + respect Doctor norm --- src/MNH/set_rsou.f90 | 140 +++++++++++++++++++++---------------------- 1 file changed, 70 insertions(+), 70 deletions(-) diff --git a/src/MNH/set_rsou.f90 b/src/MNH/set_rsou.f90 index fc840e673..23423e8b0 100644 --- a/src/MNH/set_rsou.f90 +++ b/src/MNH/set_rsou.f90 @@ -381,18 +381,18 @@ REAL :: ZRDSCPD,ZRADSDG, & ! Rd/Cpd, Pi/180., ZRVSRD,ZRDSRV, & ! Rv/Rd, Rd/Rv ZPTOP ! Pressure at domain top LOGICAL :: GUSERC ! use of input data cloud -INTEGER :: IIB, IIE, IJB, IJE,IKB,IKE +INTEGER :: IIB, IIE, IJB, IJE INTEGER :: IXOR_ll, IYOR_ll INTEGER :: IINFO_ll LOGICAL :: GPROFILE_IN_PROC ! T : initialization profile is in current processor -CHARACTER(LEN=100) :: YMSG ! REAL,DIMENSION(SIZE(XXHAT),SIZE(XYHAT)) ::ZZS_LS REAL,DIMENSION(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT)) ::ZZFLUX_MX,ZZMASS_MX ! mixed grid !------------------------------------------------------------------------------- ! For standard ocean version, reading external files -CHARACTER(LEN=256) :: infile,infisf ! files to be read -INTEGER :: NZ,NLATI,NLONGI,IDX,ITIME,ncid,varid,ndimp,ntcindy +CHARACTER(LEN=256) :: yinfile, yinfisf ! files to be read +INTEGER :: INZ, INLATI, INLONGI, IDX +INTEGER(KIND=CDFINT) :: incid, ivarid, idimid, idimlen REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZOC_TEMPERATURE,ZOC_SALINITY,ZOC_U,ZOC_V REAL, DIMENSION(:), ALLOCATABLE :: ZOC_DEPTH REAL, DIMENSION(:), ALLOCATABLE :: ZOC_LE,ZOC_H @@ -581,47 +581,47 @@ SELECT CASE(YKIND) CASE ('STANDOCE') ! XP00=XP00OCEAN - READ(ILUPRE,*) ZPTOP ! P_atmosphere at sfc =P top domain - READ(ILUPRE,*) INFILE,INFISF - WRITE(ILUOUT,FMT=*) 'Netcdf files to read:',INFILE,INFISF + READ(ILUPRE,*) ZPTOP ! P_atmosphere at sfc =P top domain + READ(ILUPRE,*) YINFILE, YINFISF + WRITE(ILUOUT,FMT=*) 'Netcdf files to read:', YINFILE, YINFISF ! Open file containing initial profiles - CALL check(nf90_open(infile,NF90_NOWRITE,ncid), "opening NC file") + CALL check(nf90_open(yinfile,NF90_NOWRITE,incid), "opening NC file") ! Reading dimensions and lengths - CALL check( nf90_inq_dimid(ncid, "depth",ndimp), "getting depth dimension id" ) - CALL check( nf90_inquire_dimension(ncid, ndimp, len=NZ), "getting NZ " ) - CALL check( nf90_inquire_dimension(ncid, 2, len=NLONGI), "getting NLONG " ) - CALL check( nf90_inquire_dimension(ncid, 1, len=NLATI), "getting NLAT " ) + CALL check( nf90_inq_dimid(incid, "depth",idimid), "getting depth dimension id" ) + CALL check( nf90_inquire_dimension(incid, idimid, len=INZ), "getting INZ " ) + CALL check( nf90_inquire_dimension(incid, 2, len=INLONGI), "getting NLONG " ) + CALL check( nf90_inquire_dimension(incid, 1, len=INLATI), "getting NLAT " ) ! - WRITE(ILUOUT,FMT=*) 'NB LEVLS READ NZ, NLONG NLAT ', NZ, NLONGI,NLATI - ALLOCATE(ZOC_TEMPERATURE(NLATI,NLONGI,NZ),ZOC_SALINITY(NLATI,NLONGI,NZ)) - ALLOCATE(ZOC_U(NLATI,NLONGI,NZ),ZOC_V(NLATI,NLONGI,NZ)) - ALLOCATE(ZOC_DEPTH(NZ)) + WRITE(ILUOUT,FMT=*) 'NB LEVLS READ INZ, NLONG NLAT ', INZ, INLONGI,INLATI + ALLOCATE(ZOC_TEMPERATURE(INLATI,INLONGI,INZ),ZOC_SALINITY(INLATI,INLONGI,INZ)) + ALLOCATE(ZOC_U(INLATI,INLONGI,INZ),ZOC_V(INLATI,INLONGI,INZ)) + ALLOCATE(ZOC_DEPTH(INZ)) WRITE(ILUOUT,FMT=*) 'NETCDF READING ==> Temp' - CALL check(nf90_inq_varid(ncid,"temperature",varid), "getting temp varid") - CALL check(nf90_get_var(ncid,varid,ZOC_TEMPERATURE), "reading temp") + CALL check(nf90_inq_varid(incid,"temperature",ivarid), "getting temp ivarid") + CALL check(nf90_get_var(incid,ivarid,ZOC_TEMPERATURE), "reading temp") WRITE(ILUOUT,FMT=*) 'Netcdf Reading ==> salinity' - CALL check(nf90_inq_varid(ncid,"salinity",varid), "getting salinity varid") - CALL check(nf90_get_var(ncid,varid,ZOC_SALINITY), "reading salinity") + CALL check(nf90_inq_varid(incid,"salinity",ivarid), "getting salinity ivarid") + CALL check(nf90_get_var(incid,ivarid,ZOC_SALINITY), "reading salinity") WRITE(ILUOUT,FMT=*) 'Netcdf ==> Reading depth' - CALL check(nf90_inq_varid(ncid,"depth",varid), "getting depth varid") - CALL check(nf90_get_var(ncid,varid,ZOC_DEPTH), "reading depth") + CALL check(nf90_inq_varid(incid,"depth",ivarid), "getting depth ivarid") + CALL check(nf90_get_var(incid,ivarid,ZOC_DEPTH), "reading depth") WRITE(ILUOUT,FMT=*) 'depth: max min ', MAXVAL(ZOC_DEPTH),MINVAL(ZOC_DEPTH) - WRITE(ILUOUT,FMT=*) 'depth 1 nz: ', ZOC_DEPTH(1),ZOC_DEPTH(NZ) + WRITE(ILUOUT,FMT=*) 'depth 1 nz: ', ZOC_DEPTH(1),ZOC_DEPTH(INZ) WRITE(ILUOUT,FMT=*) 'Netcdf Reading ==> Currents' - CALL check(nf90_inq_varid(ncid,"u",varid), "getting u varid") - CALL check(nf90_get_var(ncid,varid,ZOC_U), "reading u") - CALL check(nf90_inq_varid(ncid,"v",varid), "getting v varid") - CALL check(nf90_get_var(ncid,varid,ZOC_V), "reading v") - CALL check(nf90_close(ncid), "closing infile") + CALL check(nf90_inq_varid(incid,"u",ivarid), "getting u ivarid") + CALL check(nf90_get_var(incid,ivarid,ZOC_U), "reading u") + CALL check(nf90_inq_varid(incid,"v",ivarid), "getting v ivarid") + CALL check(nf90_get_var(incid,ivarid,ZOC_V), "reading v") + CALL check(nf90_close(incid), "closing yinfile") WRITE(ILUOUT,FMT=*) 'End of initial file reading' ! - DO JKM=1,NZ + DO JKM=1,INZ ZOC_TEMPERATURE(1,1,JKM)=ZOC_TEMPERATURE(1,1,JKM)+273.15 WRITE(ILUOUT,FMT=*) 'Z T(Kelvin) S(Sverdup) U V K',& JKM,ZOC_DEPTH(JKM),ZOC_TEMPERATURE(1,1,JKM),ZOC_SALINITY(1,1,JKM),ZOC_U(1,1,JKM),ZOC_V(1,1,JKM), JKM ENDDO ! number of data levels - ILEVELM=NZ + ILEVELM=INZ ! Model bottom ZTGROUND = ZOC_TEMPERATURE(1,1,ILEVELM) ZMRGROUND = ZOC_SALINITY(1,1,ILEVELM) @@ -655,7 +655,7 @@ SELECT CASE(YKIND) ZTHL = ZT ZTH = ZT ! INIT --- U V ----- - ILEVELU=nz ! Same nb of levels for u,v,T,S + ILEVELU = INZ ! Same nb of levels for u,v,T,S !Assume that current and temp are given at same level ALLOCATE(ZHEIGHTU(ILEVELU)) ALLOCATE(ZU(ILEVELU),ZV(ILEVELU)) @@ -678,56 +678,56 @@ SELECT CASE(YKIND) ! ! Reading/initializing surface forcings ! - WRITE(ILUOUT,FMT=*) 'netcdf sfc forcings file to be read:',infisf + WRITE(ILUOUT,FMT=*) 'netcdf sfc forcings file to be read:',yinfisf ! Open of sfc forcing file - CALL check(nf90_open(infisf,NF90_NOWRITE,ncid), "opening NC file") + CALL check(nf90_open(yinfisf,NF90_NOWRITE,incid), "opening NC file") ! Reading dimension and length - CALL check( nf90_inq_dimid(ncid,"t",ndimp), "getting time dimension id" ) - CALL check( nf90_inquire_dimension(ncid, ndimp, len=ntcindy), "getting ntcindy " ) -! - WRITE(ILUOUT,FMT=*) 'nb sfc-forcing time ntcindy=',ntcindy - ALLOCATE(ZOC_LE(ntcindy)) - ALLOCATE(ZOC_H(ntcindy)) - ALLOCATE(ZOC_SW_DOWN(ntcindy)) - ALLOCATE(ZOC_SW_UP(ntcindy)) - ALLOCATE(ZOC_LW_DOWN(ntcindy)) - ALLOCATE(ZOC_LW_UP(ntcindy)) - ALLOCATE(ZOC_TAUX(ntcindy)) - ALLOCATE(ZOC_TAUY(ntcindy)) + CALL check( nf90_inq_dimid(incid,"t",idimid), "getting time dimension id" ) + CALL check( nf90_inquire_dimension(incid, idimid, len=idimlen), "getting idimlen " ) +! + WRITE(ILUOUT,FMT=*) 'nb sfc-forcing time idimlen=',idimlen + ALLOCATE(ZOC_LE(idimlen)) + ALLOCATE(ZOC_H(idimlen)) + ALLOCATE(ZOC_SW_DOWN(idimlen)) + ALLOCATE(ZOC_SW_UP(idimlen)) + ALLOCATE(ZOC_LW_DOWN(idimlen)) + ALLOCATE(ZOC_LW_UP(idimlen)) + ALLOCATE(ZOC_TAUX(idimlen)) + ALLOCATE(ZOC_TAUY(idimlen)) ! WRITE(ILUOUT,FMT=*)'Netcdf Reading ==> LE' - CALL check(nf90_inq_varid(ncid,"LE",varid), "getting LE varid") - CALL check(nf90_get_var(ncid,varid,ZOC_LE), "reading LE flux") + CALL check(nf90_inq_varid(incid,"LE",ivarid), "getting LE ivarid") + CALL check(nf90_get_var(incid,ivarid,ZOC_LE), "reading LE flux") WRITE(ILUOUT,FMT=*)'Netcdf Reading ==> H' - CALL check(nf90_inq_varid(ncid,"H",varid), "getting H varid") - CALL check(nf90_get_var(ncid,varid,ZOC_H), "reading H flux") + CALL check(nf90_inq_varid(incid,"H",ivarid), "getting H ivarid") + CALL check(nf90_get_var(incid,ivarid,ZOC_H), "reading H flux") WRITE(ILUOUT,FMT=*) 'Netcdf Reading ==> SW_DOWN' - CALL check(nf90_inq_varid(ncid,"SW_DOWN",varid), "getting SW_DOWN varid") - CALL check(nf90_get_var(ncid,varid,ZOC_SW_DOWN), "reading SW_DOWN") + CALL check(nf90_inq_varid(incid,"SW_DOWN",ivarid), "getting SW_DOWN ivarid") + CALL check(nf90_get_var(incid,ivarid,ZOC_SW_DOWN), "reading SW_DOWN") WRITE(ILUOUT,FMT=*) 'Netcdf Reading ==> SW_UP' - CALL check(nf90_inq_varid(ncid,"SW_UP",varid), "getting SW_UP varid") - CALL check(nf90_get_var(ncid,varid,ZOC_SW_UP), "reading SW_UP") + CALL check(nf90_inq_varid(incid,"SW_UP",ivarid), "getting SW_UP ivarid") + CALL check(nf90_get_var(incid,ivarid,ZOC_SW_UP), "reading SW_UP") WRITE(ILUOUT,FMT=*) 'Netcdf Reading ==> LW_DOWN' - CALL check(nf90_inq_varid(ncid,"LW_DOWN",varid), "getting LW_DOWN varid") - CALL check(nf90_get_var(ncid,varid,ZOC_LW_DOWN), "reading LW_DOWN") + CALL check(nf90_inq_varid(incid,"LW_DOWN",ivarid), "getting LW_DOWN ivarid") + CALL check(nf90_get_var(incid,ivarid,ZOC_LW_DOWN), "reading LW_DOWN") WRITE(ILUOUT,FMT=*) 'Netcdf Reading ==> LW_UP' - CALL check(nf90_inq_varid(ncid,"LW_UP",varid), "getting LW_UP varid") - CALL check(nf90_get_var(ncid,varid,ZOC_LW_UP), "reading LW_UP") + CALL check(nf90_inq_varid(incid,"LW_UP",ivarid), "getting LW_UP ivarid") + CALL check(nf90_get_var(incid,ivarid,ZOC_LW_UP), "reading LW_UP") WRITE(ILUOUT,FMT=*) 'Netcdf Reading ==> TAUX' - CALL check(nf90_inq_varid(ncid,"TAUX",varid), "getting TAUX varid") - CALL check(nf90_get_var(ncid,varid,ZOC_TAUX), "reading TAUX") + CALL check(nf90_inq_varid(incid,"TAUX",ivarid), "getting TAUX ivarid") + CALL check(nf90_get_var(incid,ivarid,ZOC_TAUX), "reading TAUX") WRITE(ILUOUT,FMT=*) 'Netcdf Reading ==> TAUY' - CALL check(nf90_inq_varid(ncid,"TAUY",varid), "getting TAUY varid") - CALL check(nf90_get_var(ncid,varid,ZOC_TAUY), "reading TAUY") - CALL check(nf90_close(ncid), "closing infisfS") + CALL check(nf90_inq_varid(incid,"TAUY",ivarid), "getting TAUY ivarid") + CALL check(nf90_get_var(incid,ivarid,ZOC_TAUY), "reading TAUY") + CALL check(nf90_close(incid), "closing yinfifs") ! WRITE(ILUOUT,FMT=*) ' Forcing-Number LE H SW_down SW_up LW_down LW_up TauX TauY' - DO JKM=1,NTCINDY + DO JKM = 1, idimlen WRITE(ILUOUT,FMT=*) JKM, ZOC_LE(JKM), ZOC_H(JKM),ZOC_SW_DOWN(JKM),ZOC_SW_UP(JKM),& ZOC_LW_DOWN(JKM),ZOC_LW_UP(JKM),ZOC_TAUX(JKM),ZOC_TAUY(JKM) ENDDO ! IFRCLT FORCINGS at sea surface - IFRCLT=NTCINDY + IFRCLT=idimlen ALLOCATE(ZFRCLT(IFRCLT)) ALLOCATE(ZSSUFL_T(IFRCLT)); ZSSUFL_T = 0.0 ALLOCATE(ZSSVFL_T(IFRCLT)); ZSSVFL_T = 0.0 @@ -1620,12 +1620,12 @@ DEALLOCATE(ZMR) DEALLOCATE(ZTHL) !------------------------------------------------------------------------------- CONTAINS - SUBROUTINE CHECK(STATUS,LOC) - INTEGER, INTENT(IN) :: STATUS - CHARACTER(LEN=*), INTENT(IN) :: LOC - IF(STATUS /= NF90_NOERR) THEN - WRITE(ILUOUT,FMT=*) "Error at ", LOC - WRITE(ILUOUT,FMT=*) NF90_STRERROR(STATUS) + SUBROUTINE CHECK( ISTATUS, YLOC ) + INTEGER(KIND=CDFINT), INTENT(IN) :: ISTATUS + CHARACTER(LEN=*), INTENT(IN) :: YLOC + + IF( ISTATUS /= NF90_NOERR ) THEN + CALL PRINT_MSG( NVERB_ERROR, 'IO', 'SET_RSOU', 'error at ' // Trim( yloc) // ': ' // NF90_STRERROR( ISTATUS ) ) END IF END SUBROUTINE check ! -- GitLab