MCPcopy Create free account
hub / github.com/AMReX-Codes/amrex / EBDataCollection

Method EBDataCollection

Src/EB/AMReX_EBDataCollection.cpp:12–85  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

10namespace amrex {
11
12EBDataCollection::EBDataCollection (const EB2::Level& a_level,
13 const Geometry& a_geom,
14 const BoxArray& a_ba_in,
15 const DistributionMapping& a_dm,
16 Vector<int> a_ngrow, EBSupport a_support)
17 : m_ngrow(std::move(a_ngrow)),
18 m_support(a_support),
19 m_geom(a_geom)
20{
21 // The BoxArray argument may not be cell-centered BoxArray.
22 const BoxArray& a_ba = amrex::convert(a_ba_in, IntVect::TheZeroVector());
23
24 if (m_support >= EBSupport::basic)
25 {
26 AMREX_ALWAYS_ASSERT(!m_ngrow.empty());
27
28 m_cellflags = new FabArray<EBCellFlagFab>(a_ba, a_dm, 1, m_ngrow[0], MFInfo(),
29 DefaultFabFactory<EBCellFlagFab>());
30 a_level.fillEBCellFlag(*m_cellflags, m_geom);
31 m_levelset = new MultiFab(amrex::convert(a_ba,IntVect::TheUnitVector()), a_dm,
32 1, m_ngrow[0], MFInfo(), FArrayBoxFactory());
33 a_level.fillLevelSet(*m_levelset, m_geom);
34 }
35
36 if (m_support >= EBSupport::volume)
37 {
38 AMREX_ALWAYS_ASSERT((m_ngrow.size() >= 2) && (m_ngrow[1] <= m_ngrow[0]));
39
40 m_volfrac = new MultiFab(a_ba, a_dm, 1, m_ngrow[1], MFInfo(), FArrayBoxFactory());
41 a_level.fillVolFrac(*m_volfrac, m_geom);
42
43 m_centroid = new MultiCutFab(a_ba, a_dm, AMREX_SPACEDIM, m_ngrow[1], *m_cellflags);
44 a_level.fillCentroid(*m_centroid, m_geom);
45 }
46
47 if (m_support == EBSupport::full)
48 {
49 AMREX_ALWAYS_ASSERT((m_ngrow.size() >= 3) && (m_ngrow[2] <= m_ngrow[0]));
50
51 const int ng = m_ngrow[2];
52
53 m_bndrycent = new MultiCutFab(a_ba, a_dm, AMREX_SPACEDIM, ng, *m_cellflags);
54 a_level.fillBndryCent(*m_bndrycent, m_geom);
55
56 m_bndryarea = new MultiCutFab(a_ba, a_dm, 1, ng, *m_cellflags);
57 a_level.fillBndryArea(*m_bndryarea, m_geom);
58
59 m_bndrynorm = new MultiCutFab(a_ba, a_dm, AMREX_SPACEDIM, ng, *m_cellflags);
60 a_level.fillBndryNorm(*m_bndrynorm, m_geom);
61
62 for (int idim = 0; idim < AMREX_SPACEDIM; ++idim) {
63 const BoxArray& faceba = amrex::convert(a_ba, IntVect::TheDimensionVector(idim));
64 m_areafrac[idim] = new MultiCutFab(faceba, a_dm, 1, ng, *m_cellflags);
65 m_facecent[idim] = new MultiCutFab(faceba, a_dm, AMREX_SPACEDIM-1, ng, *m_cellflags);
66 IntVect edge_type{1}; edge_type[idim] = 0;
67 m_edgecent[idim] = new MultiCutFab(amrex::convert(a_ba, edge_type), a_dm,
68 1, ng, *m_cellflags);
69 }

Callers

nothing calls this directly

Calls 15

convertFunction · 0.85
MFInfoClass · 0.85
fillEBCellFlagMethod · 0.80
fillLevelSetMethod · 0.80
fillVolFracMethod · 0.80
fillCentroidMethod · 0.80
fillBndryCentMethod · 0.80
fillBndryAreaMethod · 0.80
fillBndryNormMethod · 0.80
fillAreaFracMethod · 0.80
fillFaceCentMethod · 0.80
fillEdgeCentMethod · 0.80

Tested by

no test coverage detected