strand_init_part1 Subroutine

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

Arguments

Type IntentOptional Attributes Name
type(strand_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~~strand_init_part1~~CallsGraph proc~strand_init_part1 strand_init_part1 proc~all_strand_allocation all_strand_allocation proc~strand_init_part1->proc~all_strand_allocation proc~hdf5_add_to_table hdf5_t%hdf5_add_to_table proc~strand_init_part1->proc~hdf5_add_to_table proc~input_bin input_t%input_bin proc~strand_init_part1->proc~input_bin proc~input_dbl input_t%input_dbl proc~strand_init_part1->proc~input_dbl proc~input_dbl1d input_t%input_dbl1d proc~strand_init_part1->proc~input_dbl1d proc~input_dict input_t%input_dict proc~strand_init_part1->proc~input_dict proc~input_has_key input_t%input_has_key proc~strand_init_part1->proc~input_has_key proc~input_str input_t%input_str proc~strand_init_part1->proc~input_str proc~krn_add krn_t%krn_add proc~strand_init_part1->proc~krn_add proc~material_init material_init proc~strand_init_part1->proc~material_init proc~signal_init signal_t%signal_init proc~strand_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_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 proc~input_dict->proc~input_has_key proc~input_dict1d input_t%input_dict1d proc~input_dict->proc~input_dict1d proc~input_dict->proc~input_node 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_dict 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_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_dict1d->proc~input_has_key proc~input_dict1d->proc~input_node proc~input_dict1d->proc~select_dict get_string get_string proc~input_dict1d->get_string proc~input_dict1d->proc~select_list 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

Called by

proc~~strand_init_part1~~CalledByGraph proc~strand_init_part1 strand_init_part1 program~reims_p reims_p program~reims_p->proc~strand_init_part1

Source Code

subroutine strand_init_part1(me, krn, cfg, h5, sim)
    type(strand_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, num, den
    integer :: i, ii, nb_non_zeros_exp, nb_non_zeros_imp, nb_FS_ports

    if(cfg%has_key('nodes')) then ! means uniform mesh
        me%SC_Prop%NbCells = cfg%int('nodes')
        me%SC_Prop%Length = cfg%dbl('length')
        allocate(me%SC_Prop%dxLoc(me%SC_Prop%NbCells))
        me%SC_Prop%dxLoc(:)=me%SC_Prop%Length/me%SC_Prop%NbCells
    else ! variable mesh
        me%SC_Prop%NbCells=size(cfg%dbl1d('length'))
        allocate(me%SC_Prop%dxLoc(me%SC_Prop%NbCells))
        me%SC_Prop%dxLoc(:)=cfg%dbl1d('length')
        me%SC_Prop%Length = sum(me%SC_Prop%dxLoc(:))
    endif    

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

    me%NbConst=2
    call all_strand_allocation(me)     

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

    call material_init(me%mat_stab,cfg%dict('stabilizer'))
    call material_init(me%mat_supc,cfg%dict('superconductor'))

    me%ct(1)%area = cfg%dbl('stabilizer/area')
    me%ct(1)%type = 'stabilizer'

    me%ct(2)%area = cfg%dbl('superconductor/area')
    me%ct(2)%type = 'superconductor'

    num=me%ct(STAB)%area*me%mat_stab%density+me%ct(SUPC)%area*me%mat_supc%density
    den=me%ct(STAB)%area+me%ct(SUPC)%area
    me%ro_M=num/den

    me%SC_Prop%inner_rad=cfg%dbl('CICC_inner_radius')
    me%SC_Prop%outer_rad=cfg%dbl('CICC_outer_radius')

    me%SC_Prop%FSlink = cfg%bin('channel_link')

    ! default values for 1d_signal
    call me%scen%Q_ext_load%init(sim,cfg,'flux',me%hdf%node_x)
    call me%scen%Bfield_load%init(sim,cfg,'field',me%hdf%node_x)
    call me%scen%dBfield_load%init(sim,cfg,'field_gradient',me%hdf%node_x)
    call me%scen%ElCur_load%init(sim,cfg,'current')
        
    nb_non_zeros_exp=me%SC_Prop%NbCells

    nb_non_zeros_imp=2
    do i=2,me%SC_Prop%NbCells-1
        nb_non_zeros_imp=nb_non_zeros_imp+3
    enddo
    nb_non_zeros_imp=nb_non_zeros_imp+2

    if(me%SC_Prop%FSlink) then
        nb_FS_ports=me%SC_Prop%NbCells
    else
        nb_FS_ports=0
    endif

    call krn%add(cfg%str('id'),me%SC_Prop%NbCells,nb_non_zeros_exp,nb_non_zeros_imp,0,nb_FS_ports,0,2,0)
    
end subroutine strand_init_part1