SpECTRE Documentation Coverage Report
Current view: top level - Evolution/Imex/Tags - Jacobian.hpp Hit Total Coverage
Commit: 965048f86d23c819715b3af1ca3f880c8145d4bb Lines: 2 7 28.6 %
Date: 2024-05-16 17:00:40
Legend: Lines: hit not hit

          Line data    Source code
       1           0 : // Distributed under the MIT License.
       2             : // See LICENSE.txt for details.
       3             : 
       4             : #pragma once
       5             : 
       6             : #include "DataStructures/DataBox/Tag.hpp"
       7             : #include "DataStructures/Tensor/EagerMath/OuterProduct.hpp"
       8             : #include "DataStructures/Tensor/Metafunctions.hpp"
       9             : 
      10             : namespace imex {
      11             : namespace Tags {
      12             : /*!
      13             :  * Tag for the derivative of an implicit source (`Dependent`) with
      14             :  * respect to an implicit variable (`Independent`).
      15             :  *
      16             :  * The independent indices are given first, so
      17             :  * \f{equation}
      18             :  *   \frac{S(U_{j...})}{U_{i...}} = J_{i\ldots,j\ldots}
      19             :  * \f}
      20             :  * with appropriate upper and lower indices.
      21             :  */
      22             : template <typename Independent, typename Dependent>
      23           1 : struct Jacobian : db::SimpleTag {
      24             :   static_assert(std::is_same_v<typename Independent::type::value_type,
      25             :                                typename Dependent::type::value_type>);
      26           0 :   using independent = Independent;
      27           0 :   using dependent = Dependent;
      28             : 
      29             :  private:
      30           0 :   using Denominator =
      31             :       TensorMetafunctions::change_all_valences<typename Independent::type>;
      32             : 
      33             :  public:
      34           0 :   using type = OuterProductResultTensor<
      35             :       typename Dependent::type::value_type, typename Denominator::symmetry,
      36             :       typename Denominator::index_list, typename Dependent::type::symmetry,
      37             :       typename Dependent::type::index_list>;
      38             : };
      39             : }  // namespace Tags
      40             : 
      41             : /// Create a list of all jacobian tags for the dependence of \p
      42             : /// DependentList on \p IndependentList.
      43             : ///
      44             : /// This can be used to construct the argument for a `Variables` from
      45             : /// the `tags_list`s of two other `Variables`.
      46             : template <typename IndependentList, typename DependentList>
      47           1 : using jacobian_tags = tmpl::join<tmpl::transform<
      48             :     IndependentList,
      49             :     tmpl::lazy::transform<
      50             :         tmpl::pin<DependentList>,
      51             :         tmpl::defer<tmpl::bind<::imex::Tags::Jacobian, tmpl::parent<tmpl::_1>,
      52             :                                tmpl::_1>>>>>;
      53             : }  // namespace imex

Generated by: LCOV version 1.14