38#include "primalBaseReaderWriter.hpp"
62 template<
typename T_Type>
65 using Tape =
typename Type::Tape;
68 using Real =
typename Type::Real;
78 std::vector<Identifier>
const& out,
bool ifIO,
bool ifColumnNames)
83 if (Tape::TapeTypes::IsStaticIndexHandler) {
95 "| # of LHS Args | LHS Indices | Primal Values | # of Passive Args | # of Active Args | RHS Indices "
96 "| RHS Primal Values | # of Constants | Constants | Statement Key |");
107 Real const*
const passiveValues,
Real const*
const constantValues,
140 for (
size_t passiveCount = 0; passiveCount < nPassiveValues; passiveCount++) {
141 fprintf(
fileHandleTxt,
" %0.12e ", passiveValues[passiveCount]);
149 fprintf(
fileHandleTxt,
" %0.12e ", constantValues[constantCount]);
163 FILE* filePrimalTxt =
nullptr;
166 std::string fileNamePrimals = this->
modifyFileName(
"Primals.txt");
168 this->
openFile(filePrimalTxt, fileNamePrimals,
"w");
171 fprintf(filePrimalTxt,
"%zu\n", nPrimals);
172 for (
size_t indexCounter = 0; indexCounter < nPrimals; indexCounter++) {
173 Real const curPrimal = tape.getPrimal(indexCounter);
174 if (curPrimal != 0) {
175 fprintf(filePrimalTxt,
"%zu ", indexCounter);
176 fprintf(filePrimalTxt,
"%0.12e\n", curPrimal);
180 fclose(filePrimalTxt);
212 template<
typename T_Type>
215 using Tape =
typename Type::Tape;
217 using Real =
typename Type::Real;
222 : CommonBaseTapeReader<T_Type>(),
evalHandles(handles) {}
226 FILE* fileHandleReadTxt =
nullptr;
245 if (Tape::TapeTypes::IsStaticIndexHandler) {
251 fscanf(fileHandleReadTxt,
252 "| # of LHS Args | LHS Indices | Primal Values | # of Passive Args | # of Active Args | RHS Indices "
253 "| RHS Primal Values | # of Constants | Constants | Statement Key |");
255 while (fscanf(fileHandleReadTxt,
"\n%hhu [", &nOutputValues) == 1) {
257 for (
size_t argumentCount = 0; argumentCount < nOutputValues; argumentCount++) {
258 fscanf(fileHandleReadTxt,
" %d ", &lhsIdentifiers[argumentCount]);
260 fscanf(fileHandleReadTxt,
"] [");
263 for (
size_t argumentCount = 0; argumentCount < nOutputValues; argumentCount++) {
264 fscanf(fileHandleReadTxt,
" %lf ", &primalValues[argumentCount]);
268 fscanf(fileHandleReadTxt,
"] %hhu ", &nPassiveValues);
275 fscanf(fileHandleReadTxt,
" %hhu [", &nActiveValues);
278 for (
size_t argumentCount = 0; argumentCount < nActiveValues; argumentCount++) {
279 fscanf(fileHandleReadTxt,
" %d ", &rhsIdentifiers[argumentCount]);
281 fscanf(fileHandleReadTxt,
"] [");
283 for (
size_t argumentCount = 0; argumentCount < nPassiveValues; argumentCount++) {
284 fscanf(fileHandleReadTxt,
" %lf ", &rhsPrimalValues[argumentCount]);
286 fscanf(fileHandleReadTxt,
"] %hhu [", &nConstants);
288 for (
size_t argumentCount = 0; argumentCount < nConstants; argumentCount++) {
289 fscanf(fileHandleReadTxt,
" %lf ", &constants[argumentCount]);
291 fscanf(fileHandleReadTxt,
"]");
294 fscanf(fileHandleReadTxt,
" [ %zu ]", &evalHandleKey);
295 this->
tape.createStatementManual(nOutputValues, lhsIdentifiers.data(), primalValues.data(), nActiveValues,
296 rhsIdentifiers.data(), nPassiveValues, rhsPrimalValues.data(), nConstants,
300 fclose(fileHandleReadTxt);
305 FILE* filePrimalTxt =
nullptr;
314 fscanf(filePrimalTxt,
"%zu\n", &nPrimals);
319 while (fscanf(filePrimalTxt,
"%d ", &curIdentifier) == 1) {
320 fscanf(filePrimalTxt,
"%lf\n", &curPrimal);
321 this->
tape.setPrimal(curIdentifier, curPrimal);
#define CODI_Unlikely
Declare unlikely evaluation of an execution path.
Definition config.h:408
#define CODI_Likely
Declare likely evaluation of an execution path.
Definition config.h:406
#define CODI_DD(Type, Default)
Abbreviation for CODI_DECLARE_DEFAULT.
Definition macros.hpp:96
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:94
@ PrimalSize
[A: RW] Number of primal vector entries in primal value tapes.
Definition tapeParameters.hpp:63
size_t EvalHandleKey
Key for the evalHandle lookup.
Definition tapeReaderWriterInterface.hpp:44
void restoreIoText()
Constructor.
Definition commonReaderWriterBase.hpp:161
Tape tape
The newly resorted tape.
Definition commonReaderWriterBase.hpp:153
Identifier largestIndex
The largest index on the stored tape.
Definition commonReaderWriterBase.hpp:155
void printIoText(Tape &tape)
Generate the IO file in a text format.
Definition commonReaderWriterBase.hpp:100
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
void generateHandleCreatorFile()
This method is used to generate an .hpp file which creates the necessary EvalHandles in the reading p...
Definition primalBaseReaderWriter.hpp:78
PrimalBaseTapeWriter(std::string const &name, std::vector< Identifier > const &in, std::vector< Identifier > const &out)
Constructor.
Definition primalBaseReaderWriter.hpp:68
size_t getEvalHandleIndex(EvalHandle const evalHandle, std::string const &evalStatement)
Get the index for an evalHandle.
Definition primalBaseReaderWriter.hpp:118
typename Type::Identifier Identifier
See TapeReaderInterface.
Definition primalTextReaderWriter.hpp:216
PrimalTextTapeReader(std::vector< typename Tape::EvalHandle > const &handles)
Constructor.
Definition primalTextReaderWriter.hpp:221
typename Type::Real Real
See TapeReaderInterface.
Definition primalTextReaderWriter.hpp:217
void restorePrimals()
Read and record the primal values from the sparse primal vector stored in "filename"Primals....
Definition primalTextReaderWriter.hpp:304
void readFile(std::string const &name)
This method uses the the fileName to reproduce a valid tape.
Definition primalTextReaderWriter.hpp:225
std::vector< typename Tape::EvalHandle > evalHandles
Contains the unique evalHandles.
Definition primalTextReaderWriter.hpp:219
typename Type::Tape Tape
See TapeReaderInterface.
Definition primalTextReaderWriter.hpp:215
T_Type Type
See TapeWriterInterface.
Definition primalTextReaderWriter.hpp:214
bool printColumnNames
Flag to enable column names.
Definition primalTextReaderWriter.hpp:74
PrimalTextTapeWriter(std::string const &name, std::vector< Identifier > const &in, std::vector< Identifier > const &out, bool ifIO, bool ifColumnNames)
Constructor.
Definition primalTextReaderWriter.hpp:77
typename Type::Tape Tape
See TapeWriterInterface.
Definition primalTextReaderWriter.hpp:65
bool printIO
Flag to enable the writing of the IO file.
Definition primalTextReaderWriter.hpp:73
FILE * fileHandleTxt
File handle.
Definition primalTextReaderWriter.hpp:71
T_Type Type
See TapeWriterInterface.
Definition primalTextReaderWriter.hpp:64
void finish()
After all the statements have been written, the finish method finalizes the writing process.
Definition primalTextReaderWriter.hpp:184
void writeStatement(WriteInfo const &info, Identifier const *lhsIdentifiers, Real const *primalValues, Config::ArgumentSize const &nPassiveValues, Identifier const *const rhsIdentifiers, Real const *const passiveValues, Real const *const constantValues, EvalHandle stmtEvalHandle)
Called for each statement. The method writes the current statement to the file. This overload is used...
Definition primalTextReaderWriter.hpp:105
typename Tape::EvalHandle EvalHandle
See TapeWriterInterface.
Definition primalTextReaderWriter.hpp:69
typename Type::Identifier Identifier
See TapeWriterInterface.
Definition primalTextReaderWriter.hpp:67
void printPrimals(Tape &tape)
Print the primal vector in sparse vector representation.
Definition primalTextReaderWriter.hpp:162
void start(Tape &tape)
Destructor.
Definition primalTextReaderWriter.hpp:82
typename Type::Real Real
See TapeWriterInterface.
Definition primalTextReaderWriter.hpp:68
This class is used during the writing process of a primal value tape. The WriteInfo is returned by St...
Definition tapeReaderWriterInterface.hpp:69
size_t numberOfActiveArguments
Number of active arguments.
Definition tapeReaderWriterInterface.hpp:71
std::string stmtExpression
Used to generate a .hpp file for reading back a primal value tape.
Definition tapeReaderWriterInterface.hpp:73
size_t numberOfOutputArguments
Number of output arguments.
Definition tapeReaderWriterInterface.hpp:70
size_t numberOfConstantArguments
Number of constant arguments.
Definition tapeReaderWriterInterface.hpp:72