FEDEM Solver  R8.0
Source code of the dynamics solver
FFrVariableReference.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 
13 #ifndef FFR_VARIABLE_REFERENCE_H
14 #define FFR_VARIABLE_REFERENCE_H
15 
16 #include "FFrLib/FFrEntryBase.H"
17 
18 class FFaOperationBase;
19 class FFrVariable;
20 
21 
30 {
31 public:
32 #if FFR_DEBUG > 2
34  explicit FFrVariableReference(FFrVariable* var);
36  explicit FFrVariableReference(const FFrVariableReference& varRef);
38  virtual ~FFrVariableReference();
39 #else
41  explicit FFrVariableReference(FFrVariable* var) : myVariable(var) {}
42 #endif
43 
45  virtual const std::string& getDescription() const;
47  virtual const std::string& getType() const;
49  size_t getWordLength() const;
51  size_t getNumWords() const;
52 
54  virtual bool isVariableFloat() const;
56  virtual bool isVarRef() const { return true; }
58  virtual bool isEmpty() const { return containers.empty(); }
59 
63 
65  unsigned int getTimeStamp() const;
66 
68  double getDistanceFromResultPoint(const bool usePositionedKey = false) const;
70  bool hasDataForCurrentKey(const bool usePositionedKey = false) const;
71 
73  void getValidKeys(std::set<double>& validValues) const;
74 
76  virtual void printPosition(std::ostream& os) const;
77 
79  using FFrResultContainerRef = std::pair<FFrResultContainer*,size_t>;
81  std::vector<FFrResultContainerRef> containers;
82 
83  virtual void removeContainers(const std::set<FFrResultContainer*>& cont);
84 
85  virtual int traverse(FFrResultContainer* resultContainer,
86  FFrEntryBase* owner,
87  FFrEntryBase*& objToBeModified,
88  int binPos);
89 
90  virtual bool merge(FFrEntryBase* obj);
91  virtual bool equal(const FFrEntryBase* obj) const;
92  virtual bool comp(const FFrEntryBase* obj) const { return this->equal(obj); }
93  virtual bool less(const FFrEntryBase* obj) const;
94 
95 protected:
96  virtual int readPosData(const double* vals, int nvals, int arrayPos) const;
97  virtual int readPosData(const float* vals, int nvals, int arrayPos) const;
98  virtual int readPosData(const int* vals, int nvals, int arrayPos) const;
99 
100 public:
102  template<class T> bool readVariable(T& value);
103 
104 private:
107  int getNearestContainer() const;
108 
110  union {
113  };
114 
115 #ifdef FFR_NEWALLOC
117 public:
118  // overloading the new & delete operators
119  static void* operator new(size_t size);
120  static void operator delete(void* deadObject, size_t size);
121 
122  static void releaseMemBlocks();
123 
124 private:
125  static size_t newed;
126  static FFrVariableReference* headOfFreeList;
127  static std::vector<FFrVariableReference*> memBlocks;
129 #endif
130 
131 #if FFR_DEBUG > 2
132  static long int count;
133 #endif
134 };
135 
136 #endif
Base class for result file entries.
Base class for all operations.
Definition: FFaOperation.H:38
Base class for result file entries.
Definition: FFrEntryBase.H:42
Class holding the data of a Fedem results file.
Definition: FFrResultContainer.H:71
Class representing a variable reference in a result file hierarchy.
Definition: FFrVariableReference.H:30
int getNearestContainer() const
Returns the index of the nearest container for the current setting.
Definition: FFrVariableReference.C:127
virtual void removeContainers(const std::set< FFrResultContainer * > &cont)
Removes data associated with given containers for this entry.
Definition: FFrVariableReference.C:116
FFrVariable * myVariable
Points to the actual variable with data.
Definition: FFrVariableReference.H:111
unsigned int getTimeStamp() const
Returns the (most recent) time stamp of this variable.
Definition: FFrVariableReference.C:224
bool hasDataForCurrentKey(const bool usePositionedKey=false) const
Checks if this entry has any data at current extractor position.
Definition: FFrVariableReference.C:275
virtual bool isEmpty() const
Returns true if this variable has no result data.
Definition: FFrVariableReference.H:58
FFrVariableReference * next
Used in memory management.
Definition: FFrVariableReference.H:112
virtual bool less(const FFrEntryBase *obj) const
Returns true if *this is ordered before *obj.
Definition: FFrVariableReference.C:109
virtual bool isVariableFloat() const
Returns true if this variable contain float data.
Definition: FFrVariableReference.C:218
double getDistanceFromResultPoint(const bool usePositionedKey=false) const
Returns the smallest distance to current extraxtor position.
Definition: FFrVariableReference.C:249
virtual bool equal(const FFrEntryBase *obj) const
Returns true if *this and *obj are considered equal.
Definition: FFrVariableReference.C:102
size_t getNumWords() const
Returns the total number of words in the variable.
Definition: FFrVariableReference.C:67
virtual int traverse(FFrResultContainer *resultContainer, FFrEntryBase *owner, FFrEntryBase *&objToBeModified, int binPos)
Traverses to build owner hierarchy and calculate binary sizes.
Definition: FFrVariableReference.C:73
virtual int readPosData(const double *vals, int nvals, int arrayPos) const
Reads double data from the hierarhcy under this entry.
Definition: FFrVariableReference.C:161
virtual void printPosition(std::ostream &os) const
Prints out the positioning data of this variable.
Definition: FFrVariableReference.C:293
void getValidKeys(std::set< double > &validValues) const
Extracts a list of time steps for which this entry has data.
Definition: FFrVariableReference.C:282
virtual const std::string & getType() const
Returns the variable type, e.g., SCALAR, VEC3, etc.
Definition: FFrVariableReference.C:55
FFaOperationBase * getReadOperation()
Creates an operation reading the data of the variable from file.
Definition: FFrReadOpImpl.C:71
virtual const std::string & getDescription() const
Returns the variable name.
Definition: FFrVariableReference.C:49
virtual bool merge(FFrEntryBase *obj)
Merges another entry into *this.
Definition: FFrVariableReference.C:90
virtual bool comp(const FFrEntryBase *obj) const
Returns true if *this equals another specified entry.
Definition: FFrVariableReference.H:92
std::pair< FFrResultContainer *, size_t > FFrResultContainerRef
Convenience type alias.
Definition: FFrVariableReference.H:79
size_t getWordLength() const
Returns the word length (in bits) of the variable.
Definition: FFrVariableReference.C:61
virtual bool isVarRef() const
Returns true since this entry is a Variable Reference.
Definition: FFrVariableReference.H:56
bool readVariable(T &value)
Reads a variable from the results container for current time step.
Definition: FFrVariableReference.C:379
FFrVariableReference(FFrVariable *var)
The constructor initializes myVariable.
Definition: FFrVariableReference.H:41
std::vector< FFrResultContainerRef > containers
List of result file containers in which this variable exists.
Definition: FFrVariableReference.H:81
Class representing a physical variable in the result file hierarchy.
Definition: FFrVariable.H:31