Skip to content
Snippets Groups Projects
Commit 493f2299 authored by Evgeny Mortikov's avatar Evgeny Mortikov
Browse files

adding configuration file support

parent 788deffa
No related branches found
No related tags found
No related merge requests found
...@@ -4,7 +4,7 @@ option(INCLUDE_CUDA "GPU build in mode" OFF) ...@@ -4,7 +4,7 @@ option(INCLUDE_CUDA "GPU build in mode" OFF)
option(USE_CXX "CXX build in mode" OFF) option(USE_CXX "CXX build in mode" OFF)
option(BUILD_DOC "Build documentation" OFF) option(BUILD_DOC "Build documentation" OFF)
option(SFX_CHECK_NAN "Build documentation" OFF) option(SFX_CHECK_NAN "Build documentation" OFF)
option(USE_CONFIG_PARSER "Build config parser" OFF) option(USE_CONFIG_PARSER "Build config parser" ON)
project(INMCM_sfx) project(INMCM_sfx)
enable_language(Fortran) enable_language(Fortran)
...@@ -156,10 +156,14 @@ if(USE_CONFIG_PARSER) ...@@ -156,10 +156,14 @@ if(USE_CONFIG_PARSER)
target_link_libraries(sfx parser_F parser_CXX) target_link_libraries(sfx parser_F parser_CXX)
endif(USE_CONFIG_PARSER) endif(USE_CONFIG_PARSER)
# copy data & configs on post build
#copy data on post build
add_custom_command( add_custom_command(
TARGET sfx POST_BUILD TARGET sfx POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/data ${CMAKE_SOURCE_DIR}/data
${CMAKE_CURRENT_BINARY_DIR}/data) ${CMAKE_CURRENT_BINARY_DIR}/data)
add_custom_command(
TARGET sfx POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/config-ex
${CMAKE_CURRENT_BINARY_DIR}/config-ex)
model.id = "esm"; # optional: "esm" (default), "sheba", "most", "log"
dataset {
id = "mosaic"; # optional: "mosaic" (default), "irgason", "sheba",
# "lake", "papa", "toga", "user"
# --- redefine dataset
# filename = "data/mosaic.txt";
# surface_type = "land";
# h = 3.8; # meauserement height [m]
# z0_m = 0.01; # aerodynamic roughness [m]
# z0_h = -1; # no prescribed value
# -> using scheme assigned by surface type
# nmax = 16; # limit number of dataset points
}
output {
filename = "output-" + dataset.id + ".txt";
}
#include "call_parser.h" #include "call_parser.h"
#include <stdio.h> #include <stdio.h>
#include "ISO_Fortran_binding.h"
int run(const char* filename) int run(const char* filename)
{ {
......
...@@ -348,17 +348,29 @@ program sfx_main ...@@ -348,17 +348,29 @@ program sfx_main
call set_dataset(dataset, id) call set_dataset(dataset, id)
dataset%nmax = nmax dataset%nmax = nmax
if (dataset%id == dataset_user) then call is_varname("dataset.filename"//C_NULL_CHAR, status)
if ((status /= 0).or.(dataset%id == dataset_user)) then
!< mandatory in user dataset
call get_charf("dataset.filename"//C_NULL_CHAR, config_field)
dataset%filename = char_array2str(config_field)
end if
call is_varname("dataset.h"//C_NULL_CHAR, status)
if ((status /= 0).or.(dataset%id == dataset_user)) then
!< mandatory in user dataset
call get_float("dataset.h"//C_NULL_CHAR, dataset%h) call get_float("dataset.h"//C_NULL_CHAR, dataset%h)
end if
call is_varname("dataset.z0_m"//C_NULL_CHAR, status)
if ((status /= 0).or.(dataset%id == dataset_user)) then
!< mandatory in user dataset
call get_float("dataset.z0_m"//C_NULL_CHAR, dataset%z0_m) call get_float("dataset.z0_m"//C_NULL_CHAR, dataset%z0_m)
call get_float("dataset.z0_h"//C_NULL_CHAR, dataset%z0_h)
end if end if
call is_varname("dataset.filename"//C_NULL_CHAR, status) call is_varname("dataset.z0_h"//C_NULL_CHAR, status)
if ((status /= 0).or.(dataset%id == dataset_user)) then if ((status /= 0).or.(dataset%id == dataset_user)) then
call get_charf("dataset.filename"//C_NULL_CHAR, config_field) !< mandatory in user dataset
dataset%filename = char_array2str(config_field) call get_float("dataset.z0_h"//C_NULL_CHAR, dataset%z0_h)
end if end if
end if end if
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment