Skip to content

Commit

Permalink
Compute Assembly
Browse files Browse the repository at this point in the history
  • Loading branch information
Rohit-Kakodkar committed Jan 30, 2024
1 parent e1a9dd0 commit b040968
Show file tree
Hide file tree
Showing 9 changed files with 77 additions and 6 deletions.
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
24 changes: 21 additions & 3 deletions include/compute/compute_assembly.hpp
Original file line number Diff line number Diff line change
@@ -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 {

Expand All @@ -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<std::shared_ptr<specfem::source::source> > &sources,
const int nspec);
}
const specfem::quadrature::quadratures &quadratures,
const std::vector<std::shared_ptr<specfem::sources::source> > &sources,
const std::vector<std::shared_ptr<specfem::receivers::receiver> >
&receivers,
const std::vector<specfem::enums::seismogram::type> &stypes,
const int max_sig_step);
};

} // namespace compute
} // namespace specfem
Expand Down
10 changes: 10 additions & 0 deletions include/compute/compute_mesh.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ struct shape_functions {
shape_functions(const specfem::kokkos::HostMirror1d<type_real> xi,
const specfem::kokkos::HostMirror1d<type_real> gamma,
const int &ngll, const int &ngnod);

shape_functions() = default;
};

struct quadrature {
Expand All @@ -45,13 +47,17 @@ struct quadrature {
specfem::kokkos::HostMirror1d<type_real> 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) {}
};

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) {}
Expand All @@ -72,6 +78,8 @@ struct control_nodes {
///< distinct control node

control_nodes(const specfem::mesh::control_nodes &control_nodes);

control_nodes() = default;
};

struct points {
Expand Down Expand Up @@ -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);

Expand Down
2 changes: 1 addition & 1 deletion include/compute/compute_partial_derivatives.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ struct partial_derivatives {
* @brief Default constructor
*
*/
partial_derivatives(){};
partial_derivatives() = default;
/**
* @brief Constructor to allocate views
*
Expand Down
3 changes: 1 addition & 2 deletions include/compute/coupled_interfaces/coupled_interfaces.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
2 changes: 2 additions & 0 deletions include/compute/fields/fields.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down
2 changes: 2 additions & 0 deletions include/compute/fields/simulation_field.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ template <typename simulation> 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);

Expand Down
2 changes: 2 additions & 0 deletions include/compute/properties/properties.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
};
Expand Down
37 changes: 37 additions & 0 deletions src/compute/compute_assembly.cpp
Original file line number Diff line number Diff line change
@@ -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<std::shared_ptr<specfem::sources::source> > &sources,
const std::vector<std::shared_ptr<specfem::receivers::receiver> >
&receivers,
const std::vector<specfem::enums::seismogram::type> &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;
}

0 comments on commit b040968

Please sign in to comment.