CoDiPack  2.2.0
A Code Differentiation Package
SciComp TU Kaiserslautern
Loading...
Searching...
No Matches
constantExpression.hpp
1/*
2 * CoDiPack, a Code Differentiation Package
3 *
4 * Copyright (C) 2015-2024 Chair for Scientific Computing (SciComp), University of Kaiserslautern-Landau
5 * Homepage: http://www.scicomp.uni-kl.de
6 * Contact: Prof. Nicolas R. Gauger (codi@scicomp.uni-kl.de)
7 *
8 * Lead developers: Max Sagebaum, Johannes Blühdorn (SciComp, University of Kaiserslautern-Landau)
9 *
10 * This file is part of CoDiPack (http://www.scicomp.uni-kl.de/software/codi).
11 *
12 * CoDiPack is free software: you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation, either version 3 of the
15 * License, or (at your option) any later version.
16 *
17 * CoDiPack is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty
19 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
20 *
21 * See the GNU General Public License for more details.
22 * You should have received a copy of the GNU
23 * General Public License along with CoDiPack.
24 * If not, see <http://www.gnu.org/licenses/>.
25 *
26 * For other licensing options please contact us.
27 *
28 * Authors:
29 * - SciComp, University of Kaiserslautern-Landau:
30 * - Max Sagebaum
31 * - Johannes Blühdorn
32 * - Former members:
33 * - Tim Albring
34 */
35#pragma once
36
37#include "../config.h"
38#include "../misc/macros.hpp"
39#include "expressionInterface.hpp"
40#include "logic/nodeInterface.hpp"
41#include "logic/traversalLogic.hpp"
42
44namespace codi {
45
49 template<typename T_StoreData>
51 public:
52
53 using StoreData = CODI_DD(T_StoreData, double);
55
57 static ArgumentData const& fromDataStore(StoreData const& v) {
58 return v;
59 }
60
62 static StoreData const& toDataStore(StoreData const& v) {
63 return v;
64 }
65 };
66
77 template<typename T_Real, template<typename> class T_ConversionOperator = ConstantDataConversion>
78 struct ConstantExpression : public ExpressionInterface<T_Real, ConstantExpression<T_Real, T_ConversionOperator>> {
79 public:
80
81 using Real = T_Real;
82
84 template<typename T>
86
87 private:
88 Real primalValue;
89
90 public:
91
93 CODI_INLINE ConstantExpression(Real const& v) : primalValue(v) {}
94
95 /*******************************************************************************/
98
100 using ActiveResult = void;
101
103 CODI_INLINE Real const& getValue() const {
104 return primalValue;
105 }
106
108 template<size_t argNumber>
110 return Real();
111 }
112
114 /*******************************************************************************/
117
118 static bool constexpr EndPoint = true;
119
121 template<typename Logic, typename... Args>
122 CODI_INLINE void forEachLink(TraversalLogic<Logic>& logic, Args&&... args) const {
123 CODI_UNUSED(logic, args...);
124 }
125
127 template<typename Logic, typename... Args>
128 CODI_INLINE static typename Logic::ResultType constexpr forEachLinkConstExpr(Args&&... CODI_UNUSED_ARG(args)) {
129 return Logic::NeutralElement;
130 }
131
133 };
134}
#define CODI_INLINE
See codi::Config::ForcedInlines.
Definition: config.h:457
#define CODI_DD(Type, Default)
Abbreviation for CODI_DECLARE_DEFAULT.
Definition: macros.hpp:94
#define CODI_UNUSED_ARG(arg)
Used in a constexpr context, where using CODI_UNUSED spoils the constexpr.
Definition: macros.hpp:49
#define CODI_T(...)
Abbreviation for CODI_TEMPLATE.
Definition: macros.hpp:111
CoDiPack - Code Differentiation Package.
Definition: codi.hpp:90
void CODI_UNUSED(Args const &...)
Disable unused warnings for an arbitrary number of arguments.
Definition: macros.hpp:46
Definition: constantExpression.hpp:50
static StoreData const & toDataStore(StoreData const &v)
Convert the data from the constant expression to the store.
Definition: constantExpression.hpp:62
static ArgumentData const & fromDataStore(StoreData const &v)
Convert the data from the store to the argument of the constant expression.
Definition: constantExpression.hpp:57
T_StoreData StoreData
See ConstantDataConversion.
Definition: constantExpression.hpp:53
StoreData ArgumentData
Defined by specializations.
Definition: constantExpression.hpp:54
Represents constant values in the expression tree.
Definition: constantExpression.hpp:78
void forEachLink(TraversalLogic< Logic > &logic, Args &&... args) const
Definition: constantExpression.hpp:122
Real getJacobian() const
Definition: constantExpression.hpp:109
static bool constexpr EndPoint
If this expression is handled as a leaf in the tree.
Definition: constantExpression.hpp:118
T_ConversionOperator< T > ConversionOperator
See ConstantExpression.
Definition: constantExpression.hpp:85
static Logic::ResultType constexpr forEachLinkConstExpr(Args &&...)
Definition: constantExpression.hpp:128
Real const & getValue() const
Compute the primal value that is usually evaluated by the statement/expression.
Definition: constantExpression.hpp:103
T_Real Real
See ConstantExpression.
Definition: constantExpression.hpp:81
void ActiveResult
Type into which the expression can be converted. Usually also the type from which it is constructed.
Definition: constantExpression.hpp:100
ConstantExpression(Real const &v)
Constructor.
Definition: constantExpression.hpp:93
Base class for all CoDiPack expressions.
Definition: expressionInterface.hpp:59
Traversal of CoDiPack expressions.
Definition: traversalLogic.hpp:56