From 87b69f305120664e0a410d5aac191ecde7cbbf34 Mon Sep 17 00:00:00 2001 From: Cheng-Hau Yang Date: Mon, 6 Oct 2025 16:18:13 -0500 Subject: [PATCH 01/26] (a) Add disconnected elements to _elemlinks so that neighbor_ptr() can also access them. (b) add geometry-based detection of disconnected neighbors via paired boundaries - Introduced `Elem::geometrically_equal()` for tolerance-based geometric comparison of elements. - Replaced `_has_disconnected_neighbor` with `_boundary_id_pairs` for boundary-pair registration. - Updated `UnstructuredMesh::find_neighbors()` to auto-detect disconnected neighbors using geometric matching and paired boundaries. --- include/geom/elem.h | 17 ++++++ include/mesh/mesh_base.h | 20 +++++++ src/geom/elem.C | 35 +++++++++++ src/mesh/unstructured_mesh.C | 110 ++++++++++++++++++++++++++++++++++- 4 files changed, 181 insertions(+), 1 deletion(-) diff --git a/include/geom/elem.h b/include/geom/elem.h index 4eb5c9aa85d..9734bcb0ce2 100644 --- a/include/geom/elem.h +++ b/include/geom/elem.h @@ -306,6 +306,23 @@ class Elem : public ReferenceCountedObject, */ bool topologically_equal (const Elem & rhs) const; + + /** + * \returns \p true if two elements occupy the same geometric region + * within a given tolerance, \p false otherwise. + * + * Two elements are geometrically equal if they have: + * - The same dimension and number of nodes; + * - Centroids that coincide within the specified tolerance; + * - Node coordinates that match within the tolerance, regardless + * of node IDs or ordering. + * + * This function compares spatial coordinates rather than connectivity, + * making it suitable for detecting coincident or disconnected elements + * that share identical geometry but differ in node numbering. + */ + bool geometrically_equal (const Elem & rhs, const Real tol = TOLERANCE) const; + /** * \returns A const pointer to the \f$ i^{th} \f$ neighbor of this * element, or \p nullptr if \p MeshBase::find_neighbors() has not been diff --git a/include/mesh/mesh_base.h b/include/mesh/mesh_base.h index c539616a510..9ff266706bc 100644 --- a/include/mesh/mesh_base.h +++ b/include/mesh/mesh_base.h @@ -1820,8 +1820,28 @@ class MeshBase : public ParallelObject const std::set & get_mesh_subdomains() const { libmesh_assert(this->is_prepared()); return _mesh_subdomains; } + /** + * Register a pair of boundaries as disconnected boundaries. + */ + void add_disconnected_boundaries (const boundary_id_type b1, + const boundary_id_type b2) + { + if (b1 == b2) + _boundary_id_pairs.emplace(b1, b2); + else + { + _boundary_id_pairs.emplace(b1, b2); + _boundary_id_pairs.emplace(b2, b1); + } + } + + + protected: + /// @brief a map of pairs of boundary ids between which new boundary sides are created + std::unordered_map _boundary_id_pairs; + /** * This class holds the boundary information. It can store nodes, edges, * and faces with a corresponding id that facilitates setting boundary diff --git a/src/geom/elem.C b/src/geom/elem.C index e1c11c6ef9d..c14fce5b25a 100644 --- a/src/geom/elem.C +++ b/src/geom/elem.C @@ -833,6 +833,41 @@ bool Elem::topologically_equal (const Elem & rhs) const +bool Elem::geometrically_equal(const Elem &rhs, const Real tol_in) const +{ + // 1. Basic checks: dimension & node count + if (this->dim() != rhs.dim()) + return false; + if (this->n_nodes() != rhs.n_nodes()) + return false; + + // 2. Compare centroids within tolerance + const Real tol = tol_in > 0 ? tol_in : 1e-12; + const Point c1 = this->vertex_average(); + const Point c2 = rhs.vertex_average(); + if ((c1 - c2).norm() > tol) + return false; + + // 3. Unordered comparison within tolerance + const unsigned int n = this->n_nodes(); + std::vector pts1(n), pts2(n); + for (unsigned int i = 0; i < n; ++i) + pts1[i] = this->point(i); + for (unsigned int i = 0; i < n; ++i) + pts2[i] = rhs.point(i); + + for (const auto &p1 : pts1) + { + auto found = std::any_of(pts2.begin(), pts2.end(), + [&](const Point &p2) + { return (p1 - p2).norm() <= tol; }); + if (!found) + return false; + } + + return true; +} + bool Elem::is_semilocal(const processor_id_type my_pid) const { std::set point_neighbors; diff --git a/src/mesh/unstructured_mesh.C b/src/mesh/unstructured_mesh.C index b3e21425953..e604dd59a8a 100644 --- a/src/mesh/unstructured_mesh.C +++ b/src/mesh/unstructured_mesh.C @@ -47,6 +47,9 @@ #include #include +// TIMPI includes +#include "timpi/parallel_implementation.h" +#include "timpi/parallel_sync.h" namespace { using namespace libMesh; @@ -993,6 +996,112 @@ void UnstructuredMesh::find_neighbors (const bool reset_remote_elements, } } +{ + // Build or obtain a point locator (sub-locator) and initialize it + std::unique_ptr point_locator = this->sub_point_locator(); + + // Get a reference to the boundary info object for convenience + auto & bi = this->get_boundary_info(); + + // Check whether the element side belongs to a paired boundary + auto pick_paired_id = [this, &bi](const Elem * e, unsigned int side, + boundary_id_type ¤t_id, + boundary_id_type &paired_id) -> bool + { + std::vector ids; + bi.boundary_ids(e, side, ids); + for (auto id : ids) + { + auto it = _boundary_id_pairs.find(id); + if (it != _boundary_id_pairs.end()) + { + current_id = id; + paired_id = it->second; + return true; + } + } + return false; + }; + + // Main loop: iterate over all elements and their sides to find disconnected neighbors + for (const auto & element : this->element_ptr_range()) + { + for (auto ms : element->side_index_range()) + { + // Skip if this side already has a valid neighbor (including remote neighbors) + if (element->neighbor_ptr(ms) != nullptr && + element->neighbor_ptr(ms) != remote_elem) + continue; + + // Determine whether this side belongs to a paired (disconnected) boundary + boundary_id_type current_id; + boundary_id_type paired_id; + if (!pick_paired_id(element, ms, current_id, paired_id)) + continue; // No valid pair found, skip this side + + // Build the geometry of this side + std::unique_ptr this_side; + element->build_side_ptr(this_side, ms); + + // Compute centroid and approximate element size + const Point c_mid = this_side->vertex_average(); + + // Use the point locator to find candidate elements near the side centroid + std::set const_candidate_elements; + point_locator->operator()(c_mid, const_candidate_elements); + + std::set candidate_elements; + for (auto ce : const_candidate_elements) + candidate_elements.insert(this->elem_ptr(ce->id())); + + bool paired_found = false; // Flag to mark if a valid match was found + + // Loop through candidate elements to look for potential paired neighbors + for (auto * cand_elem : candidate_elements) + { + if (!cand_elem || cand_elem == element) + continue; + + // If paired_id == current_id, it means that there is no paired boundary on the other side element. + // In this case, we should consider all sides of the candidate element. + std::vector cand_neigh_sides = + (paired_id == current_id) ? + std::vector(cand_elem->side_index_range().begin(), + cand_elem->side_index_range().end()) : + bi.sides_with_boundary_id(cand_elem, paired_id); + + if (cand_neigh_sides.empty()) + continue; + + // Compare each candidate side to the current one + for (auto ns : cand_neigh_sides) + { + // Skip if this side already has a valid (non-remote) neighbor + if (cand_elem->neighbor_ptr(ns) != nullptr && + cand_elem->neighbor_ptr(ns) != remote_elem) + continue; + + // Build the geometry of the candidate side + std::unique_ptr cand_side; + cand_elem->build_side_ptr(cand_side, ns); + + // Check geometric equality + if (this_side->geometrically_equal(*cand_side)) + { + element->set_neighbor(ms, cand_elem); + cand_elem->set_neighbor(ns, element); + paired_found = true; + } + } + + if (paired_found) + break; // Stop searching through other candidates + } + } + } +} + + #ifdef LIBMESH_ENABLE_AMR /** @@ -1216,7 +1325,6 @@ void UnstructuredMesh::find_neighbors (const bool reset_remote_elements, #endif // AMR - #ifdef DEBUG MeshTools::libmesh_assert_valid_neighbors(*this, !reset_remote_elements); From d07294a698ec2217650f1dd1713f16fcac2890db Mon Sep 17 00:00:00 2001 From: Cheng-Hau Yang Date: Thu, 16 Oct 2025 10:31:36 -0500 Subject: [PATCH 02/26] Integrate disconnected neighbor detection via PeriodicBoundaries - Introduced PeriodicBoundaries::disconnected_neighbor() to locate geometrically coincident elements across disconnected boundaries using PointLocator. - Replaced legacy geometry-based neighbor search in UnstructuredMesh::find_neighbors() with unified PeriodicBoundaries-based logic. --- .DS_Store | Bin 0 -> 8196 bytes include/base/periodic_boundaries.h | 3 +- include/mesh/mesh_base.h | 48 +++++++++--- src/base/periodic_boundaries.C | 21 ++++-- src/geom/elem.C | 35 --------- src/mesh/unstructured_mesh.C | 117 ++++++----------------------- 6 files changed, 74 insertions(+), 150 deletions(-) create mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..541ced837f45088b76453e96cb00673842f64284 GIT binary patch literal 8196 zcmeHMO^g&p6n?Mwue$l`T^HB}haFi!ToxF9_76~IcUk@xS!Dm0pP^^EVLSA8uhTuV zAR(@zUL-`ls4@6=RZ$L_$bon;5icIh#)t`cF!7=XO+2BAzUu1PFaumj5Tad4*Q@vH zz3Qr0-|L!J0|3~WGu8pr0RW?iQ*{`Dd5P9Ii@Bp3Jys$f*`=U3hBM(F#_+NT}e;?xXaGDJ1l%T<y~3?0|U!2N#)>>^>so1W;}(bGFUXYM>zsZnZ&@|I_%ZF6AKGW@X--OHGcVL8V} z$$5@%9ktA?T#Zd~zoU>C%RedJQLjBBtDmxi22Jou z*We=>L626iEobZimv?1Ns)bltsWr-~&iXxChZthDvQ}0-x&JururOV(Y-Fk-57>Iz zw1ucuX=iGWJd_vy6~Y?jaV8IE-0^W*j3;DCt&^!&*kS(SJ-X-jPMA(%N=a=yW24@f zo;7nnv4WIeClFOuH>W zt$xcGYe+VV%?UgzHzX6`UNO*M4V_3k;UJhW0cYSWoQJpJBlrw1!yc6<56^R0<-AhNqip9 z;EVVYp2OGi4SW;d#}DvBynr9$W&8@S;MX{f*YG<2h`-|v{1g9@Dy4bSQfZmATv{PL zDkY?5sYT3NDul{NG3KPL#NQPC6e{8Eon+rGRASxRm7Nbns9c@RgQL3Uq1yRN8dlO* zWAoM-2noa$Kz1{D1H2ZYJiu$P%cWSOFwzz+R$>DLX!AsA=oNxXt>S^lILx&AxDrz< z2=anmww%~Xg1cZJYmCKIiK0xfYu3gTwTxm&4s16x5{n_z+NLOKIYpD`+p?Hg2$^ID z4Z~yOE>Lw?8Y6q3wIMv z`*9G5aRf&(gC-usF|-J!KISlw&*F20)E5Y==kOJL6<@=*@I1bQ@8Wv_W #include +// periodic boundary condition support +#include "libmesh/periodic_boundaries.h" +#include "libmesh/periodic_boundary.h" + namespace libMesh { @@ -1820,27 +1824,49 @@ class MeshBase : public ParallelObject const std::set & get_mesh_subdomains() const { libmesh_assert(this->is_prepared()); return _mesh_subdomains; } +#ifdef LIBMESH_ENABLE_PERIODIC /** * Register a pair of boundaries as disconnected boundaries. */ - void add_disconnected_boundaries (const boundary_id_type b1, - const boundary_id_type b2) - { - if (b1 == b2) - _boundary_id_pairs.emplace(b1, b2); - else + void add_disconnected_boundaries(const boundary_id_type b1, + const boundary_id_type b2) { - _boundary_id_pairs.emplace(b1, b2); - _boundary_id_pairs.emplace(b2, b1); + // Lazily allocate the container the first time it’s needed + if (!_disconnected_boundary_pairs) + _disconnected_boundary_pairs = std::make_unique(); + + // Create forward and inverse boundary mappings + PeriodicBoundary forward(RealVectorValue(0., 0., 0.)); + PeriodicBoundary inverse(RealVectorValue(0., 0., 0.)); + + forward.myboundary = b1; + forward.pairedboundary = b2; + inverse.myboundary = b2; + inverse.pairedboundary = b1; + + // Add both directions into the container + _disconnected_boundary_pairs->emplace(b1, forward.clone()); + _disconnected_boundary_pairs->emplace(b2, inverse.clone()); + } + + PeriodicBoundaries * get_disconnected_boundaries() + { + return _disconnected_boundary_pairs.get(); } - } + const PeriodicBoundaries * get_disconnected_boundaries() const + { + return _disconnected_boundary_pairs.get(); + } +#endif protected: - /// @brief a map of pairs of boundary ids between which new boundary sides are created - std::unordered_map _boundary_id_pairs; + #ifdef LIBMESH_ENABLE_PERIODIC + /// @brief The disconnected boundary id pairs. + std::unique_ptr _disconnected_boundary_pairs; +#endif /** * This class holds the boundary information. It can store nodes, edges, diff --git a/src/base/periodic_boundaries.C b/src/base/periodic_boundaries.C index df1127c1c71..5910ab9cfba 100644 --- a/src/base/periodic_boundaries.C +++ b/src/base/periodic_boundaries.C @@ -60,7 +60,8 @@ const Elem * PeriodicBoundaries::neighbor(boundary_id_type boundary_id, const PointLocatorBase & point_locator, const Elem * e, unsigned int side, - unsigned int * neigh_side) const + unsigned int * neigh_side, + bool skip_finding_check) const { std::unique_ptr neigh_side_proxy; @@ -80,6 +81,10 @@ const Elem * PeriodicBoundaries::neighbor(boundary_id_type boundary_id, const MeshBase & mesh = point_locator.get_mesh(); for(const Elem * elem_it : candidate_elements) { + + if (elem_it == e) // skip self + continue; + std::vector neigh_sides = mesh.get_boundary_info().sides_with_boundary_id(elem_it, b->pairedboundary); @@ -101,18 +106,18 @@ const Elem * PeriodicBoundaries::neighbor(boundary_id_type boundary_id, } } - // If we should have found a periodic neighbor but didn't then - // either we're on a ghosted element with a remote periodic neighbor - // or we're on a mesh with an inconsistent periodic boundary. - libmesh_error_msg_if(mesh.is_serial() || - (e->processor_id() == mesh.processor_id()), - "Periodic boundary neighbor not found"); + if (!skip_finding_check) + // If we should have found a periodic neighbor but didn't then + // either we're on a ghosted element with a remote periodic neighbor + // or we're on a mesh with an inconsistent periodic boundary. + libmesh_error_msg_if(mesh.is_serial() || + (e->processor_id() == mesh.processor_id()), + "Periodic boundary neighbor not found"); if (neigh_side) *neigh_side = libMesh::invalid_uint; return remote_elem; } - } // namespace libMesh diff --git a/src/geom/elem.C b/src/geom/elem.C index c14fce5b25a..e1c11c6ef9d 100644 --- a/src/geom/elem.C +++ b/src/geom/elem.C @@ -833,41 +833,6 @@ bool Elem::topologically_equal (const Elem & rhs) const -bool Elem::geometrically_equal(const Elem &rhs, const Real tol_in) const -{ - // 1. Basic checks: dimension & node count - if (this->dim() != rhs.dim()) - return false; - if (this->n_nodes() != rhs.n_nodes()) - return false; - - // 2. Compare centroids within tolerance - const Real tol = tol_in > 0 ? tol_in : 1e-12; - const Point c1 = this->vertex_average(); - const Point c2 = rhs.vertex_average(); - if ((c1 - c2).norm() > tol) - return false; - - // 3. Unordered comparison within tolerance - const unsigned int n = this->n_nodes(); - std::vector pts1(n), pts2(n); - for (unsigned int i = 0; i < n; ++i) - pts1[i] = this->point(i); - for (unsigned int i = 0; i < n; ++i) - pts2[i] = rhs.point(i); - - for (const auto &p1 : pts1) - { - auto found = std::any_of(pts2.begin(), pts2.end(), - [&](const Point &p2) - { return (p1 - p2).norm() <= tol; }); - if (!found) - return false; - } - - return true; -} - bool Elem::is_semilocal(const processor_id_type my_pid) const { std::set point_neighbors; diff --git a/src/mesh/unstructured_mesh.C b/src/mesh/unstructured_mesh.C index e604dd59a8a..de1b6941765 100644 --- a/src/mesh/unstructured_mesh.C +++ b/src/mesh/unstructured_mesh.C @@ -47,9 +47,6 @@ #include #include -// TIMPI includes -#include "timpi/parallel_implementation.h" -#include "timpi/parallel_sync.h" namespace { using namespace libMesh; @@ -996,111 +993,40 @@ void UnstructuredMesh::find_neighbors (const bool reset_remote_elements, } } -{ - // Build or obtain a point locator (sub-locator) and initialize it - std::unique_ptr point_locator = this->sub_point_locator(); - - // Get a reference to the boundary info object for convenience - auto & bi = this->get_boundary_info(); +#ifdef LIBMESH_ENABLE_PERIODIC + auto * db = this->get_disconnected_boundaries(); - // Check whether the element side belongs to a paired boundary - auto pick_paired_id = [this, &bi](const Elem * e, unsigned int side, - boundary_id_type ¤t_id, - boundary_id_type &paired_id) -> bool - { - std::vector ids; - bi.boundary_ids(e, side, ids); - for (auto id : ids) + if (db) { - auto it = _boundary_id_pairs.find(id); - if (it != _boundary_id_pairs.end()) - { - current_id = id; - paired_id = it->second; - return true; - } - } - return false; - }; - - // Main loop: iterate over all elements and their sides to find disconnected neighbors - for (const auto & element : this->element_ptr_range()) - { - for (auto ms : element->side_index_range()) - { - // Skip if this side already has a valid neighbor (including remote neighbors) - if (element->neighbor_ptr(ms) != nullptr && - element->neighbor_ptr(ms) != remote_elem) - continue; - - // Determine whether this side belongs to a paired (disconnected) boundary - boundary_id_type current_id; - boundary_id_type paired_id; - if (!pick_paired_id(element, ms, current_id, paired_id)) - continue; // No valid pair found, skip this side - - // Build the geometry of this side - std::unique_ptr this_side; - element->build_side_ptr(this_side, ms); - - // Compute centroid and approximate element size - const Point c_mid = this_side->vertex_average(); - - // Use the point locator to find candidate elements near the side centroid - std::set const_candidate_elements; - point_locator->operator()(c_mid, const_candidate_elements); + // Obtain a point locator + std::unique_ptr point_locator = this->sub_point_locator(); - std::set candidate_elements; - for (auto ce : const_candidate_elements) - candidate_elements.insert(this->elem_ptr(ce->id())); + // Get the disconnected boundaries object (from periodic BCs) + auto * db = this->get_disconnected_boundaries(); - bool paired_found = false; // Flag to mark if a valid match was found - - // Loop through candidate elements to look for potential paired neighbors - for (auto * cand_elem : candidate_elements) + for (const auto & element : this->element_ptr_range()) { - if (!cand_elem || cand_elem == element) - continue; - - // If paired_id == current_id, it means that there is no paired boundary on the other side element. - // In this case, we should consider all sides of the candidate element. - std::vector cand_neigh_sides = - (paired_id == current_id) ? - std::vector(cand_elem->side_index_range().begin(), - cand_elem->side_index_range().end()) : - bi.sides_with_boundary_id(cand_elem, paired_id); - - if (cand_neigh_sides.empty()) - continue; - - // Compare each candidate side to the current one - for (auto ns : cand_neigh_sides) + for (auto ms : element->side_index_range()) { - // Skip if this side already has a valid (non-remote) neighbor - if (cand_elem->neighbor_ptr(ns) != nullptr && - cand_elem->neighbor_ptr(ns) != remote_elem) + // Skip if this side already has a valid neighbor (including remote neighbors) + if (element->neighbor_ptr(ms) != nullptr && + element->neighbor_ptr(ms) != remote_elem) continue; - // Build the geometry of the candidate side - std::unique_ptr cand_side; - cand_elem->build_side_ptr(cand_side, ns); - - // Check geometric equality - if (this_side->geometrically_equal(*cand_side)) + for (const auto & [id, boundary_ptr] : *db) { - element->set_neighbor(ms, cand_elem); - cand_elem->set_neighbor(ns, element); - paired_found = true; + unsigned int neigh_side; + const Elem * neigh = db->neighbor(id, *point_locator, element, ms, &neigh_side, true /*skip_finding_check*/); + if (neigh && neigh != remote_elem && neigh != element) + { + element->set_neighbor(ms, this->elem_ptr(neigh->id())); + this->elem_ptr(neigh->id())->set_neighbor(neigh_side, element); + } } } - - if (paired_found) - break; // Stop searching through other candidates } } - } -} - +#endif // LIBMESH_ENABLE_PERIODIC #ifdef LIBMESH_ENABLE_AMR @@ -1325,6 +1251,7 @@ void UnstructuredMesh::find_neighbors (const bool reset_remote_elements, #endif // AMR + #ifdef DEBUG MeshTools::libmesh_assert_valid_neighbors(*this, !reset_remote_elements); From c90120a42c1985d5dc9d56e9b2b46119eefe5978 Mon Sep 17 00:00:00 2001 From: Cheng-Hau Yang Date: Tue, 21 Oct 2025 09:06:26 -0500 Subject: [PATCH 03/26] add new unit test for disconnected neighbor in libmesh --- .DS_Store | Bin 8196 -> 0 bytes include/base/periodic_boundaries.h | 2 +- include/geom/elem.h | 17 -- src/base/periodic_boundaries.C | 4 +- src/mesh/unstructured_mesh.C | 2 +- tests/Makefile.am | 1 + tests/Makefile.in | 153 +++++++++-- tests/systems/disconnected_neighbor_test.C | 304 +++++++++++++++++++++ 8 files changed, 438 insertions(+), 45 deletions(-) delete mode 100644 .DS_Store create mode 100644 tests/systems/disconnected_neighbor_test.C diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 541ced837f45088b76453e96cb00673842f64284..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 zcmeHMO^g&p6n?Mwue$l`T^HB}haFi!ToxF9_76~IcUk@xS!Dm0pP^^EVLSA8uhTuV zAR(@zUL-`ls4@6=RZ$L_$bon;5icIh#)t`cF!7=XO+2BAzUu1PFaumj5Tad4*Q@vH zz3Qr0-|L!J0|3~WGu8pr0RW?iQ*{`Dd5P9Ii@Bp3Jys$f*`=U3hBM(F#_+NT}e;?xXaGDJ1l%T<y~3?0|U!2N#)>>^>so1W;}(bGFUXYM>zsZnZ&@|I_%ZF6AKGW@X--OHGcVL8V} z$$5@%9ktA?T#Zd~zoU>C%RedJQLjBBtDmxi22Jou z*We=>L626iEobZimv?1Ns)bltsWr-~&iXxChZthDvQ}0-x&JururOV(Y-Fk-57>Iz zw1ucuX=iGWJd_vy6~Y?jaV8IE-0^W*j3;DCt&^!&*kS(SJ-X-jPMA(%N=a=yW24@f zo;7nnv4WIeClFOuH>W zt$xcGYe+VV%?UgzHzX6`UNO*M4V_3k;UJhW0cYSWoQJpJBlrw1!yc6<56^R0<-AhNqip9 z;EVVYp2OGi4SW;d#}DvBynr9$W&8@S;MX{f*YG<2h`-|v{1g9@Dy4bSQfZmATv{PL zDkY?5sYT3NDul{NG3KPL#NQPC6e{8Eon+rGRASxRm7Nbns9c@RgQL3Uq1yRN8dlO* zWAoM-2noa$Kz1{D1H2ZYJiu$P%cWSOFwzz+R$>DLX!AsA=oNxXt>S^lILx&AxDrz< z2=anmww%~Xg1cZJYmCKIiK0xfYu3gTwTxm&4s16x5{n_z+NLOKIYpD`+p?Hg2$^ID z4Z~yOE>Lw?8Y6q3wIMv z`*9G5aRf&(gC-usF|-J!KISlw&*F20)E5Y==kOJL6<@=*@I1bQ@8Wv_W, */ bool topologically_equal (const Elem & rhs) const; - - /** - * \returns \p true if two elements occupy the same geometric region - * within a given tolerance, \p false otherwise. - * - * Two elements are geometrically equal if they have: - * - The same dimension and number of nodes; - * - Centroids that coincide within the specified tolerance; - * - Node coordinates that match within the tolerance, regardless - * of node IDs or ordering. - * - * This function compares spatial coordinates rather than connectivity, - * making it suitable for detecting coincident or disconnected elements - * that share identical geometry but differ in node numbering. - */ - bool geometrically_equal (const Elem & rhs, const Real tol = TOLERANCE) const; - /** * \returns A const pointer to the \f$ i^{th} \f$ neighbor of this * element, or \p nullptr if \p MeshBase::find_neighbors() has not been diff --git a/src/base/periodic_boundaries.C b/src/base/periodic_boundaries.C index 5910ab9cfba..d481e6733f3 100644 --- a/src/base/periodic_boundaries.C +++ b/src/base/periodic_boundaries.C @@ -61,7 +61,7 @@ const Elem * PeriodicBoundaries::neighbor(boundary_id_type boundary_id, const Elem * e, unsigned int side, unsigned int * neigh_side, - bool skip_finding_check) const + bool skip_found_check) const { std::unique_ptr neigh_side_proxy; @@ -106,7 +106,7 @@ const Elem * PeriodicBoundaries::neighbor(boundary_id_type boundary_id, } } - if (!skip_finding_check) + if (!skip_found_check) // If we should have found a periodic neighbor but didn't then // either we're on a ghosted element with a remote periodic neighbor // or we're on a mesh with an inconsistent periodic boundary. diff --git a/src/mesh/unstructured_mesh.C b/src/mesh/unstructured_mesh.C index de1b6941765..d2f6657658e 100644 --- a/src/mesh/unstructured_mesh.C +++ b/src/mesh/unstructured_mesh.C @@ -1016,7 +1016,7 @@ void UnstructuredMesh::find_neighbors (const bool reset_remote_elements, for (const auto & [id, boundary_ptr] : *db) { unsigned int neigh_side; - const Elem * neigh = db->neighbor(id, *point_locator, element, ms, &neigh_side, true /*skip_finding_check*/); + const Elem * neigh = db->neighbor(id, *point_locator, element, ms, &neigh_side, true /*skip_found_check*/); if (neigh && neigh != remote_elem && neigh != element) { element->set_neighbor(ms, this->elem_ptr(neigh->id())); diff --git a/tests/Makefile.am b/tests/Makefile.am index acf0ad8239d..9d92587eb08 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -138,6 +138,7 @@ unit_tests_sources = \ systems/constraint_operator_test.C \ systems/equation_systems_test.C \ systems/periodic_bc_test.C \ + systems/disconnected_neighbor_test.C \ systems/systems_test.C \ utils/parameters_test.C \ utils/point_locator_test.C \ diff --git a/tests/Makefile.in b/tests/Makefile.in index d2ab60962dd..465f2a02a2d 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -256,10 +256,10 @@ am__unit_tests_dbg_SOURCES_DIST = driver.C libmesh_cppunit.h \ solvers/second_order_unsteady_solver_test.C \ systems/constraint_operator_test.C \ systems/equation_systems_test.C systems/periodic_bc_test.C \ - systems/systems_test.C utils/parameters_test.C \ - utils/point_locator_test.C utils/rb_parameters_test.C \ - utils/transparent_comparator.C utils/vectormap_test.C \ - utils/xdr_test.C fparser/autodiff.C + systems/disconnected_neighbor_test.C systems/systems_test.C \ + utils/parameters_test.C utils/point_locator_test.C \ + utils/rb_parameters_test.C utils/transparent_comparator.C \ + utils/vectormap_test.C utils/xdr_test.C fparser/autodiff.C am__dirstamp = $(am__leading_dot)dirstamp @LIBMESH_ENABLE_FPARSER_TRUE@am__objects_1 = fparser/unit_tests_dbg-autodiff.$(OBJEXT) am__objects_2 = unit_tests_dbg-driver.$(OBJEXT) \ @@ -372,6 +372,7 @@ am__objects_2 = unit_tests_dbg-driver.$(OBJEXT) \ systems/unit_tests_dbg-constraint_operator_test.$(OBJEXT) \ systems/unit_tests_dbg-equation_systems_test.$(OBJEXT) \ systems/unit_tests_dbg-periodic_bc_test.$(OBJEXT) \ + systems/unit_tests_dbg-disconnected_neighbor_test.$(OBJEXT) \ systems/unit_tests_dbg-systems_test.$(OBJEXT) \ utils/unit_tests_dbg-parameters_test.$(OBJEXT) \ utils/unit_tests_dbg-point_locator_test.$(OBJEXT) \ @@ -458,10 +459,10 @@ am__unit_tests_devel_SOURCES_DIST = driver.C libmesh_cppunit.h \ solvers/second_order_unsteady_solver_test.C \ systems/constraint_operator_test.C \ systems/equation_systems_test.C systems/periodic_bc_test.C \ - systems/systems_test.C utils/parameters_test.C \ - utils/point_locator_test.C utils/rb_parameters_test.C \ - utils/transparent_comparator.C utils/vectormap_test.C \ - utils/xdr_test.C fparser/autodiff.C + systems/disconnected_neighbor_test.C systems/systems_test.C \ + utils/parameters_test.C utils/point_locator_test.C \ + utils/rb_parameters_test.C utils/transparent_comparator.C \ + utils/vectormap_test.C utils/xdr_test.C fparser/autodiff.C @LIBMESH_ENABLE_FPARSER_TRUE@am__objects_3 = fparser/unit_tests_devel-autodiff.$(OBJEXT) am__objects_4 = unit_tests_devel-driver.$(OBJEXT) \ base/unit_tests_devel-dof_map_test.$(OBJEXT) \ @@ -573,6 +574,7 @@ am__objects_4 = unit_tests_devel-driver.$(OBJEXT) \ systems/unit_tests_devel-constraint_operator_test.$(OBJEXT) \ systems/unit_tests_devel-equation_systems_test.$(OBJEXT) \ systems/unit_tests_devel-periodic_bc_test.$(OBJEXT) \ + systems/unit_tests_devel-disconnected_neighbor_test.$(OBJEXT) \ systems/unit_tests_devel-systems_test.$(OBJEXT) \ utils/unit_tests_devel-parameters_test.$(OBJEXT) \ utils/unit_tests_devel-point_locator_test.$(OBJEXT) \ @@ -655,10 +657,10 @@ am__unit_tests_oprof_SOURCES_DIST = driver.C libmesh_cppunit.h \ solvers/second_order_unsteady_solver_test.C \ systems/constraint_operator_test.C \ systems/equation_systems_test.C systems/periodic_bc_test.C \ - systems/systems_test.C utils/parameters_test.C \ - utils/point_locator_test.C utils/rb_parameters_test.C \ - utils/transparent_comparator.C utils/vectormap_test.C \ - utils/xdr_test.C fparser/autodiff.C + systems/disconnected_neighbor_test.C systems/systems_test.C \ + utils/parameters_test.C utils/point_locator_test.C \ + utils/rb_parameters_test.C utils/transparent_comparator.C \ + utils/vectormap_test.C utils/xdr_test.C fparser/autodiff.C @LIBMESH_ENABLE_FPARSER_TRUE@am__objects_5 = fparser/unit_tests_oprof-autodiff.$(OBJEXT) am__objects_6 = unit_tests_oprof-driver.$(OBJEXT) \ base/unit_tests_oprof-dof_map_test.$(OBJEXT) \ @@ -770,6 +772,7 @@ am__objects_6 = unit_tests_oprof-driver.$(OBJEXT) \ systems/unit_tests_oprof-constraint_operator_test.$(OBJEXT) \ systems/unit_tests_oprof-equation_systems_test.$(OBJEXT) \ systems/unit_tests_oprof-periodic_bc_test.$(OBJEXT) \ + systems/unit_tests_oprof-disconnected_neighbor_test.$(OBJEXT) \ systems/unit_tests_oprof-systems_test.$(OBJEXT) \ utils/unit_tests_oprof-parameters_test.$(OBJEXT) \ utils/unit_tests_oprof-point_locator_test.$(OBJEXT) \ @@ -852,10 +855,10 @@ am__unit_tests_opt_SOURCES_DIST = driver.C libmesh_cppunit.h \ solvers/second_order_unsteady_solver_test.C \ systems/constraint_operator_test.C \ systems/equation_systems_test.C systems/periodic_bc_test.C \ - systems/systems_test.C utils/parameters_test.C \ - utils/point_locator_test.C utils/rb_parameters_test.C \ - utils/transparent_comparator.C utils/vectormap_test.C \ - utils/xdr_test.C fparser/autodiff.C + systems/disconnected_neighbor_test.C systems/systems_test.C \ + utils/parameters_test.C utils/point_locator_test.C \ + utils/rb_parameters_test.C utils/transparent_comparator.C \ + utils/vectormap_test.C utils/xdr_test.C fparser/autodiff.C @LIBMESH_ENABLE_FPARSER_TRUE@am__objects_7 = fparser/unit_tests_opt-autodiff.$(OBJEXT) am__objects_8 = unit_tests_opt-driver.$(OBJEXT) \ base/unit_tests_opt-dof_map_test.$(OBJEXT) \ @@ -967,6 +970,7 @@ am__objects_8 = unit_tests_opt-driver.$(OBJEXT) \ systems/unit_tests_opt-constraint_operator_test.$(OBJEXT) \ systems/unit_tests_opt-equation_systems_test.$(OBJEXT) \ systems/unit_tests_opt-periodic_bc_test.$(OBJEXT) \ + systems/unit_tests_opt-disconnected_neighbor_test.$(OBJEXT) \ systems/unit_tests_opt-systems_test.$(OBJEXT) \ utils/unit_tests_opt-parameters_test.$(OBJEXT) \ utils/unit_tests_opt-point_locator_test.$(OBJEXT) \ @@ -1049,10 +1053,10 @@ am__unit_tests_prof_SOURCES_DIST = driver.C libmesh_cppunit.h \ solvers/second_order_unsteady_solver_test.C \ systems/constraint_operator_test.C \ systems/equation_systems_test.C systems/periodic_bc_test.C \ - systems/systems_test.C utils/parameters_test.C \ - utils/point_locator_test.C utils/rb_parameters_test.C \ - utils/transparent_comparator.C utils/vectormap_test.C \ - utils/xdr_test.C fparser/autodiff.C + systems/disconnected_neighbor_test.C systems/systems_test.C \ + utils/parameters_test.C utils/point_locator_test.C \ + utils/rb_parameters_test.C utils/transparent_comparator.C \ + utils/vectormap_test.C utils/xdr_test.C fparser/autodiff.C @LIBMESH_ENABLE_FPARSER_TRUE@am__objects_9 = fparser/unit_tests_prof-autodiff.$(OBJEXT) am__objects_10 = unit_tests_prof-driver.$(OBJEXT) \ base/unit_tests_prof-dof_map_test.$(OBJEXT) \ @@ -1164,6 +1168,7 @@ am__objects_10 = unit_tests_prof-driver.$(OBJEXT) \ systems/unit_tests_prof-constraint_operator_test.$(OBJEXT) \ systems/unit_tests_prof-equation_systems_test.$(OBJEXT) \ systems/unit_tests_prof-periodic_bc_test.$(OBJEXT) \ + systems/unit_tests_prof-disconnected_neighbor_test.$(OBJEXT) \ systems/unit_tests_prof-systems_test.$(OBJEXT) \ utils/unit_tests_prof-parameters_test.$(OBJEXT) \ utils/unit_tests_prof-point_locator_test.$(OBJEXT) \ @@ -1734,22 +1739,27 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ solvers/$(DEPDIR)/unit_tests_prof-first_order_unsteady_solver_test.Po \ solvers/$(DEPDIR)/unit_tests_prof-second_order_unsteady_solver_test.Po \ systems/$(DEPDIR)/unit_tests_dbg-constraint_operator_test.Po \ + systems/$(DEPDIR)/unit_tests_dbg-disconnected_neighbor_test.Po \ systems/$(DEPDIR)/unit_tests_dbg-equation_systems_test.Po \ systems/$(DEPDIR)/unit_tests_dbg-periodic_bc_test.Po \ systems/$(DEPDIR)/unit_tests_dbg-systems_test.Po \ systems/$(DEPDIR)/unit_tests_devel-constraint_operator_test.Po \ + systems/$(DEPDIR)/unit_tests_devel-disconnected_neighbor_test.Po \ systems/$(DEPDIR)/unit_tests_devel-equation_systems_test.Po \ systems/$(DEPDIR)/unit_tests_devel-periodic_bc_test.Po \ systems/$(DEPDIR)/unit_tests_devel-systems_test.Po \ systems/$(DEPDIR)/unit_tests_oprof-constraint_operator_test.Po \ + systems/$(DEPDIR)/unit_tests_oprof-disconnected_neighbor_test.Po \ systems/$(DEPDIR)/unit_tests_oprof-equation_systems_test.Po \ systems/$(DEPDIR)/unit_tests_oprof-periodic_bc_test.Po \ systems/$(DEPDIR)/unit_tests_oprof-systems_test.Po \ systems/$(DEPDIR)/unit_tests_opt-constraint_operator_test.Po \ + systems/$(DEPDIR)/unit_tests_opt-disconnected_neighbor_test.Po \ systems/$(DEPDIR)/unit_tests_opt-equation_systems_test.Po \ systems/$(DEPDIR)/unit_tests_opt-periodic_bc_test.Po \ systems/$(DEPDIR)/unit_tests_opt-systems_test.Po \ systems/$(DEPDIR)/unit_tests_prof-constraint_operator_test.Po \ + systems/$(DEPDIR)/unit_tests_prof-disconnected_neighbor_test.Po \ systems/$(DEPDIR)/unit_tests_prof-equation_systems_test.Po \ systems/$(DEPDIR)/unit_tests_prof-periodic_bc_test.Po \ systems/$(DEPDIR)/unit_tests_prof-systems_test.Po \ @@ -2313,10 +2323,10 @@ unit_tests_sources = driver.C libmesh_cppunit.h stream_redirector.h \ solvers/second_order_unsteady_solver_test.C \ systems/constraint_operator_test.C \ systems/equation_systems_test.C systems/periodic_bc_test.C \ - systems/systems_test.C utils/parameters_test.C \ - utils/point_locator_test.C utils/rb_parameters_test.C \ - utils/transparent_comparator.C utils/vectormap_test.C \ - utils/xdr_test.C $(am__append_1) + systems/disconnected_neighbor_test.C systems/systems_test.C \ + utils/parameters_test.C utils/point_locator_test.C \ + utils/rb_parameters_test.C utils/transparent_comparator.C \ + utils/vectormap_test.C utils/xdr_test.C $(am__append_1) data = matrices/geom_1_extraction_op.h5 \ matrices/geom_1_extraction_op.m \ matrices/geom_1_extraction_op.m.gz \ @@ -2796,6 +2806,8 @@ systems/unit_tests_dbg-equation_systems_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) systems/unit_tests_dbg-periodic_bc_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) +systems/unit_tests_dbg-disconnected_neighbor_test.$(OBJEXT): \ + systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) systems/unit_tests_dbg-systems_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) utils/$(am__dirstamp): @@ -3054,6 +3066,8 @@ systems/unit_tests_devel-equation_systems_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) systems/unit_tests_devel-periodic_bc_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) +systems/unit_tests_devel-disconnected_neighbor_test.$(OBJEXT): \ + systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) systems/unit_tests_devel-systems_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) utils/unit_tests_devel-parameters_test.$(OBJEXT): \ @@ -3300,6 +3314,8 @@ systems/unit_tests_oprof-equation_systems_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) systems/unit_tests_oprof-periodic_bc_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) +systems/unit_tests_oprof-disconnected_neighbor_test.$(OBJEXT): \ + systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) systems/unit_tests_oprof-systems_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) utils/unit_tests_oprof-parameters_test.$(OBJEXT): \ @@ -3546,6 +3562,8 @@ systems/unit_tests_opt-equation_systems_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) systems/unit_tests_opt-periodic_bc_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) +systems/unit_tests_opt-disconnected_neighbor_test.$(OBJEXT): \ + systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) systems/unit_tests_opt-systems_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) utils/unit_tests_opt-parameters_test.$(OBJEXT): utils/$(am__dirstamp) \ @@ -3792,6 +3810,8 @@ systems/unit_tests_prof-equation_systems_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) systems/unit_tests_prof-periodic_bc_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) +systems/unit_tests_prof-disconnected_neighbor_test.$(OBJEXT): \ + systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) systems/unit_tests_prof-systems_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) utils/unit_tests_prof-parameters_test.$(OBJEXT): \ @@ -4372,22 +4392,27 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@solvers/$(DEPDIR)/unit_tests_prof-first_order_unsteady_solver_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@solvers/$(DEPDIR)/unit_tests_prof-second_order_unsteady_solver_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_dbg-constraint_operator_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_dbg-disconnected_neighbor_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_dbg-equation_systems_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_dbg-periodic_bc_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_dbg-systems_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_devel-constraint_operator_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_devel-disconnected_neighbor_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_devel-equation_systems_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_devel-periodic_bc_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_devel-systems_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_oprof-constraint_operator_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_oprof-disconnected_neighbor_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_oprof-equation_systems_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_oprof-periodic_bc_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_oprof-systems_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_opt-constraint_operator_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_opt-disconnected_neighbor_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_opt-equation_systems_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_opt-periodic_bc_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_opt-systems_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_prof-constraint_operator_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_prof-disconnected_neighbor_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_prof-equation_systems_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_prof-periodic_bc_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_prof-systems_test.Po@am__quote@ # am--include-marker @@ -5992,6 +6017,20 @@ systems/unit_tests_dbg-periodic_bc_test.obj: systems/periodic_bc_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_dbg-periodic_bc_test.obj `if test -f 'systems/periodic_bc_test.C'; then $(CYGPATH_W) 'systems/periodic_bc_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/periodic_bc_test.C'; fi` +systems/unit_tests_dbg-disconnected_neighbor_test.o: systems/disconnected_neighbor_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_dbg-disconnected_neighbor_test.o -MD -MP -MF systems/$(DEPDIR)/unit_tests_dbg-disconnected_neighbor_test.Tpo -c -o systems/unit_tests_dbg-disconnected_neighbor_test.o `test -f 'systems/disconnected_neighbor_test.C' || echo '$(srcdir)/'`systems/disconnected_neighbor_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_dbg-disconnected_neighbor_test.Tpo systems/$(DEPDIR)/unit_tests_dbg-disconnected_neighbor_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/disconnected_neighbor_test.C' object='systems/unit_tests_dbg-disconnected_neighbor_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_dbg-disconnected_neighbor_test.o `test -f 'systems/disconnected_neighbor_test.C' || echo '$(srcdir)/'`systems/disconnected_neighbor_test.C + +systems/unit_tests_dbg-disconnected_neighbor_test.obj: systems/disconnected_neighbor_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_dbg-disconnected_neighbor_test.obj -MD -MP -MF systems/$(DEPDIR)/unit_tests_dbg-disconnected_neighbor_test.Tpo -c -o systems/unit_tests_dbg-disconnected_neighbor_test.obj `if test -f 'systems/disconnected_neighbor_test.C'; then $(CYGPATH_W) 'systems/disconnected_neighbor_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/disconnected_neighbor_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_dbg-disconnected_neighbor_test.Tpo systems/$(DEPDIR)/unit_tests_dbg-disconnected_neighbor_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/disconnected_neighbor_test.C' object='systems/unit_tests_dbg-disconnected_neighbor_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_dbg-disconnected_neighbor_test.obj `if test -f 'systems/disconnected_neighbor_test.C'; then $(CYGPATH_W) 'systems/disconnected_neighbor_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/disconnected_neighbor_test.C'; fi` + systems/unit_tests_dbg-systems_test.o: systems/systems_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_dbg-systems_test.o -MD -MP -MF systems/$(DEPDIR)/unit_tests_dbg-systems_test.Tpo -c -o systems/unit_tests_dbg-systems_test.o `test -f 'systems/systems_test.C' || echo '$(srcdir)/'`systems/systems_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_dbg-systems_test.Tpo systems/$(DEPDIR)/unit_tests_dbg-systems_test.Po @@ -7644,6 +7683,20 @@ systems/unit_tests_devel-periodic_bc_test.obj: systems/periodic_bc_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_devel-periodic_bc_test.obj `if test -f 'systems/periodic_bc_test.C'; then $(CYGPATH_W) 'systems/periodic_bc_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/periodic_bc_test.C'; fi` +systems/unit_tests_devel-disconnected_neighbor_test.o: systems/disconnected_neighbor_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_devel-disconnected_neighbor_test.o -MD -MP -MF systems/$(DEPDIR)/unit_tests_devel-disconnected_neighbor_test.Tpo -c -o systems/unit_tests_devel-disconnected_neighbor_test.o `test -f 'systems/disconnected_neighbor_test.C' || echo '$(srcdir)/'`systems/disconnected_neighbor_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_devel-disconnected_neighbor_test.Tpo systems/$(DEPDIR)/unit_tests_devel-disconnected_neighbor_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/disconnected_neighbor_test.C' object='systems/unit_tests_devel-disconnected_neighbor_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_devel-disconnected_neighbor_test.o `test -f 'systems/disconnected_neighbor_test.C' || echo '$(srcdir)/'`systems/disconnected_neighbor_test.C + +systems/unit_tests_devel-disconnected_neighbor_test.obj: systems/disconnected_neighbor_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_devel-disconnected_neighbor_test.obj -MD -MP -MF systems/$(DEPDIR)/unit_tests_devel-disconnected_neighbor_test.Tpo -c -o systems/unit_tests_devel-disconnected_neighbor_test.obj `if test -f 'systems/disconnected_neighbor_test.C'; then $(CYGPATH_W) 'systems/disconnected_neighbor_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/disconnected_neighbor_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_devel-disconnected_neighbor_test.Tpo systems/$(DEPDIR)/unit_tests_devel-disconnected_neighbor_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/disconnected_neighbor_test.C' object='systems/unit_tests_devel-disconnected_neighbor_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_devel-disconnected_neighbor_test.obj `if test -f 'systems/disconnected_neighbor_test.C'; then $(CYGPATH_W) 'systems/disconnected_neighbor_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/disconnected_neighbor_test.C'; fi` + systems/unit_tests_devel-systems_test.o: systems/systems_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_devel-systems_test.o -MD -MP -MF systems/$(DEPDIR)/unit_tests_devel-systems_test.Tpo -c -o systems/unit_tests_devel-systems_test.o `test -f 'systems/systems_test.C' || echo '$(srcdir)/'`systems/systems_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_devel-systems_test.Tpo systems/$(DEPDIR)/unit_tests_devel-systems_test.Po @@ -9296,6 +9349,20 @@ systems/unit_tests_oprof-periodic_bc_test.obj: systems/periodic_bc_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_oprof-periodic_bc_test.obj `if test -f 'systems/periodic_bc_test.C'; then $(CYGPATH_W) 'systems/periodic_bc_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/periodic_bc_test.C'; fi` +systems/unit_tests_oprof-disconnected_neighbor_test.o: systems/disconnected_neighbor_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_oprof-disconnected_neighbor_test.o -MD -MP -MF systems/$(DEPDIR)/unit_tests_oprof-disconnected_neighbor_test.Tpo -c -o systems/unit_tests_oprof-disconnected_neighbor_test.o `test -f 'systems/disconnected_neighbor_test.C' || echo '$(srcdir)/'`systems/disconnected_neighbor_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_oprof-disconnected_neighbor_test.Tpo systems/$(DEPDIR)/unit_tests_oprof-disconnected_neighbor_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/disconnected_neighbor_test.C' object='systems/unit_tests_oprof-disconnected_neighbor_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_oprof-disconnected_neighbor_test.o `test -f 'systems/disconnected_neighbor_test.C' || echo '$(srcdir)/'`systems/disconnected_neighbor_test.C + +systems/unit_tests_oprof-disconnected_neighbor_test.obj: systems/disconnected_neighbor_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_oprof-disconnected_neighbor_test.obj -MD -MP -MF systems/$(DEPDIR)/unit_tests_oprof-disconnected_neighbor_test.Tpo -c -o systems/unit_tests_oprof-disconnected_neighbor_test.obj `if test -f 'systems/disconnected_neighbor_test.C'; then $(CYGPATH_W) 'systems/disconnected_neighbor_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/disconnected_neighbor_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_oprof-disconnected_neighbor_test.Tpo systems/$(DEPDIR)/unit_tests_oprof-disconnected_neighbor_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/disconnected_neighbor_test.C' object='systems/unit_tests_oprof-disconnected_neighbor_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_oprof-disconnected_neighbor_test.obj `if test -f 'systems/disconnected_neighbor_test.C'; then $(CYGPATH_W) 'systems/disconnected_neighbor_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/disconnected_neighbor_test.C'; fi` + systems/unit_tests_oprof-systems_test.o: systems/systems_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_oprof-systems_test.o -MD -MP -MF systems/$(DEPDIR)/unit_tests_oprof-systems_test.Tpo -c -o systems/unit_tests_oprof-systems_test.o `test -f 'systems/systems_test.C' || echo '$(srcdir)/'`systems/systems_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_oprof-systems_test.Tpo systems/$(DEPDIR)/unit_tests_oprof-systems_test.Po @@ -10948,6 +11015,20 @@ systems/unit_tests_opt-periodic_bc_test.obj: systems/periodic_bc_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_opt-periodic_bc_test.obj `if test -f 'systems/periodic_bc_test.C'; then $(CYGPATH_W) 'systems/periodic_bc_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/periodic_bc_test.C'; fi` +systems/unit_tests_opt-disconnected_neighbor_test.o: systems/disconnected_neighbor_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_opt-disconnected_neighbor_test.o -MD -MP -MF systems/$(DEPDIR)/unit_tests_opt-disconnected_neighbor_test.Tpo -c -o systems/unit_tests_opt-disconnected_neighbor_test.o `test -f 'systems/disconnected_neighbor_test.C' || echo '$(srcdir)/'`systems/disconnected_neighbor_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_opt-disconnected_neighbor_test.Tpo systems/$(DEPDIR)/unit_tests_opt-disconnected_neighbor_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/disconnected_neighbor_test.C' object='systems/unit_tests_opt-disconnected_neighbor_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_opt-disconnected_neighbor_test.o `test -f 'systems/disconnected_neighbor_test.C' || echo '$(srcdir)/'`systems/disconnected_neighbor_test.C + +systems/unit_tests_opt-disconnected_neighbor_test.obj: systems/disconnected_neighbor_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_opt-disconnected_neighbor_test.obj -MD -MP -MF systems/$(DEPDIR)/unit_tests_opt-disconnected_neighbor_test.Tpo -c -o systems/unit_tests_opt-disconnected_neighbor_test.obj `if test -f 'systems/disconnected_neighbor_test.C'; then $(CYGPATH_W) 'systems/disconnected_neighbor_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/disconnected_neighbor_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_opt-disconnected_neighbor_test.Tpo systems/$(DEPDIR)/unit_tests_opt-disconnected_neighbor_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/disconnected_neighbor_test.C' object='systems/unit_tests_opt-disconnected_neighbor_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_opt-disconnected_neighbor_test.obj `if test -f 'systems/disconnected_neighbor_test.C'; then $(CYGPATH_W) 'systems/disconnected_neighbor_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/disconnected_neighbor_test.C'; fi` + systems/unit_tests_opt-systems_test.o: systems/systems_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_opt-systems_test.o -MD -MP -MF systems/$(DEPDIR)/unit_tests_opt-systems_test.Tpo -c -o systems/unit_tests_opt-systems_test.o `test -f 'systems/systems_test.C' || echo '$(srcdir)/'`systems/systems_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_opt-systems_test.Tpo systems/$(DEPDIR)/unit_tests_opt-systems_test.Po @@ -12600,6 +12681,20 @@ systems/unit_tests_prof-periodic_bc_test.obj: systems/periodic_bc_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_prof-periodic_bc_test.obj `if test -f 'systems/periodic_bc_test.C'; then $(CYGPATH_W) 'systems/periodic_bc_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/periodic_bc_test.C'; fi` +systems/unit_tests_prof-disconnected_neighbor_test.o: systems/disconnected_neighbor_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_prof-disconnected_neighbor_test.o -MD -MP -MF systems/$(DEPDIR)/unit_tests_prof-disconnected_neighbor_test.Tpo -c -o systems/unit_tests_prof-disconnected_neighbor_test.o `test -f 'systems/disconnected_neighbor_test.C' || echo '$(srcdir)/'`systems/disconnected_neighbor_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_prof-disconnected_neighbor_test.Tpo systems/$(DEPDIR)/unit_tests_prof-disconnected_neighbor_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/disconnected_neighbor_test.C' object='systems/unit_tests_prof-disconnected_neighbor_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_prof-disconnected_neighbor_test.o `test -f 'systems/disconnected_neighbor_test.C' || echo '$(srcdir)/'`systems/disconnected_neighbor_test.C + +systems/unit_tests_prof-disconnected_neighbor_test.obj: systems/disconnected_neighbor_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_prof-disconnected_neighbor_test.obj -MD -MP -MF systems/$(DEPDIR)/unit_tests_prof-disconnected_neighbor_test.Tpo -c -o systems/unit_tests_prof-disconnected_neighbor_test.obj `if test -f 'systems/disconnected_neighbor_test.C'; then $(CYGPATH_W) 'systems/disconnected_neighbor_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/disconnected_neighbor_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_prof-disconnected_neighbor_test.Tpo systems/$(DEPDIR)/unit_tests_prof-disconnected_neighbor_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/disconnected_neighbor_test.C' object='systems/unit_tests_prof-disconnected_neighbor_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_prof-disconnected_neighbor_test.obj `if test -f 'systems/disconnected_neighbor_test.C'; then $(CYGPATH_W) 'systems/disconnected_neighbor_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/disconnected_neighbor_test.C'; fi` + systems/unit_tests_prof-systems_test.o: systems/systems_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_prof-systems_test.o -MD -MP -MF systems/$(DEPDIR)/unit_tests_prof-systems_test.Tpo -c -o systems/unit_tests_prof-systems_test.o `test -f 'systems/systems_test.C' || echo '$(srcdir)/'`systems/systems_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_prof-systems_test.Tpo systems/$(DEPDIR)/unit_tests_prof-systems_test.Po @@ -13616,22 +13711,27 @@ distclean: distclean-am -rm -f solvers/$(DEPDIR)/unit_tests_prof-first_order_unsteady_solver_test.Po -rm -f solvers/$(DEPDIR)/unit_tests_prof-second_order_unsteady_solver_test.Po -rm -f systems/$(DEPDIR)/unit_tests_dbg-constraint_operator_test.Po + -rm -f systems/$(DEPDIR)/unit_tests_dbg-disconnected_neighbor_test.Po -rm -f systems/$(DEPDIR)/unit_tests_dbg-equation_systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_dbg-periodic_bc_test.Po -rm -f systems/$(DEPDIR)/unit_tests_dbg-systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_devel-constraint_operator_test.Po + -rm -f systems/$(DEPDIR)/unit_tests_devel-disconnected_neighbor_test.Po -rm -f systems/$(DEPDIR)/unit_tests_devel-equation_systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_devel-periodic_bc_test.Po -rm -f systems/$(DEPDIR)/unit_tests_devel-systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_oprof-constraint_operator_test.Po + -rm -f systems/$(DEPDIR)/unit_tests_oprof-disconnected_neighbor_test.Po -rm -f systems/$(DEPDIR)/unit_tests_oprof-equation_systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_oprof-periodic_bc_test.Po -rm -f systems/$(DEPDIR)/unit_tests_oprof-systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_opt-constraint_operator_test.Po + -rm -f systems/$(DEPDIR)/unit_tests_opt-disconnected_neighbor_test.Po -rm -f systems/$(DEPDIR)/unit_tests_opt-equation_systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_opt-periodic_bc_test.Po -rm -f systems/$(DEPDIR)/unit_tests_opt-systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_prof-constraint_operator_test.Po + -rm -f systems/$(DEPDIR)/unit_tests_prof-disconnected_neighbor_test.Po -rm -f systems/$(DEPDIR)/unit_tests_prof-equation_systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_prof-periodic_bc_test.Po -rm -f systems/$(DEPDIR)/unit_tests_prof-systems_test.Po @@ -14253,22 +14353,27 @@ maintainer-clean: maintainer-clean-am -rm -f solvers/$(DEPDIR)/unit_tests_prof-first_order_unsteady_solver_test.Po -rm -f solvers/$(DEPDIR)/unit_tests_prof-second_order_unsteady_solver_test.Po -rm -f systems/$(DEPDIR)/unit_tests_dbg-constraint_operator_test.Po + -rm -f systems/$(DEPDIR)/unit_tests_dbg-disconnected_neighbor_test.Po -rm -f systems/$(DEPDIR)/unit_tests_dbg-equation_systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_dbg-periodic_bc_test.Po -rm -f systems/$(DEPDIR)/unit_tests_dbg-systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_devel-constraint_operator_test.Po + -rm -f systems/$(DEPDIR)/unit_tests_devel-disconnected_neighbor_test.Po -rm -f systems/$(DEPDIR)/unit_tests_devel-equation_systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_devel-periodic_bc_test.Po -rm -f systems/$(DEPDIR)/unit_tests_devel-systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_oprof-constraint_operator_test.Po + -rm -f systems/$(DEPDIR)/unit_tests_oprof-disconnected_neighbor_test.Po -rm -f systems/$(DEPDIR)/unit_tests_oprof-equation_systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_oprof-periodic_bc_test.Po -rm -f systems/$(DEPDIR)/unit_tests_oprof-systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_opt-constraint_operator_test.Po + -rm -f systems/$(DEPDIR)/unit_tests_opt-disconnected_neighbor_test.Po -rm -f systems/$(DEPDIR)/unit_tests_opt-equation_systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_opt-periodic_bc_test.Po -rm -f systems/$(DEPDIR)/unit_tests_opt-systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_prof-constraint_operator_test.Po + -rm -f systems/$(DEPDIR)/unit_tests_prof-disconnected_neighbor_test.Po -rm -f systems/$(DEPDIR)/unit_tests_prof-equation_systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_prof-periodic_bc_test.Po -rm -f systems/$(DEPDIR)/unit_tests_prof-systems_test.Po diff --git a/tests/systems/disconnected_neighbor_test.C b/tests/systems/disconnected_neighbor_test.C new file mode 100644 index 00000000000..579a322af8b --- /dev/null +++ b/tests/systems/disconnected_neighbor_test.C @@ -0,0 +1,304 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "test_comm.h" +#include "libmesh_cppunit.h" + +using namespace libMesh; + +static const Real b = 1.0; +static const Real Cgap = 1.0; + +// Boundary IDs (counterclockwise): bottom=0, right=1, top=2, left=3 +static const boundary_id_type left_id = 3; +static const boundary_id_type right_id = 1; +static const boundary_id_type interface_left_id = 5; +static const boundary_id_type interface_right_id = 6; + +Number +heat_exact (const Point & p, + const Parameters &, + const std::string &, + const std::string &) +{ + return (p(0) < 0.5) ? p(0) : p(0) + b; +} + +// Assemble system with temperature jump interface conditions +void assemble_temperature_jump(EquationSystems &es, + const std::string & /*system_name*/) + { + const MeshBase &mesh = es.get_mesh(); + LinearImplicitSystem &system = es.get_system("TempJump"); + const DofMap &dof_map = system.get_dof_map(); + FEType fe_type = dof_map.variable_type(0); + + // FE objects for volume and face integration + auto fe = FEBase::build(mesh.mesh_dimension(), fe_type); + auto fe_face_L = FEBase::build(mesh.mesh_dimension(), fe_type); + auto fe_face_R = FEBase::build(mesh.mesh_dimension(), fe_type); + + // Quadrature rules + QGauss qrule(mesh.mesh_dimension(), fe_type.default_quadrature_order()); + QGauss qface(mesh.mesh_dimension() - 1, fe_type.default_quadrature_order()); + fe->attach_quadrature_rule(&qrule); + fe_face_L->attach_quadrature_rule(&qface); + fe_face_R->attach_quadrature_rule(&qface); + + DenseMatrix Ke; + DenseVector Fe; + std::vector dof_indices; + + const BoundaryInfo &boundary = mesh.get_boundary_info(); + const double conductance = Cgap * b; // interface conductance + + for (const Elem *elem : mesh.active_local_element_ptr_range()) + { + dof_map.dof_indices(elem, dof_indices); + const unsigned int n_dofs = dof_indices.size(); + + Ke.resize(n_dofs, n_dofs); + Fe.resize(n_dofs); + Ke.zero(); + Fe.zero(); + + // --- Volume contribution --- + fe->reinit(elem); + const auto &JxW_vol = fe->get_JxW(); + const auto &dphi_vol = fe->get_dphi(); + + for (unsigned int qp = 0; qp < qrule.n_points(); qp++) + for (unsigned int i = 0; i < n_dofs; i++) + for (unsigned int j = 0; j < n_dofs; j++) + Ke(i, j) += conductance * JxW_vol[qp] * (dphi_vol[i][qp] * dphi_vol[j][qp]); + + // --- Left-side interface --- + unsigned int side = boundary.side_with_boundary_id(elem, interface_left_id); + if (side != libMesh::invalid_uint) + { + fe_face_L->reinit(elem, side); + const auto &phi_L = fe_face_L->get_phi(); + const auto &JxW_face = fe_face_L->get_JxW(); + + const Elem *neighbor = elem->neighbor_ptr(side); + libmesh_assert(neighbor); + unsigned int n_side = neighbor->which_neighbor_am_i(elem); + fe_face_R->reinit(neighbor, n_side); + const auto &phi_R = fe_face_R->get_phi(); + + std::vector dofs_L, dofs_R; + dof_map.dof_indices(elem, dofs_L); + dof_map.dof_indices(neighbor, dofs_R); + + DenseMatrix Ke_ll(n_dofs, n_dofs); + DenseMatrix Ke_lr(n_dofs, dofs_R.size()); + + for (unsigned int qp = 0; qp < qface.n_points(); qp++) + { + for (unsigned int i = 0; i < n_dofs; i++) + for (unsigned int j = 0; j < n_dofs; j++) + Ke_ll(i, j) += Cgap * phi_L[i][qp] * phi_L[j][qp] * JxW_face[qp]; + + for (unsigned int i = 0; i < n_dofs; i++) + for (unsigned int j = 0; j < dofs_R.size(); j++) + Ke_lr(i, j) += -Cgap * phi_L[i][qp] * phi_R[j][qp] * JxW_face[qp]; + } + + Ke += Ke_ll; + system.matrix->add_matrix(Ke_lr, dofs_L, dofs_R); + } + + // --- Right-side interface --- + side = boundary.side_with_boundary_id(elem, interface_right_id); + if (side != libMesh::invalid_uint) + { + fe_face_R->reinit(elem, side); + const auto &phi_R = fe_face_R->get_phi(); + const auto &JxW_face = fe_face_R->get_JxW(); + + const Elem *neighbor = elem->neighbor_ptr(side); + libmesh_assert(neighbor); + unsigned int n_side = neighbor->which_neighbor_am_i(elem); + fe_face_L->reinit(neighbor, n_side); + const auto &phi_L = fe_face_L->get_phi(); + + std::vector dofs_R, dofs_L; + dof_map.dof_indices(elem, dofs_R); + dof_map.dof_indices(neighbor, dofs_L); + + DenseMatrix Ke_rr(n_dofs, n_dofs); + DenseMatrix Ke_rl(n_dofs, dofs_L.size()); + + for (unsigned int qp = 0; qp < qface.n_points(); qp++) + { + for (unsigned int i = 0; i < n_dofs; i++) + for (unsigned int j = 0; j < n_dofs; j++) + Ke_rr(i, j) += Cgap * phi_R[i][qp] * phi_R[j][qp] * JxW_face[qp]; + + for (unsigned int i = 0; i < n_dofs; i++) + for (unsigned int j = 0; j < dofs_L.size(); j++) + Ke_rl(i, j) += -Cgap * phi_R[i][qp] * phi_L[j][qp] * JxW_face[qp]; + } + + Ke += Ke_rr; + system.matrix->add_matrix(Ke_rl, dofs_R, dofs_L); + } + + // Apply constraints and add local contributions + dof_map.heterogenously_constrain_element_matrix_and_vector(Ke, Fe, dof_indices); + system.matrix->add_matrix(Ke, dof_indices); + system.rhs->add_vector(Fe, dof_indices); + } + + system.matrix->close(); + system.rhs->close(); + } + +class DisconnectedNeighborTest : public CppUnit::TestCase { +public: + LIBMESH_CPPUNIT_TEST_SUITE( DisconnectedNeighborTest ); + CPPUNIT_TEST( testTempJump ); + CPPUNIT_TEST_SUITE_END(); + +private: + + void testTempJump() + { + Mesh mesh(*TestCommWorld, 2); + + // Domain: x in (0, 1), y in (0, 1) + // Split into two subdomains: + // Left subdomain: 0 <= x <= 0.5 + // Right subdomain: 0.5 <= x <= 1 + // + // Note: Points at x = 0.5 are duplicated (same coordinates but different node IDs) + // to represent an interface or discontinuity between the two subdomains. + // + // Coordinates layout: + // + // (0,1) (0.5,1)_L (0.5,1)_R (1,1) + // x--------x x--------x + // | | | | + // | Left | Interface | Right | + // | | | | + // x--------x x--------x + // (0,0) (0.5,0)_L (0.5,0)_R (1,0) + + + // ---- Define points ---- + + // Left subdomain nodes + mesh.add_point(Point(0.0, 0.0), 0); // bottom-left corner + mesh.add_point(Point(0.5, 0.0), 1); // bottom-right corner of left element (interface node) + mesh.add_point(Point(0.0, 1.0), 2); // top-left corner + mesh.add_point(Point(0.5, 1.0), 3); // top-right corner of left element (interface node) + + // Right subdomain nodes (duplicated interface points) + mesh.add_point(Point(0.5, 0.0), 4); // bottom-left corner of right element (same coords as node 1) (interface node) + mesh.add_point(Point(1.0, 0.0), 5); // bottom-right corner + mesh.add_point(Point(0.5, 1.0), 6); // top-left corner of right element (same coords as node 3) (interface node) + mesh.add_point(Point(1.0, 1.0), 7); // top-right corner + + + // ---- Define elements ---- + BoundaryInfo & boundary = mesh.get_boundary_info(); + // Left element (element ID = 0) + { + Elem * elem = mesh.add_elem(Elem::build_with_id(QUAD4, 0)); + elem->set_node(0, mesh.node_ptr(0)); // bottom-left (0,0) + elem->set_node(1, mesh.node_ptr(1)); // bottom-right (0.5,0) + elem->set_node(2, mesh.node_ptr(3)); // top-right (0.5,1) + elem->set_node(3, mesh.node_ptr(2)); // top-left (0,1) + boundary.add_side(elem, 3, left_id); // left boundary + boundary.add_side(elem, 1, interface_left_id); + boundary.sideset_name(left_id) = "left_boundary"; + boundary.sideset_name(interface_left_id) = "interface_left"; + } + + // Right element (element ID = 1) + { + Elem * elem = mesh.add_elem(Elem::build_with_id(QUAD4, 1)); + elem->set_node(0, mesh.node_ptr(4)); // bottom-left (0.5,0)_R + elem->set_node(1, mesh.node_ptr(5)); // bottom-right (1,0) + elem->set_node(2, mesh.node_ptr(7)); // top-right (1,1) + elem->set_node(3, mesh.node_ptr(6)); // top-left (0.5,1)_R + boundary.add_side(elem, 1, right_id); // right boundary + boundary.add_side(elem, 3, interface_right_id); + boundary.sideset_name(right_id) = "right_boundary"; + boundary.sideset_name(interface_right_id) = "interface_right"; + } + + // This is the key testing step: inform libMesh about the disconnected boundaries + // And, in `prepare_for_use()`, libMesh will set up the disconnected neighbor relationships. + mesh.add_disconnected_boundaries(interface_left_id, interface_right_id); + + // libMesh shouldn't renumber, or our based-on-initial-id + // assertions later may fail. + mesh.allow_renumbering(false); + + mesh.prepare_for_use(); + + auto elem_left = mesh.elem_ptr(0); + auto elem_right = mesh.elem_ptr(1); + + LIBMESH_ASSERT_NUMBERS_EQUAL(elem_left->neighbor_ptr(1)->id(), elem_right->id(), 1e-15); + LIBMESH_ASSERT_NUMBERS_EQUAL(elem_right->neighbor_ptr(3)->id(), elem_left->id(), 1e-15); + + EquationSystems es(mesh); + LinearImplicitSystem & sys = + es.add_system("TempJump"); + + const unsigned int u_var = sys.add_variable("u", FEType(FIRST, LAGRANGE)); + + std::set left_bdy { left_id }; + std::set right_bdy { right_id }; + std::vector vars (1, u_var); + + auto left_fn = [](const Point &, const Parameters &, const std::string &, const std::string &) { return 0.0; }; + auto right_fn = [](const Point &, const Parameters &, const std::string &, const std::string &) { return 1.0 + b; }; + + WrappedFunction left_val(sys, left_fn); + WrappedFunction right_val(sys, right_fn); + + DirichletBoundary bc_left (left_bdy, vars, left_val); + DirichletBoundary bc_right(right_bdy, vars, right_val); + + sys.get_dof_map().add_dirichlet_boundary(bc_left); + sys.get_dof_map().add_dirichlet_boundary(bc_right); + + sys.attach_assemble_function(assemble_temperature_jump); + + // Ensure the DofMap creates sparsity entries between neighboring elements. + // Without this, PETSc may report "New nonzero at (a,b) caused a malloc." + sys.get_dof_map().set_implicit_neighbor_dofs(true); + + es.init(); + sys.solve(); + + ExodusII_IO(mesh).write_equation_systems("temperature_jump.e", es); + + Parameters params; + + for (Real x=0.; x<=1.; x+=0.05) + for (Real y=0.; y<=1.; y+=0.05) + { + Point p(x,y); + const Number exact = heat_exact(p,params,"",""); + const Number approx = sys.point_value(0,p); + LIBMESH_ASSERT_NUMBERS_EQUAL(exact, approx, 1e-2); + } + } +}; + +CPPUNIT_TEST_SUITE_REGISTRATION( DisconnectedNeighborTest ); From cd86963d96f9d407fab1f4ca7551c1c3e416bfbb Mon Sep 17 00:00:00 2001 From: Cheng-Hau Yang Date: Tue, 21 Oct 2025 16:15:24 -0500 Subject: [PATCH 04/26] Refactor to use forward declarations and revert periodic neighbor logic - Moved new MeshBase functions out of the header to use forward declarations, reducing unnecessary includes. - Reverted the PeriodicBoundaries::neighbor() logic to allow self-matching, since the existing boundary ID check already prevents unintended self-detections in periodic boundary cases. --- include/base/periodic_boundaries.h | 3 +- include/mesh/mesh_base.h | 42 ++++++---------------- src/base/periodic_boundaries.C | 19 ++++------ src/mesh/mesh_base.C | 42 ++++++++++++++++++++++ src/mesh/unstructured_mesh.C | 9 ++++- tests/systems/disconnected_neighbor_test.C | 2 +- 6 files changed, 70 insertions(+), 47 deletions(-) diff --git a/include/base/periodic_boundaries.h b/include/base/periodic_boundaries.h index f2837e72efd..613547de5e0 100644 --- a/include/base/periodic_boundaries.h +++ b/include/base/periodic_boundaries.h @@ -68,8 +68,7 @@ class PeriodicBoundaries : public std::map // periodic boundary condition support -#include "libmesh/periodic_boundaries.h" -#include "libmesh/periodic_boundary.h" +// Use forward declarations inside the libMesh namespace +namespace libMesh +{ + class PeriodicBoundary; + class PeriodicBoundaries; +} namespace libMesh { @@ -1829,35 +1833,11 @@ class MeshBase : public ParallelObject * Register a pair of boundaries as disconnected boundaries. */ void add_disconnected_boundaries(const boundary_id_type b1, - const boundary_id_type b2) - { - // Lazily allocate the container the first time it’s needed - if (!_disconnected_boundary_pairs) - _disconnected_boundary_pairs = std::make_unique(); - - // Create forward and inverse boundary mappings - PeriodicBoundary forward(RealVectorValue(0., 0., 0.)); - PeriodicBoundary inverse(RealVectorValue(0., 0., 0.)); - - forward.myboundary = b1; - forward.pairedboundary = b2; - inverse.myboundary = b2; - inverse.pairedboundary = b1; - - // Add both directions into the container - _disconnected_boundary_pairs->emplace(b1, forward.clone()); - _disconnected_boundary_pairs->emplace(b2, inverse.clone()); - } - - PeriodicBoundaries * get_disconnected_boundaries() - { - return _disconnected_boundary_pairs.get(); - } - - const PeriodicBoundaries * get_disconnected_boundaries() const - { - return _disconnected_boundary_pairs.get(); - } + const boundary_id_type b2); + + PeriodicBoundaries * get_disconnected_boundaries(); + + const PeriodicBoundaries * get_disconnected_boundaries() const; #endif diff --git a/src/base/periodic_boundaries.C b/src/base/periodic_boundaries.C index d481e6733f3..1b3f4765210 100644 --- a/src/base/periodic_boundaries.C +++ b/src/base/periodic_boundaries.C @@ -60,8 +60,7 @@ const Elem * PeriodicBoundaries::neighbor(boundary_id_type boundary_id, const PointLocatorBase & point_locator, const Elem * e, unsigned int side, - unsigned int * neigh_side, - bool skip_found_check) const + unsigned int * neigh_side) const { std::unique_ptr neigh_side_proxy; @@ -82,9 +81,6 @@ const Elem * PeriodicBoundaries::neighbor(boundary_id_type boundary_id, for(const Elem * elem_it : candidate_elements) { - if (elem_it == e) // skip self - continue; - std::vector neigh_sides = mesh.get_boundary_info().sides_with_boundary_id(elem_it, b->pairedboundary); @@ -106,13 +102,12 @@ const Elem * PeriodicBoundaries::neighbor(boundary_id_type boundary_id, } } - if (!skip_found_check) - // If we should have found a periodic neighbor but didn't then - // either we're on a ghosted element with a remote periodic neighbor - // or we're on a mesh with an inconsistent periodic boundary. - libmesh_error_msg_if(mesh.is_serial() || - (e->processor_id() == mesh.processor_id()), - "Periodic boundary neighbor not found"); + // If we should have found a periodic neighbor but didn't then + // either we're on a ghosted element with a remote periodic neighbor + // or we're on a mesh with an inconsistent periodic boundary. + libmesh_error_msg_if(mesh.is_serial() || + (e->processor_id() == mesh.processor_id()), + "Periodic boundary neighbor not found"); if (neigh_side) *neigh_side = libMesh::invalid_uint; diff --git a/src/mesh/mesh_base.C b/src/mesh/mesh_base.C index 8f8b225507d..f0bb81909ce 100644 --- a/src/mesh/mesh_base.C +++ b/src/mesh/mesh_base.C @@ -49,6 +49,10 @@ #include // for std::ostringstream #include +#include "libmesh/periodic_boundaries.h" +#include "libmesh/periodic_boundary.h" + + namespace libMesh { @@ -1953,6 +1957,44 @@ void MeshBase::detect_interior_parents() +#ifdef LIBMESH_ENABLE_PERIODIC + /** + * Register a pair of boundaries as disconnected boundaries. + */ + void MeshBase::add_disconnected_boundaries(const boundary_id_type b1, + const boundary_id_type b2) + { + // Lazily allocate the container the first time it’s needed + if (!_disconnected_boundary_pairs) + _disconnected_boundary_pairs = std::make_unique(); + + // Create forward and inverse boundary mappings + PeriodicBoundary forward(RealVectorValue(0., 0., 0.)); + PeriodicBoundary inverse(RealVectorValue(0., 0., 0.)); + + forward.myboundary = b1; + forward.pairedboundary = b2; + inverse.myboundary = b2; + inverse.pairedboundary = b1; + + // Add both directions into the container + _disconnected_boundary_pairs->emplace(b1, forward.clone()); + _disconnected_boundary_pairs->emplace(b2, inverse.clone()); + } + + PeriodicBoundaries * MeshBase::get_disconnected_boundaries() + { + return _disconnected_boundary_pairs.get(); + } + + const PeriodicBoundaries * MeshBase::get_disconnected_boundaries() const + { + return _disconnected_boundary_pairs.get(); + } +#endif + + + void MeshBase::set_point_locator_close_to_point_tol(Real val) { _point_locator_close_to_point_tol = val; diff --git a/src/mesh/unstructured_mesh.C b/src/mesh/unstructured_mesh.C index d2f6657658e..dd03e7558d7 100644 --- a/src/mesh/unstructured_mesh.C +++ b/src/mesh/unstructured_mesh.C @@ -47,6 +47,10 @@ #include #include +// for disconnected neighbors +#include "libmesh/periodic_boundaries.h" +#include "libmesh/periodic_boundary.h" + namespace { using namespace libMesh; @@ -1015,8 +1019,11 @@ void UnstructuredMesh::find_neighbors (const bool reset_remote_elements, for (const auto & [id, boundary_ptr] : *db) { + if (!this->get_boundary_info().has_boundary_id(element, ms, id)) + continue; + unsigned int neigh_side; - const Elem * neigh = db->neighbor(id, *point_locator, element, ms, &neigh_side, true /*skip_found_check*/); + const Elem * neigh = db->neighbor(id, *point_locator, element, ms, &neigh_side); if (neigh && neigh != remote_elem && neigh != element) { element->set_neighbor(ms, this->elem_ptr(neigh->id())); diff --git a/tests/systems/disconnected_neighbor_test.C b/tests/systems/disconnected_neighbor_test.C index 579a322af8b..9d6e0a95df0 100644 --- a/tests/systems/disconnected_neighbor_test.C +++ b/tests/systems/disconnected_neighbor_test.C @@ -286,7 +286,7 @@ private: es.init(); sys.solve(); - ExodusII_IO(mesh).write_equation_systems("temperature_jump.e", es); + // ExodusII_IO(mesh).write_equation_systems("temperature_jump.e", es); Parameters params; From 114972c45165eb5ee3e3ae2fbc241df17e940cf1 Mon Sep 17 00:00:00 2001 From: Cheng-Hau Yang Date: Thu, 23 Oct 2025 09:21:41 -0500 Subject: [PATCH 05/26] Add translations customization for disconnected neighbor --- include/mesh/mesh_base.h | 5 ++++- src/mesh/mesh_base.C | 7 ++++--- src/mesh/unstructured_mesh.C | 4 +--- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/include/mesh/mesh_base.h b/include/mesh/mesh_base.h index ce6f8d4293e..46113f5dc77 100644 --- a/include/mesh/mesh_base.h +++ b/include/mesh/mesh_base.h @@ -36,6 +36,8 @@ #include #include +#include "libmesh/vector_value.h" + // periodic boundary condition support // Use forward declarations inside the libMesh namespace namespace libMesh @@ -1833,7 +1835,8 @@ class MeshBase : public ParallelObject * Register a pair of boundaries as disconnected boundaries. */ void add_disconnected_boundaries(const boundary_id_type b1, - const boundary_id_type b2); + const boundary_id_type b2, + const RealVectorValue & translation); PeriodicBoundaries * get_disconnected_boundaries(); diff --git a/src/mesh/mesh_base.C b/src/mesh/mesh_base.C index f0bb81909ce..485e006803d 100644 --- a/src/mesh/mesh_base.C +++ b/src/mesh/mesh_base.C @@ -1962,15 +1962,16 @@ void MeshBase::detect_interior_parents() * Register a pair of boundaries as disconnected boundaries. */ void MeshBase::add_disconnected_boundaries(const boundary_id_type b1, - const boundary_id_type b2) + const boundary_id_type b2, + const RealVectorValue & translation) { // Lazily allocate the container the first time it’s needed if (!_disconnected_boundary_pairs) _disconnected_boundary_pairs = std::make_unique(); // Create forward and inverse boundary mappings - PeriodicBoundary forward(RealVectorValue(0., 0., 0.)); - PeriodicBoundary inverse(RealVectorValue(0., 0., 0.)); + PeriodicBoundary forward(translation); + PeriodicBoundary inverse(translation * -1.0); forward.myboundary = b1; forward.pairedboundary = b2; diff --git a/src/mesh/unstructured_mesh.C b/src/mesh/unstructured_mesh.C index dd03e7558d7..1130d753b4b 100644 --- a/src/mesh/unstructured_mesh.C +++ b/src/mesh/unstructured_mesh.C @@ -998,6 +998,7 @@ void UnstructuredMesh::find_neighbors (const bool reset_remote_elements, } #ifdef LIBMESH_ENABLE_PERIODIC + // Get the disconnected boundaries object (from periodic BCs) auto * db = this->get_disconnected_boundaries(); if (db) @@ -1005,9 +1006,6 @@ void UnstructuredMesh::find_neighbors (const bool reset_remote_elements, // Obtain a point locator std::unique_ptr point_locator = this->sub_point_locator(); - // Get the disconnected boundaries object (from periodic BCs) - auto * db = this->get_disconnected_boundaries(); - for (const auto & element : this->element_ptr_range()) { for (auto ms : element->side_index_range()) From 0b5260d440b80f689be3768c8cccf9087914408b Mon Sep 17 00:00:00 2001 From: Cheng-Hau Yang Date: Fri, 24 Oct 2025 10:46:52 -0500 Subject: [PATCH 06/26] Fix code base on Roy's feedback (a) Revert periodic BC source file (b) Fix indentation in UnstructuredMesh::find_neighbors and wrap tests (c) involving solve() in DisconnectedNeighborTest with #ifdef LIBMESH_HAVE_SOLVER guards to ensure correct conditional compilation. --- src/base/periodic_boundaries.C | 6 +++--- src/mesh/unstructured_mesh.C | 6 ++++-- tests/systems/disconnected_neighbor_test.C | 6 +++++- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/base/periodic_boundaries.C b/src/base/periodic_boundaries.C index 1b3f4765210..df1127c1c71 100644 --- a/src/base/periodic_boundaries.C +++ b/src/base/periodic_boundaries.C @@ -80,7 +80,6 @@ const Elem * PeriodicBoundaries::neighbor(boundary_id_type boundary_id, const MeshBase & mesh = point_locator.get_mesh(); for(const Elem * elem_it : candidate_elements) { - std::vector neigh_sides = mesh.get_boundary_info().sides_with_boundary_id(elem_it, b->pairedboundary); @@ -106,13 +105,14 @@ const Elem * PeriodicBoundaries::neighbor(boundary_id_type boundary_id, // either we're on a ghosted element with a remote periodic neighbor // or we're on a mesh with an inconsistent periodic boundary. libmesh_error_msg_if(mesh.is_serial() || - (e->processor_id() == mesh.processor_id()), - "Periodic boundary neighbor not found"); + (e->processor_id() == mesh.processor_id()), + "Periodic boundary neighbor not found"); if (neigh_side) *neigh_side = libMesh::invalid_uint; return remote_elem; } + } // namespace libMesh diff --git a/src/mesh/unstructured_mesh.C b/src/mesh/unstructured_mesh.C index 1130d753b4b..7b2f1628a41 100644 --- a/src/mesh/unstructured_mesh.C +++ b/src/mesh/unstructured_mesh.C @@ -1015,13 +1015,15 @@ void UnstructuredMesh::find_neighbors (const bool reset_remote_elements, element->neighbor_ptr(ms) != remote_elem) continue; - for (const auto & [id, boundary_ptr] : *db) + for (const auto & [id, boundary_ptr] : *db) { if (!this->get_boundary_info().has_boundary_id(element, ms, id)) continue; unsigned int neigh_side; - const Elem * neigh = db->neighbor(id, *point_locator, element, ms, &neigh_side); + const Elem * neigh = + db->neighbor(id, *point_locator, element, ms, &neigh_side); + if (neigh && neigh != remote_elem && neigh != element) { element->set_neighbor(ms, this->elem_ptr(neigh->id())); diff --git a/tests/systems/disconnected_neighbor_test.C b/tests/systems/disconnected_neighbor_test.C index 9d6e0a95df0..ab8b006be2f 100644 --- a/tests/systems/disconnected_neighbor_test.C +++ b/tests/systems/disconnected_neighbor_test.C @@ -168,11 +168,14 @@ void assemble_temperature_jump(EquationSystems &es, class DisconnectedNeighborTest : public CppUnit::TestCase { public: LIBMESH_CPPUNIT_TEST_SUITE( DisconnectedNeighborTest ); +#ifdef LIBMESH_HAVE_SOLVER CPPUNIT_TEST( testTempJump ); +#endif CPPUNIT_TEST_SUITE_END(); private: +#ifdef LIBMESH_HAVE_SOLVER void testTempJump() { Mesh mesh(*TestCommWorld, 2); @@ -241,7 +244,7 @@ private: // This is the key testing step: inform libMesh about the disconnected boundaries // And, in `prepare_for_use()`, libMesh will set up the disconnected neighbor relationships. - mesh.add_disconnected_boundaries(interface_left_id, interface_right_id); + mesh.add_disconnected_boundaries(interface_left_id, interface_right_id, RealVectorValue(0.0, 0.0, 0.0)); // libMesh shouldn't renumber, or our based-on-initial-id // assertions later may fail. @@ -299,6 +302,7 @@ private: LIBMESH_ASSERT_NUMBERS_EQUAL(exact, approx, 1e-2); } } +#endif }; CPPUNIT_TEST_SUITE_REGISTRATION( DisconnectedNeighborTest ); From ac5c088d3c393d90e4767e7b823c19a1aaabd556 Mon Sep 17 00:00:00 2001 From: Cheng-Hau Yang Date: Fri, 24 Oct 2025 14:01:46 -0500 Subject: [PATCH 07/26] fix unit tests --- tests/systems/disconnected_neighbor_test.C | 57 +++++++++++++++++----- 1 file changed, 45 insertions(+), 12 deletions(-) diff --git a/tests/systems/disconnected_neighbor_test.C b/tests/systems/disconnected_neighbor_test.C index ab8b006be2f..b1c0937523a 100644 --- a/tests/systems/disconnected_neighbor_test.C +++ b/tests/systems/disconnected_neighbor_test.C @@ -35,6 +35,23 @@ heat_exact (const Point & p, return (p(0) < 0.5) ? p(0) : p(0) + b; } +Number left_solution_fn(const Point &, + const Parameters &, + const std::string &, + const std::string &) +{ + return 0.0; +} + +Number right_solution_fn(const Point &, + const Parameters & params, + const std::string &, + const std::string &) +{ + const Real b = params.get("b"); + return 1.0 + b; +} + // Assemble system with temperature jump interface conditions void assemble_temperature_jump(EquationSystems &es, const std::string & /*system_name*/) @@ -252,11 +269,31 @@ private: mesh.prepare_for_use(); - auto elem_left = mesh.elem_ptr(0); - auto elem_right = mesh.elem_ptr(1); + // Check elem 0 (the left element) + if (const Elem * elem_left = mesh.query_elem_ptr(0)) + { + // This processor owns elem 0, so we can safely check its neighbor + const Elem * elem_right_neighbor = elem_left->neighbor_ptr(1); + + // The neighbor relationship should have been set up by prepare_for_use() + libmesh_assert(elem_right_neighbor); + + // Verify the neighbor is indeed elem 1 + LIBMESH_ASSERT_NUMBERS_EQUAL(elem_right_neighbor->id(), 1, 1e-15); + } - LIBMESH_ASSERT_NUMBERS_EQUAL(elem_left->neighbor_ptr(1)->id(), elem_right->id(), 1e-15); - LIBMESH_ASSERT_NUMBERS_EQUAL(elem_right->neighbor_ptr(3)->id(), elem_left->id(), 1e-15); + // Check elem 1 (the right element) + if (const Elem * elem_right = mesh.query_elem_ptr(1)) + { + // This processor owns elem 1, so we can safely check its neighbor + const Elem * elem_left_neighbor = elem_right->neighbor_ptr(3); + + // The neighbor relationship should be valid + libmesh_assert(elem_left_neighbor); + + // Verify the neighbor is indeed elem 0 + LIBMESH_ASSERT_NUMBERS_EQUAL(elem_left_neighbor->id(), 0, 1e-15); + } EquationSystems es(mesh); LinearImplicitSystem & sys = @@ -268,12 +305,10 @@ private: std::set right_bdy { right_id }; std::vector vars (1, u_var); - auto left_fn = [](const Point &, const Parameters &, const std::string &, const std::string &) { return 0.0; }; - auto right_fn = [](const Point &, const Parameters &, const std::string &, const std::string &) { return 1.0 + b; }; - - WrappedFunction left_val(sys, left_fn); - WrappedFunction right_val(sys, right_fn); - + Parameters params; + params.set("b") = b; + WrappedFunction left_val(sys, &left_solution_fn); + WrappedFunction right_val(sys, &right_solution_fn, ¶ms); DirichletBoundary bc_left (left_bdy, vars, left_val); DirichletBoundary bc_right(right_bdy, vars, right_val); @@ -291,8 +326,6 @@ private: // ExodusII_IO(mesh).write_equation_systems("temperature_jump.e", es); - Parameters params; - for (Real x=0.; x<=1.; x+=0.05) for (Real y=0.; y<=1.; y+=0.05) { From c034b849f5d784730026abf2d3bfc74c5884f02d Mon Sep 17 00:00:00 2001 From: Cheng-Hau Yang Date: Fri, 24 Oct 2025 17:36:21 -0500 Subject: [PATCH 08/26] [WIP] simple ghosting functor for disconnected neighbor (rooms to improve) --- Makefile.in | 83 ++++++++++++++++++- build-aux/ltmain.sh | 27 +++++- include/Makefile.in | 3 +- .../map_based_disconnected_ghosting.h | 63 ++++++++++++++ include/include_HEADERS | 3 +- include/libmesh/Makefile.am | 4 + include/libmesh/Makefile.in | 6 +- .../map_based_disconnected_ghosting.C | 61 ++++++++++++++ src/libmesh_SOURCES | 3 +- tests/systems/disconnected_neighbor_test.C | 13 +++ 10 files changed, 259 insertions(+), 7 deletions(-) create mode 100644 include/ghosting/map_based_disconnected_ghosting.h create mode 100644 src/ghosting/map_based_disconnected_ghosting.C diff --git a/Makefile.in b/Makefile.in index a81e9357c4e..ed3a71de374 100644 --- a/Makefile.in +++ b/Makefile.in @@ -375,6 +375,7 @@ am__libmesh_dbg_la_SOURCES_DIST = src/base/dirichlet_boundary.C \ src/geom/sphere.C src/geom/surface.C \ src/ghosting/default_coupling.C \ src/ghosting/ghost_point_neighbors.C \ + src/ghosting/map_based_disconnected_ghosting.C \ src/ghosting/non_manifold_coupling.C \ src/ghosting/overlap_coupling.C \ src/ghosting/point_neighbor_coupling.C \ @@ -785,6 +786,7 @@ am__objects_1 = src/base/libmesh_dbg_la-dirichlet_boundary.lo \ src/geom/libmesh_dbg_la-surface.lo \ src/ghosting/libmesh_dbg_la-default_coupling.lo \ src/ghosting/libmesh_dbg_la-ghost_point_neighbors.lo \ + src/ghosting/libmesh_dbg_la-map_based_disconnected_ghosting.lo \ src/ghosting/libmesh_dbg_la-non_manifold_coupling.lo \ src/ghosting/libmesh_dbg_la-overlap_coupling.lo \ src/ghosting/libmesh_dbg_la-point_neighbor_coupling.lo \ @@ -1189,6 +1191,7 @@ am__libmesh_devel_la_SOURCES_DIST = src/base/dirichlet_boundary.C \ src/geom/sphere.C src/geom/surface.C \ src/ghosting/default_coupling.C \ src/ghosting/ghost_point_neighbors.C \ + src/ghosting/map_based_disconnected_ghosting.C \ src/ghosting/non_manifold_coupling.C \ src/ghosting/overlap_coupling.C \ src/ghosting/point_neighbor_coupling.C \ @@ -1598,6 +1601,7 @@ am__objects_2 = src/base/libmesh_devel_la-dirichlet_boundary.lo \ src/geom/libmesh_devel_la-surface.lo \ src/ghosting/libmesh_devel_la-default_coupling.lo \ src/ghosting/libmesh_devel_la-ghost_point_neighbors.lo \ + src/ghosting/libmesh_devel_la-map_based_disconnected_ghosting.lo \ src/ghosting/libmesh_devel_la-non_manifold_coupling.lo \ src/ghosting/libmesh_devel_la-overlap_coupling.lo \ src/ghosting/libmesh_devel_la-point_neighbor_coupling.lo \ @@ -1999,6 +2003,7 @@ am__libmesh_oprof_la_SOURCES_DIST = src/base/dirichlet_boundary.C \ src/geom/sphere.C src/geom/surface.C \ src/ghosting/default_coupling.C \ src/ghosting/ghost_point_neighbors.C \ + src/ghosting/map_based_disconnected_ghosting.C \ src/ghosting/non_manifold_coupling.C \ src/ghosting/overlap_coupling.C \ src/ghosting/point_neighbor_coupling.C \ @@ -2408,6 +2413,7 @@ am__objects_3 = src/base/libmesh_oprof_la-dirichlet_boundary.lo \ src/geom/libmesh_oprof_la-surface.lo \ src/ghosting/libmesh_oprof_la-default_coupling.lo \ src/ghosting/libmesh_oprof_la-ghost_point_neighbors.lo \ + src/ghosting/libmesh_oprof_la-map_based_disconnected_ghosting.lo \ src/ghosting/libmesh_oprof_la-non_manifold_coupling.lo \ src/ghosting/libmesh_oprof_la-overlap_coupling.lo \ src/ghosting/libmesh_oprof_la-point_neighbor_coupling.lo \ @@ -2809,6 +2815,7 @@ am__libmesh_opt_la_SOURCES_DIST = src/base/dirichlet_boundary.C \ src/geom/sphere.C src/geom/surface.C \ src/ghosting/default_coupling.C \ src/ghosting/ghost_point_neighbors.C \ + src/ghosting/map_based_disconnected_ghosting.C \ src/ghosting/non_manifold_coupling.C \ src/ghosting/overlap_coupling.C \ src/ghosting/point_neighbor_coupling.C \ @@ -3218,6 +3225,7 @@ am__objects_4 = src/base/libmesh_opt_la-dirichlet_boundary.lo \ src/geom/libmesh_opt_la-surface.lo \ src/ghosting/libmesh_opt_la-default_coupling.lo \ src/ghosting/libmesh_opt_la-ghost_point_neighbors.lo \ + src/ghosting/libmesh_opt_la-map_based_disconnected_ghosting.lo \ src/ghosting/libmesh_opt_la-non_manifold_coupling.lo \ src/ghosting/libmesh_opt_la-overlap_coupling.lo \ src/ghosting/libmesh_opt_la-point_neighbor_coupling.lo \ @@ -3618,6 +3626,7 @@ am__libmesh_prof_la_SOURCES_DIST = src/base/dirichlet_boundary.C \ src/geom/sphere.C src/geom/surface.C \ src/ghosting/default_coupling.C \ src/ghosting/ghost_point_neighbors.C \ + src/ghosting/map_based_disconnected_ghosting.C \ src/ghosting/non_manifold_coupling.C \ src/ghosting/overlap_coupling.C \ src/ghosting/point_neighbor_coupling.C \ @@ -4027,6 +4036,7 @@ am__objects_5 = src/base/libmesh_prof_la-dirichlet_boundary.lo \ src/geom/libmesh_prof_la-surface.lo \ src/ghosting/libmesh_prof_la-default_coupling.lo \ src/ghosting/libmesh_prof_la-ghost_point_neighbors.lo \ + src/ghosting/libmesh_prof_la-map_based_disconnected_ghosting.lo \ src/ghosting/libmesh_prof_la-non_manifold_coupling.lo \ src/ghosting/libmesh_prof_la-overlap_coupling.lo \ src/ghosting/libmesh_prof_la-point_neighbor_coupling.lo \ @@ -5757,30 +5767,35 @@ am__depfiles_remade = src/apps/$(DEPDIR)/amr_dbg-amr.Po \ src/geom/$(DEPDIR)/libmesh_prof_la-surface.Plo \ src/ghosting/$(DEPDIR)/libmesh_dbg_la-default_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_dbg_la-ghost_point_neighbors.Plo \ + src/ghosting/$(DEPDIR)/libmesh_dbg_la-map_based_disconnected_ghosting.Plo \ src/ghosting/$(DEPDIR)/libmesh_dbg_la-non_manifold_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_dbg_la-overlap_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_dbg_la-point_neighbor_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_dbg_la-sibling_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_devel_la-default_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_devel_la-ghost_point_neighbors.Plo \ + src/ghosting/$(DEPDIR)/libmesh_devel_la-map_based_disconnected_ghosting.Plo \ src/ghosting/$(DEPDIR)/libmesh_devel_la-non_manifold_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_devel_la-overlap_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_devel_la-point_neighbor_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_devel_la-sibling_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_oprof_la-default_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_oprof_la-ghost_point_neighbors.Plo \ + src/ghosting/$(DEPDIR)/libmesh_oprof_la-map_based_disconnected_ghosting.Plo \ src/ghosting/$(DEPDIR)/libmesh_oprof_la-non_manifold_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_oprof_la-overlap_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_oprof_la-point_neighbor_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_oprof_la-sibling_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_opt_la-default_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_opt_la-ghost_point_neighbors.Plo \ + src/ghosting/$(DEPDIR)/libmesh_opt_la-map_based_disconnected_ghosting.Plo \ src/ghosting/$(DEPDIR)/libmesh_opt_la-non_manifold_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_opt_la-overlap_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_opt_la-point_neighbor_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_opt_la-sibling_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_prof_la-default_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_prof_la-ghost_point_neighbors.Plo \ + src/ghosting/$(DEPDIR)/libmesh_prof_la-map_based_disconnected_ghosting.Plo \ src/ghosting/$(DEPDIR)/libmesh_prof_la-non_manifold_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_prof_la-overlap_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_prof_la-point_neighbor_coupling.Plo \ @@ -8041,6 +8056,7 @@ libmesh_SOURCES = \ src/geom/surface.C \ src/ghosting/default_coupling.C \ src/ghosting/ghost_point_neighbors.C \ + src/ghosting/map_based_disconnected_ghosting.C \ src/ghosting/non_manifold_coupling.C \ src/ghosting/overlap_coupling.C \ src/ghosting/point_neighbor_coupling.C \ @@ -8323,7 +8339,7 @@ libmesh_SOURCES = \ src/utils/tree.C \ src/utils/tree_node.C \ src/utils/utility.C \ - src/utils/xdr_cxx.C + src/utils/xdr_cxx.C # A convenience library to hold proper libMesh @@ -9223,6 +9239,9 @@ src/ghosting/libmesh_dbg_la-default_coupling.lo: \ src/ghosting/libmesh_dbg_la-ghost_point_neighbors.lo: \ src/ghosting/$(am__dirstamp) \ src/ghosting/$(DEPDIR)/$(am__dirstamp) +src/ghosting/libmesh_dbg_la-map_based_disconnected_ghosting.lo: \ + src/ghosting/$(am__dirstamp) \ + src/ghosting/$(DEPDIR)/$(am__dirstamp) src/ghosting/libmesh_dbg_la-non_manifold_coupling.lo: \ src/ghosting/$(am__dirstamp) \ src/ghosting/$(DEPDIR)/$(am__dirstamp) @@ -10458,6 +10477,9 @@ src/ghosting/libmesh_devel_la-default_coupling.lo: \ src/ghosting/libmesh_devel_la-ghost_point_neighbors.lo: \ src/ghosting/$(am__dirstamp) \ src/ghosting/$(DEPDIR)/$(am__dirstamp) +src/ghosting/libmesh_devel_la-map_based_disconnected_ghosting.lo: \ + src/ghosting/$(am__dirstamp) \ + src/ghosting/$(DEPDIR)/$(am__dirstamp) src/ghosting/libmesh_devel_la-non_manifold_coupling.lo: \ src/ghosting/$(am__dirstamp) \ src/ghosting/$(DEPDIR)/$(am__dirstamp) @@ -11630,6 +11652,9 @@ src/ghosting/libmesh_oprof_la-default_coupling.lo: \ src/ghosting/libmesh_oprof_la-ghost_point_neighbors.lo: \ src/ghosting/$(am__dirstamp) \ src/ghosting/$(DEPDIR)/$(am__dirstamp) +src/ghosting/libmesh_oprof_la-map_based_disconnected_ghosting.lo: \ + src/ghosting/$(am__dirstamp) \ + src/ghosting/$(DEPDIR)/$(am__dirstamp) src/ghosting/libmesh_oprof_la-non_manifold_coupling.lo: \ src/ghosting/$(am__dirstamp) \ src/ghosting/$(DEPDIR)/$(am__dirstamp) @@ -12802,6 +12827,9 @@ src/ghosting/libmesh_opt_la-default_coupling.lo: \ src/ghosting/libmesh_opt_la-ghost_point_neighbors.lo: \ src/ghosting/$(am__dirstamp) \ src/ghosting/$(DEPDIR)/$(am__dirstamp) +src/ghosting/libmesh_opt_la-map_based_disconnected_ghosting.lo: \ + src/ghosting/$(am__dirstamp) \ + src/ghosting/$(DEPDIR)/$(am__dirstamp) src/ghosting/libmesh_opt_la-non_manifold_coupling.lo: \ src/ghosting/$(am__dirstamp) \ src/ghosting/$(DEPDIR)/$(am__dirstamp) @@ -13971,6 +13999,9 @@ src/ghosting/libmesh_prof_la-default_coupling.lo: \ src/ghosting/libmesh_prof_la-ghost_point_neighbors.lo: \ src/ghosting/$(am__dirstamp) \ src/ghosting/$(DEPDIR)/$(am__dirstamp) +src/ghosting/libmesh_prof_la-map_based_disconnected_ghosting.lo: \ + src/ghosting/$(am__dirstamp) \ + src/ghosting/$(DEPDIR)/$(am__dirstamp) src/ghosting/libmesh_prof_la-non_manifold_coupling.lo: \ src/ghosting/$(am__dirstamp) \ src/ghosting/$(DEPDIR)/$(am__dirstamp) @@ -16250,30 +16281,35 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@src/geom/$(DEPDIR)/libmesh_prof_la-surface.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_dbg_la-default_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_dbg_la-ghost_point_neighbors.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_dbg_la-map_based_disconnected_ghosting.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_dbg_la-non_manifold_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_dbg_la-overlap_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_dbg_la-point_neighbor_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_dbg_la-sibling_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_devel_la-default_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_devel_la-ghost_point_neighbors.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_devel_la-map_based_disconnected_ghosting.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_devel_la-non_manifold_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_devel_la-overlap_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_devel_la-point_neighbor_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_devel_la-sibling_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_oprof_la-default_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_oprof_la-ghost_point_neighbors.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_oprof_la-map_based_disconnected_ghosting.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_oprof_la-non_manifold_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_oprof_la-overlap_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_oprof_la-point_neighbor_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_oprof_la-sibling_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_opt_la-default_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_opt_la-ghost_point_neighbors.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_opt_la-map_based_disconnected_ghosting.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_opt_la-non_manifold_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_opt_la-overlap_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_opt_la-point_neighbor_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_opt_la-sibling_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_prof_la-default_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_prof_la-ghost_point_neighbors.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_prof_la-map_based_disconnected_ghosting.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_prof_la-non_manifold_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_prof_la-overlap_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_prof_la-point_neighbor_coupling.Plo@am__quote@ # am--include-marker @@ -19048,6 +19084,13 @@ src/ghosting/libmesh_dbg_la-ghost_point_neighbors.lo: src/ghosting/ghost_point_n @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -c -o src/ghosting/libmesh_dbg_la-ghost_point_neighbors.lo `test -f 'src/ghosting/ghost_point_neighbors.C' || echo '$(srcdir)/'`src/ghosting/ghost_point_neighbors.C +src/ghosting/libmesh_dbg_la-map_based_disconnected_ghosting.lo: src/ghosting/map_based_disconnected_ghosting.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -MT src/ghosting/libmesh_dbg_la-map_based_disconnected_ghosting.lo -MD -MP -MF src/ghosting/$(DEPDIR)/libmesh_dbg_la-map_based_disconnected_ghosting.Tpo -c -o src/ghosting/libmesh_dbg_la-map_based_disconnected_ghosting.lo `test -f 'src/ghosting/map_based_disconnected_ghosting.C' || echo '$(srcdir)/'`src/ghosting/map_based_disconnected_ghosting.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/ghosting/$(DEPDIR)/libmesh_dbg_la-map_based_disconnected_ghosting.Tpo src/ghosting/$(DEPDIR)/libmesh_dbg_la-map_based_disconnected_ghosting.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/ghosting/map_based_disconnected_ghosting.C' object='src/ghosting/libmesh_dbg_la-map_based_disconnected_ghosting.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -c -o src/ghosting/libmesh_dbg_la-map_based_disconnected_ghosting.lo `test -f 'src/ghosting/map_based_disconnected_ghosting.C' || echo '$(srcdir)/'`src/ghosting/map_based_disconnected_ghosting.C + src/ghosting/libmesh_dbg_la-non_manifold_coupling.lo: src/ghosting/non_manifold_coupling.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -MT src/ghosting/libmesh_dbg_la-non_manifold_coupling.lo -MD -MP -MF src/ghosting/$(DEPDIR)/libmesh_dbg_la-non_manifold_coupling.Tpo -c -o src/ghosting/libmesh_dbg_la-non_manifold_coupling.lo `test -f 'src/ghosting/non_manifold_coupling.C' || echo '$(srcdir)/'`src/ghosting/non_manifold_coupling.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/ghosting/$(DEPDIR)/libmesh_dbg_la-non_manifold_coupling.Tpo src/ghosting/$(DEPDIR)/libmesh_dbg_la-non_manifold_coupling.Plo @@ -22373,6 +22416,13 @@ src/ghosting/libmesh_devel_la-ghost_point_neighbors.lo: src/ghosting/ghost_point @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -c -o src/ghosting/libmesh_devel_la-ghost_point_neighbors.lo `test -f 'src/ghosting/ghost_point_neighbors.C' || echo '$(srcdir)/'`src/ghosting/ghost_point_neighbors.C +src/ghosting/libmesh_devel_la-map_based_disconnected_ghosting.lo: src/ghosting/map_based_disconnected_ghosting.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -MT src/ghosting/libmesh_devel_la-map_based_disconnected_ghosting.lo -MD -MP -MF src/ghosting/$(DEPDIR)/libmesh_devel_la-map_based_disconnected_ghosting.Tpo -c -o src/ghosting/libmesh_devel_la-map_based_disconnected_ghosting.lo `test -f 'src/ghosting/map_based_disconnected_ghosting.C' || echo '$(srcdir)/'`src/ghosting/map_based_disconnected_ghosting.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/ghosting/$(DEPDIR)/libmesh_devel_la-map_based_disconnected_ghosting.Tpo src/ghosting/$(DEPDIR)/libmesh_devel_la-map_based_disconnected_ghosting.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/ghosting/map_based_disconnected_ghosting.C' object='src/ghosting/libmesh_devel_la-map_based_disconnected_ghosting.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -c -o src/ghosting/libmesh_devel_la-map_based_disconnected_ghosting.lo `test -f 'src/ghosting/map_based_disconnected_ghosting.C' || echo '$(srcdir)/'`src/ghosting/map_based_disconnected_ghosting.C + src/ghosting/libmesh_devel_la-non_manifold_coupling.lo: src/ghosting/non_manifold_coupling.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -MT src/ghosting/libmesh_devel_la-non_manifold_coupling.lo -MD -MP -MF src/ghosting/$(DEPDIR)/libmesh_devel_la-non_manifold_coupling.Tpo -c -o src/ghosting/libmesh_devel_la-non_manifold_coupling.lo `test -f 'src/ghosting/non_manifold_coupling.C' || echo '$(srcdir)/'`src/ghosting/non_manifold_coupling.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/ghosting/$(DEPDIR)/libmesh_devel_la-non_manifold_coupling.Tpo src/ghosting/$(DEPDIR)/libmesh_devel_la-non_manifold_coupling.Plo @@ -25698,6 +25748,13 @@ src/ghosting/libmesh_oprof_la-ghost_point_neighbors.lo: src/ghosting/ghost_point @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/ghosting/libmesh_oprof_la-ghost_point_neighbors.lo `test -f 'src/ghosting/ghost_point_neighbors.C' || echo '$(srcdir)/'`src/ghosting/ghost_point_neighbors.C +src/ghosting/libmesh_oprof_la-map_based_disconnected_ghosting.lo: src/ghosting/map_based_disconnected_ghosting.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -MT src/ghosting/libmesh_oprof_la-map_based_disconnected_ghosting.lo -MD -MP -MF src/ghosting/$(DEPDIR)/libmesh_oprof_la-map_based_disconnected_ghosting.Tpo -c -o src/ghosting/libmesh_oprof_la-map_based_disconnected_ghosting.lo `test -f 'src/ghosting/map_based_disconnected_ghosting.C' || echo '$(srcdir)/'`src/ghosting/map_based_disconnected_ghosting.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/ghosting/$(DEPDIR)/libmesh_oprof_la-map_based_disconnected_ghosting.Tpo src/ghosting/$(DEPDIR)/libmesh_oprof_la-map_based_disconnected_ghosting.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/ghosting/map_based_disconnected_ghosting.C' object='src/ghosting/libmesh_oprof_la-map_based_disconnected_ghosting.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/ghosting/libmesh_oprof_la-map_based_disconnected_ghosting.lo `test -f 'src/ghosting/map_based_disconnected_ghosting.C' || echo '$(srcdir)/'`src/ghosting/map_based_disconnected_ghosting.C + src/ghosting/libmesh_oprof_la-non_manifold_coupling.lo: src/ghosting/non_manifold_coupling.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -MT src/ghosting/libmesh_oprof_la-non_manifold_coupling.lo -MD -MP -MF src/ghosting/$(DEPDIR)/libmesh_oprof_la-non_manifold_coupling.Tpo -c -o src/ghosting/libmesh_oprof_la-non_manifold_coupling.lo `test -f 'src/ghosting/non_manifold_coupling.C' || echo '$(srcdir)/'`src/ghosting/non_manifold_coupling.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/ghosting/$(DEPDIR)/libmesh_oprof_la-non_manifold_coupling.Tpo src/ghosting/$(DEPDIR)/libmesh_oprof_la-non_manifold_coupling.Plo @@ -29023,6 +29080,13 @@ src/ghosting/libmesh_opt_la-ghost_point_neighbors.lo: src/ghosting/ghost_point_n @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -c -o src/ghosting/libmesh_opt_la-ghost_point_neighbors.lo `test -f 'src/ghosting/ghost_point_neighbors.C' || echo '$(srcdir)/'`src/ghosting/ghost_point_neighbors.C +src/ghosting/libmesh_opt_la-map_based_disconnected_ghosting.lo: src/ghosting/map_based_disconnected_ghosting.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -MT src/ghosting/libmesh_opt_la-map_based_disconnected_ghosting.lo -MD -MP -MF src/ghosting/$(DEPDIR)/libmesh_opt_la-map_based_disconnected_ghosting.Tpo -c -o src/ghosting/libmesh_opt_la-map_based_disconnected_ghosting.lo `test -f 'src/ghosting/map_based_disconnected_ghosting.C' || echo '$(srcdir)/'`src/ghosting/map_based_disconnected_ghosting.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/ghosting/$(DEPDIR)/libmesh_opt_la-map_based_disconnected_ghosting.Tpo src/ghosting/$(DEPDIR)/libmesh_opt_la-map_based_disconnected_ghosting.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/ghosting/map_based_disconnected_ghosting.C' object='src/ghosting/libmesh_opt_la-map_based_disconnected_ghosting.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -c -o src/ghosting/libmesh_opt_la-map_based_disconnected_ghosting.lo `test -f 'src/ghosting/map_based_disconnected_ghosting.C' || echo '$(srcdir)/'`src/ghosting/map_based_disconnected_ghosting.C + src/ghosting/libmesh_opt_la-non_manifold_coupling.lo: src/ghosting/non_manifold_coupling.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -MT src/ghosting/libmesh_opt_la-non_manifold_coupling.lo -MD -MP -MF src/ghosting/$(DEPDIR)/libmesh_opt_la-non_manifold_coupling.Tpo -c -o src/ghosting/libmesh_opt_la-non_manifold_coupling.lo `test -f 'src/ghosting/non_manifold_coupling.C' || echo '$(srcdir)/'`src/ghosting/non_manifold_coupling.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/ghosting/$(DEPDIR)/libmesh_opt_la-non_manifold_coupling.Tpo src/ghosting/$(DEPDIR)/libmesh_opt_la-non_manifold_coupling.Plo @@ -32348,6 +32412,13 @@ src/ghosting/libmesh_prof_la-ghost_point_neighbors.lo: src/ghosting/ghost_point_ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/ghosting/libmesh_prof_la-ghost_point_neighbors.lo `test -f 'src/ghosting/ghost_point_neighbors.C' || echo '$(srcdir)/'`src/ghosting/ghost_point_neighbors.C +src/ghosting/libmesh_prof_la-map_based_disconnected_ghosting.lo: src/ghosting/map_based_disconnected_ghosting.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -MT src/ghosting/libmesh_prof_la-map_based_disconnected_ghosting.lo -MD -MP -MF src/ghosting/$(DEPDIR)/libmesh_prof_la-map_based_disconnected_ghosting.Tpo -c -o src/ghosting/libmesh_prof_la-map_based_disconnected_ghosting.lo `test -f 'src/ghosting/map_based_disconnected_ghosting.C' || echo '$(srcdir)/'`src/ghosting/map_based_disconnected_ghosting.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/ghosting/$(DEPDIR)/libmesh_prof_la-map_based_disconnected_ghosting.Tpo src/ghosting/$(DEPDIR)/libmesh_prof_la-map_based_disconnected_ghosting.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/ghosting/map_based_disconnected_ghosting.C' object='src/ghosting/libmesh_prof_la-map_based_disconnected_ghosting.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/ghosting/libmesh_prof_la-map_based_disconnected_ghosting.lo `test -f 'src/ghosting/map_based_disconnected_ghosting.C' || echo '$(srcdir)/'`src/ghosting/map_based_disconnected_ghosting.C + src/ghosting/libmesh_prof_la-non_manifold_coupling.lo: src/ghosting/non_manifold_coupling.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -MT src/ghosting/libmesh_prof_la-non_manifold_coupling.lo -MD -MP -MF src/ghosting/$(DEPDIR)/libmesh_prof_la-non_manifold_coupling.Tpo -c -o src/ghosting/libmesh_prof_la-non_manifold_coupling.lo `test -f 'src/ghosting/non_manifold_coupling.C' || echo '$(srcdir)/'`src/ghosting/non_manifold_coupling.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/ghosting/$(DEPDIR)/libmesh_prof_la-non_manifold_coupling.Tpo src/ghosting/$(DEPDIR)/libmesh_prof_la-non_manifold_coupling.Plo @@ -36665,30 +36736,35 @@ distclean: distclean-recursive -rm -f src/geom/$(DEPDIR)/libmesh_prof_la-surface.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-default_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-ghost_point_neighbors.Plo + -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-map_based_disconnected_ghosting.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-non_manifold_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-overlap_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-point_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-sibling_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-default_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-ghost_point_neighbors.Plo + -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-map_based_disconnected_ghosting.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-non_manifold_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-overlap_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-point_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-sibling_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-default_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-ghost_point_neighbors.Plo + -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-map_based_disconnected_ghosting.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-non_manifold_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-overlap_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-point_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-sibling_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-default_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-ghost_point_neighbors.Plo + -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-map_based_disconnected_ghosting.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-non_manifold_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-overlap_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-point_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-sibling_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_prof_la-default_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_prof_la-ghost_point_neighbors.Plo + -rm -f src/ghosting/$(DEPDIR)/libmesh_prof_la-map_based_disconnected_ghosting.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_prof_la-non_manifold_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_prof_la-overlap_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_prof_la-point_neighbor_coupling.Plo @@ -39151,30 +39227,35 @@ maintainer-clean: maintainer-clean-recursive -rm -f src/geom/$(DEPDIR)/libmesh_prof_la-surface.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-default_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-ghost_point_neighbors.Plo + -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-map_based_disconnected_ghosting.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-non_manifold_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-overlap_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-point_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-sibling_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-default_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-ghost_point_neighbors.Plo + -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-map_based_disconnected_ghosting.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-non_manifold_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-overlap_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-point_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-sibling_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-default_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-ghost_point_neighbors.Plo + -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-map_based_disconnected_ghosting.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-non_manifold_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-overlap_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-point_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-sibling_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-default_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-ghost_point_neighbors.Plo + -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-map_based_disconnected_ghosting.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-non_manifold_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-overlap_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-point_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-sibling_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_prof_la-default_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_prof_la-ghost_point_neighbors.Plo + -rm -f src/ghosting/$(DEPDIR)/libmesh_prof_la-map_based_disconnected_ghosting.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_prof_la-non_manifold_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_prof_la-overlap_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_prof_la-point_neighbor_coupling.Plo diff --git a/build-aux/ltmain.sh b/build-aux/ltmain.sh index 3e6a3db3a5a..5a2242fb24f 100644 --- a/build-aux/ltmain.sh +++ b/build-aux/ltmain.sh @@ -7648,6 +7648,11 @@ func_mode_link () arg=$func_stripname_result ;; + -Wl,--as-needed) + deplibs="$deplibs $arg" + continue + ;; + -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result @@ -7990,6 +7995,7 @@ func_mode_link () case $linkmode in lib) + as_needed_flag= passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in @@ -8001,6 +8007,7 @@ func_mode_link () done ;; prog) + as_needed_flag= compile_deplibs= finalize_deplibs= alldeplibs=false @@ -8070,6 +8077,15 @@ func_mode_link () lib= found=false case $deplib in + -Wl,--as-needed) + if test prog,link = "$linkmode,$pass" || + test lib,link = "$linkmode,$pass"; then + as_needed_flag="$deplib " + else + deplibs="$deplib $deplibs" + fi + continue + ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-fopenmp=*|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test prog,link = "$linkmode,$pass"; then @@ -10395,6 +10411,13 @@ func_mode_link () test "X$libobjs" = "X " && libobjs= fi + # A bit hacky. I had wanted to add \$as_needed_flag to archive_cmds instead, but that + # comes from libtool.m4 which is part of the project being built. This should put it + # in the right place though. + if test lib,link = "$linkmode,$pass" && test -n "$as_needed_flag"; then + libobjs=$as_needed_flag$libobjs + fi + save_ifs=$IFS; IFS='~' for cmd in $cmds; do IFS=$sp$nl @@ -10627,8 +10650,8 @@ func_mode_link () compile_deplibs=$new_libs - func_append compile_command " $compile_deplibs" - func_append finalize_command " $finalize_deplibs" + func_append compile_command " $as_needed_flag $compile_deplibs" + func_append finalize_command " $as_needed_flag $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. diff --git a/include/Makefile.in b/include/Makefile.in index 9f2845d9640..a5604645ca8 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -780,6 +780,7 @@ include_HEADERS = \ geom/surface.h \ ghosting/default_coupling.h \ ghosting/ghost_point_neighbors.h \ + ghosting/map_based_disconnected_ghosting.h \ ghosting/ghosting_functor.h \ ghosting/non_manifold_coupling.h \ ghosting/overlap_coupling.h \ @@ -1118,7 +1119,7 @@ include_HEADERS = \ utils/utility.h \ utils/vectormap.h \ utils/win_gettimeofday.h \ - utils/xdr_cxx.h + utils/xdr_cxx.h # definition of include_HEADERS - get from auto-maintained list diff --git a/include/ghosting/map_based_disconnected_ghosting.h b/include/ghosting/map_based_disconnected_ghosting.h new file mode 100644 index 00000000000..ca7c9a3373e --- /dev/null +++ b/include/ghosting/map_based_disconnected_ghosting.h @@ -0,0 +1,63 @@ +// libMesh Includes +#include "libmesh/ghosting_functor.h" // base class + +// C++ includes +#include // for std::unique_ptr +#include // for std::map + +namespace libMesh +{ + +// Forward declarations +class MeshBase; + +/** + * @brief A GhostingFunctor subclass that uses an externally-provided map + * to define non-manifold neighbor relationships and request mesh-level ghosting. + * + * This functor is designed to handle manually defined disconnected neighbor + * relationships (e.g., those created by add_disconnected_boundaries()), + * ensuring that remote neighbor elements are properly ghosted in parallel. + */ +class MapBasedDisconnectedGhosting : public GhostingFunctor +{ +public: + + // Map from (local element ID, local side number) to neighbor element ID. + using DisconnectedMap = + std::map; + + /** + * @brief Constructor. + * Requires the mesh and a reference to the neighbor relationship map. + * Note: The lifetime of the map must exceed the lifetime of this functor. + */ + MapBasedDisconnectedGhosting(MeshBase & mesh, + const DisconnectedMap & map); + + /** + * @brief Virtual destructor. + */ + virtual ~MapBasedDisconnectedGhosting() = default; + + /** + * @brief clone() calls the copy constructor. Required by libMesh. + */ + virtual std::unique_ptr clone () const override; + + /** + * @brief Ghosting operator. + */ + virtual void operator() (const MeshBase::const_element_iterator & range_begin, + const MeshBase::const_element_iterator & range_end, + processor_id_type p, + map_type & coupled_elements) override; + +private: + /** + * @brief A reference to the external map defining neighbor relationships. + */ + const DisconnectedMap & _map; +}; + +} // namespace libMesh diff --git a/include/include_HEADERS b/include/include_HEADERS index 38c4a908fb0..e0f4a87805a 100644 --- a/include/include_HEADERS +++ b/include/include_HEADERS @@ -176,6 +176,7 @@ include_HEADERS = \ geom/surface.h \ ghosting/default_coupling.h \ ghosting/ghost_point_neighbors.h \ + ghosting/map_based_disconnected_ghosting.h \ ghosting/ghosting_functor.h \ ghosting/non_manifold_coupling.h \ ghosting/overlap_coupling.h \ @@ -514,4 +515,4 @@ include_HEADERS = \ utils/utility.h \ utils/vectormap.h \ utils/win_gettimeofday.h \ - utils/xdr_cxx.h + utils/xdr_cxx.h diff --git a/include/libmesh/Makefile.am b/include/libmesh/Makefile.am index eb33152f6cf..86451b60364 100644 --- a/include/libmesh/Makefile.am +++ b/include/libmesh/Makefile.am @@ -166,6 +166,7 @@ BUILT_SOURCES = \ surface.h \ default_coupling.h \ ghost_point_neighbors.h \ + map_based_disconnected_ghosting.h \ ghosting_functor.h \ non_manifold_coupling.h \ overlap_coupling.h \ @@ -1097,6 +1098,9 @@ default_coupling.h: $(top_srcdir)/include/ghosting/default_coupling.h ghost_point_neighbors.h: $(top_srcdir)/include/ghosting/ghost_point_neighbors.h $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ +map_based_disconnected_ghosting.h: $(top_srcdir)/include/ghosting/map_based_disconnected_ghosting.h + $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ + ghosting_functor.h: $(top_srcdir)/include/ghosting/ghosting_functor.h $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ diff --git a/include/libmesh/Makefile.in b/include/libmesh/Makefile.in index ee18a29773e..0c9afb3e9d1 100644 --- a/include/libmesh/Makefile.in +++ b/include/libmesh/Makefile.in @@ -575,7 +575,8 @@ BUILT_SOURCES = dirichlet_boundaries.h dof_map.h dof_map_base.h \ face_tri3_subdivision.h face_tri6.h face_tri7.h node.h \ node_elem.h node_range.h plane.h point.h reference_elem.h \ remote_elem.h sphere.h stored_range.h surface.h \ - default_coupling.h ghost_point_neighbors.h ghosting_functor.h \ + default_coupling.h ghost_point_neighbors.h \ + map_based_disconnected_ghosting.h ghosting_functor.h \ non_manifold_coupling.h overlap_coupling.h \ point_neighbor_coupling.h sibling_coupling.h abaqus_io.h \ boundary_info.h boundary_mesh.h checkpoint_io.h \ @@ -1431,6 +1432,9 @@ default_coupling.h: $(top_srcdir)/include/ghosting/default_coupling.h ghost_point_neighbors.h: $(top_srcdir)/include/ghosting/ghost_point_neighbors.h $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ +map_based_disconnected_ghosting.h: $(top_srcdir)/include/ghosting/map_based_disconnected_ghosting.h + $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ + ghosting_functor.h: $(top_srcdir)/include/ghosting/ghosting_functor.h $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ diff --git a/src/ghosting/map_based_disconnected_ghosting.C b/src/ghosting/map_based_disconnected_ghosting.C new file mode 100644 index 00000000000..1ddb17035cb --- /dev/null +++ b/src/ghosting/map_based_disconnected_ghosting.C @@ -0,0 +1,61 @@ +#include "libmesh/map_based_disconnected_ghosting.h" + +#include "libmesh/mesh_base.h" +#include "libmesh/elem.h" +#include "libmesh/simple_range.h" + +#include + +namespace libMesh +{ + +MapBasedDisconnectedGhosting:: +MapBasedDisconnectedGhosting(MeshBase & mesh, + const DisconnectedMap & map) : + GhostingFunctor(mesh), + _map(map) +{ +} + +std::unique_ptr +MapBasedDisconnectedGhosting::clone () const +{ + // Create a new unique_ptr by copying this object + return std::make_unique(*this); +} + +void +MapBasedDisconnectedGhosting::operator() ( + const MeshBase::const_element_iterator & range_begin, + const MeshBase::const_element_iterator & range_end, + processor_id_type p, + map_type & coupled_elements) +{ + CouplingMatrix * nullcm = nullptr; + + for (const auto & elem : as_range(range_begin, range_end)) + { + // Add the element from the input range (if not local) + if (elem->processor_id() != p) + coupled_elements.emplace(elem, nullcm); + + // Look up this element's neighbor in the map + auto it = _map.find(elem->id()); + if (it == _map.end()) + continue; + + // Get the neighbor's ID + const dof_id_type neighbor_id = it->second; + + const Elem * neighbor_ptr = _mesh->query_elem_ptr(neighbor_id); + + // If the neighbor pointer is valid (meaning it's local or ghosted) + // AND it's not on processor 'p', add it to the couplings. + if (neighbor_ptr && neighbor_ptr->processor_id() != p) + { + coupled_elements.emplace(neighbor_ptr, nullcm); + } + } +} + +} // namespace libMesh diff --git a/src/libmesh_SOURCES b/src/libmesh_SOURCES index 0b975a5eb89..9da6a5204e0 100644 --- a/src/libmesh_SOURCES +++ b/src/libmesh_SOURCES @@ -193,6 +193,7 @@ libmesh_SOURCES = \ src/geom/surface.C \ src/ghosting/default_coupling.C \ src/ghosting/ghost_point_neighbors.C \ + src/ghosting/map_based_disconnected_ghosting.C \ src/ghosting/non_manifold_coupling.C \ src/ghosting/overlap_coupling.C \ src/ghosting/point_neighbor_coupling.C \ @@ -475,4 +476,4 @@ libmesh_SOURCES = \ src/utils/tree.C \ src/utils/tree_node.C \ src/utils/utility.C \ - src/utils/xdr_cxx.C + src/utils/xdr_cxx.C diff --git a/tests/systems/disconnected_neighbor_test.C b/tests/systems/disconnected_neighbor_test.C index b1c0937523a..b993440f463 100644 --- a/tests/systems/disconnected_neighbor_test.C +++ b/tests/systems/disconnected_neighbor_test.C @@ -15,6 +15,8 @@ #include "test_comm.h" #include "libmesh_cppunit.h" +#include + using namespace libMesh; static const Real b = 1.0; @@ -263,6 +265,17 @@ private: // And, in `prepare_for_use()`, libMesh will set up the disconnected neighbor relationships. mesh.add_disconnected_boundaries(interface_left_id, interface_right_id, RealVectorValue(0.0, 0.0, 0.0)); + + // new, map-based ghosting functor + MapBasedDisconnectedGhosting::DisconnectedMap disconnected_map; + // Elem 0 connects to Elem 1 + disconnected_map[0] = 1; + // Elem 1 connects to Elem 0 + disconnected_map[1] = 0; + auto map_ghosting = + std::make_shared(mesh, disconnected_map); + mesh.add_ghosting_functor(map_ghosting); + // libMesh shouldn't renumber, or our based-on-initial-id // assertions later may fail. mesh.allow_renumbering(false); From fc8eea167556d2f6003a1369b40a623d05274715 Mon Sep 17 00:00:00 2001 From: Cheng-Hau Yang Date: Fri, 24 Oct 2025 17:36:21 -0500 Subject: [PATCH 09/26] [WIP] Set GMRES/IDENTITY solver in DisconnectedNeighborTest The DisconnectedNeighborTest::testTempJump fails in certain CI environments (e.g., 'Test No AMR' recipe), potentially due to issues with the default solver/preconditioner selection, numerical errors (0 vs 0.05), or SEGVs observed in logs. To attempt to bypass these issues and diagnose the failure, this commit explicitly sets the linear solver to GMRES and no preconditioner. --- tests/systems/disconnected_neighbor_test.C | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/tests/systems/disconnected_neighbor_test.C b/tests/systems/disconnected_neighbor_test.C index b993440f463..e6f0ad80077 100644 --- a/tests/systems/disconnected_neighbor_test.C +++ b/tests/systems/disconnected_neighbor_test.C @@ -11,6 +11,9 @@ #include #include #include +#include +#include +#include #include "test_comm.h" #include "libmesh_cppunit.h" @@ -187,14 +190,13 @@ void assemble_temperature_jump(EquationSystems &es, class DisconnectedNeighborTest : public CppUnit::TestCase { public: LIBMESH_CPPUNIT_TEST_SUITE( DisconnectedNeighborTest ); -#ifdef LIBMESH_HAVE_SOLVER +#if defined(LIBMESH_HAVE_SOLVER) CPPUNIT_TEST( testTempJump ); #endif CPPUNIT_TEST_SUITE_END(); private: -#ifdef LIBMESH_HAVE_SOLVER void testTempJump() { Mesh mesh(*TestCommWorld, 2); @@ -334,6 +336,9 @@ private: // Without this, PETSc may report "New nonzero at (a,b) caused a malloc." sys.get_dof_map().set_implicit_neighbor_dofs(true); + sys.get_linear_solver()->set_solver_type(GMRES); + sys.get_linear_solver()->set_preconditioner_type(IDENTITY_PRECOND); + es.init(); sys.solve(); @@ -348,7 +353,6 @@ private: LIBMESH_ASSERT_NUMBERS_EQUAL(exact, approx, 1e-2); } } -#endif }; CPPUNIT_TEST_SUITE_REGISTRATION( DisconnectedNeighborTest ); From 2e7caa9cebb80fd14464f83a0ca87d575f6a4f02 Mon Sep 17 00:00:00 2001 From: Cheng-Hau Yang Date: Mon, 27 Oct 2025 14:56:58 -0500 Subject: [PATCH 10/26] Support interface BC lookup on disconnected internal boundaries Introduce `include_internal_boundary` switch to `side_with_boundary_id()` so we can locate boundaries even when a neighbor exists (e.g. manually disconnected interfaces). This fixes interface-side lookup in the temperature jump CZM-style test without requiring AMR fallback. Updated the test to explicitly use include_internal_boundary=true for interface IDs. --- include/mesh/boundary_info.h | 12 +++++++++++- src/mesh/boundary_info.C | 5 +++-- tests/systems/disconnected_neighbor_test.C | 21 ++++++++++++--------- 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/include/mesh/boundary_info.h b/include/mesh/boundary_info.h index e8dcf7e2a35..a414658be66 100644 --- a/include/mesh/boundary_info.h +++ b/include/mesh/boundary_info.h @@ -616,12 +616,22 @@ class BoundaryInfo : public ParallelObject /** * \returns A side of element \p elem whose associated boundary id is * \p boundary_id if such a side exists, and \p invalid_uint otherwise. + * \p include_internal_boundary + * If true, sides on internal logical boundaries are also considered. + * If false (default), only sides on the geometric boundary + * (i.e. sides without a valid neighbor element) are inspected. + * + * Setting this to true is useful for intentionally disconnected + * interfaces (e.g. cohesive zone interfaces) where + * a neighboring element exists but the side should still be treated + * as a boundary for enforcement of interface conditions. * * \note If multiple sides of \p elem have the same id, only the lowest numbered * such side is returned. */ unsigned int side_with_boundary_id(const Elem * const elem, - const boundary_id_type boundary_id) const; + const boundary_id_type boundary_id, + bool include_internal_boundary = false) const; /** * \returns All sides of element \p elem whose associated boundary id is diff --git a/src/mesh/boundary_info.C b/src/mesh/boundary_info.C index 5126639fb34..2176fc88805 100644 --- a/src/mesh/boundary_info.C +++ b/src/mesh/boundary_info.C @@ -2298,7 +2298,8 @@ void BoundaryInfo::renumber_node_id (boundary_id_type old_id, unsigned int BoundaryInfo::side_with_boundary_id(const Elem * const elem, - const boundary_id_type boundary_id_in) const + const boundary_id_type boundary_id_in, + bool include_internal_boundary) const { const Elem * searched_elem = elem; @@ -2322,7 +2323,7 @@ unsigned int BoundaryInfo::side_with_boundary_id(const Elem * const elem, { // If we're on this external boundary then we share this // external boundary id - if (elem->neighbor_ptr(side) == nullptr) + if (elem->neighbor_ptr(side) == nullptr || include_internal_boundary) return side; // If we're on an internal boundary then we need to be sure diff --git a/tests/systems/disconnected_neighbor_test.C b/tests/systems/disconnected_neighbor_test.C index e6f0ad80077..a10cec84747 100644 --- a/tests/systems/disconnected_neighbor_test.C +++ b/tests/systems/disconnected_neighbor_test.C @@ -106,7 +106,7 @@ void assemble_temperature_jump(EquationSystems &es, Ke(i, j) += conductance * JxW_vol[qp] * (dphi_vol[i][qp] * dphi_vol[j][qp]); // --- Left-side interface --- - unsigned int side = boundary.side_with_boundary_id(elem, interface_left_id); + unsigned int side = boundary.side_with_boundary_id(elem, interface_left_id, true /*include_internal_boundary*/); if (side != libMesh::invalid_uint) { fe_face_L->reinit(elem, side); @@ -142,7 +142,7 @@ void assemble_temperature_jump(EquationSystems &es, } // --- Right-side interface --- - side = boundary.side_with_boundary_id(elem, interface_right_id); + side = boundary.side_with_boundary_id(elem, interface_right_id, true /*include_internal_boundary*/); if (side != libMesh::invalid_uint) { fe_face_R->reinit(elem, side); @@ -345,13 +345,16 @@ private: // ExodusII_IO(mesh).write_equation_systems("temperature_jump.e", es); for (Real x=0.; x<=1.; x+=0.05) - for (Real y=0.; y<=1.; y+=0.05) - { - Point p(x,y); - const Number exact = heat_exact(p,params,"",""); - const Number approx = sys.point_value(0,p); - LIBMESH_ASSERT_NUMBERS_EQUAL(exact, approx, 1e-2); - } + { + if (std::abs(x - 0.5) < 1e-12) continue; // skip interface + for (Real y=0.; y<=1.; y+=0.05) + { + Point p(x,y); + const Number exact = heat_exact(p,params,"",""); + const Number approx = sys.point_value(0,p); + LIBMESH_ASSERT_NUMBERS_EQUAL(exact, approx, 1e-2); + } + } } }; From 2eac3eab5ab9bf299018b99db0448393d957fbd5 Mon Sep 17 00:00:00 2001 From: Cheng-Hau Yang Date: Mon, 27 Oct 2025 16:52:44 -0500 Subject: [PATCH 11/26] Map-based disconnected neighbor ghosting base on ptr + fixing internal interface support This change introduces correct handling of intentionally disconnected interfaces (e.g., CZM or jump conditions) on distributed meshes: - Replace ID-based lookup in `MapBasedDisconnectedGhosting` with direct `Elem*` neighbor mapping to avoid invalid lookups post-renumbering. - Register the disconnected ghosting functor in `find_neighbors()` so ghosting stays consistent with the neighbor graph established by `prepare_for_use()`. - Extend `BoundaryInfo::side_with_boundary_id()` to optionally allow internal/logical boundaries when explicitly requested by the caller. - Fix face FE assembly under `--disable-deprecated` by explicitly requesting shape and map computations before reinit() calls. - Remove older per-test ghosting setup now handled by the mesh. --- .../map_based_disconnected_ghosting.h | 4 ++-- .../map_based_disconnected_ghosting.C | 6 ++---- src/mesh/boundary_info.C | 14 +++++++------ src/mesh/unstructured_mesh.C | 13 ++++++++++-- tests/systems/disconnected_neighbor_test.C | 21 +++++++++---------- 5 files changed, 33 insertions(+), 25 deletions(-) diff --git a/include/ghosting/map_based_disconnected_ghosting.h b/include/ghosting/map_based_disconnected_ghosting.h index ca7c9a3373e..cc950ac5948 100644 --- a/include/ghosting/map_based_disconnected_ghosting.h +++ b/include/ghosting/map_based_disconnected_ghosting.h @@ -23,9 +23,9 @@ class MapBasedDisconnectedGhosting : public GhostingFunctor { public: - // Map from (local element ID, local side number) to neighbor element ID. + // Map from (local element ptr) to neighbor element ptr. using DisconnectedMap = - std::map; + std::unordered_map; /** * @brief Constructor. diff --git a/src/ghosting/map_based_disconnected_ghosting.C b/src/ghosting/map_based_disconnected_ghosting.C index 1ddb17035cb..1f87ddbbda7 100644 --- a/src/ghosting/map_based_disconnected_ghosting.C +++ b/src/ghosting/map_based_disconnected_ghosting.C @@ -40,14 +40,12 @@ MapBasedDisconnectedGhosting::operator() ( coupled_elements.emplace(elem, nullcm); // Look up this element's neighbor in the map - auto it = _map.find(elem->id()); + auto it = _map.find(elem); if (it == _map.end()) continue; // Get the neighbor's ID - const dof_id_type neighbor_id = it->second; - - const Elem * neighbor_ptr = _mesh->query_elem_ptr(neighbor_id); + const Elem * neighbor_ptr = it->second; // If the neighbor pointer is valid (meaning it's local or ghosted) // AND it's not on processor 'p', add it to the couplings. diff --git a/src/mesh/boundary_info.C b/src/mesh/boundary_info.C index 2176fc88805..3a6660752dc 100644 --- a/src/mesh/boundary_info.C +++ b/src/mesh/boundary_info.C @@ -2323,15 +2323,14 @@ unsigned int BoundaryInfo::side_with_boundary_id(const Elem * const elem, { // If we're on this external boundary then we share this // external boundary id - if (elem->neighbor_ptr(side) == nullptr || include_internal_boundary) + if (elem->neighbor_ptr(side) == nullptr) return side; // If we're on an internal boundary then we need to be sure // it's the same internal boundary as our top_parent - const Elem * p = elem; - + bool aligned_with_parent = false; #ifdef LIBMESH_ENABLE_AMR - + const Elem * p = elem; while (p != nullptr) { const Elem * parent = p->parent(); @@ -2339,9 +2338,12 @@ unsigned int BoundaryInfo::side_with_boundary_id(const Elem * const elem, break; p = parent; } + aligned_with_parent = (p == nullptr); #endif - // We're on that side of our top_parent; return it - if (!p) + // Two valid cases: + // 1. The internal face is geometrically aligned with the parent's boundary side (original behavior) + // 2. The caller explicitly allows logical/internal boundaries (e.g. CZM interfaces) + if (aligned_with_parent || include_internal_boundary) return side; } // Otherwise we need to check if the child's ancestors have something on diff --git a/src/mesh/unstructured_mesh.C b/src/mesh/unstructured_mesh.C index 7b2f1628a41..27051e28256 100644 --- a/src/mesh/unstructured_mesh.C +++ b/src/mesh/unstructured_mesh.C @@ -50,6 +50,7 @@ // for disconnected neighbors #include "libmesh/periodic_boundaries.h" #include "libmesh/periodic_boundary.h" +#include namespace { @@ -1003,6 +1004,7 @@ void UnstructuredMesh::find_neighbors (const bool reset_remote_elements, if (db) { + MapBasedDisconnectedGhosting::DisconnectedMap disconnected_map; // Obtain a point locator std::unique_ptr point_locator = this->sub_point_locator(); @@ -1026,12 +1028,19 @@ void UnstructuredMesh::find_neighbors (const bool reset_remote_elements, if (neigh && neigh != remote_elem && neigh != element) { - element->set_neighbor(ms, this->elem_ptr(neigh->id())); - this->elem_ptr(neigh->id())->set_neighbor(neigh_side, element); + auto neigh_changeable = this->elem_ptr(neigh->id()); + element->set_neighbor(ms, neigh_changeable); + neigh_changeable->set_neighbor(neigh_side, element); + disconnected_map.emplace(element, neigh_changeable); + disconnected_map.emplace(neigh_changeable, element); } } } } + // Now add the ghosting functor to keep these neighbors in sync + auto map_ghosting = + std::make_shared(*this, disconnected_map); + this->add_ghosting_functor(map_ghosting); } #endif // LIBMESH_ENABLE_PERIODIC diff --git a/tests/systems/disconnected_neighbor_test.C b/tests/systems/disconnected_neighbor_test.C index a10cec84747..372321c738b 100644 --- a/tests/systems/disconnected_neighbor_test.C +++ b/tests/systems/disconnected_neighbor_test.C @@ -96,6 +96,8 @@ void assemble_temperature_jump(EquationSystems &es, Fe.zero(); // --- Volume contribution --- + fe->get_dphi(); // sets calculate_dphi = true + fe->get_JxW(); // sets calculate_map = true fe->reinit(elem); const auto &JxW_vol = fe->get_JxW(); const auto &dphi_vol = fe->get_dphi(); @@ -109,6 +111,8 @@ void assemble_temperature_jump(EquationSystems &es, unsigned int side = boundary.side_with_boundary_id(elem, interface_left_id, true /*include_internal_boundary*/); if (side != libMesh::invalid_uint) { + fe_face_L->get_phi(); // sets calculate_phi = true + fe_face_L->get_JxW(); // sets calculate_map = true fe_face_L->reinit(elem, side); const auto &phi_L = fe_face_L->get_phi(); const auto &JxW_face = fe_face_L->get_JxW(); @@ -116,6 +120,8 @@ void assemble_temperature_jump(EquationSystems &es, const Elem *neighbor = elem->neighbor_ptr(side); libmesh_assert(neighbor); unsigned int n_side = neighbor->which_neighbor_am_i(elem); + fe_face_R->get_phi(); + fe_face_R->get_JxW(); fe_face_R->reinit(neighbor, n_side); const auto &phi_R = fe_face_R->get_phi(); @@ -145,6 +151,8 @@ void assemble_temperature_jump(EquationSystems &es, side = boundary.side_with_boundary_id(elem, interface_right_id, true /*include_internal_boundary*/); if (side != libMesh::invalid_uint) { + fe_face_R->get_phi(); // sets calculate_phi = true + fe_face_R->get_JxW(); // sets calculate_map = true fe_face_R->reinit(elem, side); const auto &phi_R = fe_face_R->get_phi(); const auto &JxW_face = fe_face_R->get_JxW(); @@ -152,6 +160,8 @@ void assemble_temperature_jump(EquationSystems &es, const Elem *neighbor = elem->neighbor_ptr(side); libmesh_assert(neighbor); unsigned int n_side = neighbor->which_neighbor_am_i(elem); + fe_face_L->get_phi(); + fe_face_L->get_JxW(); fe_face_L->reinit(neighbor, n_side); const auto &phi_L = fe_face_L->get_phi(); @@ -267,17 +277,6 @@ private: // And, in `prepare_for_use()`, libMesh will set up the disconnected neighbor relationships. mesh.add_disconnected_boundaries(interface_left_id, interface_right_id, RealVectorValue(0.0, 0.0, 0.0)); - - // new, map-based ghosting functor - MapBasedDisconnectedGhosting::DisconnectedMap disconnected_map; - // Elem 0 connects to Elem 1 - disconnected_map[0] = 1; - // Elem 1 connects to Elem 0 - disconnected_map[1] = 0; - auto map_ghosting = - std::make_shared(mesh, disconnected_map); - mesh.add_ghosting_functor(map_ghosting); - // libMesh shouldn't renumber, or our based-on-initial-id // assertions later may fail. mesh.allow_renumbering(false); From 4200244469ce84f87f4c5dc030b2d1969bb755e8 Mon Sep 17 00:00:00 2001 From: Cheng-Hau Yang Date: Tue, 28 Oct 2025 10:59:07 -0500 Subject: [PATCH 12/26] BoundaryInfo: fix internal boundary lookup without AMR Restore previous behavior in `side_with_boundary_id()`. When AMR is disabled, internal boundaries incorrectly returned invalid_uint. Add fallback return for non-external sides. Add `testInternalBoundary()` to verify correct side detection on a QUAD4 mesh. Update `disconnected_neighbor_test` to use default API. --- include/mesh/boundary_info.h | 12 +----- src/mesh/boundary_info.C | 20 +++++----- tests/mesh/boundary_info.C | 44 ++++++++++++++++++++++ tests/systems/disconnected_neighbor_test.C | 31 ++++----------- 4 files changed, 63 insertions(+), 44 deletions(-) diff --git a/include/mesh/boundary_info.h b/include/mesh/boundary_info.h index a414658be66..e8dcf7e2a35 100644 --- a/include/mesh/boundary_info.h +++ b/include/mesh/boundary_info.h @@ -616,22 +616,12 @@ class BoundaryInfo : public ParallelObject /** * \returns A side of element \p elem whose associated boundary id is * \p boundary_id if such a side exists, and \p invalid_uint otherwise. - * \p include_internal_boundary - * If true, sides on internal logical boundaries are also considered. - * If false (default), only sides on the geometric boundary - * (i.e. sides without a valid neighbor element) are inspected. - * - * Setting this to true is useful for intentionally disconnected - * interfaces (e.g. cohesive zone interfaces) where - * a neighboring element exists but the side should still be treated - * as a boundary for enforcement of interface conditions. * * \note If multiple sides of \p elem have the same id, only the lowest numbered * such side is returned. */ unsigned int side_with_boundary_id(const Elem * const elem, - const boundary_id_type boundary_id, - bool include_internal_boundary = false) const; + const boundary_id_type boundary_id) const; /** * \returns All sides of element \p elem whose associated boundary id is diff --git a/src/mesh/boundary_info.C b/src/mesh/boundary_info.C index 3a6660752dc..29a3f530e4d 100644 --- a/src/mesh/boundary_info.C +++ b/src/mesh/boundary_info.C @@ -2298,8 +2298,7 @@ void BoundaryInfo::renumber_node_id (boundary_id_type old_id, unsigned int BoundaryInfo::side_with_boundary_id(const Elem * const elem, - const boundary_id_type boundary_id_in, - bool include_internal_boundary) const + const boundary_id_type boundary_id_in) const { const Elem * searched_elem = elem; @@ -2326,11 +2325,12 @@ unsigned int BoundaryInfo::side_with_boundary_id(const Elem * const elem, if (elem->neighbor_ptr(side) == nullptr) return side; + // Internal boundary case + const Elem * p = elem; + +#ifdef LIBMESH_ENABLE_AMR // If we're on an internal boundary then we need to be sure // it's the same internal boundary as our top_parent - bool aligned_with_parent = false; -#ifdef LIBMESH_ENABLE_AMR - const Elem * p = elem; while (p != nullptr) { const Elem * parent = p->parent(); @@ -2338,12 +2338,12 @@ unsigned int BoundaryInfo::side_with_boundary_id(const Elem * const elem, break; p = parent; } - aligned_with_parent = (p == nullptr); +#else + // do not forget to return the internal boundary when AMR is disabled + return side; #endif - // Two valid cases: - // 1. The internal face is geometrically aligned with the parent's boundary side (original behavior) - // 2. The caller explicitly allows logical/internal boundaries (e.g. CZM interfaces) - if (aligned_with_parent || include_internal_boundary) + // We're on that side of our top_parent; return it + if (!p) return side; } // Otherwise we need to check if the child's ancestors have something on diff --git a/tests/mesh/boundary_info.C b/tests/mesh/boundary_info.C index 74ab150146f..ac2128d4b31 100644 --- a/tests/mesh/boundary_info.C +++ b/tests/mesh/boundary_info.C @@ -29,6 +29,7 @@ public: #if LIBMESH_DIM > 1 CPPUNIT_TEST( testMesh ); CPPUNIT_TEST( testRenumber ); + CPPUNIT_TEST( testInternalBoundary ); # if LIBMESH_DIM > 2 CPPUNIT_TEST( testSelectiveRenumber ); # endif @@ -1110,6 +1111,49 @@ public: } } + + void testInternalBoundary() + { + LOG_UNIT_TEST; + + Mesh mesh(*TestCommWorld); + + // Build a 2x2 QUAD4 structured mesh on [0,1]x[0,1]. + MeshTools::Generation::build_square(mesh, + 2, 2, + 0., 1., + 0., 1., + QUAD4); + + BoundaryInfo & bi = mesh.get_boundary_info(); + + // Select an element on the left side of the interior boundary + // (average x-coordinate < 0.5). + Elem * left_elem = nullptr; + for (auto & elem : mesh.active_element_ptr_range()) + { + if (elem->vertex_average()(0) < 0.5) + { + left_elem = elem; + break; + } + } + + CPPUNIT_ASSERT(left_elem); + unsigned int internal_side = 1; + CPPUNIT_ASSERT(left_elem->neighbor_ptr(internal_side) != nullptr); + + // Assign a custom boundary ID on this internal side. + boundary_id_type BID = 7; + bi.add_side(left_elem, internal_side, BID); + + mesh.prepare_for_use(); + + unsigned int found_side = bi.side_with_boundary_id(left_elem, BID); + CPPUNIT_ASSERT_EQUAL(internal_side, found_side); + } + + }; CPPUNIT_TEST_SUITE_REGISTRATION( BoundaryInfoTest ); diff --git a/tests/systems/disconnected_neighbor_test.C b/tests/systems/disconnected_neighbor_test.C index 372321c738b..c2a53f9d670 100644 --- a/tests/systems/disconnected_neighbor_test.C +++ b/tests/systems/disconnected_neighbor_test.C @@ -78,6 +78,12 @@ void assemble_temperature_jump(EquationSystems &es, fe_face_L->attach_quadrature_rule(&qface); fe_face_R->attach_quadrature_rule(&qface); + const auto &JxW_vol = fe->get_JxW(); + const auto &dphi_vol = fe->get_dphi(); + const auto &phi_L = fe_face_L->get_phi(); + const auto &phi_R = fe_face_R->get_phi(); + const auto &JxW_face = fe_face_L->get_JxW(); + DenseMatrix Ke; DenseVector Fe; std::vector dof_indices; @@ -96,34 +102,21 @@ void assemble_temperature_jump(EquationSystems &es, Fe.zero(); // --- Volume contribution --- - fe->get_dphi(); // sets calculate_dphi = true - fe->get_JxW(); // sets calculate_map = true fe->reinit(elem); - const auto &JxW_vol = fe->get_JxW(); - const auto &dphi_vol = fe->get_dphi(); - for (unsigned int qp = 0; qp < qrule.n_points(); qp++) for (unsigned int i = 0; i < n_dofs; i++) for (unsigned int j = 0; j < n_dofs; j++) Ke(i, j) += conductance * JxW_vol[qp] * (dphi_vol[i][qp] * dphi_vol[j][qp]); // --- Left-side interface --- - unsigned int side = boundary.side_with_boundary_id(elem, interface_left_id, true /*include_internal_boundary*/); + unsigned int side = boundary.side_with_boundary_id(elem, interface_left_id); if (side != libMesh::invalid_uint) { - fe_face_L->get_phi(); // sets calculate_phi = true - fe_face_L->get_JxW(); // sets calculate_map = true fe_face_L->reinit(elem, side); - const auto &phi_L = fe_face_L->get_phi(); - const auto &JxW_face = fe_face_L->get_JxW(); - const Elem *neighbor = elem->neighbor_ptr(side); libmesh_assert(neighbor); unsigned int n_side = neighbor->which_neighbor_am_i(elem); - fe_face_R->get_phi(); - fe_face_R->get_JxW(); fe_face_R->reinit(neighbor, n_side); - const auto &phi_R = fe_face_R->get_phi(); std::vector dofs_L, dofs_R; dof_map.dof_indices(elem, dofs_L); @@ -148,22 +141,14 @@ void assemble_temperature_jump(EquationSystems &es, } // --- Right-side interface --- - side = boundary.side_with_boundary_id(elem, interface_right_id, true /*include_internal_boundary*/); + side = boundary.side_with_boundary_id(elem, interface_right_id); if (side != libMesh::invalid_uint) { - fe_face_R->get_phi(); // sets calculate_phi = true - fe_face_R->get_JxW(); // sets calculate_map = true fe_face_R->reinit(elem, side); - const auto &phi_R = fe_face_R->get_phi(); - const auto &JxW_face = fe_face_R->get_JxW(); - const Elem *neighbor = elem->neighbor_ptr(side); libmesh_assert(neighbor); unsigned int n_side = neighbor->which_neighbor_am_i(elem); - fe_face_L->get_phi(); - fe_face_L->get_JxW(); fe_face_L->reinit(neighbor, n_side); - const auto &phi_L = fe_face_L->get_phi(); std::vector dofs_R, dofs_L; dof_map.dof_indices(elem, dofs_R); From 1a6d0deada02105edae567b269f3cb5e73e96e73 Mon Sep 17 00:00:00 2001 From: Cheng-Hau Yang Date: Tue, 28 Oct 2025 16:00:05 -0500 Subject: [PATCH 13/26] Replace MapBasedDisconnectedGhosting with DisconnectedNeighborCoupling This commit removes the `map_based_disconnected_ghosting` implementation and fully migrates the build/runtime logic to `disconnected_neighbor_coupling`. - Remove map_based_disconnected_ghosting.{h,C} and all associated build rules - Add disconnected_neighbor_coupling.{h,C} into all Makefile targets - Drop ghosting implementation in UnstructuredMesh::find_neighbors() - Update tests to use `DisconnectedNeighborCoupling` directly - Enable fine-mesh test (testTempJumpRefine) --- Makefile.in | 122 ++++++------ include/Makefile.in | 2 +- .../ghosting/disconnected_neighbor_coupling.h | 44 +++++ .../map_based_disconnected_ghosting.h | 63 ------ include/include_HEADERS | 2 +- include/libmesh/Makefile.am | 4 +- include/libmesh/Makefile.in | 4 +- src/ghosting/disconnected_neighbor_coupling.C | 52 +++++ .../map_based_disconnected_ghosting.C | 59 ------ src/libmesh_SOURCES | 2 +- src/mesh/mesh_base.C | 1 - src/mesh/unstructured_mesh.C | 8 - tests/systems/disconnected_neighbor_test.C | 183 +++++++++++++++++- 13 files changed, 340 insertions(+), 206 deletions(-) create mode 100644 include/ghosting/disconnected_neighbor_coupling.h delete mode 100644 include/ghosting/map_based_disconnected_ghosting.h create mode 100644 src/ghosting/disconnected_neighbor_coupling.C delete mode 100644 src/ghosting/map_based_disconnected_ghosting.C diff --git a/Makefile.in b/Makefile.in index ed3a71de374..2fe3fb2ae5f 100644 --- a/Makefile.in +++ b/Makefile.in @@ -375,7 +375,7 @@ am__libmesh_dbg_la_SOURCES_DIST = src/base/dirichlet_boundary.C \ src/geom/sphere.C src/geom/surface.C \ src/ghosting/default_coupling.C \ src/ghosting/ghost_point_neighbors.C \ - src/ghosting/map_based_disconnected_ghosting.C \ + src/ghosting/disconnected_neighbor_coupling.C \ src/ghosting/non_manifold_coupling.C \ src/ghosting/overlap_coupling.C \ src/ghosting/point_neighbor_coupling.C \ @@ -786,7 +786,7 @@ am__objects_1 = src/base/libmesh_dbg_la-dirichlet_boundary.lo \ src/geom/libmesh_dbg_la-surface.lo \ src/ghosting/libmesh_dbg_la-default_coupling.lo \ src/ghosting/libmesh_dbg_la-ghost_point_neighbors.lo \ - src/ghosting/libmesh_dbg_la-map_based_disconnected_ghosting.lo \ + src/ghosting/libmesh_dbg_la-disconnected_neighbor_coupling.lo \ src/ghosting/libmesh_dbg_la-non_manifold_coupling.lo \ src/ghosting/libmesh_dbg_la-overlap_coupling.lo \ src/ghosting/libmesh_dbg_la-point_neighbor_coupling.lo \ @@ -1191,7 +1191,7 @@ am__libmesh_devel_la_SOURCES_DIST = src/base/dirichlet_boundary.C \ src/geom/sphere.C src/geom/surface.C \ src/ghosting/default_coupling.C \ src/ghosting/ghost_point_neighbors.C \ - src/ghosting/map_based_disconnected_ghosting.C \ + src/ghosting/disconnected_neighbor_coupling.C \ src/ghosting/non_manifold_coupling.C \ src/ghosting/overlap_coupling.C \ src/ghosting/point_neighbor_coupling.C \ @@ -1601,7 +1601,7 @@ am__objects_2 = src/base/libmesh_devel_la-dirichlet_boundary.lo \ src/geom/libmesh_devel_la-surface.lo \ src/ghosting/libmesh_devel_la-default_coupling.lo \ src/ghosting/libmesh_devel_la-ghost_point_neighbors.lo \ - src/ghosting/libmesh_devel_la-map_based_disconnected_ghosting.lo \ + src/ghosting/libmesh_devel_la-disconnected_neighbor_coupling.lo \ src/ghosting/libmesh_devel_la-non_manifold_coupling.lo \ src/ghosting/libmesh_devel_la-overlap_coupling.lo \ src/ghosting/libmesh_devel_la-point_neighbor_coupling.lo \ @@ -2003,7 +2003,7 @@ am__libmesh_oprof_la_SOURCES_DIST = src/base/dirichlet_boundary.C \ src/geom/sphere.C src/geom/surface.C \ src/ghosting/default_coupling.C \ src/ghosting/ghost_point_neighbors.C \ - src/ghosting/map_based_disconnected_ghosting.C \ + src/ghosting/disconnected_neighbor_coupling.C \ src/ghosting/non_manifold_coupling.C \ src/ghosting/overlap_coupling.C \ src/ghosting/point_neighbor_coupling.C \ @@ -2413,7 +2413,7 @@ am__objects_3 = src/base/libmesh_oprof_la-dirichlet_boundary.lo \ src/geom/libmesh_oprof_la-surface.lo \ src/ghosting/libmesh_oprof_la-default_coupling.lo \ src/ghosting/libmesh_oprof_la-ghost_point_neighbors.lo \ - src/ghosting/libmesh_oprof_la-map_based_disconnected_ghosting.lo \ + src/ghosting/libmesh_oprof_la-disconnected_neighbor_coupling.lo \ src/ghosting/libmesh_oprof_la-non_manifold_coupling.lo \ src/ghosting/libmesh_oprof_la-overlap_coupling.lo \ src/ghosting/libmesh_oprof_la-point_neighbor_coupling.lo \ @@ -2815,7 +2815,7 @@ am__libmesh_opt_la_SOURCES_DIST = src/base/dirichlet_boundary.C \ src/geom/sphere.C src/geom/surface.C \ src/ghosting/default_coupling.C \ src/ghosting/ghost_point_neighbors.C \ - src/ghosting/map_based_disconnected_ghosting.C \ + src/ghosting/disconnected_neighbor_coupling.C \ src/ghosting/non_manifold_coupling.C \ src/ghosting/overlap_coupling.C \ src/ghosting/point_neighbor_coupling.C \ @@ -3225,7 +3225,7 @@ am__objects_4 = src/base/libmesh_opt_la-dirichlet_boundary.lo \ src/geom/libmesh_opt_la-surface.lo \ src/ghosting/libmesh_opt_la-default_coupling.lo \ src/ghosting/libmesh_opt_la-ghost_point_neighbors.lo \ - src/ghosting/libmesh_opt_la-map_based_disconnected_ghosting.lo \ + src/ghosting/libmesh_opt_la-disconnected_neighbor_coupling.lo \ src/ghosting/libmesh_opt_la-non_manifold_coupling.lo \ src/ghosting/libmesh_opt_la-overlap_coupling.lo \ src/ghosting/libmesh_opt_la-point_neighbor_coupling.lo \ @@ -3626,7 +3626,7 @@ am__libmesh_prof_la_SOURCES_DIST = src/base/dirichlet_boundary.C \ src/geom/sphere.C src/geom/surface.C \ src/ghosting/default_coupling.C \ src/ghosting/ghost_point_neighbors.C \ - src/ghosting/map_based_disconnected_ghosting.C \ + src/ghosting/disconnected_neighbor_coupling.C \ src/ghosting/non_manifold_coupling.C \ src/ghosting/overlap_coupling.C \ src/ghosting/point_neighbor_coupling.C \ @@ -4036,7 +4036,7 @@ am__objects_5 = src/base/libmesh_prof_la-dirichlet_boundary.lo \ src/geom/libmesh_prof_la-surface.lo \ src/ghosting/libmesh_prof_la-default_coupling.lo \ src/ghosting/libmesh_prof_la-ghost_point_neighbors.lo \ - src/ghosting/libmesh_prof_la-map_based_disconnected_ghosting.lo \ + src/ghosting/libmesh_prof_la-disconnected_neighbor_coupling.lo \ src/ghosting/libmesh_prof_la-non_manifold_coupling.lo \ src/ghosting/libmesh_prof_la-overlap_coupling.lo \ src/ghosting/libmesh_prof_la-point_neighbor_coupling.lo \ @@ -5766,36 +5766,36 @@ am__depfiles_remade = src/apps/$(DEPDIR)/amr_dbg-amr.Po \ src/geom/$(DEPDIR)/libmesh_prof_la-sphere.Plo \ src/geom/$(DEPDIR)/libmesh_prof_la-surface.Plo \ src/ghosting/$(DEPDIR)/libmesh_dbg_la-default_coupling.Plo \ + src/ghosting/$(DEPDIR)/libmesh_dbg_la-disconnected_neighbor_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_dbg_la-ghost_point_neighbors.Plo \ - src/ghosting/$(DEPDIR)/libmesh_dbg_la-map_based_disconnected_ghosting.Plo \ src/ghosting/$(DEPDIR)/libmesh_dbg_la-non_manifold_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_dbg_la-overlap_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_dbg_la-point_neighbor_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_dbg_la-sibling_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_devel_la-default_coupling.Plo \ + src/ghosting/$(DEPDIR)/libmesh_devel_la-disconnected_neighbor_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_devel_la-ghost_point_neighbors.Plo \ - src/ghosting/$(DEPDIR)/libmesh_devel_la-map_based_disconnected_ghosting.Plo \ src/ghosting/$(DEPDIR)/libmesh_devel_la-non_manifold_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_devel_la-overlap_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_devel_la-point_neighbor_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_devel_la-sibling_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_oprof_la-default_coupling.Plo \ + src/ghosting/$(DEPDIR)/libmesh_oprof_la-disconnected_neighbor_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_oprof_la-ghost_point_neighbors.Plo \ - src/ghosting/$(DEPDIR)/libmesh_oprof_la-map_based_disconnected_ghosting.Plo \ src/ghosting/$(DEPDIR)/libmesh_oprof_la-non_manifold_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_oprof_la-overlap_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_oprof_la-point_neighbor_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_oprof_la-sibling_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_opt_la-default_coupling.Plo \ + src/ghosting/$(DEPDIR)/libmesh_opt_la-disconnected_neighbor_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_opt_la-ghost_point_neighbors.Plo \ - src/ghosting/$(DEPDIR)/libmesh_opt_la-map_based_disconnected_ghosting.Plo \ src/ghosting/$(DEPDIR)/libmesh_opt_la-non_manifold_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_opt_la-overlap_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_opt_la-point_neighbor_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_opt_la-sibling_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_prof_la-default_coupling.Plo \ + src/ghosting/$(DEPDIR)/libmesh_prof_la-disconnected_neighbor_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_prof_la-ghost_point_neighbors.Plo \ - src/ghosting/$(DEPDIR)/libmesh_prof_la-map_based_disconnected_ghosting.Plo \ src/ghosting/$(DEPDIR)/libmesh_prof_la-non_manifold_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_prof_la-overlap_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_prof_la-point_neighbor_coupling.Plo \ @@ -8056,7 +8056,7 @@ libmesh_SOURCES = \ src/geom/surface.C \ src/ghosting/default_coupling.C \ src/ghosting/ghost_point_neighbors.C \ - src/ghosting/map_based_disconnected_ghosting.C \ + src/ghosting/disconnected_neighbor_coupling.C \ src/ghosting/non_manifold_coupling.C \ src/ghosting/overlap_coupling.C \ src/ghosting/point_neighbor_coupling.C \ @@ -9239,7 +9239,7 @@ src/ghosting/libmesh_dbg_la-default_coupling.lo: \ src/ghosting/libmesh_dbg_la-ghost_point_neighbors.lo: \ src/ghosting/$(am__dirstamp) \ src/ghosting/$(DEPDIR)/$(am__dirstamp) -src/ghosting/libmesh_dbg_la-map_based_disconnected_ghosting.lo: \ +src/ghosting/libmesh_dbg_la-disconnected_neighbor_coupling.lo: \ src/ghosting/$(am__dirstamp) \ src/ghosting/$(DEPDIR)/$(am__dirstamp) src/ghosting/libmesh_dbg_la-non_manifold_coupling.lo: \ @@ -10477,7 +10477,7 @@ src/ghosting/libmesh_devel_la-default_coupling.lo: \ src/ghosting/libmesh_devel_la-ghost_point_neighbors.lo: \ src/ghosting/$(am__dirstamp) \ src/ghosting/$(DEPDIR)/$(am__dirstamp) -src/ghosting/libmesh_devel_la-map_based_disconnected_ghosting.lo: \ +src/ghosting/libmesh_devel_la-disconnected_neighbor_coupling.lo: \ src/ghosting/$(am__dirstamp) \ src/ghosting/$(DEPDIR)/$(am__dirstamp) src/ghosting/libmesh_devel_la-non_manifold_coupling.lo: \ @@ -11652,7 +11652,7 @@ src/ghosting/libmesh_oprof_la-default_coupling.lo: \ src/ghosting/libmesh_oprof_la-ghost_point_neighbors.lo: \ src/ghosting/$(am__dirstamp) \ src/ghosting/$(DEPDIR)/$(am__dirstamp) -src/ghosting/libmesh_oprof_la-map_based_disconnected_ghosting.lo: \ +src/ghosting/libmesh_oprof_la-disconnected_neighbor_coupling.lo: \ src/ghosting/$(am__dirstamp) \ src/ghosting/$(DEPDIR)/$(am__dirstamp) src/ghosting/libmesh_oprof_la-non_manifold_coupling.lo: \ @@ -12827,7 +12827,7 @@ src/ghosting/libmesh_opt_la-default_coupling.lo: \ src/ghosting/libmesh_opt_la-ghost_point_neighbors.lo: \ src/ghosting/$(am__dirstamp) \ src/ghosting/$(DEPDIR)/$(am__dirstamp) -src/ghosting/libmesh_opt_la-map_based_disconnected_ghosting.lo: \ +src/ghosting/libmesh_opt_la-disconnected_neighbor_coupling.lo: \ src/ghosting/$(am__dirstamp) \ src/ghosting/$(DEPDIR)/$(am__dirstamp) src/ghosting/libmesh_opt_la-non_manifold_coupling.lo: \ @@ -13999,7 +13999,7 @@ src/ghosting/libmesh_prof_la-default_coupling.lo: \ src/ghosting/libmesh_prof_la-ghost_point_neighbors.lo: \ src/ghosting/$(am__dirstamp) \ src/ghosting/$(DEPDIR)/$(am__dirstamp) -src/ghosting/libmesh_prof_la-map_based_disconnected_ghosting.lo: \ +src/ghosting/libmesh_prof_la-disconnected_neighbor_coupling.lo: \ src/ghosting/$(am__dirstamp) \ src/ghosting/$(DEPDIR)/$(am__dirstamp) src/ghosting/libmesh_prof_la-non_manifold_coupling.lo: \ @@ -16280,36 +16280,36 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@src/geom/$(DEPDIR)/libmesh_prof_la-sphere.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/geom/$(DEPDIR)/libmesh_prof_la-surface.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_dbg_la-default_coupling.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_dbg_la-disconnected_neighbor_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_dbg_la-ghost_point_neighbors.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_dbg_la-map_based_disconnected_ghosting.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_dbg_la-non_manifold_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_dbg_la-overlap_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_dbg_la-point_neighbor_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_dbg_la-sibling_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_devel_la-default_coupling.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_devel_la-disconnected_neighbor_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_devel_la-ghost_point_neighbors.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_devel_la-map_based_disconnected_ghosting.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_devel_la-non_manifold_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_devel_la-overlap_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_devel_la-point_neighbor_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_devel_la-sibling_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_oprof_la-default_coupling.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_oprof_la-disconnected_neighbor_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_oprof_la-ghost_point_neighbors.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_oprof_la-map_based_disconnected_ghosting.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_oprof_la-non_manifold_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_oprof_la-overlap_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_oprof_la-point_neighbor_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_oprof_la-sibling_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_opt_la-default_coupling.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_opt_la-disconnected_neighbor_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_opt_la-ghost_point_neighbors.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_opt_la-map_based_disconnected_ghosting.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_opt_la-non_manifold_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_opt_la-overlap_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_opt_la-point_neighbor_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_opt_la-sibling_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_prof_la-default_coupling.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_prof_la-disconnected_neighbor_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_prof_la-ghost_point_neighbors.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_prof_la-map_based_disconnected_ghosting.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_prof_la-non_manifold_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_prof_la-overlap_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_prof_la-point_neighbor_coupling.Plo@am__quote@ # am--include-marker @@ -19084,12 +19084,12 @@ src/ghosting/libmesh_dbg_la-ghost_point_neighbors.lo: src/ghosting/ghost_point_n @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -c -o src/ghosting/libmesh_dbg_la-ghost_point_neighbors.lo `test -f 'src/ghosting/ghost_point_neighbors.C' || echo '$(srcdir)/'`src/ghosting/ghost_point_neighbors.C -src/ghosting/libmesh_dbg_la-map_based_disconnected_ghosting.lo: src/ghosting/map_based_disconnected_ghosting.C -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -MT src/ghosting/libmesh_dbg_la-map_based_disconnected_ghosting.lo -MD -MP -MF src/ghosting/$(DEPDIR)/libmesh_dbg_la-map_based_disconnected_ghosting.Tpo -c -o src/ghosting/libmesh_dbg_la-map_based_disconnected_ghosting.lo `test -f 'src/ghosting/map_based_disconnected_ghosting.C' || echo '$(srcdir)/'`src/ghosting/map_based_disconnected_ghosting.C -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/ghosting/$(DEPDIR)/libmesh_dbg_la-map_based_disconnected_ghosting.Tpo src/ghosting/$(DEPDIR)/libmesh_dbg_la-map_based_disconnected_ghosting.Plo -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/ghosting/map_based_disconnected_ghosting.C' object='src/ghosting/libmesh_dbg_la-map_based_disconnected_ghosting.lo' libtool=yes @AMDEPBACKSLASH@ +src/ghosting/libmesh_dbg_la-disconnected_neighbor_coupling.lo: src/ghosting/disconnected_neighbor_coupling.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -MT src/ghosting/libmesh_dbg_la-disconnected_neighbor_coupling.lo -MD -MP -MF src/ghosting/$(DEPDIR)/libmesh_dbg_la-disconnected_neighbor_coupling.Tpo -c -o src/ghosting/libmesh_dbg_la-disconnected_neighbor_coupling.lo `test -f 'src/ghosting/disconnected_neighbor_coupling.C' || echo '$(srcdir)/'`src/ghosting/disconnected_neighbor_coupling.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/ghosting/$(DEPDIR)/libmesh_dbg_la-disconnected_neighbor_coupling.Tpo src/ghosting/$(DEPDIR)/libmesh_dbg_la-disconnected_neighbor_coupling.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/ghosting/disconnected_neighbor_coupling.C' object='src/ghosting/libmesh_dbg_la-disconnected_neighbor_coupling.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -c -o src/ghosting/libmesh_dbg_la-map_based_disconnected_ghosting.lo `test -f 'src/ghosting/map_based_disconnected_ghosting.C' || echo '$(srcdir)/'`src/ghosting/map_based_disconnected_ghosting.C +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -c -o src/ghosting/libmesh_dbg_la-disconnected_neighbor_coupling.lo `test -f 'src/ghosting/disconnected_neighbor_coupling.C' || echo '$(srcdir)/'`src/ghosting/disconnected_neighbor_coupling.C src/ghosting/libmesh_dbg_la-non_manifold_coupling.lo: src/ghosting/non_manifold_coupling.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -MT src/ghosting/libmesh_dbg_la-non_manifold_coupling.lo -MD -MP -MF src/ghosting/$(DEPDIR)/libmesh_dbg_la-non_manifold_coupling.Tpo -c -o src/ghosting/libmesh_dbg_la-non_manifold_coupling.lo `test -f 'src/ghosting/non_manifold_coupling.C' || echo '$(srcdir)/'`src/ghosting/non_manifold_coupling.C @@ -22416,12 +22416,12 @@ src/ghosting/libmesh_devel_la-ghost_point_neighbors.lo: src/ghosting/ghost_point @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -c -o src/ghosting/libmesh_devel_la-ghost_point_neighbors.lo `test -f 'src/ghosting/ghost_point_neighbors.C' || echo '$(srcdir)/'`src/ghosting/ghost_point_neighbors.C -src/ghosting/libmesh_devel_la-map_based_disconnected_ghosting.lo: src/ghosting/map_based_disconnected_ghosting.C -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -MT src/ghosting/libmesh_devel_la-map_based_disconnected_ghosting.lo -MD -MP -MF src/ghosting/$(DEPDIR)/libmesh_devel_la-map_based_disconnected_ghosting.Tpo -c -o src/ghosting/libmesh_devel_la-map_based_disconnected_ghosting.lo `test -f 'src/ghosting/map_based_disconnected_ghosting.C' || echo '$(srcdir)/'`src/ghosting/map_based_disconnected_ghosting.C -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/ghosting/$(DEPDIR)/libmesh_devel_la-map_based_disconnected_ghosting.Tpo src/ghosting/$(DEPDIR)/libmesh_devel_la-map_based_disconnected_ghosting.Plo -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/ghosting/map_based_disconnected_ghosting.C' object='src/ghosting/libmesh_devel_la-map_based_disconnected_ghosting.lo' libtool=yes @AMDEPBACKSLASH@ +src/ghosting/libmesh_devel_la-disconnected_neighbor_coupling.lo: src/ghosting/disconnected_neighbor_coupling.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -MT src/ghosting/libmesh_devel_la-disconnected_neighbor_coupling.lo -MD -MP -MF src/ghosting/$(DEPDIR)/libmesh_devel_la-disconnected_neighbor_coupling.Tpo -c -o src/ghosting/libmesh_devel_la-disconnected_neighbor_coupling.lo `test -f 'src/ghosting/disconnected_neighbor_coupling.C' || echo '$(srcdir)/'`src/ghosting/disconnected_neighbor_coupling.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/ghosting/$(DEPDIR)/libmesh_devel_la-disconnected_neighbor_coupling.Tpo src/ghosting/$(DEPDIR)/libmesh_devel_la-disconnected_neighbor_coupling.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/ghosting/disconnected_neighbor_coupling.C' object='src/ghosting/libmesh_devel_la-disconnected_neighbor_coupling.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -c -o src/ghosting/libmesh_devel_la-map_based_disconnected_ghosting.lo `test -f 'src/ghosting/map_based_disconnected_ghosting.C' || echo '$(srcdir)/'`src/ghosting/map_based_disconnected_ghosting.C +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -c -o src/ghosting/libmesh_devel_la-disconnected_neighbor_coupling.lo `test -f 'src/ghosting/disconnected_neighbor_coupling.C' || echo '$(srcdir)/'`src/ghosting/disconnected_neighbor_coupling.C src/ghosting/libmesh_devel_la-non_manifold_coupling.lo: src/ghosting/non_manifold_coupling.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -MT src/ghosting/libmesh_devel_la-non_manifold_coupling.lo -MD -MP -MF src/ghosting/$(DEPDIR)/libmesh_devel_la-non_manifold_coupling.Tpo -c -o src/ghosting/libmesh_devel_la-non_manifold_coupling.lo `test -f 'src/ghosting/non_manifold_coupling.C' || echo '$(srcdir)/'`src/ghosting/non_manifold_coupling.C @@ -25748,12 +25748,12 @@ src/ghosting/libmesh_oprof_la-ghost_point_neighbors.lo: src/ghosting/ghost_point @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/ghosting/libmesh_oprof_la-ghost_point_neighbors.lo `test -f 'src/ghosting/ghost_point_neighbors.C' || echo '$(srcdir)/'`src/ghosting/ghost_point_neighbors.C -src/ghosting/libmesh_oprof_la-map_based_disconnected_ghosting.lo: src/ghosting/map_based_disconnected_ghosting.C -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -MT src/ghosting/libmesh_oprof_la-map_based_disconnected_ghosting.lo -MD -MP -MF src/ghosting/$(DEPDIR)/libmesh_oprof_la-map_based_disconnected_ghosting.Tpo -c -o src/ghosting/libmesh_oprof_la-map_based_disconnected_ghosting.lo `test -f 'src/ghosting/map_based_disconnected_ghosting.C' || echo '$(srcdir)/'`src/ghosting/map_based_disconnected_ghosting.C -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/ghosting/$(DEPDIR)/libmesh_oprof_la-map_based_disconnected_ghosting.Tpo src/ghosting/$(DEPDIR)/libmesh_oprof_la-map_based_disconnected_ghosting.Plo -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/ghosting/map_based_disconnected_ghosting.C' object='src/ghosting/libmesh_oprof_la-map_based_disconnected_ghosting.lo' libtool=yes @AMDEPBACKSLASH@ +src/ghosting/libmesh_oprof_la-disconnected_neighbor_coupling.lo: src/ghosting/disconnected_neighbor_coupling.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -MT src/ghosting/libmesh_oprof_la-disconnected_neighbor_coupling.lo -MD -MP -MF src/ghosting/$(DEPDIR)/libmesh_oprof_la-disconnected_neighbor_coupling.Tpo -c -o src/ghosting/libmesh_oprof_la-disconnected_neighbor_coupling.lo `test -f 'src/ghosting/disconnected_neighbor_coupling.C' || echo '$(srcdir)/'`src/ghosting/disconnected_neighbor_coupling.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/ghosting/$(DEPDIR)/libmesh_oprof_la-disconnected_neighbor_coupling.Tpo src/ghosting/$(DEPDIR)/libmesh_oprof_la-disconnected_neighbor_coupling.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/ghosting/disconnected_neighbor_coupling.C' object='src/ghosting/libmesh_oprof_la-disconnected_neighbor_coupling.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/ghosting/libmesh_oprof_la-map_based_disconnected_ghosting.lo `test -f 'src/ghosting/map_based_disconnected_ghosting.C' || echo '$(srcdir)/'`src/ghosting/map_based_disconnected_ghosting.C +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/ghosting/libmesh_oprof_la-disconnected_neighbor_coupling.lo `test -f 'src/ghosting/disconnected_neighbor_coupling.C' || echo '$(srcdir)/'`src/ghosting/disconnected_neighbor_coupling.C src/ghosting/libmesh_oprof_la-non_manifold_coupling.lo: src/ghosting/non_manifold_coupling.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -MT src/ghosting/libmesh_oprof_la-non_manifold_coupling.lo -MD -MP -MF src/ghosting/$(DEPDIR)/libmesh_oprof_la-non_manifold_coupling.Tpo -c -o src/ghosting/libmesh_oprof_la-non_manifold_coupling.lo `test -f 'src/ghosting/non_manifold_coupling.C' || echo '$(srcdir)/'`src/ghosting/non_manifold_coupling.C @@ -29080,12 +29080,12 @@ src/ghosting/libmesh_opt_la-ghost_point_neighbors.lo: src/ghosting/ghost_point_n @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -c -o src/ghosting/libmesh_opt_la-ghost_point_neighbors.lo `test -f 'src/ghosting/ghost_point_neighbors.C' || echo '$(srcdir)/'`src/ghosting/ghost_point_neighbors.C -src/ghosting/libmesh_opt_la-map_based_disconnected_ghosting.lo: src/ghosting/map_based_disconnected_ghosting.C -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -MT src/ghosting/libmesh_opt_la-map_based_disconnected_ghosting.lo -MD -MP -MF src/ghosting/$(DEPDIR)/libmesh_opt_la-map_based_disconnected_ghosting.Tpo -c -o src/ghosting/libmesh_opt_la-map_based_disconnected_ghosting.lo `test -f 'src/ghosting/map_based_disconnected_ghosting.C' || echo '$(srcdir)/'`src/ghosting/map_based_disconnected_ghosting.C -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/ghosting/$(DEPDIR)/libmesh_opt_la-map_based_disconnected_ghosting.Tpo src/ghosting/$(DEPDIR)/libmesh_opt_la-map_based_disconnected_ghosting.Plo -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/ghosting/map_based_disconnected_ghosting.C' object='src/ghosting/libmesh_opt_la-map_based_disconnected_ghosting.lo' libtool=yes @AMDEPBACKSLASH@ +src/ghosting/libmesh_opt_la-disconnected_neighbor_coupling.lo: src/ghosting/disconnected_neighbor_coupling.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -MT src/ghosting/libmesh_opt_la-disconnected_neighbor_coupling.lo -MD -MP -MF src/ghosting/$(DEPDIR)/libmesh_opt_la-disconnected_neighbor_coupling.Tpo -c -o src/ghosting/libmesh_opt_la-disconnected_neighbor_coupling.lo `test -f 'src/ghosting/disconnected_neighbor_coupling.C' || echo '$(srcdir)/'`src/ghosting/disconnected_neighbor_coupling.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/ghosting/$(DEPDIR)/libmesh_opt_la-disconnected_neighbor_coupling.Tpo src/ghosting/$(DEPDIR)/libmesh_opt_la-disconnected_neighbor_coupling.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/ghosting/disconnected_neighbor_coupling.C' object='src/ghosting/libmesh_opt_la-disconnected_neighbor_coupling.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -c -o src/ghosting/libmesh_opt_la-map_based_disconnected_ghosting.lo `test -f 'src/ghosting/map_based_disconnected_ghosting.C' || echo '$(srcdir)/'`src/ghosting/map_based_disconnected_ghosting.C +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -c -o src/ghosting/libmesh_opt_la-disconnected_neighbor_coupling.lo `test -f 'src/ghosting/disconnected_neighbor_coupling.C' || echo '$(srcdir)/'`src/ghosting/disconnected_neighbor_coupling.C src/ghosting/libmesh_opt_la-non_manifold_coupling.lo: src/ghosting/non_manifold_coupling.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -MT src/ghosting/libmesh_opt_la-non_manifold_coupling.lo -MD -MP -MF src/ghosting/$(DEPDIR)/libmesh_opt_la-non_manifold_coupling.Tpo -c -o src/ghosting/libmesh_opt_la-non_manifold_coupling.lo `test -f 'src/ghosting/non_manifold_coupling.C' || echo '$(srcdir)/'`src/ghosting/non_manifold_coupling.C @@ -32412,12 +32412,12 @@ src/ghosting/libmesh_prof_la-ghost_point_neighbors.lo: src/ghosting/ghost_point_ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/ghosting/libmesh_prof_la-ghost_point_neighbors.lo `test -f 'src/ghosting/ghost_point_neighbors.C' || echo '$(srcdir)/'`src/ghosting/ghost_point_neighbors.C -src/ghosting/libmesh_prof_la-map_based_disconnected_ghosting.lo: src/ghosting/map_based_disconnected_ghosting.C -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -MT src/ghosting/libmesh_prof_la-map_based_disconnected_ghosting.lo -MD -MP -MF src/ghosting/$(DEPDIR)/libmesh_prof_la-map_based_disconnected_ghosting.Tpo -c -o src/ghosting/libmesh_prof_la-map_based_disconnected_ghosting.lo `test -f 'src/ghosting/map_based_disconnected_ghosting.C' || echo '$(srcdir)/'`src/ghosting/map_based_disconnected_ghosting.C -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/ghosting/$(DEPDIR)/libmesh_prof_la-map_based_disconnected_ghosting.Tpo src/ghosting/$(DEPDIR)/libmesh_prof_la-map_based_disconnected_ghosting.Plo -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/ghosting/map_based_disconnected_ghosting.C' object='src/ghosting/libmesh_prof_la-map_based_disconnected_ghosting.lo' libtool=yes @AMDEPBACKSLASH@ +src/ghosting/libmesh_prof_la-disconnected_neighbor_coupling.lo: src/ghosting/disconnected_neighbor_coupling.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -MT src/ghosting/libmesh_prof_la-disconnected_neighbor_coupling.lo -MD -MP -MF src/ghosting/$(DEPDIR)/libmesh_prof_la-disconnected_neighbor_coupling.Tpo -c -o src/ghosting/libmesh_prof_la-disconnected_neighbor_coupling.lo `test -f 'src/ghosting/disconnected_neighbor_coupling.C' || echo '$(srcdir)/'`src/ghosting/disconnected_neighbor_coupling.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/ghosting/$(DEPDIR)/libmesh_prof_la-disconnected_neighbor_coupling.Tpo src/ghosting/$(DEPDIR)/libmesh_prof_la-disconnected_neighbor_coupling.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/ghosting/disconnected_neighbor_coupling.C' object='src/ghosting/libmesh_prof_la-disconnected_neighbor_coupling.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/ghosting/libmesh_prof_la-map_based_disconnected_ghosting.lo `test -f 'src/ghosting/map_based_disconnected_ghosting.C' || echo '$(srcdir)/'`src/ghosting/map_based_disconnected_ghosting.C +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/ghosting/libmesh_prof_la-disconnected_neighbor_coupling.lo `test -f 'src/ghosting/disconnected_neighbor_coupling.C' || echo '$(srcdir)/'`src/ghosting/disconnected_neighbor_coupling.C src/ghosting/libmesh_prof_la-non_manifold_coupling.lo: src/ghosting/non_manifold_coupling.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -MT src/ghosting/libmesh_prof_la-non_manifold_coupling.lo -MD -MP -MF src/ghosting/$(DEPDIR)/libmesh_prof_la-non_manifold_coupling.Tpo -c -o src/ghosting/libmesh_prof_la-non_manifold_coupling.lo `test -f 'src/ghosting/non_manifold_coupling.C' || echo '$(srcdir)/'`src/ghosting/non_manifold_coupling.C @@ -36735,36 +36735,36 @@ distclean: distclean-recursive -rm -f src/geom/$(DEPDIR)/libmesh_prof_la-sphere.Plo -rm -f src/geom/$(DEPDIR)/libmesh_prof_la-surface.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-default_coupling.Plo + -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-disconnected_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-ghost_point_neighbors.Plo - -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-map_based_disconnected_ghosting.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-non_manifold_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-overlap_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-point_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-sibling_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-default_coupling.Plo + -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-disconnected_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-ghost_point_neighbors.Plo - -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-map_based_disconnected_ghosting.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-non_manifold_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-overlap_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-point_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-sibling_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-default_coupling.Plo + -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-disconnected_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-ghost_point_neighbors.Plo - -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-map_based_disconnected_ghosting.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-non_manifold_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-overlap_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-point_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-sibling_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-default_coupling.Plo + -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-disconnected_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-ghost_point_neighbors.Plo - -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-map_based_disconnected_ghosting.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-non_manifold_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-overlap_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-point_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-sibling_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_prof_la-default_coupling.Plo + -rm -f src/ghosting/$(DEPDIR)/libmesh_prof_la-disconnected_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_prof_la-ghost_point_neighbors.Plo - -rm -f src/ghosting/$(DEPDIR)/libmesh_prof_la-map_based_disconnected_ghosting.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_prof_la-non_manifold_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_prof_la-overlap_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_prof_la-point_neighbor_coupling.Plo @@ -39226,36 +39226,36 @@ maintainer-clean: maintainer-clean-recursive -rm -f src/geom/$(DEPDIR)/libmesh_prof_la-sphere.Plo -rm -f src/geom/$(DEPDIR)/libmesh_prof_la-surface.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-default_coupling.Plo + -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-disconnected_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-ghost_point_neighbors.Plo - -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-map_based_disconnected_ghosting.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-non_manifold_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-overlap_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-point_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-sibling_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-default_coupling.Plo + -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-disconnected_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-ghost_point_neighbors.Plo - -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-map_based_disconnected_ghosting.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-non_manifold_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-overlap_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-point_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-sibling_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-default_coupling.Plo + -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-disconnected_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-ghost_point_neighbors.Plo - -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-map_based_disconnected_ghosting.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-non_manifold_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-overlap_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-point_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-sibling_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-default_coupling.Plo + -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-disconnected_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-ghost_point_neighbors.Plo - -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-map_based_disconnected_ghosting.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-non_manifold_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-overlap_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-point_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-sibling_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_prof_la-default_coupling.Plo + -rm -f src/ghosting/$(DEPDIR)/libmesh_prof_la-disconnected_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_prof_la-ghost_point_neighbors.Plo - -rm -f src/ghosting/$(DEPDIR)/libmesh_prof_la-map_based_disconnected_ghosting.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_prof_la-non_manifold_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_prof_la-overlap_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_prof_la-point_neighbor_coupling.Plo diff --git a/include/Makefile.in b/include/Makefile.in index a5604645ca8..7d8f86e6939 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -780,7 +780,7 @@ include_HEADERS = \ geom/surface.h \ ghosting/default_coupling.h \ ghosting/ghost_point_neighbors.h \ - ghosting/map_based_disconnected_ghosting.h \ + ghosting/disconnected_neighbor_coupling.h \ ghosting/ghosting_functor.h \ ghosting/non_manifold_coupling.h \ ghosting/overlap_coupling.h \ diff --git a/include/ghosting/disconnected_neighbor_coupling.h b/include/ghosting/disconnected_neighbor_coupling.h new file mode 100644 index 00000000000..42856621166 --- /dev/null +++ b/include/ghosting/disconnected_neighbor_coupling.h @@ -0,0 +1,44 @@ +#ifndef LIBMESH_DISCONNECTED_NEIGHBOR_COUPLING_H +#define LIBMESH_DISCONNECTED_NEIGHBOR_COUPLING_H + +#include "libmesh/ghosting_functor.h" +#include "libmesh/boundary_info.h" + +#include + +namespace libMesh +{ + +class Elem; +class PointLocatorBase; + +/** + * Ghosts elements that lie on + * user-defined disconnected interfaces, + * such as cohesive zone boundaries. + */ +class DisconnectedNeighborCoupling : public GhostingFunctor +{ +public: + using DisconnectedMap = std::unordered_map; + + DisconnectedNeighborCoupling(const MeshBase & mesh) : + GhostingFunctor(mesh), + _dof_coupling(nullptr) + {} + + virtual std::unique_ptr clone () const override + { return std::make_unique(*this); } + + virtual void operator() (const MeshBase::const_element_iterator & range_begin, + const MeshBase::const_element_iterator & range_end, + processor_id_type p, + map_type & coupled_elements) override; + +private: + const CouplingMatrix * _dof_coupling; +}; + +} // namespace libMesh + +#endif // LIBMESH_DISCONNECTED_NEIGHBOR_COUPLING_H diff --git a/include/ghosting/map_based_disconnected_ghosting.h b/include/ghosting/map_based_disconnected_ghosting.h deleted file mode 100644 index cc950ac5948..00000000000 --- a/include/ghosting/map_based_disconnected_ghosting.h +++ /dev/null @@ -1,63 +0,0 @@ -// libMesh Includes -#include "libmesh/ghosting_functor.h" // base class - -// C++ includes -#include // for std::unique_ptr -#include // for std::map - -namespace libMesh -{ - -// Forward declarations -class MeshBase; - -/** - * @brief A GhostingFunctor subclass that uses an externally-provided map - * to define non-manifold neighbor relationships and request mesh-level ghosting. - * - * This functor is designed to handle manually defined disconnected neighbor - * relationships (e.g., those created by add_disconnected_boundaries()), - * ensuring that remote neighbor elements are properly ghosted in parallel. - */ -class MapBasedDisconnectedGhosting : public GhostingFunctor -{ -public: - - // Map from (local element ptr) to neighbor element ptr. - using DisconnectedMap = - std::unordered_map; - - /** - * @brief Constructor. - * Requires the mesh and a reference to the neighbor relationship map. - * Note: The lifetime of the map must exceed the lifetime of this functor. - */ - MapBasedDisconnectedGhosting(MeshBase & mesh, - const DisconnectedMap & map); - - /** - * @brief Virtual destructor. - */ - virtual ~MapBasedDisconnectedGhosting() = default; - - /** - * @brief clone() calls the copy constructor. Required by libMesh. - */ - virtual std::unique_ptr clone () const override; - - /** - * @brief Ghosting operator. - */ - virtual void operator() (const MeshBase::const_element_iterator & range_begin, - const MeshBase::const_element_iterator & range_end, - processor_id_type p, - map_type & coupled_elements) override; - -private: - /** - * @brief A reference to the external map defining neighbor relationships. - */ - const DisconnectedMap & _map; -}; - -} // namespace libMesh diff --git a/include/include_HEADERS b/include/include_HEADERS index e0f4a87805a..3899b7c7992 100644 --- a/include/include_HEADERS +++ b/include/include_HEADERS @@ -176,7 +176,7 @@ include_HEADERS = \ geom/surface.h \ ghosting/default_coupling.h \ ghosting/ghost_point_neighbors.h \ - ghosting/map_based_disconnected_ghosting.h \ + ghosting/disconnected_neighbor_coupling.h \ ghosting/ghosting_functor.h \ ghosting/non_manifold_coupling.h \ ghosting/overlap_coupling.h \ diff --git a/include/libmesh/Makefile.am b/include/libmesh/Makefile.am index 86451b60364..9d7e5579e0d 100644 --- a/include/libmesh/Makefile.am +++ b/include/libmesh/Makefile.am @@ -166,7 +166,7 @@ BUILT_SOURCES = \ surface.h \ default_coupling.h \ ghost_point_neighbors.h \ - map_based_disconnected_ghosting.h \ + disconnected_neighbor_coupling.h \ ghosting_functor.h \ non_manifold_coupling.h \ overlap_coupling.h \ @@ -1098,7 +1098,7 @@ default_coupling.h: $(top_srcdir)/include/ghosting/default_coupling.h ghost_point_neighbors.h: $(top_srcdir)/include/ghosting/ghost_point_neighbors.h $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ -map_based_disconnected_ghosting.h: $(top_srcdir)/include/ghosting/map_based_disconnected_ghosting.h +disconnected_neighbor_coupling.h: $(top_srcdir)/include/ghosting/disconnected_neighbor_coupling.h $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ ghosting_functor.h: $(top_srcdir)/include/ghosting/ghosting_functor.h diff --git a/include/libmesh/Makefile.in b/include/libmesh/Makefile.in index 0c9afb3e9d1..565e4ea608e 100644 --- a/include/libmesh/Makefile.in +++ b/include/libmesh/Makefile.in @@ -576,7 +576,7 @@ BUILT_SOURCES = dirichlet_boundaries.h dof_map.h dof_map_base.h \ node_elem.h node_range.h plane.h point.h reference_elem.h \ remote_elem.h sphere.h stored_range.h surface.h \ default_coupling.h ghost_point_neighbors.h \ - map_based_disconnected_ghosting.h ghosting_functor.h \ + disconnected_neighbor_coupling.h ghosting_functor.h \ non_manifold_coupling.h overlap_coupling.h \ point_neighbor_coupling.h sibling_coupling.h abaqus_io.h \ boundary_info.h boundary_mesh.h checkpoint_io.h \ @@ -1432,7 +1432,7 @@ default_coupling.h: $(top_srcdir)/include/ghosting/default_coupling.h ghost_point_neighbors.h: $(top_srcdir)/include/ghosting/ghost_point_neighbors.h $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ -map_based_disconnected_ghosting.h: $(top_srcdir)/include/ghosting/map_based_disconnected_ghosting.h +disconnected_neighbor_coupling.h: $(top_srcdir)/include/ghosting/disconnected_neighbor_coupling.h $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ ghosting_functor.h: $(top_srcdir)/include/ghosting/ghosting_functor.h diff --git a/src/ghosting/disconnected_neighbor_coupling.C b/src/ghosting/disconnected_neighbor_coupling.C new file mode 100644 index 00000000000..fefa8fdc34a --- /dev/null +++ b/src/ghosting/disconnected_neighbor_coupling.C @@ -0,0 +1,52 @@ +#include "libmesh/disconnected_neighbor_coupling.h" +#include "libmesh/elem.h" +#include "libmesh/mesh_base.h" +#include "libmesh/point_locator_base.h" +#include "libmesh/remote_elem.h" +#include "libmesh/periodic_boundaries.h" + +namespace libMesh +{ + +void DisconnectedNeighborCoupling::operator()( + const MeshBase::const_element_iterator & range_begin, + const MeshBase::const_element_iterator & range_end, + processor_id_type p, + map_type & coupled_elements) +{ + libmesh_assert(_mesh); + auto * db = _mesh->get_disconnected_boundaries(); + if (!db) + return; + + std::unique_ptr point_locator = _mesh->sub_point_locator(); + + // Primary ghosting: elements in range_begin...range_end + for (const auto & elem : as_range(range_begin, range_end)) + if (elem->processor_id() != p) + coupled_elements.emplace(elem, _dof_coupling); + + // Also ghost their disconnected neighbors + for (const auto & elem : as_range(range_begin, range_end)) + for (auto s : elem->side_index_range()) + { + for (const auto & [id, boundary_ptr] : *db) + { + if (!_mesh->get_boundary_info().has_boundary_id(elem, s, id)) + continue; + + unsigned int neigh_side = invalid_uint; + const Elem * neigh = + db->neighbor(id, *point_locator, elem, s, &neigh_side); + + if (!neigh || neigh == remote_elem) + continue; + + if (neigh->processor_id() != p) + coupled_elements.emplace(neigh, _dof_coupling); + } + } +} + + +} // namespace libMesh diff --git a/src/ghosting/map_based_disconnected_ghosting.C b/src/ghosting/map_based_disconnected_ghosting.C deleted file mode 100644 index 1f87ddbbda7..00000000000 --- a/src/ghosting/map_based_disconnected_ghosting.C +++ /dev/null @@ -1,59 +0,0 @@ -#include "libmesh/map_based_disconnected_ghosting.h" - -#include "libmesh/mesh_base.h" -#include "libmesh/elem.h" -#include "libmesh/simple_range.h" - -#include - -namespace libMesh -{ - -MapBasedDisconnectedGhosting:: -MapBasedDisconnectedGhosting(MeshBase & mesh, - const DisconnectedMap & map) : - GhostingFunctor(mesh), - _map(map) -{ -} - -std::unique_ptr -MapBasedDisconnectedGhosting::clone () const -{ - // Create a new unique_ptr by copying this object - return std::make_unique(*this); -} - -void -MapBasedDisconnectedGhosting::operator() ( - const MeshBase::const_element_iterator & range_begin, - const MeshBase::const_element_iterator & range_end, - processor_id_type p, - map_type & coupled_elements) -{ - CouplingMatrix * nullcm = nullptr; - - for (const auto & elem : as_range(range_begin, range_end)) - { - // Add the element from the input range (if not local) - if (elem->processor_id() != p) - coupled_elements.emplace(elem, nullcm); - - // Look up this element's neighbor in the map - auto it = _map.find(elem); - if (it == _map.end()) - continue; - - // Get the neighbor's ID - const Elem * neighbor_ptr = it->second; - - // If the neighbor pointer is valid (meaning it's local or ghosted) - // AND it's not on processor 'p', add it to the couplings. - if (neighbor_ptr && neighbor_ptr->processor_id() != p) - { - coupled_elements.emplace(neighbor_ptr, nullcm); - } - } -} - -} // namespace libMesh diff --git a/src/libmesh_SOURCES b/src/libmesh_SOURCES index 9da6a5204e0..5ca2e22f153 100644 --- a/src/libmesh_SOURCES +++ b/src/libmesh_SOURCES @@ -193,7 +193,7 @@ libmesh_SOURCES = \ src/geom/surface.C \ src/ghosting/default_coupling.C \ src/ghosting/ghost_point_neighbors.C \ - src/ghosting/map_based_disconnected_ghosting.C \ + src/ghosting/disconnected_neighbor_coupling.C \ src/ghosting/non_manifold_coupling.C \ src/ghosting/overlap_coupling.C \ src/ghosting/point_neighbor_coupling.C \ diff --git a/src/mesh/mesh_base.C b/src/mesh/mesh_base.C index 485e006803d..37daa099e21 100644 --- a/src/mesh/mesh_base.C +++ b/src/mesh/mesh_base.C @@ -52,7 +52,6 @@ #include "libmesh/periodic_boundaries.h" #include "libmesh/periodic_boundary.h" - namespace libMesh { diff --git a/src/mesh/unstructured_mesh.C b/src/mesh/unstructured_mesh.C index 27051e28256..f2d8b847237 100644 --- a/src/mesh/unstructured_mesh.C +++ b/src/mesh/unstructured_mesh.C @@ -50,7 +50,6 @@ // for disconnected neighbors #include "libmesh/periodic_boundaries.h" #include "libmesh/periodic_boundary.h" -#include namespace { @@ -1004,7 +1003,6 @@ void UnstructuredMesh::find_neighbors (const bool reset_remote_elements, if (db) { - MapBasedDisconnectedGhosting::DisconnectedMap disconnected_map; // Obtain a point locator std::unique_ptr point_locator = this->sub_point_locator(); @@ -1031,16 +1029,10 @@ void UnstructuredMesh::find_neighbors (const bool reset_remote_elements, auto neigh_changeable = this->elem_ptr(neigh->id()); element->set_neighbor(ms, neigh_changeable); neigh_changeable->set_neighbor(neigh_side, element); - disconnected_map.emplace(element, neigh_changeable); - disconnected_map.emplace(neigh_changeable, element); } } } } - // Now add the ghosting functor to keep these neighbors in sync - auto map_ghosting = - std::make_shared(*this, disconnected_map); - this->add_ghosting_functor(map_ghosting); } #endif // LIBMESH_ENABLE_PERIODIC diff --git a/tests/systems/disconnected_neighbor_test.C b/tests/systems/disconnected_neighbor_test.C index c2a53f9d670..9a777d87377 100644 --- a/tests/systems/disconnected_neighbor_test.C +++ b/tests/systems/disconnected_neighbor_test.C @@ -11,14 +11,12 @@ #include #include #include -#include -#include -#include #include "test_comm.h" #include "libmesh_cppunit.h" -#include +#include + using namespace libMesh; @@ -31,6 +29,8 @@ static const boundary_id_type right_id = 1; static const boundary_id_type interface_left_id = 5; static const boundary_id_type interface_right_id = 6; +static const int nx = 6, ny = 6; + Number heat_exact (const Point & p, const Parameters &, @@ -187,6 +187,7 @@ public: LIBMESH_CPPUNIT_TEST_SUITE( DisconnectedNeighborTest ); #if defined(LIBMESH_HAVE_SOLVER) CPPUNIT_TEST( testTempJump ); + CPPUNIT_TEST( testTempJumpRefine ); #endif CPPUNIT_TEST_SUITE_END(); @@ -266,6 +267,9 @@ private: // assertions later may fail. mesh.allow_renumbering(false); + // Ghost the disconnected elements + mesh.add_ghosting_functor(std::make_unique(mesh)); + mesh.prepare_for_use(); // Check elem 0 (the left element) @@ -320,9 +324,6 @@ private: // Without this, PETSc may report "New nonzero at (a,b) caused a malloc." sys.get_dof_map().set_implicit_neighbor_dofs(true); - sys.get_linear_solver()->set_solver_type(GMRES); - sys.get_linear_solver()->set_preconditioner_type(IDENTITY_PRECOND); - es.init(); sys.solve(); @@ -340,6 +341,174 @@ private: } } } + + + void testTempJumpRefine() + { + Mesh mesh(*TestCommWorld, 2); + build_split_mesh_with_interface(mesh); + + EquationSystems es(mesh); + LinearImplicitSystem & sys = + es.add_system("TempJump"); + + const unsigned int u_var = sys.add_variable("u", FEType(FIRST, LAGRANGE)); + + std::set left_bdy { left_id }; + std::set right_bdy { right_id }; + std::vector vars (1, u_var); + + auto left_fn = [](const Point &, const Parameters &, const std::string &, const std::string &) { return 0.0; }; + auto right_fn = [](const Point &, const Parameters &, const std::string &, const std::string &) { return 1.0 + b; }; + + WrappedFunction left_val(sys, left_fn); + WrappedFunction right_val(sys, right_fn); + + DirichletBoundary bc_left (left_bdy, vars, left_val); + DirichletBoundary bc_right(right_bdy, vars, right_val); + + sys.get_dof_map().add_dirichlet_boundary(bc_left); + sys.get_dof_map().add_dirichlet_boundary(bc_right); + + sys.attach_assemble_function(assemble_temperature_jump); + + // Ensure the DofMap creates sparsity entries between neighboring elements. + // Without this, PETSc may report "New nonzero at (a,b) caused a malloc." + sys.get_dof_map().set_implicit_neighbor_dofs(true); + + es.init(); + sys.solve(); + + // ExodusII_IO(mesh).write_equation_systems("temperature_jump_refine.e", es); + + Parameters params; + + for (Real x=0.; x<=1.; x+=0.05) + { + if (std::abs(x - 0.5) < 1e-12) continue; // skip interface + for (Real y=0.; y<=1.; y+=0.05) + { + Point p(x,y); + const Number exact = heat_exact(p,params,"",""); + const Number approx = sys.point_value(0,p); + LIBMESH_ASSERT_NUMBERS_EQUAL(exact, approx, 1e-2); + } + } + } + + + // The interface is located at x = 0.5; nx must be even (split evenly into left and right subdomains) + void build_split_mesh_with_interface(Mesh &mesh) + { + // Ensure nx is even so the interface aligns with element boundaries + libmesh_error_msg_if(nx % 2 != 0, "nx must be even!"); + + mesh.clear(); + mesh.set_mesh_dimension(2); + + const unsigned nxL = nx / 2; // Number of elements in x-direction (left half) + const unsigned nxR = nx / 2; // Number of elements in x-direction (right half) + const double dx = 1.0 / static_cast(nx); + const double dy = 1.0 / static_cast(ny); + + // --- Generate points for the left subdomain [0, 0.5] --- + // Each row of the left subdomain has (nxL + 1) nodes. + // Total nodes = (nxL + 1) * (ny + 1). + auto nidL = [&](unsigned i, unsigned j) { + return static_cast(j * (nxL + 1) + i); + }; + + for (unsigned j = 0; j <= ny; ++j) + { + const double y = j * dy; + for (unsigned i = 0; i <= nxL; ++i) + { + const double x = i * dx; // At i = nxL, x = 0.5 (interface) + mesh.add_point(Point(x, y), nidL(i, j)); + } + } + + // --- Generate points for the right subdomain [0.5, 1.0] --- + // Interface nodes at x = 0.5 are duplicated with new node IDs. + const dof_id_type baseR = static_cast((nxL + 1) * (ny + 1)); + + auto nidR = [&](unsigned i, unsigned j) { + return static_cast(baseR + j * (nxR + 1) + i); + }; + + for (unsigned j = 0; j <= ny; ++j) + { + const double y = j * dy; + for (unsigned i = 0; i <= nxR; ++i) + { + const double x = 0.5 + i * dx; // At i = 0, x = 0.5 (same coords as left interface, different ID) + mesh.add_point(Point(x, y), nidR(i, j)); + } + } + + BoundaryInfo &boundary = mesh.get_boundary_info(); + + // --- Create left subdomain elements (QUAD4) --- + // Node order: 0 = BL, 1 = BR, 2 = TR, 3 = TL + // Side order: 0 = bottom(0-1), 1 = right(1-2), 2 = top(2-3), 3 = left(3-0) + dof_id_type eid = 0; + for (unsigned j = 0; j < ny; ++j) + { + for (unsigned i = 0; i < nxL; ++i) + { + Elem *e = mesh.add_elem(Elem::build_with_id(QUAD4, eid++)); + e->set_node(0, mesh.node_ptr(nidL(i, j))); + e->set_node(1, mesh.node_ptr(nidL(i+1, j))); + e->set_node(2, mesh.node_ptr(nidL(i+1, j+1))); + e->set_node(3, mesh.node_ptr(nidL(i, j+1))); + + // Left outer boundary (i == 0 -> side 3) + if (i == 0) + boundary.add_side(e, 3, left_id); + + // Interface (left side) boundary (i == nxL - 1 -> side 1) + if (i == nxL - 1) + boundary.add_side(e, 1, interface_left_id); + } + } + + // --- Create right subdomain elements (QUAD4) --- + for (unsigned j = 0; j < ny; ++j) + { + for (unsigned i = 0; i < nxR; ++i) + { + Elem *e = mesh.add_elem(Elem::build_with_id(QUAD4, eid++)); + e->set_node(0, mesh.node_ptr(nidR(i, j))); + e->set_node(1, mesh.node_ptr(nidR(i+1, j))); + e->set_node(2, mesh.node_ptr(nidR(i+1, j+1))); + e->set_node(3, mesh.node_ptr(nidR(i, j+1))); + + // Interface (right side) boundary (i == 0 -> side 3) + if (i == 0) + boundary.add_side(e, 3, interface_right_id); + + // Right outer boundary (i == nxR - 1 -> side 1) + if (i == nxR - 1) + boundary.add_side(e, 1, right_id); + } + } + + // --- Assign human-readable boundary names --- + boundary.sideset_name(left_id) = "left_boundary"; + boundary.sideset_name(right_id) = "right_boundary"; + boundary.sideset_name(interface_left_id) = "interface_left"; + boundary.sideset_name(interface_right_id) = "interface_right"; + + + // This is the key testing step: inform libMesh about the disconnected boundaries + // And, in `prepare_for_use()`, libMesh will set up the disconnected neighbor relationships. + mesh.add_disconnected_boundaries(interface_left_id, interface_right_id, RealVectorValue(0.0, 0.0, 0.0)); + + // Ghost the disconnected elements + mesh.add_ghosting_functor(std::make_unique(mesh)); + + mesh.prepare_for_use(); + } }; CPPUNIT_TEST_SUITE_REGISTRATION( DisconnectedNeighborTest ); From 53cd73ad17646e2974a312fa3deed09482a5a2d7 Mon Sep 17 00:00:00 2001 From: Cheng-Hau Yang Date: Tue, 28 Oct 2025 16:18:35 -0500 Subject: [PATCH 14/26] add the ghost functor directly inside prepare_for_use()/find_neighbors() --- src/mesh/unstructured_mesh.C | 5 +++++ tests/systems/disconnected_neighbor_test.C | 21 ++++----------------- 2 files changed, 9 insertions(+), 17 deletions(-) diff --git a/src/mesh/unstructured_mesh.C b/src/mesh/unstructured_mesh.C index f2d8b847237..df091b41ce0 100644 --- a/src/mesh/unstructured_mesh.C +++ b/src/mesh/unstructured_mesh.C @@ -51,6 +51,8 @@ #include "libmesh/periodic_boundaries.h" #include "libmesh/periodic_boundary.h" +#include + namespace { using namespace libMesh; @@ -1033,6 +1035,9 @@ void UnstructuredMesh::find_neighbors (const bool reset_remote_elements, } } } + + // Ghost the disconnected elements + this->add_ghosting_functor(std::make_unique(*this)); } #endif // LIBMESH_ENABLE_PERIODIC diff --git a/tests/systems/disconnected_neighbor_test.C b/tests/systems/disconnected_neighbor_test.C index 9a777d87377..c460e84241e 100644 --- a/tests/systems/disconnected_neighbor_test.C +++ b/tests/systems/disconnected_neighbor_test.C @@ -15,9 +15,6 @@ #include "test_comm.h" #include "libmesh_cppunit.h" -#include - - using namespace libMesh; static const Real b = 1.0; @@ -267,9 +264,6 @@ private: // assertions later may fail. mesh.allow_renumbering(false); - // Ghost the disconnected elements - mesh.add_ghosting_functor(std::make_unique(mesh)); - mesh.prepare_for_use(); // Check elem 0 (the left element) @@ -358,12 +352,10 @@ private: std::set right_bdy { right_id }; std::vector vars (1, u_var); - auto left_fn = [](const Point &, const Parameters &, const std::string &, const std::string &) { return 0.0; }; - auto right_fn = [](const Point &, const Parameters &, const std::string &, const std::string &) { return 1.0 + b; }; - - WrappedFunction left_val(sys, left_fn); - WrappedFunction right_val(sys, right_fn); - + Parameters params; + params.set("b") = b; + WrappedFunction left_val(sys, &left_solution_fn); + WrappedFunction right_val(sys, &right_solution_fn, ¶ms); DirichletBoundary bc_left (left_bdy, vars, left_val); DirichletBoundary bc_right(right_bdy, vars, right_val); @@ -381,8 +373,6 @@ private: // ExodusII_IO(mesh).write_equation_systems("temperature_jump_refine.e", es); - Parameters params; - for (Real x=0.; x<=1.; x+=0.05) { if (std::abs(x - 0.5) < 1e-12) continue; // skip interface @@ -504,9 +494,6 @@ private: // And, in `prepare_for_use()`, libMesh will set up the disconnected neighbor relationships. mesh.add_disconnected_boundaries(interface_left_id, interface_right_id, RealVectorValue(0.0, 0.0, 0.0)); - // Ghost the disconnected elements - mesh.add_ghosting_functor(std::make_unique(mesh)); - mesh.prepare_for_use(); } }; From a86e595f912451011283747646ad9f2b16e19f76 Mon Sep 17 00:00:00 2001 From: Cheng-Hau Yang Date: Wed, 29 Oct 2025 12:33:05 -0500 Subject: [PATCH 15/26] Fix distributed test failures in internal-boundary - Ensure boundary ID is added to a locally owned elem - Select valid left-bottom elem with neighbor for internal side --- tests/mesh/boundary_info.C | 39 ++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/tests/mesh/boundary_info.C b/tests/mesh/boundary_info.C index ac2128d4b31..1c2106d096b 100644 --- a/tests/mesh/boundary_info.C +++ b/tests/mesh/boundary_info.C @@ -1127,30 +1127,33 @@ public: BoundaryInfo & bi = mesh.get_boundary_info(); - // Select an element on the left side of the interior boundary - // (average x-coordinate < 0.5). - Elem * left_elem = nullptr; + const unsigned int internal_side = 1; // east side for left elems + const boundary_id_type BID = 7; + + mesh.prepare_for_use(); + + Elem * left_bottom_elem = nullptr; for (auto & elem : mesh.active_element_ptr_range()) - { - if (elem->vertex_average()(0) < 0.5) { - left_elem = elem; - break; - } - } + if (elem->processor_id() != mesh.processor_id()) + continue; - CPPUNIT_ASSERT(left_elem); - unsigned int internal_side = 1; - CPPUNIT_ASSERT(left_elem->neighbor_ptr(internal_side) != nullptr); + const Point c = elem->vertex_average(); + if (c(0) < 0.5 && c(1) < 0.5 && elem->neighbor_ptr(internal_side) != nullptr) + { + left_bottom_elem = elem; + break; + } + } - // Assign a custom boundary ID on this internal side. - boundary_id_type BID = 7; - bi.add_side(left_elem, internal_side, BID); - mesh.prepare_for_use(); + if (left_bottom_elem) + { + bi.add_side(left_bottom_elem, internal_side, BID); - unsigned int found_side = bi.side_with_boundary_id(left_elem, BID); - CPPUNIT_ASSERT_EQUAL(internal_side, found_side); + const unsigned int found_side = bi.side_with_boundary_id(left_bottom_elem, BID); + CPPUNIT_ASSERT_EQUAL(internal_side, found_side); + } } From 92aeb998e8ff772968d330026603788e088a3557 Mon Sep 17 00:00:00 2001 From: Cheng-Hau Yang Date: Thu, 30 Oct 2025 11:41:49 -0500 Subject: [PATCH 16/26] Protect MeshRefinement from disconnected boundary meshes and add regression test. - Added safety check in MeshRefinement::refine_elements() to prevent refinement when disconnected boundary interfaces are present. Refinement on such meshes can produce invalid neighbor relations (e.g., rev = invalid_uint). - Extended disconnected_neighbor_test with new testTempJumpLocalRefineFail() that verifies the exception is thrown. --- src/mesh/mesh_refinement.C | 19 ++++++++++ tests/systems/disconnected_neighbor_test.C | 40 +++++++++++++++++++++- 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/src/mesh/mesh_refinement.C b/src/mesh/mesh_refinement.C index 9d7e9890dcd..0561fb38afb 100644 --- a/src/mesh/mesh_refinement.C +++ b/src/mesh/mesh_refinement.C @@ -684,6 +684,25 @@ bool MeshRefinement::refine_elements () // This function must be run on all processors at once parallel_object_only(); + // Prevent refinement when the mesh has disconnected boundaries. + // + // Disconnected boundary interfaces violate the topological continuity + // assumed by the refinement algorithm. Refinement on such meshes can + // produce invalid neighbor relationships (for example reverse indices + // equal to invalid_uint), which may trigger assertions like + // `rev < neigh->n_neighbors()` or corrupt neighbor data. + // + // For safety, refinement is disabled while disconnected boundaries are + // present. + if (_mesh.get_disconnected_boundaries()) + { + libmesh_error_msg( + "Mesh contains disconnected boundary interfaces; refinement is disabled.\n" + "MeshRefinement::refine_elements() cannot proceed because disconnected\n" + "boundaries may produce invalid neighbor relations. Please remove or\n" + "repair disconnected boundary interfaces before attempting refinement."); + } + if (_face_level_mismatch_limit) libmesh_assert(test_level_one(true)); diff --git a/tests/systems/disconnected_neighbor_test.C b/tests/systems/disconnected_neighbor_test.C index c460e84241e..a5815273fb4 100644 --- a/tests/systems/disconnected_neighbor_test.C +++ b/tests/systems/disconnected_neighbor_test.C @@ -15,6 +15,8 @@ #include "test_comm.h" #include "libmesh_cppunit.h" +#include "libmesh/mesh_refinement.h" + using namespace libMesh; static const Real b = 1.0; @@ -185,6 +187,10 @@ public: #if defined(LIBMESH_HAVE_SOLVER) CPPUNIT_TEST( testTempJump ); CPPUNIT_TEST( testTempJumpRefine ); + // This test intentionally triggers find_neighbors() consistency check + // failure after AMR refinement across disconnected interfaces. + // Expected: libmesh_assert_valid_neighbors() fails. + CPPUNIT_TEST_EXCEPTION(testTempJumpLocalRefineFail, std::exception); #endif CPPUNIT_TEST_SUITE_END(); @@ -387,8 +393,22 @@ private: } + void testTempJumpLocalRefineFail() + { + try + { + Mesh mesh(*TestCommWorld, 2); + build_split_mesh_with_interface(mesh, true); + } + catch (const std::exception &e) + { + CPPUNIT_ASSERT(std::string(e.what()).find("Mesh contains disconnected boundary interfaces") != std::string::npos); + throw; + } + } + // The interface is located at x = 0.5; nx must be even (split evenly into left and right subdomains) - void build_split_mesh_with_interface(Mesh &mesh) + void build_split_mesh_with_interface(Mesh &mesh, bool test_local_refinement = false) { // Ensure nx is even so the interface aligns with element boundaries libmesh_error_msg_if(nx % 2 != 0, "nx must be even!"); @@ -495,7 +515,25 @@ private: mesh.add_disconnected_boundaries(interface_left_id, interface_right_id, RealVectorValue(0.0, 0.0, 0.0)); mesh.prepare_for_use(); + +#if LIBMESH_ENABLE_AMR + if (test_local_refinement) + { + // set refinement flags + for (auto & elem : mesh.element_ptr_range()) + { + const Real xmid = elem->vertex_average()(0); + if ((xmid < 0.5 && xmid > 0.5 - dx) || + (xmid > 0.5 && xmid < 0.5 + dx)) + elem->set_refinement_flag(Elem::REFINE); + } + + // refine + MeshRefinement(mesh).refine_elements(); + } +#endif } + }; CPPUNIT_TEST_SUITE_REGISTRATION( DisconnectedNeighborTest ); From 38787d807b7e3d74493e7355ba760834044f3c40 Mon Sep 17 00:00:00 2001 From: Cheng-Hau Yang Date: Mon, 3 Nov 2025 12:22:41 -0600 Subject: [PATCH 17/26] add amr flag for a unit test --- tests/systems/disconnected_neighbor_test.C | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/systems/disconnected_neighbor_test.C b/tests/systems/disconnected_neighbor_test.C index a5815273fb4..cb067497f8c 100644 --- a/tests/systems/disconnected_neighbor_test.C +++ b/tests/systems/disconnected_neighbor_test.C @@ -187,10 +187,12 @@ public: #if defined(LIBMESH_HAVE_SOLVER) CPPUNIT_TEST( testTempJump ); CPPUNIT_TEST( testTempJumpRefine ); +#ifdef LIBMESH_ENABLE_AMR // This test intentionally triggers find_neighbors() consistency check // failure after AMR refinement across disconnected interfaces. // Expected: libmesh_assert_valid_neighbors() fails. CPPUNIT_TEST_EXCEPTION(testTempJumpLocalRefineFail, std::exception); +#endif #endif CPPUNIT_TEST_SUITE_END(); From d100e50ca0353fd91b2dda9481a7913bda762d26 Mon Sep 17 00:00:00 2001 From: Cheng-Hau Yang Date: Mon, 3 Nov 2025 15:34:10 -0600 Subject: [PATCH 18/26] Refactor: Fold DisconnectedNeighborCoupling into GhostPointNeighbors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Refactored the ghosting workflow following @roystgnr’s review. Removed the separate DisconnectedNeighborCoupling class and integrated its logic directly into GhostPointNeighbors for a cleaner and more consistent approach. This avoids duplicate functor additions in `UnstructuredMesh::find_neighbors`. - Deleted `DisconnectedNeighborCoupling.[C,h]` and updated Makefiles - Moved all related logic into `GhostPointNeighbors::operator()` - Added move assignment and equality checks for `_disconnected_boundary_pairs` in `MeshBase`. This was a great catch from Roy and is needed for mesh cloning/comparisons to work correctly. - Added `libmesh_deprecated()` warning to `UnstructuredMesh::stitching_helper` for disconnected meshes - Replaced a `libmesh_error_msg` in `MeshRefinement` with `libmesh_not_implemented_msg` - Updated unit tests: added `LOG_UNIT_TEST` for `disconnected_neighbor_test` --- Makefile.in | 83 +------------------ build-aux/ltmain.sh | 27 +----- include/Makefile.in | 3 +- .../ghosting/disconnected_neighbor_coupling.h | 44 ---------- include/include_HEADERS | 3 +- include/libmesh/Makefile.am | 4 - include/libmesh/Makefile.in | 6 +- include/mesh/mesh_base.h | 2 +- src/ghosting/disconnected_neighbor_coupling.C | 52 ------------ src/ghosting/ghost_point_neighbors.C | 29 ++++++- src/libmesh_SOURCES | 3 +- src/mesh/mesh_base.C | 10 +++ src/mesh/mesh_refinement.C | 7 +- src/mesh/unstructured_mesh.C | 14 ++-- tests/systems/disconnected_neighbor_test.C | 8 +- 15 files changed, 63 insertions(+), 232 deletions(-) delete mode 100644 include/ghosting/disconnected_neighbor_coupling.h delete mode 100644 src/ghosting/disconnected_neighbor_coupling.C diff --git a/Makefile.in b/Makefile.in index 2fe3fb2ae5f..a81e9357c4e 100644 --- a/Makefile.in +++ b/Makefile.in @@ -375,7 +375,6 @@ am__libmesh_dbg_la_SOURCES_DIST = src/base/dirichlet_boundary.C \ src/geom/sphere.C src/geom/surface.C \ src/ghosting/default_coupling.C \ src/ghosting/ghost_point_neighbors.C \ - src/ghosting/disconnected_neighbor_coupling.C \ src/ghosting/non_manifold_coupling.C \ src/ghosting/overlap_coupling.C \ src/ghosting/point_neighbor_coupling.C \ @@ -786,7 +785,6 @@ am__objects_1 = src/base/libmesh_dbg_la-dirichlet_boundary.lo \ src/geom/libmesh_dbg_la-surface.lo \ src/ghosting/libmesh_dbg_la-default_coupling.lo \ src/ghosting/libmesh_dbg_la-ghost_point_neighbors.lo \ - src/ghosting/libmesh_dbg_la-disconnected_neighbor_coupling.lo \ src/ghosting/libmesh_dbg_la-non_manifold_coupling.lo \ src/ghosting/libmesh_dbg_la-overlap_coupling.lo \ src/ghosting/libmesh_dbg_la-point_neighbor_coupling.lo \ @@ -1191,7 +1189,6 @@ am__libmesh_devel_la_SOURCES_DIST = src/base/dirichlet_boundary.C \ src/geom/sphere.C src/geom/surface.C \ src/ghosting/default_coupling.C \ src/ghosting/ghost_point_neighbors.C \ - src/ghosting/disconnected_neighbor_coupling.C \ src/ghosting/non_manifold_coupling.C \ src/ghosting/overlap_coupling.C \ src/ghosting/point_neighbor_coupling.C \ @@ -1601,7 +1598,6 @@ am__objects_2 = src/base/libmesh_devel_la-dirichlet_boundary.lo \ src/geom/libmesh_devel_la-surface.lo \ src/ghosting/libmesh_devel_la-default_coupling.lo \ src/ghosting/libmesh_devel_la-ghost_point_neighbors.lo \ - src/ghosting/libmesh_devel_la-disconnected_neighbor_coupling.lo \ src/ghosting/libmesh_devel_la-non_manifold_coupling.lo \ src/ghosting/libmesh_devel_la-overlap_coupling.lo \ src/ghosting/libmesh_devel_la-point_neighbor_coupling.lo \ @@ -2003,7 +1999,6 @@ am__libmesh_oprof_la_SOURCES_DIST = src/base/dirichlet_boundary.C \ src/geom/sphere.C src/geom/surface.C \ src/ghosting/default_coupling.C \ src/ghosting/ghost_point_neighbors.C \ - src/ghosting/disconnected_neighbor_coupling.C \ src/ghosting/non_manifold_coupling.C \ src/ghosting/overlap_coupling.C \ src/ghosting/point_neighbor_coupling.C \ @@ -2413,7 +2408,6 @@ am__objects_3 = src/base/libmesh_oprof_la-dirichlet_boundary.lo \ src/geom/libmesh_oprof_la-surface.lo \ src/ghosting/libmesh_oprof_la-default_coupling.lo \ src/ghosting/libmesh_oprof_la-ghost_point_neighbors.lo \ - src/ghosting/libmesh_oprof_la-disconnected_neighbor_coupling.lo \ src/ghosting/libmesh_oprof_la-non_manifold_coupling.lo \ src/ghosting/libmesh_oprof_la-overlap_coupling.lo \ src/ghosting/libmesh_oprof_la-point_neighbor_coupling.lo \ @@ -2815,7 +2809,6 @@ am__libmesh_opt_la_SOURCES_DIST = src/base/dirichlet_boundary.C \ src/geom/sphere.C src/geom/surface.C \ src/ghosting/default_coupling.C \ src/ghosting/ghost_point_neighbors.C \ - src/ghosting/disconnected_neighbor_coupling.C \ src/ghosting/non_manifold_coupling.C \ src/ghosting/overlap_coupling.C \ src/ghosting/point_neighbor_coupling.C \ @@ -3225,7 +3218,6 @@ am__objects_4 = src/base/libmesh_opt_la-dirichlet_boundary.lo \ src/geom/libmesh_opt_la-surface.lo \ src/ghosting/libmesh_opt_la-default_coupling.lo \ src/ghosting/libmesh_opt_la-ghost_point_neighbors.lo \ - src/ghosting/libmesh_opt_la-disconnected_neighbor_coupling.lo \ src/ghosting/libmesh_opt_la-non_manifold_coupling.lo \ src/ghosting/libmesh_opt_la-overlap_coupling.lo \ src/ghosting/libmesh_opt_la-point_neighbor_coupling.lo \ @@ -3626,7 +3618,6 @@ am__libmesh_prof_la_SOURCES_DIST = src/base/dirichlet_boundary.C \ src/geom/sphere.C src/geom/surface.C \ src/ghosting/default_coupling.C \ src/ghosting/ghost_point_neighbors.C \ - src/ghosting/disconnected_neighbor_coupling.C \ src/ghosting/non_manifold_coupling.C \ src/ghosting/overlap_coupling.C \ src/ghosting/point_neighbor_coupling.C \ @@ -4036,7 +4027,6 @@ am__objects_5 = src/base/libmesh_prof_la-dirichlet_boundary.lo \ src/geom/libmesh_prof_la-surface.lo \ src/ghosting/libmesh_prof_la-default_coupling.lo \ src/ghosting/libmesh_prof_la-ghost_point_neighbors.lo \ - src/ghosting/libmesh_prof_la-disconnected_neighbor_coupling.lo \ src/ghosting/libmesh_prof_la-non_manifold_coupling.lo \ src/ghosting/libmesh_prof_la-overlap_coupling.lo \ src/ghosting/libmesh_prof_la-point_neighbor_coupling.lo \ @@ -5766,35 +5756,30 @@ am__depfiles_remade = src/apps/$(DEPDIR)/amr_dbg-amr.Po \ src/geom/$(DEPDIR)/libmesh_prof_la-sphere.Plo \ src/geom/$(DEPDIR)/libmesh_prof_la-surface.Plo \ src/ghosting/$(DEPDIR)/libmesh_dbg_la-default_coupling.Plo \ - src/ghosting/$(DEPDIR)/libmesh_dbg_la-disconnected_neighbor_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_dbg_la-ghost_point_neighbors.Plo \ src/ghosting/$(DEPDIR)/libmesh_dbg_la-non_manifold_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_dbg_la-overlap_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_dbg_la-point_neighbor_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_dbg_la-sibling_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_devel_la-default_coupling.Plo \ - src/ghosting/$(DEPDIR)/libmesh_devel_la-disconnected_neighbor_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_devel_la-ghost_point_neighbors.Plo \ src/ghosting/$(DEPDIR)/libmesh_devel_la-non_manifold_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_devel_la-overlap_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_devel_la-point_neighbor_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_devel_la-sibling_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_oprof_la-default_coupling.Plo \ - src/ghosting/$(DEPDIR)/libmesh_oprof_la-disconnected_neighbor_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_oprof_la-ghost_point_neighbors.Plo \ src/ghosting/$(DEPDIR)/libmesh_oprof_la-non_manifold_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_oprof_la-overlap_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_oprof_la-point_neighbor_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_oprof_la-sibling_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_opt_la-default_coupling.Plo \ - src/ghosting/$(DEPDIR)/libmesh_opt_la-disconnected_neighbor_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_opt_la-ghost_point_neighbors.Plo \ src/ghosting/$(DEPDIR)/libmesh_opt_la-non_manifold_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_opt_la-overlap_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_opt_la-point_neighbor_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_opt_la-sibling_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_prof_la-default_coupling.Plo \ - src/ghosting/$(DEPDIR)/libmesh_prof_la-disconnected_neighbor_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_prof_la-ghost_point_neighbors.Plo \ src/ghosting/$(DEPDIR)/libmesh_prof_la-non_manifold_coupling.Plo \ src/ghosting/$(DEPDIR)/libmesh_prof_la-overlap_coupling.Plo \ @@ -8056,7 +8041,6 @@ libmesh_SOURCES = \ src/geom/surface.C \ src/ghosting/default_coupling.C \ src/ghosting/ghost_point_neighbors.C \ - src/ghosting/disconnected_neighbor_coupling.C \ src/ghosting/non_manifold_coupling.C \ src/ghosting/overlap_coupling.C \ src/ghosting/point_neighbor_coupling.C \ @@ -8339,7 +8323,7 @@ libmesh_SOURCES = \ src/utils/tree.C \ src/utils/tree_node.C \ src/utils/utility.C \ - src/utils/xdr_cxx.C + src/utils/xdr_cxx.C # A convenience library to hold proper libMesh @@ -9239,9 +9223,6 @@ src/ghosting/libmesh_dbg_la-default_coupling.lo: \ src/ghosting/libmesh_dbg_la-ghost_point_neighbors.lo: \ src/ghosting/$(am__dirstamp) \ src/ghosting/$(DEPDIR)/$(am__dirstamp) -src/ghosting/libmesh_dbg_la-disconnected_neighbor_coupling.lo: \ - src/ghosting/$(am__dirstamp) \ - src/ghosting/$(DEPDIR)/$(am__dirstamp) src/ghosting/libmesh_dbg_la-non_manifold_coupling.lo: \ src/ghosting/$(am__dirstamp) \ src/ghosting/$(DEPDIR)/$(am__dirstamp) @@ -10477,9 +10458,6 @@ src/ghosting/libmesh_devel_la-default_coupling.lo: \ src/ghosting/libmesh_devel_la-ghost_point_neighbors.lo: \ src/ghosting/$(am__dirstamp) \ src/ghosting/$(DEPDIR)/$(am__dirstamp) -src/ghosting/libmesh_devel_la-disconnected_neighbor_coupling.lo: \ - src/ghosting/$(am__dirstamp) \ - src/ghosting/$(DEPDIR)/$(am__dirstamp) src/ghosting/libmesh_devel_la-non_manifold_coupling.lo: \ src/ghosting/$(am__dirstamp) \ src/ghosting/$(DEPDIR)/$(am__dirstamp) @@ -11652,9 +11630,6 @@ src/ghosting/libmesh_oprof_la-default_coupling.lo: \ src/ghosting/libmesh_oprof_la-ghost_point_neighbors.lo: \ src/ghosting/$(am__dirstamp) \ src/ghosting/$(DEPDIR)/$(am__dirstamp) -src/ghosting/libmesh_oprof_la-disconnected_neighbor_coupling.lo: \ - src/ghosting/$(am__dirstamp) \ - src/ghosting/$(DEPDIR)/$(am__dirstamp) src/ghosting/libmesh_oprof_la-non_manifold_coupling.lo: \ src/ghosting/$(am__dirstamp) \ src/ghosting/$(DEPDIR)/$(am__dirstamp) @@ -12827,9 +12802,6 @@ src/ghosting/libmesh_opt_la-default_coupling.lo: \ src/ghosting/libmesh_opt_la-ghost_point_neighbors.lo: \ src/ghosting/$(am__dirstamp) \ src/ghosting/$(DEPDIR)/$(am__dirstamp) -src/ghosting/libmesh_opt_la-disconnected_neighbor_coupling.lo: \ - src/ghosting/$(am__dirstamp) \ - src/ghosting/$(DEPDIR)/$(am__dirstamp) src/ghosting/libmesh_opt_la-non_manifold_coupling.lo: \ src/ghosting/$(am__dirstamp) \ src/ghosting/$(DEPDIR)/$(am__dirstamp) @@ -13999,9 +13971,6 @@ src/ghosting/libmesh_prof_la-default_coupling.lo: \ src/ghosting/libmesh_prof_la-ghost_point_neighbors.lo: \ src/ghosting/$(am__dirstamp) \ src/ghosting/$(DEPDIR)/$(am__dirstamp) -src/ghosting/libmesh_prof_la-disconnected_neighbor_coupling.lo: \ - src/ghosting/$(am__dirstamp) \ - src/ghosting/$(DEPDIR)/$(am__dirstamp) src/ghosting/libmesh_prof_la-non_manifold_coupling.lo: \ src/ghosting/$(am__dirstamp) \ src/ghosting/$(DEPDIR)/$(am__dirstamp) @@ -16280,35 +16249,30 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@src/geom/$(DEPDIR)/libmesh_prof_la-sphere.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/geom/$(DEPDIR)/libmesh_prof_la-surface.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_dbg_la-default_coupling.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_dbg_la-disconnected_neighbor_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_dbg_la-ghost_point_neighbors.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_dbg_la-non_manifold_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_dbg_la-overlap_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_dbg_la-point_neighbor_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_dbg_la-sibling_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_devel_la-default_coupling.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_devel_la-disconnected_neighbor_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_devel_la-ghost_point_neighbors.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_devel_la-non_manifold_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_devel_la-overlap_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_devel_la-point_neighbor_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_devel_la-sibling_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_oprof_la-default_coupling.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_oprof_la-disconnected_neighbor_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_oprof_la-ghost_point_neighbors.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_oprof_la-non_manifold_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_oprof_la-overlap_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_oprof_la-point_neighbor_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_oprof_la-sibling_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_opt_la-default_coupling.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_opt_la-disconnected_neighbor_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_opt_la-ghost_point_neighbors.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_opt_la-non_manifold_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_opt_la-overlap_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_opt_la-point_neighbor_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_opt_la-sibling_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_prof_la-default_coupling.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_prof_la-disconnected_neighbor_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_prof_la-ghost_point_neighbors.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_prof_la-non_manifold_coupling.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/ghosting/$(DEPDIR)/libmesh_prof_la-overlap_coupling.Plo@am__quote@ # am--include-marker @@ -19084,13 +19048,6 @@ src/ghosting/libmesh_dbg_la-ghost_point_neighbors.lo: src/ghosting/ghost_point_n @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -c -o src/ghosting/libmesh_dbg_la-ghost_point_neighbors.lo `test -f 'src/ghosting/ghost_point_neighbors.C' || echo '$(srcdir)/'`src/ghosting/ghost_point_neighbors.C -src/ghosting/libmesh_dbg_la-disconnected_neighbor_coupling.lo: src/ghosting/disconnected_neighbor_coupling.C -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -MT src/ghosting/libmesh_dbg_la-disconnected_neighbor_coupling.lo -MD -MP -MF src/ghosting/$(DEPDIR)/libmesh_dbg_la-disconnected_neighbor_coupling.Tpo -c -o src/ghosting/libmesh_dbg_la-disconnected_neighbor_coupling.lo `test -f 'src/ghosting/disconnected_neighbor_coupling.C' || echo '$(srcdir)/'`src/ghosting/disconnected_neighbor_coupling.C -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/ghosting/$(DEPDIR)/libmesh_dbg_la-disconnected_neighbor_coupling.Tpo src/ghosting/$(DEPDIR)/libmesh_dbg_la-disconnected_neighbor_coupling.Plo -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/ghosting/disconnected_neighbor_coupling.C' object='src/ghosting/libmesh_dbg_la-disconnected_neighbor_coupling.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -c -o src/ghosting/libmesh_dbg_la-disconnected_neighbor_coupling.lo `test -f 'src/ghosting/disconnected_neighbor_coupling.C' || echo '$(srcdir)/'`src/ghosting/disconnected_neighbor_coupling.C - src/ghosting/libmesh_dbg_la-non_manifold_coupling.lo: src/ghosting/non_manifold_coupling.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -MT src/ghosting/libmesh_dbg_la-non_manifold_coupling.lo -MD -MP -MF src/ghosting/$(DEPDIR)/libmesh_dbg_la-non_manifold_coupling.Tpo -c -o src/ghosting/libmesh_dbg_la-non_manifold_coupling.lo `test -f 'src/ghosting/non_manifold_coupling.C' || echo '$(srcdir)/'`src/ghosting/non_manifold_coupling.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/ghosting/$(DEPDIR)/libmesh_dbg_la-non_manifold_coupling.Tpo src/ghosting/$(DEPDIR)/libmesh_dbg_la-non_manifold_coupling.Plo @@ -22416,13 +22373,6 @@ src/ghosting/libmesh_devel_la-ghost_point_neighbors.lo: src/ghosting/ghost_point @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -c -o src/ghosting/libmesh_devel_la-ghost_point_neighbors.lo `test -f 'src/ghosting/ghost_point_neighbors.C' || echo '$(srcdir)/'`src/ghosting/ghost_point_neighbors.C -src/ghosting/libmesh_devel_la-disconnected_neighbor_coupling.lo: src/ghosting/disconnected_neighbor_coupling.C -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -MT src/ghosting/libmesh_devel_la-disconnected_neighbor_coupling.lo -MD -MP -MF src/ghosting/$(DEPDIR)/libmesh_devel_la-disconnected_neighbor_coupling.Tpo -c -o src/ghosting/libmesh_devel_la-disconnected_neighbor_coupling.lo `test -f 'src/ghosting/disconnected_neighbor_coupling.C' || echo '$(srcdir)/'`src/ghosting/disconnected_neighbor_coupling.C -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/ghosting/$(DEPDIR)/libmesh_devel_la-disconnected_neighbor_coupling.Tpo src/ghosting/$(DEPDIR)/libmesh_devel_la-disconnected_neighbor_coupling.Plo -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/ghosting/disconnected_neighbor_coupling.C' object='src/ghosting/libmesh_devel_la-disconnected_neighbor_coupling.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -c -o src/ghosting/libmesh_devel_la-disconnected_neighbor_coupling.lo `test -f 'src/ghosting/disconnected_neighbor_coupling.C' || echo '$(srcdir)/'`src/ghosting/disconnected_neighbor_coupling.C - src/ghosting/libmesh_devel_la-non_manifold_coupling.lo: src/ghosting/non_manifold_coupling.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -MT src/ghosting/libmesh_devel_la-non_manifold_coupling.lo -MD -MP -MF src/ghosting/$(DEPDIR)/libmesh_devel_la-non_manifold_coupling.Tpo -c -o src/ghosting/libmesh_devel_la-non_manifold_coupling.lo `test -f 'src/ghosting/non_manifold_coupling.C' || echo '$(srcdir)/'`src/ghosting/non_manifold_coupling.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/ghosting/$(DEPDIR)/libmesh_devel_la-non_manifold_coupling.Tpo src/ghosting/$(DEPDIR)/libmesh_devel_la-non_manifold_coupling.Plo @@ -25748,13 +25698,6 @@ src/ghosting/libmesh_oprof_la-ghost_point_neighbors.lo: src/ghosting/ghost_point @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/ghosting/libmesh_oprof_la-ghost_point_neighbors.lo `test -f 'src/ghosting/ghost_point_neighbors.C' || echo '$(srcdir)/'`src/ghosting/ghost_point_neighbors.C -src/ghosting/libmesh_oprof_la-disconnected_neighbor_coupling.lo: src/ghosting/disconnected_neighbor_coupling.C -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -MT src/ghosting/libmesh_oprof_la-disconnected_neighbor_coupling.lo -MD -MP -MF src/ghosting/$(DEPDIR)/libmesh_oprof_la-disconnected_neighbor_coupling.Tpo -c -o src/ghosting/libmesh_oprof_la-disconnected_neighbor_coupling.lo `test -f 'src/ghosting/disconnected_neighbor_coupling.C' || echo '$(srcdir)/'`src/ghosting/disconnected_neighbor_coupling.C -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/ghosting/$(DEPDIR)/libmesh_oprof_la-disconnected_neighbor_coupling.Tpo src/ghosting/$(DEPDIR)/libmesh_oprof_la-disconnected_neighbor_coupling.Plo -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/ghosting/disconnected_neighbor_coupling.C' object='src/ghosting/libmesh_oprof_la-disconnected_neighbor_coupling.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/ghosting/libmesh_oprof_la-disconnected_neighbor_coupling.lo `test -f 'src/ghosting/disconnected_neighbor_coupling.C' || echo '$(srcdir)/'`src/ghosting/disconnected_neighbor_coupling.C - src/ghosting/libmesh_oprof_la-non_manifold_coupling.lo: src/ghosting/non_manifold_coupling.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -MT src/ghosting/libmesh_oprof_la-non_manifold_coupling.lo -MD -MP -MF src/ghosting/$(DEPDIR)/libmesh_oprof_la-non_manifold_coupling.Tpo -c -o src/ghosting/libmesh_oprof_la-non_manifold_coupling.lo `test -f 'src/ghosting/non_manifold_coupling.C' || echo '$(srcdir)/'`src/ghosting/non_manifold_coupling.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/ghosting/$(DEPDIR)/libmesh_oprof_la-non_manifold_coupling.Tpo src/ghosting/$(DEPDIR)/libmesh_oprof_la-non_manifold_coupling.Plo @@ -29080,13 +29023,6 @@ src/ghosting/libmesh_opt_la-ghost_point_neighbors.lo: src/ghosting/ghost_point_n @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -c -o src/ghosting/libmesh_opt_la-ghost_point_neighbors.lo `test -f 'src/ghosting/ghost_point_neighbors.C' || echo '$(srcdir)/'`src/ghosting/ghost_point_neighbors.C -src/ghosting/libmesh_opt_la-disconnected_neighbor_coupling.lo: src/ghosting/disconnected_neighbor_coupling.C -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -MT src/ghosting/libmesh_opt_la-disconnected_neighbor_coupling.lo -MD -MP -MF src/ghosting/$(DEPDIR)/libmesh_opt_la-disconnected_neighbor_coupling.Tpo -c -o src/ghosting/libmesh_opt_la-disconnected_neighbor_coupling.lo `test -f 'src/ghosting/disconnected_neighbor_coupling.C' || echo '$(srcdir)/'`src/ghosting/disconnected_neighbor_coupling.C -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/ghosting/$(DEPDIR)/libmesh_opt_la-disconnected_neighbor_coupling.Tpo src/ghosting/$(DEPDIR)/libmesh_opt_la-disconnected_neighbor_coupling.Plo -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/ghosting/disconnected_neighbor_coupling.C' object='src/ghosting/libmesh_opt_la-disconnected_neighbor_coupling.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -c -o src/ghosting/libmesh_opt_la-disconnected_neighbor_coupling.lo `test -f 'src/ghosting/disconnected_neighbor_coupling.C' || echo '$(srcdir)/'`src/ghosting/disconnected_neighbor_coupling.C - src/ghosting/libmesh_opt_la-non_manifold_coupling.lo: src/ghosting/non_manifold_coupling.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -MT src/ghosting/libmesh_opt_la-non_manifold_coupling.lo -MD -MP -MF src/ghosting/$(DEPDIR)/libmesh_opt_la-non_manifold_coupling.Tpo -c -o src/ghosting/libmesh_opt_la-non_manifold_coupling.lo `test -f 'src/ghosting/non_manifold_coupling.C' || echo '$(srcdir)/'`src/ghosting/non_manifold_coupling.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/ghosting/$(DEPDIR)/libmesh_opt_la-non_manifold_coupling.Tpo src/ghosting/$(DEPDIR)/libmesh_opt_la-non_manifold_coupling.Plo @@ -32412,13 +32348,6 @@ src/ghosting/libmesh_prof_la-ghost_point_neighbors.lo: src/ghosting/ghost_point_ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/ghosting/libmesh_prof_la-ghost_point_neighbors.lo `test -f 'src/ghosting/ghost_point_neighbors.C' || echo '$(srcdir)/'`src/ghosting/ghost_point_neighbors.C -src/ghosting/libmesh_prof_la-disconnected_neighbor_coupling.lo: src/ghosting/disconnected_neighbor_coupling.C -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -MT src/ghosting/libmesh_prof_la-disconnected_neighbor_coupling.lo -MD -MP -MF src/ghosting/$(DEPDIR)/libmesh_prof_la-disconnected_neighbor_coupling.Tpo -c -o src/ghosting/libmesh_prof_la-disconnected_neighbor_coupling.lo `test -f 'src/ghosting/disconnected_neighbor_coupling.C' || echo '$(srcdir)/'`src/ghosting/disconnected_neighbor_coupling.C -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/ghosting/$(DEPDIR)/libmesh_prof_la-disconnected_neighbor_coupling.Tpo src/ghosting/$(DEPDIR)/libmesh_prof_la-disconnected_neighbor_coupling.Plo -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/ghosting/disconnected_neighbor_coupling.C' object='src/ghosting/libmesh_prof_la-disconnected_neighbor_coupling.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/ghosting/libmesh_prof_la-disconnected_neighbor_coupling.lo `test -f 'src/ghosting/disconnected_neighbor_coupling.C' || echo '$(srcdir)/'`src/ghosting/disconnected_neighbor_coupling.C - src/ghosting/libmesh_prof_la-non_manifold_coupling.lo: src/ghosting/non_manifold_coupling.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -MT src/ghosting/libmesh_prof_la-non_manifold_coupling.lo -MD -MP -MF src/ghosting/$(DEPDIR)/libmesh_prof_la-non_manifold_coupling.Tpo -c -o src/ghosting/libmesh_prof_la-non_manifold_coupling.lo `test -f 'src/ghosting/non_manifold_coupling.C' || echo '$(srcdir)/'`src/ghosting/non_manifold_coupling.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/ghosting/$(DEPDIR)/libmesh_prof_la-non_manifold_coupling.Tpo src/ghosting/$(DEPDIR)/libmesh_prof_la-non_manifold_coupling.Plo @@ -36735,35 +36664,30 @@ distclean: distclean-recursive -rm -f src/geom/$(DEPDIR)/libmesh_prof_la-sphere.Plo -rm -f src/geom/$(DEPDIR)/libmesh_prof_la-surface.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-default_coupling.Plo - -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-disconnected_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-ghost_point_neighbors.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-non_manifold_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-overlap_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-point_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-sibling_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-default_coupling.Plo - -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-disconnected_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-ghost_point_neighbors.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-non_manifold_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-overlap_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-point_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-sibling_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-default_coupling.Plo - -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-disconnected_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-ghost_point_neighbors.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-non_manifold_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-overlap_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-point_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-sibling_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-default_coupling.Plo - -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-disconnected_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-ghost_point_neighbors.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-non_manifold_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-overlap_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-point_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-sibling_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_prof_la-default_coupling.Plo - -rm -f src/ghosting/$(DEPDIR)/libmesh_prof_la-disconnected_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_prof_la-ghost_point_neighbors.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_prof_la-non_manifold_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_prof_la-overlap_coupling.Plo @@ -39226,35 +39150,30 @@ maintainer-clean: maintainer-clean-recursive -rm -f src/geom/$(DEPDIR)/libmesh_prof_la-sphere.Plo -rm -f src/geom/$(DEPDIR)/libmesh_prof_la-surface.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-default_coupling.Plo - -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-disconnected_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-ghost_point_neighbors.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-non_manifold_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-overlap_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-point_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_dbg_la-sibling_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-default_coupling.Plo - -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-disconnected_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-ghost_point_neighbors.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-non_manifold_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-overlap_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-point_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_devel_la-sibling_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-default_coupling.Plo - -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-disconnected_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-ghost_point_neighbors.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-non_manifold_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-overlap_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-point_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_oprof_la-sibling_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-default_coupling.Plo - -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-disconnected_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-ghost_point_neighbors.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-non_manifold_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-overlap_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-point_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_opt_la-sibling_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_prof_la-default_coupling.Plo - -rm -f src/ghosting/$(DEPDIR)/libmesh_prof_la-disconnected_neighbor_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_prof_la-ghost_point_neighbors.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_prof_la-non_manifold_coupling.Plo -rm -f src/ghosting/$(DEPDIR)/libmesh_prof_la-overlap_coupling.Plo diff --git a/build-aux/ltmain.sh b/build-aux/ltmain.sh index 5a2242fb24f..3e6a3db3a5a 100644 --- a/build-aux/ltmain.sh +++ b/build-aux/ltmain.sh @@ -7648,11 +7648,6 @@ func_mode_link () arg=$func_stripname_result ;; - -Wl,--as-needed) - deplibs="$deplibs $arg" - continue - ;; - -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result @@ -7995,7 +7990,6 @@ func_mode_link () case $linkmode in lib) - as_needed_flag= passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in @@ -8007,7 +8001,6 @@ func_mode_link () done ;; prog) - as_needed_flag= compile_deplibs= finalize_deplibs= alldeplibs=false @@ -8077,15 +8070,6 @@ func_mode_link () lib= found=false case $deplib in - -Wl,--as-needed) - if test prog,link = "$linkmode,$pass" || - test lib,link = "$linkmode,$pass"; then - as_needed_flag="$deplib " - else - deplibs="$deplib $deplibs" - fi - continue - ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-fopenmp=*|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test prog,link = "$linkmode,$pass"; then @@ -10411,13 +10395,6 @@ func_mode_link () test "X$libobjs" = "X " && libobjs= fi - # A bit hacky. I had wanted to add \$as_needed_flag to archive_cmds instead, but that - # comes from libtool.m4 which is part of the project being built. This should put it - # in the right place though. - if test lib,link = "$linkmode,$pass" && test -n "$as_needed_flag"; then - libobjs=$as_needed_flag$libobjs - fi - save_ifs=$IFS; IFS='~' for cmd in $cmds; do IFS=$sp$nl @@ -10650,8 +10627,8 @@ func_mode_link () compile_deplibs=$new_libs - func_append compile_command " $as_needed_flag $compile_deplibs" - func_append finalize_command " $as_needed_flag $finalize_deplibs" + func_append compile_command " $compile_deplibs" + func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. diff --git a/include/Makefile.in b/include/Makefile.in index 7d8f86e6939..9f2845d9640 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -780,7 +780,6 @@ include_HEADERS = \ geom/surface.h \ ghosting/default_coupling.h \ ghosting/ghost_point_neighbors.h \ - ghosting/disconnected_neighbor_coupling.h \ ghosting/ghosting_functor.h \ ghosting/non_manifold_coupling.h \ ghosting/overlap_coupling.h \ @@ -1119,7 +1118,7 @@ include_HEADERS = \ utils/utility.h \ utils/vectormap.h \ utils/win_gettimeofday.h \ - utils/xdr_cxx.h + utils/xdr_cxx.h # definition of include_HEADERS - get from auto-maintained list diff --git a/include/ghosting/disconnected_neighbor_coupling.h b/include/ghosting/disconnected_neighbor_coupling.h deleted file mode 100644 index 42856621166..00000000000 --- a/include/ghosting/disconnected_neighbor_coupling.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef LIBMESH_DISCONNECTED_NEIGHBOR_COUPLING_H -#define LIBMESH_DISCONNECTED_NEIGHBOR_COUPLING_H - -#include "libmesh/ghosting_functor.h" -#include "libmesh/boundary_info.h" - -#include - -namespace libMesh -{ - -class Elem; -class PointLocatorBase; - -/** - * Ghosts elements that lie on - * user-defined disconnected interfaces, - * such as cohesive zone boundaries. - */ -class DisconnectedNeighborCoupling : public GhostingFunctor -{ -public: - using DisconnectedMap = std::unordered_map; - - DisconnectedNeighborCoupling(const MeshBase & mesh) : - GhostingFunctor(mesh), - _dof_coupling(nullptr) - {} - - virtual std::unique_ptr clone () const override - { return std::make_unique(*this); } - - virtual void operator() (const MeshBase::const_element_iterator & range_begin, - const MeshBase::const_element_iterator & range_end, - processor_id_type p, - map_type & coupled_elements) override; - -private: - const CouplingMatrix * _dof_coupling; -}; - -} // namespace libMesh - -#endif // LIBMESH_DISCONNECTED_NEIGHBOR_COUPLING_H diff --git a/include/include_HEADERS b/include/include_HEADERS index 3899b7c7992..38c4a908fb0 100644 --- a/include/include_HEADERS +++ b/include/include_HEADERS @@ -176,7 +176,6 @@ include_HEADERS = \ geom/surface.h \ ghosting/default_coupling.h \ ghosting/ghost_point_neighbors.h \ - ghosting/disconnected_neighbor_coupling.h \ ghosting/ghosting_functor.h \ ghosting/non_manifold_coupling.h \ ghosting/overlap_coupling.h \ @@ -515,4 +514,4 @@ include_HEADERS = \ utils/utility.h \ utils/vectormap.h \ utils/win_gettimeofday.h \ - utils/xdr_cxx.h + utils/xdr_cxx.h diff --git a/include/libmesh/Makefile.am b/include/libmesh/Makefile.am index 9d7e5579e0d..eb33152f6cf 100644 --- a/include/libmesh/Makefile.am +++ b/include/libmesh/Makefile.am @@ -166,7 +166,6 @@ BUILT_SOURCES = \ surface.h \ default_coupling.h \ ghost_point_neighbors.h \ - disconnected_neighbor_coupling.h \ ghosting_functor.h \ non_manifold_coupling.h \ overlap_coupling.h \ @@ -1098,9 +1097,6 @@ default_coupling.h: $(top_srcdir)/include/ghosting/default_coupling.h ghost_point_neighbors.h: $(top_srcdir)/include/ghosting/ghost_point_neighbors.h $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ -disconnected_neighbor_coupling.h: $(top_srcdir)/include/ghosting/disconnected_neighbor_coupling.h - $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ - ghosting_functor.h: $(top_srcdir)/include/ghosting/ghosting_functor.h $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ diff --git a/include/libmesh/Makefile.in b/include/libmesh/Makefile.in index 565e4ea608e..ee18a29773e 100644 --- a/include/libmesh/Makefile.in +++ b/include/libmesh/Makefile.in @@ -575,8 +575,7 @@ BUILT_SOURCES = dirichlet_boundaries.h dof_map.h dof_map_base.h \ face_tri3_subdivision.h face_tri6.h face_tri7.h node.h \ node_elem.h node_range.h plane.h point.h reference_elem.h \ remote_elem.h sphere.h stored_range.h surface.h \ - default_coupling.h ghost_point_neighbors.h \ - disconnected_neighbor_coupling.h ghosting_functor.h \ + default_coupling.h ghost_point_neighbors.h ghosting_functor.h \ non_manifold_coupling.h overlap_coupling.h \ point_neighbor_coupling.h sibling_coupling.h abaqus_io.h \ boundary_info.h boundary_mesh.h checkpoint_io.h \ @@ -1432,9 +1431,6 @@ default_coupling.h: $(top_srcdir)/include/ghosting/default_coupling.h ghost_point_neighbors.h: $(top_srcdir)/include/ghosting/ghost_point_neighbors.h $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ -disconnected_neighbor_coupling.h: $(top_srcdir)/include/ghosting/disconnected_neighbor_coupling.h - $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ - ghosting_functor.h: $(top_srcdir)/include/ghosting/ghosting_functor.h $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ diff --git a/include/mesh/mesh_base.h b/include/mesh/mesh_base.h index 46113f5dc77..bd8a75f53f4 100644 --- a/include/mesh/mesh_base.h +++ b/include/mesh/mesh_base.h @@ -1846,7 +1846,7 @@ class MeshBase : public ParallelObject protected: - #ifdef LIBMESH_ENABLE_PERIODIC +#ifdef LIBMESH_ENABLE_PERIODIC /// @brief The disconnected boundary id pairs. std::unique_ptr _disconnected_boundary_pairs; #endif diff --git a/src/ghosting/disconnected_neighbor_coupling.C b/src/ghosting/disconnected_neighbor_coupling.C deleted file mode 100644 index fefa8fdc34a..00000000000 --- a/src/ghosting/disconnected_neighbor_coupling.C +++ /dev/null @@ -1,52 +0,0 @@ -#include "libmesh/disconnected_neighbor_coupling.h" -#include "libmesh/elem.h" -#include "libmesh/mesh_base.h" -#include "libmesh/point_locator_base.h" -#include "libmesh/remote_elem.h" -#include "libmesh/periodic_boundaries.h" - -namespace libMesh -{ - -void DisconnectedNeighborCoupling::operator()( - const MeshBase::const_element_iterator & range_begin, - const MeshBase::const_element_iterator & range_end, - processor_id_type p, - map_type & coupled_elements) -{ - libmesh_assert(_mesh); - auto * db = _mesh->get_disconnected_boundaries(); - if (!db) - return; - - std::unique_ptr point_locator = _mesh->sub_point_locator(); - - // Primary ghosting: elements in range_begin...range_end - for (const auto & elem : as_range(range_begin, range_end)) - if (elem->processor_id() != p) - coupled_elements.emplace(elem, _dof_coupling); - - // Also ghost their disconnected neighbors - for (const auto & elem : as_range(range_begin, range_end)) - for (auto s : elem->side_index_range()) - { - for (const auto & [id, boundary_ptr] : *db) - { - if (!_mesh->get_boundary_info().has_boundary_id(elem, s, id)) - continue; - - unsigned int neigh_side = invalid_uint; - const Elem * neigh = - db->neighbor(id, *point_locator, elem, s, &neigh_side); - - if (!neigh || neigh == remote_elem) - continue; - - if (neigh->processor_id() != p) - coupled_elements.emplace(neigh, _dof_coupling); - } - } -} - - -} // namespace libMesh diff --git a/src/ghosting/ghost_point_neighbors.C b/src/ghosting/ghost_point_neighbors.C index f17af04da9a..79605309472 100644 --- a/src/ghosting/ghost_point_neighbors.C +++ b/src/ghosting/ghost_point_neighbors.C @@ -46,8 +46,11 @@ void GhostPointNeighbors::operator() bool check_periodic_bcs = (_periodic_bcs && !_periodic_bcs->empty()); + auto * db = _mesh->get_disconnected_boundaries(); + bool check_disconnected_bcs = (db && !db->empty()); + std::unique_ptr point_locator; - if (check_periodic_bcs) + if (check_periodic_bcs || check_disconnected_bcs) point_locator = _mesh->sub_point_locator(); std::set periodic_elems_examined; @@ -176,6 +179,30 @@ void GhostPointNeighbors::operator() } } } + + if (check_disconnected_bcs) + { + // Also ghost their disconnected neighbors + for (auto s : elem->side_index_range()) + { + for (const auto & [id, boundary_ptr] : *db) + { + if (!_mesh->get_boundary_info().has_boundary_id(elem, s, id)) + continue; + + unsigned int neigh_side = invalid_uint; + const Elem * neigh = + db->neighbor(id, *point_locator, elem, s, &neigh_side); + + if (!neigh || neigh == remote_elem) + continue; + + if (neigh->processor_id() != p) + coupled_elements.emplace(neigh, nullcm); + } + } + } + #endif // LIBMESH_ENABLE_PERIODIC } } diff --git a/src/libmesh_SOURCES b/src/libmesh_SOURCES index 5ca2e22f153..0b975a5eb89 100644 --- a/src/libmesh_SOURCES +++ b/src/libmesh_SOURCES @@ -193,7 +193,6 @@ libmesh_SOURCES = \ src/geom/surface.C \ src/ghosting/default_coupling.C \ src/ghosting/ghost_point_neighbors.C \ - src/ghosting/disconnected_neighbor_coupling.C \ src/ghosting/non_manifold_coupling.C \ src/ghosting/overlap_coupling.C \ src/ghosting/point_neighbor_coupling.C \ @@ -476,4 +475,4 @@ libmesh_SOURCES = \ src/utils/tree.C \ src/utils/tree_node.C \ src/utils/utility.C \ - src/utils/xdr_cxx.C + src/utils/xdr_cxx.C diff --git a/src/mesh/mesh_base.C b/src/mesh/mesh_base.C index 37daa099e21..ce432608793 100644 --- a/src/mesh/mesh_base.C +++ b/src/mesh/mesh_base.C @@ -202,6 +202,10 @@ MeshBase& MeshBase::operator= (MeshBase && other_mesh) _node_integer_default_values = std::move(other_mesh._node_integer_default_values); _point_locator_close_to_point_tol = other_mesh.get_point_locator_close_to_point_tol(); +#ifdef LIBMESH_ENABLE_PERIODIC + _disconnected_boundary_pairs = std::move(other_mesh._disconnected_boundary_pairs); +#endif + // This relies on our subclasses *not* invalidating pointers when we // do their portion of the move assignment later! boundary_info = std::move(other_mesh.boundary_info); @@ -308,6 +312,12 @@ bool MeshBase::locally_equals (const MeshBase & other_mesh) const return false; if (*boundary_info != *other_mesh.boundary_info) return false; + // First check whether the "existence" of the two pointers differs (one present, one absent) + if ((bool)_disconnected_boundary_pairs != (bool)other_mesh._disconnected_boundary_pairs) + return false; + // If both exist, compare the contents + if (_disconnected_boundary_pairs && (*_disconnected_boundary_pairs != *other_mesh._disconnected_boundary_pairs)) + return false; const constraint_rows_type & other_rows = other_mesh.get_constraint_rows(); diff --git a/src/mesh/mesh_refinement.C b/src/mesh/mesh_refinement.C index 0561fb38afb..bf0f46b589b 100644 --- a/src/mesh/mesh_refinement.C +++ b/src/mesh/mesh_refinement.C @@ -696,11 +696,8 @@ bool MeshRefinement::refine_elements () // present. if (_mesh.get_disconnected_boundaries()) { - libmesh_error_msg( - "Mesh contains disconnected boundary interfaces; refinement is disabled.\n" - "MeshRefinement::refine_elements() cannot proceed because disconnected\n" - "boundaries may produce invalid neighbor relations. Please remove or\n" - "repair disconnected boundary interfaces before attempting refinement."); + libmesh_not_implemented_msg( + "Mesh refinement is not yet implemented for meshes with disconnected boundary interfaces.\n"); } if (_face_level_mismatch_limit) diff --git a/src/mesh/unstructured_mesh.C b/src/mesh/unstructured_mesh.C index df091b41ce0..dcc54c57bee 100644 --- a/src/mesh/unstructured_mesh.C +++ b/src/mesh/unstructured_mesh.C @@ -50,9 +50,6 @@ // for disconnected neighbors #include "libmesh/periodic_boundaries.h" #include "libmesh/periodic_boundary.h" - -#include - namespace { using namespace libMesh; @@ -1035,9 +1032,6 @@ void UnstructuredMesh::find_neighbors (const bool reset_remote_elements, } } } - - // Ghost the disconnected elements - this->add_ghosting_functor(std::make_unique(*this)); } #endif // LIBMESH_ENABLE_PERIODIC @@ -1848,6 +1842,14 @@ UnstructuredMesh::stitching_helper (const MeshBase * other_mesh, MeshTools::libmesh_assert_valid_neighbors(*this); #endif + auto * this_db = this->get_disconnected_boundaries(); + auto * other_db = (other_mesh ? other_mesh->get_disconnected_boundaries() : nullptr); + + const bool have_disc_bdys = ((this_db && !this_db->empty()) || + (other_db && !other_db->empty())); + if (have_disc_bdys) + libmesh_not_implemented_msg("stitching meshes with disconnected boundaries is not supported yet."); + // We can't even afford any unset neighbor links here. if (!this->is_prepared()) this->find_neighbors(); diff --git a/tests/systems/disconnected_neighbor_test.C b/tests/systems/disconnected_neighbor_test.C index cb067497f8c..be2701b5146 100644 --- a/tests/systems/disconnected_neighbor_test.C +++ b/tests/systems/disconnected_neighbor_test.C @@ -28,7 +28,7 @@ static const boundary_id_type right_id = 1; static const boundary_id_type interface_left_id = 5; static const boundary_id_type interface_right_id = 6; -static const int nx = 6, ny = 6; +static const int nx = 2, ny = 2; Number heat_exact (const Point & p, @@ -200,6 +200,8 @@ private: void testTempJump() { + LOG_UNIT_TEST; + Mesh mesh(*TestCommWorld, 2); // Domain: x in (0, 1), y in (0, 1) @@ -347,6 +349,8 @@ private: void testTempJumpRefine() { + LOG_UNIT_TEST; + Mesh mesh(*TestCommWorld, 2); build_split_mesh_with_interface(mesh); @@ -397,6 +401,8 @@ private: void testTempJumpLocalRefineFail() { + LOG_UNIT_TEST; + try { Mesh mesh(*TestCommWorld, 2); From d615ffee1aca885edd568b59d1b8dd969eb434c2 Mon Sep 17 00:00:00 2001 From: Cheng-Hau Yang Date: Tue, 4 Nov 2025 10:48:46 -0600 Subject: [PATCH 19/26] Mesh: Deep copy disconnected boundaries in copy constructor and assignment - Added deep copy logic for `_disconnected_boundary_pairs` in both the copy constructor and move assignment operator of `MeshBase`, ensuring that `clone()` preserves disconnected boundary data. - Updated `locally_equals()` to perform a safer weak comparison on `_disconnected_boundary_pairs` (compare sizes only). - Added `DisconnectedNeighborTest::testCloneEquality()` to verify that cloned meshes correctly replicate disconnected boundaries. --- src/mesh/mesh_base.C | 30 +++- tests/systems/disconnected_neighbor_test.C | 164 ++++++++++++--------- 2 files changed, 119 insertions(+), 75 deletions(-) diff --git a/src/mesh/mesh_base.C b/src/mesh/mesh_base.C index ce432608793..3598afeaec6 100644 --- a/src/mesh/mesh_base.C +++ b/src/mesh/mesh_base.C @@ -157,6 +157,18 @@ MeshBase::MeshBase (const MeshBase & other_mesh) : if (other_mesh._partitioner.get()) _partitioner = other_mesh._partitioner->clone(); +#ifdef LIBMESH_ENABLE_PERIODIC + // Deep copy of all periodic boundaries + if (other_mesh._disconnected_boundary_pairs) + { + _disconnected_boundary_pairs = std::make_unique(); + + for (const auto & [id, pb] : *other_mesh._disconnected_boundary_pairs) + if (pb) + (*_disconnected_boundary_pairs)[id] = pb->clone(); + } +#endif + // _elemset_codes stores pointers to entries in _elemset_codes_inverse_map, // so it is not possible to simply copy it directly from other_mesh for (const auto & [set, code] : _elemset_codes_inverse_map) @@ -203,7 +215,17 @@ MeshBase& MeshBase::operator= (MeshBase && other_mesh) _point_locator_close_to_point_tol = other_mesh.get_point_locator_close_to_point_tol(); #ifdef LIBMESH_ENABLE_PERIODIC - _disconnected_boundary_pairs = std::move(other_mesh._disconnected_boundary_pairs); + // Deep copy of all periodic boundaries: + // We must clone each PeriodicBoundaryBase in the source map, + // since unique_ptr cannot be copied and we need independent instances + if (other_mesh._disconnected_boundary_pairs) + { + _disconnected_boundary_pairs = std::make_unique(); + + for (const auto & [id, pb] : *other_mesh._disconnected_boundary_pairs) + if (pb) + (*_disconnected_boundary_pairs)[id] = pb->clone(); + } #endif // This relies on our subclasses *not* invalidating pointers when we @@ -312,11 +334,13 @@ bool MeshBase::locally_equals (const MeshBase & other_mesh) const return false; if (*boundary_info != *other_mesh.boundary_info) return false; + // First check whether the "existence" of the two pointers differs (one present, one absent) if ((bool)_disconnected_boundary_pairs != (bool)other_mesh._disconnected_boundary_pairs) return false; - // If both exist, compare the contents - if (_disconnected_boundary_pairs && (*_disconnected_boundary_pairs != *other_mesh._disconnected_boundary_pairs)) + // If both exist, compare the contents (Weak Test: just compare sizes like `_ghosting_functors`) + if (_disconnected_boundary_pairs && + (_disconnected_boundary_pairs->size() != other_mesh._disconnected_boundary_pairs->size())) return false; const constraint_rows_type & other_rows = diff --git a/tests/systems/disconnected_neighbor_test.C b/tests/systems/disconnected_neighbor_test.C index be2701b5146..181cb412d82 100644 --- a/tests/systems/disconnected_neighbor_test.C +++ b/tests/systems/disconnected_neighbor_test.C @@ -184,16 +184,20 @@ void assemble_temperature_jump(EquationSystems &es, class DisconnectedNeighborTest : public CppUnit::TestCase { public: LIBMESH_CPPUNIT_TEST_SUITE( DisconnectedNeighborTest ); +#ifdef LIBMESH_ENABLE_PERIODIC #if defined(LIBMESH_HAVE_SOLVER) CPPUNIT_TEST( testTempJump ); CPPUNIT_TEST( testTempJumpRefine ); +#endif #ifdef LIBMESH_ENABLE_AMR // This test intentionally triggers find_neighbors() consistency check // failure after AMR refinement across disconnected interfaces. // Expected: libmesh_assert_valid_neighbors() fails. CPPUNIT_TEST_EXCEPTION(testTempJumpLocalRefineFail, std::exception); #endif + CPPUNIT_TEST( testCloneEquality ); #endif + CPPUNIT_TEST_SUITE_END(); private: @@ -203,78 +207,7 @@ private: LOG_UNIT_TEST; Mesh mesh(*TestCommWorld, 2); - - // Domain: x in (0, 1), y in (0, 1) - // Split into two subdomains: - // Left subdomain: 0 <= x <= 0.5 - // Right subdomain: 0.5 <= x <= 1 - // - // Note: Points at x = 0.5 are duplicated (same coordinates but different node IDs) - // to represent an interface or discontinuity between the two subdomains. - // - // Coordinates layout: - // - // (0,1) (0.5,1)_L (0.5,1)_R (1,1) - // x--------x x--------x - // | | | | - // | Left | Interface | Right | - // | | | | - // x--------x x--------x - // (0,0) (0.5,0)_L (0.5,0)_R (1,0) - - - // ---- Define points ---- - - // Left subdomain nodes - mesh.add_point(Point(0.0, 0.0), 0); // bottom-left corner - mesh.add_point(Point(0.5, 0.0), 1); // bottom-right corner of left element (interface node) - mesh.add_point(Point(0.0, 1.0), 2); // top-left corner - mesh.add_point(Point(0.5, 1.0), 3); // top-right corner of left element (interface node) - - // Right subdomain nodes (duplicated interface points) - mesh.add_point(Point(0.5, 0.0), 4); // bottom-left corner of right element (same coords as node 1) (interface node) - mesh.add_point(Point(1.0, 0.0), 5); // bottom-right corner - mesh.add_point(Point(0.5, 1.0), 6); // top-left corner of right element (same coords as node 3) (interface node) - mesh.add_point(Point(1.0, 1.0), 7); // top-right corner - - - // ---- Define elements ---- - BoundaryInfo & boundary = mesh.get_boundary_info(); - // Left element (element ID = 0) - { - Elem * elem = mesh.add_elem(Elem::build_with_id(QUAD4, 0)); - elem->set_node(0, mesh.node_ptr(0)); // bottom-left (0,0) - elem->set_node(1, mesh.node_ptr(1)); // bottom-right (0.5,0) - elem->set_node(2, mesh.node_ptr(3)); // top-right (0.5,1) - elem->set_node(3, mesh.node_ptr(2)); // top-left (0,1) - boundary.add_side(elem, 3, left_id); // left boundary - boundary.add_side(elem, 1, interface_left_id); - boundary.sideset_name(left_id) = "left_boundary"; - boundary.sideset_name(interface_left_id) = "interface_left"; - } - - // Right element (element ID = 1) - { - Elem * elem = mesh.add_elem(Elem::build_with_id(QUAD4, 1)); - elem->set_node(0, mesh.node_ptr(4)); // bottom-left (0.5,0)_R - elem->set_node(1, mesh.node_ptr(5)); // bottom-right (1,0) - elem->set_node(2, mesh.node_ptr(7)); // top-right (1,1) - elem->set_node(3, mesh.node_ptr(6)); // top-left (0.5,1)_R - boundary.add_side(elem, 1, right_id); // right boundary - boundary.add_side(elem, 3, interface_right_id); - boundary.sideset_name(right_id) = "right_boundary"; - boundary.sideset_name(interface_right_id) = "interface_right"; - } - - // This is the key testing step: inform libMesh about the disconnected boundaries - // And, in `prepare_for_use()`, libMesh will set up the disconnected neighbor relationships. - mesh.add_disconnected_boundaries(interface_left_id, interface_right_id, RealVectorValue(0.0, 0.0, 0.0)); - - // libMesh shouldn't renumber, or our based-on-initial-id - // assertions later may fail. - mesh.allow_renumbering(false); - - mesh.prepare_for_use(); + build_two_disconnected_elems(mesh); // Check elem 0 (the left element) if (const Elem * elem_left = mesh.query_elem_ptr(0)) @@ -347,6 +280,18 @@ private: } + void testCloneEquality() + { + LOG_UNIT_TEST; + + Mesh mesh(*TestCommWorld, 2); + build_two_disconnected_elems(mesh); + + std::unique_ptr mesh_clone = mesh.clone(); + CPPUNIT_ASSERT(*mesh_clone == mesh); + } + + void testTempJumpRefine() { LOG_UNIT_TEST; @@ -415,6 +360,81 @@ private: } } + void build_two_disconnected_elems(Mesh &mesh) + { + // Domain: x in (0, 1), y in (0, 1) + // Split into two subdomains: + // Left subdomain: 0 <= x <= 0.5 + // Right subdomain: 0.5 <= x <= 1 + // + // Note: Points at x = 0.5 are duplicated (same coordinates but different node IDs) + // to represent an interface or discontinuity between the two subdomains. + // + // Coordinates layout: + // + // (0,1) (0.5,1)_L (0.5,1)_R (1,1) + // x--------x x--------x + // | | | | + // | Left | Interface | Right | + // | | | | + // x--------x x--------x + // (0,0) (0.5,0)_L (0.5,0)_R (1,0) + + + // ---- Define points ---- + + // Left subdomain nodes + mesh.add_point(Point(0.0, 0.0), 0); // bottom-left corner + mesh.add_point(Point(0.5, 0.0), 1); // bottom-right corner of left element (interface node) + mesh.add_point(Point(0.0, 1.0), 2); // top-left corner + mesh.add_point(Point(0.5, 1.0), 3); // top-right corner of left element (interface node) + + // Right subdomain nodes (duplicated interface points) + mesh.add_point(Point(0.5, 0.0), 4); // bottom-left corner of right element (same coords as node 1) (interface node) + mesh.add_point(Point(1.0, 0.0), 5); // bottom-right corner + mesh.add_point(Point(0.5, 1.0), 6); // top-left corner of right element (same coords as node 3) (interface node) + mesh.add_point(Point(1.0, 1.0), 7); // top-right corner + + + // ---- Define elements ---- + BoundaryInfo & boundary = mesh.get_boundary_info(); + // Left element (element ID = 0) + { + Elem * elem = mesh.add_elem(Elem::build_with_id(QUAD4, 0)); + elem->set_node(0, mesh.node_ptr(0)); // bottom-left (0,0) + elem->set_node(1, mesh.node_ptr(1)); // bottom-right (0.5,0) + elem->set_node(2, mesh.node_ptr(3)); // top-right (0.5,1) + elem->set_node(3, mesh.node_ptr(2)); // top-left (0,1) + boundary.add_side(elem, 3, left_id); // left boundary + boundary.add_side(elem, 1, interface_left_id); + boundary.sideset_name(left_id) = "left_boundary"; + boundary.sideset_name(interface_left_id) = "interface_left"; + } + + // Right element (element ID = 1) + { + Elem * elem = mesh.add_elem(Elem::build_with_id(QUAD4, 1)); + elem->set_node(0, mesh.node_ptr(4)); // bottom-left (0.5,0)_R + elem->set_node(1, mesh.node_ptr(5)); // bottom-right (1,0) + elem->set_node(2, mesh.node_ptr(7)); // top-right (1,1) + elem->set_node(3, mesh.node_ptr(6)); // top-left (0.5,1)_R + boundary.add_side(elem, 1, right_id); // right boundary + boundary.add_side(elem, 3, interface_right_id); + boundary.sideset_name(right_id) = "right_boundary"; + boundary.sideset_name(interface_right_id) = "interface_right"; + } + + // This is the key testing step: inform libMesh about the disconnected boundaries + // And, in `prepare_for_use()`, libMesh will set up the disconnected neighbor relationships. + mesh.add_disconnected_boundaries(interface_left_id, interface_right_id, RealVectorValue(0.0, 0.0, 0.0)); + + // libMesh shouldn't renumber, or our based-on-initial-id + // assertions later may fail. + mesh.allow_renumbering(false); + + mesh.prepare_for_use(); + } + // The interface is located at x = 0.5; nx must be even (split evenly into left and right subdomains) void build_split_mesh_with_interface(Mesh &mesh, bool test_local_refinement = false) { From 8fb68ab0b97f52699329c000f62d337e6ef2f34e Mon Sep 17 00:00:00 2001 From: Cheng-Hau Yang Date: Thu, 6 Nov 2025 15:36:48 -0600 Subject: [PATCH 20/26] git commit -m "Support stitching meshes with disconnected boundaries in UnstructuredMesh This commit enables stitching of meshes that include disconnected boundaries, allowing MOOSE tests using `BreakMeshByBlock` (bmbb) to run successfully with `StitchBoundaryMeshGenerator`. - Added `stitching_intended_disconnected_neighbors` option to stitching_helper(). - Implemented logic to detect and handle valid disconnected boundary pairs from either mesh, supporting self-stitching and multi-mesh stitching cases. - Added `remove_disconnected_boundaries_pair()` to MeshBase to clean up boundary pairs after stitching. - Added a new unit test `testStitchingDiscontinuousBoundaries()` to verify the correct behavior of disconnected boundary stitching. --- include/mesh/mesh_base.h | 4 ++ include/mesh/unstructured_mesh.h | 3 +- src/mesh/mesh_base.C | 28 +++++++++++++ src/mesh/unstructured_mesh.C | 49 +++++++++++++++++++--- tests/systems/disconnected_neighbor_test.C | 32 ++++++++++++++ 5 files changed, 110 insertions(+), 6 deletions(-) diff --git a/include/mesh/mesh_base.h b/include/mesh/mesh_base.h index bd8a75f53f4..222006e842a 100644 --- a/include/mesh/mesh_base.h +++ b/include/mesh/mesh_base.h @@ -1841,6 +1841,10 @@ class MeshBase : public ParallelObject PeriodicBoundaries * get_disconnected_boundaries(); const PeriodicBoundaries * get_disconnected_boundaries() const; + + void remove_disconnected_boundaries_pair(const boundary_id_type b1, + const boundary_id_type b2); + #endif diff --git a/include/mesh/unstructured_mesh.h b/include/mesh/unstructured_mesh.h index be3c5798f47..3b7fdc21f51 100644 --- a/include/mesh/unstructured_mesh.h +++ b/include/mesh/unstructured_mesh.h @@ -310,7 +310,8 @@ class UnstructuredMesh : public MeshBase bool skip_find_neighbors, bool merge_boundary_nodes_all_or_nothing, bool remap_subdomain_ids, - bool prepare_after_stitching); + bool prepare_after_stitching, + bool stitching_intended_disconnected_neighbors = true); }; diff --git a/src/mesh/mesh_base.C b/src/mesh/mesh_base.C index 3598afeaec6..bb26995856c 100644 --- a/src/mesh/mesh_base.C +++ b/src/mesh/mesh_base.C @@ -2025,6 +2025,34 @@ void MeshBase::detect_interior_parents() { return _disconnected_boundary_pairs.get(); } + + void MeshBase::remove_disconnected_boundaries_pair(const boundary_id_type b1, + const boundary_id_type b2) + { + // Nothing to remove if not allocated or empty + if (!_disconnected_boundary_pairs || _disconnected_boundary_pairs->empty()) + return; + + auto & pairs = *_disconnected_boundary_pairs; + + // Helper to check and erase both directions + auto erase_if_match = [&](boundary_id_type key, boundary_id_type pair) + { + auto it = pairs.find(key); + if (it != pairs.end()) + { + const auto & pb = it->second; + // check both directions + if ((pb->myboundary == key && pb->pairedboundary == pair) || + (pb->pairedboundary == key && pb->myboundary == pair)) + pairs.erase(it); + } + }; + + erase_if_match(b1, b2); + erase_if_match(b2, b1); + } + #endif diff --git a/src/mesh/unstructured_mesh.C b/src/mesh/unstructured_mesh.C index dcc54c57bee..2dcb4e6c7df 100644 --- a/src/mesh/unstructured_mesh.C +++ b/src/mesh/unstructured_mesh.C @@ -1835,20 +1835,48 @@ UnstructuredMesh::stitching_helper (const MeshBase * other_mesh, bool skip_find_neighbors, bool merge_boundary_nodes_all_or_nothing, bool remap_subdomain_ids, - bool prepare_after_stitching) + bool prepare_after_stitching, + bool stitching_intended_disconnected_neighbors) { #ifdef DEBUG // We rely on neighbor links here MeshTools::libmesh_assert_valid_neighbors(*this); #endif + // Determine whether to activate disconnected boundary stitching: + // Enable only if requested by the user and a valid boundary pairing exists + // on either side (this mesh or the other mesh). + bool account_for_disconnected_boundaries = false; +#ifdef LIBMESH_ENABLE_PERIODIC auto * this_db = this->get_disconnected_boundaries(); auto * other_db = (other_mesh ? other_mesh->get_disconnected_boundaries() : nullptr); const bool have_disc_bdys = ((this_db && !this_db->empty()) || (other_db && !other_db->empty())); - if (have_disc_bdys) - libmesh_not_implemented_msg("stitching meshes with disconnected boundaries is not supported yet."); + + if (have_disc_bdys && stitching_intended_disconnected_neighbors) + { + account_for_disconnected_boundaries = true; + + // In most cases, other_mesh is nullptr (i.e., stitching the mesh to itself). + // In that situation, only this_db is available, so we check it to decide whether + // the specified boundary pair is valid. If not, we disable disconnected stitching. + auto dbb = this_db ? this_db->boundary(this_mesh_boundary_id) : nullptr; + if (dbb) + if (!((dbb->myboundary == this_mesh_boundary_id && dbb->pairedboundary == other_mesh_boundary_id) || + (dbb->pairedboundary == this_mesh_boundary_id && dbb->myboundary == other_mesh_boundary_id))) + account_for_disconnected_boundaries = false; + + // If the check above disables stitching, but other_mesh is not nullptr, + // we also inspect other_db. If the other mesh defines a valid pairing with this boundary, + // we re-enable disconnected boundary stitching. + auto odbb = (other_mesh && other_db) ? other_db->boundary(other_mesh_boundary_id) : nullptr; + if (odbb && !account_for_disconnected_boundaries) + if ((odbb->myboundary == other_mesh_boundary_id && odbb->pairedboundary == this_mesh_boundary_id) || + (odbb->pairedboundary == other_mesh_boundary_id && odbb->myboundary == this_mesh_boundary_id)) + account_for_disconnected_boundaries = true; + } +#endif // LIBMESH_ENABLE_PERIODIC // We can't even afford any unset neighbor links here. if (!this->is_prepared()) @@ -1939,7 +1967,8 @@ UnstructuredMesh::stitching_helper (const MeshBase * other_mesh, { // Now check whether elem has a face on the specified boundary for (auto side_id : el->side_index_range()) - if (el->neighbor_ptr(side_id) == nullptr) + if (el->neighbor_ptr(side_id) == nullptr + || (account_for_disconnected_boundaries && mesh_array[i]->get_boundary_info().has_boundary_id(el, side_id, id_array[i]))) { // Get *all* boundary IDs on this side, not just the first one! mesh_array[i]->get_boundary_info().boundary_ids (el, side_id, bc_ids); @@ -2528,7 +2557,12 @@ UnstructuredMesh::stitching_helper (const MeshBase * other_mesh, fixed_elems.insert(elem_id); for (auto s : el->side_index_range()) { - if (el->neighbor_ptr(s) == nullptr) + bool has_real_neighbor = (el->neighbor_ptr(s) != nullptr); + bool has_intended_disconnected_neighbor = account_for_disconnected_boundaries && + (this->get_boundary_info().has_boundary_id(el, s, this_mesh_boundary_id) + || this->get_boundary_info().has_boundary_id(el, s, other_mesh_boundary_id)); + + if (!has_real_neighbor || has_intended_disconnected_neighbor) { key_type key = el->low_order_key(s); auto bounds = side_to_elem_map.equal_range(key); @@ -2605,6 +2639,11 @@ UnstructuredMesh::stitching_helper (const MeshBase * other_mesh, } } +#ifdef LIBMESH_ENABLE_PERIODIC + if (account_for_disconnected_boundaries) + this->remove_disconnected_boundaries_pair(this_mesh_boundary_id, other_mesh_boundary_id); +#endif + if (prepare_after_stitching) { // We set our new neighbor pointers already diff --git a/tests/systems/disconnected_neighbor_test.C b/tests/systems/disconnected_neighbor_test.C index 181cb412d82..aa02b2f2e21 100644 --- a/tests/systems/disconnected_neighbor_test.C +++ b/tests/systems/disconnected_neighbor_test.C @@ -16,6 +16,7 @@ #include "libmesh_cppunit.h" #include "libmesh/mesh_refinement.h" +#include "libmesh/periodic_boundaries.h" using namespace libMesh; @@ -196,6 +197,7 @@ public: CPPUNIT_TEST_EXCEPTION(testTempJumpLocalRefineFail, std::exception); #endif CPPUNIT_TEST( testCloneEquality ); + CPPUNIT_TEST( testStitchingDiscontinuousBoundaries ); #endif CPPUNIT_TEST_SUITE_END(); @@ -291,6 +293,36 @@ private: CPPUNIT_ASSERT(*mesh_clone == mesh); } + void testStitchingDiscontinuousBoundaries() + { + LOG_UNIT_TEST; + + Mesh mesh(*TestCommWorld, 2); + build_two_disconnected_elems(mesh); + + mesh.stitch_surfaces(interface_left_id, interface_right_id, 1e-8 /*tolerance*/, + true/*clear_stitched_boundary_ids*/, false /*verbose*/,false/*use_binary_search*/, + false /*enforce_all_nodes_match_on_boundaries*/, false /*merge_boundary_nodes_all_or_nothing*/, + false /*prepare_after_stitching*/); + + CPPUNIT_ASSERT(mesh.get_disconnected_boundaries()->size() == 0); + + + // ExodusII_IO(mesh).write("stitched_disconnected_boundaries.e"); + + Mesh mesh2(*TestCommWorld, 2); + build_two_disconnected_elems(mesh2); + + mesh2.stitch_surfaces(interface_left_id, interface_right_id, 1e-8 /*tolerance*/, + true/*clear_stitched_boundary_ids*/, false /*verbose*/,false/*use_binary_search*/, + false /*enforce_all_nodes_match_on_boundaries*/, false /*merge_boundary_nodes_all_or_nothing*/, + true /*prepare_after_stitching*/); + + CPPUNIT_ASSERT(mesh2.get_disconnected_boundaries()->size() == 0); + + // ExodusII_IO(mesh2).write("stitched_disconnected_boundaries_2.e"); + + } void testTempJumpRefine() { From 757c4cfe5390825971a1d3cfcb27317a3d46d7fe Mon Sep 17 00:00:00 2001 From: Cheng-Hau Yang Date: Thu, 6 Nov 2025 22:46:45 -0600 Subject: [PATCH 21/26] Simplify disconnected boundary stitching logic and remove unused argument - Removed the unused argument `stitching_intended_disconnected_neighbors` from `UnstructuredMesh::stitching_helper()`. The disconnected boundary stitching is now always determined internally based on registered boundary pairs. - Clarified logic and comments to emphasize that both sides of each disconnected boundary pair exist within the same mesh (`this`), and only self-stitching is supported by design. - Renamed variable `account_for_disconnected_boundaries` to `enable_disc_bdys_stitching` for clarity. - Updated helper lambda in `MeshBase::remove_disconnected_boundaries_pair()` to avoid unnecessary capture and make parameters explicit. --- include/mesh/unstructured_mesh.h | 3 +-- src/mesh/mesh_base.C | 30 +++++++++++---------- src/mesh/unstructured_mesh.C | 45 +++++++++++++------------------- 3 files changed, 35 insertions(+), 43 deletions(-) diff --git a/include/mesh/unstructured_mesh.h b/include/mesh/unstructured_mesh.h index 3b7fdc21f51..be3c5798f47 100644 --- a/include/mesh/unstructured_mesh.h +++ b/include/mesh/unstructured_mesh.h @@ -310,8 +310,7 @@ class UnstructuredMesh : public MeshBase bool skip_find_neighbors, bool merge_boundary_nodes_all_or_nothing, bool remap_subdomain_ids, - bool prepare_after_stitching, - bool stitching_intended_disconnected_neighbors = true); + bool prepare_after_stitching); }; diff --git a/src/mesh/mesh_base.C b/src/mesh/mesh_base.C index bb26995856c..9ff6e285f1d 100644 --- a/src/mesh/mesh_base.C +++ b/src/mesh/mesh_base.C @@ -2036,21 +2036,23 @@ void MeshBase::detect_interior_parents() auto & pairs = *_disconnected_boundary_pairs; // Helper to check and erase both directions - auto erase_if_match = [&](boundary_id_type key, boundary_id_type pair) - { - auto it = pairs.find(key); - if (it != pairs.end()) - { - const auto & pb = it->second; - // check both directions - if ((pb->myboundary == key && pb->pairedboundary == pair) || - (pb->pairedboundary == key && pb->myboundary == pair)) - pairs.erase(it); - } - }; + auto erase_if_match = [](boundary_id_type key, + boundary_id_type pair, + PeriodicBoundaries & pairs) + { + auto it = pairs.find(key); + if (it != pairs.end()) + { + const auto & pb = *(it->second); + // Check both directions + if ((pb.myboundary == key && pb.pairedboundary == pair) || + (pb.pairedboundary == key && pb.myboundary == pair)) + pairs.erase(it); + } + }; - erase_if_match(b1, b2); - erase_if_match(b2, b1); + erase_if_match(b1, b2, pairs); + erase_if_match(b2, b1, pairs); } #endif diff --git a/src/mesh/unstructured_mesh.C b/src/mesh/unstructured_mesh.C index 2dcb4e6c7df..24daea0bbf7 100644 --- a/src/mesh/unstructured_mesh.C +++ b/src/mesh/unstructured_mesh.C @@ -1835,46 +1835,37 @@ UnstructuredMesh::stitching_helper (const MeshBase * other_mesh, bool skip_find_neighbors, bool merge_boundary_nodes_all_or_nothing, bool remap_subdomain_ids, - bool prepare_after_stitching, - bool stitching_intended_disconnected_neighbors) + bool prepare_after_stitching) { #ifdef DEBUG // We rely on neighbor links here MeshTools::libmesh_assert_valid_neighbors(*this); #endif - // Determine whether to activate disconnected boundary stitching: - // Enable only if requested by the user and a valid boundary pairing exists - // on either side (this mesh or the other mesh). - bool account_for_disconnected_boundaries = false; + // Enable stitching across disconnected boundary pairs + // Note: + // Disconnected boundary pairs are always defined within "the same" mesh (`this`). + // We only handle stitching between disconnected boundaries registered in this->_disconnected_boundary_pairs. + // Cross-mesh disconnected stitching is not supported by design; + // users can call stitching_helper() separately on each mesh if needed. + bool enable_disc_bdys_stitching = false; #ifdef LIBMESH_ENABLE_PERIODIC auto * this_db = this->get_disconnected_boundaries(); - auto * other_db = (other_mesh ? other_mesh->get_disconnected_boundaries() : nullptr); - const bool have_disc_bdys = ((this_db && !this_db->empty()) || - (other_db && !other_db->empty())); + const bool have_disc_bdys = (this_db && !this_db->empty()); - if (have_disc_bdys && stitching_intended_disconnected_neighbors) + if (have_disc_bdys) { - account_for_disconnected_boundaries = true; + enable_disc_bdys_stitching = true; - // In most cases, other_mesh is nullptr (i.e., stitching the mesh to itself). - // In that situation, only this_db is available, so we check it to decide whether - // the specified boundary pair is valid. If not, we disable disconnected stitching. + // Not only must we have disconnected boundaries defined, but the specified + // `this_mesh_boundary_id` and `other_mesh_boundary_id` must also form a valid + // disconnected boundary pair registered within this mesh. auto dbb = this_db ? this_db->boundary(this_mesh_boundary_id) : nullptr; if (dbb) if (!((dbb->myboundary == this_mesh_boundary_id && dbb->pairedboundary == other_mesh_boundary_id) || (dbb->pairedboundary == this_mesh_boundary_id && dbb->myboundary == other_mesh_boundary_id))) - account_for_disconnected_boundaries = false; - - // If the check above disables stitching, but other_mesh is not nullptr, - // we also inspect other_db. If the other mesh defines a valid pairing with this boundary, - // we re-enable disconnected boundary stitching. - auto odbb = (other_mesh && other_db) ? other_db->boundary(other_mesh_boundary_id) : nullptr; - if (odbb && !account_for_disconnected_boundaries) - if ((odbb->myboundary == other_mesh_boundary_id && odbb->pairedboundary == this_mesh_boundary_id) || - (odbb->pairedboundary == other_mesh_boundary_id && odbb->myboundary == this_mesh_boundary_id)) - account_for_disconnected_boundaries = true; + enable_disc_bdys_stitching = false; } #endif // LIBMESH_ENABLE_PERIODIC @@ -1968,7 +1959,7 @@ UnstructuredMesh::stitching_helper (const MeshBase * other_mesh, // Now check whether elem has a face on the specified boundary for (auto side_id : el->side_index_range()) if (el->neighbor_ptr(side_id) == nullptr - || (account_for_disconnected_boundaries && mesh_array[i]->get_boundary_info().has_boundary_id(el, side_id, id_array[i]))) + || (enable_disc_bdys_stitching && mesh_array[i]->get_boundary_info().has_boundary_id(el, side_id, id_array[i]))) { // Get *all* boundary IDs on this side, not just the first one! mesh_array[i]->get_boundary_info().boundary_ids (el, side_id, bc_ids); @@ -2558,7 +2549,7 @@ UnstructuredMesh::stitching_helper (const MeshBase * other_mesh, for (auto s : el->side_index_range()) { bool has_real_neighbor = (el->neighbor_ptr(s) != nullptr); - bool has_intended_disconnected_neighbor = account_for_disconnected_boundaries && + bool has_intended_disconnected_neighbor = enable_disc_bdys_stitching && (this->get_boundary_info().has_boundary_id(el, s, this_mesh_boundary_id) || this->get_boundary_info().has_boundary_id(el, s, other_mesh_boundary_id)); @@ -2640,7 +2631,7 @@ UnstructuredMesh::stitching_helper (const MeshBase * other_mesh, } #ifdef LIBMESH_ENABLE_PERIODIC - if (account_for_disconnected_boundaries) + if (enable_disc_bdys_stitching) this->remove_disconnected_boundaries_pair(this_mesh_boundary_id, other_mesh_boundary_id); #endif From b725d7a82c06890c0aaf64ed344a334bf918e696 Mon Sep 17 00:00:00 2001 From: Cheng-Hau Yang Date: Thu, 6 Nov 2025 23:51:16 -0600 Subject: [PATCH 22/26] Fix: Resolve variable shadowing in remove_disconnected_boundaries_pair --- src/mesh/mesh_base.C | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/mesh/mesh_base.C b/src/mesh/mesh_base.C index 9ff6e285f1d..f741bd4d569 100644 --- a/src/mesh/mesh_base.C +++ b/src/mesh/mesh_base.C @@ -2038,16 +2038,16 @@ void MeshBase::detect_interior_parents() // Helper to check and erase both directions auto erase_if_match = [](boundary_id_type key, boundary_id_type pair, - PeriodicBoundaries & pairs) + PeriodicBoundaries & pb_map) { - auto it = pairs.find(key); - if (it != pairs.end()) + auto it = pb_map.find(key); + if (it != pb_map.end()) { const auto & pb = *(it->second); // Check both directions if ((pb.myboundary == key && pb.pairedboundary == pair) || (pb.pairedboundary == key && pb.myboundary == pair)) - pairs.erase(it); + pb_map.erase(it); } }; From 0d1ecd9edd2855074b2e3314f7bc18221bf51e44 Mon Sep 17 00:00:00 2001 From: Cheng-Hau Yang Date: Fri, 7 Nov 2025 09:52:57 -0600 Subject: [PATCH 23/26] Refine stitching_helper logic for disconnected boundaries - Initialize `enable_disc_bdys_stitching` as false by default and enable it only when the specified boundary IDs form a valid disconnected pair. - Simplify and clarify side filtering logic during stitching: * Introduced `should_stitch_this_side` condition to improve readability. * Explicitly handle both true exterior boundaries and self-stitching across registered disconnected boundary pairs. --- src/mesh/unstructured_mesh.C | 147 +++++++++++++++++++---------------- 1 file changed, 80 insertions(+), 67 deletions(-) diff --git a/src/mesh/unstructured_mesh.C b/src/mesh/unstructured_mesh.C index 24daea0bbf7..208b25d8003 100644 --- a/src/mesh/unstructured_mesh.C +++ b/src/mesh/unstructured_mesh.C @@ -1856,16 +1856,17 @@ UnstructuredMesh::stitching_helper (const MeshBase * other_mesh, if (have_disc_bdys) { - enable_disc_bdys_stitching = true; + // Initialize as disabled; will be enabled only if the given boundary IDs form a valid disconnected pair. + enable_disc_bdys_stitching = false; // Not only must we have disconnected boundaries defined, but the specified // `this_mesh_boundary_id` and `other_mesh_boundary_id` must also form a valid // disconnected boundary pair registered within this mesh. auto dbb = this_db ? this_db->boundary(this_mesh_boundary_id) : nullptr; if (dbb) - if (!((dbb->myboundary == this_mesh_boundary_id && dbb->pairedboundary == other_mesh_boundary_id) || - (dbb->pairedboundary == this_mesh_boundary_id && dbb->myboundary == other_mesh_boundary_id))) - enable_disc_bdys_stitching = false; + if ((dbb->myboundary == this_mesh_boundary_id && dbb->pairedboundary == other_mesh_boundary_id) || + (dbb->pairedboundary == this_mesh_boundary_id && dbb->myboundary == other_mesh_boundary_id)) + enable_disc_bdys_stitching = true; } #endif // LIBMESH_ENABLE_PERIODIC @@ -1958,75 +1959,87 @@ UnstructuredMesh::stitching_helper (const MeshBase * other_mesh, { // Now check whether elem has a face on the specified boundary for (auto side_id : el->side_index_range()) - if (el->neighbor_ptr(side_id) == nullptr - || (enable_disc_bdys_stitching && mesh_array[i]->get_boundary_info().has_boundary_id(el, side_id, id_array[i]))) - { - // Get *all* boundary IDs on this side, not just the first one! - mesh_array[i]->get_boundary_info().boundary_ids (el, side_id, bc_ids); + { + // Determine if this side should be considered for stitching. + // A side is a candidate if: + // 1. It has no neighbor (a true exterior boundary), or + // 2. For the primary mesh (`this`), self-stitching across a registered + // disconnected boundary pair is enabled, and this side belongs to + // one of those disconnected boundaries. + bool should_stitch_this_side = + (el->neighbor_ptr(side_id) == nullptr) || + ((i == 0) && enable_disc_bdys_stitching && + mesh_array[i]->get_boundary_info().has_boundary_id(el, side_id, id_array[i])); + + if (should_stitch_this_side) + { + // Get *all* boundary IDs on this side, not just the first one! + mesh_array[i]->get_boundary_info().boundary_ids (el, side_id, bc_ids); - if (std::find(bc_ids.begin(), bc_ids.end(), id_array[i]) != bc_ids.end()) - { - el->build_side_ptr(side, side_id); - for (auto & n : side->node_ref_range()) - set_array[i]->insert(n.id()); + if (std::find(bc_ids.begin(), bc_ids.end(), id_array[i]) != bc_ids.end()) + { + el->build_side_ptr(side, side_id); + for (auto & n : side->node_ref_range()) + set_array[i]->insert(n.id()); - h_min = std::min(h_min, side->hmin()); - h_min_updated = true; + h_min = std::min(h_min, side->hmin()); + h_min_updated = true; - // This side is on the boundary, add its information to side_to_elem - if (skip_find_neighbors && (i==0)) - { - key_type key = el->low_order_key(side_id); - val_type val; - val.first = el; - val.second = cast_int(side_id); - - key_val_pair kvp; - kvp.first = key; - kvp.second = val; - side_to_elem_map.insert (kvp); - } - } + // This side is on the boundary, add its information to side_to_elem + if (skip_find_neighbors && (i==0)) + { + key_type key = el->low_order_key(side_id); + val_type val; + val.first = el; + val.second = cast_int(side_id); + + key_val_pair kvp; + kvp.first = key; + kvp.second = val; + side_to_elem_map.insert (kvp); + } + } - // Also, check the edges on this side. We don't have to worry about - // updating neighbor info in this case since elements don't store - // neighbor info on edges. - for (auto edge_id : el->edge_index_range()) + // Also, check the edges on this side. We don't have to worry about + // updating neighbor info in this case since elements don't store + // neighbor info on edges. + for (auto edge_id : el->edge_index_range()) + { + if (el->is_edge_on_side(edge_id, side_id)) + { + // Get *all* boundary IDs on this edge, not just the first one! + mesh_array[i]->get_boundary_info().edge_boundary_ids (el, edge_id, bc_ids); + + if (std::find(bc_ids.begin(), bc_ids.end(), id_array[i]) != bc_ids.end()) + { + std::unique_ptr edge (el->build_edge_ptr(edge_id)); + for (auto & n : edge->node_ref_range()) + set_array[i]->insert( n.id() ); + + h_min = std::min(h_min, edge->hmin()); + h_min_updated = true; + } + } + } // end for (edge_id) + } // end if (side == nullptr) + + // Alternatively, is this a boundary NodeElem? If so, + // add it to a list of NodeElems that will later be + // used to set h_min based on the minimum node + // separation distance between all pairs of boundary + // NodeElems. + if (el->type() == NODEELEM) + { + mesh_array[i]->get_boundary_info().boundary_ids(el->node_ptr(0), bc_ids); + if (std::find(bc_ids.begin(), bc_ids.end(), id_array[i]) != bc_ids.end()) { - if (el->is_edge_on_side(edge_id, side_id)) - { - // Get *all* boundary IDs on this edge, not just the first one! - mesh_array[i]->get_boundary_info().edge_boundary_ids (el, edge_id, bc_ids); - - if (std::find(bc_ids.begin(), bc_ids.end(), id_array[i]) != bc_ids.end()) - { - std::unique_ptr edge (el->build_edge_ptr(edge_id)); - for (auto & n : edge->node_ref_range()) - set_array[i]->insert( n.id() ); - - h_min = std::min(h_min, edge->hmin()); - h_min_updated = true; - } - } - } // end for (edge_id) - } // end if (side == nullptr) - - // Alternatively, is this a boundary NodeElem? If so, - // add it to a list of NodeElems that will later be - // used to set h_min based on the minimum node - // separation distance between all pairs of boundary - // NodeElems. - if (el->type() == NODEELEM) - { - mesh_array[i]->get_boundary_info().boundary_ids(el->node_ptr(0), bc_ids); - if (std::find(bc_ids.begin(), bc_ids.end(), id_array[i]) != bc_ids.end()) - { - boundary_node_elems.push_back(el); + boundary_node_elems.push_back(el); - // Debugging: - // libMesh::out << "Elem " << el->id() << " is a NodeElem on boundary " << id_array[i] << std::endl; - } - } + // Debugging: + // libMesh::out << "Elem " << el->id() << " is a NodeElem on boundary " << id_array[i] << std::endl; + } + } + } // end for (side_id) } // end for (el) // Compute the minimum node separation distance amongst From b15f36e9029d67daea9157a2bb43b6775e31a270 Mon Sep 17 00:00:00 2001 From: Cheng-Hau Yang Date: Fri, 7 Nov 2025 10:17:01 -0600 Subject: [PATCH 24/26] make the comments more understandable --- src/mesh/unstructured_mesh.C | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/mesh/unstructured_mesh.C b/src/mesh/unstructured_mesh.C index 208b25d8003..90b0c90309f 100644 --- a/src/mesh/unstructured_mesh.C +++ b/src/mesh/unstructured_mesh.C @@ -1842,12 +1842,18 @@ UnstructuredMesh::stitching_helper (const MeshBase * other_mesh, MeshTools::libmesh_assert_valid_neighbors(*this); #endif - // Enable stitching across disconnected boundary pairs - // Note: - // Disconnected boundary pairs are always defined within "the same" mesh (`this`). - // We only handle stitching between disconnected boundaries registered in this->_disconnected_boundary_pairs. - // Cross-mesh disconnected stitching is not supported by design; - // users can call stitching_helper() separately on each mesh if needed. + // Whether to enable stitching across disconnected boundary pairs. + // + // Notes: + // - Each mesh maintains its own registry of disconnected boundary pairs. + // This function only considers the pairs registered in `this` mesh + // (`this->_disconnected_boundary_pairs`). Stitching occurs only when + // the provided boundary IDs form a registered pair in this mesh. + // - Disconnected boundary pairs defined in `other_mesh` are ignored, + // even if `other_mesh` is provided. To stitch such pairs, call + // `stitching_helper()` on that mesh separately. + // - Cross-mesh disconnected-boundary stitching (i.e., pairing a boundary + // from `this` mesh with one from `other_mesh`) is not supported by design. bool enable_disc_bdys_stitching = false; #ifdef LIBMESH_ENABLE_PERIODIC auto * this_db = this->get_disconnected_boundaries(); From 6cfb4096aaa94936f8e9baab267fdd38648363f3 Mon Sep 17 00:00:00 2001 From: Cheng-Hau Yang Date: Sat, 8 Nov 2025 22:54:00 -0600 Subject: [PATCH 25/26] =?UTF-8?q?Refactor:=20rename=20=E2=80=9Cdisconnecte?= =?UTF-8?q?d=20boundaries=E2=80=9D=20->=20=E2=80=9Cdisjoint=20neighbor=20b?= =?UTF-8?q?oundary=20pairs=E2=80=9D;=20add=20cross-mesh=20copy,=20sanity?= =?UTF-8?q?=20checks,=20and=20regression=20coverage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This refactor replaces the legacy term “disconnected boundaries” with the clearer and topologically consistent “disjoint neighbor boundary pairs.” The new terminology explicitly represents paired but geometrically disjoint neighbor surfaces. Functional changes: - API renames: * add_disconnected_boundaries() -> add_disjoint_neighbor_boundary_pairs() * get_disconnected_boundaries() -> get_disjoint_neighbor_boundary_pairs() * remove_disconnected_boundaries_pair() -> remove_disjoint_boundary_pair() * _disconnected_boundary_pairs -> _disjoint_boundary_pairs - Enhanced stitching logic: * stitching_helper() now recognizes valid disjoint pairs defined on either mesh. * Added sanity/safety checks: - Raise libmesh_error_msg() if a/b are unpaired on one mesh but paired on the other. - Abort stitching if (a,b) pairs are mismatched within the same mesh. * Disjoint pair data (PeriodicBoundary objects) is copied across meshes; duplicates are skipped, mismatches raise errors. - Refinement safety: * Refinement across disjoint neighbor pairs remains disabled until full support is implemented. Testing: - Replaced disconnected_neighbor_test.C -> disjoint_neighbor_test.C. - Added regression test with four elements in a row to ensure stitching preserves all disjoint neighbor pairs and does not remove unrelated pairs. - Added DisjointNeighborTest::testDisjointNeighborConflictError to verify correct handling of mismatched pair registration. - All existing temperature-jump, stitching, and clone-equality tests pass. --- include/mesh/mesh_base.h | 17 +- src/ghosting/ghost_point_neighbors.C | 10 +- src/mesh/mesh_base.C | 53 +-- src/mesh/mesh_refinement.C | 10 +- src/mesh/unstructured_mesh.C | 137 ++++-- tests/Makefile.am | 2 +- tests/Makefile.in | 196 ++++----- ...ighbor_test.C => disjoint_neighbor_test.C} | 415 ++++++++++++++++-- 8 files changed, 617 insertions(+), 223 deletions(-) rename tests/systems/{disconnected_neighbor_test.C => disjoint_neighbor_test.C} (51%) diff --git a/include/mesh/mesh_base.h b/include/mesh/mesh_base.h index 222006e842a..3fe02781821 100644 --- a/include/mesh/mesh_base.h +++ b/include/mesh/mesh_base.h @@ -1832,27 +1832,26 @@ class MeshBase : public ParallelObject #ifdef LIBMESH_ENABLE_PERIODIC /** - * Register a pair of boundaries as disconnected boundaries. + * Register a pair of boundaries as disjoint neighbor boundary pairs. */ - void add_disconnected_boundaries(const boundary_id_type b1, + void add_disjoint_neighbor_boundary_pairs(const boundary_id_type b1, const boundary_id_type b2, const RealVectorValue & translation); - PeriodicBoundaries * get_disconnected_boundaries(); + PeriodicBoundaries * get_disjoint_neighbor_boundary_pairs(); - const PeriodicBoundaries * get_disconnected_boundaries() const; - - void remove_disconnected_boundaries_pair(const boundary_id_type b1, - const boundary_id_type b2); + const PeriodicBoundaries * get_disjoint_neighbor_boundary_pairs() const; + void remove_disjoint_boundary_pair(const boundary_id_type b1, + const boundary_id_type b2); #endif protected: #ifdef LIBMESH_ENABLE_PERIODIC - /// @brief The disconnected boundary id pairs. - std::unique_ptr _disconnected_boundary_pairs; + /// @brief The disjoint boundary id pairs. + std::unique_ptr _disjoint_boundary_pairs; #endif /** diff --git a/src/ghosting/ghost_point_neighbors.C b/src/ghosting/ghost_point_neighbors.C index 79605309472..ad66b2b19ed 100644 --- a/src/ghosting/ghost_point_neighbors.C +++ b/src/ghosting/ghost_point_neighbors.C @@ -46,11 +46,11 @@ void GhostPointNeighbors::operator() bool check_periodic_bcs = (_periodic_bcs && !_periodic_bcs->empty()); - auto * db = _mesh->get_disconnected_boundaries(); - bool check_disconnected_bcs = (db && !db->empty()); + auto * db = _mesh->get_disjoint_neighbor_boundary_pairs(); + bool check_disjoint_bcs = (db && !db->empty()); std::unique_ptr point_locator; - if (check_periodic_bcs || check_disconnected_bcs) + if (check_periodic_bcs || check_disjoint_bcs) point_locator = _mesh->sub_point_locator(); std::set periodic_elems_examined; @@ -180,9 +180,9 @@ void GhostPointNeighbors::operator() } } - if (check_disconnected_bcs) + if (check_disjoint_bcs) { - // Also ghost their disconnected neighbors + // Also ghost their disjoint neighbors for (auto s : elem->side_index_range()) { for (const auto & [id, boundary_ptr] : *db) diff --git a/src/mesh/mesh_base.C b/src/mesh/mesh_base.C index f741bd4d569..03ca1d4854e 100644 --- a/src/mesh/mesh_base.C +++ b/src/mesh/mesh_base.C @@ -159,13 +159,13 @@ MeshBase::MeshBase (const MeshBase & other_mesh) : #ifdef LIBMESH_ENABLE_PERIODIC // Deep copy of all periodic boundaries - if (other_mesh._disconnected_boundary_pairs) + if (other_mesh._disjoint_boundary_pairs) { - _disconnected_boundary_pairs = std::make_unique(); + _disjoint_boundary_pairs = std::make_unique(); - for (const auto & [id, pb] : *other_mesh._disconnected_boundary_pairs) + for (const auto & [id, pb] : *other_mesh._disjoint_boundary_pairs) if (pb) - (*_disconnected_boundary_pairs)[id] = pb->clone(); + (*_disjoint_boundary_pairs)[id] = pb->clone(); } #endif @@ -218,13 +218,13 @@ MeshBase& MeshBase::operator= (MeshBase && other_mesh) // Deep copy of all periodic boundaries: // We must clone each PeriodicBoundaryBase in the source map, // since unique_ptr cannot be copied and we need independent instances - if (other_mesh._disconnected_boundary_pairs) + if (other_mesh._disjoint_boundary_pairs) { - _disconnected_boundary_pairs = std::make_unique(); + _disjoint_boundary_pairs = std::make_unique(); - for (const auto & [id, pb] : *other_mesh._disconnected_boundary_pairs) + for (const auto & [id, pb] : *other_mesh._disjoint_boundary_pairs) if (pb) - (*_disconnected_boundary_pairs)[id] = pb->clone(); + (*_disjoint_boundary_pairs)[id] = pb->clone(); } #endif @@ -336,11 +336,11 @@ bool MeshBase::locally_equals (const MeshBase & other_mesh) const return false; // First check whether the "existence" of the two pointers differs (one present, one absent) - if ((bool)_disconnected_boundary_pairs != (bool)other_mesh._disconnected_boundary_pairs) + if ((bool)_disjoint_boundary_pairs != (bool)other_mesh._disjoint_boundary_pairs) return false; // If both exist, compare the contents (Weak Test: just compare sizes like `_ghosting_functors`) - if (_disconnected_boundary_pairs && - (_disconnected_boundary_pairs->size() != other_mesh._disconnected_boundary_pairs->size())) + if (_disjoint_boundary_pairs && + (_disjoint_boundary_pairs->size() != other_mesh._disjoint_boundary_pairs->size())) return false; const constraint_rows_type & other_rows = @@ -1992,15 +1992,17 @@ void MeshBase::detect_interior_parents() #ifdef LIBMESH_ENABLE_PERIODIC /** - * Register a pair of boundaries as disconnected boundaries. + * Register a pair of boundaries as disjoint neighbor boundary pairs. */ - void MeshBase::add_disconnected_boundaries(const boundary_id_type b1, + void MeshBase::add_disjoint_neighbor_boundary_pairs(const boundary_id_type b1, const boundary_id_type b2, const RealVectorValue & translation) { // Lazily allocate the container the first time it’s needed - if (!_disconnected_boundary_pairs) - _disconnected_boundary_pairs = std::make_unique(); + if (!_disjoint_boundary_pairs) + _disjoint_boundary_pairs = std::make_unique(); + + PeriodicBoundaries & db = *_disjoint_boundary_pairs; // Create forward and inverse boundary mappings PeriodicBoundary forward(translation); @@ -2012,28 +2014,28 @@ void MeshBase::detect_interior_parents() inverse.pairedboundary = b1; // Add both directions into the container - _disconnected_boundary_pairs->emplace(b1, forward.clone()); - _disconnected_boundary_pairs->emplace(b2, inverse.clone()); + db.emplace(b1, forward.clone()); + db.emplace(b2, inverse.clone()); } - PeriodicBoundaries * MeshBase::get_disconnected_boundaries() + PeriodicBoundaries * MeshBase::get_disjoint_neighbor_boundary_pairs() { - return _disconnected_boundary_pairs.get(); + return _disjoint_boundary_pairs.get(); } - const PeriodicBoundaries * MeshBase::get_disconnected_boundaries() const + const PeriodicBoundaries * MeshBase::get_disjoint_neighbor_boundary_pairs() const { - return _disconnected_boundary_pairs.get(); + return _disjoint_boundary_pairs.get(); } - void MeshBase::remove_disconnected_boundaries_pair(const boundary_id_type b1, - const boundary_id_type b2) + void MeshBase::remove_disjoint_boundary_pair(const boundary_id_type b1, + const boundary_id_type b2) { // Nothing to remove if not allocated or empty - if (!_disconnected_boundary_pairs || _disconnected_boundary_pairs->empty()) + if (!_disjoint_boundary_pairs || _disjoint_boundary_pairs->empty()) return; - auto & pairs = *_disconnected_boundary_pairs; + auto & pairs = *_disjoint_boundary_pairs; // Helper to check and erase both directions auto erase_if_match = [](boundary_id_type key, @@ -2055,6 +2057,7 @@ void MeshBase::detect_interior_parents() erase_if_match(b2, b1, pairs); } + #endif diff --git a/src/mesh/mesh_refinement.C b/src/mesh/mesh_refinement.C index bf0f46b589b..034dc9f4a3f 100644 --- a/src/mesh/mesh_refinement.C +++ b/src/mesh/mesh_refinement.C @@ -684,20 +684,20 @@ bool MeshRefinement::refine_elements () // This function must be run on all processors at once parallel_object_only(); - // Prevent refinement when the mesh has disconnected boundaries. + // Prevent refinement when the mesh has disjoint neighbor boundary pairs. // - // Disconnected boundary interfaces violate the topological continuity + // Disjoint boundary interfaces violate the topological continuity // assumed by the refinement algorithm. Refinement on such meshes can // produce invalid neighbor relationships (for example reverse indices // equal to invalid_uint), which may trigger assertions like // `rev < neigh->n_neighbors()` or corrupt neighbor data. // - // For safety, refinement is disabled while disconnected boundaries are + // For safety, refinement is disabled while disjoint neighbor boundary pairs are // present. - if (_mesh.get_disconnected_boundaries()) + if (_mesh.get_disjoint_neighbor_boundary_pairs()) { libmesh_not_implemented_msg( - "Mesh refinement is not yet implemented for meshes with disconnected boundary interfaces.\n"); + "Mesh refinement is not yet implemented for meshes with disjoint boundary interfaces.\n"); } if (_face_level_mismatch_limit) diff --git a/src/mesh/unstructured_mesh.C b/src/mesh/unstructured_mesh.C index 90b0c90309f..24f066694ea 100644 --- a/src/mesh/unstructured_mesh.C +++ b/src/mesh/unstructured_mesh.C @@ -47,9 +47,10 @@ #include #include -// for disconnected neighbors +// for disjoint neighbors #include "libmesh/periodic_boundaries.h" #include "libmesh/periodic_boundary.h" + namespace { using namespace libMesh; @@ -997,8 +998,8 @@ void UnstructuredMesh::find_neighbors (const bool reset_remote_elements, } #ifdef LIBMESH_ENABLE_PERIODIC - // Get the disconnected boundaries object (from periodic BCs) - auto * db = this->get_disconnected_boundaries(); + // Get the disjoint neighbor boundary pairs object (from periodic BCs) + auto * db = this->get_disjoint_neighbor_boundary_pairs(); if (db) { @@ -1842,37 +1843,56 @@ UnstructuredMesh::stitching_helper (const MeshBase * other_mesh, MeshTools::libmesh_assert_valid_neighbors(*this); #endif - // Whether to enable stitching across disconnected boundary pairs. - // - // Notes: - // - Each mesh maintains its own registry of disconnected boundary pairs. - // This function only considers the pairs registered in `this` mesh - // (`this->_disconnected_boundary_pairs`). Stitching occurs only when - // the provided boundary IDs form a registered pair in this mesh. - // - Disconnected boundary pairs defined in `other_mesh` are ignored, - // even if `other_mesh` is provided. To stitch such pairs, call - // `stitching_helper()` on that mesh separately. - // - Cross-mesh disconnected-boundary stitching (i.e., pairing a boundary - // from `this` mesh with one from `other_mesh`) is not supported by design. - bool enable_disc_bdys_stitching = false; -#ifdef LIBMESH_ENABLE_PERIODIC - auto * this_db = this->get_disconnected_boundaries(); + bool is_valid_disjoint_pair_to_stitch = false; - const bool have_disc_bdys = (this_db && !this_db->empty()); +#ifdef LIBMESH_ENABLE_PERIODIC + auto * this_db = this->get_disjoint_neighbor_boundary_pairs(); + auto * other_db = (other_mesh ? other_mesh->get_disjoint_neighbor_boundary_pairs() : nullptr); + const bool have_disc_bdys = + (this_db && !this_db->empty()) || (other_db && !other_db->empty()); if (have_disc_bdys) { - // Initialize as disabled; will be enabled only if the given boundary IDs form a valid disconnected pair. - enable_disc_bdys_stitching = false; - - // Not only must we have disconnected boundaries defined, but the specified - // `this_mesh_boundary_id` and `other_mesh_boundary_id` must also form a valid - // disconnected boundary pair registered within this mesh. - auto dbb = this_db ? this_db->boundary(this_mesh_boundary_id) : nullptr; - if (dbb) - if ((dbb->myboundary == this_mesh_boundary_id && dbb->pairedboundary == other_mesh_boundary_id) || - (dbb->pairedboundary == this_mesh_boundary_id && dbb->myboundary == other_mesh_boundary_id)) - enable_disc_bdys_stitching = true; + const boundary_id_type a = this_mesh_boundary_id; + const boundary_id_type b = other_mesh_boundary_id; + + auto get_pb = [](const PeriodicBoundaries * db, boundary_id_type id) + { + return db ? db->boundary(id) : nullptr; + }; + + // this mesh + const auto * pb_this_a = get_pb(this_db, a); + const auto * pb_this_b = get_pb(this_db, b); + const bool in_this = + (pb_this_a && pb_this_a->pairedboundary == b) || + (pb_this_b && pb_this_b->pairedboundary == a); + + // other mesh + const auto * pb_other_b = get_pb(other_db, b); + const auto * pb_other_a = get_pb(other_db, a); + const bool in_other = + (pb_other_b && pb_other_b->pairedboundary == a) || + (pb_other_a && pb_other_a->pairedboundary == b); + + // Conflict conditions: + // Case 1: On "this" mesh, a or b exist but are not paired, + // while the other mesh pairs them. + if (!in_this && (pb_this_a || pb_this_b) && in_other) + libmesh_error_msg("Disjoint boundary pairing mismatch: on 'this' mesh, " + "boundary (" << a << " or " << b + << ") exists but is not paired; on 'other' mesh the pair is present."); + + // Case 2: On "other" mesh, a or b exist but are not paired, + // while this mesh pairs them. + if (!in_other && (pb_other_a || pb_other_b) && in_this) + libmesh_error_msg("Disjoint boundary pairing mismatch: on 'other' mesh, " + "boundary (" << a << " or " << b + << ") exists but is not paired; on 'this' mesh the pair is present."); + + // Legal conditions: either side has a correct pairing + if (in_this || in_other) + is_valid_disjoint_pair_to_stitch = true; } #endif // LIBMESH_ENABLE_PERIODIC @@ -1966,15 +1986,9 @@ UnstructuredMesh::stitching_helper (const MeshBase * other_mesh, // Now check whether elem has a face on the specified boundary for (auto side_id : el->side_index_range()) { - // Determine if this side should be considered for stitching. - // A side is a candidate if: - // 1. It has no neighbor (a true exterior boundary), or - // 2. For the primary mesh (`this`), self-stitching across a registered - // disconnected boundary pair is enabled, and this side belongs to - // one of those disconnected boundaries. bool should_stitch_this_side = (el->neighbor_ptr(side_id) == nullptr) || - ((i == 0) && enable_disc_bdys_stitching && + (is_valid_disjoint_pair_to_stitch && mesh_array[i]->get_boundary_info().has_boundary_id(el, side_id, id_array[i])); if (should_stitch_this_side) @@ -2287,6 +2301,42 @@ UnstructuredMesh::stitching_helper (const MeshBase * other_mesh, { LOG_SCOPE("stitch_meshes copying", "UnstructuredMesh"); +#ifdef LIBMESH_ENABLE_PERIODIC + // Copy disjoint neighbor boundary pairs (PeriodicBoundary objects) + // from `other_mesh` to `this` mesh + if (other_db && !other_db->empty()) + { + for (const auto & [bdy_id, pb_ptr] : *other_db) + { + const auto & pb = *pb_ptr; + const boundary_id_type a = pb.myboundary; + const boundary_id_type b = pb.pairedboundary; + + if (this_db) + { + // Skip if identical pair already exists + if (const auto * existing_pb = this_db->boundary(a)) + if ((existing_pb->myboundary == a && existing_pb->pairedboundary == b) || + (existing_pb->myboundary == b && existing_pb->pairedboundary == a)) + continue; + + // If both boundary ids exist on this mesh but aren't paired here, refuse to create a new pair + const auto & bdy_ids = this->get_boundary_info().get_boundary_ids(); + const bool a_exists = bdy_ids.count(a); + const bool b_exists = bdy_ids.count(b); + // If a and b already exist on `this`, we should be screaming and dying + // unless they already have PeriodicBoundary objects connecting them too + if (a_exists && b_exists && !this_db->boundary(a)) + libmesh_error_msg("Conflict: boundaries " << a << " and " << b + << " already exist on this mesh but are not paired."); + } + + this->add_disjoint_neighbor_boundary_pairs(a, b, pb.get_corresponding_pos(Point(0.0,0.0,0.0))); + } + } +#endif // LIBMESH_ENABLE_PERIODIC + + // Increment the node_to_node_map and node_to_elems_map // to account for id offsets for (auto & pr : node_to_node_map) @@ -2488,6 +2538,7 @@ UnstructuredMesh::stitching_helper (const MeshBase * other_mesh, this->add_elemset_code(elemset_code, other_id_set_to_fill); } } + } // end if (other_mesh) // Finally, we need to "merge" the overlapping nodes @@ -2568,11 +2619,11 @@ UnstructuredMesh::stitching_helper (const MeshBase * other_mesh, for (auto s : el->side_index_range()) { bool has_real_neighbor = (el->neighbor_ptr(s) != nullptr); - bool has_intended_disconnected_neighbor = enable_disc_bdys_stitching && + bool has_disdjoint_neighbor = is_valid_disjoint_pair_to_stitch && (this->get_boundary_info().has_boundary_id(el, s, this_mesh_boundary_id) || this->get_boundary_info().has_boundary_id(el, s, other_mesh_boundary_id)); - if (!has_real_neighbor || has_intended_disconnected_neighbor) + if (!has_real_neighbor || has_disdjoint_neighbor) { key_type key = el->low_order_key(s); auto bounds = side_to_elem_map.equal_range(key); @@ -2650,8 +2701,12 @@ UnstructuredMesh::stitching_helper (const MeshBase * other_mesh, } #ifdef LIBMESH_ENABLE_PERIODIC - if (enable_disc_bdys_stitching) - this->remove_disconnected_boundaries_pair(this_mesh_boundary_id, other_mesh_boundary_id); + // Remove only the disjoint pair that was actually stitched. + // Safe because `is_valid_disjoint_pair_to_stitch` is true + // only if this exact (a,b) pair exists in the registry. + // Other disjoint pairs remain untouched. + if (is_valid_disjoint_pair_to_stitch) + this->remove_disjoint_boundary_pair(this_mesh_boundary_id, other_mesh_boundary_id); #endif if (prepare_after_stitching) diff --git a/tests/Makefile.am b/tests/Makefile.am index 9d92587eb08..454275022bc 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -138,7 +138,7 @@ unit_tests_sources = \ systems/constraint_operator_test.C \ systems/equation_systems_test.C \ systems/periodic_bc_test.C \ - systems/disconnected_neighbor_test.C \ + systems/disjoint_neighbor_test.C \ systems/systems_test.C \ utils/parameters_test.C \ utils/point_locator_test.C \ diff --git a/tests/Makefile.in b/tests/Makefile.in index 465f2a02a2d..c95ed43ec5d 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -256,7 +256,7 @@ am__unit_tests_dbg_SOURCES_DIST = driver.C libmesh_cppunit.h \ solvers/second_order_unsteady_solver_test.C \ systems/constraint_operator_test.C \ systems/equation_systems_test.C systems/periodic_bc_test.C \ - systems/disconnected_neighbor_test.C systems/systems_test.C \ + systems/disjoint_neighbor_test.C systems/systems_test.C \ utils/parameters_test.C utils/point_locator_test.C \ utils/rb_parameters_test.C utils/transparent_comparator.C \ utils/vectormap_test.C utils/xdr_test.C fparser/autodiff.C @@ -372,7 +372,7 @@ am__objects_2 = unit_tests_dbg-driver.$(OBJEXT) \ systems/unit_tests_dbg-constraint_operator_test.$(OBJEXT) \ systems/unit_tests_dbg-equation_systems_test.$(OBJEXT) \ systems/unit_tests_dbg-periodic_bc_test.$(OBJEXT) \ - systems/unit_tests_dbg-disconnected_neighbor_test.$(OBJEXT) \ + systems/unit_tests_dbg-disjoint_neighbor_test.$(OBJEXT) \ systems/unit_tests_dbg-systems_test.$(OBJEXT) \ utils/unit_tests_dbg-parameters_test.$(OBJEXT) \ utils/unit_tests_dbg-point_locator_test.$(OBJEXT) \ @@ -386,7 +386,7 @@ unit_tests_dbg_OBJECTS = $(am_unit_tests_dbg_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent -am__v_lt_1 = +am__v_lt_1 = unit_tests_dbg_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ @@ -459,7 +459,7 @@ am__unit_tests_devel_SOURCES_DIST = driver.C libmesh_cppunit.h \ solvers/second_order_unsteady_solver_test.C \ systems/constraint_operator_test.C \ systems/equation_systems_test.C systems/periodic_bc_test.C \ - systems/disconnected_neighbor_test.C systems/systems_test.C \ + systems/disjoint_neighbor_test.C systems/systems_test.C \ utils/parameters_test.C utils/point_locator_test.C \ utils/rb_parameters_test.C utils/transparent_comparator.C \ utils/vectormap_test.C utils/xdr_test.C fparser/autodiff.C @@ -574,7 +574,7 @@ am__objects_4 = unit_tests_devel-driver.$(OBJEXT) \ systems/unit_tests_devel-constraint_operator_test.$(OBJEXT) \ systems/unit_tests_devel-equation_systems_test.$(OBJEXT) \ systems/unit_tests_devel-periodic_bc_test.$(OBJEXT) \ - systems/unit_tests_devel-disconnected_neighbor_test.$(OBJEXT) \ + systems/unit_tests_devel-disjoint_neighbor_test.$(OBJEXT) \ systems/unit_tests_devel-systems_test.$(OBJEXT) \ utils/unit_tests_devel-parameters_test.$(OBJEXT) \ utils/unit_tests_devel-point_locator_test.$(OBJEXT) \ @@ -657,7 +657,7 @@ am__unit_tests_oprof_SOURCES_DIST = driver.C libmesh_cppunit.h \ solvers/second_order_unsteady_solver_test.C \ systems/constraint_operator_test.C \ systems/equation_systems_test.C systems/periodic_bc_test.C \ - systems/disconnected_neighbor_test.C systems/systems_test.C \ + systems/disjoint_neighbor_test.C systems/systems_test.C \ utils/parameters_test.C utils/point_locator_test.C \ utils/rb_parameters_test.C utils/transparent_comparator.C \ utils/vectormap_test.C utils/xdr_test.C fparser/autodiff.C @@ -772,7 +772,7 @@ am__objects_6 = unit_tests_oprof-driver.$(OBJEXT) \ systems/unit_tests_oprof-constraint_operator_test.$(OBJEXT) \ systems/unit_tests_oprof-equation_systems_test.$(OBJEXT) \ systems/unit_tests_oprof-periodic_bc_test.$(OBJEXT) \ - systems/unit_tests_oprof-disconnected_neighbor_test.$(OBJEXT) \ + systems/unit_tests_oprof-disjoint_neighbor_test.$(OBJEXT) \ systems/unit_tests_oprof-systems_test.$(OBJEXT) \ utils/unit_tests_oprof-parameters_test.$(OBJEXT) \ utils/unit_tests_oprof-point_locator_test.$(OBJEXT) \ @@ -855,7 +855,7 @@ am__unit_tests_opt_SOURCES_DIST = driver.C libmesh_cppunit.h \ solvers/second_order_unsteady_solver_test.C \ systems/constraint_operator_test.C \ systems/equation_systems_test.C systems/periodic_bc_test.C \ - systems/disconnected_neighbor_test.C systems/systems_test.C \ + systems/disjoint_neighbor_test.C systems/systems_test.C \ utils/parameters_test.C utils/point_locator_test.C \ utils/rb_parameters_test.C utils/transparent_comparator.C \ utils/vectormap_test.C utils/xdr_test.C fparser/autodiff.C @@ -970,7 +970,7 @@ am__objects_8 = unit_tests_opt-driver.$(OBJEXT) \ systems/unit_tests_opt-constraint_operator_test.$(OBJEXT) \ systems/unit_tests_opt-equation_systems_test.$(OBJEXT) \ systems/unit_tests_opt-periodic_bc_test.$(OBJEXT) \ - systems/unit_tests_opt-disconnected_neighbor_test.$(OBJEXT) \ + systems/unit_tests_opt-disjoint_neighbor_test.$(OBJEXT) \ systems/unit_tests_opt-systems_test.$(OBJEXT) \ utils/unit_tests_opt-parameters_test.$(OBJEXT) \ utils/unit_tests_opt-point_locator_test.$(OBJEXT) \ @@ -1053,7 +1053,7 @@ am__unit_tests_prof_SOURCES_DIST = driver.C libmesh_cppunit.h \ solvers/second_order_unsteady_solver_test.C \ systems/constraint_operator_test.C \ systems/equation_systems_test.C systems/periodic_bc_test.C \ - systems/disconnected_neighbor_test.C systems/systems_test.C \ + systems/disjoint_neighbor_test.C systems/systems_test.C \ utils/parameters_test.C utils/point_locator_test.C \ utils/rb_parameters_test.C utils/transparent_comparator.C \ utils/vectormap_test.C utils/xdr_test.C fparser/autodiff.C @@ -1168,7 +1168,7 @@ am__objects_10 = unit_tests_prof-driver.$(OBJEXT) \ systems/unit_tests_prof-constraint_operator_test.$(OBJEXT) \ systems/unit_tests_prof-equation_systems_test.$(OBJEXT) \ systems/unit_tests_prof-periodic_bc_test.$(OBJEXT) \ - systems/unit_tests_prof-disconnected_neighbor_test.$(OBJEXT) \ + systems/unit_tests_prof-disjoint_neighbor_test.$(OBJEXT) \ systems/unit_tests_prof-systems_test.$(OBJEXT) \ utils/unit_tests_prof-parameters_test.$(OBJEXT) \ utils/unit_tests_prof-point_locator_test.$(OBJEXT) \ @@ -1190,11 +1190,11 @@ am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = +am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ -am__v_at_1 = +am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__maybe_remake_depfiles = depfiles @@ -1739,27 +1739,27 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ solvers/$(DEPDIR)/unit_tests_prof-first_order_unsteady_solver_test.Po \ solvers/$(DEPDIR)/unit_tests_prof-second_order_unsteady_solver_test.Po \ systems/$(DEPDIR)/unit_tests_dbg-constraint_operator_test.Po \ - systems/$(DEPDIR)/unit_tests_dbg-disconnected_neighbor_test.Po \ + systems/$(DEPDIR)/unit_tests_dbg-disjoint_neighbor_test.Po \ systems/$(DEPDIR)/unit_tests_dbg-equation_systems_test.Po \ systems/$(DEPDIR)/unit_tests_dbg-periodic_bc_test.Po \ systems/$(DEPDIR)/unit_tests_dbg-systems_test.Po \ systems/$(DEPDIR)/unit_tests_devel-constraint_operator_test.Po \ - systems/$(DEPDIR)/unit_tests_devel-disconnected_neighbor_test.Po \ + systems/$(DEPDIR)/unit_tests_devel-disjoint_neighbor_test.Po \ systems/$(DEPDIR)/unit_tests_devel-equation_systems_test.Po \ systems/$(DEPDIR)/unit_tests_devel-periodic_bc_test.Po \ systems/$(DEPDIR)/unit_tests_devel-systems_test.Po \ systems/$(DEPDIR)/unit_tests_oprof-constraint_operator_test.Po \ - systems/$(DEPDIR)/unit_tests_oprof-disconnected_neighbor_test.Po \ + systems/$(DEPDIR)/unit_tests_oprof-disjoint_neighbor_test.Po \ systems/$(DEPDIR)/unit_tests_oprof-equation_systems_test.Po \ systems/$(DEPDIR)/unit_tests_oprof-periodic_bc_test.Po \ systems/$(DEPDIR)/unit_tests_oprof-systems_test.Po \ systems/$(DEPDIR)/unit_tests_opt-constraint_operator_test.Po \ - systems/$(DEPDIR)/unit_tests_opt-disconnected_neighbor_test.Po \ + systems/$(DEPDIR)/unit_tests_opt-disjoint_neighbor_test.Po \ systems/$(DEPDIR)/unit_tests_opt-equation_systems_test.Po \ systems/$(DEPDIR)/unit_tests_opt-periodic_bc_test.Po \ systems/$(DEPDIR)/unit_tests_opt-systems_test.Po \ systems/$(DEPDIR)/unit_tests_prof-constraint_operator_test.Po \ - systems/$(DEPDIR)/unit_tests_prof-disconnected_neighbor_test.Po \ + systems/$(DEPDIR)/unit_tests_prof-disjoint_neighbor_test.Po \ systems/$(DEPDIR)/unit_tests_prof-equation_systems_test.Po \ systems/$(DEPDIR)/unit_tests_prof-periodic_bc_test.Po \ systems/$(DEPDIR)/unit_tests_prof-systems_test.Po \ @@ -1803,7 +1803,7 @@ LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; -am__v_CXX_1 = +am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ @@ -1811,7 +1811,7 @@ CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; -am__v_CXXLD_1 = +am__v_CXXLD_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ @@ -1821,7 +1821,7 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; -am__v_CC_1 = +am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ @@ -1829,7 +1829,7 @@ LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; -am__v_CCLD_1 = +am__v_CCLD_1 = SOURCES = $(unit_tests_dbg_SOURCES) $(unit_tests_devel_SOURCES) \ $(unit_tests_oprof_SOURCES) $(unit_tests_opt_SOURCES) \ $(unit_tests_prof_SOURCES) @@ -2323,7 +2323,7 @@ unit_tests_sources = driver.C libmesh_cppunit.h stream_redirector.h \ solvers/second_order_unsteady_solver_test.C \ systems/constraint_operator_test.C \ systems/equation_systems_test.C systems/periodic_bc_test.C \ - systems/disconnected_neighbor_test.C systems/systems_test.C \ + systems/disjoint_neighbor_test.C systems/systems_test.C \ utils/parameters_test.C utils/point_locator_test.C \ utils/rb_parameters_test.C utils/transparent_comparator.C \ utils/vectormap_test.C utils/xdr_test.C $(am__append_1) @@ -2806,7 +2806,7 @@ systems/unit_tests_dbg-equation_systems_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) systems/unit_tests_dbg-periodic_bc_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) -systems/unit_tests_dbg-disconnected_neighbor_test.$(OBJEXT): \ +systems/unit_tests_dbg-disjoint_neighbor_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) systems/unit_tests_dbg-systems_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) @@ -2837,7 +2837,7 @@ fparser/$(DEPDIR)/$(am__dirstamp): fparser/unit_tests_dbg-autodiff.$(OBJEXT): fparser/$(am__dirstamp) \ fparser/$(DEPDIR)/$(am__dirstamp) -unit_tests-dbg$(EXEEXT): $(unit_tests_dbg_OBJECTS) $(unit_tests_dbg_DEPENDENCIES) $(EXTRA_unit_tests_dbg_DEPENDENCIES) +unit_tests-dbg$(EXEEXT): $(unit_tests_dbg_OBJECTS) $(unit_tests_dbg_DEPENDENCIES) $(EXTRA_unit_tests_dbg_DEPENDENCIES) @rm -f unit_tests-dbg$(EXEEXT) $(AM_V_CXXLD)$(unit_tests_dbg_LINK) $(unit_tests_dbg_OBJECTS) $(unit_tests_dbg_LDADD) $(LIBS) base/unit_tests_devel-dof_map_test.$(OBJEXT): base/$(am__dirstamp) \ @@ -3066,7 +3066,7 @@ systems/unit_tests_devel-equation_systems_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) systems/unit_tests_devel-periodic_bc_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) -systems/unit_tests_devel-disconnected_neighbor_test.$(OBJEXT): \ +systems/unit_tests_devel-disjoint_neighbor_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) systems/unit_tests_devel-systems_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) @@ -3085,7 +3085,7 @@ utils/unit_tests_devel-xdr_test.$(OBJEXT): utils/$(am__dirstamp) \ fparser/unit_tests_devel-autodiff.$(OBJEXT): fparser/$(am__dirstamp) \ fparser/$(DEPDIR)/$(am__dirstamp) -unit_tests-devel$(EXEEXT): $(unit_tests_devel_OBJECTS) $(unit_tests_devel_DEPENDENCIES) $(EXTRA_unit_tests_devel_DEPENDENCIES) +unit_tests-devel$(EXEEXT): $(unit_tests_devel_OBJECTS) $(unit_tests_devel_DEPENDENCIES) $(EXTRA_unit_tests_devel_DEPENDENCIES) @rm -f unit_tests-devel$(EXEEXT) $(AM_V_CXXLD)$(unit_tests_devel_LINK) $(unit_tests_devel_OBJECTS) $(unit_tests_devel_LDADD) $(LIBS) base/unit_tests_oprof-dof_map_test.$(OBJEXT): base/$(am__dirstamp) \ @@ -3314,7 +3314,7 @@ systems/unit_tests_oprof-equation_systems_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) systems/unit_tests_oprof-periodic_bc_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) -systems/unit_tests_oprof-disconnected_neighbor_test.$(OBJEXT): \ +systems/unit_tests_oprof-disjoint_neighbor_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) systems/unit_tests_oprof-systems_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) @@ -3333,7 +3333,7 @@ utils/unit_tests_oprof-xdr_test.$(OBJEXT): utils/$(am__dirstamp) \ fparser/unit_tests_oprof-autodiff.$(OBJEXT): fparser/$(am__dirstamp) \ fparser/$(DEPDIR)/$(am__dirstamp) -unit_tests-oprof$(EXEEXT): $(unit_tests_oprof_OBJECTS) $(unit_tests_oprof_DEPENDENCIES) $(EXTRA_unit_tests_oprof_DEPENDENCIES) +unit_tests-oprof$(EXEEXT): $(unit_tests_oprof_OBJECTS) $(unit_tests_oprof_DEPENDENCIES) $(EXTRA_unit_tests_oprof_DEPENDENCIES) @rm -f unit_tests-oprof$(EXEEXT) $(AM_V_CXXLD)$(unit_tests_oprof_LINK) $(unit_tests_oprof_OBJECTS) $(unit_tests_oprof_LDADD) $(LIBS) base/unit_tests_opt-dof_map_test.$(OBJEXT): base/$(am__dirstamp) \ @@ -3562,7 +3562,7 @@ systems/unit_tests_opt-equation_systems_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) systems/unit_tests_opt-periodic_bc_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) -systems/unit_tests_opt-disconnected_neighbor_test.$(OBJEXT): \ +systems/unit_tests_opt-disjoint_neighbor_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) systems/unit_tests_opt-systems_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) @@ -3581,7 +3581,7 @@ utils/unit_tests_opt-xdr_test.$(OBJEXT): utils/$(am__dirstamp) \ fparser/unit_tests_opt-autodiff.$(OBJEXT): fparser/$(am__dirstamp) \ fparser/$(DEPDIR)/$(am__dirstamp) -unit_tests-opt$(EXEEXT): $(unit_tests_opt_OBJECTS) $(unit_tests_opt_DEPENDENCIES) $(EXTRA_unit_tests_opt_DEPENDENCIES) +unit_tests-opt$(EXEEXT): $(unit_tests_opt_OBJECTS) $(unit_tests_opt_DEPENDENCIES) $(EXTRA_unit_tests_opt_DEPENDENCIES) @rm -f unit_tests-opt$(EXEEXT) $(AM_V_CXXLD)$(unit_tests_opt_LINK) $(unit_tests_opt_OBJECTS) $(unit_tests_opt_LDADD) $(LIBS) base/unit_tests_prof-dof_map_test.$(OBJEXT): base/$(am__dirstamp) \ @@ -3810,7 +3810,7 @@ systems/unit_tests_prof-equation_systems_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) systems/unit_tests_prof-periodic_bc_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) -systems/unit_tests_prof-disconnected_neighbor_test.$(OBJEXT): \ +systems/unit_tests_prof-disjoint_neighbor_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) systems/unit_tests_prof-systems_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) @@ -3829,7 +3829,7 @@ utils/unit_tests_prof-xdr_test.$(OBJEXT): utils/$(am__dirstamp) \ fparser/unit_tests_prof-autodiff.$(OBJEXT): fparser/$(am__dirstamp) \ fparser/$(DEPDIR)/$(am__dirstamp) -unit_tests-prof$(EXEEXT): $(unit_tests_prof_OBJECTS) $(unit_tests_prof_DEPENDENCIES) $(EXTRA_unit_tests_prof_DEPENDENCIES) +unit_tests-prof$(EXEEXT): $(unit_tests_prof_OBJECTS) $(unit_tests_prof_DEPENDENCIES) $(EXTRA_unit_tests_prof_DEPENDENCIES) @rm -f unit_tests-prof$(EXEEXT) $(AM_V_CXXLD)$(unit_tests_prof_LINK) $(unit_tests_prof_OBJECTS) $(unit_tests_prof_LDADD) $(LIBS) @@ -4392,27 +4392,27 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@solvers/$(DEPDIR)/unit_tests_prof-first_order_unsteady_solver_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@solvers/$(DEPDIR)/unit_tests_prof-second_order_unsteady_solver_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_dbg-constraint_operator_test.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_dbg-disconnected_neighbor_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_dbg-disjoint_neighbor_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_dbg-equation_systems_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_dbg-periodic_bc_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_dbg-systems_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_devel-constraint_operator_test.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_devel-disconnected_neighbor_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_devel-disjoint_neighbor_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_devel-equation_systems_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_devel-periodic_bc_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_devel-systems_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_oprof-constraint_operator_test.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_oprof-disconnected_neighbor_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_oprof-disjoint_neighbor_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_oprof-equation_systems_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_oprof-periodic_bc_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_oprof-systems_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_opt-constraint_operator_test.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_opt-disconnected_neighbor_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_opt-disjoint_neighbor_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_opt-equation_systems_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_opt-periodic_bc_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_opt-systems_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_prof-constraint_operator_test.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_prof-disconnected_neighbor_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_prof-disjoint_neighbor_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_prof-equation_systems_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_prof-periodic_bc_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_prof-systems_test.Po@am__quote@ # am--include-marker @@ -6017,19 +6017,19 @@ systems/unit_tests_dbg-periodic_bc_test.obj: systems/periodic_bc_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_dbg-periodic_bc_test.obj `if test -f 'systems/periodic_bc_test.C'; then $(CYGPATH_W) 'systems/periodic_bc_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/periodic_bc_test.C'; fi` -systems/unit_tests_dbg-disconnected_neighbor_test.o: systems/disconnected_neighbor_test.C -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_dbg-disconnected_neighbor_test.o -MD -MP -MF systems/$(DEPDIR)/unit_tests_dbg-disconnected_neighbor_test.Tpo -c -o systems/unit_tests_dbg-disconnected_neighbor_test.o `test -f 'systems/disconnected_neighbor_test.C' || echo '$(srcdir)/'`systems/disconnected_neighbor_test.C -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_dbg-disconnected_neighbor_test.Tpo systems/$(DEPDIR)/unit_tests_dbg-disconnected_neighbor_test.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/disconnected_neighbor_test.C' object='systems/unit_tests_dbg-disconnected_neighbor_test.o' libtool=no @AMDEPBACKSLASH@ +systems/unit_tests_dbg-disjoint_neighbor_test.o: systems/disjoint_neighbor_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_dbg-disjoint_neighbor_test.o -MD -MP -MF systems/$(DEPDIR)/unit_tests_dbg-disjoint_neighbor_test.Tpo -c -o systems/unit_tests_dbg-disjoint_neighbor_test.o `test -f 'systems/disjoint_neighbor_test.C' || echo '$(srcdir)/'`systems/disjoint_neighbor_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_dbg-disjoint_neighbor_test.Tpo systems/$(DEPDIR)/unit_tests_dbg-disjoint_neighbor_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/disjoint_neighbor_test.C' object='systems/unit_tests_dbg-disjoint_neighbor_test.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_dbg-disconnected_neighbor_test.o `test -f 'systems/disconnected_neighbor_test.C' || echo '$(srcdir)/'`systems/disconnected_neighbor_test.C +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_dbg-disjoint_neighbor_test.o `test -f 'systems/disjoint_neighbor_test.C' || echo '$(srcdir)/'`systems/disjoint_neighbor_test.C -systems/unit_tests_dbg-disconnected_neighbor_test.obj: systems/disconnected_neighbor_test.C -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_dbg-disconnected_neighbor_test.obj -MD -MP -MF systems/$(DEPDIR)/unit_tests_dbg-disconnected_neighbor_test.Tpo -c -o systems/unit_tests_dbg-disconnected_neighbor_test.obj `if test -f 'systems/disconnected_neighbor_test.C'; then $(CYGPATH_W) 'systems/disconnected_neighbor_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/disconnected_neighbor_test.C'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_dbg-disconnected_neighbor_test.Tpo systems/$(DEPDIR)/unit_tests_dbg-disconnected_neighbor_test.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/disconnected_neighbor_test.C' object='systems/unit_tests_dbg-disconnected_neighbor_test.obj' libtool=no @AMDEPBACKSLASH@ +systems/unit_tests_dbg-disjoint_neighbor_test.obj: systems/disjoint_neighbor_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_dbg-disjoint_neighbor_test.obj -MD -MP -MF systems/$(DEPDIR)/unit_tests_dbg-disjoint_neighbor_test.Tpo -c -o systems/unit_tests_dbg-disjoint_neighbor_test.obj `if test -f 'systems/disjoint_neighbor_test.C'; then $(CYGPATH_W) 'systems/disjoint_neighbor_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/disjoint_neighbor_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_dbg-disjoint_neighbor_test.Tpo systems/$(DEPDIR)/unit_tests_dbg-disjoint_neighbor_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/disjoint_neighbor_test.C' object='systems/unit_tests_dbg-disjoint_neighbor_test.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_dbg-disconnected_neighbor_test.obj `if test -f 'systems/disconnected_neighbor_test.C'; then $(CYGPATH_W) 'systems/disconnected_neighbor_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/disconnected_neighbor_test.C'; fi` +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_dbg-disjoint_neighbor_test.obj `if test -f 'systems/disjoint_neighbor_test.C'; then $(CYGPATH_W) 'systems/disjoint_neighbor_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/disjoint_neighbor_test.C'; fi` systems/unit_tests_dbg-systems_test.o: systems/systems_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_dbg-systems_test.o -MD -MP -MF systems/$(DEPDIR)/unit_tests_dbg-systems_test.Tpo -c -o systems/unit_tests_dbg-systems_test.o `test -f 'systems/systems_test.C' || echo '$(srcdir)/'`systems/systems_test.C @@ -7683,19 +7683,19 @@ systems/unit_tests_devel-periodic_bc_test.obj: systems/periodic_bc_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_devel-periodic_bc_test.obj `if test -f 'systems/periodic_bc_test.C'; then $(CYGPATH_W) 'systems/periodic_bc_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/periodic_bc_test.C'; fi` -systems/unit_tests_devel-disconnected_neighbor_test.o: systems/disconnected_neighbor_test.C -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_devel-disconnected_neighbor_test.o -MD -MP -MF systems/$(DEPDIR)/unit_tests_devel-disconnected_neighbor_test.Tpo -c -o systems/unit_tests_devel-disconnected_neighbor_test.o `test -f 'systems/disconnected_neighbor_test.C' || echo '$(srcdir)/'`systems/disconnected_neighbor_test.C -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_devel-disconnected_neighbor_test.Tpo systems/$(DEPDIR)/unit_tests_devel-disconnected_neighbor_test.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/disconnected_neighbor_test.C' object='systems/unit_tests_devel-disconnected_neighbor_test.o' libtool=no @AMDEPBACKSLASH@ +systems/unit_tests_devel-disjoint_neighbor_test.o: systems/disjoint_neighbor_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_devel-disjoint_neighbor_test.o -MD -MP -MF systems/$(DEPDIR)/unit_tests_devel-disjoint_neighbor_test.Tpo -c -o systems/unit_tests_devel-disjoint_neighbor_test.o `test -f 'systems/disjoint_neighbor_test.C' || echo '$(srcdir)/'`systems/disjoint_neighbor_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_devel-disjoint_neighbor_test.Tpo systems/$(DEPDIR)/unit_tests_devel-disjoint_neighbor_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/disjoint_neighbor_test.C' object='systems/unit_tests_devel-disjoint_neighbor_test.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_devel-disconnected_neighbor_test.o `test -f 'systems/disconnected_neighbor_test.C' || echo '$(srcdir)/'`systems/disconnected_neighbor_test.C +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_devel-disjoint_neighbor_test.o `test -f 'systems/disjoint_neighbor_test.C' || echo '$(srcdir)/'`systems/disjoint_neighbor_test.C -systems/unit_tests_devel-disconnected_neighbor_test.obj: systems/disconnected_neighbor_test.C -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_devel-disconnected_neighbor_test.obj -MD -MP -MF systems/$(DEPDIR)/unit_tests_devel-disconnected_neighbor_test.Tpo -c -o systems/unit_tests_devel-disconnected_neighbor_test.obj `if test -f 'systems/disconnected_neighbor_test.C'; then $(CYGPATH_W) 'systems/disconnected_neighbor_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/disconnected_neighbor_test.C'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_devel-disconnected_neighbor_test.Tpo systems/$(DEPDIR)/unit_tests_devel-disconnected_neighbor_test.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/disconnected_neighbor_test.C' object='systems/unit_tests_devel-disconnected_neighbor_test.obj' libtool=no @AMDEPBACKSLASH@ +systems/unit_tests_devel-disjoint_neighbor_test.obj: systems/disjoint_neighbor_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_devel-disjoint_neighbor_test.obj -MD -MP -MF systems/$(DEPDIR)/unit_tests_devel-disjoint_neighbor_test.Tpo -c -o systems/unit_tests_devel-disjoint_neighbor_test.obj `if test -f 'systems/disjoint_neighbor_test.C'; then $(CYGPATH_W) 'systems/disjoint_neighbor_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/disjoint_neighbor_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_devel-disjoint_neighbor_test.Tpo systems/$(DEPDIR)/unit_tests_devel-disjoint_neighbor_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/disjoint_neighbor_test.C' object='systems/unit_tests_devel-disjoint_neighbor_test.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_devel-disconnected_neighbor_test.obj `if test -f 'systems/disconnected_neighbor_test.C'; then $(CYGPATH_W) 'systems/disconnected_neighbor_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/disconnected_neighbor_test.C'; fi` +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_devel-disjoint_neighbor_test.obj `if test -f 'systems/disjoint_neighbor_test.C'; then $(CYGPATH_W) 'systems/disjoint_neighbor_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/disjoint_neighbor_test.C'; fi` systems/unit_tests_devel-systems_test.o: systems/systems_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_devel-systems_test.o -MD -MP -MF systems/$(DEPDIR)/unit_tests_devel-systems_test.Tpo -c -o systems/unit_tests_devel-systems_test.o `test -f 'systems/systems_test.C' || echo '$(srcdir)/'`systems/systems_test.C @@ -9349,19 +9349,19 @@ systems/unit_tests_oprof-periodic_bc_test.obj: systems/periodic_bc_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_oprof-periodic_bc_test.obj `if test -f 'systems/periodic_bc_test.C'; then $(CYGPATH_W) 'systems/periodic_bc_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/periodic_bc_test.C'; fi` -systems/unit_tests_oprof-disconnected_neighbor_test.o: systems/disconnected_neighbor_test.C -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_oprof-disconnected_neighbor_test.o -MD -MP -MF systems/$(DEPDIR)/unit_tests_oprof-disconnected_neighbor_test.Tpo -c -o systems/unit_tests_oprof-disconnected_neighbor_test.o `test -f 'systems/disconnected_neighbor_test.C' || echo '$(srcdir)/'`systems/disconnected_neighbor_test.C -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_oprof-disconnected_neighbor_test.Tpo systems/$(DEPDIR)/unit_tests_oprof-disconnected_neighbor_test.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/disconnected_neighbor_test.C' object='systems/unit_tests_oprof-disconnected_neighbor_test.o' libtool=no @AMDEPBACKSLASH@ +systems/unit_tests_oprof-disjoint_neighbor_test.o: systems/disjoint_neighbor_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_oprof-disjoint_neighbor_test.o -MD -MP -MF systems/$(DEPDIR)/unit_tests_oprof-disjoint_neighbor_test.Tpo -c -o systems/unit_tests_oprof-disjoint_neighbor_test.o `test -f 'systems/disjoint_neighbor_test.C' || echo '$(srcdir)/'`systems/disjoint_neighbor_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_oprof-disjoint_neighbor_test.Tpo systems/$(DEPDIR)/unit_tests_oprof-disjoint_neighbor_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/disjoint_neighbor_test.C' object='systems/unit_tests_oprof-disjoint_neighbor_test.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_oprof-disconnected_neighbor_test.o `test -f 'systems/disconnected_neighbor_test.C' || echo '$(srcdir)/'`systems/disconnected_neighbor_test.C +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_oprof-disjoint_neighbor_test.o `test -f 'systems/disjoint_neighbor_test.C' || echo '$(srcdir)/'`systems/disjoint_neighbor_test.C -systems/unit_tests_oprof-disconnected_neighbor_test.obj: systems/disconnected_neighbor_test.C -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_oprof-disconnected_neighbor_test.obj -MD -MP -MF systems/$(DEPDIR)/unit_tests_oprof-disconnected_neighbor_test.Tpo -c -o systems/unit_tests_oprof-disconnected_neighbor_test.obj `if test -f 'systems/disconnected_neighbor_test.C'; then $(CYGPATH_W) 'systems/disconnected_neighbor_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/disconnected_neighbor_test.C'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_oprof-disconnected_neighbor_test.Tpo systems/$(DEPDIR)/unit_tests_oprof-disconnected_neighbor_test.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/disconnected_neighbor_test.C' object='systems/unit_tests_oprof-disconnected_neighbor_test.obj' libtool=no @AMDEPBACKSLASH@ +systems/unit_tests_oprof-disjoint_neighbor_test.obj: systems/disjoint_neighbor_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_oprof-disjoint_neighbor_test.obj -MD -MP -MF systems/$(DEPDIR)/unit_tests_oprof-disjoint_neighbor_test.Tpo -c -o systems/unit_tests_oprof-disjoint_neighbor_test.obj `if test -f 'systems/disjoint_neighbor_test.C'; then $(CYGPATH_W) 'systems/disjoint_neighbor_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/disjoint_neighbor_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_oprof-disjoint_neighbor_test.Tpo systems/$(DEPDIR)/unit_tests_oprof-disjoint_neighbor_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/disjoint_neighbor_test.C' object='systems/unit_tests_oprof-disjoint_neighbor_test.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_oprof-disconnected_neighbor_test.obj `if test -f 'systems/disconnected_neighbor_test.C'; then $(CYGPATH_W) 'systems/disconnected_neighbor_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/disconnected_neighbor_test.C'; fi` +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_oprof-disjoint_neighbor_test.obj `if test -f 'systems/disjoint_neighbor_test.C'; then $(CYGPATH_W) 'systems/disjoint_neighbor_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/disjoint_neighbor_test.C'; fi` systems/unit_tests_oprof-systems_test.o: systems/systems_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_oprof-systems_test.o -MD -MP -MF systems/$(DEPDIR)/unit_tests_oprof-systems_test.Tpo -c -o systems/unit_tests_oprof-systems_test.o `test -f 'systems/systems_test.C' || echo '$(srcdir)/'`systems/systems_test.C @@ -11015,19 +11015,19 @@ systems/unit_tests_opt-periodic_bc_test.obj: systems/periodic_bc_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_opt-periodic_bc_test.obj `if test -f 'systems/periodic_bc_test.C'; then $(CYGPATH_W) 'systems/periodic_bc_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/periodic_bc_test.C'; fi` -systems/unit_tests_opt-disconnected_neighbor_test.o: systems/disconnected_neighbor_test.C -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_opt-disconnected_neighbor_test.o -MD -MP -MF systems/$(DEPDIR)/unit_tests_opt-disconnected_neighbor_test.Tpo -c -o systems/unit_tests_opt-disconnected_neighbor_test.o `test -f 'systems/disconnected_neighbor_test.C' || echo '$(srcdir)/'`systems/disconnected_neighbor_test.C -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_opt-disconnected_neighbor_test.Tpo systems/$(DEPDIR)/unit_tests_opt-disconnected_neighbor_test.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/disconnected_neighbor_test.C' object='systems/unit_tests_opt-disconnected_neighbor_test.o' libtool=no @AMDEPBACKSLASH@ +systems/unit_tests_opt-disjoint_neighbor_test.o: systems/disjoint_neighbor_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_opt-disjoint_neighbor_test.o -MD -MP -MF systems/$(DEPDIR)/unit_tests_opt-disjoint_neighbor_test.Tpo -c -o systems/unit_tests_opt-disjoint_neighbor_test.o `test -f 'systems/disjoint_neighbor_test.C' || echo '$(srcdir)/'`systems/disjoint_neighbor_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_opt-disjoint_neighbor_test.Tpo systems/$(DEPDIR)/unit_tests_opt-disjoint_neighbor_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/disjoint_neighbor_test.C' object='systems/unit_tests_opt-disjoint_neighbor_test.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_opt-disconnected_neighbor_test.o `test -f 'systems/disconnected_neighbor_test.C' || echo '$(srcdir)/'`systems/disconnected_neighbor_test.C +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_opt-disjoint_neighbor_test.o `test -f 'systems/disjoint_neighbor_test.C' || echo '$(srcdir)/'`systems/disjoint_neighbor_test.C -systems/unit_tests_opt-disconnected_neighbor_test.obj: systems/disconnected_neighbor_test.C -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_opt-disconnected_neighbor_test.obj -MD -MP -MF systems/$(DEPDIR)/unit_tests_opt-disconnected_neighbor_test.Tpo -c -o systems/unit_tests_opt-disconnected_neighbor_test.obj `if test -f 'systems/disconnected_neighbor_test.C'; then $(CYGPATH_W) 'systems/disconnected_neighbor_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/disconnected_neighbor_test.C'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_opt-disconnected_neighbor_test.Tpo systems/$(DEPDIR)/unit_tests_opt-disconnected_neighbor_test.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/disconnected_neighbor_test.C' object='systems/unit_tests_opt-disconnected_neighbor_test.obj' libtool=no @AMDEPBACKSLASH@ +systems/unit_tests_opt-disjoint_neighbor_test.obj: systems/disjoint_neighbor_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_opt-disjoint_neighbor_test.obj -MD -MP -MF systems/$(DEPDIR)/unit_tests_opt-disjoint_neighbor_test.Tpo -c -o systems/unit_tests_opt-disjoint_neighbor_test.obj `if test -f 'systems/disjoint_neighbor_test.C'; then $(CYGPATH_W) 'systems/disjoint_neighbor_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/disjoint_neighbor_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_opt-disjoint_neighbor_test.Tpo systems/$(DEPDIR)/unit_tests_opt-disjoint_neighbor_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/disjoint_neighbor_test.C' object='systems/unit_tests_opt-disjoint_neighbor_test.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_opt-disconnected_neighbor_test.obj `if test -f 'systems/disconnected_neighbor_test.C'; then $(CYGPATH_W) 'systems/disconnected_neighbor_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/disconnected_neighbor_test.C'; fi` +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_opt-disjoint_neighbor_test.obj `if test -f 'systems/disjoint_neighbor_test.C'; then $(CYGPATH_W) 'systems/disjoint_neighbor_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/disjoint_neighbor_test.C'; fi` systems/unit_tests_opt-systems_test.o: systems/systems_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_opt-systems_test.o -MD -MP -MF systems/$(DEPDIR)/unit_tests_opt-systems_test.Tpo -c -o systems/unit_tests_opt-systems_test.o `test -f 'systems/systems_test.C' || echo '$(srcdir)/'`systems/systems_test.C @@ -12681,19 +12681,19 @@ systems/unit_tests_prof-periodic_bc_test.obj: systems/periodic_bc_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_prof-periodic_bc_test.obj `if test -f 'systems/periodic_bc_test.C'; then $(CYGPATH_W) 'systems/periodic_bc_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/periodic_bc_test.C'; fi` -systems/unit_tests_prof-disconnected_neighbor_test.o: systems/disconnected_neighbor_test.C -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_prof-disconnected_neighbor_test.o -MD -MP -MF systems/$(DEPDIR)/unit_tests_prof-disconnected_neighbor_test.Tpo -c -o systems/unit_tests_prof-disconnected_neighbor_test.o `test -f 'systems/disconnected_neighbor_test.C' || echo '$(srcdir)/'`systems/disconnected_neighbor_test.C -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_prof-disconnected_neighbor_test.Tpo systems/$(DEPDIR)/unit_tests_prof-disconnected_neighbor_test.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/disconnected_neighbor_test.C' object='systems/unit_tests_prof-disconnected_neighbor_test.o' libtool=no @AMDEPBACKSLASH@ +systems/unit_tests_prof-disjoint_neighbor_test.o: systems/disjoint_neighbor_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_prof-disjoint_neighbor_test.o -MD -MP -MF systems/$(DEPDIR)/unit_tests_prof-disjoint_neighbor_test.Tpo -c -o systems/unit_tests_prof-disjoint_neighbor_test.o `test -f 'systems/disjoint_neighbor_test.C' || echo '$(srcdir)/'`systems/disjoint_neighbor_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_prof-disjoint_neighbor_test.Tpo systems/$(DEPDIR)/unit_tests_prof-disjoint_neighbor_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/disjoint_neighbor_test.C' object='systems/unit_tests_prof-disjoint_neighbor_test.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_prof-disconnected_neighbor_test.o `test -f 'systems/disconnected_neighbor_test.C' || echo '$(srcdir)/'`systems/disconnected_neighbor_test.C +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_prof-disjoint_neighbor_test.o `test -f 'systems/disjoint_neighbor_test.C' || echo '$(srcdir)/'`systems/disjoint_neighbor_test.C -systems/unit_tests_prof-disconnected_neighbor_test.obj: systems/disconnected_neighbor_test.C -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_prof-disconnected_neighbor_test.obj -MD -MP -MF systems/$(DEPDIR)/unit_tests_prof-disconnected_neighbor_test.Tpo -c -o systems/unit_tests_prof-disconnected_neighbor_test.obj `if test -f 'systems/disconnected_neighbor_test.C'; then $(CYGPATH_W) 'systems/disconnected_neighbor_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/disconnected_neighbor_test.C'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_prof-disconnected_neighbor_test.Tpo systems/$(DEPDIR)/unit_tests_prof-disconnected_neighbor_test.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/disconnected_neighbor_test.C' object='systems/unit_tests_prof-disconnected_neighbor_test.obj' libtool=no @AMDEPBACKSLASH@ +systems/unit_tests_prof-disjoint_neighbor_test.obj: systems/disjoint_neighbor_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_prof-disjoint_neighbor_test.obj -MD -MP -MF systems/$(DEPDIR)/unit_tests_prof-disjoint_neighbor_test.Tpo -c -o systems/unit_tests_prof-disjoint_neighbor_test.obj `if test -f 'systems/disjoint_neighbor_test.C'; then $(CYGPATH_W) 'systems/disjoint_neighbor_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/disjoint_neighbor_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_prof-disjoint_neighbor_test.Tpo systems/$(DEPDIR)/unit_tests_prof-disjoint_neighbor_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/disjoint_neighbor_test.C' object='systems/unit_tests_prof-disjoint_neighbor_test.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_prof-disconnected_neighbor_test.obj `if test -f 'systems/disconnected_neighbor_test.C'; then $(CYGPATH_W) 'systems/disconnected_neighbor_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/disconnected_neighbor_test.C'; fi` +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_prof-disjoint_neighbor_test.obj `if test -f 'systems/disjoint_neighbor_test.C'; then $(CYGPATH_W) 'systems/disjoint_neighbor_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/disjoint_neighbor_test.C'; fi` systems/unit_tests_prof-systems_test.o: systems/systems_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_prof-systems_test.o -MD -MP -MF systems/$(DEPDIR)/unit_tests_prof-systems_test.Tpo -c -o systems/unit_tests_prof-systems_test.o `test -f 'systems/systems_test.C' || echo '$(srcdir)/'`systems/systems_test.C @@ -13711,27 +13711,27 @@ distclean: distclean-am -rm -f solvers/$(DEPDIR)/unit_tests_prof-first_order_unsteady_solver_test.Po -rm -f solvers/$(DEPDIR)/unit_tests_prof-second_order_unsteady_solver_test.Po -rm -f systems/$(DEPDIR)/unit_tests_dbg-constraint_operator_test.Po - -rm -f systems/$(DEPDIR)/unit_tests_dbg-disconnected_neighbor_test.Po + -rm -f systems/$(DEPDIR)/unit_tests_dbg-disjoint_neighbor_test.Po -rm -f systems/$(DEPDIR)/unit_tests_dbg-equation_systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_dbg-periodic_bc_test.Po -rm -f systems/$(DEPDIR)/unit_tests_dbg-systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_devel-constraint_operator_test.Po - -rm -f systems/$(DEPDIR)/unit_tests_devel-disconnected_neighbor_test.Po + -rm -f systems/$(DEPDIR)/unit_tests_devel-disjoint_neighbor_test.Po -rm -f systems/$(DEPDIR)/unit_tests_devel-equation_systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_devel-periodic_bc_test.Po -rm -f systems/$(DEPDIR)/unit_tests_devel-systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_oprof-constraint_operator_test.Po - -rm -f systems/$(DEPDIR)/unit_tests_oprof-disconnected_neighbor_test.Po + -rm -f systems/$(DEPDIR)/unit_tests_oprof-disjoint_neighbor_test.Po -rm -f systems/$(DEPDIR)/unit_tests_oprof-equation_systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_oprof-periodic_bc_test.Po -rm -f systems/$(DEPDIR)/unit_tests_oprof-systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_opt-constraint_operator_test.Po - -rm -f systems/$(DEPDIR)/unit_tests_opt-disconnected_neighbor_test.Po + -rm -f systems/$(DEPDIR)/unit_tests_opt-disjoint_neighbor_test.Po -rm -f systems/$(DEPDIR)/unit_tests_opt-equation_systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_opt-periodic_bc_test.Po -rm -f systems/$(DEPDIR)/unit_tests_opt-systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_prof-constraint_operator_test.Po - -rm -f systems/$(DEPDIR)/unit_tests_prof-disconnected_neighbor_test.Po + -rm -f systems/$(DEPDIR)/unit_tests_prof-disjoint_neighbor_test.Po -rm -f systems/$(DEPDIR)/unit_tests_prof-equation_systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_prof-periodic_bc_test.Po -rm -f systems/$(DEPDIR)/unit_tests_prof-systems_test.Po @@ -14353,27 +14353,27 @@ maintainer-clean: maintainer-clean-am -rm -f solvers/$(DEPDIR)/unit_tests_prof-first_order_unsteady_solver_test.Po -rm -f solvers/$(DEPDIR)/unit_tests_prof-second_order_unsteady_solver_test.Po -rm -f systems/$(DEPDIR)/unit_tests_dbg-constraint_operator_test.Po - -rm -f systems/$(DEPDIR)/unit_tests_dbg-disconnected_neighbor_test.Po + -rm -f systems/$(DEPDIR)/unit_tests_dbg-disjoint_neighbor_test.Po -rm -f systems/$(DEPDIR)/unit_tests_dbg-equation_systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_dbg-periodic_bc_test.Po -rm -f systems/$(DEPDIR)/unit_tests_dbg-systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_devel-constraint_operator_test.Po - -rm -f systems/$(DEPDIR)/unit_tests_devel-disconnected_neighbor_test.Po + -rm -f systems/$(DEPDIR)/unit_tests_devel-disjoint_neighbor_test.Po -rm -f systems/$(DEPDIR)/unit_tests_devel-equation_systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_devel-periodic_bc_test.Po -rm -f systems/$(DEPDIR)/unit_tests_devel-systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_oprof-constraint_operator_test.Po - -rm -f systems/$(DEPDIR)/unit_tests_oprof-disconnected_neighbor_test.Po + -rm -f systems/$(DEPDIR)/unit_tests_oprof-disjoint_neighbor_test.Po -rm -f systems/$(DEPDIR)/unit_tests_oprof-equation_systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_oprof-periodic_bc_test.Po -rm -f systems/$(DEPDIR)/unit_tests_oprof-systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_opt-constraint_operator_test.Po - -rm -f systems/$(DEPDIR)/unit_tests_opt-disconnected_neighbor_test.Po + -rm -f systems/$(DEPDIR)/unit_tests_opt-disjoint_neighbor_test.Po -rm -f systems/$(DEPDIR)/unit_tests_opt-equation_systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_opt-periodic_bc_test.Po -rm -f systems/$(DEPDIR)/unit_tests_opt-systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_prof-constraint_operator_test.Po - -rm -f systems/$(DEPDIR)/unit_tests_prof-disconnected_neighbor_test.Po + -rm -f systems/$(DEPDIR)/unit_tests_prof-disjoint_neighbor_test.Po -rm -f systems/$(DEPDIR)/unit_tests_prof-equation_systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_prof-periodic_bc_test.Po -rm -f systems/$(DEPDIR)/unit_tests_prof-systems_test.Po diff --git a/tests/systems/disconnected_neighbor_test.C b/tests/systems/disjoint_neighbor_test.C similarity index 51% rename from tests/systems/disconnected_neighbor_test.C rename to tests/systems/disjoint_neighbor_test.C index aa02b2f2e21..6c2715b4959 100644 --- a/tests/systems/disconnected_neighbor_test.C +++ b/tests/systems/disjoint_neighbor_test.C @@ -17,6 +17,7 @@ #include "libmesh/mesh_refinement.h" #include "libmesh/periodic_boundaries.h" +#include "libmesh/periodic_boundary_base.h" using namespace libMesh; @@ -29,7 +30,14 @@ static const boundary_id_type right_id = 1; static const boundary_id_type interface_left_id = 5; static const boundary_id_type interface_right_id = 6; -static const int nx = 2, ny = 2; +static const boundary_id_type interface1_left_id = 5; +static const boundary_id_type interface1_right_id = 6; +static const boundary_id_type interface2_left_id = 7; +static const boundary_id_type interface2_right_id = 8; +static const boundary_id_type interface3_left_id = 9; +static const boundary_id_type interface3_right_id = 10; + +static const int Nx = 2, Ny = 2; Number heat_exact (const Point & p, @@ -182,22 +190,25 @@ void assemble_temperature_jump(EquationSystems &es, system.rhs->close(); } -class DisconnectedNeighborTest : public CppUnit::TestCase { +class DisjointNeighborTest : public CppUnit::TestCase { public: - LIBMESH_CPPUNIT_TEST_SUITE( DisconnectedNeighborTest ); + LIBMESH_CPPUNIT_TEST_SUITE( DisjointNeighborTest ); #ifdef LIBMESH_ENABLE_PERIODIC #if defined(LIBMESH_HAVE_SOLVER) CPPUNIT_TEST( testTempJump ); CPPUNIT_TEST( testTempJumpRefine ); #endif #ifdef LIBMESH_ENABLE_AMR - // This test intentionally triggers find_neighbors() consistency check - // failure after AMR refinement across disconnected interfaces. - // Expected: libmesh_assert_valid_neighbors() fails. - CPPUNIT_TEST_EXCEPTION(testTempJumpLocalRefineFail, std::exception); + // // This test intentionally triggers find_neighbors() consistency check + // // failure after AMR refinement across disjoint interfaces. + // // Expected: libmesh_assert_valid_neighbors() fails. + CPPUNIT_TEST(testTempJumpLocalRefineFail); #endif CPPUNIT_TEST( testCloneEquality ); CPPUNIT_TEST( testStitchingDiscontinuousBoundaries ); + CPPUNIT_TEST( testPreserveDisjointNeighborPairsAfterStitch ); + CPPUNIT_TEST( testStitchCrossMesh ); + CPPUNIT_TEST( testDisjointNeighborConflictError ); #endif CPPUNIT_TEST_SUITE_END(); @@ -209,7 +220,7 @@ private: LOG_UNIT_TEST; Mesh mesh(*TestCommWorld, 2); - build_two_disconnected_elems(mesh); + build_two_disjoint_elems(mesh); // Check elem 0 (the left element) if (const Elem * elem_left = mesh.query_elem_ptr(0)) @@ -287,7 +298,7 @@ private: LOG_UNIT_TEST; Mesh mesh(*TestCommWorld, 2); - build_two_disconnected_elems(mesh); + build_two_disjoint_elems(mesh); std::unique_ptr mesh_clone = mesh.clone(); CPPUNIT_ASSERT(*mesh_clone == mesh); @@ -298,30 +309,31 @@ private: LOG_UNIT_TEST; Mesh mesh(*TestCommWorld, 2); - build_two_disconnected_elems(mesh); + build_two_disjoint_elems(mesh); + + CPPUNIT_ASSERT(mesh.parallel_n_nodes() == 8); mesh.stitch_surfaces(interface_left_id, interface_right_id, 1e-8 /*tolerance*/, true/*clear_stitched_boundary_ids*/, false /*verbose*/,false/*use_binary_search*/, false /*enforce_all_nodes_match_on_boundaries*/, false /*merge_boundary_nodes_all_or_nothing*/, false /*prepare_after_stitching*/); - CPPUNIT_ASSERT(mesh.get_disconnected_boundaries()->size() == 0); - - - // ExodusII_IO(mesh).write("stitched_disconnected_boundaries.e"); + // ExodusII_IO(mesh).write("stitched_disjoint_neighbor_boundary_pairs.e"); + CPPUNIT_ASSERT(mesh.parallel_n_nodes() == 6); Mesh mesh2(*TestCommWorld, 2); - build_two_disconnected_elems(mesh2); + build_two_disjoint_elems(mesh2); + + CPPUNIT_ASSERT(mesh2.parallel_n_nodes() == 8); mesh2.stitch_surfaces(interface_left_id, interface_right_id, 1e-8 /*tolerance*/, true/*clear_stitched_boundary_ids*/, false /*verbose*/,false/*use_binary_search*/, false /*enforce_all_nodes_match_on_boundaries*/, false /*merge_boundary_nodes_all_or_nothing*/, true /*prepare_after_stitching*/); - CPPUNIT_ASSERT(mesh2.get_disconnected_boundaries()->size() == 0); - - // ExodusII_IO(mesh2).write("stitched_disconnected_boundaries_2.e"); + CPPUNIT_ASSERT(mesh2.parallel_n_nodes() == 6); + // ExodusII_IO(mesh2).write("stitched_disjoint_neighbor_boundary_pairs_2.e"); } void testTempJumpRefine() @@ -329,7 +341,7 @@ private: LOG_UNIT_TEST; Mesh mesh(*TestCommWorld, 2); - build_split_mesh_with_interface(mesh); + build_split_mesh_with_interface(mesh, Nx, Ny, 1.0, 1.0); EquationSystems es(mesh); LinearImplicitSystem & sys = @@ -383,16 +395,242 @@ private: try { Mesh mesh(*TestCommWorld, 2); - build_split_mesh_with_interface(mesh, true); + build_split_mesh_with_interface(mesh, Nx, Ny, 1.0, 1.0, true); + } + catch (const std::exception &e) + { + CPPUNIT_ASSERT(std::string(e.what()).find("Mesh refinement is not yet implemented") != std::string::npos); + } + } + + void testPreserveDisjointNeighborPairsAfterStitch() + { + LOG_UNIT_TEST; + Mesh mesh(*TestCommWorld, 2); + build_four_disjoint_elems(mesh); + // ExodusII_IO(mesh).write("four_elem_one_row.e"); + CPPUNIT_ASSERT(mesh.parallel_n_nodes() == 16); + + mesh.stitch_surfaces(interface2_left_id, + interface2_right_id, + 1e-8 /* tolerance */, + true /* clear_stitched_boundary_ids */, + false /* verbose */, + false /* use_binary_search */, + false /* enforce_all_nodes_match_on_boundaries */, + false /* merge_boundary_nodes_all_or_nothing */, + true /* prepare_after_stitching */); + + // ExodusII_IO(mesh).write("four_elem_one_row_after_stitching.e"); + CPPUNIT_ASSERT(mesh.parallel_n_nodes() == 14); + const auto * disjoint_pairs = mesh.get_disjoint_neighbor_boundary_pairs(); + + // make sure that both the interface1 and the interface3 pairing still exist afterward. + CPPUNIT_ASSERT(disjoint_pairs->size() == 4); + for (const auto & [bid, pb_ptr] : *disjoint_pairs) + { + const auto & pb = *pb_ptr; + const boundary_id_type a = pb.myboundary; + const boundary_id_type b = pb.pairedboundary; + if ((a == interface1_left_id && b == interface1_right_id) || + (a == interface3_left_id && b == interface3_right_id) || + (a == interface1_right_id && b == interface1_left_id) || + (a == interface3_right_id && b == interface3_left_id)) + continue; + else + CPPUNIT_FAIL("Disjoint neighbor boundary pair missing after stitching!"); + } + + } + + void testStitchCrossMesh() + { + LOG_UNIT_TEST; + + // Create a mesh with interface boundaries but without pairing + Mesh mesh_Y(*TestCommWorld, 2); + build_two_disjoint_elems(mesh_Y); + + // Create another mesh that defines the same pair properly + auto left_id_x = left_id + 10; // to avoid boundary ID conflict with mesh_Y + auto right_id_x = right_id + 10; + auto interface_left_id_x = interface_left_id + 10; + auto interface_right_id_x = interface_right_id + 10; + + Mesh mesh_X(*TestCommWorld, 2); + const auto translate_vec = Point(1.0, 0.0, 0.0); + // Left subdomain nodes + mesh_X.add_point(Point(0.0, 0.0) + translate_vec, 0); // bottom-left corner + mesh_X.add_point(Point(0.5, 0.0) + translate_vec, 1); // bottom-right corner of left element (interface node) + mesh_X.add_point(Point(0.0, 1.0) + translate_vec, 2); // top-left corner + mesh_X.add_point(Point(0.5, 1.0) + translate_vec, 3); // top-right corner of left element (interface node) + + // Right subdomain nodes (duplicated interface points) + mesh_X.add_point(Point(0.5, 0.0) + translate_vec, 4); // bottom-left corner of right element (same coords as node 1) (interface node) + mesh_X.add_point(Point(1.0, 0.0) + translate_vec, 5); // bottom-right corner + mesh_X.add_point(Point(0.5, 1.0) + translate_vec, 6); // top-left corner of right element (same coords as node 3) (interface node) + mesh_X.add_point(Point(1.0, 1.0) + translate_vec, 7); // top-right corner + + + // ---- Define elements ---- + BoundaryInfo & boundary = mesh_X.get_boundary_info(); + // Left element (element ID = 0) + { + Elem * elem = mesh_X.add_elem(Elem::build_with_id(QUAD4, 0)); + elem->set_node(0, mesh_X.node_ptr(0)); // bottom-left (0,0) + elem->set_node(1, mesh_X.node_ptr(1)); // bottom-right (0.5,0) + elem->set_node(2, mesh_X.node_ptr(3)); // top-right (0.5,1) + elem->set_node(3, mesh_X.node_ptr(2)); // top-left (0,1) + boundary.add_side(elem, 3, left_id_x); // left boundary + boundary.add_side(elem, 1, interface_left_id_x); + boundary.sideset_name(left_id_x) = "left_boundary_x"; + boundary.sideset_name(interface_left_id_x) = "interface_left_x"; + } + + // Right element (element ID = 1) + { + Elem * elem = mesh_X.add_elem(Elem::build_with_id(QUAD4, 1)); + elem->set_node(0, mesh_X.node_ptr(4)); // bottom-left (0.5,0)_R + elem->set_node(1, mesh_X.node_ptr(5)); // bottom-right (1,0) + elem->set_node(2, mesh_X.node_ptr(7)); // top-right (1,1) + elem->set_node(3, mesh_X.node_ptr(6)); // top-left (0.5,1)_R + boundary.add_side(elem, 1, right_id_x); // right boundary + boundary.add_side(elem, 3, interface_right_id_x); + boundary.sideset_name(right_id_x) = "right_boundary_x"; + boundary.sideset_name(interface_right_id_x) = "interface_right_x"; + } + + mesh_X.add_disjoint_neighbor_boundary_pairs(interface_left_id_x, interface_right_id_x, RealVectorValue(0.0, 0.0, 0.0)); + + // libMesh shouldn't renumber, or our based-on-initial-id + // assertions later may fail. + mesh_X.allow_renumbering(false); + + mesh_X.prepare_for_use(); + + // Stitching should trigger an error since Y already has the same + // boundary IDs but not registered as a pair + mesh_Y.stitch_meshes(mesh_X, + right_id, left_id_x, + 1e-8, + true, // clear_stitched_boundary_ids + false, // verbose + false, // use_binary_search + false, // enforce_all_nodes_match_on_boundaries + false, // merge_boundary_nodes_all_or_nothing + false); // prepare_after_stitching + + CPPUNIT_ASSERT(mesh_Y.parallel_n_nodes() == 14); + const auto * disjoint_pairs = mesh_Y.get_disjoint_neighbor_boundary_pairs(); + + // ExodusII_IO(mesh_Y).write("mesh_Y_after_stitching.e"); + // make sure that both the interface and the interface_x pairing still exist afterward. + CPPUNIT_ASSERT(disjoint_pairs->size() == 4); + for (const auto & [bid, pb_ptr] : *disjoint_pairs) + { + const auto & pb = *pb_ptr; + const boundary_id_type a = pb.myboundary; + const boundary_id_type b = pb.pairedboundary; + if ((a == interface_left_id_x && b == interface_right_id_x) || + (a == interface_right_id_x && b == interface_left_id_x) || + (a == interface_left_id && b == interface_right_id) || + (a == interface_right_id && b == interface_left_id)) + continue; + else + CPPUNIT_FAIL("Disjoint neighbor boundary pair missing after stitching!"); + } + + + } + + + void testDisjointNeighborConflictError() + { + LOG_UNIT_TEST; + + try + { + Mesh mesh_Y(*TestCommWorld, 2); + build_two_disjoint_elems(mesh_Y, false); + mesh_Y.add_disjoint_neighbor_boundary_pairs(right_id, left_id, RealVectorValue(-1.0, 0.0, 0.0)); + + // Create another mesh that defines the same pair properly + auto right_id_x = right_id + 10; + auto interface_left_id_x = interface_left_id + 10; + auto interface_right_id_x = interface_right_id + 10; + + Mesh mesh_X(*TestCommWorld, 2); + const auto translate_vec = Point(1.0, 0.0, 0.0); + // Left subdomain nodes + mesh_X.add_point(Point(0.0, 0.0) + translate_vec, 0); // bottom-left corner + mesh_X.add_point(Point(0.5, 0.0) + translate_vec, 1); // bottom-right corner of left element (interface node) + mesh_X.add_point(Point(0.0, 1.0) + translate_vec, 2); // top-left corner + mesh_X.add_point(Point(0.5, 1.0) + translate_vec, 3); // top-right corner of left element (interface node) + + // Right subdomain nodes (duplicated interface points) + mesh_X.add_point(Point(0.5, 0.0) + translate_vec, 4); // bottom-left corner of right element (same coords as node 1) (interface node) + mesh_X.add_point(Point(1.0, 0.0) + translate_vec, 5); // bottom-right corner + mesh_X.add_point(Point(0.5, 1.0) + translate_vec, 6); // top-left corner of right element (same coords as node 3) (interface node) + mesh_X.add_point(Point(1.0, 1.0) + translate_vec, 7); // top-right corner + + + // ---- Define elements ---- + BoundaryInfo & boundary = mesh_X.get_boundary_info(); + // Left element (element ID = 0) + { + Elem * elem = mesh_X.add_elem(Elem::build_with_id(QUAD4, 0)); + elem->set_node(0, mesh_X.node_ptr(0)); // bottom-left (0,0) + elem->set_node(1, mesh_X.node_ptr(1)); // bottom-right (0.5,0) + elem->set_node(2, mesh_X.node_ptr(3)); // top-right (0.5,1) + elem->set_node(3, mesh_X.node_ptr(2)); // top-left (0,1) + boundary.add_side(elem, 3, right_id); // left boundary -> use the same ID as mesh_Y to trigger conflict + boundary.add_side(elem, 1, interface_left_id_x); + boundary.sideset_name(right_id) = "left_boundary_x"; + boundary.sideset_name(interface_left_id_x) = "interface_left_x"; + } + + // Right element (element ID = 1) + { + Elem * elem = mesh_X.add_elem(Elem::build_with_id(QUAD4, 1)); + elem->set_node(0, mesh_X.node_ptr(4)); // bottom-left (0.5,0)_R + elem->set_node(1, mesh_X.node_ptr(5)); // bottom-right (1,0) + elem->set_node(2, mesh_X.node_ptr(7)); // top-right (1,1) + elem->set_node(3, mesh_X.node_ptr(6)); // top-left (0.5,1)_R + boundary.add_side(elem, 1, right_id_x); // right boundary + boundary.add_side(elem, 3, interface_right_id_x); + boundary.sideset_name(right_id_x) = "right_boundary_x"; + boundary.sideset_name(interface_right_id_x) = "interface_right_x"; + } + + mesh_X.add_disjoint_neighbor_boundary_pairs(right_id, right_id_x, RealVectorValue(1.0, 0.0, 0.0)); + + // libMesh shouldn't renumber, or our based-on-initial-id + // assertions later may fail. + mesh_X.allow_renumbering(false); + + mesh_X.prepare_for_use(); + + // Stitching should trigger an error since Y already has the same + // boundary IDs but not registered as a pair + mesh_Y.stitch_meshes(mesh_X, + right_id, right_id_x, + 1e-8, + true, // clear_stitched_boundary_ids + false, // verbose + false, // use_binary_search + false, // enforce_all_nodes_match_on_boundaries + false, // merge_boundary_nodes_all_or_nothing + false); // prepare_after_stitching } catch (const std::exception &e) { - CPPUNIT_ASSERT(std::string(e.what()).find("Mesh contains disconnected boundary interfaces") != std::string::npos); - throw; + CPPUNIT_ASSERT(std::string(e.what()).find("Disjoint boundary pairing mismatch") != std::string::npos); } } - void build_two_disconnected_elems(Mesh &mesh) + + + void build_two_disjoint_elems(Mesh &mesh, bool add_pair = true, const Point &translate_vec = Point(0.0, 0.0, 0.0)) { // Domain: x in (0, 1), y in (0, 1) // Split into two subdomains: @@ -416,16 +654,16 @@ private: // ---- Define points ---- // Left subdomain nodes - mesh.add_point(Point(0.0, 0.0), 0); // bottom-left corner - mesh.add_point(Point(0.5, 0.0), 1); // bottom-right corner of left element (interface node) - mesh.add_point(Point(0.0, 1.0), 2); // top-left corner - mesh.add_point(Point(0.5, 1.0), 3); // top-right corner of left element (interface node) + mesh.add_point(Point(0.0, 0.0) + translate_vec, 0); // bottom-left corner + mesh.add_point(Point(0.5, 0.0) + translate_vec, 1); // bottom-right corner of left element (interface node) + mesh.add_point(Point(0.0, 1.0) + translate_vec, 2); // top-left corner + mesh.add_point(Point(0.5, 1.0) + translate_vec, 3); // top-right corner of left element (interface node) // Right subdomain nodes (duplicated interface points) - mesh.add_point(Point(0.5, 0.0), 4); // bottom-left corner of right element (same coords as node 1) (interface node) - mesh.add_point(Point(1.0, 0.0), 5); // bottom-right corner - mesh.add_point(Point(0.5, 1.0), 6); // top-left corner of right element (same coords as node 3) (interface node) - mesh.add_point(Point(1.0, 1.0), 7); // top-right corner + mesh.add_point(Point(0.5, 0.0) + translate_vec, 4); // bottom-left corner of right element (same coords as node 1) (interface node) + mesh.add_point(Point(1.0, 0.0) + translate_vec, 5); // bottom-right corner + mesh.add_point(Point(0.5, 1.0) + translate_vec, 6); // top-left corner of right element (same coords as node 3) (interface node) + mesh.add_point(Point(1.0, 1.0) + translate_vec, 7); // top-right corner // ---- Define elements ---- @@ -456,9 +694,10 @@ private: boundary.sideset_name(interface_right_id) = "interface_right"; } - // This is the key testing step: inform libMesh about the disconnected boundaries - // And, in `prepare_for_use()`, libMesh will set up the disconnected neighbor relationships. - mesh.add_disconnected_boundaries(interface_left_id, interface_right_id, RealVectorValue(0.0, 0.0, 0.0)); + // This is the key testing step: inform libMesh about the disjoint neighbor boundary pairs + // And, in `prepare_for_use()`, libMesh will set up the disjoint neighbor relationships. + if (add_pair) + mesh.add_disjoint_neighbor_boundary_pairs(interface_left_id, interface_right_id, RealVectorValue(0.0, 0.0, 0.0)); // libMesh shouldn't renumber, or our based-on-initial-id // assertions later may fail. @@ -468,7 +707,7 @@ private: } // The interface is located at x = 0.5; nx must be even (split evenly into left and right subdomains) - void build_split_mesh_with_interface(Mesh &mesh, bool test_local_refinement = false) + void build_split_mesh_with_interface(Mesh &mesh, unsigned nx, unsigned ny, double Lx, double Ly, bool test_local_refinement = false) { // Ensure nx is even so the interface aligns with element boundaries libmesh_error_msg_if(nx % 2 != 0, "nx must be even!"); @@ -570,9 +809,9 @@ private: boundary.sideset_name(interface_right_id) = "interface_right"; - // This is the key testing step: inform libMesh about the disconnected boundaries - // And, in `prepare_for_use()`, libMesh will set up the disconnected neighbor relationships. - mesh.add_disconnected_boundaries(interface_left_id, interface_right_id, RealVectorValue(0.0, 0.0, 0.0)); + // This is the key testing step: inform libMesh about the disjoint neighbor boundary pairs + // And, in `prepare_for_use()`, libMesh will set up the disjoint neighbor relationships. + mesh.add_disjoint_neighbor_boundary_pairs(interface_left_id, interface_right_id, RealVectorValue(0.0, 0.0, 0.0)); mesh.prepare_for_use(); @@ -594,6 +833,104 @@ private: #endif } +void build_four_disjoint_elems(Mesh &mesh) +{ + // Clear any existing data and initialize the mesh + mesh.clear(); + mesh.set_mesh_dimension(2); + + BoundaryInfo &boundary = mesh.get_boundary_info(); + + // -------------------------------------------------------------------- + // Domain layout: + // 4 elements aligned in a single row, each of width = 0.25 + // + // y=1: x0---x1_L---x1_R---x2_L---x2_R---x3_L---x3_R---x4 + // + // y=0: x0---x1_L---x1_R---x2_L---x2_R---x3_L---x3_R---x4 + // + // The interfaces between adjacent elements are duplicated: + // for each internal interface, left and right sides have distinct nodes + // (geometrically coincident but topologically disconnected). + // -------------------------------------------------------------------- + const Real dx = 0.25; + + // ---- Add nodal coordinates ---- + // Each interface has duplicated nodes (left and right) to represent discontinuity. + unsigned id = 0; + for (unsigned i = 0; i < 4; ++i) + { + Real xL = i * dx; + Real xR = (i + 1) * dx; + + // Left nodes of the element + mesh.add_point(Point(xL, 0.0), id++); // bottom-left + mesh.add_point(Point(xL, 1.0), id++); // top-left + + // Right nodes (duplicated interface nodes) + mesh.add_point(Point(xR, 0.0), id++); // bottom-right + mesh.add_point(Point(xR, 1.0), id++); // top-right + } + + // Add one final pair of rightmost boundary nodes + mesh.add_point(Point(1.0, 0.0), id++); + mesh.add_point(Point(1.0, 1.0), id++); + + // ---- Create four QUAD4 elements ---- + // Node ordering: 0 = BL, 1 = BR, 2 = TR, 3 = TL + unsigned elem_id = 0; + for (unsigned i = 0; i < 4; ++i) + { + Elem *elem = mesh.add_elem(Elem::build_with_id(QUAD4, elem_id++)); + + unsigned base = i * 4; + elem->set_node(0, mesh.node_ptr(base)); // bottom-left + elem->set_node(1, mesh.node_ptr(base + 2)); // bottom-right + elem->set_node(2, mesh.node_ptr(base + 3)); // top-right + elem->set_node(3, mesh.node_ptr(base + 1)); // top-left + + // Add outer boundaries + if (i == 0) + boundary.add_side(elem, 3, left_id); // left outer boundary + if (i == 3) + boundary.add_side(elem, 1, right_id); // right outer boundary + } + + // ---- Define internal interface sides ---- + // Element side 1 (right) connects to the next element’s side 3 (left) + // Each interface is treated as a disjoint (non-conforming) boundary pair + boundary.add_side(mesh.elem_ptr(0), 1, interface1_left_id); + boundary.add_side(mesh.elem_ptr(1), 3, interface1_right_id); + + boundary.add_side(mesh.elem_ptr(1), 1, interface2_left_id); + boundary.add_side(mesh.elem_ptr(2), 3, interface2_right_id); + + boundary.add_side(mesh.elem_ptr(2), 1, interface3_left_id); + boundary.add_side(mesh.elem_ptr(3), 3, interface3_right_id); + + // ---- Register disjoint neighbor boundary pairs ---- + // These pairs inform libMesh that the specified sides are geometrically + // adjacent but topologically disconnected. + mesh.add_disjoint_neighbor_boundary_pairs(interface1_left_id, interface1_right_id, RealVectorValue(0.0, 0.0, 0.0)); + mesh.add_disjoint_neighbor_boundary_pairs(interface2_left_id, interface2_right_id, RealVectorValue(0.0, 0.0, 0.0)); + mesh.add_disjoint_neighbor_boundary_pairs(interface3_left_id, interface3_right_id, RealVectorValue(0.0, 0.0, 0.0)); + + // ---- Assign descriptive names to boundary IDs ---- + boundary.sideset_name(left_id) = "left_boundary"; + boundary.sideset_name(right_id) = "right_boundary"; + + boundary.sideset_name(interface1_left_id) = "interface1_left"; + boundary.sideset_name(interface1_right_id) = "interface1_right"; + boundary.sideset_name(interface2_left_id) = "interface2_left"; + boundary.sideset_name(interface2_right_id) = "interface2_right"; + boundary.sideset_name(interface3_left_id) = "interface3_left"; + boundary.sideset_name(interface3_right_id) = "interface3_right"; + + // ---- Finalize mesh setup ---- + mesh.allow_renumbering(false); + mesh.prepare_for_use(); +} + }; -CPPUNIT_TEST_SUITE_REGISTRATION( DisconnectedNeighborTest ); +CPPUNIT_TEST_SUITE_REGISTRATION( DisjointNeighborTest ); From 7756815bd2a16f069279efe9ff80e8d31fa0ee81 Mon Sep 17 00:00:00 2001 From: Cheng-Hau Yang Date: Mon, 10 Nov 2025 10:23:44 -0600 Subject: [PATCH 26/26] fix the naming --- include/mesh/mesh_base.h | 4 +-- src/mesh/mesh_base.C | 36 +++++++++++++------------- src/mesh/mesh_refinement.C | 4 +-- src/mesh/unstructured_mesh.C | 4 +-- tests/systems/disjoint_neighbor_test.C | 2 +- 5 files changed, 25 insertions(+), 25 deletions(-) diff --git a/include/mesh/mesh_base.h b/include/mesh/mesh_base.h index 3fe02781821..542f0abdf60 100644 --- a/include/mesh/mesh_base.h +++ b/include/mesh/mesh_base.h @@ -1850,8 +1850,8 @@ class MeshBase : public ParallelObject protected: #ifdef LIBMESH_ENABLE_PERIODIC - /// @brief The disjoint boundary id pairs. - std::unique_ptr _disjoint_boundary_pairs; + /// @brief The disjoint neighbor boundary id pairs. + std::unique_ptr _disjoint_neighbor_boundary_pairs; #endif /** diff --git a/src/mesh/mesh_base.C b/src/mesh/mesh_base.C index 03ca1d4854e..3b853065a33 100644 --- a/src/mesh/mesh_base.C +++ b/src/mesh/mesh_base.C @@ -159,13 +159,13 @@ MeshBase::MeshBase (const MeshBase & other_mesh) : #ifdef LIBMESH_ENABLE_PERIODIC // Deep copy of all periodic boundaries - if (other_mesh._disjoint_boundary_pairs) + if (other_mesh._disjoint_neighbor_boundary_pairs) { - _disjoint_boundary_pairs = std::make_unique(); + _disjoint_neighbor_boundary_pairs = std::make_unique(); - for (const auto & [id, pb] : *other_mesh._disjoint_boundary_pairs) + for (const auto & [id, pb] : *other_mesh._disjoint_neighbor_boundary_pairs) if (pb) - (*_disjoint_boundary_pairs)[id] = pb->clone(); + (*_disjoint_neighbor_boundary_pairs)[id] = pb->clone(); } #endif @@ -218,13 +218,13 @@ MeshBase& MeshBase::operator= (MeshBase && other_mesh) // Deep copy of all periodic boundaries: // We must clone each PeriodicBoundaryBase in the source map, // since unique_ptr cannot be copied and we need independent instances - if (other_mesh._disjoint_boundary_pairs) + if (other_mesh._disjoint_neighbor_boundary_pairs) { - _disjoint_boundary_pairs = std::make_unique(); + _disjoint_neighbor_boundary_pairs = std::make_unique(); - for (const auto & [id, pb] : *other_mesh._disjoint_boundary_pairs) + for (const auto & [id, pb] : *other_mesh._disjoint_neighbor_boundary_pairs) if (pb) - (*_disjoint_boundary_pairs)[id] = pb->clone(); + (*_disjoint_neighbor_boundary_pairs)[id] = pb->clone(); } #endif @@ -336,11 +336,11 @@ bool MeshBase::locally_equals (const MeshBase & other_mesh) const return false; // First check whether the "existence" of the two pointers differs (one present, one absent) - if ((bool)_disjoint_boundary_pairs != (bool)other_mesh._disjoint_boundary_pairs) + if ((bool)_disjoint_neighbor_boundary_pairs != (bool)other_mesh._disjoint_neighbor_boundary_pairs) return false; // If both exist, compare the contents (Weak Test: just compare sizes like `_ghosting_functors`) - if (_disjoint_boundary_pairs && - (_disjoint_boundary_pairs->size() != other_mesh._disjoint_boundary_pairs->size())) + if (_disjoint_neighbor_boundary_pairs && + (_disjoint_neighbor_boundary_pairs->size() != other_mesh._disjoint_neighbor_boundary_pairs->size())) return false; const constraint_rows_type & other_rows = @@ -1999,10 +1999,10 @@ void MeshBase::detect_interior_parents() const RealVectorValue & translation) { // Lazily allocate the container the first time it’s needed - if (!_disjoint_boundary_pairs) - _disjoint_boundary_pairs = std::make_unique(); + if (!_disjoint_neighbor_boundary_pairs) + _disjoint_neighbor_boundary_pairs = std::make_unique(); - PeriodicBoundaries & db = *_disjoint_boundary_pairs; + PeriodicBoundaries & db = *_disjoint_neighbor_boundary_pairs; // Create forward and inverse boundary mappings PeriodicBoundary forward(translation); @@ -2020,22 +2020,22 @@ void MeshBase::detect_interior_parents() PeriodicBoundaries * MeshBase::get_disjoint_neighbor_boundary_pairs() { - return _disjoint_boundary_pairs.get(); + return _disjoint_neighbor_boundary_pairs.get(); } const PeriodicBoundaries * MeshBase::get_disjoint_neighbor_boundary_pairs() const { - return _disjoint_boundary_pairs.get(); + return _disjoint_neighbor_boundary_pairs.get(); } void MeshBase::remove_disjoint_boundary_pair(const boundary_id_type b1, const boundary_id_type b2) { // Nothing to remove if not allocated or empty - if (!_disjoint_boundary_pairs || _disjoint_boundary_pairs->empty()) + if (!_disjoint_neighbor_boundary_pairs || _disjoint_neighbor_boundary_pairs->empty()) return; - auto & pairs = *_disjoint_boundary_pairs; + auto & pairs = *_disjoint_neighbor_boundary_pairs; // Helper to check and erase both directions auto erase_if_match = [](boundary_id_type key, diff --git a/src/mesh/mesh_refinement.C b/src/mesh/mesh_refinement.C index 034dc9f4a3f..2672843259a 100644 --- a/src/mesh/mesh_refinement.C +++ b/src/mesh/mesh_refinement.C @@ -686,7 +686,7 @@ bool MeshRefinement::refine_elements () // Prevent refinement when the mesh has disjoint neighbor boundary pairs. // - // Disjoint boundary interfaces violate the topological continuity + // Disjoint neighbor boundary interfaces violate the topological continuity // assumed by the refinement algorithm. Refinement on such meshes can // produce invalid neighbor relationships (for example reverse indices // equal to invalid_uint), which may trigger assertions like @@ -697,7 +697,7 @@ bool MeshRefinement::refine_elements () if (_mesh.get_disjoint_neighbor_boundary_pairs()) { libmesh_not_implemented_msg( - "Mesh refinement is not yet implemented for meshes with disjoint boundary interfaces.\n"); + "Mesh refinement is not yet implemented for meshes with disjoint neighbor boundary interfaces.\n"); } if (_face_level_mismatch_limit) diff --git a/src/mesh/unstructured_mesh.C b/src/mesh/unstructured_mesh.C index 24f066694ea..608c08b04a8 100644 --- a/src/mesh/unstructured_mesh.C +++ b/src/mesh/unstructured_mesh.C @@ -1879,14 +1879,14 @@ UnstructuredMesh::stitching_helper (const MeshBase * other_mesh, // Case 1: On "this" mesh, a or b exist but are not paired, // while the other mesh pairs them. if (!in_this && (pb_this_a || pb_this_b) && in_other) - libmesh_error_msg("Disjoint boundary pairing mismatch: on 'this' mesh, " + libmesh_error_msg("Disjoint neighbor boundary pairing mismatch: on 'this' mesh, " "boundary (" << a << " or " << b << ") exists but is not paired; on 'other' mesh the pair is present."); // Case 2: On "other" mesh, a or b exist but are not paired, // while this mesh pairs them. if (!in_other && (pb_other_a || pb_other_b) && in_this) - libmesh_error_msg("Disjoint boundary pairing mismatch: on 'other' mesh, " + libmesh_error_msg("Disjoint neighbor boundary pairing mismatch: on 'other' mesh, " "boundary (" << a << " or " << b << ") exists but is not paired; on 'this' mesh the pair is present."); diff --git a/tests/systems/disjoint_neighbor_test.C b/tests/systems/disjoint_neighbor_test.C index 6c2715b4959..45fc3b11cd7 100644 --- a/tests/systems/disjoint_neighbor_test.C +++ b/tests/systems/disjoint_neighbor_test.C @@ -624,7 +624,7 @@ private: } catch (const std::exception &e) { - CPPUNIT_ASSERT(std::string(e.what()).find("Disjoint boundary pairing mismatch") != std::string::npos); + CPPUNIT_ASSERT(std::string(e.what()).find("Disjoint neighbor boundary pairing mismatch") != std::string::npos); } }