solid_init_part1 Subroutine

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

Arguments

Type IntentOptional Attributes Name
type(solid_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~~solid_init_part1~~CallsGraph proc~solid_init_part1 solid_init_part1 proc~all_solid_allocation all_solid_allocation proc~solid_init_part1->proc~all_solid_allocation proc~hdf5_add_to_table hdf5_t%hdf5_add_to_table proc~solid_init_part1->proc~hdf5_add_to_table proc~input_bin input_t%input_bin proc~solid_init_part1->proc~input_bin proc~input_bin1d input_t%input_bin1d proc~solid_init_part1->proc~input_bin1d proc~input_dbl input_t%input_dbl proc~solid_init_part1->proc~input_dbl proc~input_dbl1d input_t%input_dbl1d proc~solid_init_part1->proc~input_dbl1d proc~input_has_key input_t%input_has_key proc~solid_init_part1->proc~input_has_key proc~input_str input_t%input_str proc~solid_init_part1->proc~input_str proc~krn_add krn_t%krn_add proc~solid_init_part1->proc~krn_add proc~material_init material_init proc~solid_init_part1->proc~material_init proc~signal_init signal_t%signal_init proc~solid_init_part1->proc~signal_init 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_bin1d->proc~input_has_key interface~to_str to_str proc~input_bin1d->interface~to_str proc~input_bin1d->proc~continue_if proc~input_bin1d->proc~input_node proc~input_bin1d->proc~select_scalar proc~input_bin1d->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 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~material_init->proc~input_str 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~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 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~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~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

Called by

proc~~solid_init_part1~~CalledByGraph proc~solid_init_part1 solid_init_part1 program~reims_p reims_p program~reims_p->proc~solid_init_part1

Source Code

subroutine solid_init_part1(me, krn, cfg, h5, sim)
    type(solid_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) :: T_init
    integer :: i, ii, nb_non_zeros_exp, nb_non_zeros_imp, nb_SS_src_ports
     
    if(cfg%has_key('nodes')) then ! means uniform mesh
        me%MC_Prop%NbCells = cfg%int('nodes')
        allocate(me%MC_Prop%dxLoc(me%MC_Prop%NbCells),me%MC_Prop%volLoc(me%MC_Prop%NbCells))
        me%MC_Prop%dxLoc(:)  = cfg%dbl('length')/me%MC_Prop%NbCells
        me%MC_Prop%volLoc(:) = cfg%dbl('volume')/me%MC_Prop%NbCells
    else ! variable mesh
        me%MC_Prop%NbCells=size(cfg%dbl1d('length'))
        allocate(me%MC_Prop%dxLoc(me%MC_Prop%NbCells),me%MC_Prop%volLoc(me%MC_Prop%NbCells))
        me%MC_Prop%dxLoc(:)  = cfg%dbl1d('length')
        me%MC_Prop%volLoc(:) = cfg%dbl1d('volume', n=me%MC_Prop%NbCells)
    endif

    me%MC_Prop%SSsrcLink = cfg%bin('solid_link')

    call material_init(me%mat,cfg)

    allocate(me%MC_Prop%FSlink(me%MC_Prop%NbCells))
    me%MC_Prop%FSlink(:) = cfg%bin1D('channel_link', n=me%MC_Prop%NbCells)
    
    ! For HDF5
    me%hdf%name   = cfg%str('id')
    me%hdf%node_x = [(sum(me%MC_Prop%dxLoc(1:i-1)) + me%MC_Prop%dxLoc(i)/2, &
                     i = 1, me%MC_Prop%NbCells)]
    call h5%add_to_table(me%hdf,'solid')

    call all_solid_allocation(me)
    
    call me%Q_ext_load%init(sim,cfg,'flux',me%hdf%node_x)

    T_init=cfg%dbl('initial/t')
    do ii=1,me%MC_Prop%NbCells
        me%StVar%MCtemp(ii)=T_init
    enddo

    me%MC_Prop%cond_btw_nodes=cfg%bin('conduction_between_nodes')
        
    nb_non_zeros_exp=me%MC_Prop%NbCells

    if(me%MC_Prop%cond_btw_nodes) then
        nb_non_zeros_imp=2
        do i=2,me%MC_Prop%NbCells-1
            nb_non_zeros_imp=nb_non_zeros_imp+3
        enddo
        nb_non_zeros_imp=nb_non_zeros_imp+2
    else
        nb_non_zeros_imp=me%MC_Prop%NbCells
    endif

    me%MC_Prop%nb_FS_ports=0
    do ii=1,me%MC_Prop%NbCells
        if(me%MC_Prop%FSlink(ii)) me%MC_Prop%nb_FS_ports=me%MC_Prop%nb_FS_ports+1
    enddo 

    if(me%MC_Prop%SSsrcLink) then
        nb_SS_src_ports=me%MC_Prop%NbCells
    else
        nb_SS_src_ports=0
    endif

    call krn%add(cfg%str('id'),me%MC_Prop%NbCells,nb_non_zeros_exp,nb_non_zeros_imp,0,me%MC_Prop%nb_FS_ports,0,0,nb_SS_src_ports)
    
end subroutine solid_init_part1