circulator_init_part2 Subroutine

public subroutine circulator_init_part2(me, krn, cfg)

Arguments

Type IntentOptional Attributes Name
type(circulator_t), intent(inout) :: me
type(krn_t), intent(inout), target :: krn
class(input_t), intent(in), pointer :: cfg

Calls

proc~~circulator_init_part2~~CallsGraph proc~circulator_init_part2 circulator_init_part2 interface~to_ptr_arr to_ptr_arr proc~circulator_init_part2->interface~to_ptr_arr proc~convert2int_port convert2int_port proc~circulator_init_part2->proc~convert2int_port proc~input_dict1d input_t%input_dict1d proc~circulator_init_part2->proc~input_dict1d proc~input_str input_t%input_str proc~circulator_init_part2->proc~input_str proc~krn_coo_add_link krn_t%krn_coo_add_link proc~circulator_init_part2->proc~krn_coo_add_link proc~port_list_find port_list_t%port_list_find proc~circulator_init_part2->proc~port_list_find proc~to_ptr_arr0d to_ptr_arr0d interface~to_ptr_arr->proc~to_ptr_arr0d proc~to_ptr_arr1d to_ptr_arr1d interface~to_ptr_arr->proc~to_ptr_arr1d proc~to_ptr_arr2d to_ptr_arr2d interface~to_ptr_arr->proc~to_ptr_arr2d get_string get_string proc~input_dict1d->get_string proc~input_has_key input_t%input_has_key proc~input_dict1d->proc~input_has_key proc~input_node input_t%input_node proc~input_dict1d->proc~input_node proc~select_dict select_dict proc~input_dict1d->proc~select_dict proc~select_list select_list proc~input_dict1d->proc~select_list proc~input_str->proc~input_has_key proc~input_str->proc~input_node proc~select_scalar select_scalar proc~input_str->proc~select_scalar interface~to_str to_str proc~port_list_find->interface~to_str proc~to_int to_int proc~port_list_find->proc~to_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~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

Called by

proc~~circulator_init_part2~~CalledByGraph proc~circulator_init_part2 circulator_init_part2 program~reims_p reims_p program~reims_p->proc~circulator_init_part2

Source Code

subroutine circulator_init_part2(me,krn,cfg)
    type(circulator_t),   intent(inout) :: me
    type(krn_t), target,  intent(inout) :: krn
    class(input_t), pointer, intent(in) :: cfg

    type(input_t), allocatable :: branches(:)

    branches = cfg%dict1d('link')

    me%br(1)%p => krn%FF_flux_ports(krn%FF_flux_list%find(branches(1)%str('id'),&
                                    convert2int_port(branches(1)%str('node'))))
    if(me%br(1)%p%connected) then
        print*,'Port ',branches(1)%int('node'),' belonging to ',branches(1)%str('id'),' already connected to a link'
        stop
    endif
    if(convert2int_port(branches(1)%str('node'))/=2) then
        print*,'The node of the 1st link must be out'
        stop
    endif
    me%br(1)%p%connected=.true.

    me%br(2)%p => krn%FF_flux_ports(krn%FF_flux_list%find(branches(2)%str('id'),&
                                    convert2int_port(branches(2)%str('node'))))
    if(me%br(2)%p%connected) then
        print*,'Port ',branches(2)%int('node'),' belonging to ',branches(2)%str('id'),' already connected to a link'
        stop
    endif
    me%br(2)%p%connected=.true.    

    call krn%coo_add_link(me%br(1)%p, me%br(2)%p, idx_4x4_col, idx_4x4_row, to_ptr_arr(me%MxInOut))
    call krn%coo_add_link(me%br(2)%p, me%br(1)%p, idx_4x4_col, idx_4x4_row, to_ptr_arr(me%MxOutin))
end subroutine circulator_init_part2