Fesapi  2.0.0.0
This project provides C++ classes which allow an easy access in import and export to the Energistics standards.
CompositionalSpecification.h
1 /*-----------------------------------------------------------------------
2 Licensed to the Apache Software Foundation (ASF) under one
3 or more contributor license agreements. See the NOTICE file
4 distributed with this work for additional information
5 regarding copyright ownership. The ASF licenses this file
6 to you under the Apache License, Version 2.0 (the
7 "License"; you may not use this file except in compliance
8 with the License. You may obtain a copy of the License at
9 
10  http://www.apache.org/licenses/LICENSE-2.0
11 
12 Unless required by applicable law or agreed to in writing,
13 software distributed under the License is distributed on an
14 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 KIND, either express or implied. See the License for the
16 specific language governing permissions and limitations
17 under the License.
18 -----------------------------------------------------------------------*/
19 #pragma once
20 
21 #include "PvtSpecification.h"
22 
23 #include <limits>
24 
32 #define GETTER_AND_SETTER_FLUID_COMPONENT_PROPERTY_OPTIONAL_ATTRIBUTE(vectorName, attributeName, attributeDatatype)\
33  DLL_IMPORT_OR_EXPORT void set##vectorName##attributeName(unsigned int index, const attributeDatatype& value);\
34  DLL_IMPORT_OR_EXPORT bool has##vectorName##attributeName(unsigned int index) const {\
35  return static_cast<gsoap_eml2_2::prodml21__AbstractCompositionalModel*>(gsoapProxy)->ComponentPropertySet != nullptr &&\
36  static_cast<gsoap_eml2_2::prodml21__AbstractCompositionalModel*>(gsoapProxy)->ComponentPropertySet->vectorName.size() > index &&\
37  static_cast<gsoap_eml2_2::prodml21__AbstractCompositionalModel*>(gsoapProxy)->ComponentPropertySet->vectorName[index]->attributeName != nullptr;\
38  }\
39  DLL_IMPORT_OR_EXPORT attributeDatatype get##vectorName##attributeName(unsigned int index) const {\
40  if (!has##vectorName##attributeName(index)) { throw std::out_of_range("The index is out of range"); }\
41  return *static_cast<gsoap_eml2_2::prodml21__AbstractCompositionalModel*>(gsoapProxy)->ComponentPropertySet->vectorName[index]->attributeName;\
42  }
43 
51 #define GETTER_AND_SETTER_FLUID_COMPONENT_PROPERTY_MEASURE_ATTRIBUTE(vectorName, attributeName, uomDatatype)\
52  DLL_IMPORT_OR_EXPORT void set##vectorName##attributeName(unsigned int index, double value, uomDatatype uom);\
53  DLL_IMPORT_OR_EXPORT double has##vectorName##attributeName(unsigned int index) const {\
54  return static_cast<gsoap_eml2_2::prodml21__AbstractCompositionalModel*>(gsoapProxy)->ComponentPropertySet != nullptr &&\
55  static_cast<gsoap_eml2_2::prodml21__AbstractCompositionalModel*>(gsoapProxy)->ComponentPropertySet->vectorName.size() > index &&\
56  static_cast<gsoap_eml2_2::prodml21__AbstractCompositionalModel*>(gsoapProxy)->ComponentPropertySet->vectorName[index]->attributeName != nullptr;\
57  }\
58  DLL_IMPORT_OR_EXPORT double get##vectorName##attributeName##Value(unsigned int index) const {\
59  if (!has##vectorName##attributeName(index)) { throw std::out_of_range("The index is out of range"); }\
60  return static_cast<gsoap_eml2_2::prodml21__AbstractCompositionalModel*>(gsoapProxy)->ComponentPropertySet->vectorName[index]->attributeName->__item;\
61  }\
62  DLL_IMPORT_OR_EXPORT uomDatatype get##vectorName##attributeName##Uom(unsigned int index) const {\
63  if (!has##vectorName##attributeName(index)) { throw std::out_of_range("The index is out of range"); }\
64  return static_cast<gsoap_eml2_2::prodml21__AbstractCompositionalModel*>(gsoapProxy)->ComponentPropertySet->vectorName[index]->attributeName->uom;\
65  }
66 
67 namespace PRODML2_1_NS
68 {
71  {
72  public:
73 
79  CompositionalSpecification(gsoap_eml2_2::prodml21__AbstractCompositionalModel* fromGsoap):PvtSpecification(fromGsoap) {}
80 
82  virtual ~CompositionalSpecification() = default;
83 
89  DLL_IMPORT_OR_EXPORT bool hasMixingRule() const { return static_cast<gsoap_eml2_2::prodml21__AbstractCompositionalModel*>(gsoapProxy)->MixingRule != nullptr; }
90 
98  DLL_IMPORT_OR_EXPORT gsoap_eml2_2::prodml21__MixingRule getMixingRule() const {
99  if (!hasMixingRule()) { throw std::invalid_argument("There is no mixing rule to get"); }
100  return *static_cast<gsoap_eml2_2::prodml21__AbstractCompositionalModel*>(gsoapProxy)->MixingRule;
101  }
102 
108  DLL_IMPORT_OR_EXPORT void setMixingRule(gsoap_eml2_2::prodml21__MixingRule mixingRule);
109 
117  DLL_IMPORT_OR_EXPORT unsigned int getBinaryInteractionCoefficientCount() const {
118  if (static_cast<gsoap_eml2_2::prodml21__AbstractCompositionalModel*>(gsoapProxy)->BinaryInteractionCoefficientSet == nullptr) {
119  return 0;
120  }
121 
122  size_t count = static_cast<gsoap_eml2_2::prodml21__AbstractCompositionalModel*>(gsoapProxy)->BinaryInteractionCoefficientSet->BinaryInteractionCoefficient.size();
123  if (count > (std::numeric_limits<unsigned int>::max)()) {
124  throw std::out_of_range("There are too much coefficient");
125  }
126  return static_cast<unsigned int>(count);
127  }
128 
138  DLL_IMPORT_OR_EXPORT std::string getBinaryInteractionCoefficientFluidComponent1Reference(unsigned int index) const
139  {
140  if (index >= getBinaryInteractionCoefficientCount()) {
141  throw std::out_of_range("The index is out of range");
142  }
143 
144  return static_cast<gsoap_eml2_2::prodml21__AbstractCompositionalModel*>(gsoapProxy)->BinaryInteractionCoefficientSet->BinaryInteractionCoefficient[index]->fluidComponent1Reference;
145  }
146 
156  DLL_IMPORT_OR_EXPORT bool hasBinaryInteractionCoefficientFluidComponent2Reference(unsigned int index) const
157  {
158  if (index >= getBinaryInteractionCoefficientCount()) {
159  throw std::out_of_range("The index is out of range");
160  }
161 
162  return static_cast<gsoap_eml2_2::prodml21__AbstractCompositionalModel*>(gsoapProxy)->BinaryInteractionCoefficientSet->BinaryInteractionCoefficient[index]->fluidComponent2Reference != nullptr;
163  }
164 
174  DLL_IMPORT_OR_EXPORT std::string getBinaryInteractionCoefficientFluidComponent2Reference(unsigned int index) const
175  {
176  if (!hasBinaryInteractionCoefficientFluidComponent2Reference(index)) {
177  throw std::out_of_range("There is no FluidComponent2Reference at this index");
178  }
179 
180  return *static_cast<gsoap_eml2_2::prodml21__AbstractCompositionalModel*>(gsoapProxy)->BinaryInteractionCoefficientSet->BinaryInteractionCoefficient[index]->fluidComponent2Reference;
181  }
182 
190  DLL_IMPORT_OR_EXPORT void pushBackBinaryInteractionCoefficient(double value, const std::string & fluidComponent1Reference, const std::string & fluidComponent2Reference = "");
191 
199  DLL_IMPORT_OR_EXPORT unsigned int getFluidComponentPropertyCount() const {
200  if (static_cast<gsoap_eml2_2::prodml21__AbstractCompositionalModel*>(gsoapProxy)->ComponentPropertySet == nullptr) {
201  return 0;
202  }
203 
204  size_t count = static_cast<gsoap_eml2_2::prodml21__AbstractCompositionalModel*>(gsoapProxy)->ComponentPropertySet->FluidComponentProperty.size();
205  if (count > (std::numeric_limits<unsigned int>::max)()) {
206  throw std::out_of_range("There are too much component property");
207  }
208  return static_cast<unsigned int>(count);
209  }
210 
216  DLL_IMPORT_OR_EXPORT void pushBackFluidComponentProperty(const std::string & fluidComponentReference);
217 
227  DLL_IMPORT_OR_EXPORT std::string getFluidComponentPropertyFluidComponentReference(unsigned int index) const{
228  if (static_cast<gsoap_eml2_2::prodml21__AbstractCompositionalModel*>(gsoapProxy)->ComponentPropertySet == nullptr ||
229  static_cast<gsoap_eml2_2::prodml21__AbstractCompositionalModel*>(gsoapProxy)->ComponentPropertySet->FluidComponentProperty.size() <= index) {
230  throw std::out_of_range("The FluidComponentProperty at this index does not exist");
231  }
232 
233  return static_cast<gsoap_eml2_2::prodml21__AbstractCompositionalModel*>(gsoapProxy)->ComponentPropertySet->FluidComponentProperty[index]->fluidComponentReference;
234  }
235 
236  GETTER_AND_SETTER_FLUID_COMPONENT_PROPERTY_OPTIONAL_ATTRIBUTE(FluidComponentProperty, AcentricFactor, double)
237  GETTER_AND_SETTER_FLUID_COMPONENT_PROPERTY_OPTIONAL_ATTRIBUTE(FluidComponentProperty, OmegaA, double)
238  GETTER_AND_SETTER_FLUID_COMPONENT_PROPERTY_OPTIONAL_ATTRIBUTE(FluidComponentProperty, OmegaB, double)
239  GETTER_AND_SETTER_FLUID_COMPONENT_PROPERTY_OPTIONAL_ATTRIBUTE(FluidComponentProperty, VolumeShiftParameter, double)
240  GETTER_AND_SETTER_FLUID_COMPONENT_PROPERTY_OPTIONAL_ATTRIBUTE(FluidComponentProperty, Parachor, double)
241  GETTER_AND_SETTER_FLUID_COMPONENT_PROPERTY_OPTIONAL_ATTRIBUTE(FluidComponentProperty, Remark, std::string)
242 
243  GETTER_AND_SETTER_FLUID_COMPONENT_PROPERTY_MEASURE_ATTRIBUTE(FluidComponentProperty, CriticalPressure, std::string)
244  GETTER_AND_SETTER_FLUID_COMPONENT_PROPERTY_MEASURE_ATTRIBUTE(FluidComponentProperty, CriticalTemperature, gsoap_eml2_2::eml22__ThermodynamicTemperatureUom)
245  GETTER_AND_SETTER_FLUID_COMPONENT_PROPERTY_MEASURE_ATTRIBUTE(FluidComponentProperty, ReferenceTemperatureZJ, gsoap_eml2_2::eml22__ThermodynamicTemperatureUom)
246  GETTER_AND_SETTER_FLUID_COMPONENT_PROPERTY_MEASURE_ATTRIBUTE(FluidComponentProperty, CriticalViscosity, gsoap_eml2_2::eml22__DynamicViscosityUom)
247  GETTER_AND_SETTER_FLUID_COMPONENT_PROPERTY_MEASURE_ATTRIBUTE(FluidComponentProperty, CompactVolume, std::string)
248  GETTER_AND_SETTER_FLUID_COMPONENT_PROPERTY_MEASURE_ATTRIBUTE(FluidComponentProperty, CriticalVolume, gsoap_eml2_2::eml22__MolarVolumeUom)
249  GETTER_AND_SETTER_FLUID_COMPONENT_PROPERTY_MEASURE_ATTRIBUTE(FluidComponentProperty, PartialMolarVolume, gsoap_eml2_2::eml22__MolarVolumeUom)
250  GETTER_AND_SETTER_FLUID_COMPONENT_PROPERTY_MEASURE_ATTRIBUTE(FluidComponentProperty, MassDensity, std::string)
251  GETTER_AND_SETTER_FLUID_COMPONENT_PROPERTY_MEASURE_ATTRIBUTE(FluidComponentProperty, PartialMolarDensity, std::string)
252  GETTER_AND_SETTER_FLUID_COMPONENT_PROPERTY_MEASURE_ATTRIBUTE(FluidComponentProperty, ReferenceDensityZJ, std::string)
253  GETTER_AND_SETTER_FLUID_COMPONENT_PROPERTY_MEASURE_ATTRIBUTE(FluidComponentProperty, ReferenceGravityZJ, gsoap_eml2_2::eml22__APIGravityUom)
254  GETTER_AND_SETTER_FLUID_COMPONENT_PROPERTY_MEASURE_ATTRIBUTE(FluidComponentProperty, ViscousCompressibility, gsoap_eml2_2::eml22__ReciprocalPressureUom)
255  };
256 }
Definition: CompositionalSpecification.h:71
void pushBackFluidComponentProperty(const std::string &fluidComponentReference)
bool hasBinaryInteractionCoefficientFluidComponent2Reference(unsigned int index) const
Definition: CompositionalSpecification.h:156
unsigned int getFluidComponentPropertyCount() const
Definition: CompositionalSpecification.h:199
virtual ~CompositionalSpecification()=default
bool hasMixingRule() const
Definition: CompositionalSpecification.h:89
std::string getBinaryInteractionCoefficientFluidComponent2Reference(unsigned int index) const
Definition: CompositionalSpecification.h:174
gsoap_eml2_2::prodml21__MixingRule getMixingRule() const
Definition: CompositionalSpecification.h:98
CompositionalSpecification(gsoap_eml2_2::prodml21__AbstractCompositionalModel *fromGsoap)
Definition: CompositionalSpecification.h:79
std::string getFluidComponentPropertyFluidComponentReference(unsigned int index) const
Definition: CompositionalSpecification.h:227
void setMixingRule(gsoap_eml2_2::prodml21__MixingRule mixingRule)
unsigned int getBinaryInteractionCoefficientCount() const
Definition: CompositionalSpecification.h:117
std::string getBinaryInteractionCoefficientFluidComponent1Reference(unsigned int index) const
Definition: CompositionalSpecification.h:138
void pushBackBinaryInteractionCoefficient(double value, const std::string &fluidComponent1Reference, const std::string &fluidComponent2Reference="")
Definition: PvtSpecification.h:42