Basix 0.4.1

Home     Installation     Demos     C++ docs     Python docs

math.h
1 // Copyright (C) 2021 Igor Baratta
2 //
3 // This file is part of DOLFINx (https://www.fenicsproject.org)
4 //
5 // SPDX-License-Identifier: LGPL-3.0-or-later
6 
7 #pragma once
8 
9 #include <xtensor/xarray.hpp>
10 #include <xtensor/xfixed.hpp>
11 #include <xtensor/xtensor.hpp>
12 
14 
17 namespace basix::math
18 {
19 
24 template <typename U, typename V>
25 xt::xtensor<typename U::value_type, 2> outer(const U& u, const V& v)
26 {
27  xt::xtensor<typename U::value_type, 2> results({u.size(), v.size()});
28  for (std::size_t i = 0; i < u.size(); i++)
29  for (std::size_t j = 0; j < u.size(); j++)
30  results(i, j) = u(i) * v(j);
31 
32  return results;
33 }
34 
39 template <typename U, typename V>
40 xt::xtensor_fixed<typename U::value_type, xt::xshape<3>> cross(const U& u,
41  const V& v)
42 {
43  assert(u.size() == 3);
44  assert(v.size() == 3);
45  return {u[1] * v[2] - u[2] * v[1], u[2] * v[0] - u[0] * v[2],
46  u[0] * v[1] - u[1] * v[0]};
47 }
48 
52 std::pair<xt::xtensor<double, 1>,
53  xt::xtensor<double, 2, xt::layout_type::column_major>>
54 eigh(const xt::xtensor<double, 2>& A);
55 
60 xt::xarray<double, xt::layout_type::column_major>
61 solve(const xt::xtensor<double, 2>& A, const xt::xarray<double>& B);
62 
66 bool is_singular(const xt::xtensor<double, 2>& A);
67 
72 void dot(const xt::xtensor<double, 2>& A, const xt::xtensor<double, 2>& B,
73  xt::xtensor<double, 2>& C);
74 
79 xt::xtensor<double, 2> dot(const xt::xtensor<double, 2>& A,
80  const xt::xtensor<double, 2>& B);
81 
82 } // namespace basix::math
basix::math::eigh
std::pair< xt::xtensor< double, 1 >, xt::xtensor< double, 2, xt::layout_type::column_major > > eigh(const xt::xtensor< double, 2 > &A)
Definition: math.cpp:27
basix::math
Mathematical functions.
Definition: math.h:17
basix::math::solve
xt::xarray< double, xt::layout_type::column_major > solve(const xt::xtensor< double, 2 > &A, const xt::xarray< double > &B)
Definition: math.cpp:64
basix::math::dot
void dot(const xt::xtensor< double, 2 > &A, const xt::xtensor< double, 2 > &B, xt::xtensor< double, 2 > &C)
Definition: math.cpp:115
basix::math::is_singular
bool is_singular(const xt::xtensor< double, 2 > &A)
Definition: math.cpp:88
basix::math::outer
xt::xtensor< typename U::value_type, 2 > outer(const U &u, const V &v)
Definition: math.h:25
basix::math::cross
xt::xtensor_fixed< typename U::value_type, xt::xshape< 3 > > cross(const U &u, const V &v)
Definition: math.h:40