CoDiPack  2.2.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-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 <cstddef>
38
39#include "../../config.h"
40#include "../../misc/macros.hpp"
41
43namespace codi {
44
90 template<typename T_Real, typename T_Identifier>
92 public:
93
94 using Real = CODI_DD(T_Real, double);
95 using Identifier = CODI_DD(T_Identifier, int);
96
98
99 /*******************************************************************************/
101
102 virtual size_t getVectorSize() const = 0;
103 virtual bool isLhsZero() = 0;
104 virtual VectorAccessInterface* clone() const = 0;
106
107 /*******************************************************************************/
109
110 virtual void setLhsAdjoint(Identifier const& index) = 0;
113 virtual void updateAdjointWithLhs(Identifier const& index,
114 Real const& jacobian) = 0;
116
117 /*******************************************************************************/
119
120 virtual void setLhsTangent(Identifier const& index) = 0;
122 virtual void updateTangentWithLhs(Identifier const& index,
123 Real const& jacobian) = 0;
126
127 /*******************************************************************************/
129
130 virtual void resetAdjoint(Identifier const& index, size_t dim) = 0;
131 virtual void resetAdjointVec(Identifier const& index) = 0;
132
133 virtual Real getAdjoint(Identifier const& index, size_t dim) = 0;
134 virtual void getAdjointVec(Identifier const& index, Real* const vec) = 0;
135 virtual Real const* getAdjointVec(Identifier const& index) = 0;
136
137 virtual void updateAdjoint(Identifier const& index, size_t dim,
138 Real const& adjoint) = 0;
139 virtual void updateAdjointVec(Identifier const& index, Real const* const vec) = 0;
140
141 /*******************************************************************************/
143
144 virtual void setPrimal(Identifier const& index, Real const& primal) = 0;
145 virtual Real getPrimal(Identifier const& index) = 0;
146
147 virtual bool hasPrimals() = 0;
148 };
149}
#define CODI_DD(Type, Default)
Abbreviation for CODI_DECLARE_DEFAULT.
Definition: macros.hpp:94
CoDiPack - Code Differentiation Package.
Definition: codi.hpp:90
Unified access to the adjoint vector and primal vector in a tape evaluation.
Definition: vectorAccessInterface.hpp:91
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:97
virtual size_t getVectorSize() const =0
Vector size in the current tape evaluation.
CODI_DD(T_Real, double) Real
See VectorAccessInterface.
Definition: vectorAccessInterface.hpp:94
virtual Real const * getAdjointVec(Identifier const &index)=0
Get the adjoint entry.
CODI_DD(T_Identifier, int) Identifier
See VectorAccessInterface.
Definition: vectorAccessInterface.hpp:95
virtual void resetAdjointVec(Identifier const &index)=0
Set the adjoint entry to zero.
virtual Real getPrimal(Identifier const &index)=0
Get the primal value.
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 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.