Skip to content

Commit

Permalink
Merge pull request #227 from PrincetonUniversity/issue-200
Browse files Browse the repository at this point in the history
Issue 200
  • Loading branch information
Rohit-Kakodkar authored Dec 4, 2024
2 parents 8a62c99 + 13bcc8c commit fa50384
Show file tree
Hide file tree
Showing 53 changed files with 399 additions and 232 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ add_library(
src/IO/mesh/impl/fortran/read_material_properties.cpp
src/IO/mesh/impl/fortran/read_mesh_database.cpp
src/IO/mesh/impl/fortran/read_interfaces.cpp
src/IO/mesh/impl/fortran/read_properties.cpp
src/IO/mesh/impl/fortran/read_parameters.cpp
)

if (NOT HDF5_CXX_BUILD)
Expand Down
5 changes: 3 additions & 2 deletions include/IO/interface.hpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#pragma once

#include "enumerations/interface.hpp"
#include "enumerations/simulation.hpp"
#include "mesh/mesh.hpp"
#include "receiver/interface.hpp"
Expand All @@ -19,8 +20,8 @@ namespace IO {
* @return specfem::mesh::mesh Specfem mesh object
*
*/
specfem::mesh::mesh read_mesh(const std::string filename,
const specfem::MPI::MPI *mpi);
specfem::mesh::mesh<specfem::dimension::type::dim2>
read_mesh(const std::string filename, const specfem::MPI::MPI *mpi);

/**
* @brief Read receiver station file
Expand Down
2 changes: 1 addition & 1 deletion include/IO/mesh/impl/fortran/read_boundaries.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ namespace fortran {
* @param mpi MPI object
* @return specfem::mesh::boundaries
*/
specfem::mesh::boundaries
specfem::mesh::boundaries<specfem::dimension::type::dim2>
read_boundaries(std::ifstream &stream, const int nspec, const int n_absorbing,
const int n_acoustic_surface, const int n_acforcing,
const Kokkos::View<int **, Kokkos::HostSpace> knods,
Expand Down
5 changes: 3 additions & 2 deletions include/IO/mesh/impl/fortran/read_elements.hpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#pragma once

#include "enumerations/interface.hpp"
#include "mesh/elements/axial_elements.hpp"
#include "mesh/elements/tangential_elements.hpp"
#include "specfem_mpi/interface.hpp"
Expand All @@ -18,7 +19,7 @@ namespace fortran {
* @return specfem::mesh::elements::tangential_elements
*
*/
specfem::mesh::elements::tangential_elements
specfem::mesh::elements::tangential_elements<specfem::dimension::type::dim2>
read_tangential_elements(std::ifstream &stream,
const int nnodes_tangential_curve);

Expand All @@ -32,7 +33,7 @@ read_tangential_elements(std::ifstream &stream,
* @return specfem::mesh::elements::axial_elements
*
*/
specfem::mesh::elements::axial_elements
specfem::mesh::elements::axial_elements<specfem::dimension::type::dim2>
read_axial_elements(std::ifstream &stream, const int nelem_on_the_axis,
const int nspec, const specfem::MPI::MPI *mpi);

Expand Down
15 changes: 9 additions & 6 deletions include/IO/mesh/impl/fortran/read_interfaces.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,10 @@ namespace mesh {
namespace impl {
namespace fortran {

template <specfem::element::medium_tag medium1,
template <specfem::dimension::type DimensionType,
specfem::element::medium_tag medium1,
specfem::element::medium_tag medium2>
specfem::mesh::interface_container<medium1, medium2>
specfem::mesh::interface_container<DimensionType, medium1, medium2>
read_interfaces(const int num_interfaces, std::ifstream &stream,
const specfem::MPI::MPI *mpi);

Expand All @@ -25,10 +26,12 @@ read_interfaces(const int num_interfaces, std::ifstream &stream,
* @param mpi
* @return specfem::mesh::coupled_interfaces
*/
specfem::mesh::coupled_interfaces read_coupled_interfaces(
std::ifstream &stream, const int num_interfaces_elastic_acoustic,
const int num_interfaces_acoustic_poroelastic,
const int num_interfaces_elastic_poroelastic, const specfem::MPI::MPI *mpi);
specfem::mesh::coupled_interfaces<specfem::dimension::type::dim2>
read_coupled_interfaces(std::ifstream &stream,
const int num_interfaces_elastic_acoustic,
const int num_interfaces_acoustic_poroelastic,
const int num_interfaces_elastic_poroelastic,
const specfem::MPI::MPI *mpi);

} // namespace fortran
} // namespace impl
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#pragma once

#include "IO/fortranio/interface.hpp"
#include "mesh/properties/properties.hpp"
#include "mesh/parameters/parameters.hpp"
#include "specfem_mpi/interface.hpp"

namespace specfem {
Expand All @@ -11,14 +11,15 @@ namespace impl {
namespace fortran {

/*
* @brief Read properties from mesh database
* @brief Read paramters from 2D mesh database
*
* @param stream Input stream
* @param mpi MPI object
* @return specfem::mesh::properties Property object
* @return specfem::mesh::parameters<specfem::dimension::type::dim2> Mesh
* parameters
*/
specfem::mesh::properties read_properties(std::ifstream &stream,
const specfem::MPI::MPI *mpi);
specfem::mesh::parameters<specfem::dimension::type::dim2>
read_mesh_parameters(std::ifstream &stream, const specfem::MPI::MPI *mpi);

} // namespace fortran
} // namespace impl
Expand Down
4 changes: 2 additions & 2 deletions include/compute/assembly/assembly.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
#include "compute/properties/interface.hpp"
#include "compute/sources/sources.hpp"
#include "enumerations/display.hpp"
#include "enumerations/specfem_enums.hpp"
#include "enumerations/interface.hpp"
#include "mesh/mesh.hpp"
#include "receiver/interface.hpp"
#include "source/interface.hpp"
Expand Down Expand Up @@ -67,7 +67,7 @@ struct assembly {
* @param simulation Type of simulation (forward, adjoint, etc.)
*/
assembly(
const specfem::mesh::mesh &mesh,
const specfem::mesh::mesh<specfem::dimension::type::dim2> &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> >
Expand Down
4 changes: 2 additions & 2 deletions include/compute/boundaries/boundaries.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

#include "compute/compute_mesh.hpp"
#include "compute/properties/properties.hpp"
#include "enumerations/specfem_enums.hpp"
#include "enumerations/interface.hpp"
#include "impl/acoustic_free_surface.hpp"
#include "impl/stacey.hpp"
#include "macros.hpp"
Expand Down Expand Up @@ -69,7 +69,7 @@ struct boundaries {
* quadrature point
*/
boundaries(const int nspec, const int ngllz, const int ngllx,
const specfem::mesh::mesh &mesh,
const specfem::mesh::mesh<specfem::dimension::type::dim2> &mesh,
const specfem::compute::mesh_to_compute_mapping &mapping,
const specfem::compute::quadrature &quadrature,
const specfem::compute::properties &properties,
Expand Down
3 changes: 2 additions & 1 deletion include/compute/boundaries/impl/acoustic_free_surface.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@ struct acoustic_free_surface {

acoustic_free_surface(
const int nspec, const int ngllz, const int ngllx,
const specfem::mesh::acoustic_free_surface &acoustic_free_surface,
const specfem::mesh::acoustic_free_surface<specfem::dimension::type::dim2>
&acoustic_free_surface,
const specfem::compute::mesh_to_compute_mapping &mapping,
const specfem::compute::properties &properties,
const Kokkos::View<int *, Kokkos::HostSpace> &boundary_index_mapping,
Expand Down
3 changes: 2 additions & 1 deletion include/compute/boundaries/impl/stacey.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,8 @@ struct stacey {
stacey() = default;

stacey(const int nspec, const int ngllz, const int ngllx,
const specfem::mesh::absorbing_boundary &stacey,
const specfem::mesh::absorbing_boundary<specfem::dimension::type::dim2>
&stacey,
const specfem::compute::mesh_to_compute_mapping &mapping,
const specfem::compute::quadrature &quadrature,
const specfem::compute::partial_derivatives &partial_derivatives,
Expand Down
5 changes: 3 additions & 2 deletions include/compute/compute_mesh.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@ struct mesh_to_compute_mapping {

mesh_to_compute_mapping() = default;

mesh_to_compute_mapping(const specfem::mesh::tags &tags);
mesh_to_compute_mapping(
const specfem::mesh::tags<specfem::dimension::type::dim2> &tags);
};

/**
Expand Down Expand Up @@ -190,7 +191,7 @@ struct mesh {

mesh() = default;

mesh(const specfem::mesh::tags &tags,
mesh(const specfem::mesh::tags<specfem::dimension::type::dim2> &tags,
const specfem::mesh::control_nodes<specfem::dimension::type::dim2>
&control_nodes,
const specfem::quadrature::quadratures &quadratures);
Expand Down
5 changes: 3 additions & 2 deletions include/compute/coupled_interfaces/coupled_interfaces.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
#include "compute/compute_partial_derivatives.hpp"
#include "compute/coupled_interfaces/interface_container.hpp"
#include "compute/properties/properties.hpp"
#include "enumerations/specfem_enums.hpp"
#include "enumerations/interface.hpp"
#include "interface_container.hpp"
#include "mesh/coupled_interfaces/coupled_interfaces.hpp"

Expand Down Expand Up @@ -39,7 +39,8 @@ struct coupled_interfaces {
* @param mapping Mapping between mesh and compute spectral element indexing
*/
coupled_interfaces(
const specfem::mesh::mesh &mesh, const specfem::compute::points &points,
const specfem::mesh::mesh<specfem::dimension::type::dim2> &mesh,
const specfem::compute::points &points,
const specfem::compute::quadrature &quadrature,
const specfem::compute::partial_derivatives &partial_derivatives,
const specfem::compute::properties &properties,
Expand Down
5 changes: 3 additions & 2 deletions include/compute/coupled_interfaces/interface_container.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
#include "compute/coupled_interfaces/interface_container.hpp"
#include "compute/properties/properties.hpp"
#include "edge/interface.hpp"
#include "enumerations/specfem_enums.hpp"
#include "enumerations/interface.hpp"
#include "kokkos_abstractions.h"

namespace specfem {
Expand Down Expand Up @@ -76,7 +76,8 @@ struct interface_container {
* @param mapping Mapping between mesh and compute spectral element indexing
*/
interface_container(
const specfem::mesh::mesh &mesh, const specfem::compute::points &points,
const specfem::mesh::mesh<specfem::dimension::type::dim2> &mesh,
const specfem::compute::points &points,
const specfem::compute::quadrature &quadrature,
const specfem::compute::partial_derivatives &partial_derivatives,
const specfem::compute::properties &properties,
Expand Down
5 changes: 3 additions & 2 deletions include/compute/coupled_interfaces/interface_container.tpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include "compute/coupled_interfaces/interface_container.hpp"
#include "compute/properties/properties.hpp"
#include "edge/interface.hpp"
#include "enumerations/interface.hpp"
#include "kokkos_abstractions.h"
#include "mesh/coupled_interfaces/coupled_interfaces.hpp"
#include "mesh/coupled_interfaces/interface_container.hpp"
Expand Down Expand Up @@ -514,14 +515,14 @@ template <specfem::element::medium_tag MediumTag1,
specfem::element::medium_tag MediumTag2>
specfem::compute::interface_container<MediumTag1, MediumTag2>::
interface_container(
const specfem::mesh::mesh &mesh, const specfem::compute::points &points,
const specfem::mesh::mesh<specfem::dimension::type::dim2> &mesh, const specfem::compute::points &points,
const specfem::compute::quadrature &quadratures,
const specfem::compute::partial_derivatives &partial_derivatives,
const specfem::compute::properties &properties,
const specfem::compute::mesh_to_compute_mapping &mapping) {

const auto interface_container =
std::get<specfem::mesh::interface_container<MediumTag1, MediumTag2> >(
std::get<specfem::mesh::interface_container<specfem::dimension::type::dim2, MediumTag1, MediumTag2> >(
mesh.coupled_interfaces.get<MediumTag1, MediumTag2>());

int num_interfaces = interface_container.num_interfaces;
Expand Down
4 changes: 2 additions & 2 deletions include/compute/kernels/impl/material_kernels.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
#define _SPECFEM_COMPUTE_KERNELS_IMPL_MATERIAL_KERNELS_HPP_

#include "compute/properties/properties.hpp"
#include "enumerations/medium.hpp"
#include "enumerations/interface.hpp"
#include "kernels_container.hpp"
#include "kokkos_abstractions.h"
#include <Kokkos_Core.hpp>
Expand All @@ -23,7 +23,7 @@ class material_kernels : public kernels_container<type, property> {
material_kernels(
const int nspec, const int n_element, const int ngllz, const int ngllx,
const specfem::compute::mesh_to_compute_mapping &mapping,
const specfem::mesh::tags &tags,
const specfem::mesh::tags<specfem::dimension::type::dim2> &tags,
const specfem::kokkos::HostView1d<int> property_index_mapping)
: specfem::compute::impl::kernels::kernels_container<value_type,
property_type>(
Expand Down
2 changes: 1 addition & 1 deletion include/compute/kernels/kernels.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ struct kernels {
*/
kernels(const int nspec, const int ngllz, const int ngllx,
const specfem::compute::mesh_to_compute_mapping &mapping,
const specfem::mesh::tags &tags);
const specfem::mesh::tags<specfem::dimension::type::dim2> &tags);
///@}

/**
Expand Down
3 changes: 2 additions & 1 deletion include/compute/properties/impl/material_properties.hpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#pragma once

#include "compute/compute_mesh.hpp"
#include "enumerations/interface.hpp"
#include "mesh/materials/materials.hpp"
#include "mesh/tags/tags.hpp"
#include "properties_container.hpp"
Expand All @@ -23,7 +24,7 @@ struct material_property
material_property(
const int nspec, const int n_element, const int ngllz, const int ngllx,
const specfem::compute::mesh_to_compute_mapping &mapping,
const specfem::mesh::tags &tags,
const specfem::mesh::tags<specfem::dimension::type::dim2> &tags,
const specfem::mesh::materials &materials,
const specfem::kokkos::HostView1d<int> property_index_mapping)
: specfem::compute::impl::properties::properties_container<type,
Expand Down
2 changes: 1 addition & 1 deletion include/compute/properties/properties.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ struct properties {
*/
properties(const int nspec, const int ngllz, const int ngllx,
const specfem::compute::mesh_to_compute_mapping &mapping,
const specfem::mesh::tags &tags,
const specfem::mesh::tags<specfem::dimension::type::dim2> &tags,
const specfem::mesh::materials &materials);

///@}
Expand Down
14 changes: 13 additions & 1 deletion include/mesh/boundaries/absorbing_boundaries.hpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#pragma once

#include "enumerations/dimension.hpp"
#include "enumerations/specfem_enums.hpp"
#include "specfem_mpi/specfem_mpi.hpp"

Expand All @@ -8,8 +9,19 @@ namespace mesh {
/**
* @brief Absorbing boundary information
*
* @tparam DimensionType Dimension type for the mesh
*/
struct absorbing_boundary {
template <specfem::dimension::type DimensionType> struct absorbing_boundary;

/**
* @brief Absorbing boundary information
*
*/
template <> struct absorbing_boundary<specfem::dimension::type::dim2> {

constexpr static auto dimension =
specfem::dimension::type::dim2; ///< Dimension
///< type

int nelements; ///< Number of elements on the absorbing boundary

Expand Down
14 changes: 13 additions & 1 deletion include/mesh/boundaries/acoustic_free_surface.hpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#pragma once

#include "enumerations/dimension.hpp"
#include "enumerations/specfem_enums.hpp"
#include "specfem_mpi/specfem_mpi.hpp"

Expand All @@ -8,8 +9,19 @@ namespace mesh {
/**
* @brief Acoustic free surface boundary information
*
* @tparam DimensionType Dimension type for the mesh
*/
struct acoustic_free_surface {
template <specfem::dimension::type DimensionType> struct acoustic_free_surface;

/**
* @brief Acoustic free surface boundary information
*
*/
template <> struct acoustic_free_surface<specfem::dimension::type::dim2> {

constexpr static auto dimension =
specfem::dimension::type::dim2; ///< Dimension
///< type
/**
* @name Constructors
*
Expand Down
Loading

0 comments on commit fa50384

Please sign in to comment.