38#include "primalBaseReaderWriter.hpp"
62 template<
typename T_Type>
65 using Tape =
typename Type::Tape;
68 using Real =
typename Type::Real;
75 std::vector<Identifier>
const& out)
80 if (Tape::TapeTypes::IsStaticIndexHandler) {
97 Identifier const*
const rhsIdentifiers,
size_t const& curPassiveValuePos,
98 Real const*
const passiveValues,
size_t& curConstantPos,
Real const*
const constantValues,
110 fwrite(&passiveValues[curPassiveValuePos],
sizeof(
Real), nPassiveValues,
fileHandleBin);
122 FILE* filePrimalBin =
nullptr;
125 std::string fileNamePrimals = this->
modifyFileName(
"Primals.dat");
127 this->
openFile(filePrimalBin, fileNamePrimals,
"wb");
130 fwrite(&nPrimals,
sizeof(
size_t), 1, filePrimalBin);
131 for (
size_t indexCounter = 0; indexCounter < nPrimals; indexCounter++) {
132 Real const curPrimal = tape.getPrimal(indexCounter);
133 if (curPrimal != 0) {
134 fwrite(&indexCounter,
sizeof(
Identifier), 1, filePrimalBin);
135 fwrite(&curPrimal,
sizeof(
Real), 1, filePrimalBin);
139 fclose(filePrimalBin);
173 template<
typename T_Type>
176 using Tape =
typename Type::Tape;
178 using Real =
typename Type::Real;
187 FILE* fileHandleReadBin =
nullptr;
205 if (Tape::TapeTypes::IsStaticIndexHandler) {
211 while (fread(&lhsIdentifier,
sizeof(
Identifier), 1, fileHandleReadBin) == 1) {
212 fread(&primalValue,
sizeof(
Real), 1, fileHandleReadBin);
221 fread(rhsIdentifiers.data(),
sizeof(
Identifier), nActiveValues, fileHandleReadBin);
222 fread(rhsPrimalValues.data(),
sizeof(
Real), nPassiveValues, fileHandleReadBin);
224 fread(constants.data(),
sizeof(
Real), nConstants, fileHandleReadBin);
227 fread(&evalHandleKey,
sizeof(
EvalHandleKey), 1, fileHandleReadBin);
228 this->
tape.createStatementManual(lhsIdentifier, primalValue, nActiveValues, rhsIdentifiers.data(),
229 nPassiveValues, rhsPrimalValues.data(), nConstants, constants.data(),
233 fclose(fileHandleReadBin);
238 FILE* filePrimalBin =
nullptr;
247 fread(&nPrimals,
sizeof(
size_t), 1, filePrimalBin);
251 while (fread(&curIdentifier,
sizeof(
Identifier), 1, filePrimalBin) == 1) {
252 fread(&curPrimal,
sizeof(
Real), 1, filePrimalBin);
253 this->
tape.setPrimal(curIdentifier, curPrimal);
#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
size_t constexpr StatementLowLevelFunctionTag
Statement tag for low level functions.
Definition config.h:126
size_t constexpr MaxArgumentSize
Maximum number of arguments in a statement.
Definition config.h:120
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
@ PrimalSize
[A: RW] Number of primal vector entries in primal value tapes.
size_t EvalHandleKey
Key for the evalHandle lookup.
Definition tapeReaderWriterInterface.hpp:44
Used to restore the IO from the "filename"IO.dat or "filename"IO.txt files. Also provides the get met...
Definition commonReaderWriterBase.hpp:143
Tape tape
The newly resorted tape.
Definition commonReaderWriterBase.hpp:153
Identifier largestIndex
The largest index on the stored tape.
Definition commonReaderWriterBase.hpp:155
void restoreIoBinary()
Restore the IO for the binary readers.
Definition commonReaderWriterBase.hpp:180
void printIoBinary(Tape &tape)
Generate the IO file in a binary format.
Definition commonReaderWriterBase.hpp:117
std::string fileName
The base file name provided by the user.
Definition commonReaderWriterBase.hpp:51
std::string modifyFileName(std::string const &suffix)
Remove the file extension and replace it with a new suffix.
Definition commonReaderWriterBase.hpp:59
void openFile(FILE *&fileHandle, std::string const &name, std::string const &mode)
Definition commonReaderWriterBase.hpp:67
This base class is used to implement the automatic generation of the .hpp file that restores the eval...
Definition primalBaseReaderWriter.hpp:55
void generateHandleCreatorFile()
This method is used to generate an .hpp file which creates the necessary EvalHandles in the reading p...
Definition primalBaseReaderWriter.hpp:78
size_t getEvalHandleIndex(EvalHandle const evalHandle, std::string const &evalStatement)
Get the index for an evalHandle.
Definition primalBaseReaderWriter.hpp:118
Reads and restores a binary file for a Primal tape.
Definition primalBinaryReaderWriter.hpp:174
typename Type::Real Real
See TapeReaderInterface.
Definition primalBinaryReaderWriter.hpp:178
typename Type::Identifier Identifier
See TapeReaderInterface.
Definition primalBinaryReaderWriter.hpp:177
T_Type Type
See TapeReaderInterface.
Definition primalBinaryReaderWriter.hpp:175
typename Type::Tape Tape
See TapeReaderInterface.
Definition primalBinaryReaderWriter.hpp:176
void restorePrimals()
Read and record the primal values from the sparse primal vector stored in "filename"Primals....
Definition primalBinaryReaderWriter.hpp:237
std::vector< typename Tape::EvalHandle > evalHandles
Definition primalBinaryReaderWriter.hpp:180
void readFile(std::string const &name)
This method uses the the fileName to reproduce a valid tape.
Definition primalBinaryReaderWriter.hpp:186
PrimalBinaryTapeReader(std::vector< typename Tape::EvalHandle > const &handles)
Constructor.
Definition primalBinaryReaderWriter.hpp:182
Writes a primal value tape in a binary format.
Definition primalBinaryReaderWriter.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 primalBinaryReaderWriter.hpp:95
PrimalBinaryTapeWriter(std::string const &name, std::vector< Identifier > const &in, std::vector< Identifier > const &out)
Constructor.
Definition primalBinaryReaderWriter.hpp:74
typename Type::Tape Tape
See TapeWriterInterface.
Definition primalBinaryReaderWriter.hpp:65
void printPrimals(Tape &tape)
Print the primal vector in sparse vector representation.
Definition primalBinaryReaderWriter.hpp:121
typename Type::Identifier Identifier
See TapeWriterInterface.
Definition primalBinaryReaderWriter.hpp:67
FILE * fileHandleBin
File handle.
Definition primalBinaryReaderWriter.hpp:71
T_Type Type
See TapeWriterInterface.
Definition primalBinaryReaderWriter.hpp:64
typename Type::Real Real
See TapeWriterInterface.
Definition primalBinaryReaderWriter.hpp:68
void start(Tape &tape)
Destructor.
Definition primalBinaryReaderWriter.hpp:79
void finish()
After all the statements have been written, the finish method finalizes the writing process.
Definition primalBinaryReaderWriter.hpp:143
typename Tape::EvalHandle EvalHandle
See TapeWriterInterface.
Definition primalBinaryReaderWriter.hpp:69
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 stmtExpression
Used to generate a .hpp file for reading back a primal value tape.
Definition tapeReaderWriterInterface.hpp:72
size_t numberOfConstantArguments
Number of constant arguments.
Definition tapeReaderWriterInterface.hpp:71