@@ -45,6 +45,10 @@ function Geometry.PatchTopology(model::DistributedDiscreteModel;kwargs...)
4545 Geometry. PatchTopology (ReferenceFE{D},model;kwargs... )
4646end
4747
48+ function Geometry. get_patch_cells (ptopo:: DistributedPatchTopology )
49+ map (Geometry. get_patch_cells,local_views (ptopo))
50+ end
51+
4852# PatchTriangulation
4953
5054function Geometry. PatchTriangulation (model:: DistributedDiscreteModel ,ptopo:: DistributedPatchTopology ;kwargs... )
@@ -127,13 +131,19 @@ function Arrays.evaluate!(
127131)
128132 n_fields = num_fields (v)
129133 mf_fields = map (evaluate,local_views (k),local_views (v))
130- sf_fields = map (1 : n_fields) do field
131- sf_fields = map (f -> f[field], mf_fields)
132- trians = map (get_triangulation,sf_fields)
134+ if eltype (mf_fields) <: MultiField.MultiFieldCellField
135+ sf_fields = map (1 : n_fields) do field
136+ sf_fields = map (f -> f[field], mf_fields)
137+ trians = map (get_triangulation,sf_fields)
138+ trian = DistributedTriangulation (trians,k. model)
139+ DistributedCellField (sf_fields,trian)
140+ end
141+ return DistributedMultiFieldCellField (sf_fields, mf_fields)
142+ else
143+ trians = map (get_triangulation,mf_fields)
133144 trian = DistributedTriangulation (trians,k. model)
134- DistributedCellField (sf_fields ,trian)
145+ return DistributedCellField (mf_fields ,trian)
135146 end
136- return DistributedMultiFieldCellField (sf_fields, mf_fields)
137147end
138148
139149# Patch assembly
231241
232242# merge_assembly_data
233243
244+ function merge_assembly_data (data:: AbstractArray... )
245+ map (FESpaces. merge_assembly_data,data... )
246+ end
247+
234248function FESpaces. merge_assembly_matvec_data (data:: AbstractArray... )
235249 map (FESpaces. merge_assembly_matvec_data,data... )
236250end
251+
252+
253+ function FESpaces. collect_and_merge_cell_matrix (assem:: DistributedPatchAssembler ,contributions... )
254+ data = ()
255+ for c in contributions
256+ data = (data... , FESpaces. collect_patch_cell_matrix (assem,c... ))
257+ end
258+ FESpaces. merge_assembly_data (data... )
259+ end
260+
261+ function FESpaces. collect_and_merge_cell_vector (assem:: DistributedPatchAssembler ,contributions... )
262+ data = ()
263+ for c in contributions
264+ data = (data... , FESpaces. collect_patch_cell_vector (assem,c... ))
265+ end
266+ FESpaces. merge_assembly_data (data... )
267+ end
268+
269+ function FESpaces. collect_and_merge_cell_matrix_and_vector (assem:: DistributedPatchAssembler ,contributions... )
270+ data = ()
271+ for c in contributions
272+ data = (data... , FESpaces. collect_patch_cell_matrix_and_vector (assem,c... ))
273+ end
274+ FESpaces. merge_assembly_matvec_data (data... )
275+ end
0 commit comments