#include "../includeF/sfx_def.fi" !> @brief surface flux model config subroutines module sfx_config ! modules used ! -------------------------------------------------------------------------------- ! -------------------------------------------------------------------------------- ! directives list ! -------------------------------------------------------------------------------- implicit none ! -------------------------------------------------------------------------------- public :: set_dataset public !> @brief model enum def. integer, parameter :: model_esm = 0 !< ESM model integer, parameter :: model_log = 1 !< LOG simplified model integer, parameter :: model_most = 2 !< MOST model integer, parameter :: model_sheba = 3 !< SHEBA model integer, parameter :: model_sheba_noit = 4 !< SHEBA model noniterative integer, parameter :: model_most_snow = 5 !< MOST_SNOW model integer, parameter :: model_sheba_coare = 6 !< MOST_SNOW model character(len = 16), parameter :: model_esm_tag = 'esm' character(len = 16), parameter :: model_log_tag = 'log' character(len = 16), parameter :: model_most_tag = 'most' character(len = 16), parameter :: model_sheba_tag = 'sheba' character(len = 16), parameter :: model_sheba_noit_tag = 'sheba_noit' character(len = 16), parameter :: model_most_snow_tag = 'most_snow' character(len = 16), parameter :: model_sheba_coare_tag = 'sheba_coare' !> @brief dataset enum def. integer, parameter :: dataset_mosaic = 1 !< MOSAiC campaign integer, parameter :: dataset_irgason = 2 !< IRGASON data integer, parameter :: dataset_sheba = 3 !< please spell 'SHIBA' integer, parameter :: dataset_lake = 4 !< Kuivajarvi data integer, parameter :: dataset_papa = 5 !< Papa station (ocean) data integer, parameter :: dataset_toga = 6 !< Toga (ocean) data integer, parameter :: dataset_user = 7 !< used defined dataset character(len = 16), parameter :: dataset_mosaic_tag = 'mosaic' character(len = 16), parameter :: dataset_irgason_tag = 'irgason' character(len = 16), parameter :: dataset_sheba_tag = 'sheba' character(len = 16), parameter :: dataset_lake_tag = 'lake' character(len = 16), parameter :: dataset_papa_tag = 'papa' 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, surface_type real :: h, z0_m, z0_h, lai, depth end type contains function get_model_id(tag) result(id) implicit none character(len=*), intent(in) :: tag integer :: id id = - 1 if (trim(tag) == trim(model_esm_tag)) then id = model_esm else if (trim(tag) == trim(model_log_tag)) then id = model_log else if (trim(tag) == trim(model_most_tag)) then id = model_most else if (trim(tag) == trim(model_sheba_tag)) then id = model_sheba else if (trim(tag) == trim(model_sheba_noit_tag)) then id = model_sheba_noit else if (trim(tag) == trim(model_most_snow_tag)) then id = model_most_snow else if (trim(tag) == trim(model_sheba_coare_tag)) then id = model_sheba_coare end if end function function get_model_tag(id) result(tag) implicit none integer :: id character(len=:), allocatable :: tag tag = 'undefined' if (id == model_esm) then tag = model_esm_tag else if (id == model_log) then tag = model_log_tag else if (id == model_most) then tag = model_most_tag else if (id == model_sheba) then tag = model_sheba_tag else if (id == model_sheba_noit) then tag = model_sheba_noit_tag else if (id == model_most_snow) then tag = model_most_snow_tag else if (id == model_sheba_coare) then tag = model_sheba_coare_tag end if end function function get_dataset_id(tag) result(id) implicit none character(len=*), intent(in) :: tag integer :: id id = - 1 if (trim(tag) == trim(dataset_mosaic_tag)) then id = dataset_mosaic else if (trim(tag) == trim(dataset_irgason_tag)) then id = dataset_irgason else if (trim(tag) == trim(dataset_sheba_tag)) then id = dataset_sheba else if (trim(tag) == trim(dataset_lake_tag)) then id = dataset_lake else if (trim(tag) == trim(dataset_papa_tag)) then id = dataset_papa else if (trim(tag) == trim(dataset_toga_tag)) then id = dataset_toga else if (trim(tag) == trim(dataset_user_tag)) then id = dataset_user end if end function function get_dataset_tag(id) result(tag) implicit none integer, intent(in) :: id character(len=:), allocatable :: tag tag = 'undefined' if (id == dataset_mosaic) then tag = dataset_mosaic_tag else if (id == dataset_irgason) then tag = dataset_irgason_tag else if (id == dataset_sheba) then tag = dataset_sheba_tag else if (id == dataset_lake) then tag = dataset_lake_tag else if (id == dataset_papa) then tag = dataset_papa_tag else if (id == dataset_toga) then tag = dataset_toga_tag else if (id == dataset_user) then tag = dataset_user_tag end if end function subroutine set_dataset(dataset, id) use sfx_surface implicit none type(sfxDatasetType), intent(out) :: dataset integer, intent(in) :: id integer :: id_check id_check = get_dataset_id(get_dataset_tag(id)) if (id_check == -1) return dataset%id = id dataset%filename = get_dataset_filename(id) dataset%nmax = 0 dataset%surface = surface_snow dataset%surface_type = surface_snow dataset%z0_h = -1.0 dataset%lai = 1.0 dataset%depth = 10.0 if (id == dataset_mosaic) then dataset%h = 6.0 dataset%z0_m = 0.0078 dataset%surface_type = surface_snow else if (id == dataset_irgason) then dataset%h = 9.2 dataset%z0_m = 0.01 else if (id == dataset_sheba) then dataset%h = 3.19 dataset%z0_m = 0.001 else if (id == dataset_lake) then ! *: check & fix values dataset%h = 10.0 dataset%surface = surface_lake dataset%z0_m = -1.0 else if (id == dataset_papa) then dataset%h = 10.0 dataset%surface = surface_lake dataset%z0_m = -1.0 else if (id == dataset_toga) then ! *: check & fix values dataset%h = 15.0 dataset%surface = surface_lake dataset%z0_m = -1.0 end if write (*,*) dataset%surface, 'dataset%surface' end subroutine function get_dataset_filename(id) result(filename) implicit none integer :: id character(len=:), allocatable :: filename filename = '' if (id == dataset_mosaic) then filename = DATASET_DIR // 'MOSAiC.txt' else if (id == dataset_irgason) then filename = DATASET_DIR // 'Irgason1.txt' else if (id == dataset_sheba) then filename = DATASET_DIR // 'Sheba1.txt' else if (id == dataset_lake) then filename = DATASET_DIR // 'Kuivajarvi.txt' else if (id == dataset_papa) then filename = DATASET_DIR // 'Papa.txt' else if (id == dataset_toga) then filename = DATASET_DIR // 'Toga.txt' end if end function end module sfx_config