Skip to content

Commit 4e5a2b6

Browse files
Merge pull request #1607 from PrincetonUniversity/issue-1578
Issue 1578 [Part 1] - Adds CR for acoustic media
2 parents f658ff4 + 3fc1b63 commit 4e5a2b6

File tree

32 files changed

+372
-115
lines changed

32 files changed

+372
-115
lines changed

core/specfem/assembly/assembly/dim3/assembly.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,9 @@ specfem::assembly::assembly<specfem::dimension::type::dim3>::print() const {
8888
int total_elements = 0;
8989

9090
FOR_EACH_IN_PRODUCT(
91-
(DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC), PROPERTY_TAG(ISOTROPIC)), {
91+
(DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC, ACOUSTIC),
92+
PROPERTY_TAG(ISOTROPIC)),
93+
{
9294
// Getting the number of elements per medium
9395
int n_elements = this->element_types.get_number_of_elements(
9496
_medium_tag_, _property_tag_);

core/specfem/assembly/assembly/dim3/compute_wavefield/compute_wavefield.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,9 @@ specfem::assembly::assembly<specfem::dimension::type::dim3>::
8989
Kokkos::create_mirror_view(wavefield_on_entire_grid);
9090

9191
FOR_EACH_IN_PRODUCT(
92-
(DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC), PROPERTY_TAG(ISOTROPIC)), {
92+
(DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC, ACOUSTIC),
93+
PROPERTY_TAG(ISOTROPIC)),
94+
{
9395
if constexpr (_dimension_tag_ == specfem::dimension::type::dim3) {
9496
get_wavefield_on_entire_grid<_medium_tag_, _property_tag_>(
9597
component, *this, wavefield_on_entire_grid);

core/specfem/assembly/boundary_values/dim3/impl/boundary_value_container.tpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ specfem::assembly::boundary_values_impl::boundary_value_container<
2121
}
2222

2323
FOR_EACH_IN_PRODUCT(
24-
(DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC)),
24+
(DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC, ACOUSTIC)),
2525
CAPTURE(container) {
2626
_container_ = _boundary_medium_container<_dimension_tag_, _medium_tag_>(
2727
nstep, mesh, element_types, boundaries, h_property_index_mapping);

core/specfem/assembly/element_types/dim3/element_types.cpp

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ specfem::assembly::element_types<specfem::dimension::type::dim3>::element_types(
1616
}
1717

1818
FOR_EACH_IN_PRODUCT(
19-
(DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC)),
19+
(DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC, ACOUSTIC)),
2020
CAPTURE(elements, h_elements) {
2121
int count = 0;
2222
int index = 0;
@@ -38,7 +38,8 @@ specfem::assembly::element_types<specfem::dimension::type::dim3>::element_types(
3838
})
3939

4040
FOR_EACH_IN_PRODUCT(
41-
(DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC), PROPERTY_TAG(ISOTROPIC)),
41+
(DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC, ACOUSTIC),
42+
PROPERTY_TAG(ISOTROPIC)),
4243
CAPTURE(elements, h_elements) {
4344
int count = 0;
4445
int index = 0;
@@ -66,8 +67,8 @@ specfem::assembly::element_types<specfem::dimension::type::dim3>::element_types(
6667
})
6768

6869
FOR_EACH_IN_PRODUCT(
69-
(DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC), PROPERTY_TAG(ISOTROPIC),
70-
BOUNDARY_TAG(NONE)),
70+
(DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC, ACOUSTIC),
71+
PROPERTY_TAG(ISOTROPIC), BOUNDARY_TAG(NONE)),
7172
CAPTURE(elements, h_elements) {
7273
int count = 0;
7374
int index = 0;
@@ -100,7 +101,7 @@ specfem::assembly::element_types<specfem::dimension::type::dim3>::element_types(
100101
Kokkos::View<int *, Kokkos::DefaultHostExecutionSpace>
101102
specfem::assembly::element_types<specfem::dimension::type::dim3>::
102103
get_elements_on_host(const specfem::element::medium_tag medium_tag) const {
103-
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC),
104+
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC, ACOUSTIC),
104105
PROPERTY_TAG(ISOTROPIC), BOUNDARY_TAG(NONE)),
105106
CAPTURE(h_elements) {
106107
if (_medium_tag_ == medium_tag) {
@@ -114,7 +115,7 @@ specfem::assembly::element_types<specfem::dimension::type::dim3>::
114115
Kokkos::View<int *, Kokkos::DefaultExecutionSpace> specfem::assembly::
115116
element_types<specfem::dimension::type::dim3>::get_elements_on_device(
116117
const specfem::element::medium_tag medium_tag) const {
117-
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC),
118+
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC, ACOUSTIC),
118119
PROPERTY_TAG(ISOTROPIC), BOUNDARY_TAG(NONE)),
119120
CAPTURE(elements) {
120121
if (_medium_tag_ == medium_tag) {
@@ -130,7 +131,7 @@ Kokkos::View<int *, Kokkos::DefaultHostExecutionSpace> specfem::assembly::
130131
const specfem::element::medium_tag medium_tag,
131132
const specfem::element::property_tag property_tag) const {
132133

133-
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC),
134+
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC, ACOUSTIC),
134135
PROPERTY_TAG(ISOTROPIC), BOUNDARY_TAG(NONE)),
135136
CAPTURE(h_elements) {
136137
if (_medium_tag_ == medium_tag &&
@@ -147,7 +148,7 @@ Kokkos::View<int *, Kokkos::DefaultExecutionSpace> specfem::assembly::
147148
const specfem::element::medium_tag medium_tag,
148149
const specfem::element::property_tag property_tag) const {
149150

150-
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC),
151+
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC, ACOUSTIC),
151152
PROPERTY_TAG(ISOTROPIC), BOUNDARY_TAG(NONE)),
152153
CAPTURE(elements) {
153154
if (_medium_tag_ == medium_tag &&
@@ -164,7 +165,7 @@ Kokkos::View<int *, Kokkos::DefaultHostExecutionSpace> specfem::assembly::
164165
const specfem::element::medium_tag medium_tag,
165166
const specfem::element::property_tag property_tag,
166167
const specfem::element::boundary_tag boundary_tag) const {
167-
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC),
168+
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC, ACOUSTIC),
168169
PROPERTY_TAG(ISOTROPIC), BOUNDARY_TAG(NONE)),
169170
CAPTURE(h_elements) {
170171
if (_medium_tag_ == medium_tag &&
@@ -184,7 +185,7 @@ Kokkos::View<int *, Kokkos::DefaultExecutionSpace> specfem::assembly::
184185
const specfem::element::property_tag property_tag,
185186
const specfem::element::boundary_tag boundary_tag) const {
186187

187-
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC),
188+
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC, ACOUSTIC),
188189
PROPERTY_TAG(ISOTROPIC), BOUNDARY_TAG(NONE)),
189190
CAPTURE(elements) {
190191
if (_medium_tag_ == medium_tag &&

core/specfem/assembly/element_types/dim3/element_types.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -273,17 +273,17 @@ template <> struct element_types<specfem::dimension::type::dim3> {
273273
}
274274

275275
private:
276-
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC)),
276+
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC, ACOUSTIC)),
277277
DECLARE((IndexViewType, elements),
278278
(IndexViewType::HostMirror, h_elements)))
279279

280-
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC),
280+
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC, ACOUSTIC),
281281
PROPERTY_TAG(ISOTROPIC, ANISOTROPIC,
282282
ISOTROPIC_COSSERAT)),
283283
DECLARE((IndexViewType, elements),
284284
(IndexViewType::HostMirror, h_elements)))
285285

286-
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC),
286+
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC, ACOUSTIC),
287287
PROPERTY_TAG(ISOTROPIC), BOUNDARY_TAG(NONE)),
288288
DECLARE((IndexViewType, elements),
289289
(IndexViewType::HostMirror, h_elements)))

core/specfem/assembly/fields/dim3/simulation_field.hpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ struct simulation_field<specfem::dimension::type::dim3,
114114
this->nglly = rhs.nglly;
115115
this->ngllx = rhs.ngllx;
116116
FOR_EACH_IN_PRODUCT(
117-
(DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC)),
117+
(DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC, ACOUSTIC)),
118118
CAPTURE(field, (rhs_field, rhs.field), assembly_index_mapping,
119119
(rhs_assembly_index_mapping, rhs.assembly_index_mapping),
120120
h_assembly_index_mapping,
@@ -141,7 +141,7 @@ struct simulation_field<specfem::dimension::type::dim3,
141141
*/
142142
template <specfem::element::medium_tag MediumTag>
143143
KOKKOS_FORCEINLINE_FUNCTION int get_nglob() const {
144-
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC)),
144+
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC, ACOUSTIC)),
145145
CAPTURE(field) {
146146
if constexpr (MediumTag == _medium_tag_) {
147147
return _field_.nglob;
@@ -164,7 +164,7 @@ struct simulation_field<specfem::dimension::type::dim3,
164164
*
165165
* @code
166166
* const auto& elastic_field =
167-
* field.get_field<specfem::element::medium_tag::elastic>();
167+
* field.get_field<specfem::element::medium_tag::elastic>();
168168
* const auto& displacement = elastic_field.displacement;
169169
* @endcode
170170
*/
@@ -173,7 +173,7 @@ struct simulation_field<specfem::dimension::type::dim3,
173173
constexpr specfem::assembly::fields_impl::field_impl<dimension_tag,
174174
MediumTag> const &
175175
get_field() const {
176-
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC)),
176+
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC, ACOUSTIC)),
177177
CAPTURE(field) {
178178
if constexpr (MediumTag == _medium_tag_) {
179179
return _field_;
@@ -195,7 +195,7 @@ struct simulation_field<specfem::dimension::type::dim3,
195195
get_iglob(const int &ispec, const int &iz, const int &iy, const int &ix,
196196
const specfem::element::medium_tag MediumTag) const {
197197
if constexpr (on_device) {
198-
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC)),
198+
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC, ACOUSTIC)),
199199
CAPTURE(assembly_index_mapping) {
200200
if (MediumTag == _medium_tag_) {
201201
return _assembly_index_mapping_(
@@ -204,7 +204,7 @@ struct simulation_field<specfem::dimension::type::dim3,
204204
})
205205

206206
} else {
207-
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC)),
207+
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC, ACOUSTIC)),
208208
CAPTURE(h_assembly_index_mapping) {
209209
if (MediumTag == _medium_tag_) {
210210
return _h_assembly_index_mapping_(
@@ -255,7 +255,7 @@ struct simulation_field<specfem::dimension::type::dim3,
255255
IndexViewType::HostMirror h_index_mapping; ///< Host mirror of 3D index
256256
///< mapping for CPU operations
257257

258-
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC)),
258+
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC, ACOUSTIC)),
259259
DECLARE(((specfem::assembly::fields_impl::field_impl,
260260
(_DIMENSION_TAG_, _MEDIUM_TAG_)),
261261
field),
@@ -313,7 +313,7 @@ inline void deep_copy(SimulationWavefieldType1 &dst,
313313
dst.nglob = src.nglob;
314314

315315
FOR_EACH_IN_PRODUCT(
316-
(DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC)),
316+
(DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC, ACOUSTIC)),
317317
CAPTURE((src_assembly_index_mapping, src.assembly_index_mapping),
318318
(dst_assembly_index_mapping, dst.assembly_index_mapping),
319319
(src_h_assembly_index_mapping, src.h_assembly_index_mapping),

core/specfem/assembly/fields/dim3/simulation_field.tpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ specfem::assembly::simulation_field<specfem::dimension::type::dim3,
4343
this->h_index_mapping = mesh.h_index_mapping;
4444

4545
FOR_EACH_IN_PRODUCT(
46-
(DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC)),
46+
(DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC, ACOUSTIC)),
4747
CAPTURE(assembly_index_mapping, h_assembly_index_mapping, field) {
4848
_assembly_index_mapping_ = Kokkos::View<int *, Kokkos::LayoutLeft,
4949
Kokkos::DefaultExecutionSpace::memory_space>(
@@ -73,7 +73,7 @@ int specfem::assembly::simulation_field<
7373
return total_degrees_of_freedom;
7474
}
7575

76-
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC)), CAPTURE(
76+
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC, ACOUSTIC)), CAPTURE(
7777
field) {
7878
total_degrees_of_freedom +=
7979
this->get_nglob<_medium_tag_>() *
@@ -87,6 +87,6 @@ template <specfem::wavefield::simulation_field WavefieldType>
8787
template <specfem::sync::kind sync>
8888
void specfem::assembly::simulation_field<specfem::dimension::type::dim3,
8989
WavefieldType>::sync_fields() {
90-
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC)),
90+
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC, ACOUSTIC)),
9191
CAPTURE(field) { _field_.template sync_fields<sync>(); })
9292
}

core/specfem/assembly/impl/value_containers/dim3/value_containers.hpp

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ struct value_containers<specfem::dimension::type::dim3, containers_type> {
3636
}
3737
}
3838

39-
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC),
39+
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC, ACOUSTIC),
4040
PROPERTY_TAG(ISOTROPIC)),
4141
DECLARE(((containers_type, (_DIMENSION_TAG_, _MEDIUM_TAG_,
4242
_PROPERTY_TAG_)),
@@ -63,14 +63,14 @@ struct value_containers<specfem::dimension::type::dim3, containers_type> {
6363
constexpr containers_type<dimension_tag, MediumTag, PropertyTag> const &
6464
get_container() const {
6565

66-
FOR_EACH_IN_PRODUCT(
67-
(DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC), PROPERTY_TAG(ISOTROPIC)),
68-
CAPTURE(value) {
69-
if constexpr (_medium_tag_ == MediumTag &&
70-
_property_tag_ == PropertyTag) {
71-
return _value_;
72-
}
73-
})
66+
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC, ACOUSTIC),
67+
PROPERTY_TAG(ISOTROPIC)),
68+
CAPTURE(value) {
69+
if constexpr (_medium_tag_ == MediumTag &&
70+
_property_tag_ == PropertyTag) {
71+
return _value_;
72+
}
73+
})
7474

7575
Kokkos::abort("Invalid material type detected in value containers");
7676

@@ -88,16 +88,16 @@ struct value_containers<specfem::dimension::type::dim3, containers_type> {
8888
*/
8989
void copy_to_host() {
9090
Kokkos::deep_copy(h_property_index_mapping, property_index_mapping);
91-
FOR_EACH_IN_PRODUCT(
92-
(DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC), PROPERTY_TAG(ISOTROPIC)),
93-
CAPTURE(value) { _value_.copy_to_host(); })
91+
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC, ACOUSTIC),
92+
PROPERTY_TAG(ISOTROPIC)),
93+
CAPTURE(value) { _value_.copy_to_host(); })
9494
}
9595

9696
void copy_to_device() {
9797
Kokkos::deep_copy(property_index_mapping, h_property_index_mapping);
98-
FOR_EACH_IN_PRODUCT(
99-
(DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC), PROPERTY_TAG(ISOTROPIC)),
100-
CAPTURE(value) { _value_.copy_to_device(); })
98+
FOR_EACH_IN_PRODUCT((DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC, ACOUSTIC),
99+
PROPERTY_TAG(ISOTROPIC)),
100+
CAPTURE(value) { _value_.copy_to_device(); })
101101
}
102102
};
103103

core/specfem/assembly/kernels/dim3/kernels.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ specfem::assembly::kernels<specfem::dimension::type::dim3>::kernels(
2222
}
2323

2424
FOR_EACH_IN_PRODUCT(
25-
(DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC), PROPERTY_TAG(ISOTROPIC)),
25+
(DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC, ACOUSTIC),
26+
PROPERTY_TAG(ISOTROPIC)),
2627
CAPTURE(value) {
2728
_value_ = specfem::medium::kernels_container<
2829
_dimension_tag_, _medium_tag_, _property_tag_>(

core/specfem/assembly/properties/dim3/properties.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ specfem::assembly::properties<specfem::dimension::type::dim3>::properties(
2424
}
2525

2626
FOR_EACH_IN_PRODUCT(
27-
(DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC), PROPERTY_TAG(ISOTROPIC)),
27+
(DIMENSION_TAG(DIM3), MEDIUM_TAG(ELASTIC, ACOUSTIC),
28+
PROPERTY_TAG(ISOTROPIC)),
2829
CAPTURE(value) {
2930
_value_ = specfem::medium::properties_container<
3031
_dimension_tag_, _medium_tag_, _property_tag_>(

0 commit comments

Comments
 (0)