channel_init_part1 Subroutine

public subroutine channel_init_part1(me, krn, cfg, h5, sim)

Arguments

Type IntentOptional Attributes Name
type(channel_t), intent(out) :: me
type(krn_t), intent(inout) :: krn
class(input_t), intent(in), pointer :: cfg
class(hdf5_t), intent(inout) :: h5
type(simulation_t), intent(inout) :: sim

Calls

proc~~channel_init_part1~~CallsGraph proc~channel_init_part1 channel_init_part1 proc~all_channel_allocation_nb all_channel_allocation_nb proc~channel_init_part1->proc~all_channel_allocation_nb proc~friction_init friction_init proc~channel_init_part1->proc~friction_init proc~hdf5_add_to_table hdf5_t%hdf5_add_to_table proc~channel_init_part1->proc~hdf5_add_to_table proc~input_bin input_t%input_bin proc~channel_init_part1->proc~input_bin proc~input_dbl input_t%input_dbl proc~channel_init_part1->proc~input_dbl proc~input_dbl1d input_t%input_dbl1d proc~channel_init_part1->proc~input_dbl1d proc~input_has_key input_t%input_has_key proc~channel_init_part1->proc~input_has_key proc~input_str input_t%input_str proc~channel_init_part1->proc~input_str proc~krn_add krn_t%krn_add proc~channel_init_part1->proc~krn_add proc~nusselt_init nusselt_init proc~channel_init_part1->proc~nusselt_init proc~ro_pt ro_pT proc~channel_init_part1->proc~ro_pt proc~signal_init signal_t%signal_init proc~channel_init_part1->proc~signal_init proc~state_rot state_roT proc~channel_init_part1->proc~state_rot proc~v_prim_to_v_conss v_prim_to_v_Conss proc~channel_init_part1->proc~v_prim_to_v_conss proc~friction_init->proc~input_str proc~input_bin->proc~input_has_key proc~continue_if continue_if proc~input_bin->proc~continue_if proc~input_node input_t%input_node proc~input_bin->proc~input_node proc~select_scalar select_scalar proc~input_bin->proc~select_scalar to_logical to_logical proc~input_bin->to_logical proc~input_dbl->proc~input_has_key proc~input_dbl->proc~continue_if proc~get0d_hdf5 get0d_hdf5 proc~input_dbl->proc~get0d_hdf5 proc~input_dbl->proc~input_node to_real to_real proc~input_dbl->to_real proc~input_dbl1d->proc~input_has_key interface~to_str to_str proc~input_dbl1d->interface~to_str proc~input_dbl1d->proc~continue_if proc~get1d_hdf5 get1d_hdf5 proc~input_dbl1d->proc~get1d_hdf5 proc~input_dbl1d->proc~input_node proc~input_dbl1d->proc~select_scalar proc~input_dbl1d->to_real get get proc~input_has_key->get proc~select_dict select_dict proc~input_has_key->proc~select_dict proc~input_str->proc~input_has_key proc~input_str->proc~input_node proc~input_str->proc~select_scalar proc~port_list_add port_list_t%port_list_add proc~krn_add->proc~port_list_add proc~nusselt_init->proc~input_str proc~brent brent proc~ro_pt->proc~brent proc~signal_init->proc~input_dbl proc~signal_init->proc~input_dbl1d proc~signal_init->proc~input_has_key proc~signal_init->proc~input_str interface~getprocaddress GetProcAddress proc~signal_init->interface~getprocaddress interface~is_nan is_nan proc~signal_init->interface~is_nan proc~input_dbl2d input_t%input_dbl2d proc~signal_init->proc~input_dbl2d proc~input_dict input_t%input_dict proc~signal_init->proc~input_dict proc~input_keys1d input_t%input_keys1d proc~signal_init->proc~input_keys1d proc~interpolate_vector interpolate_vector proc~signal_init->proc~interpolate_vector proc~merge_events merge_events proc~signal_init->proc~merge_events proc~jacobian_rot jacobian_roT proc~state_rot->proc~jacobian_rot proc~is_nan_dbl is_nan_dbl interface~is_nan->proc~is_nan_dbl proc~is_nan_int is_nan_int interface~is_nan->proc~is_nan_int proc~str_from_int str_from_int interface~to_str->proc~str_from_int proc~str_from_real str_from_real interface~to_str->proc~str_from_real f f proc~brent->f proc~set_error set_error proc~brent->proc~set_error proc~zero zero proc~brent->proc~zero proc~get0d_hdf5->proc~input_has_key proc~get0d_hdf5->proc~input_str 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 proc~get1d_hdf5->proc~input_has_key proc~get1d_hdf5->proc~input_str proc~get1d_hdf5->h5dclose_f proc~get1d_hdf5->h5dopen_f proc~get1d_hdf5->h5dread_f proc~get1d_hdf5->h5fclose_f proc~get1d_hdf5->h5fopen_f proc~get1d_hdf5->h5ltget_dataset_info_f proc~input_dbl2d->proc~input_has_key proc~input_dbl2d->proc~continue_if proc~input_dbl2d->proc~input_node proc~input_dbl2d->proc~select_scalar proc~input_dbl2d->to_real proc~get2d_hdf5 get2d_hdf5 proc~input_dbl2d->proc~get2d_hdf5 proc~select_list select_list proc~input_dbl2d->proc~select_list proc~input_dict->proc~input_has_key proc~input_dict->proc~input_node proc~input_dict1d input_t%input_dict1d proc~input_dict->proc~input_dict1d proc~input_keys1d->proc~select_dict proc~input_node->get proc~input_node->proc~select_dict proc~dictionary_traverse dictionary_traverse proc~input_node->proc~dictionary_traverse proc~interpolate interpolate proc~interpolate_vector->proc~interpolate proc~eos_terms eos_terms proc~jacobian_rot->proc~eos_terms proc~port_list_add->interface~to_str 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~eos_e_terms eos_e_terms proc~eos_terms->proc~eos_e_terms proc~fill_f_terms fill_f_terms proc~eos_terms->proc~fill_f_terms proc~get2d_hdf5->proc~input_has_key proc~get2d_hdf5->proc~input_str proc~get2d_hdf5->h5dclose_f proc~get2d_hdf5->h5dopen_f proc~get2d_hdf5->h5dread_f proc~get2d_hdf5->h5fclose_f proc~get2d_hdf5->h5fopen_f proc~get2d_hdf5->h5ltget_dataset_info_f proc~input_dict1d->proc~input_has_key proc~input_dict1d->proc~input_node proc~input_dict1d->proc~select_dict proc~input_dict1d->proc~select_list get_string get_string proc~input_dict1d->get_string proc~zero->f proc~fill_e_tpart fill_e_Tpart proc~eos_e_terms->proc~fill_e_tpart proc~fill_ff_terms fill_ff_terms proc~eos_e_terms->proc~fill_ff_terms proc~fill_g_dreg_terms fill_g_Dreg_terms proc~fill_e_tpart->proc~fill_g_dreg_terms

Called by

proc~~channel_init_part1~~CalledByGraph proc~channel_init_part1 channel_init_part1 program~reims_p reims_p program~reims_p->proc~channel_init_part1

Source Code

subroutine channel_init_part1(me, krn, cfg, h5, sim)
    type(channel_t),         intent(out)   :: me
    type(krn_t),          intent(inout) :: krn
    class(input_t), pointer, intent(in) :: cfg
    class(hdf5_t),        intent(inout) :: h5
    type(simulation_t), intent(inout) :: sim

    real(dp) :: Rout,Pout,eout,cout, u_init, p_init, T_init
    integer :: i, nb_non_zeros_exp, nb_non_zeros_imp, nb_FS_ports, nb_FF_src_ports
            
    if(cfg%has_key('nodes')) then ! means uniform mesh
        me%HeProp%NbCells = cfg%int('nodes')
        me%HeProp%Length = cfg%dbl('length')
        allocate(me%HeProp%dxLoc(me%HeProp%NbCells))
        me%HeProp%dxLoc(:)=me%HeProp%Length/me%HeProp%NbCells
    else ! variable mesh
        me%HeProp%NbCells=size(cfg%dbl1d('length'))
        allocate(me%HeProp%dxLoc(me%HeProp%NbCells))
        me%HeProp%dxLoc(:)=cfg%dbl1d('length')
        me%HeProp%Length = sum(me%HeProp%dxLoc(:))
    endif

    ! For HDF5
    me%hdf%name = cfg%str('id')
    me%hdf%node_x = [(sum(me%HeProp%dxLoc(1:i-1)) + me%HeProp%dxLoc(i)/2, &
                    i = 1, me%HeProp%NbCells)]
    call h5%add_to_table(me%hdf,'channel')

    me%HeProp%FFsrcLink = cfg%bin('channel_link',.false.)

    me%HeProp%ExtHeating = cfg%str('thermal','flux')
    if(me%HeProp%ExtHeating=='flux') then
        call me%HeProp%Temp_or_Q_Wall%init(sim,cfg,'flux',me%hdf%node_x)
    else if(me%HeProp%ExtHeating=='temp') then
        call me%HeProp%Temp_or_Q_Wall%init(sim,cfg,'temp',me%hdf%node_x)
        call nusselt_init(me%nuss,cfg)        
        if(.not. associated(me%nuss)) me%HeProp%Ht = cfg%dbl('heat_transfert_coef')
    endif

    call friction_init(me%fct,cfg)     
    if(cfg%has_key('diameter') .and. cfg%has_key('area')) then  ! expects the 2 values for a Katheder type friction factor
        me%HeProp%Diam = cfg%dbl('diameter')
        me%HeProp%Area = cfg%dbl('area')
    else
        if(cfg%has_key('diameter')) then
            me%HeProp%Diam = cfg%dbl('diameter')
            me%HeProp%Area = Pi_value*me%HeProp%Diam**2/4.0_dp
        else if(cfg%has_key('area')) then
            me%HeProp%Area = cfg%dbl('area')
            me%HeProp%Diam = sqrt(4.0_dp*me%HeProp%Area/Pi_value)
        else
            error stop 'channel: missing required key "diameter" or "area"'
        endif
    endif

    call all_channel_allocation_nb(me)
          
    u_init=cfg%dbl('initial/u',0.0_dp)
    p_init=cfg%dbl('initial/p')
    T_init=cfg%dbl('initial/t')
    do i=1,me%HeProp%NbCells
        me%StVar%He_pr(Pri_u,i)=u_init
        me%StVar%He_pr(Pri_ro,i)=ro_pT(p_init,T_init)
        me%StVar%He_pr(Pri_T,i)=T_init
        call state_roT(me%StVar%He_pr(Pri_ro,i), me%StVar%He_pr(Pri_T,i), Rout, Pout, eout, cout)

        me%StVar%He_pr(Pri_R,i) = 1.0_dp ! Value by default
        if(R_Correction) me%StVar%He_pr(Pri_R,i) = Rout
        me%StVar%He_pr(Pri_p,i)=Pout
        me%StVar%He_pr(Pri_e,i)=eout
        me%StVar%He_pr(Pri_c,i)=cout
        call v_prim_to_v_Conss(i,me%StVar%He_pr,me%StVar%He_cs)
    enddo    
        
    nb_non_zeros_exp=Nb_VarC*Nb_VarC*me%HeProp%NbCells

    nb_non_zeros_imp=2*Nb_VarC*Nb_VarC
    do i=2,me%HeProp%NbCells-1
        nb_non_zeros_imp=nb_non_zeros_imp+3*Nb_VarC*Nb_VarC
    enddo
    nb_non_zeros_imp=nb_non_zeros_imp+2*Nb_VarC*Nb_VarC

    if(me%HeProp%ExtHeating=='link') then
        nb_FS_ports=me%HeProp%NbCells
    else
        nb_FS_ports=0
    endif
    
    if(me%HeProp%FFsrcLink) then
        nb_FF_src_ports=me%HeProp%NbCells
    else
        nb_FF_src_ports=0
    endif    

    me%HeProp%name = cfg%str('id')

    call krn%add(me%HeProp%name,Nb_VarC*me%HeProp%NbCells,nb_non_zeros_exp,nb_non_zeros_imp,2,nb_FS_ports,nb_FF_src_ports,0,0)
    
end subroutine channel_init_part1