diff --git a/obl_config.f90 b/obl_config.f90 index 69572bcb1664b5a04ffd78d19492b1f489029dc5..4c4adaf7defea79fcc9e8f8f2091cabcfcd6ebae 100644 --- a/obl_config.f90 +++ b/obl_config.f90 @@ -18,7 +18,7 @@ module obl_config public - !> @brief setup enum def. + !> @brief config enum def. integer, parameter :: obl_config_kato = 0 !< Kato-Phillips setup integer, parameter :: obl_config_papa_fluxes = 1 !< Papa-station (fluxes) setup integer, parameter :: obl_config_papa_meteo = 2 !< Papa-station (meteo) setup @@ -27,6 +27,15 @@ module obl_config character(len = 16), parameter :: obl_config_papa_fluxes_tag = 'papa-fluxes' character(len = 16), parameter :: obl_config_papa_meteo_tag = 'papa-meteo' + !> @brief model enum def. + integer, parameter :: obl_model_pph = 0 !< pacanowski-philander + integer, parameter :: obl_model_pph_dyn = 1 !< pacanowski-philander (dynamic) + integer, parameter :: obl_model_k_epsilon = 2 !< k-epsilon + + character(len = 16), parameter :: obl_model_pph_tag = 'pph' + character(len = 16), parameter :: obl_model_pph_dyn_tag = 'pph-dyn' + character(len = 16), parameter :: obl_model_k_epsilon_tag = 'k-epsilon' + contains @@ -47,7 +56,6 @@ contains end function - ! -------------------------------------------------------------------------------- function get_obl_config_tag(id) result(tag) implicit none integer :: id @@ -64,6 +72,39 @@ contains end function + ! -------------------------------------------------------------------------------- + function get_obl_model_id(tag) result(id) + implicit none + character(len=*), intent(in) :: tag + integer :: id + + id = - 1 + if (trim(tag) == trim(obl_model_pph_tag)) then + id = obl_model_pph + else if (trim(tag) == trim(obl_model_pph_dyn_tag)) then + id = obl_model_pph_dyn + else if (trim(tag) == trim(obl_model_k_epsilon_tag)) then + id = obl_model_k_epsilon + end if + + end function + + function get_obl_model_tag(id) result(tag) + implicit none + integer :: id + character(len=:), allocatable :: tag + + tag = 'undefined' + if (id == obl_model_pph) then + tag = obl_model_pph_tag + else if (id == obl_model_pph_dyn) then + tag = obl_model_pph_dyn_tag + else if (id == obl_model_k_epsilon) then + tag = obl_model_k_epsilon_tag + end if + + end function + ! -------------------------------------------------------------------------------- subroutine set_grid(grid, config_id, ierr) !> @brief grid parameters setup diff --git a/obl_main.f90 b/obl_main.f90 index 9a4eb5e3a5883a84d3832fd3049ac45aeebb1f19..8c7fcc9fe60453708b2d6d081cd8e31a3ce0b53f 100644 --- a/obl_main.f90 +++ b/obl_main.f90 @@ -53,12 +53,10 @@ program obl_main ! = obl_config_papa_fluxes: Papa-station (fluxes) ! = obl_config_papa_meteo: Papa-station (meteo) - integer :: closure_mode ! --- OBL closure def. - ! = 1 - pacanowski-philander - ! = 2 - pacanowski-philander dynamic - ! = 3 - k-epsilon (explicit) - ! = 4 - k-epsilon (semiimplicit) - ! = 5 - inmom + integer :: obl_model_id ! --- OBL model def. + ! = obl_model_pph: pacanowski-philander + ! = obl_model_pph_dyn: pacanowski-philander (dynamic) + ! = obl_model_k_epsilon: k-epsilon type(gridDataType) :: grid @@ -102,6 +100,7 @@ program obl_main character(len = 128), parameter :: arg_key_help = '--help' character(len = 128), parameter :: arg_key_config = "--config" + character(len = 128), parameter :: arg_key_model = "--model" integer :: i, status integer :: ierr @@ -110,18 +109,17 @@ program obl_main !< default config = obl_config_kato (Kato-Phiilps) !< possible values: - !< obl_config_kato - !< obl_config_papa_fluxes - !< obl_config_papa_meteo + !< = obl_config_kato + !< = obl_config_papa_fluxes + !< = obl_config_papa_meteo obl_config_id = obl_config_kato - !< default closure = 4, k-epsilon (implicit) + !< default closure = 4, k-epsilon !< poissible values: - !< = 1, Pacanowski-Philander - !< = 2, Pacanowski-Philander (dynamic) - !< = 3, k-epsilon (explicit) *: DEPRECATED - !< = 4, k-epsilon (implicit) - closure_mode = 4 + !< = obl_model_pph, pacanowski-philander + !< = obl_model_pph_dyn, pacanowski-philander (dynamic) + !< = obl_model_k_epsilon, k-epsilon + obl_model_id = obl_model_k_epsilon !< default output = 1, (netcdf) !< possible values: @@ -140,8 +138,10 @@ program obl_main write(*, *) ' --help' write(*, *) ' print usage options' write(*, *) ' --config [key] || [filename]' - write(*, *) ' predefined setup [key] = kato (default) || papa-fluxes || papa' + write(*, *) ' builtin setup [key] = kato (default) || papa-fluxes || papa' write(*, *) ' use configuration file [filename]' + write(*, *) ' --model [key]' + write(*, *) ' [key] = pph || pph-dyn || k-epsilon (default)' return end if @@ -172,6 +172,20 @@ program obl_main return #endif end if + else if (trim(arg) == trim(arg_key_model)) then + if (i == num_args) then + write(*, *) ' FAILURE! > missing model [key] argument' + ierr = 1 ! signal ERROR + return + end if + + call get_command_argument(i + 1, arg) + obl_model_id = get_obl_model_id(arg) + if (obl_model_id == -1) then + write(*, *) ' FAILURE! > unknown model [key]: ', trim(arg) + ierr = 1 ! signal ERROR + return + end if endif enddo @@ -243,13 +257,13 @@ program obl_main call advance_surface_fluxes(bc, time_begin, grid) call advance_bottom_fluxes(bc, time_begin, grid) - if (closure_mode.eq.1) then + if (obl_model_id.eq.obl_model_pph) then call define_stability_functions_pph(param_pph, bc, grid) call init_turbulence_closure_pph(param_pph, bc, grid) - else if (closure_mode.eq.2) then + else if (obl_model_id.eq.obl_model_pph_dyn) then call define_stability_functions_pph_dyn(param_pph_dyn, bc, grid) call init_turbulence_closure_pph_dyn(param_pph_dyn, bc, grid) - else if (closure_mode.eq.4) then + else if (obl_model_id.eq.obl_model_k_epsilon) then call define_stability_functions_k_epsilon(param_k_epsilon, bc, grid) call init_turbulence_closure_k_epsilon(param_k_epsilon, bc, grid) endif @@ -272,13 +286,13 @@ program obl_main !< advance turbulence closure ! ---------------------------------------------------------------------------- - if (closure_mode.eq.1) then + if (obl_model_id.eq.obl_model_pph) then call define_stability_functions_pph(param_pph, bc, grid) call advance_turbulence_closure_pph(param_pph, bc, grid, dt) - else if (closure_mode.eq.2) then + else if (obl_model_id.eq.obl_model_pph_dyn) then call define_stability_functions_pph_dyn(param_pph_dyn, bc, grid) call advance_turbulence_closure_pph_dyn(param_pph_dyn, bc, grid, dt) - else if (closure_mode.eq.4) then + else if (obl_model_id.eq.obl_model_k_epsilon) then call define_stability_functions_k_epsilon(param_k_epsilon, bc, grid) call advance_turbulence_closure_k_epsilon(param_k_epsilon, bc, grid, dt) endif