specfem::algorithms::transfer

template<typename IndexType, typename TransferFunctionType, typename EdgeFunctionType, typename IntersectionReturnCallback, typename std::enable_if_t<TransferFunctionType::connection_tag == specfem::connections::type::nonconforming, int> = 0>
void transfer(const IndexType &chunk_edge_index, const TransferFunctionType &transfer_function, const EdgeFunctionType &edge_function, const IntersectionReturnCallback &callback)

Takes a chunk_edge::field and maps it onto the intersection, using a single-sided transfer-function container.

Template Parameters:
  • CoupledInterfaceType – transfer function container type (specfem::assembly::coupled_interfaces_impl::stores_transfer_function_coupled<CoupledInterfaceType>::value must be true)

  • EdgeFieldType – The chunk_edge field type

  • IntersectionFieldViewType – - a view that the intersection field should be stored into

Parameters:
  • interface_data – transfer function container

  • coupled_field – The chunk_edge field to map from

  • intersection_field – a view that the intersection field should be stored into

specfem::algorithms::coupling_integral

template<specfem::dimension::type dimension_tag, typename IndexType, typename IntersectionFieldViewType, typename IntersectionFactor, typename CallableType>
void coupling_integral(const specfem::assembly::assembly<dimension_tag> &assembly, const IndexType &chunk_index, const IntersectionFieldViewType &intersection_field, const IntersectionFactor &intersection_factor, const CallableType &callback)

Takes a field intersection_field on the intersection and computes, for each self GLL point, the integral of intersection_field times the shape function at that point. intersection_field should be call-accessible (e.g. Kokkos::View) with shape:

(chunk_size, n_quad_intersection, self::components())

After handling any other intersection forces, boundary conditions, etc. the result can be atomic_added to the acceleration field.

Template Parameters:
  • dimension_tag – dimension of the simulation

  • IndexType – The chunk_edge iterator type

  • IntersectionFieldViewType – The type of intersection_field

  • ChunkEdgeWeightJacobianType – A nonconforming chunk_edge accessor holding intersection_factor

  • CallableType – The callback function, which will be given the point index and corresponding evaluated integral

Parameters:
  • assembly – - assembly struct

  • chunk_index – - the outer index (chunk_edge) that gets iterated for points

  • intersection_field – - the field to integrate

  • weight_jacobian – - nonconforming chunk_edge accessor holding intersection_factor

  • callback – - callback function to capture integral values