| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(friction_t), | intent(inout) | :: | fct | |||
| class(input_t), | intent(in) | :: | cfg | |||
| character(len=*), | intent(in) | :: | built_in_name |
subroutine set_friction_correlation(fct, cfg, built_in_name) type(friction_t), intent(inout) :: fct class(input_t), intent(in) :: cfg character(*), intent(in) :: built_in_name type(c_funptr) :: frict_ptr integer :: i character(:), allocatable :: cfg_str type(str_ptr), allocatable :: keys(:) type(c_ptr) :: c_cfg c_cfg = C_NULL_PTR fct%friction_corr = cfg%str('friction',trim(built_in_name)) select case (cfg%str('base',fct%friction_corr)) case('blasius') call friction_factor_blasius_init(cfg, c_cfg) fct%frict_cfg = c_cfg fct%frict => friction_factor_blasius fct%frict_der => friction_factor_blasius_der case('katheder') call friction_factor_katheder_init(cfg, c_cfg) fct%frict_cfg = c_cfg fct%frict => friction_factor_katheder fct%frict_der => friction_factor_katheder_der case('central_spiral') call friction_factor_central_spiral_init(cfg, c_cfg) fct%frict_cfg = c_cfg fct%frict => friction_factor_central_spiral fct%frict_der => friction_factor_central_spiral_der end select if(.not. associated(init_friction_ext)) return ! serialization keys = cfg%keys1d() cfg_str = '' do i = 1, size(keys) cfg_str = cfg_str // keys(i)%p // c_null_char // cfg%str(keys(i)%p) // c_null_char end do frict_ptr = C_NULL_FUNPTR if(.not. init_friction_ext(len(cfg_str), cfg_str, c_cfg, frict_ptr)) return if(c_associated(frict_ptr)) then call c_f_procpointer(frict_ptr, fct%frict) fct%frict_cfg = c_cfg endif end subroutine set_friction_correlation