SSsrcLink_init_part1 Subroutine

public subroutine SSsrcLink_init_part1(me, krn, cfg)

Arguments

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

Calls

proc~~sssrclink_init_part1~~CallsGraph proc~sssrclink_init_part1 SSsrcLink_init_part1 proc~input_dict1d input_t%input_dict1d proc~sssrclink_init_part1->proc~input_dict1d proc~input_has_key input_t%input_has_key proc~sssrclink_init_part1->proc~input_has_key proc~input_int1d input_t%input_int1d proc~sssrclink_init_part1->proc~input_int1d proc~input_str input_t%input_str proc~sssrclink_init_part1->proc~input_str proc~input_str1d input_t%input_str1d proc~sssrclink_init_part1->proc~input_str1d proc~krn_add krn_t%krn_add proc~sssrclink_init_part1->proc~krn_add proc~port_list_find_nbports port_list_t%port_list_find_nbPorts proc~sssrclink_init_part1->proc~port_list_find_nbports proc~input_dict1d->proc~input_has_key get_string get_string proc~input_dict1d->get_string 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 get get proc~input_has_key->get proc~input_has_key->proc~select_dict proc~input_int1d->proc~input_has_key interface~to_str to_str proc~input_int1d->interface~to_str proc~continue_if continue_if proc~input_int1d->proc~continue_if proc~get1d_range get1d_range proc~input_int1d->proc~get1d_range proc~input_int1d->proc~input_node proc~select_scalar select_scalar proc~input_int1d->proc~select_scalar to_integer to_integer proc~input_int1d->to_integer proc~input_str->proc~input_has_key proc~input_str->proc~input_node proc~input_str->proc~select_scalar proc~input_str1d->proc~input_has_key proc~input_str1d->proc~input_node proc~input_str1d->proc~select_scalar proc~port_list_add port_list_t%port_list_add proc~krn_add->proc~port_list_add proc~to_int to_int proc~port_list_find_nbports->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~get1d_range->proc~input_has_key proc~input_node->get proc~input_node->proc~select_dict proc~dictionary_traverse dictionary_traverse proc~input_node->proc~dictionary_traverse 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

Called by

proc~~sssrclink_init_part1~~CalledByGraph proc~sssrclink_init_part1 SSsrcLink_init_part1 program~reims_p reims_p program~reims_p->proc~sssrclink_init_part1

Source Code

subroutine SSsrcLink_init_part1(me,krn,cfg)
    type(SSsrcLink_t), intent(out) :: me
    type(krn_t), intent(inout) :: krn
    class(input_t), pointer, intent(in) :: cfg

    integer :: nb_non_zeros_exp, nb_non_zeros_imp, nbPorts, i
    type(input_t), allocatable :: links(:)
    type(str_ptr), allocatable :: labels(:)

    links = cfg%dict1d('link')
    me%sizeNodes=size(links(1)%int1d('node'))

    if(links(2)%has_key('node')) then 
      nb_non_zeros_exp = 2*me%sizeNodes
      nb_non_zeros_imp = 2*me%sizeNodes
    else if(links(2)%has_key('label')) then 
      allocate(me%nb_2D_Ports(me%sizeNodes))
      labels=links(2)%str1d('label')
      do i = 1, me%sizeNodes
        me%nb_2D_Ports(i) = krn%SS_src_list%find_nbPorts(links(2)%str('id')//"+"//trim(labels(i)%p))
      enddo
      nb_non_zeros_exp = 2*sum(me%nb_2D_Ports(:))
      nb_non_zeros_imp = 2*sum(me%nb_2D_Ports(:))
    else
        error stop 'solidlink: link[2] requires "node" or "label"'
    endif

    call krn%add('',0,nb_non_zeros_exp,nb_non_zeros_imp,0,0,0,0,0)
end subroutine SSsrcLink_init_part1