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

adding configuration file support

parent 788deffa
Branches
Tags
No related merge requests found
......@@ -4,7 +4,7 @@ option(INCLUDE_CUDA "GPU build in mode" OFF)
option(USE_CXX "CXX build in mode" OFF)
option(BUILD_DOC "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)
enable_language(Fortran)
......@@ -156,10 +156,14 @@ if(USE_CONFIG_PARSER)
target_link_libraries(sfx parser_F parser_CXX)
endif(USE_CONFIG_PARSER)
#copy data on post build
# copy data & configs on post build
add_custom_command(
TARGET sfx POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_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 <stdio.h>
#include "ISO_Fortran_binding.h"
int run(const char* filename)
{
......
......@@ -348,17 +348,29 @@ program sfx_main
call set_dataset(dataset, id)
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)
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_h"//C_NULL_CHAR, dataset%z0_h)
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
call get_charf("dataset.filename"//C_NULL_CHAR, config_field)
dataset%filename = char_array2str(config_field)
!< mandatory in user dataset
call get_float("dataset.z0_h"//C_NULL_CHAR, dataset%z0_h)
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