Skip to content

Commit

Permalink
Distributed compat with GridapEmbedded + periodic mesh
Browse files Browse the repository at this point in the history
  • Loading branch information
zjwegert committed Jun 8, 2024
1 parent 11bcd78 commit 5e319d8
Show file tree
Hide file tree
Showing 5 changed files with 77 additions and 49 deletions.
26 changes: 26 additions & 0 deletions scripts/Embedded/DiscreteGeometryTesting/mpi_2d.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
using Gridap, GridapDistributed, PartitionedArrays

using GridapEmbedded, GridapEmbedded.Distributed, GridapEmbedded.LevelSetCutters
using GridapEmbedded.Distributed: DistributedDiscreteGeometry

function main(distribute,mesh_partition;name)
ranks = distribute(LinearIndices((prod(mesh_partition),)))
model = CartesianDiscreteModel(ranks,mesh_partition,(0,1,0,1),(100,100));
V_φ = TestFESpace(model,ReferenceFE(lagrangian,Float64,1))
φh = interpolate(x->-cos(4π*x[1])*cos(4*pi*x[2])/4-0.2/4,V_φ)

geo = DistributedDiscreteGeometry(φh,model)
cutgeo = cut(model,geo)
Ω = Triangulation(cutgeo,PHYSICAL)
writevtk(Ω,"./results/discrete_geo_$(name)_2d",cellfields=["φh"=>φh])
end

# with_debug() do distribute
# mesh_partition = (2,3);
# main(distribute,mesh_partition;name="DebugMPI")
# end

with_mpi() do distribute
mesh_partition = (2,3);
main(distribute,mesh_partition;name="MPI")
end
26 changes: 26 additions & 0 deletions scripts/Embedded/DiscreteGeometryTesting/mpi_3d.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
using Gridap, GridapDistributed, PartitionedArrays

using GridapEmbedded, GridapEmbedded.Distributed, GridapEmbedded.LevelSetCutters
using GridapEmbedded.Distributed: DistributedDiscreteGeometry

function main(distribute,mesh_partition;name)
ranks = distribute(LinearIndices((prod(mesh_partition),)))
model = CartesianDiscreteModel(ranks,mesh_partition,(0,1,0,1,0,1),(64,64,64));
V_φ = TestFESpace(model,ReferenceFE(lagrangian,Float64,1))
φh = interpolate(x->-cos(4π*x[1])*cos(4*pi*x[2])*cos(4*pi*x[3])/4-0.2/4,V_φ)

geo = DistributedDiscreteGeometry(φh,model)
cutgeo = cut(model,geo)
Ω = Triangulation(cutgeo,PHYSICAL)
writevtk(Ω,"./results/discrete_geo_$(name)_3d",cellfields=["φh"=>φh])
end

# with_debug() do distribute
# mesh_partition = (2,3,4);
# main(distribute,mesh_partition;name="DebugMPI")
# end

with_mpi() do distribute
mesh_partition = (2,2,2);
main(distribute,mesh_partition;name="MPI")
end
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
using Pkg; Pkg.activate()

using Gridap
using GridapEmbedded

using GridapEmbedded,GridapEmbedded.LevelSetCutters
import Gridap.Geometry: get_node_coordinates,collect1d

model = CartesianDiscreteModel((0,1,0,1),(100,100));
V_φ = TestFESpace(model,ReferenceFE(lagrangian,Float64,1))
V_φ = TestFESpace(model,ReferenceFE(lagrangian,Float64,2))

φh = interpolate(x->-cos(4π*x[1])*cos(4*pi*x[2])/4-0.2/4,V_φ)
point_to_coords = collect1d(get_node_coordinates(model))
Expand Down
35 changes: 0 additions & 35 deletions scripts/Embedded/gridap_embedded_testing_MWE_distributed_issue.jl

This file was deleted.

31 changes: 22 additions & 9 deletions scripts/Embedded/gridap_embedded_testing_MWE_periodic.jl
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,28 @@ import Gridap.Geometry: get_node_coordinates,collect1d
model = CartesianDiscreteModel((0,1,0,1),(100,100),isperiodic=(true,true));
V_φ = TestFESpace(model,ReferenceFE(lagrangian,Float64,1))

φh = interpolate(x->-cos(4π*x[1])*cos(4*pi*x[2])/4-0.2/4,V_φ)
analytic_geo=GridapEmbedded.disk(0.6;x0=Point(0.5,0.5))
cutgeo = cut(model,analytic_geo)

# point_to_coords = model.grid_topology.vertex_coordinates
# geo = DiscreteGeometry(get_free_dof_values(φh),point_to_coords,name="")
# cutgeo = cut(model,geo)
## Discrete
φh = interpolate(x->-cos(4π*(x[1]))*cos(4*pi*x[2])/4-0.2/4,V_φ)
point_to_coords = collect1d(get_node_coordinates(model))
geo = DiscreteGeometry(φh(point_to_coords),point_to_coords,name="")
cutgeo = cut(model,geo)

Ω = Triangulation(cutgeo,PHYSICAL)
Ω_act = Triangulation(cutgeo,ACTIVE)

# writevtk(Ω,"./results/discrete_geo_periodic",cellfields=["φh"=>φh])

V_φ_test = TestFESpace(Ω_act,ReferenceFE(lagrangian,Float64,1))
φh_test = interpolate(x->sqrt(x[1]^2+x[2]^2)-0.5,V_φ_test)
writevtk(Ω,"./results/discrete_geo_periodic",cellfields=["φh"=>φh_test])

## Analytic
analytic_geo=AnalyticalGeometry(x->-cos(4π*(x[1]))*cos(4*pi*x[2])/4-0.2/4)
cutgeo_analytic = cut(model,analytic_geo)
Ω_analytic = Triangulation(cutgeo_analytic,PHYSICAL)
Ω_analytic_act = Triangulation(cutgeo_analytic,ACTIVE)
# writevtk(Ω_analytic,"./results/analytic_geo_periodic",cellfields=["φh"=>φh])

writevtk(Ω,"./results/discrete_geo_periodic",cellfields=["φh"=>φh])
writevtk(Triangulation(model),"./results/discrete_geo_periodic_full",cellfields=["φh"=>φh])
V_φ_test = TestFESpace(Ω_analytic_act,ReferenceFE(lagrangian,Float64,1))
φh_test = interpolate(x->sqrt(x[1]^2+x[2]^2)-0.5,V_φ_test)
writevtk(Ω_analytic,"./results/analytic_geo_periodic",cellfields=["φh"=>φh_test])

0 comments on commit 5e319d8

Please sign in to comment.