@@ -29,6 +29,7 @@ using GridapDistributed: DistributedTriangulation
29
29
using GridapDistributed: DistributedMeasure
30
30
using GridapDistributed: DistributedCellField
31
31
using GridapDistributed: DistributedFESpace
32
+ using GridapDistributed: DistributedVisualizationData
32
33
import GridapDistributed: local_views
33
34
34
35
using GridapEmbedded. Interfaces
206
207
207
208
function _cell_quadrature_and_active_mask (trian:: Grid ,
208
209
:: Algoim ,phi,args;kwargs)
209
- cell_quad = Quadrature (trian,algoim,args... ;kwargs... )
210
+ cell_quad = Quadrature (trian,algoim,phi, args... ;kwargs... )
210
211
cell_to_is_active = is_cell_active (cell_quad)
211
212
cell_quad, cell_to_is_active
212
213
end
@@ -854,7 +855,9 @@ get_dimension(::QhullType,dim) = @abstractmethod
854
855
get_dimension (:: DelaunayTrian ,dim) = dim
855
856
get_dimension (:: ConvexHull ,dim) = dim- 1
856
857
858
+ using Gridap. Visualization
857
859
import Gridap. Visualization: visualization_data
860
+ import Gridap. Visualization: writevtk
858
861
859
862
function visualization_data (meas:: Measure ,filename;cellfields= Dict (),qhulltype= DelaunayTrian ())
860
863
node_coordinates = collect (Iterators. flatten (meas. quad. cell_point. values))
@@ -882,11 +885,54 @@ end
882
885
883
886
function _to_grid (node_coordinates:: Vector{<:Point{Dp,Tp}} ,qhulltype) where {Dp,Tp}
884
887
d = get_dimension (qhulltype,Dp)
885
- connectivity = delaunay (reinterpret (node_coordinates),get_flags (qhulltype))[1 : (d+ 1 ),:]
888
+ connectivity = length (node_coordinates) == 0 ? Matrix {Int32} (undef,0 ,0 ) :
889
+ delaunay (reinterpret (node_coordinates),get_flags (qhulltype))[1 : (d+ 1 ),:]
886
890
cell_node_ids = Table (collect (eachcol (connectivity)))
887
891
reffes = [LagrangianRefFE (Float64,Simplex (Val {d} ()),1 )]
888
892
cell_types = collect (Fill (Int8 (1 ),length (cell_node_ids)))
889
893
UnstructuredGrid (node_coordinates,cell_node_ids,reffes,cell_types)
890
894
end
891
895
896
+ function visualization_data (meas:: DistributedMeasure ,
897
+ filename;
898
+ cellfields= Dict (),
899
+ qhulltype= DelaunayTrian ())
900
+ trian = meas. trian
901
+ cell_gids = get_cell_gids (trian. model)
902
+ vd = map (
903
+ partition (cell_gids),local_views (meas)) do lindices,meas
904
+ node_coordinates = collect (Iterators. flatten (meas. quad. cell_point. values))
905
+ grid = _to_grid (node_coordinates,qhulltype)
906
+ part = part_id (lindices)
907
+ celldata = Dict {Any,Any} ()
908
+ # we do not use "part" since it is likely to be used by the user
909
+ if haskey (celldata," piece" )
910
+ @unreachable " piece is a reserved cell data name"
911
+ end
912
+ celldata[" piece" ] = fill (part,num_cells (grid))
913
+ # ndata = Dict()
914
+ # for (k,v) in cellfields
915
+ # pts = get_cell_points(meas)
916
+ # eval = evaluate(v,pts)
917
+ # ndata[k] = collect(Iterators.flatten(eval))
918
+ # end
919
+ vd = visualization_data (grid,filename,celldata= celldata) # ,nodaldata=ndata)
920
+ @assert length (vd) == 1
921
+ vd[1 ]
922
+ end
923
+ [DistributedVisualizationData (vd)]
924
+ end
925
+
926
+ function writevtk (
927
+ arg:: DistributedMeasure ,args... ;
928
+ compress= false ,append= true ,ascii= false ,vtkversion= :default ,kwargs... )
929
+ parts= get_parts (arg. trian)
930
+ map (visualization_data (arg,args... ;kwargs... )) do visdata
931
+ write_vtk_file (
932
+ parts,visdata. grid,visdata. filebase,celldata= visdata. celldata,nodaldata= visdata. nodaldata,
933
+ compress= compress, append= append, ascii= ascii, vtkversion= vtkversion
934
+ )
935
+ end
936
+ end
937
+
892
938
end # module
0 commit comments