FEDEM Solver  R8.0
Source code of the dynamics solver
FFrExtractor.H
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: 2023 SAP SE
2 //
3 // SPDX-License-Identifier: Apache-2.0
4 //
5 // This file is part of FEDEM - https://openfedem.org
7 
14 #ifndef FFR_EXTRACTOR_H
15 #define FFR_EXTRACTOR_H
16 
17 #include "FFrLib/FFrVariable.H"
18 #include "FFrLib/FFrItemGroup.H"
19 #include <string>
20 #include <vector>
21 #include <set>
22 #include <map>
23 
24 class FFrEntryBase;
25 class FFrObjectGroup;
27 class FFrResultContainer;
29 
30 
44 {
45 public:
48  FFrExtractor(const char* xname = NULL);
50  virtual ~FFrExtractor();
51 
53  static void releaseMemoryBlocks(bool readOps = false);
54 
56  const std::string& getName() const { return myName; }
57 
59  bool addFiles(const std::set<std::string>& fileNames,
60  bool showProgress = false, bool doMemPoll = false);
62  virtual bool addFiles(const std::vector<std::string>& fileNames,
63  bool showProgress = false, bool mustExist = false,
64  bool doMemPoll = false);
66  bool addFile(const std::string& fileName, bool mustExist = false,
67  bool doMemPoll = false);
68 
70  void closeFiles();
71 
73  std::set<std::string> getAllResultContainerFiles() const;
74 
76  FFrResultContainer* getResultContainer(const std::string& fileName) const;
77 
79  virtual bool removeFiles(const std::set<std::string>& fileNames);
80 
82  virtual void doResultFilesUpdate(bool doMemPoll = true);
83 
88 
90  bool empty() const { return myTopLevelOGs.empty(); }
91 
93  FFrEntryBase* getTopLevelVar(const std::string& key) const;
95  FFrObjectGroup* getObjectGroup(int id) const;
97  FFrSuperObjectGroup* getSuperGroup(const std::string& key) const;
98 
100  void printContainerInfo() const;
102  void printHierarchy() const;
103 
107  void search(std::vector<FFrEntryBase*>& entries,
108  const FFaResultDescription& descr);
113  FFrEntryBase* findVar(const std::string& oType, int baseId,
114  const std::string& vName);
115 
116 
117  // RDB Positioning:
118 
120  bool resetRDBPositioning();
121 
127  bool positionRDB(double wantedTime, double& foundTime,
128  bool getNextHigher = false);
129 
132  bool incrementRDB();
133 
134 
135  // RDB Time info access:
136 
138  void getValidKeys(std::set<double>& resKeys,
139  const std::set<std::string>& files) const;
140 
142  void enableTimeStepPreRead(const std::set<std::string>& files);
144  void disableTimeStepPreRead();
146  void clearPreReadTimeStep();
147 
149  double getLastTimeStep() const;
151  double getFirstTimeStep() const;
153  double getLastWrittenTime() const;
154 
156  double getCurrentRDBPhysTime() const { return myCurrentPhysTime; }
157 
159  int getSingleTimeStepData(const FFrEntryBase* entryRef,
160  const double* values, int nval);
162  int getSingleTimeStepData(const FFrEntryBase* entryRef,
163  const int* values, int nval);
164 
166  std::set<std::string>* getDictionary() { return &myDict; }
167 
168 protected:
170  virtual int doResultFileUpdate(FFrResultContainer* container, bool memPoll);
172  bool updateExtractorHeader(FFrResultContainer* container, bool memPoll);
173 
174 private:
175  std::string myName;
177 
179  std::set<std::string> myDict;
180 
182  using ContainerMap = std::map<std::string,FFrResultContainer*>;
183 
187 
188 protected:
190  std::map<std::string,FFrSuperObjectGroup*> myTopLevelSOGs;
192  std::map<int,FFrObjectGroup*> myTopLevelOGs;
194  std::map<std::string,FFrEntryBase*> myTopLevelVars;
195 };
196 
197 #endif
std::set< FFrItemGroup *, FFrItemGroup::Less > ItemGroupSet
Definition: FFrItemGroup.H:83
std::set< FFrVariable *, FFrVariable::Less > VariableSet
Definition: FFrVariable.H:79
Class representing a result variable description.
Definition: FFaResultDescription.H:31
Definition: FFrEntryBase.H:28
Front-end for the result extraction module.
Definition: FFrExtractor.H:44
void enableTimeStepPreRead(const std::set< std::string > &files)
Enables file-based pre-read of time steps.
Definition: FFrExtractor.C:929
bool incrementRDB()
Increments the RDB to the closest time step defined.
Definition: FFrExtractor.C:824
FFrEntryBase * getTopLevelVar(const std::string &key) const
Returns a specified top level variable or item group.
Definition: FFrExtractor.C:488
std::map< std::string, FFrEntryBase * > myTopLevelVars
Top level variable mapping.
Definition: FFrExtractor.H:194
ItemGroupSet myItemGroups
All item groups in this extractor.
Definition: FFrExtractor.H:186
void printHierarchy() const
Prints out the RDB hierarchy of this extractor to std::cout.
Definition: FFrExtractor.C:578
void getValidKeys(std::set< double > &resKeys, const std::set< std::string > &files) const
Get a set of keys for which valid data exist in the provided files.
Definition: FFrExtractor.C:857
double getCurrentRDBPhysTime() const
Returns RDB position information.
Definition: FFrExtractor.H:156
FFrSuperObjectGroup * getSuperGroup(const std::string &key) const
Returns a specified super object group.
Definition: FFrExtractor.C:502
double myCurrentPhysTime
Physical time of last time step read.
Definition: FFrExtractor.H:176
bool addFiles(const std::set< std::string > &fileNames, bool showProgress=false, bool doMemPoll=false)
Adds a set of files to the RDB.
Definition: FFrExtractor.C:92
void printContainerInfo() const
Prints out some information for the result containers to std::cout.
Definition: FFrExtractor.C:560
bool updateExtractorHeader(FFrResultContainer *container, bool memPoll)
Updates the top-level containers with items from container.
Definition: FFrExtractor.C:205
FFrEntryBase * search(const FFaResultDescription &descr)
Finds the first entry that matches a search criterion.
Definition: FFrExtractor.C:354
FFrEntryBase * findVar(const std::string &oType, int baseId, const std::string &vName)
Finds a variable reference of an object group.
Definition: FFrExtractor.C:509
VariableSet myVariables
All variables in this extractor.
Definition: FFrExtractor.H:185
double getLastWrittenTime() const
Returns the physical time of the last changed time step in RDB.
Definition: FFrExtractor.C:908
std::set< std::string > myDict
Text dictionary used to minimize multiple string storage.
Definition: FFrExtractor.H:179
bool empty() const
Returns whether the extractor contains any results or not.
Definition: FFrExtractor.H:90
void disableTimeStepPreRead()
Disables file-based pre-read of time steps.
Definition: FFrExtractor.C:938
FFrExtractor(const char *xname=NULL)
Default constructor.
Definition: FFrExtractor.C:32
ItemGroupSet * getItemGroups()
Returns a pointer to the item group container of this extractor.
Definition: FFrExtractor.H:87
virtual ~FFrExtractor()
The destructor frees the dynamically allocated members.
Definition: FFrExtractor.C:49
double getLastTimeStep() const
Returns the physical time of the last time step in RDB.
Definition: FFrExtractor.C:871
ContainerMap myContainers
All result containers in this extractor.
Definition: FFrExtractor.H:184
FFrObjectGroup * getObjectGroup(int id) const
Returns a specified object group.
Definition: FFrExtractor.C:495
const std::string & getName() const
Returns the name of this extractor.
Definition: FFrExtractor.H:56
double getFirstTimeStep() const
Returns the physical time of the first time step in RDB.
Definition: FFrExtractor.C:887
void closeFiles()
Closes all result container files.
Definition: FFrExtractor.C:145
std::map< int, FFrObjectGroup * > myTopLevelOGs
Top level object group mapping.
Definition: FFrExtractor.H:192
virtual void doResultFilesUpdate(bool doMemPoll=true)
Checks if there is new data on disk.
Definition: FFrExtractor.C:533
VariableSet * getVariables()
Returns a pointer to the variables container of this extractor.
Definition: FFrExtractor.H:85
std::string myName
Name of this extractor.
Definition: FFrExtractor.H:175
std::map< std::string, FFrResultContainer * > ContainerMap
File name to result container mapping.
Definition: FFrExtractor.H:182
int getSingleTimeStepData(const FFrEntryBase *entryRef, const double *values, int nval)
Special single time step interface.
Definition: FFrExtractor.C:764
std::set< std::string > * getDictionary()
Returns the text dictionary of this extractor.
Definition: FFrExtractor.H:166
bool addFile(const std::string &fileName, bool mustExist=false, bool doMemPoll=false)
Adds a single file to the RDB.
Definition: FFrExtractor.C:169
std::set< std::string > getAllResultContainerFiles() const
Returns all result container files currently in this extractor.
Definition: FFrExtractor.C:152
bool resetRDBPositioning()
Resets the RDB to point to the first of all time steps recorded.
Definition: FFrExtractor.C:791
std::map< std::string, FFrSuperObjectGroup * > myTopLevelSOGs
Top level super object group mapping.
Definition: FFrExtractor.H:190
virtual bool removeFiles(const std::set< std::string > &fileNames)
Removes the specified files from the RDB.
Definition: FFrExtractor.C:301
void clearPreReadTimeStep()
Clears the pre-read time step cache.
Definition: FFrExtractor.C:945
FFrResultContainer * getResultContainer(const std::string &fileName) const
Returns the result container associated with fileName.
Definition: FFrExtractor.C:162
static void releaseMemoryBlocks(bool readOps=false)
Releases the dynamically allocated memory blocks in global scope.
Definition: FFrExtractor.C:77
bool positionRDB(double wantedTime, double &foundTime, bool getNextHigher=false)
Positions the result containers in the RDB.
Definition: FFrExtractor.C:696
virtual int doResultFileUpdate(FFrResultContainer *container, bool memPoll)
Checks if there is new data on disk for the given container.
Definition: FFrExtractor.C:540
Definition: FFrObjectGroup.H:19
Class holding the data of a Fedem results file.
Definition: FFrResultContainer.H:71
Definition: FFrSuperObjectGroup.H:15