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

main driver update

parent 8bef43e7
No related branches found
No related tags found
No related merge requests found
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
"label": "CMake: build", "label": "CMake: build",
"command": "build", "command": "build",
"targets": [ "targets": [
"[N/A - Select Kit]" "all"
], ],
"group": "build", "group": "build",
"problemMatcher": [], "problemMatcher": [],
......
...@@ -42,7 +42,18 @@ module sfx_config ...@@ -42,7 +42,18 @@ module sfx_config
character(len = 16), parameter :: dataset_toga_tag = 'toga' character(len = 16), parameter :: dataset_toga_tag = 'toga'
character(len = 16), parameter :: dataset_user_tag = 'user' character(len = 16), parameter :: dataset_user_tag = 'user'
type :: sfxDriverType
integer :: model_id
integer :: dataset_id
integer :: nmax
character(len = 256) :: filename_in_common
character(len = 256) :: filename_in
character(len = 256) :: filename_out
end type
contains contains
function get_model_id(tag) result(id) function get_model_id(tag) result(id)
......
!> @brief main run sfx subroutine !> @brief main run sfx subroutine
! ---------------------------------------------------------------------------- ! ----------------------------------------------------------------------------
subroutine run_sfx(dataset_id, model_id, filename_in_common, filename_in, filename_out, nmax) subroutine run(args)
use sfx_phys_const use sfx_phys_const
use sfx_common use sfx_common
...@@ -28,13 +28,10 @@ subroutine run_sfx(dataset_id, model_id, filename_in_common, filename_in, filena ...@@ -28,13 +28,10 @@ subroutine run_sfx(dataset_id, model_id, filename_in_common, filename_in, filena
! -------------------------------------------------------------------------------- ! --------------------------------------------------------------------------------
integer, intent(in) :: dataset_id !< dataset ID: type(sfxDriverType), intent(in) :: args
character(len = 256) :: dataset_name
integer, intent(in) :: model_id !< sfx model ID
character(len = 256) :: model_name
! input/output data ! input/output model data
! -------------------------------------------------------------------------------- ! --------------------------------------------------------------------------------
type(meteoDataVecType) :: meteo !< meteorological data (input) type(meteoDataVecType) :: meteo !< meteorological data (input)
type(meteoDataType) :: meteo_cell type(meteoDataType) :: meteo_cell
...@@ -47,17 +44,6 @@ subroutine run_sfx(dataset_id, model_id, filename_in_common, filename_in, filena ...@@ -47,17 +44,6 @@ subroutine run_sfx(dataset_id, model_id, filename_in_common, filename_in, filena
type(numericsType_sheba) :: numerics_sheba !< surface flux module (SHEBA) numerics parameters type(numericsType_sheba) :: numerics_sheba !< surface flux module (SHEBA) numerics parameters
integer :: num !< number of 'cells' in input integer :: num !< number of 'cells' in input
! --- input/output filenames
character(len=*), intent(in) :: filename_in_common
character(len=*), intent(in) :: filename_in
character(len=*), intent(in) :: filename_out
! --------------------------------------------------------------------------------
! command line arguments
! --------------------------------------------------------------------------------
integer, intent(in) :: nmax
! -------------------------------------------------------------------------------- ! --------------------------------------------------------------------------------
! local variables ! local variables
...@@ -67,21 +53,18 @@ subroutine run_sfx(dataset_id, model_id, filename_in_common, filename_in, filena ...@@ -67,21 +53,18 @@ subroutine run_sfx(dataset_id, model_id, filename_in_common, filename_in, filena
! -------------------------------------------------------------------------------- ! --------------------------------------------------------------------------------
model_name = get_model_tag(model_id)
dataset_name = get_dataset_tag(dataset_id)
write(*, *) ' Running SFX model' write(*, *) ' Running SFX model'
write(*, *) ' model = ', trim(model_name) write(*, *) ' model = ', trim(get_model_tag(args%model_id))
write(*, *) ' dataset = ', trim(dataset_name) write(*, *) ' dataset = ', trim(get_dataset_tag(args%dataset_id))
write(*, *) ' filename[IN-COMMON] = ', trim(filename_in_common) write(*, *) ' filename[IN-COMMON] = ', trim(args%filename_in_common)
write(*, *) ' filename[IN] = ', trim(filename_in) write(*, *) ' filename[IN] = ', trim(args%filename_in)
write(*, *) ' filename[OUT] = ', trim(filename_out) write(*, *) ' filename[OUT] = ', trim(args%filename_out)
!< @brief define number of cells !< @brief define number of cells
open(32, file = filename_in, iostat = status, status ='old') open(32, file = args%filename_in, iostat = status, status ='old')
if (status /= 0) then if (status /= 0) then
write(*, *) ' FAILURE! > unable to open file: ', trim(filename_in) write(*, *) ' FAILURE! > unable to open file: ', trim(args%filename_in)
return return
end if end if
...@@ -97,9 +80,9 @@ subroutine run_sfx(dataset_id, model_id, filename_in_common, filename_in, filena ...@@ -97,9 +80,9 @@ subroutine run_sfx(dataset_id, model_id, filename_in_common, filename_in, filena
! --- print number of elements in dataset ! --- print number of elements in dataset
write(*, *) ' size = ', num write(*, *) ' size = ', num
if (nmax > 0) then if (args%nmax > 0) then
write(*, *) ' nmax = ', nmax write(*, *) ' nmax = ', args%nmax
num = min(num, nmax) num = min(num, args%nmax)
end if end if
...@@ -109,9 +92,9 @@ subroutine run_sfx(dataset_id, model_id, filename_in_common, filename_in, filena ...@@ -109,9 +92,9 @@ subroutine run_sfx(dataset_id, model_id, filename_in_common, filename_in, filena
!< @brief read input data common parameters !< @brief read input data common parameters
open(32, file = filename_in_common, iostat = status, status = 'old') open(32, file = args%filename_in_common, iostat = status, status = 'old')
if (status /= 0) then if (status /= 0) then
write(*, *) ' FAILURE! > unable to open file: ', trim(filename_in_common) write(*, *) ' FAILURE! > unable to open file: ', trim(args%filename_in_common)
return return
end if end if
read(32, *) meteo_cell%h, meteo_cell%z0_m read(32, *) meteo_cell%h, meteo_cell%z0_m
...@@ -119,9 +102,9 @@ subroutine run_sfx(dataset_id, model_id, filename_in_common, filename_in, filena ...@@ -119,9 +102,9 @@ subroutine run_sfx(dataset_id, model_id, filename_in_common, filename_in, filena
!< @brief read input data !< @brief read input data
open(32, file = filename_in, iostat = status, status = 'old') open(32, file = args%filename_in, iostat = status, status = 'old')
if (status /= 0) then if (status /= 0) then
write(*, *) ' FAILURE! > unable to open file: ', trim(filename_in) write(*, *) ' FAILURE! > unable to open file: ', trim(args%filename_in)
return return
end if end if
do i = 1, num do i = 1, num
...@@ -138,19 +121,19 @@ subroutine run_sfx(dataset_id, model_id, filename_in_common, filename_in, filena ...@@ -138,19 +121,19 @@ subroutine run_sfx(dataset_id, model_id, filename_in_common, filename_in, filena
!< @brief calling flux module !< @brief calling flux module
if (model_id == model_esm) then if (args%model_id == model_esm) then
call get_surface_fluxes_vec_esm(sfx, meteo, numerics_esm, num) call get_surface_fluxes_vec_esm(sfx, meteo, numerics_esm, num)
else if (model_id == model_log) then else if (args%model_id == model_log) then
call get_surface_fluxes_vec_log(sfx, meteo, numerics_log, num) call get_surface_fluxes_vec_log(sfx, meteo, numerics_log, num)
else if (model_id == model_most) then else if (args%model_id == model_most) then
call get_surface_fluxes_vec_most(sfx, meteo, numerics_most, num) call get_surface_fluxes_vec_most(sfx, meteo, numerics_most, num)
else if (model_id == model_sheba) then else if (args%model_id == model_sheba) then
call get_surface_fluxes_vec_sheba(sfx, meteo, numerics_sheba, num) call get_surface_fluxes_vec_sheba(sfx, meteo, numerics_sheba, num)
end if end if
!< @brief write output data !< @brief write output data
call write_ascii_vec11(filename_out, & call write_ascii_vec11(args%filename_out, &
sfx%zeta, sfx%Rib, & sfx%zeta, sfx%Rib, &
sfx%Re, sfx%B, sfx%z0_m, sfx%z0_t, & sfx%Re, sfx%B, sfx%z0_m, sfx%z0_t, &
sfx%Rib_conv_lim, & sfx%Rib_conv_lim, &
...@@ -185,19 +168,7 @@ program sfx_main ...@@ -185,19 +168,7 @@ program sfx_main
! -------------------------------------------------------------------------------- ! --------------------------------------------------------------------------------
integer :: dataset_id !< dataset ID: type(sfxDriverType) :: sfx_args
character(len = 256) :: dataset_name
integer :: model_id !< sfx model ID
character(len = 256) :: model_name
! input/output data
! --------------------------------------------------------------------------------
! --- input/output filenames
character(len = 256) :: filename_in_common
character(len = 256) :: filename_in
character(len = 256) :: filename_out
! --------------------------------------------------------------------------------
! command line arguments ! command line arguments
! -------------------------------------------------------------------------------- ! --------------------------------------------------------------------------------
...@@ -211,7 +182,6 @@ program sfx_main ...@@ -211,7 +182,6 @@ program sfx_main
character(len = 128), parameter :: arg_key_help = '--help' character(len = 128), parameter :: arg_key_help = '--help'
integer :: is_output_set integer :: is_output_set
integer :: nmax
! -------------------------------------------------------------------------------- ! --------------------------------------------------------------------------------
! local variables ! local variables
...@@ -230,12 +200,13 @@ program sfx_main ...@@ -230,12 +200,13 @@ program sfx_main
#endif #endif
!< @brief define model & dataset !< @brief define default model & dataset
model_id = model_esm !< default = ESM sfx_args%model_id = model_esm !< default = ESM
dataset_id = dataset_mosaic !< default = MOSAiC sfx_args%dataset_id = dataset_mosaic !< default = MOSAiC
sfx_args%nmax = 0
is_output_set = 0 is_output_set = 0
nmax = 0
num_args = command_argument_count() num_args = command_argument_count()
do i = 1, num_args do i = 1, num_args
call get_command_argument(i, arg) call get_command_argument(i, arg)
...@@ -262,8 +233,8 @@ program sfx_main ...@@ -262,8 +233,8 @@ program sfx_main
end if end if
call get_command_argument(i + 1, arg) call get_command_argument(i + 1, arg)
model_id = get_model_id(arg) sfx_args%model_id = get_model_id(arg)
if (model_id == -1) then if (sfx_args%model_id == -1) then
write(*, *) ' FAILURE! > unknown model [key]: ', trim(arg) write(*, *) ' FAILURE! > unknown model [key]: ', trim(arg)
stop stop
end if end if
...@@ -275,19 +246,19 @@ program sfx_main ...@@ -275,19 +246,19 @@ program sfx_main
end if end if
call get_command_argument(i + 1, arg) call get_command_argument(i + 1, arg)
dataset_id = get_dataset_id(arg) sfx_args%dataset_id = get_dataset_id(arg)
if (dataset_id == -1) then if (sfx_args%dataset_id == -1) then
write(*, *) ' FAILURE! > unknown dataset [key]: ', trim(arg) write(*, *) ' FAILURE! > unknown dataset [key]: ', trim(arg)
stop stop
end if end if
if (dataset_id == dataset_user) then if (sfx_args%dataset_id == dataset_user) then
if (i + 3 > num_args) then if (i + 3 > num_args) then
write(*, *) ' FAILURE! > incorrect arguments for [user] dataset' write(*, *) ' FAILURE! > incorrect arguments for [user] dataset'
stop stop
end if end if
call get_command_argument(i + 2, filename_in_common) call get_command_argument(i + 2, sfx_args%filename_in_common)
call get_command_argument(i + 3, filename_in) call get_command_argument(i + 3, sfx_args%filename_in)
end if end if
end if end if
if (trim(arg) == trim(arg_key_output)) then if (trim(arg) == trim(arg_key_output)) then
...@@ -295,7 +266,7 @@ program sfx_main ...@@ -295,7 +266,7 @@ program sfx_main
write(*, *) ' FAILURE! > missing output [key] argument' write(*, *) ' FAILURE! > missing output [key] argument'
stop stop
end if end if
call get_command_argument(i + 1, filename_out) call get_command_argument(i + 1, sfx_args%filename_out)
is_output_set = 1 is_output_set = 1
end if end if
if (trim(arg) == trim(arg_key_nmax)) then if (trim(arg) == trim(arg_key_nmax)) then
...@@ -304,18 +275,29 @@ program sfx_main ...@@ -304,18 +275,29 @@ program sfx_main
stop stop
end if end if
call get_command_argument(i + 1, arg) call get_command_argument(i + 1, arg)
call str2int(nmax, arg, status) call str2int(sfx_args%nmax, arg, status)
if (status /= 0) then if (status /= 0) then
write(*, *) ' FAILURE! > expecting int nmax [value]' write(*, *) ' FAILURE! > expecting int nmax [value]'
stop stop
end if end if
if (nmax <= 0) then if (sfx_args%nmax <= 0) then
write(*, *) ' FAILURE! > nmax [value] should be positive' write(*, *) ' FAILURE! > nmax [value] should be positive'
stop stop
end if end if
end if end if
end do end do
!< @brief set input (& output) filenames for specific dataset
if (sfx_args%dataset_id /= dataset_user) then
sfx_args%filename_in_common = get_dataset_param_filename(sfx_args%dataset_id)
sfx_args%filename_in = get_dataset_filename(sfx_args%dataset_id)
end if
if (is_output_set == 0) then
sfx_args%filename_out = 'output-' // trim(get_dataset_tag(sfx_args%dataset_id)) // '.txt'
end if
#ifdef USE_CONFIG_PARSER #ifdef USE_CONFIG_PARSER
call run("config.txt"//C_NULL_CHAR) call run("config.txt"//C_NULL_CHAR)
...@@ -379,30 +361,10 @@ program sfx_main ...@@ -379,30 +361,10 @@ program sfx_main
!if ( (sfx_type == surface_ocean) .or. (sfx_type == surface_lake) ) then !if ( (sfx_type == surface_ocean) .or. (sfx_type == surface_lake) ) then
! write(*, *) "z0_m: ", z0_m ! write(*, *) "z0_m: ", z0_m
!end if !end if
#endif
!< @brief set name for specific model
model_name = get_model_tag(model_id)
!< @brief set name & filenames for specific dataset
dataset_name = get_dataset_tag(dataset_id)
if (dataset_id /= dataset_user) then
filename_in_common = get_dataset_param_filename(dataset_id)
filename_in = get_dataset_filename(dataset_id)
end if
if (is_output_set == 0) filename_out = 'output-' // trim(dataset_name) // '.txt'
!call get_float("dataset.h"//C_NULL_CHAR, meteo_cell%h)
!call get_float("dataset.z0_m"//C_NULL_CHAR, meteo_cell%z0_m)
call run_sfx(dataset_id, model_id, filename_in_common, filename_in, filename_out, nmax)
#ifdef USE_CONFIG_PARSER
call get_float("dataset.h"//C_NULL_CHAR, meteo_cell%h)
call get_float("dataset.z0_m"//C_NULL_CHAR, meteo_cell%z0_m)
#endif
#ifdef USE_CONFIG_PARSER
deallocate(config_model_name) deallocate(config_model_name)
deallocate(config_dataset_name) deallocate(config_dataset_name)
...@@ -411,5 +373,8 @@ program sfx_main ...@@ -411,5 +373,8 @@ program sfx_main
!if (is_output_set == 0) deallocate( fn_out ) !if (is_output_set == 0) deallocate( fn_out )
#endif #endif
!< @brief running main driver
call run(sfx_args)
stop stop
end program end program
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment