FEDEM Solver  R8.0
Source code of the dynamics solver
FFrVariable.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_H
14 #define FFR_VARIABLE_H
15 
16 #include "FFrLib/FFrEnums.H"
18 #include <string>
19 #include <vector>
20 #include <set>
21 #include <cstdio>
22 
23 class FFrCreatorData;
24 
25 
31 {
32 public:
34  enum VDType {
35  NONE,
36  CHAR,
38  INT,
39  UINT,
40  FLOAT
41  };
42 
43 private:
46  FFaEnumEntry(NONE, "NONE");
47  FFaEnumEntry(CHAR, "CHAR");
48  FFaEnumEntry(UCHAR, "UCHAR");
49  FFaEnumEntry(INT, "INT");
50  FFaEnumEntry(UINT, "UINT");
51  FFaEnumEntry(FLOAT, "FLOAT");
53  };
55 
56 public:
57 #if FFR_DEBUG > 2
59  FFrVariable();
61  ~FFrVariable();
62 #else
65 #endif
66 
68  static FFrStatus create(FILE* varStream, FFrCreatorData& cd, bool dataBlocks);
69 
71  int fillObject(const std::vector<std::string>& tokens);
72 
74  void dump(std::ostream& os = std::cout) const;
75 
77  size_t getTotalDataSize() const { return dataSize*repeats; }
79  size_t getRepeats() const { return repeats; }
80 
82  bool equal(const FFrVariable* that) const;
84  bool less(const FFrVariable* that) const;
85 
87  struct Less
88  {
90  bool operator()(const FFrVariable* a, const FFrVariable* b) const
91  {
92  return a->less(b);
93  }
94  };
95 
96 #if FFR_DEBUG > 2
97 private:
98  static long int count;
99  long int myCount;
100 #endif
101 
102 public:
103  std::string name;
104  std::string unit;
105  VDTypeEnum dataType;
106  std::string dataClass;
107  size_t dataSize;
108  size_t repeats;
109 
111  std::vector<size_t> dataBlockSizes;
113  std::vector<std::string> dataBlockDescription;
114 };
115 
116 
118 using VariableSet = std::set<FFrVariable*,FFrVariable::Less>;
120 using VariableSetIt = VariableSet::const_iterator;
121 
122 #endif
Enum variables with text representations.
#define FFaEnumEntryEnd
Defines the end of an enum mapping definition.
Definition: FFaEnum.H:237
#define FFaEnumMapping(EnumType)
Defines the start of an enum mapping definition.
Definition: FFaEnum.H:221
#define FFaEnumEntry(Value, Text)
Adds one entry to the current enum mapping definition.
Definition: FFaEnum.H:234
Enums that may be used by several FFrLib classes.
FFrStatus
Enum for different states while parsing a result database header.
Definition: FFrEnums.H:18
std::set< FFrVariable *, FFrVariable::Less > VariableSet
Data type alias for a sorted set of variables.
Definition: FFrVariable.H:118
VariableSet::const_iterator VariableSetIt
Iterator over variable container.
Definition: FFrVariable.H:120
Class representing a physical variable in the result file hierarchy.
Definition: FFrVariable.H:31
size_t repeats
Total number of words in the variable.
Definition: FFrVariable.H:108
std::vector< std::string > dataBlockDescription
Component names for multi-dimensional variables.
Definition: FFrVariable.H:113
void dump(std::ostream &os=std::cout) const
Prints the variable defintion to the sepcified output stream.
Definition: FFrVariable.C:166
size_t dataSize
Size (in bits) of each word of the variable.
Definition: FFrVariable.H:107
int fillObject(const std::vector< std::string > &tokens)
Parses the variable definition from a list of strings.
Definition: FFrVariable.C:119
std::string name
Name or desription of the variable.
Definition: FFrVariable.H:103
std::string unit
Unit of the variable (only for FLOAT variables)
Definition: FFrVariable.H:104
VDType
Enum defining available the variable types.
Definition: FFrVariable.H:34
@ UCHAR
Unsigned character.
Definition: FFrVariable.H:37
@ INT
Signed integer.
Definition: FFrVariable.H:38
@ UINT
Unsigned integer.
Definition: FFrVariable.H:39
@ NONE
None - undefined.
Definition: FFrVariable.H:35
@ CHAR
Signed character.
Definition: FFrVariable.H:36
@ FLOAT
Real, either single or double precision (float or double)
Definition: FFrVariable.H:40
size_t getRepeats() const
Returns the total number of words in the variable.
Definition: FFrVariable.H:79
std::vector< size_t > dataBlockSizes
Number of data words in each direction for multi-dimensional variables.
Definition: FFrVariable.H:111
bool less(const FFrVariable *that) const
Return true if *this is less than *that.
VDTypeEnum dataType
Basic data type of the variable.
Definition: FFrVariable.H:105
size_t getTotalDataSize() const
Returns the total number of bits in the variable.
Definition: FFrVariable.H:77
static FFrStatus create(FILE *varStream, FFrCreatorData &cd, bool dataBlocks)
Static method for parsing a variable definition from file.
Definition: FFrVariable.C:43
FFrVariable()
Default constructor initializing the members.
Definition: FFrVariable.H:64
bool equal(const FFrVariable *that) const
Return true if *this equals *that.
std::string dataClass
Class name (structured type) of the variable.
Definition: FFrVariable.H:106
real(sp), dimension(:,:,:), pointer b
Definition: diffractionModule.f90:22
real(sp), dimension(:,:,:), pointer a
Definition: diffractionModule.f90:21
Incapsulation of temporary data used during results file parsing.
Definition: FFrResultContainer.H:36
Functor for comparison of two variable definitions.
Definition: FFrVariable.H:88
bool operator()(const FFrVariable *a, const FFrVariable *b) const
Returns true if *a is considered less than *b.
Definition: FFrVariable.H:90