Skip to content

Parallelization of a concentrated load using GridapDistributed #132

Description

@ZiwenH

I'm trying to parallelize a linear elastic problem solver with a concentrated load applied on the middle point of ine boundary. In series code the load is described using DiracDelta function as following:

function DiracDelta(model::DiscreteModel{D}, pvec::Vector{Point{D,T}}) where {D,T}
trian = Triangulation(model)
cell_to_pindices = _cell_to_pindices(pvec,trian)
cell_ids = collect(keys(cell_to_pindices))
cell_points = collect(values(cell_to_pindices))
points = map(i->pvec[cell_points[i]], 1:length(cell_ids))
weights_x_cell = Fill.(one(T),length.(cell_points))
pquad = map(i -> GenericQuadrature(points[i],weights_x_cell[i]), 1:length(cell_ids))
trianv = view(trian,cell_ids)
pmeas = Measure(CellQuadrature(pquad,points,weights_x_cell,trianv,PhysicalDomain(),PhysicalDomain()))
GenericDiracDelta{0,D,NotGridEntity}(trianv,pmeas)
end

Since in parallel mode, the model is a GenericDistributedDiscreteModel() which is not supported in original definition, I tried to write a parallel version of it:

tmp = map(local_views(model)) do model
p = Point(1.0,0.5)
trian = Triangulation(model)
cache = _point_to_cell_cache(KDTreeSearch(),trian)
cell = _point_to_cell!(cache, p)
...
end

Yet the _point_to_cell!(cache,p) throughs an error: ERROR: AssertionError: Point (1.0, 0.5) is not inside any active cell
I'm quite sure that point p is in the grid and the serial code runs well. Any idea how this problem results from? Or is there any other parallel application of a concentrated load on a point or a line?

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions