CoDiPack  2.3.0
A Code Differentiation Package
SciComp TU Kaiserslautern
Loading...
Searching...
No Matches
mathRepWriter.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://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 "commonReaderWriterBase.hpp"
39
41namespace codi {
55 template<typename T_Type>
56 struct MathRepWriter : public CommonTextTapeWriter<T_Type> {
57 using Type = CODI_DD(T_Type, CODI_DEFAULT_LHS_EXPRESSION);
59
60 using Tape = typename Type::Tape;
61 using Identifier = typename Type::Identifier;
62 using Real = typename Type::Real;
63 using EvalHandle = typename Tape::EvalHandle;
64
66 MathRepWriter(std::string const& name, std::vector<Identifier> const& in, std::vector<Identifier> const& out)
67 : Base(false, name, in, out) {};
68
76 void writeStatement(WriteInfo const& info, Identifier const& curLhsIdentifier, Real const& primalValue,
77 Config::ArgumentSize const& nPassiveValues, size_t const& curRhsIdentifiersPos,
78 Identifier const* const rhsIdentifiers, size_t const& curPassiveValuePos,
79 Real const* const passiveValues, size_t& curConstantPos, Real const* const constantValues,
80 EvalHandle stmtEvalHandle) {
81 CODI_UNUSED(primalValue, curPassiveValuePos, passiveValues, curConstantPos, constantValues, stmtEvalHandle);
82
83 if (nPassiveValues == Config::StatementInputTag) CODI_Unlikely {
84 // Do nothing.
85 } else CODI_Likely {
86 // The mathRep string is modified to include the identifier and value.
87 std::string mathRep =
88 Base::modifyMathRep(info.mathRepresentation, curLhsIdentifier, &rhsIdentifiers[curRhsIdentifiersPos],
90 // Print the statement string.
91 fprintf(this->fileHandleGraph, "%s\n", mathRep.c_str());
92 }
93 }
94 };
95}
#define CODI_Unlikely
Declare unlikely evaluation of an execution path.
Definition config.h:399
#define CODI_Likely
Declare likely evaluation of an execution path.
Definition config.h:397
#define CODI_DD(Type, Default)
Abbreviation for CODI_DECLARE_DEFAULT.
Definition macros.hpp:94
uint8_t ArgumentSize
Type for the number of arguments in statements.
Definition config.h:117
size_t constexpr StatementInputTag
Tag for statements that are inputs. Used in linear index management context.
Definition config.h:123
CoDiPack - Code Differentiation Package.
Definition codi.hpp:91
void CODI_UNUSED(Args const &...)
Disable unused warnings for an arbitrary number of arguments.
Definition macros.hpp:46
This base class is used to modify the math representation of a statement.
Definition commonReaderWriterBase.hpp:231
FILE * fileHandleGraph
The handle for the writer.
Definition commonReaderWriterBase.hpp:241
std::string modifyMathRep(std::string const &mathRep, Identifier const &lhsIdentifier, Identifier const *const rhsIdentifiers, size_t const &nActiveValues)
Replaces all general identifiers in the math representation with the input, output or temporary annot...
Definition commonReaderWriterBase.hpp:344
Generates a file with the math representation for each of the statements.
Definition mathRepWriter.hpp:56
typename Type::Real Real
See TapeWriterInterface.
Definition mathRepWriter.hpp:62
MathRepWriter(std::string const &name, std::vector< Identifier > const &in, std::vector< Identifier > const &out)
Constructor.
Definition mathRepWriter.hpp:66
T_Type Type
See TapeWriterInterface.
Definition mathRepWriter.hpp:57
typename Type::Tape Tape
See TapeWriterInterface.
Definition mathRepWriter.hpp:60
typename Tape::EvalHandle EvalHandle
See TapeWriterInterface.
Definition mathRepWriter.hpp:63
void writeStatement(WriteInfo const &info, Identifier const &curLhsIdentifier, Real const &primalValue, Config::ArgumentSize const &nPassiveValues, size_t const &curRhsIdentifiersPos, Identifier const *const rhsIdentifiers, size_t const &curPassiveValuePos, Real const *const passiveValues, size_t &curConstantPos, Real const *const constantValues, EvalHandle stmtEvalHandle)
Called for each statement. The method writes the current statement to the file. This overload is used...
Definition mathRepWriter.hpp:76
typename Type::Identifier Identifier
See TapeWriterInterface.
Definition mathRepWriter.hpp:61
This class is used during the writing process of a primal value tape. The WriteInfo is returned by co...
Definition tapeReaderWriterInterface.hpp:69
size_t numberOfActiveArguments
Number of active arguments.
Definition tapeReaderWriterInterface.hpp:70
std::string mathRepresentation
Definition tapeReaderWriterInterface.hpp:73