diff --git a/CMakeLists.txt b/CMakeLists.txt index 6c8a47a714..091fddcd89 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -76,7 +76,6 @@ project(GSI) option(BUILD_ENKF_PREPROCESS_ARW "Build enkf preprocess for ARW " OFF) option(BUILD_COV_CALC "Build the Desroziers utility" OFF) option(BUILD_NCDIAG "Build the NCDIAG libraries" ON) - option(BUILD_FV3GFS_NCIO "Build the FV3GFS_NCIO library" ON) option(BUILD_NCIO_UTIL "Build the NCIO Utilities" ON) option(BUILD_NCDIAG_SERIAL "Build the serial NCDIAG libraries" ON) option(BUILD_REG_TESTING "Build the Regression Testing Suite" ON) @@ -233,11 +232,13 @@ project(GSI) add_subdirectory(src/ncdiag) set(NCDIAG_LIBRARIES ncdiag ) endif(BUILD_NCDIAG) - if(BUILD_FV3GFS_NCIO) - set(FV3GFS_NCIO_INCS "${PROJECT_BINARY_DIR}/src/fv3gfs_ncio/include") - add_subdirectory(src/fv3gfs_ncio) - set(FV3GFS_NCIO_LIBRARIES fv3gfs_ncio ) - endif(BUILD_FV3GFS_NCIO) +# Set NCIO library from hpc-stack + if(DEFINED ENV{NCIO_LIB}) + set(NCIO_LIB "$ENV{NCIO_LIB}" CACHE INTERNAL "NCIO library" ) + set(NCIO_INC "$ENV{NCIO_INC}" CACHE INTERNAL "NCIO includes" ) + else() + message("src/fv3gfs_ncio not pulled from git, please load ncio from hpc-stack") + endif() if(BUILD_NCIO_UTIL) add_subdirectory(util/netcdf_io) endif(BUILD_NCIO_UTIL) diff --git a/cmake/Modules/setGNUFlags.cmake b/cmake/Modules/setGNUFlags.cmake index e4ef2d9ade..1e1e075fa1 100644 --- a/cmake/Modules/setGNUFlags.cmake +++ b/cmake/Modules/setGNUFlags.cmake @@ -27,7 +27,6 @@ function (setGNU) set(W3NCO_C_FLAGS " -DLINUX -O3 -fconvert=big-endian -ffast-math -fno-second-underscore -frecord-marker=4 -funroll-loops -ggdb -static -Wall -fno-range-check -D_REAL8_ -fopenmp" CACHE INTERNAL "") set(WRFLIB_Fortran_FLAGS " -O3 -fconvert=big-endian -ffast-math -fno-second-underscore -frecord-marker=4 -funroll-loops -ggdb -static -Wall -fno-range-check -D_REAL8_ -fopenmp -ffree-line-length-0" CACHE INTERNAL "") set( NCDIAG_Fortran_FLAGS "-ffree-line-length-none" CACHE INTERNAL "" ) - set( FV3GFS_NCIO_Fortran_FLAGS "-ffree-line-length-none" CACHE INTERNAL "" ) set( NDATE_Fortran_FLAGS "-fconvert=big-endian -DCOMMCODE -DLINUX -DUPPLITTLEENDIAN -O3 -Wl,-noinhibit-exec" CACHE INTERNAL "") set( COV_CALC_FLAGS "-c -O3 -fconvert=little-endian -ffast-math -ffree-form -fno-second-underscore -frecord-marker=4 -funroll-loops -ggdb -static -Wall -fopenmp" CACHE INTERNAL "") set(GSDCLOUD_Fortran_FLAGS "-O3 -fconvert=big-endian" CACHE INTERNAL "") @@ -57,7 +56,6 @@ function (setGNU) set(W3NCO_C_FLAGS " -DLINUX -g -fbacktrace -fconvert=big-endian -ffast-math -fno-second-underscore -frecord-marker=4 -funroll-loops -g -ggdb -static -Wall -fno-range-check -D_REAL8_ -fopenmp" CACHE INTERNAL "") set(WRFLIB_Fortran_FLAGS " -g -fbacktrace -fconvert=big-endian -ffast-math -fno-second-underscore -frecord-marker=4 -funroll-loops -g -ggdb -static -Wall -fno-range-check -D_REAL8_ -fopenmp -ffree-line-length-0" CACHE INTERNAL "") set( NCDIAG_Fortran_FLAGS "-ffree-line-length-none" CACHE INTERNAL "" ) - set( FV3GFS_NCIO_Fortran_FLAGS "-ffree-line-length-none" CACHE INTERNAL "" ) set( NDATE_Fortran_FLAGS "-fconvert=big-endian -DCOMMCODE -DLINUX -DUPPLITTLEENDIAN -g -fbacktrace -Wl,-noinhibit-exec" CACHE INTERNAL "") set( COV_CALC_FLAGS "-c -O3 -fconvert=little-endian -ffast-math -ffree-form -fno-second-underscore -frecord-marker=4 -funroll-loops -ggdb -static -Wall -fopenmp" CACHE INTERNAL "") set(GSDCLOUD_Fortran_FLAGS "-O3 -fconvert=big-endian" CACHE INTERNAL "") diff --git a/cmake/Modules/setIntelFlags.cmake b/cmake/Modules/setIntelFlags.cmake index 88e5061ffc..23346253ef 100644 --- a/cmake/Modules/setIntelFlags.cmake +++ b/cmake/Modules/setIntelFlags.cmake @@ -20,7 +20,6 @@ function(set_LIBRARY_UTIL_Intel) set (W3NCO_C_FLAGS "-O0 -DUNDERSCORE -DLINUX -D__linux__ " CACHE INTERNAL "" ) set (NDATE_Fortran_FLAGS "${HOST_FLAG} -fp-model source -ftz -assume byterecl -convert big_endian -heap-arrays -DCOMMCODE -DLINUX -DUPPLITTLEENDIAN -O3 -Wl,-noinhibit-exec" CACHE INTERNAL "" ) set(NCDIAG_Fortran_FLAGS "-free -assume byterecl -convert big_endian" CACHE INTERNAL "" ) - set(FV3GFS_NCIO_Fortran_FLAGS "-free" CACHE INTERNAL "" ) set(UTIL_Fortran_FLAGS "-O3 ${HOST_FLAG} -warn all -implicitnone -traceback -fp-model strict -convert big_endian -DWRF -D_REAL8_ ${OpenMP_Fortran_FLAGS}" CACHE INTERNAL "") set(UTIL_COM_Fortran_FLAGS "-O3 -fp-model source -convert big_endian -assume byterecl -implicitnone" CACHE INTERNAL "") # set(COV_CALC_FLAGS "-O3 ${HOST_FLAG} -warn all -implicitnone -traceback -fp-model strict -convert little_endian -D_REAL8_ -openmp -fpp -auto" CACHE INTERNAL "" ) @@ -46,7 +45,6 @@ function(set_LIBRARY_UTIL_Debug_Intel) set(W3NCO_4_Fortran_FLAGS " -g -auto -assume nocc_omp -i${intsize} -convert big_endian -assume byterecl -fp-model strict ${OpenMP_Fortran_FLAGS} " CACHE INTERNAL "" ) set(W3NCO_C_FLAGS "-O0 -g -DUNDERSCORE -DLINUX -D__linux__ " CACHE INTERNAL "" ) set(NCDIAG_Fortran_FLAGS "-free -assume byterecl -convert big_endian" CACHE INTERNAL "" ) - set(FV3GFS_NCIO_Fortran_FLAGS "-free" CACHE INTERNAL "" ) set(WRFLIB_Fortran_FLAGS "-DPOUND_FOR_STRINGIFY -O1 -g -fp-model source -assume byterecl -convert big_endian -g -traceback -D_REAL8_ ${MPI_Fortran_COMPILE_FLAGS}" CACHE INTERNAL "") set(NDATE_Fortran_FLAGS "${HOST_FLAG} -fp-model source -ftz -assume byterecl -convert big_endian -heap-arrays -DCOMMCODE -DLINUX -DUPPLITTLEENDIAN -g -Wl,-noinhibit-exec" CACHE INTERNAL "" ) set(WRFLIB_C_FLAGS "-I. -DFortranByte=char -DFortranInt=int -DFortranLlong='long long' -g -Dfunder" CACHE INTERNAL "" ) diff --git a/modulefiles/modulefile.ProdGSI.hera b/modulefiles/modulefile.ProdGSI.hera index 246eb3cd46..7806c2bc62 100644 --- a/modulefiles/modulefile.ProdGSI.hera +++ b/modulefiles/modulefile.ProdGSI.hera @@ -43,3 +43,4 @@ module load bacio/2.4.1 module load crtm/2.3.0 module load netcdf/4.7.4 module load wrf_io/1.2.0 +module load ncio/1.0.0 diff --git a/modulefiles/modulefile.ProdGSI.jet b/modulefiles/modulefile.ProdGSI.jet index 1b97300d01..33dd29ab0d 100644 --- a/modulefiles/modulefile.ProdGSI.jet +++ b/modulefiles/modulefile.ProdGSI.jet @@ -43,3 +43,4 @@ module load bacio/2.4.1 module load crtm/2.3.0 module load netcdf/4.7.4 module load wrf_io/1.2.0 +module load ncio/1.0.0 diff --git a/modulefiles/modulefile.ProdGSI.orion b/modulefiles/modulefile.ProdGSI.orion index 5c4d35247e..d3568b4240 100644 --- a/modulefiles/modulefile.ProdGSI.orion +++ b/modulefiles/modulefile.ProdGSI.orion @@ -48,3 +48,4 @@ module load bacio/2.4.1 module load crtm/2.3.0 module load netcdf/4.7.4 module load wrf_io/1.2.0 +module load ncio/1.0.0 diff --git a/modulefiles/modulefile.ProdGSI.s4 b/modulefiles/modulefile.ProdGSI.s4 index 6f48ad578f..b65f19126c 100644 --- a/modulefiles/modulefile.ProdGSI.s4 +++ b/modulefiles/modulefile.ProdGSI.s4 @@ -30,3 +30,4 @@ module load bacio/2.4.1 module load crtm/2.3.0 module load netcdf/4.7.4 module load wrf_io/1.2.0 +module load ncio/1.0.0 diff --git a/modulefiles/modulefile.ProdGSI.wcoss_d b/modulefiles/modulefile.ProdGSI.wcoss_d index 30207c297d..6b5f26efc8 100644 --- a/modulefiles/modulefile.ProdGSI.wcoss_d +++ b/modulefiles/modulefile.ProdGSI.wcoss_d @@ -44,3 +44,4 @@ module load bacio/2.4.1 module load crtm/2.3.0 module load netcdf/4.7.4 module load wrf_io/1.2.0 +module load ncio/1.0.0 diff --git a/src/enkf/CMakeLists.txt b/src/enkf/CMakeLists.txt index 394c6b52b5..86a93d7bb2 100644 --- a/src/enkf/CMakeLists.txt +++ b/src/enkf/CMakeLists.txt @@ -57,7 +57,7 @@ if(BUILD_ENKF) add_definitions(${MPI_Fortran_FLAGS}) - include_directories(${CMAKE_CURRENT_BINARY_DIR} "${PROJECT_BINARY_DIR}/include/wrf" "${PROJECT_BINARY_DIR}/include/global" ${CMAKE_CURRENT_BINARY_DIR}/.. ${MPI_Fortran_INCLUDE_DIRS} ${MPI_Fortran_INCLUDE_PATH} ${CORE_INCS} ${NETCDF_INCLUDE_DIRS} ${NCDIAG_INCS} ${FV3GFS_NCIO_INCS}) + include_directories(${CMAKE_CURRENT_BINARY_DIR} "${PROJECT_BINARY_DIR}/include/wrf" "${PROJECT_BINARY_DIR}/include/global" ${CMAKE_CURRENT_BINARY_DIR}/.. ${MPI_Fortran_INCLUDE_DIRS} ${MPI_Fortran_INCLUDE_PATH} ${CORE_INCS} ${NETCDF_INCLUDE_DIRS} ${NCDIAG_INCS} ${NCIO_INC}) link_directories(${MPI_Fortran_LIBRARIES}) set_source_files_properties( ${ENKF_SRCS} PROPERTIES COMPILE_FLAGS ${ENKF_Fortran_FLAGS} ) @@ -74,7 +74,7 @@ if(BUILD_ENKF) add_executable(${ENKFEXEC} enkf_main.f90) target_link_libraries(${ENKFEXEC} enkflib enkfdeplib ${GSILIB} ${GSISHAREDLIB} ${CORE_LIBRARIES} ${MPI_Fortran_LIBRARIES} ${LAPACK_LIBRARIES} ${CORE_LIBRARIES} ${CORE_BUILT} - ${NETCDF_Fortran_LIBRARIES} ${NETCDF_C_LIBRARIES} ${FV3GFS_NCIO_LIBRARIES} + ${NETCDF_Fortran_LIBRARIES} ${NETCDF_C_LIBRARIES} ${NCIO_LIB} ${EXTRA_LINKER_FLAGS} ${GSI_LDFLAGS} ${NCDIAG_LIBRARIES}) install(TARGETS ${ENKFEXEC} enkfdeplib enkflib RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin diff --git a/src/enkf/gridinfo_gfs.f90 b/src/enkf/gridinfo_gfs.f90 index 7fdb2f67b0..c2e2b10f57 100644 --- a/src/enkf/gridinfo_gfs.f90 +++ b/src/enkf/gridinfo_gfs.f90 @@ -78,8 +78,8 @@ subroutine getgridinfo(fileprefix, reducedgrid) use nemsio_module, only: nemsio_gfile,nemsio_open,nemsio_close,& nemsio_getfilehead,nemsio_getheadvar,& nemsio_readrecv,nemsio_init, nemsio_realkind -use module_fv3gfs_ncio, only: Dataset, Variable, Dimension, open_dataset,& - read_attribute, close_dataset, get_dim, read_vardata +use module_ncio, only: Dataset, Variable, Dimension, open_dataset,& + read_attribute, close_dataset, get_dim, read_vardata implicit none type(Dataset) :: dset diff --git a/src/enkf/gridio_gfs.f90 b/src/enkf/gridio_gfs.f90 index 8a6bd12507..a93cafba3b 100644 --- a/src/enkf/gridio_gfs.f90 +++ b/src/enkf/gridio_gfs.f90 @@ -61,7 +61,7 @@ module gridio subroutine readgriddata_pnc(vars3d,vars2d,n3d,n2d,levels,ndim,ntimes, & fileprefixes,filesfcprefixes,reducedgrid,grdin,qsat) - use module_fv3gfs_ncio, only: Dataset, Variable, Dimension, open_dataset,& + use module_ncio, only: Dataset, Variable, Dimension, open_dataset,& quantize_data,read_attribute, close_dataset, get_dim, read_vardata implicit none @@ -423,7 +423,7 @@ subroutine readgriddata(nanal1,nanal2,vars3d,vars2d,n3d,n2d,levels,ndim,ntimes, use nemsio_module, only: nemsio_gfile,nemsio_open,nemsio_close,& nemsio_getfilehead,nemsio_getheadvar,nemsio_realkind,nemsio_charkind,& nemsio_readrecv,nemsio_init,nemsio_setheadvar,nemsio_writerecv - use module_fv3gfs_ncio, only: Dataset, Variable, Dimension, open_dataset,& + use module_ncio, only: Dataset, Variable, Dimension, open_dataset,& quantize_data,read_attribute, close_dataset, get_dim, read_vardata implicit none @@ -1032,11 +1032,11 @@ end subroutine readgriddata subroutine writegriddata_pnc(vars3d,vars2d,n3d,n2d,levels,ndim,grdin,no_inflate_flag) use netcdf - use module_fv3gfs_ncio, only: Dataset, Variable, Dimension, open_dataset,& - read_attribute, close_dataset, get_dim, read_vardata,& - create_dataset, get_idate_from_time_units, & - get_time_units_from_idate, write_vardata, & - write_attribute, quantize_data, has_var, has_attr + use module_ncio, only: Dataset, Variable, Dimension, open_dataset,& + read_attribute, close_dataset, get_dim, read_vardata,& + create_dataset, get_idate_from_time_units, & + get_time_units_from_idate, write_vardata, & + write_attribute, quantize_data, has_var, has_attr use constants, only: grav, zero use params, only: nbackgrounds,anlfileprefixes,fgfileprefixes,reducedgrid,& nccompress @@ -1842,11 +1842,11 @@ subroutine writegriddata(nanal1,nanal2,vars3d,vars2d,n3d,n2d,levels,ndim,grdin,n nemsio_readrec,nemsio_writerec,nemsio_intkind,nemsio_charkind,& nemsio_getheadvar,nemsio_realkind,nemsio_getfilehead,& nemsio_readrecv,nemsio_init,nemsio_setheadvar,nemsio_writerecv - use module_fv3gfs_ncio, only: Dataset, Variable, Dimension, open_dataset,& - read_attribute, close_dataset, get_dim, read_vardata,& - create_dataset, get_idate_from_time_units, & - get_time_units_from_idate, write_vardata, & - write_attribute, quantize_data, has_var, has_attr + use module_ncio, only: Dataset, Variable, Dimension, open_dataset,& + read_attribute, close_dataset, get_dim, read_vardata,& + create_dataset, get_idate_from_time_units, & + get_time_units_from_idate, write_vardata, & + write_attribute, quantize_data, has_var, has_attr use constants, only: grav use params, only: nbackgrounds,anlfileprefixes,fgfileprefixes,reducedgrid,& nccompress,write_ensmean @@ -3308,11 +3308,11 @@ subroutine writeincrement(nanal1,nanal2,vars3d,vars2d,n3d,n2d,levels,ndim,grdin, datestring,nhr_anal,write_ensmean use constants, only: grav use mpi - use module_fv3gfs_ncio, only: Dataset, Variable, Dimension, open_dataset,& - read_attribute, close_dataset, get_dim, read_vardata,& - create_dataset, get_idate_from_time_units, & - get_time_units_from_idate, write_vardata, & - write_attribute, quantize_data, has_var, has_attr + use module_ncio, only: Dataset, Variable, Dimension, open_dataset,& + read_attribute, close_dataset, get_dim, read_vardata,& + create_dataset, get_idate_from_time_units, & + get_time_units_from_idate, write_vardata, & + write_attribute, quantize_data, has_var, has_attr implicit none integer, intent(in) :: nanal1,nanal2 @@ -3711,11 +3711,11 @@ subroutine writeincrement_pnc(vars3d,vars2d,n3d,n2d,levels,ndim,grdin,no_inflate datestring,nhr_anal use constants, only: grav use mpi - use module_fv3gfs_ncio, only: Dataset, Variable, Dimension, open_dataset,& - read_attribute, close_dataset, get_dim, read_vardata,& - create_dataset, get_idate_from_time_units, & - get_time_units_from_idate, write_vardata, & - write_attribute, quantize_data, has_var, has_attr + use module_ncio, only: Dataset, Variable, Dimension, open_dataset,& + read_attribute, close_dataset, get_dim, read_vardata,& + create_dataset, get_idate_from_time_units, & + get_time_units_from_idate, write_vardata, & + write_attribute, quantize_data, has_var, has_attr implicit none character(len=max_varname_length), dimension(n2d), intent(in) :: vars2d diff --git a/src/fv3gfs_ncio/CMakeLists.txt b/src/fv3gfs_ncio/CMakeLists.txt deleted file mode 100644 index 08474d7eba..0000000000 --- a/src/fv3gfs_ncio/CMakeLists.txt +++ /dev/null @@ -1,10 +0,0 @@ -cmake_minimum_required(VERSION 2.8) -if(BUILD_FV3GFS_NCIO) - set(Fortran_MODULE_DIRECTORY "${PROJECT_BINARY_DIR}/include") - # NetCDF-4 library - include_directories( ${NETCDF_INCLUDE_DIRS} ${FV3GFS_NCIO_INCS} ) - FILE(GLOB FV3GFS_NCIO_SRC ${CMAKE_CURRENT_SOURCE_DIR}/module_fv3gfs_ncio.f90 ) - set_source_files_properties( ${FV3GFS_NCIO_SRC} PROPERTIES COMPILE_FLAGS ${FV3GFS_NCIO_Fortran_FLAGS} ) - add_library(fv3gfs_ncio STATIC ${FV3GFS_NCIO_SRC}) -endif(BUILD_FV3GFS_NCIO) - diff --git a/src/fv3gfs_ncio/module_fv3gfs_ncio.f90 b/src/fv3gfs_ncio/module_fv3gfs_ncio.f90 deleted file mode 100644 index 51b901bf88..0000000000 --- a/src/fv3gfs_ncio/module_fv3gfs_ncio.f90 +++ /dev/null @@ -1,1338 +0,0 @@ -module module_fv3gfs_ncio -! module for reading/writing netcdf global lat/lon grid files output by FV3GFS. -! assumes netcdf classic data model, nf90_format_netcdf4_classic format. -! handles 32 and 64 bit real variables, 8, 16 and 32 bit integer -! variables and char variables. Variables can have up to 5 dimensions. -! jeff whitaker 201910 - - use netcdf - use mpi - - implicit none - private - - type Variable - integer varid ! netCDF variable ID - integer ndims ! number of dimensions - integer dtype ! netCDF data type - integer natts ! number of attributes - integer deflate_level ! compression level (if > 0) - logical shuffle ! shuffle filter? - logical hasunlim ! has an unlimited dim? - character(len=nf90_max_name) :: name ! variable name - integer, allocatable, dimension(:) :: dimids ! netCDF dimension IDs - ! indices into Dataset%dimensions for associated dimensions. - integer, allocatable, dimension(:) :: dimindxs - ! names of associated dimensions. - character(len=nf90_max_name), allocatable, dimension(:) :: dimnames - ! current dimension lengths (updated after every write_vardata call) - integer, allocatable, dimension(:) :: dimlens - integer, allocatable, dimension(:) :: chunksizes - end type Variable - type Dimension - integer dimid ! netCDF dimension ID - integer len ! dimension length (updated after every write_vardata call) - logical isunlimited ! unlimited? - character(len=nf90_max_name) :: name ! name of dimension - end type Dimension - type Dataset - integer :: ncid ! netCDF ID. - integer :: nvars ! number of variables in dataset - integer :: ndims ! number of dimensions in dataset - integer :: natts ! number of dataset (global) attributes - integer :: nunlimdim ! dimension ID for unlimited dimension - logical :: ishdf5 ! is underlying disk format HDF5? - logical :: isparallel ! was file opened for parallel I/O? - character(len=500) filename ! netCDF filename - ! array of Variable instances - type(Variable), allocatable, dimension(:) :: variables - ! array of Dimension instances - type(Dimension), allocatable, dimension(:) :: dimensions - end type Dataset - - interface read_vardata - module procedure read_vardata_1d_r4, read_vardata_2d_r4, read_vardata_3d_r4,& - read_vardata_4d_r4, read_vardata_5d_r4, & - read_vardata_1d_r8, read_vardata_2d_r8, read_vardata_3d_r8,& - read_vardata_4d_r8, read_vardata_5d_r8, & - read_vardata_1d_int, read_vardata_2d_int, & - read_vardata_3d_int, read_vardata_4d_int, read_vardata_5d_int, & - read_vardata_1d_short, read_vardata_2d_short, & - read_vardata_3d_short, read_vardata_4d_short, read_vardata_5d_short , & - read_vardata_1d_byte, read_vardata_2d_byte, & - read_vardata_3d_byte, read_vardata_4d_byte, read_vardata_5d_byte, & - read_vardata_1d_char, read_vardata_2d_char, & - read_vardata_3d_char, read_vardata_4d_char, read_vardata_5d_char - end interface - - interface write_vardata - module procedure write_vardata_1d_r4, write_vardata_2d_r4, write_vardata_3d_r4,& - write_vardata_4d_r4, write_vardata_1d_r8, write_vardata_2d_r8, write_vardata_3d_r8,& - write_vardata_4d_r8, write_vardata_1d_int, write_vardata_2d_int, & - write_vardata_3d_int, write_vardata_4d_int, & - write_vardata_5d_int, write_vardata_5d_r4, write_vardata_5d_r8, & - write_vardata_1d_short, write_vardata_2d_short, write_vardata_3d_short, & - write_vardata_4d_short, write_vardata_5d_short, & - write_vardata_1d_byte, write_vardata_2d_byte, write_vardata_3d_byte, & - write_vardata_4d_byte, write_vardata_5d_byte, & - write_vardata_1d_char, write_vardata_2d_char, write_vardata_3d_char, & - write_vardata_4d_char, write_vardata_5d_char - end interface - - interface read_attribute - module procedure read_attribute_r4_scalar, read_attribute_int_scalar,& - read_attribute_r8_scalar, read_attribute_r4_1d,& - read_attribute_int_1d, read_attribute_r8_1d, read_attribute_char, & - read_attribute_short_scalar, read_attribute_short_1d, & - read_attribute_byte_scalar, read_attribute_byte_1d - end interface - - interface write_attribute - module procedure write_attribute_r4_scalar, write_attribute_int_scalar,& - write_attribute_r8_scalar, write_attribute_r4_1d,& - write_attribute_int_1d, write_attribute_r8_1d, write_attribute_char, & - write_attribute_short_scalar, write_attribute_short_1d, & - write_attribute_byte_scalar, write_attribute_byte_1d - end interface - - interface quantize_data - module procedure quantize_data_2d, quantize_data_3d, quantize_data_4d - end interface - - public :: open_dataset, create_dataset, close_dataset, Dataset, Variable, Dimension, & - read_vardata, read_attribute, write_vardata, write_attribute, get_ndim, & - get_nvar, get_var, get_dim, get_idate_from_time_units, & - get_time_units_from_idate, quantize_data, has_var, has_attr - - contains - - subroutine nccheck(status,halt,fname) - ! check return code, print error message - implicit none - integer, intent (in) :: status - logical, intent(in), optional :: halt - character(len=*), intent(in), optional :: fname - logical stopit - if (present(halt)) then - stopit = halt - else - stopit = .true. - endif - if (status /= nf90_noerr) then - write(0,*) status, trim(nf90_strerror(status)) - if (present(fname)) then - write(0,*) trim(fname) - end if - if (stopit) stop 99 - end if - end subroutine nccheck - - function get_dim(dset, dimname) result(dim) - type(Dataset) :: dset - type(Dimension) :: dim - character(len=*), intent(in) :: dimname - integer ndim - ndim = get_ndim(dset, dimname) - dim = dset%dimensions(ndim) - end function get_dim - - integer function get_ndim(dset, dimname) - ! get dimension index given name - type(Dataset), intent(in) :: dset - character(len=*), intent(in) :: dimname - integer ndim - get_ndim = -1 - do ndim=1,dset%ndims - if (trim(dset%dimensions(ndim)%name) == trim(dimname)) then - get_ndim = ndim - exit - endif - enddo - end function get_ndim - - function get_var(dset, varname) result (var) - type(Dataset) :: dset - type(Variable) :: var - character(len=*) :: varname - integer nvar - nvar = get_nvar(dset, varname) - var = dset%variables(nvar) - end function get_var - - logical function has_var(dset, varname) - ! returns .true. is varname exists in dset, otherwise .false. - type(Dataset) :: dset - character(len=*) :: varname - integer nvar - nvar = get_nvar(dset, varname) - if (nvar > 0) then - has_var=.true. - else - has_var=.false. - endif - end function has_var - - logical function has_attr(dset, attname, varname) - ! returns .true. if attribute exists in dset, otherwise .false. - ! use optional kwarg varname to check for a variable attribute. - type(Dataset) :: dset - character(len=*) :: attname - character(len=*), optional :: varname - integer nvar, varid, ncerr - nvar = get_nvar(dset, varname) - if(present(varname))then - nvar = get_nvar(dset,varname) - if (nvar < 0) then - has_attr = .false. - return - endif - varid = dset%variables(nvar)%varid - else - varid = NF90_GLOBAL - endif - ncerr = nf90_inquire_attribute(dset%ncid, varid, attname) - if (ncerr /= 0) then - has_attr=.false. - else - has_attr=.true. - endif - end function has_attr - - integer function get_nvar(dset,varname) - ! get variable index given name - type(Dataset), intent(in) :: dset - character(len=*), intent(in) :: varname - integer nvar - get_nvar = -1 - do nvar=1,dset%nvars - if (trim(dset%variables(nvar)%name) == trim(varname)) then - get_nvar = nvar - exit - endif - enddo - end function get_nvar - - subroutine set_varunlimdimlens_(dset,errcode) - ! reset dimension length (dimlens) for unlim dim for all variables - type(Dataset), intent(inout) :: dset - integer, intent(out), optional :: errcode - integer ndim,n,nvar,ncerr - logical return_errcode - if(present(errcode)) then - return_errcode=.true. - errcode = 0 - else - return_errcode=.false. - endif - ! loop over all vars - do nvar=1,dset%nvars - ! does var have unlim dimension? - if (dset%variables(nvar)%hasunlim) then - ! loop over all var dimensions - do ndim=1,dset%variables(nvar)%ndims - n = dset%variables(nvar)%dimindxs(ndim) - ! n is the dimension index for this variable dimension - ! if this dim is unlimited, update dimlens entry - if (dset%dimensions(n)%isunlimited) then - ncerr = nf90_inquire_dimension(dset%ncid,& - dset%dimensions(n)%dimid, & - len=dset%variables(nvar)%dimlens(ndim)) - if (return_errcode) then - call nccheck(ncerr,halt=.false.) - errcode=ncerr - return - else - call nccheck(ncerr) - endif - ! also update len attribute of Dimension object - dset%dimensions(n)%len = dset%variables(nvar)%dimlens(ndim) - endif - enddo - endif - enddo - end subroutine set_varunlimdimlens_ - - function open_dataset(filename,errcode,paropen, mpicomm) result(dset) - ! open existing dataset, create dataset object for reading netcdf file - ! if optional error return code errcode is not specified, - ! program will stop if a nonzero error code returned by the netcdf lib. - implicit none - character(len=*), intent(in) :: filename - type(Dataset) :: dset - integer, intent(out), optional :: errcode - logical, intent(in), optional :: paropen - integer, intent(in), optional :: mpicomm - integer ncerr,nunlimdim,ndim,nvar,n,formatnum - logical return_errcode - if(present(errcode)) then - return_errcode=.true. - errcode = 0 - else - return_errcode=.false. - endif - if (present(paropen)) then - if (paropen) then - dset%isparallel = .true. - else - dset%isparallel = .false. - end if - else - dset%isparallel = .false. - end if - ! open netcdf file, get info, populate Dataset object. - if (dset%isparallel) then - if (present(mpicomm)) then - ncerr = nf90_open(trim(filename), ior(NF90_NOWRITE, NF90_MPIIO), & - comm=mpicomm, info = mpi_info_null, ncid=dset%ncid) - else - ncerr = nf90_open(trim(filename), ior(NF90_NOWRITE, NF90_MPIIO), & - comm=mpi_comm_world, info = mpi_info_null, ncid=dset%ncid) - end if - else - ncerr = nf90_open(trim(filename), NF90_NOWRITE, ncid=dset%ncid) - end if - if (return_errcode) then - call nccheck(ncerr,halt=.false.,fname=filename) - errcode=ncerr - if (ncerr /= 0) return - else - call nccheck(ncerr,fname=filename) - endif - ncerr = nf90_inquire(dset%ncid, dset%ndims, dset%nvars, dset%natts, nunlimdim, formatnum=formatnum) - if (return_errcode) then - errcode=ncerr - call nccheck(ncerr,halt=.false.,fname=filename) - if (ncerr /= 0) return - else - call nccheck(ncerr,fname=filename) - endif - if (formatnum == nf90_format_netcdf4 .or. formatnum == nf90_format_netcdf4_classic) then - dset%ishdf5 = .true. - else - dset%ishdf5 = .false. - endif - dset%filename = trim(filename) - allocate(dset%variables(dset%nvars)) - allocate(dset%dimensions(dset%ndims)) - do ndim=1,dset%ndims - dset%dimensions(ndim)%dimid = ndim - ncerr = nf90_inquire_dimension(dset%ncid, ndim, name=dset%dimensions(ndim)%name, & - len=dset%dimensions(ndim)%len) - if (return_errcode) then - errcode=ncerr - call nccheck(ncerr,halt=.false.,fname=filename) - if (ncerr /= 0) return - else - call nccheck(ncerr,fname=filename) - endif - if (ndim == nunlimdim) then - dset%dimensions(ndim)%isunlimited = .true. - else - dset%dimensions(ndim)%isunlimited = .false. - endif - enddo - do nvar=1,dset%nvars - dset%variables(nvar)%hasunlim = .false. - dset%variables(nvar)%varid = nvar - ncerr = nf90_inquire_variable(dset%ncid, nvar,& - name=dset%variables(nvar)%name,& - natts=dset%variables(nvar)%natts,& - xtype=dset%variables(nvar)%dtype,& - ndims=dset%variables(nvar)%ndims) - if (return_errcode) then - errcode=ncerr - call nccheck(ncerr,halt=.false.,fname=filename) - if (ncerr /= 0) return - else - call nccheck(ncerr,fname=filename) - endif - allocate(dset%variables(nvar)%dimids(dset%variables(nvar)%ndims)) - allocate(dset%variables(nvar)%dimindxs(dset%variables(nvar)%ndims)) - allocate(dset%variables(nvar)%dimlens(dset%variables(nvar)%ndims)) - allocate(dset%variables(nvar)%chunksizes(dset%variables(nvar)%ndims)) - allocate(dset%variables(nvar)%dimnames(dset%variables(nvar)%ndims)) - if (dset%ishdf5) then - ncerr = nf90_inquire_variable(dset%ncid, nvar,& - dimids=dset%variables(nvar)%dimids,& - deflate_level=dset%variables(nvar)%deflate_level,& - chunksizes=dset%variables(nvar)%chunksizes,& - shuffle=dset%variables(nvar)%shuffle) - else - ncerr = nf90_inquire_variable(dset%ncid, nvar,& - dimids=dset%variables(nvar)%dimids) - endif - if (return_errcode) then - errcode=ncerr - call nccheck(ncerr,halt=.false.,fname=filename) - if (ncerr /= 0) return - else - call nccheck(ncerr,fname=filename) - endif - do ndim=1,dset%variables(nvar)%ndims - do n=1,dset%ndims - if (dset%variables(nvar)%dimids(ndim) == dset%dimensions(n)%dimid) then - exit - endif - enddo - dset%variables(nvar)%dimindxs(ndim) = n - dset%variables(nvar)%dimlens(ndim) = dset%dimensions(n)%len - dset%variables(nvar)%dimnames(ndim) = dset%dimensions(n)%name - if (dset%dimensions(n)%isunlimited) then - dset%variables(nvar)%hasunlim = .true. - endif - enddo - enddo - end function open_dataset - - function create_dataset(filename, dsetin, copy_vardata, paropen, nocompress, mpicomm, errcode) result(dset) - ! create new dataset, using an existing dataset object to define - ! variables, dimensions and attributes. - ! If copy_vardata=T, all variable data (not just coordinate - ! variable data) is copied. Default is F (only coord var data - ! copied). - ! if optional nocompress=.true., outputfile will not use compression even if input file does - ! if optional error return code errcode is not specified, - ! program will stop if a nonzero error code returned by the netcdf lib. - implicit none - character(len=*), intent(in) :: filename - character(len=nf90_max_name) :: attname, varname - logical, intent(in), optional :: copy_vardata - type(Dataset) :: dset - type(Dataset), intent(in) :: dsetin - logical, intent(in), optional :: paropen - integer, intent(in), optional :: mpicomm - logical, intent(in), optional :: nocompress - integer, intent(out), optional :: errcode - integer ncerr,ndim,nvar,n,ishuffle,natt - logical copyd, coordvar, compress - real(8), allocatable, dimension(:) :: values_1d - real(8), allocatable, dimension(:,:) :: values_2d - real(8), allocatable, dimension(:,:,:) :: values_3d - real(8), allocatable, dimension(:,:,:,:) :: values_4d - real(8), allocatable, dimension(:,:,:,:,:) :: values_5d - integer, allocatable, dimension(:) :: ivalues_1d - integer, allocatable, dimension(:,:) :: ivalues_2d - integer, allocatable, dimension(:,:,:) :: ivalues_3d - integer, allocatable, dimension(:,:,:,:) :: ivalues_4d - integer, allocatable, dimension(:,:,:,:,:) :: ivalues_5d - character, allocatable, dimension(:) :: cvalues_1d - character, allocatable, dimension(:,:) :: cvalues_2d - character, allocatable, dimension(:,:,:) :: cvalues_3d - character, allocatable, dimension(:,:,:,:) :: cvalues_4d - character, allocatable, dimension(:,:,:,:,:) :: cvalues_5d - logical return_errcode - if(present(errcode)) then - return_errcode=.true. - errcode = 0 - else - return_errcode=.false. - endif - if (present(copy_vardata)) then - copyd = .true. ! copy all variable data - else - copyd = .false. ! only copy coordinate variable data - endif - if (present(paropen)) then - if (paropen) then - dset%isparallel = .true. - else - dset%isparallel = .false. - end if - else - dset%isparallel = .false. - end if - compress = .true. - if (present(nocompress)) then - if (nocompress) then - compress = .false. - end if - end if - ! create netcdf file - if (dsetin%ishdf5) then - if (dset%isparallel) then - if (present(mpicomm)) then - ncerr = nf90_create(trim(filename), & - cmode=IOR(NF90_CLOBBER,NF90_NETCDF4), ncid=dset%ncid, & - comm = mpicomm, info = mpi_info_null) - else - ncerr = nf90_create(trim(filename), & - cmode=IOR(NF90_CLOBBER,NF90_NETCDF4), ncid=dset%ncid, & - comm = mpi_comm_world, info = mpi_info_null) - end if - else - ncerr = nf90_create(trim(filename), & - cmode=IOR(IOR(NF90_CLOBBER,NF90_NETCDF4),NF90_CLASSIC_MODEL), & - !cmode=IOR(NF90_CLOBBER,NF90_NETCDF4), & - ncid=dset%ncid) - end if - dset%ishdf5 = .true. - else - ncerr = nf90_create(trim(filename), & - cmode=IOR(IOR(NF90_CLOBBER,NF90_64BIT_OFFSET),NF90_SHARE), & - ncid=dset%ncid) - dset%ishdf5 = .false. - endif - if (return_errcode) then - errcode=ncerr - call nccheck(ncerr,halt=.false.,fname=filename) - if (ncerr /= 0) return - else - call nccheck(ncerr,fname=filename) - endif - ! copy global attributes - do natt=1,dsetin%natts - ncerr = nf90_inq_attname(dsetin%ncid, NF90_GLOBAL, natt, attname) - if (return_errcode) then - errcode=ncerr - call nccheck(ncerr,halt=.false.) - if (ncerr /= 0) return - else - call nccheck(ncerr) - endif - ncerr = nf90_copy_att(dsetin%ncid, NF90_GLOBAL, attname, dset%ncid, NF90_GLOBAL) - if (return_errcode) then - errcode=ncerr - call nccheck(ncerr,halt=.false.) - if (ncerr /= 0) return - else - call nccheck(ncerr) - endif - enddo - dset%natts = dsetin%natts - dset%filename = trim(filename) - dset%ndims = dsetin%ndims - dset%nvars = dsetin%nvars - allocate(dset%variables(dsetin%nvars)) - allocate(dset%dimensions(dsetin%ndims)) - ! create dimensions - do ndim=1,dsetin%ndims - if (dsetin%dimensions(ndim)%isunlimited) then - ncerr = nf90_def_dim(dset%ncid, trim(dsetin%dimensions(ndim)%name), & - NF90_UNLIMITED, & - dset%dimensions(ndim)%dimid) - if (return_errcode) then - errcode=ncerr - call nccheck(ncerr,halt=.false.) - if (ncerr /= 0) return - else - call nccheck(ncerr) - endif - dset%dimensions(ndim)%isunlimited = .true. - dset%nunlimdim = ndim - dset%dimensions(ndim)%len = 0 - dset%dimensions(ndim)%name = trim(dsetin%dimensions(ndim)%name) - else - ncerr = nf90_def_dim(dset%ncid, trim(dsetin%dimensions(ndim)%name),& - dsetin%dimensions(ndim)%len, & - dset%dimensions(ndim)%dimid) - if (return_errcode) then - errcode=ncerr - call nccheck(ncerr,halt=.false.) - if (ncerr /= 0) return - else - call nccheck(ncerr) - endif - dset%dimensions(ndim)%len = dsetin%dimensions(ndim)%len - dset%dimensions(ndim)%isunlimited = .false. - dset%dimensions(ndim)%name = trim(dsetin%dimensions(ndim)%name) - endif - enddo - ! create variables - do nvar=1,dsetin%nvars - dset%variables(nvar)%hasunlim = .false. - dset%variables(nvar)%ndims = dsetin%variables(nvar)%ndims - allocate(dset%variables(nvar)%dimids(dset%variables(nvar)%ndims)) - allocate(dset%variables(nvar)%dimindxs(dset%variables(nvar)%ndims)) - allocate(dset%variables(nvar)%dimnames(dset%variables(nvar)%ndims)) - allocate(dset%variables(nvar)%dimlens(dset%variables(nvar)%ndims)) - allocate(dset%variables(nvar)%chunksizes(dset%variables(nvar)%ndims)) - dset%variables(nvar)%chunksizes = dsetin%variables(nvar)%chunksizes - do ndim=1,dset%variables(nvar)%ndims - do n=1,dset%ndims - if (trim(dsetin%variables(nvar)%dimnames(ndim)) == & - trim(dset%dimensions(n)%name)) then - exit - endif - enddo - dset%variables(nvar)%dimindxs(ndim) = n - dset%variables(nvar)%dimids(ndim) = dset%dimensions(n)%dimid - dset%variables(nvar)%dimlens(ndim) = dset%dimensions(n)%len - dset%variables(nvar)%dimnames(ndim) = dset%dimensions(n)%name - if (dset%dimensions(n)%isunlimited) then - dset%variables(nvar)%hasunlim = .true. - endif - enddo - dset%variables(nvar)%name = dsetin%variables(nvar)%name - dset%variables(nvar)%dtype = dsetin%variables(nvar)%dtype - if (maxval(dset%variables(nvar)%chunksizes) > 0 .and. dset%ishdf5) then - ! workaround for older versions of netcdf-fortran that don't - ! like zero chunksize to be specified. - ncerr = nf90_def_var(dset%ncid, & - trim(dset%variables(nvar)%name),& - dset%variables(nvar)%dtype, & - dset%variables(nvar)%dimids, & - dset%variables(nvar)%varid, & - chunksizes=dset%variables(nvar)%chunksizes) - else - ncerr = nf90_def_var(dset%ncid, & - trim(dset%variables(nvar)%name),& - dset%variables(nvar)%dtype, & - dset%variables(nvar)%dimids, & - dset%variables(nvar)%varid) - endif - if (return_errcode) then - errcode=ncerr - call nccheck(ncerr,halt=.false.) - if (ncerr /= 0) return - else - call nccheck(ncerr) - endif - if (dsetin%variables(nvar)%deflate_level > 0 .and. dset%ishdf5 .and. compress) then - if (dsetin%variables(nvar)%shuffle) then - ishuffle=1 - else - ishuffle=0 - endif - ncerr = nf90_def_var_deflate(dset%ncid, dset%variables(nvar)%varid,& - ishuffle,1,dsetin%variables(nvar)%deflate_level) - if (return_errcode) then - errcode=ncerr - call nccheck(ncerr,halt=.false.) - if (ncerr /= 0) return - else - call nccheck(ncerr) - endif - dset%variables(nvar)%shuffle = dsetin%variables(nvar)%shuffle - dset%variables(nvar)%deflate_level = & - dsetin%variables(nvar)%deflate_level - endif - ! copy variable attributes - do natt=1,dsetin%variables(nvar)%natts - ncerr = nf90_inq_attname(dsetin%ncid, dsetin%variables(nvar)%varid, natt, attname) - if (return_errcode) then - errcode=ncerr - call nccheck(ncerr,halt=.false.) - if (ncerr /= 0) return - else - call nccheck(ncerr) - endif - if (.not. compress) then - if (trim(attname) == 'max_abs_compression_error' & - .or. trim(attname) == 'nbits') then - cycle - end if - end if - ncerr = nf90_copy_att(dsetin%ncid, dsetin%variables(nvar)%varid, attname, dset%ncid, dset%variables(nvar)%varid) - if (return_errcode) then - errcode=ncerr - call nccheck(ncerr,halt=.false.) - if (ncerr /= 0) return - else - call nccheck(ncerr) - endif - enddo - enddo - ncerr = nf90_enddef(dset%ncid) - if (return_errcode) then - errcode=ncerr - call nccheck(ncerr,halt=.false.) - if (ncerr /= 0) return - else - call nccheck(ncerr) - endif - ! copy variable data - ! assumes data is real (32 or 64 bit), or integer (16 or 32 bit) and 1-4d. - do nvar=1,dsetin%nvars - varname = trim(dsetin%variables(nvar)%name) - ! is this variable a coordinate variable? - coordvar = .false. - if (trim(varname) == 'lats' .or. trim(varname) == 'lons' .or. & - trim(varname) == 'lat' .or. trim(varname) == 'lon') then - coordvar = .true. - else - do ndim=1,dset%ndims - if (trim(varname) == trim(dset%dimensions(ndim)%name)) then - coordvar = .true. - endif - enddo - endif - ! if copy_data flag not given, and not a coordinate var, - ! skip to next var. - if (.not. coordvar .and. .not. copyd) cycle - ! real variable - if (dsetin%variables(nvar)%dtype == NF90_FLOAT .or.& - dsetin%variables(nvar)%dtype == NF90_DOUBLE) then - if (dsetin%variables(nvar)%ndims == 1) then - call read_vardata(dsetin, varname, values_1d) - call write_vardata(dset, varname, values_1d) - else if (dsetin%variables(nvar)%ndims == 2) then - call read_vardata(dsetin, varname, values_2d) - call write_vardata(dset, varname, values_2d) - else if (dsetin%variables(nvar)%ndims == 3) then - call read_vardata(dsetin, varname, values_3d) - call write_vardata(dset, varname, values_3d) - else if (dsetin%variables(nvar)%ndims == 4) then - call read_vardata(dsetin, varname, values_4d) - call write_vardata(dset, varname, values_4d) - else if (dsetin%variables(nvar)%ndims == 5) then - call read_vardata(dsetin, varname, values_5d) - call write_vardata(dset, varname, values_5d) - endif - ! integer var - elseif (dsetin%variables(nvar)%dtype == NF90_INT .or.& - dsetin%variables(nvar)%dtype == NF90_BYTE .or.& - dsetin%variables(nvar)%dtype == NF90_SHORT) then - if (dsetin%variables(nvar)%ndims == 1) then - call read_vardata(dsetin, varname, ivalues_1d) - call write_vardata(dset, varname, ivalues_1d) - else if (dsetin%variables(nvar)%ndims == 2) then - call read_vardata(dsetin, varname, ivalues_2d) - call write_vardata(dset, varname, ivalues_2d) - else if (dsetin%variables(nvar)%ndims == 3) then - call read_vardata(dsetin, varname, ivalues_3d) - call write_vardata(dset, varname, ivalues_3d) - else if (dsetin%variables(nvar)%ndims == 4) then - call read_vardata(dsetin, varname, ivalues_4d) - call write_vardata(dset, varname, ivalues_4d) - else if (dsetin%variables(nvar)%ndims == 5) then - call read_vardata(dsetin, varname, ivalues_5d) - call write_vardata(dset, varname, ivalues_5d) - endif - elseif (dsetin%variables(nvar)%dtype == NF90_CHAR) then - if (dsetin%variables(nvar)%ndims == 1) then - call read_vardata(dsetin, varname, cvalues_1d) - call write_vardata(dset, varname, cvalues_1d) - else if (dsetin%variables(nvar)%ndims == 2) then - call read_vardata(dsetin, varname, cvalues_2d) - call write_vardata(dset, varname, cvalues_2d) - else if (dsetin%variables(nvar)%ndims == 3) then - call read_vardata(dsetin, varname, cvalues_3d) - call write_vardata(dset, varname, cvalues_3d) - else if (dsetin%variables(nvar)%ndims == 4) then - call read_vardata(dsetin, varname, cvalues_4d) - call write_vardata(dset, varname, cvalues_4d) - else if (dsetin%variables(nvar)%ndims == 5) then - call read_vardata(dsetin, varname, cvalues_5d) - call write_vardata(dset, varname, cvalues_5d) - endif - else - print *,'not copying variable ',trim(adjustl(varname)),& - ' (unsupported data type or rank)' - endif - enddo - end function create_dataset - - subroutine close_dataset(dset,errcode) - ! close netcdf file, deallocate members of dataset object. - ! if optional error return code errcode is not specified, - ! program will stop if a nonzero error code returned by the netcdf lib. - type(Dataset), intent(inout) :: dset - integer, intent(out), optional :: errcode - integer ncerr, nvar - logical return_errcode - if(present(errcode)) then - return_errcode=.true. - errcode = 0 - else - return_errcode=.false. - endif - ncerr = nf90_close(ncid=dset%ncid) - if (return_errcode) then - errcode=ncerr - call nccheck(ncerr,halt=.false.) - if (ncerr /= 0) return - else - call nccheck(ncerr) - endif - do nvar=1,dset%nvars - deallocate(dset%variables(nvar)%dimids) - deallocate(dset%variables(nvar)%dimindxs) - deallocate(dset%variables(nvar)%dimlens) - deallocate(dset%variables(nvar)%chunksizes) - deallocate(dset%variables(nvar)%dimnames) - enddo - deallocate(dset%variables,dset%dimensions) - end subroutine close_dataset - - !subroutine read_vardata(dset,varname,values,nslice,slicedim,errcode) - ! read data from variable varname in dataset dset, return in it array values. - ! dset: Input dataset instance returned by open_dataset/create_dataset. - ! varname: Input string name of variable. - ! values: Array to hold variable data. Must be - ! an allocatable array with same rank - ! as variable varname (or 1 dimension less). - ! nslice: optional index along dimension slicedim - ! slicedim: optional, if nslice is set, index of which dimension to slice with - ! nslice, default is ndims - ! ncstart: optional, if ncstart and nccount are set, manually specify the - ! start and count of netCDF read - ! nccount: optional, if ncstart and nccount are set, manually specify the - ! start and count of netCDF read - ! errcode: optional error return code. If not specified, - ! program will stop if a nonzero error code returned - ! from netcdf library. - - !subroutine write_vardata(dset,varname,values,nslice,slicedim,errcode) - ! write data (in array values) to variable varname in dataset dset. - ! dset: Input dataset instance returned by open_dataset/create_dataset. - ! varname: Input string name of variable. - ! values: Array with variable data. Must be - ! an allocatable array with same rank - ! as variable varname (or 1 dimension less). - ! nslice: optional index along dimension slicedim - ! slicedim: optional, if nslice is set, index of which dimension to slice with - ! nslice, default is ndims - ! ncstart: optional, if ncstart and nccount are set, manually specify the - ! start and count of netCDF write - ! nccount: optional, if ncstart and nccount are set, manually specify the - ! start and count of netCDF write - ! errcode: optional error return code. If not specified, - ! program will stop if a nonzero error code returned - ! from netcdf library. - - !subroutine read_attribute(dset, attname, values, varname, errcode) - ! read attribute 'attname' return in 'values'. If optional - ! argument 'varname' is given, a variable attribute is returned. - ! if the attribute is a 1d array, values should be an allocatable 1d - ! array of the correct type. - - !subroutine write_attribute(dset, attname, values, varname, errcode) - ! write attribute 'attname' with data in 'values'. If optional - ! argument 'varname' is given, a variable attribute is written. - ! values can be a real(4), real(8), integer, string or 1d array. - - subroutine read_vardata_1d_r4(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - real(4), allocatable, dimension(:), intent(inout) :: values - include "read_vardata_code_1d.f90" - end subroutine read_vardata_1d_r4 - - subroutine read_vardata_2d_r4(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - real(4), allocatable, dimension(:,:), intent(inout) :: values - include "read_vardata_code_2d.f90" - end subroutine read_vardata_2d_r4 - - subroutine read_vardata_3d_r4(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - real(4), allocatable, dimension(:,:,:), intent(inout) :: values - include "read_vardata_code_3d.f90" - end subroutine read_vardata_3d_r4 - - subroutine read_vardata_4d_r4(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - real(4), allocatable, dimension(:,:,:,:), intent(inout) :: values - include "read_vardata_code_4d.f90" - end subroutine read_vardata_4d_r4 - - subroutine read_vardata_5d_r4(dset, varname, values, errcode) - real(4), allocatable, dimension(:,:,:,:,:), intent(inout) :: values - include "read_vardata_code_5d.f90" - end subroutine read_vardata_5d_r4 - - subroutine read_vardata_1d_r8(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - real(8), allocatable, dimension(:), intent(inout) :: values - include "read_vardata_code_1d.f90" - end subroutine read_vardata_1d_r8 - - subroutine read_vardata_2d_r8(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - real(8), allocatable, dimension(:,:), intent(inout) :: values - include "read_vardata_code_2d.f90" - end subroutine read_vardata_2d_r8 - - subroutine read_vardata_3d_r8(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - real(8), allocatable, dimension(:,:,:), intent(inout) :: values - include "read_vardata_code_3d.f90" - end subroutine read_vardata_3d_r8 - - subroutine read_vardata_4d_r8(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - real(8), allocatable, dimension(:,:,:,:), intent(inout) :: values - include "read_vardata_code_4d.f90" - end subroutine read_vardata_4d_r8 - - subroutine read_vardata_5d_r8(dset, varname, values, errcode) - real(8), allocatable, dimension(:,:,:,:,:), intent(inout) :: values - include "read_vardata_code_5d.f90" - end subroutine read_vardata_5d_r8 - - subroutine read_vardata_1d_int(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - integer, allocatable, dimension(:), intent(inout) :: values - include "read_vardata_code_1d.f90" - end subroutine read_vardata_1d_int - - subroutine read_vardata_2d_int(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - integer, allocatable, dimension(:,:), intent(inout) :: values - include "read_vardata_code_2d.f90" - end subroutine read_vardata_2d_int - - subroutine read_vardata_3d_int(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - integer, allocatable, dimension(:,:,:), intent(inout) :: values - include "read_vardata_code_3d.f90" - end subroutine read_vardata_3d_int - - subroutine read_vardata_4d_int(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - integer, allocatable, dimension(:,:,:,:), intent(inout) :: values - include "read_vardata_code_4d.f90" - end subroutine read_vardata_4d_int - - subroutine read_vardata_5d_int(dset, varname, values, errcode) - integer, allocatable, dimension(:,:,:,:,:), intent(inout) :: values - include "read_vardata_code_5d.f90" - end subroutine read_vardata_5d_int - - subroutine read_vardata_1d_short(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - integer(2), allocatable, dimension(:), intent(inout) :: values - include "read_vardata_code_1d.f90" - end subroutine read_vardata_1d_short - - subroutine read_vardata_2d_short(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - integer(2), allocatable, dimension(:,:), intent(inout) :: values - include "read_vardata_code_2d.f90" - end subroutine read_vardata_2d_short - - subroutine read_vardata_3d_short(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - integer(2), allocatable, dimension(:,:,:), intent(inout) :: values - include "read_vardata_code_3d.f90" - end subroutine read_vardata_3d_short - - subroutine read_vardata_4d_short(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - integer(2), allocatable, dimension(:,:,:,:), intent(inout) :: values - include "read_vardata_code_4d.f90" - end subroutine read_vardata_4d_short - - subroutine read_vardata_5d_short(dset, varname, values, errcode) - integer(2), allocatable, dimension(:,:,:,:,:), intent(inout) :: values - include "read_vardata_code_5d.f90" - end subroutine read_vardata_5d_short - - subroutine read_vardata_1d_byte(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - integer(1), allocatable, dimension(:), intent(inout) :: values - include "read_vardata_code_1d.f90" - end subroutine read_vardata_1d_byte - - subroutine read_vardata_2d_byte(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - integer(1), allocatable, dimension(:,:), intent(inout) :: values - include "read_vardata_code_2d.f90" - end subroutine read_vardata_2d_byte - - subroutine read_vardata_3d_byte(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - integer(1), allocatable, dimension(:,:,:), intent(inout) :: values - include "read_vardata_code_3d.f90" - end subroutine read_vardata_3d_byte - - subroutine read_vardata_4d_byte(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - integer(1), allocatable, dimension(:,:,:,:), intent(inout) :: values - include "read_vardata_code_4d.f90" - end subroutine read_vardata_4d_byte - - subroutine read_vardata_5d_byte(dset, varname, values, errcode) - integer(1), allocatable, dimension(:,:,:,:,:), intent(inout) :: values - include "read_vardata_code_5d.f90" - end subroutine read_vardata_5d_byte - - subroutine read_vardata_1d_char(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - character, allocatable, dimension(:), intent(inout) :: values - include "read_vardata_code_1d.f90" - end subroutine read_vardata_1d_char - - subroutine read_vardata_2d_char(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - character, allocatable, dimension(:,:), intent(inout) :: values - include "read_vardata_code_2d.f90" - end subroutine read_vardata_2d_char - - subroutine read_vardata_3d_char(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - character, allocatable, dimension(:,:,:), intent(inout) :: values - include "read_vardata_code_3d.f90" - end subroutine read_vardata_3d_char - - subroutine read_vardata_4d_char(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - character, allocatable, dimension(:,:,:,:), intent(inout) :: values - include "read_vardata_code_4d.f90" - end subroutine read_vardata_4d_char - - subroutine read_vardata_5d_char(dset, varname, values, errcode) - character, allocatable, dimension(:,:,:,:,:), intent(inout) :: values - include "read_vardata_code_5d.f90" - end subroutine read_vardata_5d_char - - subroutine write_vardata_1d_r4(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - real(4), dimension(:), intent(in) :: values - integer, intent(in), optional :: ncstart(1) - integer, intent(in), optional :: nccount(1) - include "write_vardata_code.f90" - end subroutine write_vardata_1d_r4 - - subroutine write_vardata_2d_r4(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - real(4), dimension(:,:), intent(in) :: values - integer, intent(in), optional :: ncstart(2) - integer, intent(in), optional :: nccount(2) - include "write_vardata_code.f90" - end subroutine write_vardata_2d_r4 - - subroutine write_vardata_3d_r4(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - real(4), dimension(:,:,:), intent(in) :: values - integer, intent(in), optional :: ncstart(3) - integer, intent(in), optional :: nccount(3) - include "write_vardata_code.f90" - end subroutine write_vardata_3d_r4 - - subroutine write_vardata_4d_r4(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - real(4), dimension(:,:,:,:), intent(in) :: values - integer, intent(in), optional :: ncstart(4) - integer, intent(in), optional :: nccount(4) - include "write_vardata_code.f90" - end subroutine write_vardata_4d_r4 - - subroutine write_vardata_5d_r4(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - real(4), dimension(:,:,:,:,:), intent(in) :: values - integer, intent(in), optional :: ncstart(5) - integer, intent(in), optional :: nccount(5) - include "write_vardata_code.f90" - end subroutine write_vardata_5d_r4 - - subroutine write_vardata_1d_r8(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - real(8), dimension(:), intent(in) :: values - integer, intent(in), optional :: ncstart(1) - integer, intent(in), optional :: nccount(1) - include "write_vardata_code.f90" - end subroutine write_vardata_1d_r8 - - subroutine write_vardata_2d_r8(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - real(8), dimension(:,:), intent(in) :: values - integer, intent(in), optional :: ncstart(2) - integer, intent(in), optional :: nccount(2) - include "write_vardata_code.f90" - end subroutine write_vardata_2d_r8 - - subroutine write_vardata_3d_r8(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - real(8), dimension(:,:,:), intent(in) :: values - integer, intent(in), optional :: ncstart(3) - integer, intent(in), optional :: nccount(3) - include "write_vardata_code.f90" - end subroutine write_vardata_3d_r8 - - subroutine write_vardata_4d_r8(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - real(8), dimension(:,:,:,:), intent(in) :: values - integer, intent(in), optional :: ncstart(4) - integer, intent(in), optional :: nccount(4) - include "write_vardata_code.f90" - end subroutine write_vardata_4d_r8 - - subroutine write_vardata_5d_r8(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - real(8), dimension(:,:,:,:,:), intent(in) :: values - integer, intent(in), optional :: ncstart(5) - integer, intent(in), optional :: nccount(5) - include "write_vardata_code.f90" - end subroutine write_vardata_5d_r8 - - subroutine write_vardata_1d_int(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - integer, dimension(:), intent(in) :: values - integer, intent(in), optional :: ncstart(1) - integer, intent(in), optional :: nccount(1) - include "write_vardata_code.f90" - end subroutine write_vardata_1d_int - - subroutine write_vardata_2d_int(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - integer, dimension(:,:), intent(in) :: values - integer, intent(in), optional :: ncstart(2) - integer, intent(in), optional :: nccount(2) - include "write_vardata_code.f90" - end subroutine write_vardata_2d_int - - subroutine write_vardata_3d_int(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - integer, dimension(:,:,:), intent(in) :: values - integer, intent(in), optional :: ncstart(3) - integer, intent(in), optional :: nccount(3) - include "write_vardata_code.f90" - end subroutine write_vardata_3d_int - - subroutine write_vardata_4d_int(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - integer, dimension(:,:,:,:), intent(in) :: values - integer, intent(in), optional :: ncstart(4) - integer, intent(in), optional :: nccount(4) - include "write_vardata_code.f90" - end subroutine write_vardata_4d_int - - subroutine write_vardata_5d_int(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - integer, dimension(:,:,:,:,:), intent(in) :: values - integer, intent(in), optional :: ncstart(5) - integer, intent(in), optional :: nccount(5) - include "write_vardata_code.f90" - end subroutine write_vardata_5d_int - - subroutine write_vardata_1d_short(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - integer(2), dimension(:), intent(in) :: values - integer, intent(in), optional :: ncstart(1) - integer, intent(in), optional :: nccount(1) - include "write_vardata_code.f90" - end subroutine write_vardata_1d_short - - subroutine write_vardata_2d_short(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - integer(2), dimension(:,:), intent(in) :: values - integer, intent(in), optional :: ncstart(2) - integer, intent(in), optional :: nccount(2) - include "write_vardata_code.f90" - end subroutine write_vardata_2d_short - - subroutine write_vardata_3d_short(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - integer(2), dimension(:,:,:), intent(in) :: values - integer, intent(in), optional :: ncstart(3) - integer, intent(in), optional :: nccount(3) - include "write_vardata_code.f90" - end subroutine write_vardata_3d_short - - subroutine write_vardata_4d_short(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - integer(2), dimension(:,:,:,:), intent(in) :: values - integer, intent(in), optional :: ncstart(4) - integer, intent(in), optional :: nccount(4) - include "write_vardata_code.f90" - end subroutine write_vardata_4d_short - - subroutine write_vardata_5d_short(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - integer(2), dimension(:,:,:,:,:), intent(in) :: values - integer, intent(in), optional :: ncstart(5) - integer, intent(in), optional :: nccount(5) - include "write_vardata_code.f90" - end subroutine write_vardata_5d_short - - subroutine write_vardata_1d_byte(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - integer(1), dimension(:), intent(in) :: values - integer, intent(in), optional :: ncstart(1) - integer, intent(in), optional :: nccount(1) - include "write_vardata_code.f90" - end subroutine write_vardata_1d_byte - - subroutine write_vardata_2d_byte(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - integer(1), dimension(:,:), intent(in) :: values - integer, intent(in), optional :: ncstart(2) - integer, intent(in), optional :: nccount(2) - include "write_vardata_code.f90" - end subroutine write_vardata_2d_byte - - subroutine write_vardata_3d_byte(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - integer(1), dimension(:,:,:), intent(in) :: values - integer, intent(in), optional :: ncstart(3) - integer, intent(in), optional :: nccount(3) - include "write_vardata_code.f90" - end subroutine write_vardata_3d_byte - - subroutine write_vardata_4d_byte(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - integer(1), dimension(:,:,:,:), intent(in) :: values - integer, intent(in), optional :: ncstart(4) - integer, intent(in), optional :: nccount(4) - include "write_vardata_code.f90" - end subroutine write_vardata_4d_byte - - subroutine write_vardata_5d_byte(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - integer(1), dimension(:,:,:,:,:), intent(in) :: values - integer, intent(in), optional :: ncstart(5) - integer, intent(in), optional :: nccount(5) - include "write_vardata_code.f90" - end subroutine write_vardata_5d_byte - - subroutine write_vardata_1d_char(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - character, dimension(:), intent(in) :: values - integer, intent(in), optional :: ncstart(1) - integer, intent(in), optional :: nccount(1) - include "write_vardata_code.f90" - end subroutine write_vardata_1d_char - - subroutine write_vardata_2d_char(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - character, dimension(:,:), intent(in) :: values - integer, intent(in), optional :: ncstart(2) - integer, intent(in), optional :: nccount(2) - include "write_vardata_code.f90" - end subroutine write_vardata_2d_char - - subroutine write_vardata_3d_char(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - character, dimension(:,:,:), intent(in) :: values - integer, intent(in), optional :: ncstart(3) - integer, intent(in), optional :: nccount(3) - include "write_vardata_code.f90" - end subroutine write_vardata_3d_char - - subroutine write_vardata_4d_char(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - character, dimension(:,:,:,:), intent(in) :: values - integer, intent(in), optional :: ncstart(4) - integer, intent(in), optional :: nccount(4) - include "write_vardata_code.f90" - end subroutine write_vardata_4d_char - - subroutine write_vardata_5d_char(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode) - character, dimension(:,:,:,:,:), intent(in) :: values - integer, intent(in), optional :: ncstart(5) - integer, intent(in), optional :: nccount(5) - include "write_vardata_code.f90" - end subroutine write_vardata_5d_char - - subroutine read_attribute_int_scalar(dset, attname, values, varname, errcode) - integer, intent(inout) :: values - include "read_scalar_attribute_code.f90" - end subroutine read_attribute_int_scalar - - subroutine read_attribute_short_scalar(dset, attname, values, varname, errcode) - integer(2), intent(inout) :: values - include "read_scalar_attribute_code.f90" - end subroutine read_attribute_short_scalar - - subroutine read_attribute_byte_scalar(dset, attname, values, varname, errcode) - integer(1), intent(inout) :: values - include "read_scalar_attribute_code.f90" - end subroutine read_attribute_byte_scalar - - subroutine read_attribute_r4_scalar(dset, attname, values, varname, errcode) - real(4), intent(inout) :: values - include "read_scalar_attribute_code.f90" - end subroutine read_attribute_r4_scalar - - subroutine read_attribute_r8_scalar(dset, attname, values, varname, errcode) - real(8), intent(inout) :: values - include "read_scalar_attribute_code.f90" - end subroutine read_attribute_r8_scalar - - subroutine read_attribute_r4_1d(dset, attname, values, varname, errcode) - real(4), intent(inout), allocatable, dimension(:) :: values - include "read_attribute_code.f90" - end subroutine read_attribute_r4_1d - - subroutine read_attribute_r8_1d(dset, attname, values, varname, errcode) - real(8), intent(inout), allocatable, dimension(:) :: values - include "read_attribute_code.f90" - end subroutine read_attribute_r8_1d - - subroutine read_attribute_int_1d(dset, attname, values, varname, errcode) - integer, intent(inout), allocatable, dimension(:) :: values - include "read_attribute_code.f90" - end subroutine read_attribute_int_1d - - subroutine read_attribute_short_1d(dset, attname, values, varname, errcode) - integer(2), intent(inout), allocatable, dimension(:) :: values - include "read_attribute_code.f90" - end subroutine read_attribute_short_1d - - subroutine read_attribute_byte_1d(dset, attname, values, varname, errcode) - integer(1), intent(inout), allocatable, dimension(:) :: values - include "read_attribute_code.f90" - end subroutine read_attribute_byte_1d - - subroutine read_attribute_char(dset, attname, values, varname, errcode) - character(len=*), intent(inout) :: values - include "read_scalar_attribute_code.f90" - end subroutine read_attribute_char - - subroutine write_attribute_int_scalar(dset, attname, values, varname, errcode) - integer, intent(in) :: values - include "write_attribute_code.f90" - end subroutine write_attribute_int_scalar - - subroutine write_attribute_short_scalar(dset, attname, values, varname, errcode) - integer(2), intent(in) :: values - include "write_attribute_code.f90" - end subroutine write_attribute_short_scalar - - subroutine write_attribute_byte_scalar(dset, attname, values, varname, errcode) - integer(1), intent(in) :: values - include "write_attribute_code.f90" - end subroutine write_attribute_byte_scalar - - subroutine write_attribute_r4_scalar(dset, attname, values, varname, errcode) - real(4), intent(in) :: values - include "write_attribute_code.f90" - end subroutine write_attribute_r4_scalar - - subroutine write_attribute_r8_scalar(dset, attname, values, varname, errcode) - real(8), intent(in) :: values - include "write_attribute_code.f90" - end subroutine write_attribute_r8_scalar - - subroutine write_attribute_r4_1d(dset, attname, values, varname, errcode) - real(4), intent(in), allocatable, dimension(:) :: values - include "write_attribute_code.f90" - end subroutine write_attribute_r4_1d - - subroutine write_attribute_r8_1d(dset, attname, values, varname, errcode) - real(8), intent(in), allocatable, dimension(:) :: values - include "write_attribute_code.f90" - end subroutine write_attribute_r8_1d - - subroutine write_attribute_int_1d(dset, attname, values, varname, errcode) - integer, intent(in), allocatable, dimension(:) :: values - include "write_attribute_code.f90" - end subroutine write_attribute_int_1d - - subroutine write_attribute_short_1d(dset, attname, values, varname, errcode) - integer(2), intent(in), allocatable, dimension(:) :: values - include "write_attribute_code.f90" - end subroutine write_attribute_short_1d - - subroutine write_attribute_byte_1d(dset, attname, values, varname, errcode) - integer(1), intent(in), allocatable, dimension(:) :: values - include "write_attribute_code.f90" - end subroutine write_attribute_byte_1d - - subroutine write_attribute_char(dset, attname, values, varname, errcode) - character(len=*), intent(in) :: values - include "write_attribute_code.f90" - end subroutine write_attribute_char - - function get_idate_from_time_units(dset) result(idate) - ! return integer array with year,month,day,hour,minute,second - ! parsed from time units attribute. - type(Dataset), intent(in) :: dset - integer idate(6) - character(len=nf90_max_name) :: time_units - integer ipos1,ipos2 - call read_attribute(dset, 'units', time_units, 'time') - ipos1 = scan(time_units,"since",back=.true.)+1 - ipos2 = scan(time_units,"-",back=.false.)-1 - read(time_units(ipos1:ipos2),*) idate(1) - ipos1 = ipos2+2; ipos2=ipos1+1 - read(time_units(ipos1:ipos2),*) idate(2) - ipos1 = ipos2+2; ipos2=ipos1+1 - read(time_units(ipos1:ipos2),*) idate(3) - ipos1 = scan(time_units,":")-2 - ipos2 = ipos1+1 - read(time_units(ipos1:ipos2),*) idate(4) - ipos1 = ipos2+2 - ipos2 = ipos1+1 - read(time_units(ipos1:ipos2),*) idate(5) - ipos1 = ipos2+2 - ipos2 = ipos1+1 - read(time_units(ipos1:ipos2),*) idate(6) - end function get_idate_from_time_units - - function get_time_units_from_idate(idate, time_measure) result(time_units) - ! create time units attribute of form 'hours since YYYY-MM-DD HH:MM:SS' - ! from integer array with year,month,day,hour,minute,second - ! optional argument 'time_measure' can be used to change 'hours' to - ! 'days', 'minutes', 'seconds' etc. - character(len=*), intent(in), optional :: time_measure - integer, intent(in) :: idate(6) - character(len=12) :: timechar - character(len=nf90_max_name) :: time_units - if (present(time_measure)) then - timechar = trim(time_measure) - else - timechar = 'hours' - endif - write(time_units,101) idate -101 format(' since ',i4.4,'-',i2.2,'-',i2.2,' ',& - i2.2,':',i2.2,':',i2.2) - time_units = trim(adjustl(timechar))//time_units - end function get_time_units_from_idate - - subroutine quantize_data_2d(dataIn, dataOut, nbits, compress_err) - real(4), intent(in) :: dataIn(:,:) - real(4), intent(out) :: dataOut(:,:) - include "quantize_data_code.f90" - end subroutine quantize_data_2d - - subroutine quantize_data_3d(dataIn, dataOut, nbits, compress_err) - real(4), intent(in) :: dataIn(:,:,:) - real(4), intent(out) :: dataOut(:,:,:) - include "quantize_data_code.f90" - end subroutine quantize_data_3d - - subroutine quantize_data_4d(dataIn, dataOut, nbits, compress_err) - real(4), intent(in) :: dataIn(:,:,:,:) - real(4), intent(out) :: dataOut(:,:,:,:) - include "quantize_data_code.f90" - end subroutine quantize_data_4d - -end module module_fv3gfs_ncio diff --git a/src/fv3gfs_ncio/quantize_data_code.f90 b/src/fv3gfs_ncio/quantize_data_code.f90 deleted file mode 100644 index ece0f77463..0000000000 --- a/src/fv3gfs_ncio/quantize_data_code.f90 +++ /dev/null @@ -1,17 +0,0 @@ - integer, intent(in) :: nbits - real(4), intent(out) :: compress_err - real(4) dataMin, dataMax, scale_fact, offset - ! if nbits not between 1 and 31, don't do anything - if (nbits <= 0 .or. nbits > 31) then - dataOut = dataIn - compress_err = 0.0 - return - endif - dataMax = maxval(dataIn); dataMin = minval(dataIn) - ! convert data to 32 bit integers in range 0 to 2**nbits-1, then cast - ! cast back to 32 bit floats (data is then quantized in steps - ! proportional to 2**nbits so last 32-nbits in floating - ! point representation should be zero for efficient zlib compression). - scale_fact = (dataMax - dataMin) / (2**nbits-1); offset = dataMin - dataOut = scale_fact*(nint((dataIn - offset) / scale_fact)) + offset - compress_err = maxval(abs(dataIn-dataOut)) diff --git a/src/fv3gfs_ncio/read_attribute_code.f90 b/src/fv3gfs_ncio/read_attribute_code.f90 deleted file mode 100644 index 6a0bcffcd5..0000000000 --- a/src/fv3gfs_ncio/read_attribute_code.f90 +++ /dev/null @@ -1,35 +0,0 @@ - type(Dataset), intent(in) :: dset - character(len=*), intent(in), optional :: varname - character(len=*), intent(in) :: attname - integer, intent(out), optional :: errcode - integer ncerr, varid, nvar, nlen - logical return_errcode - if(present(errcode)) then - return_errcode=.true. - errcode = 0 - else - return_errcode=.false. - endif - if(present(varname))then - nvar = get_nvar(dset,varname) - varid = dset%variables(nvar)%varid - else - varid = NF90_GLOBAL - endif - ncerr = nf90_inquire_attribute(dset%ncid, varid, attname, len=nlen) - if (return_errcode) then - call nccheck(ncerr,halt=.false.) - errcode=ncerr - if (ncerr /= 0) return - else - call nccheck(ncerr) - endif - if (allocated(values)) deallocate(values) - allocate(values(nlen)) - ncerr = nf90_get_att(dset%ncid, varid, trim(attname), values) - if (return_errcode) then - call nccheck(ncerr,halt=.false.) - errcode=ncerr - else - call nccheck(ncerr) - endif diff --git a/src/fv3gfs_ncio/read_scalar_attribute_code.f90 b/src/fv3gfs_ncio/read_scalar_attribute_code.f90 deleted file mode 100644 index 2b8c6ce046..0000000000 --- a/src/fv3gfs_ncio/read_scalar_attribute_code.f90 +++ /dev/null @@ -1,31 +0,0 @@ - ! read attribute 'attname' return in 'values'. If optional - ! argument 'varname' is given, an variable attribute is returned. - ! if the attribute is an 1d array, values should be an allocatable 1d - ! array of the correct type. if values is allocated, it be deallocated - ! and reallocated. - type(Dataset), intent(in) :: dset - character(len=*), intent(in), optional :: varname - integer, intent(out), optional :: errcode - character(len=*), intent(in) :: attname - integer ncerr, varid, nvar - logical return_errcode - if(present(errcode)) then - return_errcode=.true. - errcode = 0 - else - return_errcode=.false. - endif - if(present(varname))then - nvar = get_nvar(dset,varname) - varid = dset%variables(nvar)%varid - else - varid = NF90_GLOBAL - endif - ncerr = nf90_get_att(dset%ncid, varid, trim(attname), values) - if (return_errcode) then - call nccheck(ncerr,halt=.false.) - errcode=ncerr - return - else - call nccheck(ncerr) - endif diff --git a/src/fv3gfs_ncio/read_vardata_code_1d.f90 b/src/fv3gfs_ncio/read_vardata_code_1d.f90 deleted file mode 100644 index 1a92b7fc16..0000000000 --- a/src/fv3gfs_ncio/read_vardata_code_1d.f90 +++ /dev/null @@ -1,75 +0,0 @@ - type(Dataset), intent(in) :: dset - character(len=*), intent(in) :: varname - integer, intent(in), optional :: nslice - integer, intent(in), optional :: slicedim - integer, intent(in), optional :: ncstart(1) - integer, intent(in), optional :: nccount(1) - integer, intent(out), optional :: errcode - integer ncerr, nvar, n, nd, dimlen, ncount - integer, allocatable, dimension(:) :: start, count - logical return_errcode - if(present(errcode)) then - return_errcode=.true. - errcode = 0 - else - return_errcode=.false. - endif - if (present(nslice)) then - ncount = nslice - else - ncount = 1 - endif - nvar = get_nvar(dset,varname) - allocate(start(dset%variables(nvar)%ndims),count(dset%variables(nvar)%ndims)) - start(:) = 1 - count(:) = 1 - if (present(slicedim)) then - nd = slicedim - else - nd = dset%variables(nvar)%ndims - end if - do n=1,dset%variables(nvar)%ndims - if (n == nd) then - start(n) = ncount - count(n) = 1 - else - start(n) = 1 - count(n) = dset%variables(nvar)%dimlens(n) - dimlen = dset%variables(nvar)%dimlens(n) - end if - end do - if (dset%variables(nvar)%ndims /= 1 .and. dset%variables(nvar)%ndims /= 2) then - if (return_errcode) then - call nccheck(ncerr,halt=.false.) - errcode=nf90_ebaddim - return - else - print *,'rank of data array != variable ndims (or ndims-1)' - stop 99 - endif - endif - if (allocated(values)) deallocate(values) - if (present(ncstart) .and. present(nccount)) then - allocate(values(nccount(1))) - start(1)=ncstart(1); count(1)=nccount(1) - if (dset%variables(nvar)%ndims == 2) then - start(2)=1; count(2)=1 - end if - ncerr = nf90_get_var(dset%ncid, dset%variables(nvar)%varid, values,& - start=start, count=count) - else - if (dset%variables(nvar)%ndims == 2) then - allocate(values(dimlen)) - ncerr = nf90_get_var(dset%ncid, dset%variables(nvar)%varid, values,& - start=start, count=count) - else - allocate(values(dset%variables(nvar)%dimlens(1))) - ncerr = nf90_get_var(dset%ncid, dset%variables(nvar)%varid, values) - end if - end if - if (return_errcode) then - call nccheck(ncerr,halt=.false.) - errcode=ncerr - else - call nccheck(ncerr) - endif diff --git a/src/fv3gfs_ncio/read_vardata_code_2d.f90 b/src/fv3gfs_ncio/read_vardata_code_2d.f90 deleted file mode 100644 index c0e62a6abb..0000000000 --- a/src/fv3gfs_ncio/read_vardata_code_2d.f90 +++ /dev/null @@ -1,81 +0,0 @@ - type(Dataset), intent(in) :: dset - character(len=*), intent(in) :: varname - integer, intent(in), optional :: nslice - integer, intent(in), optional :: slicedim - integer, intent(in), optional :: ncstart(2) - integer, intent(in), optional :: nccount(2) - integer, intent(out), optional :: errcode - integer ncerr, nvar, n, nd, ndim, ncount - integer, allocatable, dimension(:) :: start, count - integer :: dimlens(2) - logical return_errcode - if(present(errcode)) then - return_errcode=.true. - errcode = 0 - else - return_errcode=.false. - endif - if (present(nslice)) then - ncount = nslice - else - ncount = 1 - endif - nvar = get_nvar(dset,varname) - allocate(start(dset%variables(nvar)%ndims),count(dset%variables(nvar)%ndims)) - start(:) = 1 - count(:) = 1 - dimlens(:) = 1 - if (present(slicedim)) then - nd = slicedim - else - nd = dset%variables(nvar)%ndims - end if - ndim = 1 - do n=1,dset%variables(nvar)%ndims - if (n == nd) then - start(n) = ncount - count(n) = 1 - else - start(n) = 1 - count(n) = dset%variables(nvar)%dimlens(n) - dimlens(ndim) = dset%variables(nvar)%dimlens(n) - ndim = ndim + 1 - end if - end do - - if (dset%variables(nvar)%ndims /= 2 .and. dset%variables(nvar)%ndims /= 3) then - if (return_errcode) then - call nccheck(ncerr,halt=.false.) - errcode=nf90_ebaddim - return - else - print *,'rank of data array != variable ndims (or ndims-1)' - stop 99 - endif - endif - if (allocated(values)) deallocate(values) - if (present(ncstart) .and. present(nccount)) then - allocate(values(nccount(1),nccount(2))) - start(1)=ncstart(1); count(1)=nccount(1) - start(2)=ncstart(2); count(2)=nccount(2) - if (dset%variables(nvar)%ndims == 3) then - start(3)=1; count(3)=1 - end if - ncerr = nf90_get_var(dset%ncid, dset%variables(nvar)%varid, values,& - start=start, count=count) - else - if (dset%variables(nvar)%ndims == 3) then - allocate(values(dimlens(1),dimlens(2))) - ncerr = nf90_get_var(dset%ncid, dset%variables(nvar)%varid, values,& - start=start, count=count) - else - allocate(values(dset%variables(nvar)%dimlens(1),dset%variables(nvar)%dimlens(2))) - ncerr = nf90_get_var(dset%ncid, dset%variables(nvar)%varid, values) - end if - end if - if (return_errcode) then - call nccheck(ncerr,halt=.false.) - errcode=ncerr - else - call nccheck(ncerr) - endif diff --git a/src/fv3gfs_ncio/read_vardata_code_3d.f90 b/src/fv3gfs_ncio/read_vardata_code_3d.f90 deleted file mode 100644 index cc426b2361..0000000000 --- a/src/fv3gfs_ncio/read_vardata_code_3d.f90 +++ /dev/null @@ -1,85 +0,0 @@ - type(Dataset), intent(in) :: dset - character(len=*), intent(in) :: varname - integer, intent(in), optional :: nslice - integer, intent(in), optional :: slicedim - integer, intent(in), optional :: ncstart(3) - integer, intent(in), optional :: nccount(3) - integer, intent(out), optional :: errcode - integer ncerr, nvar, n, nd, ndim, ncount - integer, allocatable, dimension(:) :: start, count - integer :: dimlens(3) - logical return_errcode - if(present(errcode)) then - return_errcode=.true. - errcode = 0 - else - return_errcode=.false. - endif - if (present(nslice)) then - ncount = nslice - else - ncount = 1 - endif - nvar = get_nvar(dset,varname) - allocate(start(dset%variables(nvar)%ndims),count(dset%variables(nvar)%ndims)) - start(:) = 1 - count(:) = 1 - dimlens(:) = 1 - if (present(slicedim)) then - nd = slicedim - else - nd = dset%variables(nvar)%ndims - end if - ndim = 1 - do n=1,dset%variables(nvar)%ndims - if (n == nd) then - start(n) = ncount - count(n) = 1 - else - start(n) = 1 - count(n) = dset%variables(nvar)%dimlens(n) - dimlens(ndim) = dset%variables(nvar)%dimlens(n) - ndim = ndim + 1 - end if - end do - - if (dset%variables(nvar)%ndims /= 3 .and. dset%variables(nvar)%ndims /= 4) then - if (return_errcode) then - call nccheck(ncerr,halt=.false.) - errcode=nf90_ebaddim - return - else - print *,'rank of data array != variable ndims (or ndims-1)' - stop 99 - endif - endif - - if (allocated(values)) deallocate(values) - if (present(ncstart) .and. present(nccount)) then - allocate(values(nccount(1),nccount(2),nccount(3))) - start(1)=ncstart(1); count(1)=nccount(1) - start(2)=ncstart(2); count(2)=nccount(2) - start(3)=ncstart(3); count(3)=nccount(3) - if (dset%variables(nvar)%ndims == 4) then - start(4)=1; count(4)=1 - end if - ncerr = nf90_get_var(dset%ncid, dset%variables(nvar)%varid, values,& - start=start, count=count) - else - if (dset%variables(nvar)%ndims == 4) then - allocate(values(dimlens(1),dimlens(2),dimlens(3))) - ncerr = nf90_get_var(dset%ncid, dset%variables(nvar)%varid, values,& - start=start, count=count) - else - allocate(values(dset%variables(nvar)%dimlens(1),& - dset%variables(nvar)%dimlens(2),& - dset%variables(nvar)%dimlens(3))) - ncerr = nf90_get_var(dset%ncid, dset%variables(nvar)%varid, values) - end if - end if - if (return_errcode) then - call nccheck(ncerr,halt=.false.) - errcode=ncerr - else - call nccheck(ncerr) - endif diff --git a/src/fv3gfs_ncio/read_vardata_code_4d.f90 b/src/fv3gfs_ncio/read_vardata_code_4d.f90 deleted file mode 100644 index fd3dd42153..0000000000 --- a/src/fv3gfs_ncio/read_vardata_code_4d.f90 +++ /dev/null @@ -1,83 +0,0 @@ - type(Dataset), intent(in) :: dset - character(len=*), intent(in) :: varname - integer, intent(in), optional :: nslice - integer, intent(in), optional :: slicedim - integer, intent(in), optional :: ncstart(4) - integer, intent(in), optional :: nccount(4) - integer, intent(out), optional :: errcode - integer ncerr, nvar, n, nd, ndim, ncount - integer, allocatable, dimension(:) :: start, count - integer :: dimlens(4) - logical return_errcode - if(present(errcode)) then - return_errcode=.true. - errcode = 0 - else - return_errcode=.false. - endif - if (present(nslice)) then - ncount = nslice - else - ncount = 1 - endif - nvar = get_nvar(dset,varname) - allocate(start(dset%variables(nvar)%ndims),count(dset%variables(nvar)%ndims)) - start(:) = 1 - count(:) = 1 - dimlens(:) = 1 - if (present(slicedim)) then - nd = slicedim - else - nd = dset%variables(nvar)%ndims - end if - ndim = 1 - do n=1,dset%variables(nvar)%ndims - if (n == nd) then - start(n) = ncount - count(n) = 1 - else - start(n) = 1 - count(n) = dset%variables(nvar)%dimlens(n) - dimlens(ndim) = dset%variables(nvar)%dimlens(n) - ndim = ndim + 1 - end if - end do - - if (dset%variables(nvar)%ndims /= 4 .and. dset%variables(nvar)%ndims /= 5) then - if (return_errcode) then - call nccheck(ncerr,halt=.false.) - errcode=nf90_ebaddim - return - else - print *,'rank of data array != variable ndims (or ndims-1)' - stop 99 - endif - endif - - if (allocated(values)) deallocate(values) - if (present(ncstart) .and. present(nccount)) then - allocate(values(nccount(1),nccount(2),nccount(3),nccount(4))) - start(1)=ncstart(1); count(1)=nccount(1) - start(2)=ncstart(2); count(2)=nccount(2) - start(3)=ncstart(3); count(3)=nccount(3) - start(4)=ncstart(4); count(4)=nccount(4) - if (dset%variables(nvar)%ndims == 5) then - start(5)=1; count(5)=1 - end if - ncerr = nf90_get_var(dset%ncid, dset%variables(nvar)%varid, values,& - start=start, count=count) - else - allocate(values(dimlens(1),dimlens(2),dimlens(3),dimlens(4))) - if (dset%variables(nvar)%ndims == 5) then - ncerr = nf90_get_var(dset%ncid, dset%variables(nvar)%varid, values,& - start=start, count=count) - else - ncerr = nf90_get_var(dset%ncid, dset%variables(nvar)%varid, values) - end if - end if - if (return_errcode) then - call nccheck(ncerr,halt=.false.) - errcode=ncerr - else - call nccheck(ncerr) - endif diff --git a/src/fv3gfs_ncio/read_vardata_code_5d.f90 b/src/fv3gfs_ncio/read_vardata_code_5d.f90 deleted file mode 100644 index ea9bd2e2cf..0000000000 --- a/src/fv3gfs_ncio/read_vardata_code_5d.f90 +++ /dev/null @@ -1,35 +0,0 @@ - type(Dataset), intent(in) :: dset - character(len=*), intent(in) :: varname - integer, intent(out), optional :: errcode - integer ncerr, nvar, n1,n2,n3,n4,n5 - logical return_errcode - if(present(errcode)) then - return_errcode=.true. - errcode = 0 - else - return_errcode=.false. - endif - nvar = get_nvar(dset,varname) - if (dset%variables(nvar)%ndims /= 5) then - if (return_errcode) then - errcode=nf90_ebaddim - return - else - print *,'rank of data array != variable ndims (or ndims-1)' - stop 99 - endif - endif - n1 = dset%variables(nvar)%dimlens(1) - n2 = dset%variables(nvar)%dimlens(2) - n3 = dset%variables(nvar)%dimlens(3) - n4 = dset%variables(nvar)%dimlens(4) - n5 = dset%variables(nvar)%dimlens(5) - if (allocated(values)) deallocate(values) - allocate(values(n1,n2,n3,n4,n5)) - ncerr = nf90_get_var(dset%ncid, dset%variables(nvar)%varid, values) - if (return_errcode) then - call nccheck(ncerr,halt=.false.) - errcode=ncerr - else - call nccheck(ncerr) - endif diff --git a/src/fv3gfs_ncio/write_attribute_code.f90 b/src/fv3gfs_ncio/write_attribute_code.f90 deleted file mode 100644 index c700a90dc2..0000000000 --- a/src/fv3gfs_ncio/write_attribute_code.f90 +++ /dev/null @@ -1,37 +0,0 @@ - type(Dataset), intent(in) :: dset - character(len=*), intent(in), optional :: varname - character(len=*), intent(in) :: attname - integer, intent(out), optional :: errcode - integer ncerr, varid, nvar - logical return_errcode - if(present(errcode)) then - return_errcode=.true. - errcode = 0 - else - return_errcode=.false. - endif - if(present(varname))then - nvar = get_nvar(dset,varname) - varid = dset%variables(nvar)%varid - else - varid = NF90_GLOBAL - endif - ncerr = nf90_redef(dset%ncid) - if (return_errcode) then - call nccheck(ncerr,halt=.false.) - errcode=ncerr - if (ncerr /= 0) return - else - call nccheck(ncerr) - endif - ncerr = nf90_put_att(dset%ncid, varid, trim(attname), values) - if (return_errcode) then - call nccheck(ncerr,halt=.false.) - errcode=ncerr - ncerr = nf90_enddef(dset%ncid) - return - else - call nccheck(ncerr) - ncerr = nf90_enddef(dset%ncid) - call nccheck(ncerr) - endif diff --git a/src/fv3gfs_ncio/write_vardata_code.f90 b/src/fv3gfs_ncio/write_vardata_code.f90 deleted file mode 100644 index a6f8d4ffb8..0000000000 --- a/src/fv3gfs_ncio/write_vardata_code.f90 +++ /dev/null @@ -1,97 +0,0 @@ - type(Dataset), intent(inout) :: dset - character(len=*), intent(in) :: varname - integer, intent(in), optional :: nslice - integer, intent(in), optional :: slicedim - integer, intent(out), optional :: errcode - integer ncerr, nvar, ncount, ndim, nd, n - integer, allocatable, dimension(:) :: start, count, dimlens - logical is_slice - logical return_errcode - if(present(errcode)) then - return_errcode=.true. - errcode = 0 - else - return_errcode=.false. - endif - if (present(nslice)) then - ncount = nslice - is_slice = .true. - else - ncount = 1 - is_slice = .false. - endif - nvar = get_nvar(dset,varname) - allocate(start(dset%variables(nvar)%ndims),count(dset%variables(nvar)%ndims)) - allocate(dimlens(dset%variables(nvar)%ndims)) - start(:) = 1 - count(:) = 1 - dimlens(:) = 1 - if (present(slicedim)) then - nd = slicedim - else - nd = dset%variables(nvar)%ndims - end if - ndim = 1 - do n=1,dset%variables(nvar)%ndims - if (n == nd) then - start(n) = ncount - count(n) = 1 - else - start(n) = 1 - count(n) = dset%variables(nvar)%dimlens(n) - dimlens(ndim) = dset%variables(nvar)%dimlens(n) - ndim = ndim + 1 - end if - end do - - - - ncerr = nf90_var_par_access(dset%ncid, dset%variables(nvar)%varid, nf90_collective) - if (is_slice) then - if (dset%variables(nvar)%ndims == 4) then - ncerr = nf90_put_var(dset%ncid, dset%variables(nvar)%varid,values, & - start=start,count=count) - else if (dset%variables(nvar)%ndims == 3) then - ncerr = nf90_put_var(dset%ncid, dset%variables(nvar)%varid,values, & - start=start,count=count) - else if (dset%variables(nvar)%ndims == 2) then - ncerr = nf90_put_var(dset%ncid, dset%variables(nvar)%varid,values, & - start=start,count=count) - else if (dset%variables(nvar)%ndims == 1) then - if (return_errcode) then - errcode = -1 - return - else - print *,'cannot write a slice to a 1d variable' - stop 99 - endif - else if (dset%variables(nvar)%ndims > 4) then - if (return_errcode) then - errcode = -1 - return - else - print *,'only variables up to 4d supported' - stop 99 - endif - endif - else if (present(ncstart) .and. present(nccount)) then - ncerr = nf90_put_var(dset%ncid, dset%variables(nvar)%varid,values, & - start=ncstart, count=nccount) - else - ncerr = nf90_put_var(dset%ncid, dset%variables(nvar)%varid, values) - endif - if (return_errcode) then - call nccheck(ncerr,halt=.false.) - errcode=ncerr - if (ncerr /= 0) return - else - call nccheck(ncerr) - endif - ! reset unlim dim size for all variables - if (dset%variables(nvar)%hasunlim) then - if (return_errcode) then - call set_varunlimdimlens_(dset,errcode) - else - call set_varunlimdimlens_(dset) - endif - endif diff --git a/src/gsi/CMakeLists.txt b/src/gsi/CMakeLists.txt index 7621690929..f2e3d22c33 100644 --- a/src/gsi/CMakeLists.txt +++ b/src/gsi/CMakeLists.txt @@ -84,7 +84,7 @@ cmake_minimum_required(VERSION 2.8) # Add the include paths message("MPI include PATH ${MPI_Fortran_INCLUDE_PATH}") - include_directories( ${CORE_INCS} ${NETCDF_INCLUDE_DIRS} ${MPI_Fortran_INCLUDE_PATH} ${FV3GFS_NCIO_INCS} "./" ) + include_directories( ${CORE_INCS} ${NETCDF_INCLUDE_DIRS} ${MPI_Fortran_INCLUDE_PATH} ${NCIO_INC} "./" ) #define the name used for GSI Shared lib and add it with properties and include dirs set(GSISHAREDLIB "gsilib_shrd${debug_suffix}" CACHE INTERNAL "") @@ -149,7 +149,7 @@ cmake_minimum_required(VERSION 2.8) ${CORE_LIBRARIES} ${CORE_BUILT} ${NETCDF_Fortran_LIBRARIES} ${NETCDF_C_LIBRARIES} ${GSI_LDFLAGS} ${NCDIAG_LIBRARIES} ${GSDCLOUD_LIBRARY} ${wrflib} - ${EXTRA_LINKER_FLAGS} ${FV3GFS_NCIO_LIBRARIES}) + ${EXTRA_LINKER_FLAGS} ${NCIO_LIB}) install(TARGETS ${GSIEXEC} RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib diff --git a/src/gsi/cplr_gfs_ensmod.f90 b/src/gsi/cplr_gfs_ensmod.f90 index ac00db4c41..2f31403dc7 100644 --- a/src/gsi/cplr_gfs_ensmod.f90 +++ b/src/gsi/cplr_gfs_ensmod.f90 @@ -898,8 +898,8 @@ subroutine parallel_read_gfsnc_state_(en_full,m_cvars2d,m_cvars3d,nlon,nlat,nsig use constants, only: r60,r3600,zero,one,half,deg2rad use control_vectors, only: cvars2d,cvars3d,nc2d,nc3d use general_sub2grid_mod, only: sub2grid_info - use module_fv3gfs_ncio, only: Dataset, Variable, Dimension, open_dataset,& - close_dataset, get_dim, read_vardata + use module_ncio, only: Dataset, Variable, Dimension, open_dataset,& + close_dataset, get_dim, read_vardata implicit none diff --git a/src/gsi/general_read_gfsatm.f90 b/src/gsi/general_read_gfsatm.f90 index fb7c568b33..b5492649e4 100755 --- a/src/gsi/general_read_gfsatm.f90 +++ b/src/gsi/general_read_gfsatm.f90 @@ -1668,8 +1668,8 @@ subroutine general_read_gfsatm_nc(grd,sp_a,filename,uvflag,vordivflag,zflag, & use constants, only: two,pi,half,deg2rad,r60,r3600 use gsi_bundlemod, only: gsi_bundle use gsi_bundlemod, only: gsi_bundlegetpointer - use module_fv3gfs_ncio, only: Dataset, Variable, Dimension, open_dataset,& - close_dataset, get_dim, read_vardata,get_idate_from_time_units + use module_ncio, only: Dataset, Variable, Dimension, open_dataset,& + close_dataset, get_dim, read_vardata,get_idate_from_time_units use gfsreadmod, only: general_reload implicit none diff --git a/src/gsi/gesinfo.F90 b/src/gsi/gesinfo.F90 index 5d86c04dc6..efa0d514d5 100644 --- a/src/gsi/gesinfo.F90 +++ b/src/gsi/gesinfo.F90 @@ -84,9 +84,9 @@ subroutine gesinfo sigio_sropen use nemsio_module, only: nemsio_init,nemsio_open,nemsio_close use nemsio_module, only: nemsio_gfile,nemsio_getfilehead,nemsio_getheadvar - use module_fv3gfs_ncio, only: Dimension, Dataset, open_dataset, get_dim, & - read_vardata, get_idate_from_time_units,& - read_attribute, close_dataset + use module_ncio, only: Dimension, Dataset, open_dataset, get_dim, & + read_vardata, get_idate_from_time_units,& + read_attribute, close_dataset use constants, only: zero,h300,r60,r3600,i_missing diff --git a/src/gsi/get_gefs_for_regional.f90 b/src/gsi/get_gefs_for_regional.f90 index 4a217f2de3..d37f5648a8 100644 --- a/src/gsi/get_gefs_for_regional.f90 +++ b/src/gsi/get_gefs_for_regional.f90 @@ -78,9 +78,9 @@ subroutine get_gefs_for_regional use nemsio_module, only: nemsio_init,nemsio_open,nemsio_close use ncepnems_io, only: error_msg use nemsio_module, only: nemsio_gfile,nemsio_getfilehead - use module_fv3gfs_ncio, only: Dimension, Dataset, open_dataset, get_dim, & - read_vardata, get_idate_from_time_units,& - read_attribute, close_dataset + use module_ncio, only: Dimension, Dataset, open_dataset, get_dim, & + read_vardata, get_idate_from_time_units,& + read_attribute, close_dataset use get_wrf_mass_ensperts_mod, only: get_wrf_mass_ensperts_class use gsi_io, only: verbose use obsmod, only: l_wcp_cwm diff --git a/src/gsi/gfs_stratosphere.f90 b/src/gsi/gfs_stratosphere.f90 index 4a855673a2..96e5fe89c1 100644 --- a/src/gsi/gfs_stratosphere.f90 +++ b/src/gsi/gfs_stratosphere.f90 @@ -181,9 +181,9 @@ subroutine mix_gfs_nmmb_vcoords(deta1 ,aeta1 ,eta1 ,deta2 ,aeta2 ,eta2 ,pdtop,pt use nemsio_module, only: nemsio_init,nemsio_open,nemsio_close use ncepnems_io, only: error_msg use nemsio_module, only: nemsio_gfile,nemsio_getfilehead - use module_fv3gfs_ncio, only: Dataset, Dimension, get_dim, read_vardata,& - open_dataset, close_dataset, read_attribute,& - get_idate_from_time_units + use module_ncio, only: Dataset, Dimension, get_dim, read_vardata,& + open_dataset, close_dataset, read_attribute,& + get_idate_from_time_units implicit none @@ -900,9 +900,9 @@ subroutine add_gfs_stratosphere use nemsio_module, only: nemsio_init,nemsio_open,nemsio_close use ncepnems_io, only: error_msg use nemsio_module, only: nemsio_gfile,nemsio_getfilehead - use module_fv3gfs_ncio, only: Dataset,Dimension,open_dataset,close_dataset,& - read_attribute,get_dim,read_vardata,& - get_idate_from_time_units + use module_ncio, only: Dataset,Dimension,open_dataset,close_dataset,& + read_attribute,get_dim,read_vardata,& + get_idate_from_time_units implicit none diff --git a/src/gsi/netcdfgfs_io.f90 b/src/gsi/netcdfgfs_io.f90 index dd3f991da5..3869f848ce 100644 --- a/src/gsi/netcdfgfs_io.f90 +++ b/src/gsi/netcdfgfs_io.f90 @@ -390,7 +390,7 @@ subroutine read_atm_ (grd,filename,sp_a,uvflag,vordivflag,zflag, & use general_specmod, only: spec_vars use general_sub2grid_mod, only: sub2grid_info use mpimod, only: npe,mpi_comm_world,ierror,mpi_rtype,mype - use module_fv3gfs_ncio, only: Dataset, Variable, Dimension, open_dataset,& + use module_ncio, only: Dataset, Variable, Dimension, open_dataset,& quantize_data,close_dataset, get_dim, read_vardata, get_idate_from_time_units use egrid2agrid_mod,only: g_egrid2agrid,g_create_egrid2agrid,egrid2agrid_parm,destroy_egrid2agrid use constants, only: two,pi,half,deg2rad @@ -863,7 +863,7 @@ subroutine read_sfc_(sfct,soil_moi,sno,soil_temp,veg_frac,fact10,sfc_rough, & use gridmod, only: nlat_sfc,nlon_sfc use guess_grids, only: nfldsfc,ifilesfc use constants, only: zero,two - use module_fv3gfs_ncio, only: Dataset, Variable, Dimension, open_dataset,& + use module_ncio, only: Dataset, Variable, Dimension, open_dataset,& close_dataset, get_dim, read_vardata, get_idate_from_time_units implicit none @@ -1201,7 +1201,7 @@ subroutine read_sfc_anl_(isli_anl) use kinds, only: r_kind,i_kind,r_single use gridmod, only: nlat,nlon use constants, only: zero - use module_fv3gfs_ncio, only: Dataset, Variable, Dimension, open_dataset,& + use module_ncio, only: Dataset, Variable, Dimension, open_dataset,& close_dataset, get_dim, read_vardata, get_idate_from_time_units implicit none @@ -1365,7 +1365,7 @@ subroutine read_nst_ (tref,dt_cool,z_c,dt_warm,z_w,c_0,c_d,w_0,w_d) use gridmod, only: nlat_sfc,nlon_sfc use constants, only: zero,two use guess_grids, only: nfldnst,ifilenst - use module_fv3gfs_ncio, only: Dataset, Variable, Dimension, open_dataset,& + use module_ncio, only: Dataset, Variable, Dimension, open_dataset,& close_dataset, get_dim, read_vardata, get_idate_from_time_units implicit none @@ -1606,7 +1606,7 @@ subroutine write_atm_ (grd,sp_a,filename,mype_out,gfs_bundle,ibin) use cloud_efr_mod, only: cloud_calc_gfs use netcdf, only: nf90_max_name - use module_fv3gfs_ncio, only: open_dataset, close_dataset, Dimension, Dataset,& + use module_ncio, only: open_dataset, close_dataset, Dimension, Dataset,& read_attribute, write_attribute,get_dim, create_dataset, write_vardata, read_vardata,& get_idate_from_time_units,quantize_data,get_time_units_from_idate,has_attr,has_var use ncepnems_io, only: error_msg @@ -2312,7 +2312,7 @@ subroutine write_sfc_ (filename,mype_sfc,dsfct) use constants, only: zero use netcdf, only: nf90_max_name - use module_fv3gfs_ncio, only: open_dataset, close_dataset, Dimension, Dataset,& + use module_ncio, only: open_dataset, close_dataset, Dimension, Dataset,& get_dim, create_dataset, write_vardata, read_vardata,& get_time_units_from_idate, write_attribute @@ -2521,7 +2521,7 @@ subroutine write_sfc_nst_ (mype_so,dsfct) use gsi_nstcouplermod, only: nst_gsi,zsea1,zsea2 use gridmod, only: rlats,rlons,rlats_sfc,rlons_sfc - use module_fv3gfs_ncio, only: open_dataset, close_dataset, Dimension, Dataset,& + use module_ncio, only: open_dataset, close_dataset, Dimension, Dataset,& get_dim, create_dataset, write_vardata, read_vardata,& get_time_units_from_idate, write_attribute use netcdf, only: nf90_max_name diff --git a/src/gsi/read_files.f90 b/src/gsi/read_files.f90 index 6f1e7a1488..998fdecbab 100644 --- a/src/gsi/read_files.f90 +++ b/src/gsi/read_files.f90 @@ -98,9 +98,9 @@ subroutine read_files(mype) use nemsio_module, only: nemsio_gfile,nemsio_getfilehead,nemsio_getheadvar use read_obsmod, only: gsi_inquire use gsi_io, only: verbose - use module_fv3gfs_ncio, only: Dataset, Dimension, open_dataset, get_dim, & - read_vardata, get_idate_from_time_units, & - close_dataset + use module_ncio, only: Dataset, Dimension, open_dataset, get_dim, & + read_vardata, get_idate_from_time_units, & + close_dataset use chemmod, only: lread_ext_aerosol implicit none diff --git a/src/gsi/read_gfs_ozone_for_regional.f90 b/src/gsi/read_gfs_ozone_for_regional.f90 index 8b2b9ffcb2..96b9af37ea 100644 --- a/src/gsi/read_gfs_ozone_for_regional.f90 +++ b/src/gsi/read_gfs_ozone_for_regional.f90 @@ -66,9 +66,9 @@ subroutine read_gfs_ozone_for_regional use nemsio_module, only: nemsio_init,nemsio_open,nemsio_close use ncepnems_io, only: error_msg use nemsio_module, only: nemsio_gfile,nemsio_getfilehead - use module_fv3gfs_ncio, only: Dataset, Dimension, get_dim, read_vardata,& - open_dataset, close_dataset, read_attribute,& - get_idate_from_time_units + use module_ncio, only: Dataset, Dimension, get_dim, read_vardata,& + open_dataset, close_dataset, read_attribute,& + get_idate_from_time_units implicit none diff --git a/ush/sub_hera b/ush/sub_hera index bbf4df2222..c2f23ca16b 100755 --- a/ush/sub_hera +++ b/ush/sub_hera @@ -123,6 +123,7 @@ echo "#SBATCH --time=$timew" echo "#SBATCH --nodes=$nodes --ntasks-per-node=$procs --cpus-per-task=$threads" >> $cfile #echo "#SBATCH -j oe" >> $cfile echo "#SBATCH --account=$accnt" >> $cfile +echo "#SBATCH --mem=0" >> $cfile #echo "#SBATCH -V" >> $cfile #echo "#PBS -d" >> $cfile #. $exec >> $cfile diff --git a/util/EnKF/gfs/src/calc_increment_ens_ncio.fd/CMakeLists.txt b/util/EnKF/gfs/src/calc_increment_ens_ncio.fd/CMakeLists.txt index 5854233ffa..87845838f6 100644 --- a/util/EnKF/gfs/src/calc_increment_ens_ncio.fd/CMakeLists.txt +++ b/util/EnKF/gfs/src/calc_increment_ens_ncio.fd/CMakeLists.txt @@ -9,6 +9,6 @@ if(BUILD_UTIL) set_target_properties( calc_increment_ens_ncio.x PROPERTIES COMPILE_FLAGS ${UTIL_Fortran_FLAGS} ) set_target_properties( calc_increment_ens_ncio.x PROPERTIES Fortran_MODULE_DIRECTORY ${Util_MODULE_DIRECTORY} ) SET( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_Fortran_FLAGS}" ) - include_directories( ${UTIL_INC} ${NEMSIOINC} ${NETCDF_INCLUDE_DIRS} ${MPI_Fortran_INCLUDE_PATH} ${FV3GFS_NCIO_INCS}) - target_link_libraries( calc_increment_ens_ncio.x ${NEMSIO_LIBRARY} ${BACIO_LIBRARY} ${W3NCO_4_LIBRARY} ${NETCDF_Fortran_LIBRARIES} ${NETCDF_C_LIBRARIES} ${MPI_Fortran_LIBRARIES} ${FV3GFS_NCIO_LIBRARIES}) + include_directories( ${UTIL_INC} ${NEMSIOINC} ${NETCDF_INCLUDE_DIRS} ${MPI_Fortran_INCLUDE_PATH} ${NCIO_INC}) + target_link_libraries( calc_increment_ens_ncio.x ${NEMSIO_LIBRARY} ${BACIO_LIBRARY} ${W3NCO_4_LIBRARY} ${NETCDF_Fortran_LIBRARIES} ${NETCDF_C_LIBRARIES} ${MPI_Fortran_LIBRARIES} ${NCIO_LIB}) endif() diff --git a/util/EnKF/gfs/src/calc_increment_ens_ncio.fd/gfs_ncio_interface.f90 b/util/EnKF/gfs/src/calc_increment_ens_ncio.fd/gfs_ncio_interface.f90 index ddabc66a40..7ea5fc8989 100644 --- a/util/EnKF/gfs/src/calc_increment_ens_ncio.fd/gfs_ncio_interface.f90 +++ b/util/EnKF/gfs/src/calc_increment_ens_ncio.fd/gfs_ncio_interface.f90 @@ -39,7 +39,7 @@ module gfs_ncio_interface !----------------------------------------------------------------------- use namelist_def - use module_fv3gfs_ncio + use module_ncio !----------------------------------------------------------------------- diff --git a/util/EnKF/gfs/src/calc_increment_ncio.fd/CMakeLists.txt b/util/EnKF/gfs/src/calc_increment_ncio.fd/CMakeLists.txt index 716d9019e9..0761152abf 100644 --- a/util/EnKF/gfs/src/calc_increment_ncio.fd/CMakeLists.txt +++ b/util/EnKF/gfs/src/calc_increment_ncio.fd/CMakeLists.txt @@ -6,6 +6,6 @@ if(BUILD_UTIL) add_executable(calc_increment_ncio.x ${LOCAL_SRC} ) set_target_properties( calc_increment_ncio.x PROPERTIES COMPILE_FLAGS ${UTIL_Fortran_FLAGS} ) SET( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_Fortran_FLAGS}" ) - include_directories( ${UTIL_INC} ${NEMSIOINC} ${NETCDF_INCLUDE_DIRS} ${MPI_Fortran_INCLUDE_PATH} ${FV3GFS_NCIO_INCS}) - target_link_libraries( calc_increment_ncio.x ${CORE_LIBRARIES} ${NETCDF_Fortran_LIBRARIES} ${NETCDF_C_LIBRARIES} ${MPI_Fortran_LIBRARIES} ${FV3GFS_NCIO_LIBRARIES} ) + include_directories( ${UTIL_INC} ${NEMSIOINC} ${NETCDF_INCLUDE_DIRS} ${MPI_Fortran_INCLUDE_PATH} ${NCIO_INC}) + target_link_libraries( calc_increment_ncio.x ${CORE_LIBRARIES} ${NETCDF_Fortran_LIBRARIES} ${NETCDF_C_LIBRARIES} ${MPI_Fortran_LIBRARIES} ${NCIO_LIB} ) endif() diff --git a/util/EnKF/gfs/src/calc_increment_ncio.fd/calc_increment_ncio.f90 b/util/EnKF/gfs/src/calc_increment_ncio.fd/calc_increment_ncio.f90 index 4928a62e6c..1bbdfb1b99 100755 --- a/util/EnKF/gfs/src/calc_increment_ncio.fd/calc_increment_ncio.f90 +++ b/util/EnKF/gfs/src/calc_increment_ncio.fd/calc_increment_ncio.f90 @@ -38,10 +38,10 @@ PROGRAM calc_increment_ncio ! !$$$ - use module_fv3gfs_ncio, only: open_dataset, create_dataset, read_attribute, & - Dataset, Dimension, close_dataset, & - read_vardata, write_attribute, write_vardata, & - has_var, has_attr, get_dim + use module_ncio, only: open_dataset, create_dataset, read_attribute, & + Dataset, Dimension, close_dataset, & + read_vardata, write_attribute, write_vardata, & + has_var, has_attr, get_dim use netcdf implicit none diff --git a/util/EnKF/gfs/src/getsfcensmeanp.fd/CMakeLists.txt b/util/EnKF/gfs/src/getsfcensmeanp.fd/CMakeLists.txt index 9750cbc97c..677f926bf2 100644 --- a/util/EnKF/gfs/src/getsfcensmeanp.fd/CMakeLists.txt +++ b/util/EnKF/gfs/src/getsfcensmeanp.fd/CMakeLists.txt @@ -5,6 +5,6 @@ if(BUILD_UTIL) add_executable( getsfcensmeanp.x ${LOCAL_SRC} ) set_target_properties( getsfcensmeanp.x PROPERTIES COMPILE_FLAGS ${UTIL_Fortran_FLAGS} ) SET( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_Fortran_FLAGS}" ) - include_directories( ${NEMSIOINC} ${SFCIOINC} ${NETCDF_INCLUDE_DIRS} ${FV3GFS_NCIO_INCS}) - target_link_libraries( getsfcensmeanp.x ${FV3GFS_NCIO_LIBRARIES} ${BACIO_LIBRARY} ${NEMSIO_LIBRARY} ${BACIO_LIBRARY} ${SFCIO_LIBRARY} ${W3NCO_4_LIBRARY} ${MPI_Fortran_LIBRARIES} ${NETCDF_Fortran_LIBRARIES} ${NETCDF_C_LIBRARIES}) + include_directories( ${NEMSIOINC} ${SFCIOINC} ${NETCDF_INCLUDE_DIRS} ${NCIO_INC}) + target_link_libraries( getsfcensmeanp.x ${NCIO_LIB} ${BACIO_LIBRARY} ${NEMSIO_LIBRARY} ${BACIO_LIBRARY} ${SFCIO_LIBRARY} ${W3NCO_4_LIBRARY} ${MPI_Fortran_LIBRARIES} ${NETCDF_Fortran_LIBRARIES} ${NETCDF_C_LIBRARIES}) endif() diff --git a/util/EnKF/gfs/src/getsfcensmeanp.fd/getsfcensmeanp.f90 b/util/EnKF/gfs/src/getsfcensmeanp.fd/getsfcensmeanp.f90 index d73f74b75a..2589a08603 100644 --- a/util/EnKF/gfs/src/getsfcensmeanp.fd/getsfcensmeanp.f90 +++ b/util/EnKF/gfs/src/getsfcensmeanp.fd/getsfcensmeanp.f90 @@ -25,10 +25,10 @@ program getsfcensmeanp use nemsio_module, only: nemsio_init,nemsio_open,nemsio_close use nemsio_module, only: nemsio_gfile,nemsio_getfilehead,nemsio_readrec,& nemsio_writerec,nemsio_readrecv,nemsio_writerecv - use module_fv3gfs_ncio, only: open_dataset, create_dataset, read_attribute, & - Dataset, Dimension, close_dataset, & - read_vardata, write_attribute, write_vardata, & - get_dim + use module_ncio, only: open_dataset, create_dataset, read_attribute, & + Dataset, Dimension, close_dataset, & + read_vardata, write_attribute, write_vardata, & + get_dim implicit none diff --git a/util/EnKF/gfs/src/getsigensmeanp_smooth.fd/CMakeLists.txt b/util/EnKF/gfs/src/getsigensmeanp_smooth.fd/CMakeLists.txt index ce102ee833..bc04edf528 100644 --- a/util/EnKF/gfs/src/getsigensmeanp_smooth.fd/CMakeLists.txt +++ b/util/EnKF/gfs/src/getsigensmeanp_smooth.fd/CMakeLists.txt @@ -7,7 +7,7 @@ if(BUILD_UTIL) add_executable(getsigensmeanp_smooth.x ${LOCAL_SRC} ) set_target_properties( getsigensmeanp_smooth.x PROPERTIES COMPILE_FLAGS ${LOCAL_Fortran_FLAGS} ) SET( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_Fortran_FLAGS}" ) - include_directories( ${NEMSIOINC} ${SIGIOINC} ${NETCDF_INCLUDE_DIRS} ${FV3GFS_NCIO_INCS}) - target_link_libraries( getsigensmeanp_smooth.x ${FV3GFS_NCIO_LIBRARIES} ${BACIO_LIBRARY} ${NEMSIO_LIBRARY} ${BACIO_LIBRARY} ${SIGIO_LIBRARY} ${W3NCO_4_LIBRARY} ${SP_4_LIBRARY} ${MPI_Fortran_LIBRARIES} ${NETCDF_Fortran_LIBRARIES} ${NETCDF_C_LIBRARIES}) + include_directories( ${NEMSIOINC} ${SIGIOINC} ${NETCDF_INCLUDE_DIRS} ${NCIO_INC}) + target_link_libraries( getsigensmeanp_smooth.x ${NCIO_LIB} ${BACIO_LIBRARY} ${NEMSIO_LIBRARY} ${BACIO_LIBRARY} ${SIGIO_LIBRARY} ${W3NCO_4_LIBRARY} ${SP_4_LIBRARY} ${MPI_Fortran_LIBRARIES} ${NETCDF_Fortran_LIBRARIES} ${NETCDF_C_LIBRARIES}) endif() diff --git a/util/EnKF/gfs/src/getsigensmeanp_smooth.fd/getsigensmeanp_smooth_ncep.f90 b/util/EnKF/gfs/src/getsigensmeanp_smooth.fd/getsigensmeanp_smooth_ncep.f90 index cb622350b1..3b8f5ef3ef 100644 --- a/util/EnKF/gfs/src/getsigensmeanp_smooth.fd/getsigensmeanp_smooth_ncep.f90 +++ b/util/EnKF/gfs/src/getsigensmeanp_smooth.fd/getsigensmeanp_smooth_ncep.f90 @@ -27,10 +27,10 @@ program getsigensmeanp_smooth use nemsio_module, only: nemsio_gfile,nemsio_getfilehead,nemsio_charkind8, & nemsio_readrec,nemsio_writerec, & nemsio_readrecv,nemsio_writerecv - use module_fv3gfs_ncio, only: open_dataset, create_dataset, read_attribute, & - Dataset, Dimension, close_dataset, has_attr, & - read_vardata, write_attribute, write_vardata, & - get_dim, quantize_data, has_var + use module_ncio, only: open_dataset, create_dataset, read_attribute, & + Dataset, Dimension, close_dataset, has_attr, & + read_vardata, write_attribute, write_vardata, & + get_dim, quantize_data, has_var implicit none diff --git a/util/EnKF/gfs/src/getsigensstatp.fd/CMakeLists.txt b/util/EnKF/gfs/src/getsigensstatp.fd/CMakeLists.txt index dfbf5ca596..2657c4c6e2 100644 --- a/util/EnKF/gfs/src/getsigensstatp.fd/CMakeLists.txt +++ b/util/EnKF/gfs/src/getsigensstatp.fd/CMakeLists.txt @@ -6,6 +6,6 @@ if(BUILD_UTIL) set_target_properties( getsigensstatp.x PROPERTIES COMPILE_FLAGS ${UTIL_Fortran_FLAGS} ) SET( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_Fortran_FLAGS}" ) message(" hey, incl dirs are ${MPI_Fortran_INCLUDE_PATH} ") - include_directories( ${NETCDF_INCLUDE_DIRS} ${SIGIOINC} ${NEMSIOINC} ${MPI_Fortran_INCLUDE_PATH} ${FV3GFS_NCIO_INCS}) - target_link_libraries( getsigensstatp.x ${SIGIO_LIBRARY} ${NEMSIO_LIBRARY} ${BACIO_LIBRARY} ${SP_4_LIBRARY} ${W3NCO_4_LIBRARY} ${NETCDF_Fortran_LIBRARIES} ${NETCDF_C_LIBRARIES} ${MPI_Fortran_LIBRARIES} ${FV3GFS_NCIO_LIBRARIES}) + include_directories( ${NETCDF_INCLUDE_DIRS} ${SIGIOINC} ${NEMSIOINC} ${MPI_Fortran_INCLUDE_PATH} ${NCIO_INC}) + target_link_libraries( getsigensstatp.x ${SIGIO_LIBRARY} ${NEMSIO_LIBRARY} ${BACIO_LIBRARY} ${SP_4_LIBRARY} ${W3NCO_4_LIBRARY} ${NETCDF_Fortran_LIBRARIES} ${NETCDF_C_LIBRARIES} ${MPI_Fortran_LIBRARIES} ${NCIO_LIB}) endif() diff --git a/util/EnKF/gfs/src/getsigensstatp.fd/getsigensstatp.f90 b/util/EnKF/gfs/src/getsigensstatp.fd/getsigensstatp.f90 index 197740ef7b..4866fcfc30 100644 --- a/util/EnKF/gfs/src/getsigensstatp.fd/getsigensstatp.f90 +++ b/util/EnKF/gfs/src/getsigensstatp.fd/getsigensstatp.f90 @@ -34,10 +34,10 @@ program getsigensstatp use nemsio_module, only: nemsio_init,nemsio_open,nemsio_close, & nemsio_gfile,nemsio_getfilehead,nemsio_charkind8, & nemsio_readrec,nemsio_readrecv - use module_fv3gfs_ncio, only: open_dataset, create_dataset, read_attribute, & - Dataset, Dimension, close_dataset, & - read_vardata, write_attribute, write_vardata, & - get_dim, quantize_data + use module_ncio, only: open_dataset, create_dataset, read_attribute, & + Dataset, Dimension, close_dataset, & + read_vardata, write_attribute, write_vardata, & + get_dim, quantize_data implicit none diff --git a/util/EnKF/gfs/src/recenterens_ncio.fd/CMakeLists.txt b/util/EnKF/gfs/src/recenterens_ncio.fd/CMakeLists.txt index 7e347146f2..414d449a9f 100644 --- a/util/EnKF/gfs/src/recenterens_ncio.fd/CMakeLists.txt +++ b/util/EnKF/gfs/src/recenterens_ncio.fd/CMakeLists.txt @@ -5,6 +5,6 @@ if(BUILD_UTIL) add_executable(recenterens_ncio.x ${LOCAL_SRC} ) set_target_properties( recenterens_ncio.x PROPERTIES COMPILE_FLAGS ${UTIL_Fortran_FLAGS} ) SET( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_Fortran_FLAGS}" ) - include_directories( ${NETCDF_INCLUDES} ${FV3GFS_NCIO_INCS}) - target_link_libraries( recenterens_ncio.x ${FV3GFS_NCIO_LIBRARIES} ${W3NCO_4_LIBRARY} ${MPI_Fortran_LIBRARIES} ${NETCDF_Fortran_LIBRARIES} ${NETCDF_LIBRARIES} ${HDF5_HL_LIBRARIES} ${HDF5_LIBRARIES}) + include_directories( ${NETCDF_INCLUDES} ${NCIO_INC}) + target_link_libraries( recenterens_ncio.x ${NCIO_LIB} ${W3NCO_4_LIBRARY} ${MPI_Fortran_LIBRARIES} ${NETCDF_Fortran_LIBRARIES} ${NETCDF_LIBRARIES} ${HDF5_HL_LIBRARIES} ${HDF5_LIBRARIES}) endif() diff --git a/util/EnKF/gfs/src/recenterens_ncio.fd/recenterens_ncio.f90 b/util/EnKF/gfs/src/recenterens_ncio.fd/recenterens_ncio.f90 index 6afbb572eb..2e194ed76c 100644 --- a/util/EnKF/gfs/src/recenterens_ncio.fd/recenterens_ncio.f90 +++ b/util/EnKF/gfs/src/recenterens_ncio.fd/recenterens_ncio.f90 @@ -25,10 +25,10 @@ program recenterens_ncio ! !$$$ - use module_fv3gfs_ncio, only: open_dataset, create_dataset, read_attribute, & - Dataset, Dimension, close_dataset, has_attr, has_var, & - read_vardata, write_attribute, write_vardata, & - get_dim, quantize_data + use module_ncio, only: open_dataset, create_dataset, read_attribute, & + Dataset, Dimension, close_dataset, has_attr, has_var, & + read_vardata, write_attribute, write_vardata, & + get_dim, quantize_data implicit none diff --git a/util/EnKF/gfs/src/recenterncio_hybgain.fd/CMakeLists.txt b/util/EnKF/gfs/src/recenterncio_hybgain.fd/CMakeLists.txt index 79199d143f..2348265e56 100644 --- a/util/EnKF/gfs/src/recenterncio_hybgain.fd/CMakeLists.txt +++ b/util/EnKF/gfs/src/recenterncio_hybgain.fd/CMakeLists.txt @@ -5,6 +5,6 @@ if(BUILD_UTIL) add_executable(recenterncio_hybgain.x ${LOCAL_SRC} ) set_target_properties( recenterncio_hybgain.x PROPERTIES COMPILE_FLAGS ${UTIL_Fortran_FLAGS} ) SET( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_Fortran_FLAGS}" ) - include_directories( ${NETCDF_INCLUDE_DIRS} ${FV3GFS_NCIO_INCS}) - target_link_libraries( recenterncio_hybgain.x ${FV3GFS_NCIO_LIBRARIES} ${W3NCO_4_LIBRARY} ${MPI_Fortran_LIBRARIES} ${NETCDF_Fortran_LIBRARIES} ${NETCDF_C_LIBRARIES}) + include_directories( ${NETCDF_INCLUDE_DIRS} ${NCIO_INC}) + target_link_libraries( recenterncio_hybgain.x ${NCIO_LIB} ${W3NCO_4_LIBRARY} ${MPI_Fortran_LIBRARIES} ${NETCDF_Fortran_LIBRARIES} ${NETCDF_C_LIBRARIES}) endif() diff --git a/util/EnKF/gfs/src/recenterncio_hybgain.fd/recenterncio_hybgain.f90 b/util/EnKF/gfs/src/recenterncio_hybgain.fd/recenterncio_hybgain.f90 index 5ab94f071c..1384e3ccfb 100644 --- a/util/EnKF/gfs/src/recenterncio_hybgain.fd/recenterncio_hybgain.f90 +++ b/util/EnKF/gfs/src/recenterncio_hybgain.fd/recenterncio_hybgain.f90 @@ -23,10 +23,10 @@ program recenterncio_hybgain ! !$$$ - use module_fv3gfs_ncio, only: open_dataset, create_dataset, read_attribute, & - Dataset, Dimension, close_dataset, has_attr, & - read_vardata, write_attribute, write_vardata, & - get_dim, quantize_data + use module_ncio, only: open_dataset, create_dataset, read_attribute, & + Dataset, Dimension, close_dataset, has_attr, & + read_vardata, write_attribute, write_vardata, & + get_dim, quantize_data implicit none diff --git a/util/EnKF/gfs/src/recentersigp.fd/CMakeLists.txt b/util/EnKF/gfs/src/recentersigp.fd/CMakeLists.txt index 5c5537a2ef..434cca5267 100644 --- a/util/EnKF/gfs/src/recentersigp.fd/CMakeLists.txt +++ b/util/EnKF/gfs/src/recentersigp.fd/CMakeLists.txt @@ -5,6 +5,6 @@ if(BUILD_UTIL) add_executable(recentersigp.x ${LOCAL_SRC} ) set_target_properties( recentersigp.x PROPERTIES COMPILE_FLAGS ${UTIL_Fortran_FLAGS} ) SET( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_Fortran_FLAGS}" ) - include_directories( ${NEMSIOINC} ${SIGIOINC} ${NETCDF_INCLUDE_DIRS} ${FV3GFS_NCIO_INCS}) - target_link_libraries( recentersigp.x ${FV3GFS_NCIO_LIBRARIES} ${SIGIO_LIBRARY} ${NEMSIO_LIBRARY} ${BACIO_LIBRARY} ${W3NCO_4_LIBRARY} ${MPI_Fortran_LIBRARIES} ${NETCDF_Fortran_LIBRARIES} ${NETCDF_C_LIBRARIES}) + include_directories( ${NEMSIOINC} ${SIGIOINC} ${NETCDF_INCLUDE_DIRS} ${NCIO_INC}) + target_link_libraries( recentersigp.x ${NCIO_LIB} ${SIGIO_LIBRARY} ${NEMSIO_LIBRARY} ${BACIO_LIBRARY} ${W3NCO_4_LIBRARY} ${MPI_Fortran_LIBRARIES} ${NETCDF_Fortran_LIBRARIES} ${NETCDF_C_LIBRARIES}) endif() diff --git a/util/EnKF/gfs/src/recentersigp.fd/recentersigp.f90 b/util/EnKF/gfs/src/recentersigp.fd/recentersigp.f90 index 321845bf35..5a94f2f26b 100644 --- a/util/EnKF/gfs/src/recentersigp.fd/recentersigp.f90 +++ b/util/EnKF/gfs/src/recentersigp.fd/recentersigp.f90 @@ -28,10 +28,10 @@ program recentersigp use nemsio_module, only: nemsio_init,nemsio_open,nemsio_close use nemsio_module, only: nemsio_gfile,nemsio_getfilehead,nemsio_readrec,& nemsio_writerec,nemsio_readrecv,nemsio_writerecv,nemsio_getrechead - use module_fv3gfs_ncio, only: open_dataset, create_dataset, read_attribute, & - Dataset, Dimension, close_dataset, has_attr, has_var, & - read_vardata, write_attribute, write_vardata, & - get_dim, quantize_data + use module_ncio, only: open_dataset, create_dataset, read_attribute, & + Dataset, Dimension, close_dataset, has_attr, has_var, & + read_vardata, write_attribute, write_vardata, & + get_dim, quantize_data implicit none diff --git a/util/netcdf_io/calc_analysis.fd/CMakeLists.txt b/util/netcdf_io/calc_analysis.fd/CMakeLists.txt index 45d7484741..5a993c4a52 100644 --- a/util/netcdf_io/calc_analysis.fd/CMakeLists.txt +++ b/util/netcdf_io/calc_analysis.fd/CMakeLists.txt @@ -8,6 +8,6 @@ if(BUILD_NCIO_UTIL) set_target_properties( calc_analysis.x PROPERTIES COMPILE_FLAGS ${UTIL_Fortran_FLAGS} ) set_target_properties( calc_analysis.x PROPERTIES Fortran_MODULE_DIRECTORY ${Util_MODULE_DIRECTORY} ) SET( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_Fortran_FLAGS}" ) - include_directories( ${UTIL_INC} ${NEMSIOINC} ${NETCDF_INCLUDE_DIRS} ${MPI_Fortran_INCLUDE_PATH} ${FV3GFS_NCIO_INCS}) - target_link_libraries( calc_analysis.x ${FV3GFS_NCIO_LIBRARIES} ${NEMSIO_LIBRARY} ${BACIO_LIBRARY} ${W3NCO_4_LIBRARY} ${NETCDF_Fortran_LIBRARIES} ${NETCDF_C_LIBRARIES} ${MPI_Fortran_LIBRARIES} ) + include_directories( ${UTIL_INC} ${NEMSIOINC} ${NETCDF_INCLUDE_DIRS} ${MPI_Fortran_INCLUDE_PATH} ${NCIO_INC}) + target_link_libraries( calc_analysis.x ${NCIO_LIB} ${NEMSIO_LIBRARY} ${BACIO_LIBRARY} ${W3NCO_4_LIBRARY} ${NETCDF_Fortran_LIBRARIES} ${NETCDF_C_LIBRARIES} ${MPI_Fortran_LIBRARIES} ) endif() diff --git a/util/netcdf_io/calc_analysis.fd/inc2anl.f90 b/util/netcdf_io/calc_analysis.fd/inc2anl.f90 index f18aace835..ba86b183bd 100644 --- a/util/netcdf_io/calc_analysis.fd/inc2anl.f90 +++ b/util/netcdf_io/calc_analysis.fd/inc2anl.f90 @@ -81,7 +81,7 @@ subroutine close_files ! close netCDF files before ending program !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! use vars_calc_analysis, only: fcstncfile, anlncfile - use module_fv3gfs_ncio, only: close_dataset + use module_ncio, only: close_dataset implicit none call close_dataset(fcstncfile) @@ -99,8 +99,8 @@ subroutine copy_ges_to_anl(varname) use vars_calc_analysis, only: fcstncfile, anlncfile, & nlat, nlon, nlev, anlfile, use_nemsio_anl, & mype, levpe - use module_fv3gfs_ncio, only: Dataset, read_vardata, write_vardata, & - open_dataset, close_dataset, has_var + use module_ncio, only: Dataset, read_vardata, write_vardata, & + open_dataset, close_dataset, has_var use nemsio_module implicit none character(7), intent(in) :: varname @@ -176,8 +176,8 @@ subroutine add_increment(fcstvar, incvar) use vars_calc_analysis, only: fcstncfile, anlncfile, incr_file,& nlat, nlon, nlev, anlfile, use_nemsio_anl, & levpe, mype - use module_fv3gfs_ncio, only: Dataset, read_vardata, write_vardata, & - open_dataset, close_dataset, has_var + use module_ncio, only: Dataset, read_vardata, write_vardata, & + open_dataset, close_dataset, has_var use nemsio_module implicit none ! input vars @@ -232,8 +232,8 @@ subroutine add_psfc_increment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! use vars_calc_analysis, only: fcstncfile, anlncfile, nlat, nlon, incr_file,& use_nemsio_anl, anlfile, nlev - use module_fv3gfs_ncio, only: Dataset, open_dataset, close_dataset,& - read_vardata, write_vardata, read_attribute + use module_ncio, only: Dataset, open_dataset, close_dataset,& + read_vardata, write_vardata, read_attribute use nemsio_module implicit none ! local variables diff --git a/util/netcdf_io/calc_analysis.fd/init_io.f90 b/util/netcdf_io/calc_analysis.fd/init_io.f90 index aa7e0f10c7..cc21d586f3 100644 --- a/util/netcdf_io/calc_analysis.fd/init_io.f90 +++ b/util/netcdf_io/calc_analysis.fd/init_io.f90 @@ -26,9 +26,9 @@ subroutine init_read_bg idate6, nlon, nlat, nlev, & use_nemsio_anl, lats, lons, vcoord, & mype, npes, levpe - use module_fv3gfs_ncio, only: Dimension, open_dataset, get_dim,& - get_idate_from_time_units, & - read_vardata, read_attribute + use module_ncio, only: Dimension, open_dataset, get_dim,& + get_idate_from_time_units, & + read_vardata, read_attribute implicit none ! variables local to this subroutine integer ::k,kk,ilev @@ -84,8 +84,8 @@ subroutine init_write_anl fhr, nfhour, nfminute, nfsecondn, nfsecondd,& use_nemsio_anl, anlncfile, fcstncfile,& nlon, nlat, nlev, lats, lons, vcoord, mype - use module_fv3gfs_ncio, only: create_dataset, get_time_units_from_idate,& - write_vardata, write_attribute + use module_ncio, only: create_dataset, get_time_units_from_idate,& + write_vardata, write_attribute use netcdf, only: nf90_max_name use nemsio_module implicit none diff --git a/util/netcdf_io/calc_analysis.fd/vars_calc_analysis.f90 b/util/netcdf_io/calc_analysis.fd/vars_calc_analysis.f90 index 770783ebb0..c02ffd5aee 100644 --- a/util/netcdf_io/calc_analysis.fd/vars_calc_analysis.f90 +++ b/util/netcdf_io/calc_analysis.fd/vars_calc_analysis.f90 @@ -9,7 +9,7 @@ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! module vars_calc_analysis use nemsio_module, only: nemsio_gfile - use module_fv3gfs_ncio, only: Dataset + use module_ncio, only: Dataset implicit none private