CoDiPack  3.0.0
A Code Differentiation Package
SciComp TU Kaiserslautern
Loading...
Searching...
No Matches
vectorAccessInterface.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 <cstddef>
38
39#include "../../config.h"
40#include "../../misc/macros.hpp"
41
43namespace codi {
44
93 template<typename T_Real, typename T_Identifier>
95 public:
96
97 using Real = CODI_DD(T_Real, double);
98 using Identifier = CODI_DD(T_Identifier, int);
99
101
102 /*******************************************************************************/
104
105 virtual size_t getVectorSize() const = 0;
106 virtual bool isLhsZero() = 0;
107 virtual VectorAccessInterface* clone() const = 0;
109
110 /*******************************************************************************/
112
113 virtual void setLhsAdjoint(Identifier const& index) = 0;
116 virtual void updateAdjointWithLhs(Identifier const& index,
117 Real const& jacobian) = 0;
119
120 /*******************************************************************************/
122
123 virtual void setLhsTangent(Identifier const& index) = 0;
125 virtual void updateTangentWithLhs(Identifier const& index,
126 Real const& jacobian) = 0;
129
130 /*******************************************************************************/
132
133 virtual void setActiveVariableForIndirectAccess(size_t pos) = 0;
135
136 /*******************************************************************************/
138
139 virtual void resetAdjoint(Identifier const& index, size_t dim) = 0;
140 virtual void resetAdjointVec(Identifier const& index) = 0;
141
142 virtual Real getAdjoint(Identifier const& index, size_t dim) = 0;
143 virtual void getAdjointVec(Identifier const& index, Real* const vec) = 0;
144 virtual Real const* getAdjointVec(Identifier const& index) = 0;
145
146 virtual void updateAdjoint(Identifier const& index, size_t dim,
147 Real const& adjoint) = 0;
148 virtual void updateAdjointVec(Identifier const& index, Real const* const vec) = 0;
149
150 /*******************************************************************************/
152
153 virtual void setPrimal(Identifier const& index, Real const& primal) = 0;
154 virtual Real getPrimal(Identifier const& index) = 0;
155
156 virtual bool hasPrimals() = 0;
157 };
158}
#define CODI_DD(Type, Default)
Abbreviation for CODI_DECLARE_DEFAULT.
Definition macros.hpp:96
CoDiPack - Code Differentiation Package.
Definition codi.hpp:94
Unified access to the adjoint vector and primal vector in a tape evaluation.
Definition vectorAccessInterface.hpp:94
virtual void resetAdjoint(Identifier const &index, size_t dim)=0
Set the adjoint component to zero.
virtual void setPrimal(Identifier const &index, Real const &primal)=0
Set the primal value.
virtual void updateAdjointVec(Identifier const &index, Real const *const vec)=0
Update the adjoint entry.
virtual void getAdjointVec(Identifier const &index, Real *const vec)=0
Get the adjoint entry.
virtual void setLhsAdjoint(Identifier const &index)=0
virtual ~VectorAccessInterface()
Destructor.
Definition vectorAccessInterface.hpp:100
virtual size_t getVectorSize() const =0
Vector size in the current tape evaluation.
virtual Real const * getAdjointVec(Identifier const &index)=0
Get the adjoint entry.
Real Real
Definition vectorAccessInterface.hpp:97
virtual void resetAdjointVec(Identifier const &index)=0
Set the adjoint entry to zero.
virtual Real getPrimal(Identifier const &index)=0
Get the primal value.
Identifier Identifier
Definition vectorAccessInterface.hpp:98
virtual void setLhsTangent(Identifier const &index)=0
virtual VectorAccessInterface * clone() const =0
virtual bool isLhsZero()=0
True if the adjoint set with setLhsAdjoint is zero.
virtual bool hasPrimals()=0
True if the tape/vector interface has primal values.
virtual void updateAdjointWithLhs(Identifier const &index, Real const &jacobian)=0
virtual void updateTangentWithLhs(Identifier const &index, Real const &jacobian)=0
virtual void setActiveVariableForIndirectAccess(size_t pos)=0
virtual void updateAdjoint(Identifier const &index, size_t dim, Real const &adjoint)=0
Update the adjoint component.
virtual Real getAdjoint(Identifier const &index, size_t dim)=0
Get the adjoint component.