From 8da7aff5519f5dc05b0820fc404e45fe06cbda2b Mon Sep 17 00:00:00 2001 From: Soonpil Kang Date: Thu, 13 Feb 2025 21:20:18 -0800 Subject: [PATCH] Added areaBoun to compute the area of EB. --- Source/EB/ERF_EBAux.cpp | 29 +++++++++++++++++++++++++---- Source/EB/ERF_EBCutCell.H | 9 +++++++++ 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/Source/EB/ERF_EBAux.cpp b/Source/EB/ERF_EBAux.cpp index ca9bb65a6..31bf3fa1d 100644 --- a/Source/EB/ERF_EBAux.cpp +++ b/Source/EB/ERF_EBAux.cpp @@ -47,12 +47,12 @@ define( int const& a_idim, m_facecent[idim] = new MultiCutFab(faceba, a_dmap, AMREX_SPACEDIM-1, a_ngrow[2], *m_cellflags); } + m_bndryarea = new MultiCutFab(grids, a_dmap, 1, a_ngrow[2], *m_cellflags); + m_bndrycent = new MultiCutFab(grids, a_dmap, AMREX_SPACEDIM, a_ngrow[2], *m_cellflags); + m_bndrynorm = new MultiCutFab(grids, a_dmap, AMREX_SPACEDIM, a_ngrow[2], *m_cellflags); + #if 0 m_centroid = new MultiCutFab(a_ba, a_dm, AMREX_SPACEDIM, m_ngrow[1], *m_cellflags); - m_bndrycent = new MultiCutFab(a_ba, a_dm, AMREX_SPACEDIM, m_grow[2], *m_cellflags); - - m_bndryarea = new MultiCutFab(a_ba, a_dm, 1, m_grow[2], *m_cellflags); - m_bndrynorm = new MultiCutFab(a_ba, a_dm, AMREX_SPACEDIM, m_grow[2], *m_cellflags); #endif const auto& FlagFab = a_factory->getMultiEBCellFlagFab(); // EBFArrayBoxFactory, EBDataCollection @@ -88,6 +88,10 @@ define( int const& a_idim, Array4 const& aux_fcent_y = m_facecent[1]->array(mfi); Array4 const& aux_fcent_z = m_facecent[2]->array(mfi); + Array4 const& aux_barea = m_bndryarea->array(mfi); + Array4 const& aux_bcent = m_bndrycent->array(mfi); + Array4 const& aux_bnorm = m_bndrynorm->array(mfi); + bool is_per = a_geom.isPeriodic(a_idim); ParallelFor(bx, [ @@ -98,6 +102,7 @@ define( int const& a_idim, aux_flag, aux_vfrac, aux_afrac_x, aux_afrac_y, aux_afrac_z, aux_fcent_x, aux_fcent_y, aux_fcent_z, + aux_barea, aux_bcent, aux_bnorm, vdim, idim=a_idim, is_per ] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { @@ -130,6 +135,16 @@ define( int const& a_idim, aux_fcent_z(i,j,k+1,0) = 0.0; aux_fcent_z(i,j,k+1,1) = 0.0; } + aux_barea(i,j,k) = 0.0; + + aux_bcent(i,j,k,0) = 0.0; + aux_bcent(i,j,k,1) = 0.0; + aux_bcent(i,j,k,2) = 0.0; + + aux_bnorm(i,j,k,0) = 0.0; + aux_bnorm(i,j,k,1) = 0.0; + aux_bnorm(i,j,k,2) = 0.0; + // Index for low and hi cells IntVect iv_hi(i,j,k); IntVect iv_lo(iv_hi - vdim); @@ -536,6 +551,12 @@ define( int const& a_idim, // Need to fill the nodes the big ends? + aux_barea(i,j,k) = lo_eb_cc.areaBoun() + hi_eb_cc.areaBoun(); + + // aux_bcent(i,j,k) + // aux_bnorm(i,j,k) + + } } // flag(iv_lo) and flag(iv_hi) diff --git a/Source/EB/ERF_EBCutCell.H b/Source/EB/ERF_EBCutCell.H index 11f592617..fa2b88d4c 100644 --- a/Source/EB/ERF_EBCutCell.H +++ b/Source/EB/ERF_EBCutCell.H @@ -92,6 +92,15 @@ class eb_cut_cell_ { return m_invert*area + (1.-m_invert)*(m_rbox_area[a_idim] - area); } + [[nodiscard]] AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE + amrex::Real areaBoun () const noexcept { + // amrex::Real area(0.); + // if (m_flag.isSingleValued()) { + // area = m_F7.area(); + // } + return m_F7.area(); + } + [[nodiscard]] AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Array fcentLo ( int const a_idim ) const noexcept { AMREX_ASSERT( a_idim >=0 && a_idim < AMREX_SPACEDIM );