krn_update Subroutine

public subroutine krn_update(me, rhs_or_solution_view, FF_flux_p_loc, FS_p_loc, FF_src_p_loc, SS_flux_p_loc, SS_src_p_loc, CompName, FF_flux_p_view, FS_p_view, FF_src_p_view, SS_flux_p_view, SS_src_p_view)

Type Bound

krn_t

Arguments

Type IntentOptional Attributes Name
class(krn_t), intent(inout), target :: me
real(kind=dp), intent(out), optional, pointer :: rhs_or_solution_view(:)

Returns pointer with rhs or solution array

integer, intent(in), optional :: FF_flux_p_loc(:)

Position (state index) of the FF_flux ports local to the component

integer, intent(in), optional :: FS_p_loc(:)

Position (state index) of the FS ports local to the component

integer, intent(in), optional :: FF_src_p_loc(:)

Position (state index) of the FF_src ports local to the component

integer, intent(in), optional :: SS_flux_p_loc(:)

Position (state index) of the SS_flux ports local to the component

integer, intent(in), optional :: SS_src_p_loc(:)

Position (state index) of the SS_src ports local to the component

character(len=*), intent(in), optional :: CompName
type(FF_flux_port_t), intent(out), optional, pointer :: FF_flux_p_view(:)

Returns pointer with array of FF_flux ports for this component

type(FS_port_t), intent(out), optional, pointer :: FS_p_view(:)

Returns pointer with array of FS ports for this component

type(FF_src_port_t), intent(out), optional, pointer :: FF_src_p_view(:)

Returns pointer with array of FF_src ports for this component

type(SS_flux_port_t), intent(out), optional, pointer :: SS_flux_p_view(:)

Returns pointer with array of SS_flux ports for this component

type(SS_src_port_t), intent(out), optional, pointer :: SS_src_p_view(:)

Returns pointer with array of SS_src ports for this component


Calls

proc~~krn_update~~CallsGraph proc~krn_update krn_t%krn_update interface~to_str to_str proc~krn_update->interface~to_str proc~port_list_update port_list_t%port_list_update proc~krn_update->proc~port_list_update 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

Called by

proc~~krn_update~~CalledByGraph proc~krn_update krn_t%krn_update proc~channel_init_part2 channel_init_part2 proc~channel_init_part2->proc~krn_update proc~mesh2d_init_part2 mesh2D_init_part2 proc~mesh2d_init_part2->proc~krn_update proc~solid_init_part2 solid_init_part2 proc~solid_init_part2->proc~krn_update proc~strand_init_part2 strand_init_part2 proc~strand_init_part2->proc~krn_update program~reims_p reims_p program~reims_p->proc~channel_init_part2 program~reims_p->proc~mesh2d_init_part2 program~reims_p->proc~solid_init_part2 program~reims_p->proc~strand_init_part2

Source Code

subroutine krn_update(me, rhs_or_solution_view, FF_flux_p_loc, FS_p_loc, &
        FF_src_p_loc, SS_flux_p_loc, SS_src_p_loc, CompName, FF_flux_p_view, FS_p_view, &
        FF_src_p_view, SS_flux_p_view, SS_src_p_view)
    class(krn_t), target, intent(inout) :: me
    real(dp), pointer, intent(out), optional :: rhs_or_solution_view(:) !! Returns pointer with rhs or solution array
    integer, intent(in), optional :: FF_flux_p_loc(:) !! Position (state index) of the FF_flux ports local to the component
    integer, intent(in), optional :: FS_p_loc(:) !! Position (state index) of the FS ports local to the component
    integer, intent(in), optional :: FF_src_p_loc(:) !! Position (state index) of the FF_src ports local to the component
    integer, intent(in), optional :: SS_flux_p_loc(:) !! Position (state index) of the SS_flux ports local to the component   
    integer, intent(in), optional :: SS_src_p_loc(:) !! Position (state index) of the SS_src ports local to the component  
    character(*), intent(in), optional :: CompName 
    type(FF_flux_port_t), pointer, intent(out), optional :: FF_flux_p_view(:) !! Returns pointer with array of FF_flux ports for this component
    type(FS_port_t), pointer, intent(out), optional :: FS_p_view(:) !! Returns pointer with array of FS ports for this component
    type(FF_src_port_t), pointer, intent(out), optional :: FF_src_p_view(:) !! Returns pointer with array of FF_src ports for this component
    type(SS_flux_port_t), pointer, intent(out), optional :: SS_flux_p_view(:) !! Returns pointer with array of SS_flux ports for this component
    type(SS_src_port_t), pointer, intent(out), optional :: SS_src_p_view(:) !! Returns pointer with array of SS_src ports for this component

    integer :: start_state_idx,ii
    logical :: all_equal
    class(port_t), pointer :: port_ptr(:)

    if(present(rhs_or_solution_view)) me%idx = me%idx + 1
    start_state_idx = sum(me%nb_state_vars(1:me%idx)) - me%nb_state_vars(me%idx)
    if(present(rhs_or_solution_view)) then
        rhs_or_solution_view => me%rhs_or_solution(start_state_idx+1:start_state_idx+me%nb_state_vars(me%idx))
    endif
    if(present(FF_flux_p_loc) .and. present(FF_flux_p_view)) then
        port_ptr => me%FF_flux_list%update(me%idx,FF_flux_p_loc,start_state_idx,me%FF_flux_ports)
        select type (port_ptr); class is (FF_flux_port_t)
            FF_flux_p_view => port_ptr
        end select
    endif
    if(present(FS_p_loc) .and. present(FS_p_view)) then
        port_ptr => me%FS_list%update(me%idx,FS_p_loc,start_state_idx,me%FS_ports)
        select type (port_ptr); class is (FS_port_t)
            FS_p_view => port_ptr
        end select
        if(present(CompName)) then
            all_equal = all(FS_p_loc == [(ii, ii = 1, size(FS_p_loc))])
            if(all_equal) then ! case of strands or solid if uniform channel_link array
                me%PortIdxForFSLink_List = me%PortIdxForFSLink_List//' '//CompName//':0'
            else ! case of solids only
                me%PortIdxForFSLink_List = me%PortIdxForFSLink_List//' '//CompName//':'
                do ii=1,size(FS_p_loc)-1
                    me%PortIdxForFSLink_List = me%PortIdxForFSLink_List//to_str(FS_p_loc(ii))//','
                enddo
                me%PortIdxForFSLink_List = me%PortIdxForFSLink_List//to_str(FS_p_loc(size(FS_p_loc)))
            endif
        endif
    endif
    if(present(FF_src_p_loc) .and. present(FF_src_p_view)) then
        port_ptr => me%FF_src_list%update(me%idx,FF_src_p_loc,start_state_idx,me%FF_src_ports)
        select type (port_ptr); class is (FF_src_port_t)
            FF_src_p_view => port_ptr
        end select
    endif     
    if(present(SS_flux_p_loc) .and. present(SS_flux_p_view)) then
        port_ptr => me%SS_flux_list%update(me%idx,SS_flux_p_loc,start_state_idx,me%SS_flux_ports)
        select type (port_ptr); class is (SS_flux_port_t)
            SS_flux_p_view => port_ptr
        end select
    endif         
    if(present(SS_src_p_loc) .and. present(SS_src_p_view)) then
        port_ptr => me%SS_src_list%update(me%idx,SS_src_p_loc,start_state_idx,me%SS_src_ports)
        select type (port_ptr); class is (SS_src_port_t)
            SS_src_p_view => port_ptr
        end select
    endif     
end subroutine krn_update