mesh2D_init_part2 Subroutine

public subroutine mesh2D_init_part2(me, krn, cfg)

Fluid port initialisation for mesh2Ds

Arguments

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

Calls

proc~~mesh2d_init_part2~~CallsGraph proc~mesh2d_init_part2 mesh2D_init_part2 proc~krn_coo_add krn_t%krn_coo_add proc~mesh2d_init_part2->proc~krn_coo_add proc~krn_update krn_t%krn_update proc~mesh2d_init_part2->proc~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~~mesh2d_init_part2~~CalledByGraph proc~mesh2d_init_part2 mesh2D_init_part2 program~reims_p reims_p program~reims_p->proc~mesh2d_init_part2

Source Code

subroutine mesh2D_init_part2(me, krn, cfg)
    !! Fluid port initialisation for mesh2Ds
    type(mesh2D_t), target, intent(inout) :: me
    type(krn_t),          intent(inout) :: krn
    class(input_t), pointer, intent(in) :: cfg  

    integer :: nb_e,idx,PrevRowIdx,PrevColIdx,jj,i,ii,idx_prev,elem
    real(dp), pointer :: rhs(:)
    integer, allocatable :: list_thp_loc(:),list_thS_loc(:)
    type(FS_port_t), pointer :: FS_ports(:)
    type(SS_src_port_t), pointer :: SS_src_ports(:)

    call krn%update(rhs_or_solution_view=rhs)
    me%big%bvx(1:me%M2D_Prop%nb_elements) => rhs

    if(me%M2D_Prop%Nb_labelCh>0) then
      allocate(me%M2D_Prop%thermP(me%M2D_Prop%Nb_FSports),list_thp_loc(me%M2D_Prop%Nb_FSports))
      idx_prev=0
      do ii=1,me%M2D_Prop%Nb_labelCh
        list_thp_loc(idx_prev+1:idx_prev+me%label%Ch_Arr(ii)%NbElem)= &
                  me%label%Ch_Arr(ii)%array(1:me%label%Ch_Arr(ii)%NbElem)
        idx_prev=idx_prev+me%label%Ch_Arr(ii)%NbElem
      enddo
      call krn%update(FS_p_loc=list_thp_loc,FS_p_view=FS_ports)
      do i=1,me%M2D_Prop%Nb_FSports                          
        me%M2D_Prop%thermP(i)%p => FS_ports(i)
        me%M2D_Prop%thermP(i)%p%typeS = 'mesh2D'
      enddo      
    endif    

    if(me%M2D_Prop%Nb_labelMC>0) then
      allocate(me%M2D_Prop%thermS(me%M2D_Prop%Nb_SSports),list_thS_loc(me%M2D_Prop%Nb_SSports))
      idx_prev=0
      do ii=1,me%M2D_Prop%Nb_labelMC
        list_thS_loc(idx_prev+1:idx_prev+me%label%MC_Arr(ii)%NbElem)= &
                  me%label%MC_Arr(ii)%array(1:me%label%MC_Arr(ii)%NbElem)
        idx_prev=idx_prev+me%label%MC_Arr(ii)%NbElem
      enddo
      call krn%update(SS_src_p_loc=list_thS_loc,SS_src_p_view=SS_src_ports)
      do i=1,me%M2D_Prop%Nb_SSports                          
        me%M2D_Prop%thermS(i)%p => SS_src_ports(i)
        me%M2D_Prop%thermS(i)%p%typeS = 'mesh2D'
      enddo
    endif

    allocate(me%bigLS%ValExp(me%M2D_Prop%nnz),me%bigLS%RowExp(me%M2D_Prop%nnz),me%bigLS%ColExp(me%M2D_Prop%nnz))
    allocate(me%bigLS%ValImp(me%M2D_Prop%nnz),me%bigLS%RowImp(me%M2D_Prop%nnz),me%bigLS%ColImp(me%M2D_Prop%nnz))

    idx=1

    PrevColIdx=0
    PrevRowIdx=0
    do nb_e=1,me%M2D_Prop%nb_elements
        me%bigLS%ValExp(idx)%p => me%big%bmx(nb_e)
        me%bigLS%ColExp(idx)=PrevColIdx+1
        me%bigLS%RowExp(idx)=PrevRowIdx+1

        me%bigLS%ValImp(idx)%p => me%big%bmx(nb_e)
        me%bigLS%ColImp(idx)=PrevColIdx+1
        me%bigLS%RowImp(idx)=PrevRowIdx+1

        idx=idx+1
        PrevColIdx=PrevColIdx+1
        PrevRowIdx=PrevRowIdx+1
    enddo

    PrevRowIdx=0
    do nb_e=1,me%M2D_Prop%nb_elements
        do jj=1,3 ! loop over the 3 potential neighbors of cell nb_e
            if(jj==3 .and. me%M2D_Prop%elem(nb_e)%NbNeigh==2) exit
            if(jj==3 .and. me%M2D_Prop%elem(nb_e)%NbNeigh==1) exit  
            if(jj==2 .and. me%M2D_Prop%elem(nb_e)%NbNeigh==1) exit
  
            me%bigLS%ValExp(idx)%p => me%big%dmx(nb_e,jj)
            me%bigLS%ColExp(idx)=me%M2D_Prop%elem(nb_e)%Neigh(jj)
            me%bigLS%RowExp(idx)=PrevRowIdx+1
    
            me%bigLS%ValImp(idx)%p => me%big%dmx(nb_e,jj)
            me%bigLS%ColImp(idx)=me%M2D_Prop%elem(nb_e)%Neigh(jj)
            me%bigLS%RowImp(idx)=PrevRowIdx+1
  
            idx=idx+1
        enddo
        PrevRowIdx=PrevRowIdx+1        
    enddo

    call krn%coo_add(.true.,me%bigLS%ColExp,me%bigLS%RowExp,me%bigLS%ValExp)
    call krn%coo_add(.false.,me%bigLS%ColImp,me%bigLS%RowImp,me%bigLS%ValImp)

    deallocate(me%bigLS%ValExp,me%bigLS%RowExp,me%bigLS%ColExp)
    deallocate(me%bigLS%ValImp,me%bigLS%RowImp,me%bigLS%ColImp)

end subroutine mesh2D_init_part2