diff --git a/srcF/sfx_config.f90 b/srcF/sfx_config.f90
index cbcfb559f82d742b3d0d56e3eceec7151d59e2e5..ffcf740e46fc6b39b61815117cf53b411b94087c 100644
--- a/srcF/sfx_config.f90
+++ b/srcF/sfx_config.f90
@@ -42,6 +42,15 @@ module sfx_config
character(len = 16), parameter :: dataset_toga_tag = 'toga'
character(len = 16), parameter :: dataset_user_tag = 'user'
+ type :: sfxDatasetType
+ integer :: id
+ character(len = 256) :: filename
+ integer :: nmax
+
+ integer :: surface_type
+ real :: h, z0_m, z0_h
+ end type
+
type :: sfxDriverType
integer :: model_id
integer :: dataset_id
@@ -118,7 +127,7 @@ contains
function get_dataset_tag(id) result(tag)
implicit none
- integer :: id
+ integer, intent(in) :: id
character(len=:), allocatable :: tag
tag = 'undefined'
diff --git a/srcF/sfx_main.f90 b/srcF/sfx_main.f90
index e7ec670d1530849d263f703bab7f0ed00d5dc142..28aa40c624dc8728053d9abf39eafaf55f18dee0 100644
--- a/srcF/sfx_main.f90
+++ b/srcF/sfx_main.f90
@@ -1,6 +1,6 @@
-!> @brief main run sfx subroutine
+!> @brief main run sfx on dataset subroutine
! ----------------------------------------------------------------------------
-subroutine sfx_run(args)
+subroutine run_dataset(filename_out, dataset, model)
use sfx_phys_const
use sfx_common
@@ -27,8 +27,9 @@ subroutine sfx_run(args)
implicit none
! --------------------------------------------------------------------------------
-
- type(sfxDriverType), intent(in) :: args
+ character(len=*), intent(in) :: filename_out
+ type(sfxDatasetType), intent(in) :: dataset
+ integer, intent(in) :: model
! input/output model data
@@ -53,18 +54,21 @@ subroutine sfx_run(args)
! --------------------------------------------------------------------------------
- write(*, *) ' Running SFX model'
- write(*, *) ' model = ', trim(get_model_tag(args%model_id))
- write(*, *) ' dataset = ', trim(get_dataset_tag(args%dataset_id))
- write(*, *) ' filename[IN-COMMON] = ', trim(args%filename_in_common)
- write(*, *) ' filename[IN] = ', trim(args%filename_in)
- write(*, *) ' filename[OUT] = ', trim(args%filename_out)
+ write(*, *) ' Running SFX:'
+ write(*, *) ' model = ', trim(get_model_tag(model))
+ write(*, *) ' dataset = ', trim(get_dataset_tag(dataset%id))
+ write(*, *) ' filename[IN] = ', trim(dataset%filename)
+ write(*, *) ' filename[OUT] = ', trim(filename_out)
+ write(*, *) ' surface type = ', dataset%surface_type
+ write(*, *) ' h = ', dataset%h
+ write(*, *) ' z0(m) = ', dataset%z0_m
+ write(*, *) ' z0(h) = ', dataset%z0_h
!< @brief define number of cells
- open(32, file = args%filename_in, iostat = status, status ='old')
+ open(32, file = dataset%filename, iostat = status, status ='old')
if (status /= 0) then
- write(*, *) ' FAILURE! > unable to open file: ', trim(args%filename_in)
+ write(*, *) ' FAILURE! > unable to open file: ', trim(dataset%filename)
return
end if
@@ -80,9 +84,9 @@ subroutine sfx_run(args)
! --- print number of elements in dataset
write(*, *) ' size = ', num
- if (args%nmax > 0) then
- write(*, *) ' nmax = ', args%nmax
- num = min(num, args%nmax)
+ if (dataset%nmax > 0) then
+ write(*, *) ' nmax = ', dataset%nmax
+ num = min(num, dataset%nmax)
end if
@@ -91,20 +95,14 @@ subroutine sfx_run(args)
call allocate_sfx_vec(sfx, num)
- !< @brief read input data common parameters
- open(32, file = args%filename_in_common, iostat = status, status = 'old')
- if (status /= 0) then
- write(*, *) ' FAILURE! > unable to open file: ', trim(args%filename_in_common)
- return
- end if
- read(32, *) meteo_cell%h, meteo_cell%z0_m
- close(32)
-
+ !< @brief setting height & roughness
+ meteo_cell%h = dataset%h
+ meteo_cell%z0_m = dataset%z0_m
!< @brief read input data
- open(32, file = args%filename_in, iostat = status, status = 'old')
+ open(32, file = dataset%filename, iostat = status, status = 'old')
if (status /= 0) then
- write(*, *) ' FAILURE! > unable to open file: ', trim(args%filename_in)
+ write(*, *) ' FAILURE! > unable to open file: ', trim(dataset%filename)
return
end if
do i = 1, num
@@ -121,19 +119,19 @@ subroutine sfx_run(args)
!< @brief calling flux module
- if (args%model_id == model_esm) then
+ if (model == model_esm) then
call get_surface_fluxes_vec_esm(sfx, meteo, numerics_esm, num)
- else if (args%model_id == model_log) then
+ else if (model == model_log) then
call get_surface_fluxes_vec_log(sfx, meteo, numerics_log, num)
- else if (args%model_id == model_most) then
+ else if (model == model_most) then
call get_surface_fluxes_vec_most(sfx, meteo, numerics_most, num)
- else if (args%model_id == model_sheba) then
+ else if (model == model_sheba) then
call get_surface_fluxes_vec_sheba(sfx, meteo, numerics_sheba, num)
end if
!< @brief write output data
- call write_ascii_vec11(args%filename_out, &
+ call write_ascii_vec11(filename_out, &
sfx%zeta, sfx%Rib, &
sfx%Re, sfx%B, sfx%z0_m, sfx%z0_t, &
sfx%Rib_conv_lim, &
@@ -169,6 +167,7 @@ program sfx_main
type(sfxDriverType) :: sfx_args
+ type(sfxDatasetType) :: dataset
! command line arguments
! --------------------------------------------------------------------------------
@@ -333,7 +332,25 @@ program sfx_main
end if
!< @brief running main driver
- call sfx_run(sfx_args)
+ dataset%id = sfx_args%dataset_id
+ dataset%filename = sfx_args%filename_in
+ dataset%surface_type = 1
+ dataset%h = 10.0
+ dataset%z0_m = -1.0
+ dataset%z0_h = -1.0
+ dataset%nmax = sfx_args%nmax
+
+ !< @brief read input data common parameters
+ open(32, file = sfx_args%filename_in_common, iostat = status, status = 'old')
+ if (status /= 0) then
+ write(*, *) ' FAILURE! > unable to open file: ', trim(sfx_args%filename_in_common)
+ return
+ end if
+ read(32, *) dataset%h, dataset%z0_m
+ close(32)
+
+ !< @brief running main driver
+ call run_dataset(sfx_args%filename_out, dataset, sfx_args%model_id)
stop
end program
\ No newline at end of file