From b0409680b69b5c821787f4cd33a40b51f31b0451 Mon Sep 17 00:00:00 2001 From: Rohit Kakodkar Date: Tue, 30 Jan 2024 14:38:35 -0500 Subject: [PATCH] Compute Assembly --- CMakeLists.txt | 1 + include/compute/compute_assembly.hpp | 24 ++++++++++-- include/compute/compute_mesh.hpp | 10 +++++ .../compute/compute_partial_derivatives.hpp | 2 +- .../coupled_interfaces/coupled_interfaces.hpp | 3 +- include/compute/fields/fields.hpp | 2 + include/compute/fields/simulation_field.hpp | 2 + include/compute/properties/properties.hpp | 2 + src/compute/compute_assembly.cpp | 37 +++++++++++++++++++ 9 files changed, 77 insertions(+), 6 deletions(-) create mode 100644 src/compute/compute_assembly.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 4910eda5..88eeac9d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -250,6 +250,7 @@ add_library( src/compute/coupled_interfaces.cpp src/compute/compute_boundaries.cpp src/compute/compute_fields.cpp + src/compute/compute_assembly.cpp ) target_link_libraries( diff --git a/include/compute/compute_assembly.hpp b/include/compute/compute_assembly.hpp index 95b96e71..8bca9e8e 100644 --- a/include/compute/compute_assembly.hpp +++ b/include/compute/compute_assembly.hpp @@ -1,6 +1,19 @@ #ifndef _COMPUTE_ASSEMBLY_HPP #define _COMPUTE_ASSEMBLY_HPP +#include "compute/boundaries/boundaries.hpp" +#include "compute/compute_mesh.hpp" +#include "compute/compute_partial_derivatives.hpp" +#include "compute/compute_receivers.hpp" +#include "compute/compute_sources.hpp" +#include "compute/coupled_interfaces/coupled_interfaces.hpp" +#include "compute/fields/fields.hpp" +#include "compute/properties/interface.hpp" +#include "enumerations/specfem_enums.hpp" +#include "mesh/mesh.hpp" +#include "receiver/interface.hpp" +#include "source/interface.hpp" + namespace specfem { namespace compute { @@ -13,12 +26,17 @@ struct assembly { specfem::compute::receivers receivers; specfem::compute::boundaries boundaries; specfem::compute::coupled_interfaces coupled_interfaces; + specfem::compute::fields fields; assembly( const specfem::mesh::mesh &mesh, - const std::vector > &sources, - const int nspec); -} + const specfem::quadrature::quadratures &quadratures, + const std::vector > &sources, + const std::vector > + &receivers, + const std::vector &stypes, + const int max_sig_step); +}; } // namespace compute } // namespace specfem diff --git a/include/compute/compute_mesh.hpp b/include/compute/compute_mesh.hpp index a8c4192f..3677e185 100644 --- a/include/compute/compute_mesh.hpp +++ b/include/compute/compute_mesh.hpp @@ -36,6 +36,8 @@ struct shape_functions { shape_functions(const specfem::kokkos::HostMirror1d xi, const specfem::kokkos::HostMirror1d gamma, const int &ngll, const int &ngnod); + + shape_functions() = default; }; struct quadrature { @@ -45,6 +47,8 @@ struct quadrature { specfem::kokkos::HostMirror1d h_xi; ///< Quadrature points specfem::compute::shape_functions shape_functions; ///< Shape functions + GLL() = default; + GLL(const specfem::quadrature::quadratures &quadratures, const int &ngnod) : N(quadratures.gll.get_N()), xi(quadratures.gll.get_xi()), h_xi(quadratures.gll.get_hxi()), shape_functions(xi, xi, N, ngnod) {} @@ -52,6 +56,8 @@ struct quadrature { specfem::compute::quadrature::GLL gll; ///< GLL object + quadrature() = default; + quadrature(const specfem::quadrature::quadratures &quadratures, const specfem::mesh::control_nodes &control_nodes) : gll(quadratures, control_nodes.ngnod) {} @@ -72,6 +78,8 @@ struct control_nodes { ///< distinct control node control_nodes(const specfem::mesh::control_nodes &control_nodes); + + control_nodes() = default; }; struct points { @@ -118,6 +126,8 @@ struct mesh { specfem::compute::points points; ///< Quadrature points specfem::compute::quadrature quadratures; ///< Quadrature object + mesh() = default; + mesh(const specfem::mesh::control_nodes &control_nodes, const specfem::quadrature::quadratures &quadratures); diff --git a/include/compute/compute_partial_derivatives.hpp b/include/compute/compute_partial_derivatives.hpp index 97acf14f..eaa36d41 100644 --- a/include/compute/compute_partial_derivatives.hpp +++ b/include/compute/compute_partial_derivatives.hpp @@ -52,7 +52,7 @@ struct partial_derivatives { * @brief Default constructor * */ - partial_derivatives(){}; + partial_derivatives() = default; /** * @brief Constructor to allocate views * diff --git a/include/compute/coupled_interfaces/coupled_interfaces.hpp b/include/compute/coupled_interfaces/coupled_interfaces.hpp index c6f42b3a..e64bf9f8 100644 --- a/include/compute/coupled_interfaces/coupled_interfaces.hpp +++ b/include/compute/coupled_interfaces/coupled_interfaces.hpp @@ -11,8 +11,7 @@ namespace specfem { namespace compute { struct coupled_interfaces { - coupled_interfaces() - : elastic_acoustic(), acoustic_poroelastic(), elastic_poroelastic(){}; + coupled_interfaces() = default; coupled_interfaces( const specfem::compute::mesh &mesh, diff --git a/include/compute/fields/fields.hpp b/include/compute/fields/fields.hpp index f589add0..5847fe73 100644 --- a/include/compute/fields/fields.hpp +++ b/include/compute/fields/fields.hpp @@ -14,6 +14,8 @@ struct fields { using forward_type = specfem::enums::simulation::forward; + fields() = default; + fields(const specfem::compute::mesh &mesh, const specfem::compute::properties &properties); diff --git a/include/compute/fields/simulation_field.hpp b/include/compute/fields/simulation_field.hpp index 87a511d1..018d41ca 100644 --- a/include/compute/fields/simulation_field.hpp +++ b/include/compute/fields/simulation_field.hpp @@ -18,6 +18,8 @@ template struct simulation_field { using elastic_type = specfem::enums::element::medium::elastic; using acoustic_type = specfem::enums::element::medium::acoustic; + simulation_field() = default; + simulation_field(const specfem::compute::mesh &mesh, const specfem::compute::properties &properties); diff --git a/include/compute/properties/properties.hpp b/include/compute/properties/properties.hpp index 45378444..6e6c1867 100644 --- a/include/compute/properties/properties.hpp +++ b/include/compute/properties/properties.hpp @@ -46,6 +46,8 @@ struct properties { specfem::enums::element::property_tag::isotropic> acoustic_isotropic; + properties() = default; + properties(const int nspec, const int ngllz, const int ngllx, const specfem::mesh::materials &materials); }; diff --git a/src/compute/compute_assembly.cpp b/src/compute/compute_assembly.cpp new file mode 100644 index 00000000..bd0d8d01 --- /dev/null +++ b/src/compute/compute_assembly.cpp @@ -0,0 +1,37 @@ + +#include "compute/compute_assembly.hpp" +#include "compute/boundaries/boundaries.hpp" +#include "compute/compute_mesh.hpp" +#include "compute/compute_partial_derivatives.hpp" +#include "compute/compute_receivers.hpp" +#include "compute/compute_sources.hpp" +#include "compute/coupled_interfaces/coupled_interfaces.hpp" +#include "compute/fields/fields.hpp" +#include "compute/properties/interface.hpp" +#include "mesh/mesh.hpp" + +specfem::compute::assembly::assembly( + const specfem::mesh::mesh &mesh, + const specfem::quadrature::quadratures &quadratures, + const std::vector > &sources, + const std::vector > + &receivers, + const std::vector &stypes, + const int max_sig_step) { + this->mesh = specfem::compute::mesh(mesh.control_nodes, quadratures); + this->partial_derivatives = specfem::compute::partial_derivatives(this->mesh); + this->properties = specfem::compute::properties( + this->mesh.nspec, this->mesh.ngllz, this->mesh.ngllx, mesh.materials); + this->sources = + specfem::compute::sources(sources, this->mesh, this->partial_derivatives, + this->properties, max_sig_step); + this->receivers = + specfem::compute::receivers(max_sig_step, receivers, stypes, this->mesh); + this->boundaries = + specfem::compute::boundaries(this->mesh.nspec, this->properties, + mesh.abs_boundary, mesh.acfree_surface); + this->coupled_interfaces = specfem::compute::coupled_interfaces( + this->mesh, this->properties, mesh.coupled_interfaces); + this->fields = specfem::compute::fields(this->mesh, this->properties); + return; +}