specfem::algorithms::transfer

template<typename IndexType, typename TransferFunctionType, typename EdgeFunctionType, typename IntersectionReturnCallback, typename std::enable_if_t<TransferFunctionType::connection_tag == specfem::element_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::element::dimension_tag dimension_tag, typename IndexType, typename IntersectionFieldViewType, typename IntersectionFactor, typename CallableType>
void coupling_integral(const specfem::assembly::nonconforming_interfaces<dimension_tag> &nonconforming_interfaces, 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

template<typename IndexType, typename IntersectionFieldViewType, typename IntersectionFactor, typename ShapeFunctionNormalDerivativesType, typename CallableType>
void coupling_integral_dnshape(const int &ngllz, const int &ngllx, const IndexType &chunk_index, const IntersectionFieldViewType &intersection_field, const IntersectionFactor &intersection_factor, const ShapeFunctionNormalDerivativesType &shape_function_normal_derivatives, 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 normal derivative of 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:
  • IndexType – The chunk_edge iterator type

  • IntersectionFieldViewType – The type of intersection_field

  • IntersectionFactor – A nonconforming chunk_edge accessor holding intersection_factor

  • ShapeFunctionNormalDerivativesType – a view holding the normal derivatives of the shape function (implementation may change)

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

Parameters:
  • ngllz – - number of quadrature points in z

  • ngllx – - number of quadrature points in x

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

  • intersection_field – - the field to integrate

  • intersection_factor – - nonconforming chunk_edge accessor holding intersection_factor

  • shape_function_normal_derivatives – - (TEMPORARY, TO BE LOADED LATER BY THIS FUNCTION) normal derivatives of the shape functions at each intersection point.

  • callback – - callback function to capture integral values