FSlink_init_part1 Subroutine

public subroutine FSlink_init_part1(me, krn, cfg)

Arguments

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

Calls

proc~~fslink_init_part1~~CallsGraph proc~fslink_init_part1 FSlink_init_part1 proc~input_dict1d input_t%input_dict1d proc~fslink_init_part1->proc~input_dict1d proc~input_has_key input_t%input_has_key proc~fslink_init_part1->proc~input_has_key proc~input_int1d input_t%input_int1d proc~fslink_init_part1->proc~input_int1d proc~input_str input_t%input_str proc~fslink_init_part1->proc~input_str proc~input_str1d input_t%input_str1d proc~fslink_init_part1->proc~input_str1d proc~krn_add krn_t%krn_add proc~fslink_init_part1->proc~krn_add proc~port_list_find_nbports port_list_t%port_list_find_nbPorts proc~fslink_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~~fslink_init_part1~~CalledByGraph proc~fslink_init_part1 FSlink_init_part1 program~reims_p reims_p program~reims_p->proc~fslink_init_part1

Source Code

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

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

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

    if(links(2)%has_key('node')) then 
        nb_non_zeros_exp = (Nb_VarC+2)*me%sizeNodes
        nb_non_zeros_imp = (Nb_VarC+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%FS_list%find_nbPorts(links(2)%str('id')//"+"//trim(labels(i)%p))
        enddo
        nb_non_zeros_exp = (Nb_VarC+2)*sum(me%nb_2D_Ports(:))
        nb_non_zeros_imp = (Nb_VarC+2)*sum(me%nb_2D_Ports(:))
    else
        error stop 'thermalink: 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 FSlink_init_part1