Cantera
Install
User Guide
Examples
Reference
Develop
Community
4.0.0a2
Toggle main menu visibility
Loading...
Searching...
No Matches
eigen_dense.h
1
// This file is part of Cantera. See License.txt in the top-level directory or
2
// at https://cantera.org/license.txt for license and copyright information.
3
4
#ifndef CT_EIGEN_DENSE_H
5
#define CT_EIGEN_DENSE_H
6
7
#include "
cantera/base/ct_defs.h
"
8
9
#if CT_USE_SYSTEM_EIGEN
10
#if CT_USE_SYSTEM_EIGEN_PREFIXED
11
#include <eigen3/Eigen/Dense>
12
#else
13
#include <Eigen/Dense>
14
#endif
15
#else
16
#include "cantera/ext/Eigen/Dense"
17
#endif
18
#include <concepts>
19
20
namespace
Cantera
21
{
22
23
//! @addtogroup matrices
24
//! @{
25
26
typedef
Eigen::Map<Eigen::MatrixXd> MappedMatrix;
27
typedef
Eigen::Map<const Eigen::MatrixXd> ConstMappedMatrix;
28
typedef
Eigen::Map<Eigen::VectorXd> MappedVector;
29
typedef
Eigen::Map<const Eigen::VectorXd> ConstMappedVector;
30
typedef
Eigen::Map<Eigen::RowVectorXd> MappedRowVector;
31
typedef
Eigen::Map<const Eigen::RowVectorXd> ConstMappedRowVector;
32
33
//! @}
34
35
template
<
class
Derived>
36
concept
EigenDenseDouble
= std::same_as<typename Derived::Scalar, double>;
37
38
// Require a 1D type with contiguous storage
39
template
<
class
Derived>
40
concept
EigenVectorLike
=
EigenDenseDouble<Derived>
41
&& (Derived::IsVectorAtCompileTime == 1);
42
43
//! Convenience wrapper for accessing Eigen vector/array/map data as a span
44
//! @todo Remove once %Cantera requires Eigen 5.0 or newer.
45
template
<EigenVectorLike Derived>
46
inline
span<double>
asSpan
(Eigen::DenseBase<Derived>& v)
47
{
48
return
span<double>(v.derived().data(), v.size());
49
}
50
51
//! Convenience wrapper for accessing Eigen vector/array/map data as a span
52
//! @todo Remove once %Cantera requires Eigen 5.0 or newer.
53
template
<EigenVectorLike Derived>
54
inline
span<const double>
asSpan
(
const
Eigen::DenseBase<Derived>& v)
55
{
56
return
span<const double>(v.derived().data(), v.size());
57
}
58
59
//! Convenience wrapper for accessing std::vector as an Eigen VectorXd
60
inline
MappedVector
asVectorXd
(vector<double>& v)
61
{
62
return
MappedVector(v.data(),
static_cast<
Eigen::Index
>
(v.size()));
63
}
64
65
//! Convenience wrapper for accessing std::vector as an Eigen VectorXd
66
inline
ConstMappedVector
asVectorXd
(
const
vector<double>& v)
67
{
68
return
ConstMappedVector(v.data(),
static_cast<
Eigen::Index
>
(v.size()));
69
}
70
71
//! Convenience wrapper for accessing std::span as an Eigen VectorXd
72
inline
MappedVector
asVectorXd
(span<double> v)
73
{
74
return
MappedVector(v.data(),
static_cast<
Eigen::Index
>
(v.size()));
75
}
76
77
//! Convenience wrapper for accessing std::span as an Eigen VectorXd
78
inline
ConstMappedVector
asVectorXd
(span<const double> v)
79
{
80
return
ConstMappedVector(v.data(),
static_cast<
Eigen::Index
>
(v.size()));
81
}
82
83
}
84
#endif
Cantera::EigenDenseDouble
Definition
eigen_dense.h:36
Cantera::EigenVectorLike
Definition
eigen_dense.h:40
ct_defs.h
This file contains definitions of constants, types and terms that are used in internal routines and a...
Cantera
Namespace for the Cantera kernel.
Definition
AnyMap.cpp:595
Cantera::asVectorXd
MappedVector asVectorXd(vector< double > &v)
Convenience wrapper for accessing std::vector as an Eigen VectorXd.
Definition
eigen_dense.h:60
Cantera::asSpan
span< double > asSpan(Eigen::DenseBase< Derived > &v)
Convenience wrapper for accessing Eigen vector/array/map data as a span.
Definition
eigen_dense.h:46
include
cantera
numerics
eigen_dense.h
Generated by
1.17.0