specfem::assembly::sources_impl::sort_sources_per_medium

template<specfem::dimension::type DimensionTag, specfem::element::medium_tag MediumTag>
std::tuple<std::vector<std::shared_ptr<specfem::sources::source<DimensionTag>>>, std::vector<int>> specfem::assembly::sources_impl::sort_sources_per_medium(const std::vector<std::shared_ptr<specfem::sources::source<DimensionTag>>> &sources, const specfem::assembly::element_types<DimensionTag> &element_types, const specfem::assembly::mesh<DimensionTag> &mesh)

Filter and sort sources by medium type.

Extracts sources belonging to a specific medium type from a heterogeneous source collection. This function enables medium-specific processing by grouping sources with compatible physical properties and computational requirements.

// Example: Extract elastic sources from mixed collection
auto [elastic_sources, indices] = sort_sources_per_medium<
    specfem::dimension::type::dim2,
    specfem::element::medium_tag::elastic_psv>(
        all_sources, element_types, mesh);

Note

This function is an implementation detail and should be used only within specfem::assembly::sources construction

Template Parameters:
  • DimensionTag – Spatial dimension (dim2 or dim3)

  • MediumTag – Target medium type (elastic_psv, acoustic, etc.)

Parameters:
  • sources – Complete vector of sources from all medium types

  • element_types – Element classification data (unused but maintained for API consistency)

  • mesh – Finite element mesh information (unused but maintained for API consistency)

Returns:

std::tuple containing:

  • Filtered vector of sources matching the specified medium type

  • Original indices of the filtered sources in the input vector