Skip to content

Nci3d - #2069

Open
Rohit-Kakodkar wants to merge 12 commits into
develfrom
nci3d
Open

Nci3d#2069
Rohit-Kakodkar wants to merge 12 commits into
develfrom
nci3d

Conversation

@Rohit-Kakodkar

Copy link
Copy Markdown
Collaborator

Description

Please describe the changes/features in this pull request.

Issue Number

If there is an issue created for these changes, link it here

Checklist

Please make sure to check developer documentation on specfem docs.

  • I ran the code through pre-commit to check style
  • THE DOCUMENTATION BUILDS WITHOUT WARNINGS/ERRORS
  • I have added labels to the PR (see right hand side of the PR page)
  • My code passes all the integration tests
  • I have added sufficient unittests to test my changes
  • I have added/updated documentation for the changes I am proposing
  • I have updated CMakeLists to ensure my code builds
  • My code builds across all platforms

Copilot AI lite review requested due to automatic review settings August 24, 2026 16:02

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR extends SPECFEM++’s nonconforming coupling support into 3D by introducing dim3 nonconforming-interface containers (face-based) and updating coupling/accessor plumbing to use chunk-face parallelism and pointwise dim3 interface accessors.

Changes:

  • Add a new dim3 assembly::nonconforming_interfaces implementation (containers + data access) for face-based nonconforming interfaces.
  • Update nonconforming coupling compute path to support dim3 via default_chunk_face_config and pointwise coupling handling.
  • Generalize field loading to support chunk-face indices and adjust a few tag/dispatch and locate-point details for dim3.

Reviewed changes

Copilot reviewed 18 out of 18 changed files in this pull request and generated 8 comments.

Show a summary per file
File Description
core/specfem/tag_dispatch/is_valid.hpp Broadens valid dim3 edge/boundary combinations to support new dim3 nonconforming paths.
core/specfem/element_coupling/accessor.hpp Switches dim3 nonconforming coupling terms to a pointwise interface accessor; adds dim3 intersection-factor placeholder type.
core/specfem/data_access/accessor.hpp Introduces EmptyAccessor placeholder accessor used for conditional scratch/data requirements.
core/specfem/compute/impl/compute_coupling.tpp Updates coupling kernels to select edge vs face parallel configs and adds dim3 pointwise nonconforming coupling flow.
core/specfem/assembly/nonconforming_interfaces/dim3/nonconforming_interfaces.hpp New dim3 nonconforming interface container facade and typed storage dispatch.
core/specfem/assembly/nonconforming_interfaces/dim3/nonconforming_interfaces.cpp New dim3 nonconforming interface container construction/initialization.
core/specfem/assembly/nonconforming_interfaces/dim3/impl/interface_container.hpp New dim3 interface-container storage and point-load implementation for face factors/normals/coupled coords.
core/specfem/assembly/nonconforming_interfaces/dim3/impl/interface_container.tpp New host-side initialization logic computing coupled local coordinates and face quadrature factors/normals.
core/specfem/assembly/nonconforming_interfaces/dim3/data_access/load.hpp New dim3 load helpers (load_on_host / load_on_device) for nonconforming interface containers.
core/specfem/assembly/nonconforming_interfaces/dim2/nonconforming_interfaces.hpp Adds forward declaration for nonconforming_interfaces template to support new include organization.
core/specfem/assembly/nonconforming_interfaces/dim2/impl/interface_container.hpp Minor cleanup/forward declarations and formatting tweaks in dim2 nonconforming container impl.
core/specfem/assembly/nonconforming_interfaces.hpp Makes dim3 nonconforming interfaces available via the top-level nonconforming interfaces header.
core/specfem/assembly/fields/data_access/load_on_device.hpp Extends device field loading support to chunk-face index types.
core/specfem/assembly/fields/data_access/impl/load_access_functions.hpp Adds non-SIMD chunk-face load implementation for field accessors.
core/specfem/assembly/element_intersections/dim3/element_intersections.cpp Minor include and formatting updates for dim3 intersections collection.
core/specfem/assembly/assembly/dim3/assembly.hpp Adds dim3 nonconforming_interfaces member to the assembly.
core/specfem/assembly/assembly/dim3/assembly.cpp Initializes dim3 nonconforming_interfaces during assembly construction.
core/specfem/algorithms/locate_point/dim3/locate_point_impl.cpp Fixes dim3 control-node coordinate indexing order for face point-location.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines 141 to +143
const auto &nonconforming_interfaces = assembly.nonconforming_interfaces;
const auto &boundaries = assembly.boundaries;

Comment on lines 61 to +65
struct coupling_terms_pack<
DimensionTag, InterfaceTag, BoundaryTag, FluxSchemeTag, NumberElements,
NQuadIntersection, NQuadElement, std::tuple<KokkosViewArgs...>,
std::enable_if_t<DimensionTag == specfem::element::dimension_tag::dim3>> {
using type = specfem::chunk_face::NonconformingAccessorPack<
specfem::chunk_face::coupled_coordinates<
DimensionTag, NumberElements, NQuadElement, InterfaceTag, BoundaryTag,
FluxSchemeTag, KokkosViewArgs...>,
specfem::chunk_face::intersection_normal<
DimensionTag, InterfaceTag, BoundaryTag, FluxSchemeTag,
NumberElements, NQuadElement, KokkosViewArgs...>>;
using type = specfem::point::nonconforming_interface<
Comment on lines +63 to +74
struct EmptyAccessor {

/**
* @brief Capture any constructor configuration. Should do nothing.
*/
template <typename... Args> EmptyAccessor(Args...){};
/**
* @brief Get shared memory size requirement
* @return Size in bytes needed for scratch memory
*/
constexpr static int shmem_size() { return 0; }
};
Comment on lines +8 to +11
#include "specfem/element_coupling/flux_scheme_configuration.hpp"
#include "specfem/element_coupling/tags.hpp"
#include "specfem/enums.hpp"
#include "specfem/execution.hpp"
Comment on lines +161 to +163
static_assert(
specfem::data_access::is_nonconforming_interface<PointType>::value,
"impl_load requires conforming interface point type for PointType");
Comment on lines +1 to +6
#pragma once

#include "interface_container.hpp"
#include "specfem/algorithms/locate_point.hpp"
#include "specfem/point/global_coordinates.hpp"
#include <cmath>
Comment on lines +40 to +42
const auto &num_faces = self_faces.N;
const auto &weights = mesh.h_weights;

Comment on lines +61 to +68
nonconforming_interfaces(
const int &ngllz, const int &nglly, const int &ngllx,
const specfem::assembly::element_intersections<dimension_tag>
&element_intersections,
const specfem::assembly::jacobian_matrix<dimension_tag> &jacobian_matrix,
const specfem::assembly::mesh<dimension_tag> &mesh,
const specfem::element_coupling::flux_scheme_configuration
&flux_scheme_config = {});
@codecov-commenter

codecov-commenter commented Aug 24, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 3.44828% with 140 lines in your changes missing coverage. Please review.
✅ Project coverage is 62.45%. Comparing base (1853fa7) to head (3ee73ea).

Files with missing lines Patch % Lines
...rming_interfaces/dim3/impl/interface_container.tpp 0.00% 121 Missing ⚠️
...rming_interfaces/dim3/nonconforming_interfaces.cpp 0.00% 5 Missing ⚠️
core/specfem/assembly/assembly/dim3/assembly.cpp 0.00% 4 Missing ⚠️
...ement_intersections/dim3/element_intersections.cpp 0.00% 4 Missing ⚠️
...algorithms/locate_point/dim3/locate_point_impl.cpp 0.00% 3 Missing ⚠️
core/specfem/tag_dispatch/is_valid.hpp 0.00% 2 Missing ⚠️
core/specfem/data_access/accessor.hpp 0.00% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##            devel    #2069      +/-   ##
==========================================
- Coverage   62.85%   62.45%   -0.41%     
==========================================
  Files         489      494       +5     
  Lines       20127    20259     +132     
  Branches     2615     2634      +19     
==========================================
+ Hits        12651    12652       +1     
- Misses       6621     6752     +131     
  Partials      855      855              

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants