diff --git a/CMakeLists.txt b/CMakeLists.txt index 4e5604d982c3f13d9c5be7363fd833b055411a95..aec5a1f9594ee66d6f48c93bb02a7ba5bdab0662 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,17 +6,16 @@ set(CMAKE_CXX_STANDARD 14) set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/modules) enable_language(Fortran) -find_package(netCDF-Fortran REQUIRED - HINTS /usr/local/lib/cmake/netCDF/) -find_package(hdf5 REQUIRED - HINTS /usr/local/lib/cmake/hdf5/) +#find_package(netCDF-Fortran REQUIRED +# HINTS /usr/local/lib/cmake/netCDF/) +#set(HDF5_USE_STATIC_LIBRARIES YES) +#find_package(hdf5 REQUIRED HINTS /usr/local/lib/cmake/hdf5/) set(dialect " -free -fimplicit-none ") set(bounds "-free -fimplicit-none ") set(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} ${bounds} -g -fbacktrace -O0 -fcheck=all") set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${dialect}") - include_directories(src) set(src_io src/scm_io_plt.f90 @@ -24,11 +23,34 @@ set(src_io src/io_metadata.f90) -add_library(test_io ${src_io}) - -target_include_directories(test_io PRIVATE ${netCDF_INCLUDE_DIR}) - - -target_link_libraries(test_io PRIVATE netCDF::netcdff) -target_link_libraries(test_io PRIVATE hdf5) - +add_library(lib_scm_io ${src_io}) +#NetCDF handling +execute_process ( + COMMAND bash -c "nc-config --fflags | grep -Eo '^[^ ]+' | tr -d '\n'" + OUTPUT_VARIABLE netcdf_inc +) +cmake_path(SET netcfd_inc_dir " ${netcdf_inc}" ) +message("CMake path is ${netcdf_inc}") +target_compile_options(lib_scm_io PRIVATE ${netcdf_inc}) +#include_directories(${netcdf_inc}) +execute_process ( + COMMAND bash -c "nc-config --flibs | tr -d '\n'" + OUTPUT_VARIABLE temp +) +separate_arguments(netcdff_libs UNIX_COMMAND "${temp}") +execute_process ( + COMMAND bash -c "nc-config --libs | tr -d '\n'" + OUTPUT_VARIABLE temp +) +separate_arguments(netcdf_libs UNIX_COMMAND "${temp}") +#target_include_directories(lib_scm_io PRIVATE ${netCDF_INCLUDE_DIR}) + + +#target_link_libraries(lib_scm_io PRIVATE netCDF::netcdff) +#target_link_libraries(lib_scm_io PRIVATE hdf5) + + +add_executable(test_netcdf_io src/test_netcdf.f90) +target_link_options(test_netcdf_io PRIVATE ${netcdff_libs}) +target_link_options(test_netcdf_io PRIVATE ${netcdf_libs}) +target_link_libraries(test_netcdf_io lib_scm_io) diff --git a/src/test_netcdf.f90 b/src/test_netcdf.f90 index 3dc3d1321da0de704487795810d3b57b872abb00..c76cfc254b27a75987143591e6b2bce62adb76ea 100644 --- a/src/test_netcdf.f90 +++ b/src/test_netcdf.f90 @@ -1,17 +1,72 @@ ! Created by Andrey Debolskiy on 14.06.2024. program test_netcdf - use netcdf_io_module + use io, only: variable_metadata, write_2d_real_nc, write_1d_real_nc implicit none - integer, parameter:: nt = 10, nx = 100 - real t, x - real, dimension(nt) :: series_t; - real, dimension(nx) :: profile; - real, dimension(nx,nt) :: time_scan; - type (io_struct) :: file_nc; - character(20) fname + integer, parameter:: nx = 100, ny = 100 + real x(nx), y(ny), temperature(nx,ny) + character(20) fname_nc + type(variable_metadata) :: meta_x= variable_metadata( & + name = 'X', & + dim_names = [character(len=32) :: 'X','', '', ''], & + char_name = [character(len=32) :: & + 'long_name', & + 'units', & + '', '', '', '', '', '', '', ''], & + char_value = [character(len=32) :: & + 'X', & + 'm', & + '', '', '', '', '', '', '', ''], & + real_name = [character(len=32) :: & + 'missing_value', & + 'scale_factor', & + '', '', '', '', '', '', '', ''], & + real_value = [& + -9999.9, & + 1.0, & + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]) + type(variable_metadata) :: meta_y= variable_metadata( & + name = 'Y', & + dim_names = [character(len=32) :: 'Y','', '', ''], & + char_name = [character(len=32) :: & + 'long_name', & + 'units', & + '', '', '', '', '', '', '', ''], & + char_value = [character(len=32) :: & + 'Y', & + 'm', & + '', '', '', '', '', '', '', ''], & + real_name = [character(len=32) :: & + 'missing_value', & + 'scale_factor', & + '', '', '', '', '', '', '', ''], & + real_value = [& + -9999.9, & + 1.0, & + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]) + type(variable_metadata) :: meta_temperature = variable_metadata( & + name = 'T2M', & + dim_names = [character(len=32) :: 'X','Y','', ''], & + char_name = [character(len=32) :: & + 'long_name', & + 'units', & + '', '', '', '', '', '', '', ''], & + char_value = [character(len=32) :: & + 'Air Temperature', & + 'C', & + '', '', '', '', '', '', '', ''], & + real_name = [character(len=32) :: & + 'missing_value', & + 'scale_factor', & + '', '', '', '', '', '', '', ''], & + real_value = [& + -9999.9, & + 1.0, & + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]) - fname = 'test_io.nc' - call open_netcdf(trim(fname), file_nc, nt, nx, 1, 1) + fname_nc = 'test_io.nc' + call write_1d_real_nc(x,fname_nc,meta_x) + call write_1d_real_nc(y,fname_nc,meta_y) + call write_2d_real_nc(temperature,fname_nc,meta_temperature) end program test_netcdf \ No newline at end of file