Reaktoro  v2.11.0
A unified framework for modeling chemically reactive systems
Phases.hpp
1 // Reaktoro is a unified framework for modeling chemically reactive systems.
2 //
3 // Copyright © 2014-2024 Allan Leal
4 //
5 // This library is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU Lesser General Public
7 // License as published by the Free Software Foundation; either
8 // version 2.1 of the License, or (at your option) any later version.
9 //
10 // This library is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 // Lesser General Public License for more details.
14 //
15 // You should have received a copy of the GNU Lesser General Public License
16 // along with this library. If not, see <http://www.gnu.org/licenses/>.
17 
18 #pragma once
19 
20 // Reaktoro includes
21 #include <Reaktoro/Common/Algorithms.hpp>
22 #include <Reaktoro/Common/StringList.hpp>
23 #include <Reaktoro/Common/StringUtils.hpp>
24 #include <Reaktoro/Common/Types.hpp>
25 #include <Reaktoro/Core/Database.hpp>
26 #include <Reaktoro/Core/Phase.hpp>
27 #include <Reaktoro/Models/ActivityModels/ActivityModelIdealAqueous.hpp>
28 #include <Reaktoro/Models/ActivityModels/ActivityModelIdealGas.hpp>
29 #include <Reaktoro/Models/ActivityModels/ActivityModelIdealSolution.hpp>
30 #include <Reaktoro/Models/ActivityModels/ActivityModelIdealIonExchange.hpp>
31 
32 namespace Reaktoro {
33 
35 struct Speciate
36 {
39 
41  auto operator+=(Strings const& othersymbols) -> Speciate& { symbols = merge(symbols, othersymbols); return *this; }
42 };
43 
45 auto speciate(StringList const& substances) -> Speciate;
46 
48 struct Exclude
49 {
52 
54  auto operator+=(Strings const& othertags) -> Exclude& { tags = merge(tags, othertags); return *this; }
55 };
56 
58 auto exclude(StringList const& tags) -> Exclude;
59 
63 {
64 public:
67 
69  explicit GeneralPhase(StringList const& species);
70 
72  explicit GeneralPhase(Speciate const& elements);
73 
75  explicit GeneralPhase(Speciate const& elements, Exclude const& withtags);
76 
78  explicit GeneralPhase(Exclude const& withtags);
79 
81  virtual ~GeneralPhase();
82 
85 
88 
91 
94 
97 
100 
103 
105  auto set(StateOfMatter option) -> GeneralPhase&;
106 
108  auto set(AggregateState option) -> GeneralPhase&;
109 
111  auto set(ActivityModelGenerator const& model) -> GeneralPhase&;
112 
114  auto name() const -> String;
115 
117  auto stateOfMatter() const -> StateOfMatter;
118 
121 
124 
126  auto species() const -> Strings const&;
127 
129  auto elements() const -> Strings const&;
130 
132  auto activityModel() const -> ActivityModelGenerator const&;
133 
136 
138  auto convert(Database const& db, Strings const& elements) const -> Phase;
139 
140 private:
142  String phasename;
143 
145  StateOfMatter stateofmatter = StateOfMatter::Solid;
146 
148  AggregateState aggregatestate = AggregateState::Undefined;
149 
151  Vec<AggregateState> other_aggregate_states;
152 
154  Strings names;
155 
157  Strings symbols;
158 
160  Strings excludetags;
161 
163  ActivityModelGenerator activity_model;
164 
166  ActivityModelGenerator ideal_activity_model;
167 };
168 
172 {
173 public:
176 
179 
182 
184  explicit GeneralPhasesGenerator(Speciate const& elements, Exclude const& withtags);
185 
187  explicit GeneralPhasesGenerator(Exclude const& withtags);
188 
191 
194 
197 
200 
203 
206 
209 
212 
215 
217  auto stateOfMatter() const -> StateOfMatter;
218 
221 
224 
226  auto species() const -> Strings const&;
227 
229  auto elements() const -> Strings const&;
230 
232  auto activityModel() const -> ActivityModelGenerator const&;
233 
236 
238  auto convert(Database const& db, Strings const& elements) const -> Vec<GeneralPhase>;
239 
240 private:
242  StateOfMatter stateofmatter = StateOfMatter::Solid;
243 
245  AggregateState aggregatestate = AggregateState::Undefined;
246 
248  Vec<AggregateState> other_aggregate_states;
249 
251  Strings names;
252 
254  Strings symbols;
255 
257  Strings excludetags;
258 
260  ActivityModelGenerator activity_model;
261 
263  ActivityModelGenerator ideal_activity_model;
264 };
265 
266 template <typename T, typename... Ts>
267 constexpr auto _areGeneralPhasesImpl()
268 {
269  constexpr auto aux = isBaseOf<GeneralPhase, T> || isBaseOf<GeneralPhasesGenerator, T>;
270  if constexpr (sizeof...(Ts) > 0)
271  return aux && _areGeneralPhasesImpl<Ts...>();
272  else return aux;
273 }
274 
276 template<typename T, typename... Ts>
277 constexpr auto areGeneralPhases = _areGeneralPhasesImpl<T, Ts...>();
278 
281 class Phases
282 {
283 public:
286  Phases(Database const& db);
287 
291  template<typename... GeneralPhases, Requires<areGeneralPhases<GeneralPhases...>> = true>
292  explicit Phases(Database const& db, GeneralPhases const&... gphases)
293  : Phases(db)
294  {
295  static_assert(sizeof...(gphases) > 0);
296  addAux(gphases...);
297  }
298 
299  // TODO: Implement `auto add(Phase const& phase) -> void` as well, in case the user provides a
300  // Phase object. This will need a new data member `phases` of type `Vec<Phase>`.
301 
303  auto add(GeneralPhase const& phase) -> void;
304 
306  auto add(GeneralPhasesGenerator const& generator) -> void;
307 
309  auto database() const -> Database const&;
310 
312  auto generalPhases() const -> Vec<GeneralPhase> const&;
313 
315  auto generalPhasesGenerators() const -> Vec<GeneralPhasesGenerator> const&;
316 
318  auto convert() const -> Vec<Phase>;
319 
321  operator Vec<Phase>() const;
322 
323 private:
325  Database db;
326 
328  Vec<GeneralPhase> generalphases;
329 
331  Vec<GeneralPhasesGenerator> generators;
332 
334  template<typename Arg, typename... Args>
335  auto addAux(Arg const& arg, Args const&... args) -> void
336  {
337  add(arg);
338  if constexpr (sizeof...(Args) > 0)
339  addAux(args...);
340  }
341 };
342 
345 {
346 public:
348  AqueousPhase() : GeneralPhase() { initialize(); }
349 
351  explicit AqueousPhase(StringList const& species) : GeneralPhase(species) { initialize(); }
352 
354  explicit AqueousPhase(Speciate elements) : GeneralPhase(elements += {"H", "O"}) { initialize(); }
355 
357  explicit AqueousPhase(Speciate elements, Exclude const& withtags) : GeneralPhase(elements += {"H", "O"}, withtags) { initialize(); }
358 
360  explicit AqueousPhase(Exclude const& withtags) : GeneralPhase(speciate("H O"), withtags) { initialize(); }
361 
363  auto initialize() -> void
364  {
365  setName("AqueousPhase");
370  }
371 };
372 
375 {
376 public:
378  GaseousPhase() : GeneralPhase() { initialize(); }
379 
381  explicit GaseousPhase(StringList const& species) : GeneralPhase(species) { initialize(); }
382 
384  explicit GaseousPhase(Speciate const& elements) : GeneralPhase(elements) { initialize(); }
385 
387  explicit GaseousPhase(Speciate const& elements, Exclude const& withtags) : GeneralPhase(elements, withtags) { initialize(); }
388 
390  explicit GaseousPhase(Exclude const& withtags) : GeneralPhase(withtags) { initialize(); }
391 
393  auto initialize() -> void
394  {
395  setName("GaseousPhase");
400  }
401 };
402 
404 class LiquidPhase : public GeneralPhase
405 {
406 public:
408  LiquidPhase() : GeneralPhase() { initialize(); }
409 
411  explicit LiquidPhase(StringList const& species) : GeneralPhase(species) { initialize(); }
412 
414  explicit LiquidPhase(Speciate const& elements) : GeneralPhase(elements) { initialize(); }
415 
417  explicit LiquidPhase(Speciate const& elements, Exclude const& withtags) : GeneralPhase(elements, withtags) { initialize(); };
418 
420  explicit LiquidPhase(Exclude const& withtags) : GeneralPhase(withtags) { initialize(); };
421 
423  auto initialize() -> void
424  {
425  setName("LiquidPhase");
430  }
431 };
432 
434 class SolidPhase : public GeneralPhase
435 {
436 public:
438  explicit SolidPhase(StringList const& species) : GeneralPhase(species) { initialize(); }
439 
441  auto initialize() -> void
442  {
443  String phasename;
444  auto i = 0;
445  for(auto&& name : species())
446  phasename += (i++ == 0) ? name : "-" + name;
447 
448  setName("SolidPhase");
454  }
455 };
456 
459 {
460 public:
462  explicit MineralPhase(String mineral) : GeneralPhase(mineral) { initialize(); }
463 
465  auto initialize() -> void
466  {
467  setName(species().front());
473  });
476  }
477 };
478 
481 {
482 public:
484  MineralPhases() : GeneralPhasesGenerator() { initialize(); }
485 
487  explicit MineralPhases(StringList const& species) : GeneralPhasesGenerator(species) { initialize(); }
488 
490  explicit MineralPhases(Speciate const& elements) : GeneralPhasesGenerator(elements) { initialize(); }
491 
493  explicit MineralPhases(Speciate const& elements, Exclude const& withtags) : GeneralPhasesGenerator(elements, withtags) { initialize(); };
494 
496  explicit MineralPhases(Exclude const& withtags) : GeneralPhasesGenerator(withtags) { initialize(); };
497 
499  auto initialize() -> void
500  {
506  });
509  }
510 };
511 
514 {
515 public:
517  explicit CondensedPhase(String species) : GeneralPhase(species) { initialize(); }
518 
520  auto initialize() -> void
521  {
522  setName(species().front());
531  });
532  setActivityModel(ActivityModelIdealSolution(StateOfMatter::Solid)); // TODO: Create ActivityModelIdealCondensedPhase(melting_temperature) or rely on a MeltingTemperature attribute in the species block of the database
534  }
535 };
536 
539 {
540 public:
542  CondensedPhases() : GeneralPhasesGenerator() { initialize(); }
543 
545  explicit CondensedPhases(StringList const& species) : GeneralPhasesGenerator(species) { initialize(); }
546 
548  explicit CondensedPhases(Speciate const& elements) : GeneralPhasesGenerator(elements) { initialize(); }
549 
551  explicit CondensedPhases(Speciate const& elements, Exclude const& withtags) : GeneralPhasesGenerator(elements, withtags) { initialize(); };
552 
554  explicit CondensedPhases(Exclude const& withtags) : GeneralPhasesGenerator(withtags) { initialize(); };
555 
557  auto initialize() -> void
558  {
567  });
568  setActivityModel(ActivityModelIdealSolution(StateOfMatter::Solid)); // TODO: Create ActivityModelIdealCondensedPhase(melting_temperature)
570  }
571 };
572 
575 {
576 public:
577 
579  explicit IonExchangePhase(StringList const& species) : GeneralPhase(species) { initialize(); }
580 
582  auto initialize() -> void
583  {
584  setName("IonExchangePhase");
589 
590  }
591 };
592 
593 } // namespace Reaktoro
The class used to configure an aqueous solution phase.
Definition: Phases.hpp:345
auto initialize() -> void
Initialize the default attributes of this AqueousPhase object.
Definition: Phases.hpp:363
AqueousPhase(Exclude const &withtags)
Construct an AqueousPhase object with tags indicating which species must be excluded from the final l...
Definition: Phases.hpp:360
AqueousPhase(Speciate elements, Exclude const &withtags)
Construct an AqueousPhase object with given element symbols and tags indicating which species must be...
Definition: Phases.hpp:357
AqueousPhase(StringList const &species)
Construct an AqueousPhase object with given species names.
Definition: Phases.hpp:351
AqueousPhase()
Construct a default AqueousPhase object.
Definition: Phases.hpp:348
AqueousPhase(Speciate elements)
Construct an AqueousPhase object with given element symbols.
Definition: Phases.hpp:354
The class used to configure a pure condensed phase.
Definition: Phases.hpp:514
CondensedPhase(String species)
Construct a default CondensedPhase object.
Definition: Phases.hpp:517
auto initialize() -> void
Initialize the default attributes of this CondensedPhase object.
Definition: Phases.hpp:520
The class used to configure automatic selection of pure condensed phases.
Definition: Phases.hpp:539
CondensedPhases(StringList const &species)
Construct a CondensedPhases object with given species names.
Definition: Phases.hpp:545
CondensedPhases(Speciate const &elements, Exclude const &withtags)
Construct a CondensedPhases object with given element symbols excluding the species with provided tag...
Definition: Phases.hpp:551
CondensedPhases(Exclude const &withtags)
Construct a CondensedPhases object excluding the species with provided tags.
Definition: Phases.hpp:554
auto initialize() -> void
Initialize the default attributes of this CondensedPhases object.
Definition: Phases.hpp:557
CondensedPhases(Speciate const &elements)
Construct a CondensedPhases object with given element symbols.
Definition: Phases.hpp:548
CondensedPhases()
Construct a default CondensedPhases object.
Definition: Phases.hpp:542
The class used to store and retrieve data of chemical species.
Definition: Database.hpp:32
The class used to configure a gaseous solution phase.
Definition: Phases.hpp:375
GaseousPhase(StringList const &species)
Construct a GaseousPhase object with given species names.
Definition: Phases.hpp:381
GaseousPhase(Speciate const &elements)
Construct a GaseousPhase object with given element symbols.
Definition: Phases.hpp:384
auto initialize() -> void
Initialize the default attributes of this GaseousPhase object.
Definition: Phases.hpp:393
GaseousPhase(Speciate const &elements, Exclude const &withtags)
Construct a GaseousPhase object with given element symbols and tags indicating which species must be ...
Definition: Phases.hpp:387
GaseousPhase()
Construct a default GaseousPhase object.
Definition: Phases.hpp:378
GaseousPhase(Exclude const &withtags)
Construct a GaseousPhase object with tags indicating which species must be excluded from the final li...
Definition: Phases.hpp:390
The base type for all other classes defining more specific phases.
Definition: Phases.hpp:63
auto set(AggregateState option) -> GeneralPhase &
Set the aggregate state of the species in the phase (equivalent to GeneralPhase::setAggregateState).
auto setActivityModel(ActivityModelGenerator const &model) -> GeneralPhase &
Set the activity model of the phase.
auto setAdditionalAggregateStates(Vec< AggregateState > const &options) -> GeneralPhase &
Set additional aggregate states to be considered when searching for species in a database.
virtual ~GeneralPhase()
Destroy this GeneralPhase object.
GeneralPhase(Exclude const &withtags)
Construct a GeneralPhase object excluding the species with provided tags.
auto convert(Database const &db, Strings const &elements) const -> Phase
Convert this GeneralPhase object into a Phase object.
auto additionalAggregateStates() const -> Vec< AggregateState > const &
Return the additional aggregate states to be considered when searching for species in a database.
auto named(String name) -> GeneralPhase &
Set a unique name of the phase (equivalent to GeneralPhase::setName).
auto set(StateOfMatter option) -> GeneralPhase &
Set the state of matter of the phase (equivalent to GeneralPhase::setStateOfMatter).
auto aggregateState() const -> AggregateState
Return the common aggregate state of the species composing the phase.
auto set(ActivityModelGenerator const &model) -> GeneralPhase &
Set the activity model of the phase (equivalent to GeneralPhase::setActivityModel).
auto activityModel() const -> ActivityModelGenerator const &
Return the specified activity model of the phase.
auto setIdealActivityModel(ActivityModelGenerator const &model) -> GeneralPhase &
Set the ideal activity model of the phase.
auto setStateOfMatter(StateOfMatter option) -> GeneralPhase &
Set the state of matter of the phase.
auto idealActivityModel() const -> ActivityModelGenerator const &
Return the specified ideal activity model of the phase.
GeneralPhase(Speciate const &elements, Exclude const &withtags)
Construct a GeneralPhase object with given element symbols excluding the species with provided tags.
auto species() const -> Strings const &
Return the names of the selected species to compose the phase (empty if not given).
GeneralPhase(StringList const &species)
Construct a GeneralPhase object with given species names.
auto stateOfMatter() const -> StateOfMatter
Return the state of matter of the phase.
auto name() const -> String
Return the name of the phase.
GeneralPhase(Speciate const &elements)
Construct a GeneralPhase object with given element symbols.
GeneralPhase()
Construct a default GeneralPhase object.
auto setAggregateState(AggregateState option) -> GeneralPhase &
Set the aggregate state of the species in the phase.
auto elements() const -> Strings const &
Return the element symbols for automatic species selection (empty if not given).
auto setName(String name) -> GeneralPhase &
Set the unique name of the phase.
The base type for a generator of general phases with a single species.
Definition: Phases.hpp:172
auto setActivityModel(ActivityModelGenerator const &model) -> GeneralPhasesGenerator &
Set the common activity model of the generated phases.
auto setStateOfMatter(StateOfMatter option) -> GeneralPhasesGenerator &
Set the common state of matter of the generated phases.
GeneralPhasesGenerator(Exclude const &withtags)
Construct a GeneralPhasesGenerator object excluding the species with provided tags.
auto setAggregateState(AggregateState option) -> GeneralPhasesGenerator &
Set the common aggregate state of the species in the generated phases.
auto set(StateOfMatter option) -> GeneralPhasesGenerator &
Set the common state of matter of the generated phases (equivalent to GeneralPhasesGenerator::setStat...
auto set(AggregateState option) -> GeneralPhasesGenerator &
Set the common aggregate state of the species in the generated phases (equivalent to GeneralPhasesGen...
auto setAdditionalAggregateStates(Vec< AggregateState > const &options) -> GeneralPhasesGenerator &
Set additional aggregate states to be considered when searching for species in a database.
auto setIdealActivityModel(ActivityModelGenerator const &model) -> GeneralPhasesGenerator &
Set the common ideal activity model of the generated phases.
GeneralPhasesGenerator(Speciate const &elements, Exclude const &withtags)
Construct a GeneralPhasesGenerator object with given element symbols excluding the species with provi...
virtual ~GeneralPhasesGenerator()
Destroy this GeneralPhasesGenerator object.
GeneralPhasesGenerator()
Construct a default GeneralPhasesGenerator object.
auto stateOfMatter() const -> StateOfMatter
Return the common state of matter of the generated phases.
auto set(ActivityModelGenerator const &model) -> GeneralPhasesGenerator &
Set the common activity model of the generated phases (equivalent to GeneralPhasesGenerator::setActiv...
GeneralPhasesGenerator(Speciate const &elements)
Construct a GeneralPhasesGenerator object with given element symbols.
GeneralPhasesGenerator(StringList const &species)
Construct a GeneralPhasesGenerator object with given species names.
The class used to configure an ion exchange phase.
Definition: Phases.hpp:575
auto initialize() -> void
Initialize the default attributes of this IonExchangePhase object.
Definition: Phases.hpp:582
IonExchangePhase(StringList const &species)
Construct an IonExchangePhase object with given species names.
Definition: Phases.hpp:579
The class used to configure a liquid solution phase.
Definition: Phases.hpp:405
LiquidPhase(Speciate const &elements)
Construct a LiquidPhase object with given element symbols.
Definition: Phases.hpp:414
LiquidPhase(Speciate const &elements, Exclude const &withtags)
Construct a LiquidPhase object with given element symbols excluding the species with provided tags.
Definition: Phases.hpp:417
LiquidPhase(StringList const &species)
Construct a LiquidPhase object with given species names.
Definition: Phases.hpp:411
auto initialize() -> void
Initialize the default attributes of this LiquidPhase object.
Definition: Phases.hpp:423
LiquidPhase(Exclude const &withtags)
Construct a LiquidPhase object excluding the species with provided tags.
Definition: Phases.hpp:420
LiquidPhase()
Construct a default LiquidPhase object.
Definition: Phases.hpp:408
The class used to configure a pure mineral phase.
Definition: Phases.hpp:459
auto initialize() -> void
Initialize the default attributes of this MineralPhase object.
Definition: Phases.hpp:465
MineralPhase(String mineral)
Construct a default MineralPhase object.
Definition: Phases.hpp:462
The class used to configure automatic selection of pure mineral phases.
Definition: Phases.hpp:481
MineralPhases()
Construct a default MineralPhases object.
Definition: Phases.hpp:484
auto initialize() -> void
Initialize the default attributes of this MineralPhases object.
Definition: Phases.hpp:499
MineralPhases(Speciate const &elements)
Construct a MineralPhases object with given element symbols.
Definition: Phases.hpp:490
MineralPhases(Exclude const &withtags)
Construct a MineralPhases object excluding the species with provided tags.
Definition: Phases.hpp:496
MineralPhases(Speciate const &elements, Exclude const &withtags)
Construct a MineralPhases object with given element symbols excluding the species with provided tags.
Definition: Phases.hpp:493
MineralPhases(StringList const &species)
Construct a MineralPhases object with given species names.
Definition: Phases.hpp:487
A type used to define a phase and its attributes.
Definition: Phase.hpp:33
The class used to define the phases that will constitute the chemical system of interest.
Definition: Phases.hpp:282
Phases(Database const &db)
Construct a Phases object.
auto add(GeneralPhase const &phase) -> void
Add a GeneralPhase object into the Phases container.
auto add(GeneralPhasesGenerator const &generator) -> void
Add a GeneralPhasesGenerator object into the Phases container.
Phases(Database const &db, GeneralPhases const &... gphases)
Construct a Phases object with given database and general phases.
Definition: Phases.hpp:292
auto database() const -> Database const &
Return the database object used to construct the species and elements in the phases.
The class used to configure a solid solution phase.
Definition: Phases.hpp:435
auto initialize() -> void
Initialize the default attributes of this SolidPhase object.
Definition: Phases.hpp:441
SolidPhase(StringList const &species)
Construct a SolidPhase object with given species names.
Definition: Phases.hpp:438
A class for representing a list of strings with special constructors.
Definition: StringList.hpp:28
The namespace containing all components of the Reaktoro library.
Definition: Algorithms.hpp:29
AggregateState
The aggregate states of substances according to IUPAC.
Definition: AggregateState.hpp:32
@ LiquidCrystal
for a liquid crystal (crystalline liquid) (symbol lc)
@ Liquid
for a liquid (symbol l)
@ Gas
for a gas or a vapour (symbol g)
@ CondensedPhase
for either the solid or the liquid state (symbol cd)
@ CrystallineSolid
for a crystalline solid (symbol cr)
@ IonExchange
for an ion exchange species (symbol ex)
@ Aqueous
for a species in a solution in which water is the solvent (symbol aq)
@ Solid
for a solid (symbol s)
@ AmorphousSolid
for an amorphous solid (symbol am)
Fn< ActivityModel(SpeciesList const &species)> ActivityModelGenerator
The type for functions that construct an ActivityModel for a phase.
Definition: ActivityModel.hpp:53
constexpr auto areGeneralPhases
Used to determine if T and all types in Ts are either GeneralPhase or GeneralPhaseGenerator.
Definition: Phases.hpp:277
std::vector< T > Vec
Convenient alias for std::vector<T>.
Definition: Types.hpp:66
std::string String
Convenient alias for std::string.
Definition: Types.hpp:52
std::vector< std::string > Strings
Convenient alias for std::vector<String>.
Definition: Types.hpp:55
auto ActivityModelIdealSolution(StateOfMatter stateofmatter) -> ActivityModelGenerator
Return the activity model for an ideal solution.
auto ActivityModelIdealGas() -> ActivityModelGenerator
Return the activity model for an ideal gaseous solution.
auto ActivityModelIdealIonExchange() -> ActivityModelGenerator
Return the activity model for the ideal ion exchange.
auto exclude(StringList const &tags) -> Exclude
The function used to specify species that should be filtered out when contructing a phase.
auto speciate(StringList const &substances) -> Speciate
The function used to specify phase species to be determined from element symbols in a list of substan...
StateOfMatter
The list of states of matter for phases.
Definition: StateOfMatter.hpp:27
@ Liquid
when the state of matter of a phase is liquid
@ Gas
when the state of matter of a phase is gas
@ Condensed
when the state of matter of a phase can be either liquid or solid // TODO: StateOfMatter::Condensed n...
@ Solid
when the state of matter of a phase is solid
auto merge(const Container &a, const Container &b)
Return a container with items from both a and b without duplicates.
Definition: Algorithms.hpp:180
auto ActivityModelIdealAqueous() -> ActivityModelGenerator
Return the activity model for an ideal aqueous solution.
The auxiliary type used to specify species that should be filtered out when contructing a phase.
Definition: Phases.hpp:49
auto operator+=(Strings const &othertags) -> Exclude &
Add other tags symbols into the exclude list.
Definition: Phases.hpp:54
Strings tags
The tags which species cannot have when populating the species in a phase.
Definition: Phases.hpp:51
The auxiliary type used to specify phase species to be determined from element symbols.
Definition: Phases.hpp:36
auto operator+=(Strings const &othersymbols) -> Speciate &
Add other element symbols into the speciation list.
Definition: Phases.hpp:41
Strings symbols
The symbols of the elements composing the species in a phase.
Definition: Phases.hpp:38