CoDiPack  3.0.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-2025 Chair for Scientific Computing (SciComp), University of Kaiserslautern-Landau
5 * Homepage: http://scicomp.rptu.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://scicomp.rptu.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 ADLogic = void;
101
103 CODI_INLINE Real const& getValue() const {
104 return primalValue;
105 }
106
108 /*******************************************************************************/
111
112 static size_t constexpr LinkCount = 0;
113
115 };
116}
#define CODI_INLINE
See codi::Config::ForcedInlines.
Definition config.h:469
#define CODI_DD(Type, Default)
Abbreviation for CODI_DECLARE_DEFAULT.
Definition macros.hpp:96
#define CODI_T(...)
Abbreviation for CODI_TEMPLATE.
Definition macros.hpp:116
CoDiPack - Code Differentiation Package.
Definition codi.hpp:94
Definition constantExpression.hpp:50
T_StoreData StoreData
See ConstantDataConversion.
Definition constantExpression.hpp:53
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
StoreData ArgumentData
Defined by specializations.
Definition constantExpression.hpp:54
Represents constant values in the expression tree.
Definition constantExpression.hpp:78
T_ConversionOperator< T > ConversionOperator
See ConstantExpression.
Definition constantExpression.hpp:85
static size_t constexpr LinkCount
handle the expression as a leaf node.
Definition constantExpression.hpp:112
void ADLogic
AD logic that governs the expression. Needs to be the same for all inputs of the expression.
Definition constantExpression.hpp:100
ConstantExpression StoreAs
Defines how this expression is stored in an expression tree.
Definition constantExpression.hpp:99
T_Real Real
See ConstantExpression.
Definition constantExpression.hpp:81
inlineReal const & getValue() const
Compute the primal value that is usually evaluated by the statement/expression.
Definition constantExpression.hpp:103