Fluid port initialisation for mesh2Ds
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(mesh2D_t), | intent(inout), | target | :: | me | ||
| type(krn_t), | intent(inout) | :: | krn | |||
| class(input_t), | intent(in), | pointer | :: | cfg |
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