Skip to content

Commit d07a9ed

Browse files
committed
VolumeFromBoundary surviving for edges
1 parent 91b784e commit d07a9ed

File tree

1 file changed

+26
-21
lines changed

1 file changed

+26
-21
lines changed

comp/meshaccess.cpp

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2435,30 +2435,35 @@ namespace ngcomp
24352435
vol_cf->Evaluate(ir, values);
24362436
return;
24372437
}
2438-
const MeshAccess & ma = *static_cast<const MeshAccess*> (trafo.GetMesh());
2439-
int facet = ma.GetElFacets(ei)[0];
2440-
ArrayMem<int,2> elnums;
2441-
ma.GetFacetElements (facet, elnums);
24422438

2443-
for (auto elnr : elnums)
2439+
const MeshAccess & ma = *static_cast<const MeshAccess*> (trafo.GetMesh());
2440+
if (ei.IsBoundary())
24442441
{
2445-
ElementId vei(VOL, elnr);
2446-
int locfacnr = ma.GetElFacets(vei).Pos(facet);
2447-
2448-
ElementTransformation & vol_trafo = ma.GetTrafo (vei, lh);
2449-
if (!vol_cf->DefinedOn(vol_trafo)) continue;
2450-
2451-
Facet2ElementTrafo f2el(vol_trafo.GetElementType(), ma.GetElVertices(vei));
2452-
Array<int> surfvnums { ma.GetElVertices(ei) };
2453-
Facet2SurfaceElementTrafo f2sel(trafo.GetElementType(), surfvnums);
2454-
auto & ir_ref = f2sel.Inverse(ir.IR(), lh);
2455-
auto & ir_vol = f2el(locfacnr, ir_ref, lh);
2456-
auto & mir_vol = vol_trafo(ir_vol, lh);
2457-
mir_vol.ComputeNormalsAndMeasure (vol_trafo.GetElementType(), locfacnr);
2458-
vol_cf -> Evaluate (mir_vol, values);
2459-
return;
2442+
int facet = ma.GetElFacets(ei)[0];
2443+
ArrayMem<int,2> elnums;
2444+
ma.GetFacetElements (facet, elnums);
2445+
2446+
for (auto elnr : elnums)
2447+
{
2448+
ElementId vei(VOL, elnr);
2449+
int locfacnr = ma.GetElFacets(vei).Pos(facet);
2450+
2451+
ElementTransformation & vol_trafo = ma.GetTrafo (vei, lh);
2452+
if (!vol_cf->DefinedOn(vol_trafo)) continue;
2453+
2454+
Facet2ElementTrafo f2el(vol_trafo.GetElementType(), ma.GetElVertices(vei));
2455+
Array<int> surfvnums { ma.GetElVertices(ei) };
2456+
Facet2SurfaceElementTrafo f2sel(trafo.GetElementType(), surfvnums);
2457+
auto & ir_ref = f2sel.Inverse(ir.IR(), lh);
2458+
auto & ir_vol = f2el(locfacnr, ir_ref, lh);
2459+
auto & mir_vol = vol_trafo(ir_vol, lh);
2460+
mir_vol.ComputeNormalsAndMeasure (vol_trafo.GetElementType(), locfacnr);
2461+
vol_cf -> Evaluate (mir_vol, values);
2462+
return;
2463+
}
24602464
}
2461-
2465+
2466+
values.AddSize(Dimension(), ir.Size()) = T(0.0);
24622467
}
24632468

24642469
template <typename MIR, typename T, ORDERING ORD>

0 commit comments

Comments
 (0)