set_friction_correlation Subroutine

public subroutine set_friction_correlation(fct, cfg, built_in_name)

Arguments

Type IntentOptional Attributes Name
type(friction_t), intent(inout) :: fct
class(input_t), intent(in) :: cfg
character(len=*), intent(in) :: built_in_name

Calls

proc~~set_friction_correlation~~CallsGraph proc~set_friction_correlation set_friction_correlation proc~friction_factor_blasius_init friction_factor_blasius_init proc~set_friction_correlation->proc~friction_factor_blasius_init proc~friction_factor_central_spiral_init friction_factor_central_spiral_init proc~set_friction_correlation->proc~friction_factor_central_spiral_init proc~friction_factor_katheder_init friction_factor_katheder_init proc~set_friction_correlation->proc~friction_factor_katheder_init proc~input_keys1d input_t%input_keys1d proc~set_friction_correlation->proc~input_keys1d proc~input_str input_t%input_str proc~set_friction_correlation->proc~input_str proc~input_dbl input_t%input_dbl proc~friction_factor_blasius_init->proc~input_dbl proc~friction_factor_central_spiral_init->proc~input_dbl proc~friction_factor_katheder_init->proc~input_dbl proc~select_dict select_dict proc~input_keys1d->proc~select_dict proc~input_has_key input_t%input_has_key proc~input_str->proc~input_has_key proc~input_node input_t%input_node proc~input_str->proc~input_node proc~select_scalar select_scalar proc~input_str->proc~select_scalar proc~input_dbl->proc~input_has_key proc~input_dbl->proc~input_node proc~continue_if continue_if proc~input_dbl->proc~continue_if proc~get0d_hdf5 get0d_hdf5 proc~input_dbl->proc~get0d_hdf5 to_real to_real proc~input_dbl->to_real proc~input_has_key->proc~select_dict get get proc~input_has_key->get proc~input_node->proc~select_dict proc~input_node->get proc~dictionary_traverse dictionary_traverse proc~input_node->proc~dictionary_traverse proc~dictionary_traverse->proc~dictionary_traverse get_dictionary get_dictionary proc~dictionary_traverse->get_dictionary proc~abort_if abort_if proc~dictionary_traverse->proc~abort_if proc~get0d_hdf5->proc~input_str proc~get0d_hdf5->proc~input_has_key h5close_f h5close_f proc~get0d_hdf5->h5close_f h5dclose_f h5dclose_f proc~get0d_hdf5->h5dclose_f h5dopen_f h5dopen_f proc~get0d_hdf5->h5dopen_f h5dread_f h5dread_f proc~get0d_hdf5->h5dread_f h5fclose_f h5fclose_f proc~get0d_hdf5->h5fclose_f h5fopen_f h5fopen_f proc~get0d_hdf5->h5fopen_f h5ltget_dataset_info_f h5ltget_dataset_info_f proc~get0d_hdf5->h5ltget_dataset_info_f h5open_f h5open_f proc~get0d_hdf5->h5open_f

Called by

proc~~set_friction_correlation~~CalledByGraph proc~set_friction_correlation set_friction_correlation proc~load_frictions load_frictions proc~load_frictions->proc~set_friction_correlation program~reims_p reims_p program~reims_p->proc~load_frictions

Source Code

    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