From a5e04c1018fb35beaa16779c7e2aa49cb2d9ce9e Mon Sep 17 00:00:00 2001
From: Andrey Debolskiy <and.debol@gmail.com>
Date: Fri, 18 Oct 2024 01:00:12 +0300
Subject: [PATCH] update cmakelists to work with netcdff

---
 CMakeLists.txt      | 48 +++++++++++++++++++++--------
 src/test_netcdf.f90 | 75 +++++++++++++++++++++++++++++++++++++++------
 2 files changed, 100 insertions(+), 23 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4e5604d..aec5a1f 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 3dc3d13..c76cfc2 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
-- 
GitLab