From d8a4b4bdfdcde0b9dc7012978845c0ec3d1b140e Mon Sep 17 00:00:00 2001 From: Evgeny Mortikov <evgeny.mortikov@gmail.com> Date: Tue, 17 Sep 2024 23:06:45 +0300 Subject: [PATCH] adding char array to string conversion --- .gitignore | 1 + srcF/sfx_common.f90 | 17 +++++++++++++++++ srcF/sfx_main.f90 | 24 ++++++++++++------------ 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/.gitignore b/.gitignore index f4a77c2..e8df1ad 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ /drag.exe /build/ /srcF/*.mod +/parser/*.mod .idea diff --git a/srcF/sfx_common.f90 b/srcF/sfx_common.f90 index 160758f..dde8b8d 100644 --- a/srcF/sfx_common.f90 +++ b/srcF/sfx_common.f90 @@ -18,7 +18,24 @@ contains end subroutine str2int ! ---------------------------------------------------------------------------- + !> @brief character array to string conversion + function char_array2str(char_array) result(str) + ! ---------------------------------------------------------------------------- + implicit none + character, intent(in) :: char_array(:) + character(len=:), allocatable :: str + integer :: i + ! ---------------------------------------------------------------------------- + + str = "" + do i = 1, size(char_array) + str = str(:) // char_array(i) + end do + + end function + ! ---------------------------------------------------------------------------- + !> @brief check if value is finite elemental function is_finite(value) ! ---------------------------------------------------------------------------- diff --git a/srcF/sfx_main.f90 b/srcF/sfx_main.f90 index 8117357..31ca983 100644 --- a/srcF/sfx_main.f90 +++ b/srcF/sfx_main.f90 @@ -110,7 +110,7 @@ program sfx_main #ifdef USE_CONFIG_PARSER character, allocatable :: config_model_name(:) character, allocatable :: config_dataset_name(:) - + character, allocatable :: fn_in_common(:), fn_in(:), fn_out(:) integer :: sfx_type real :: z0_m @@ -223,13 +223,13 @@ program sfx_main call run("config.txt"//C_NULL_CHAR) call get_charf("model.type"//C_NULL_CHAR, config_model_name) - if (compare_char_arrays(config_model_name, trim(arg_key_model_esm), size(config_model_name))) then + if (compare_char_arrays(config_model_name, trim(arg_key_model_esm))) then model_id = model_esm - else if (compare_char_arrays(config_model_name, trim(arg_key_model_log), size(config_model_name))) then + else if (compare_char_arrays(config_model_name, trim(arg_key_model_log))) then model_id = model_log - else if (compare_char_arrays(config_model_name, trim(arg_key_model_most), size(config_model_name))) then + else if (compare_char_arrays(config_model_name, trim(arg_key_model_most))) then model_id = model_most - else if (compare_char_arrays(config_model_name, trim(arg_key_model_sheba), size(config_model_name))) then + else if (compare_char_arrays(config_model_name, trim(arg_key_model_sheba))) then model_id = model_sheba else write(*, *) ' FAILURE! > unknown model [key]: ', config_model_name @@ -237,19 +237,19 @@ program sfx_main end if call get_charf("dataset.type"//C_NULL_CHAR, config_dataset_name) - if (compare_char_arrays(config_dataset_name, trim(arg_key_dataset_mosaic), size(config_dataset_name))) then + if (compare_char_arrays(config_dataset_name, trim(arg_key_dataset_mosaic))) then dataset_id = dataset_MOSAiC - else if (compare_char_arrays(config_dataset_name, trim(arg_key_dataset_irgason), size(config_dataset_name))) then + else if (compare_char_arrays(config_dataset_name, trim(arg_key_dataset_irgason))) then dataset_id = dataset_IRGASON - else if (compare_char_arrays(config_dataset_name, trim(arg_key_dataset_sheba), size(config_dataset_name))) then + else if (compare_char_arrays(config_dataset_name, trim(arg_key_dataset_sheba))) then dataset_id = dataset_SHEBA - else if (compare_char_arrays(config_dataset_name, trim(arg_key_dataset_lake), size(config_dataset_name))) then + else if (compare_char_arrays(config_dataset_name, trim(arg_key_dataset_lake))) then dataset_id = dataset_LAKE - else if (compare_char_arrays(config_dataset_name, trim(arg_key_dataset_papa), size(config_dataset_name))) then + else if (compare_char_arrays(config_dataset_name, trim(arg_key_dataset_papa))) then dataset_id = dataset_PAPA - else if (compare_char_arrays(config_dataset_name, trim(arg_key_dataset_toga), size(config_dataset_name))) then + else if (compare_char_arrays(config_dataset_name, trim(arg_key_dataset_toga))) then dataset_id = dataset_TOGA - else if (compare_char_arrays(config_dataset_name, trim(arg_key_dataset_user), size(config_dataset_name))) then + else if (compare_char_arrays(config_dataset_name, trim(arg_key_dataset_user))) then dataset_id = dataset_USER !call get_charf("dataset.filename"//C_NULL_CHAR, config_dataset_filename) -- GitLab