https://mooseframework.inl.gov
ThermochimicaData.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 #pragma once
11 
12 // MOOSE includes
13 #include "NodalUserObject.h"
14 #include "ElementUserObject.h"
15 
16 // Forward declaration
18 
19 template <bool is_nodal>
21  typename std::conditional<is_nodal, NodalUserObject, ElementUserObject>::type;
22 
29 template <bool is_nodal>
31 {
32 public:
34  ThermochimicaDataBase(const InputParameters & parameters);
36 
37  virtual void initialize() override;
38  virtual void execute() override;
39  virtual void finalize() override {}
40  virtual void threadJoin(const UserObject &) override {}
41 
46  void reinitDataMooseFromTc();
47 
52  void reinitDataMooseToTc();
53 
54  struct Data
55  {
57  int _elements;
58  int _species;
59  std::vector<int> _elements_used;
60  std::vector<int> _assemblage;
61  std::vector<double> _moles_phase;
62  std::vector<double> _element_potential;
63  std::vector<double> _chemical_potential;
64  std::vector<double> _mol_fraction;
65  };
66 
67  const Data & getNodalData(dof_id_type id) const;
68  const Data & getElementData(dof_id_type id) const;
69 
70  // universal data access
71  const Data & getData(dof_id_type id) const;
72 
73 protected:
74  // child process routine to dispatch thermochimica calculations
75  void server();
76 
77  // helper to wait on a socket read
78  template <typename T>
79  void expect(T expect_msg);
80 
81  // send message to socket
82  template <typename T>
83  void notify(T send_msg);
84 
87 
88  const std::size_t _n_phases;
89  const std::size_t _n_species;
90  const std::size_t _n_elements;
91  const std::size_t _n_vapor_species;
92  const std::size_t _n_phase_elements;
93  const std::size_t _n_potentials;
94 
95  std::vector<const VariableValue *> _el;
96 
98  std::vector<unsigned int> _el_ids;
99 
100  // re-initialization data
101  const enum class ReinitializationType { NONE, TIME, NODE } _reinit;
102 
103  const std::vector<std::string> & _ph_names;
104  const std::vector<std::string> & _element_potentials;
105  const std::vector<std::pair<std::string, std::string>> & _species_phase_pairs;
106  const std::vector<std::pair<std::string, std::string>> & _vapor_phase_pairs;
107  const std::vector<std::pair<std::string, std::string>> & _phase_element_pairs;
108 
110  std::unordered_map<dof_id_type, Data> _data;
111 
117 
119  std::vector<MooseWritableVariable *> _ph;
120 
122  std::vector<MooseWritableVariable *> _sp;
123 
125  std::vector<MooseWritableVariable *> _vp;
126 
128  std::vector<MooseWritableVariable *> _el_pot;
129 
131  std::vector<MooseWritableVariable *> _el_ph;
132 
135 
137  int _socket;
138 
140  pid_t _pid;
141 
144 
147 
148  // current node or element ID
150 
156 };
157 
OutputMassUnit
Mass unit for output species.
std::vector< double > _element_potential
static InputParameters validParams()
const std::vector< std::pair< std::string, std::string > > & _species_phase_pairs
const Data & getElementData(dof_id_type id) const
const std::size_t _n_elements
enum ThermochimicaDataBase::ReinitializationType _reinit
const Data & getNodalData(dof_id_type id) const
std::vector< int > _assemblage
void reinitDataMooseFromTc()
Function to get re-initialization data from Thermochimica and save it in member variables of this Use...
typename std::conditional< is_nodal, NodalUserObject, ElementUserObject >::type ThermochimicaDataBaseParent
User object that performs a Gibbs energy minimization at each node by calling the Thermochimica code...
const bool _output_vapor_pressures
ThermochimicaDataBase(const InputParameters &parameters)
std::vector< MooseWritableVariable * > _el_pot
Writable chemical potential variables for each element.
void reinitDataMooseToTc()
Function to load re-initialization data saved in this UserObject back into Thermochimica.
std::vector< double > _mol_fraction
virtual void initialize() override
std::vector< double > _chemical_potential
enum ThermochimicaDataBase::OutputMassUnit _output_mass_unit
int _socket
communication socket
const std::vector< std::string > & _ph_names
std::vector< unsigned int > _el_ids
virtual void threadJoin(const UserObject &) override
std::vector< MooseWritableVariable * > _vp
Writable vapour pressures for each element.
const std::vector< std::pair< std::string, std::string > > & _phase_element_pairs
const std::vector< std::string > & _element_potentials
const bool _output_element_potentials
Element chemical potential output.
const std::size_t _n_phases
const std::size_t _n_vapor_species
std::vector< const VariableValue * > _el
virtual void finalize() override
const Data & getData(dof_id_type id) const
const std::size_t _n_potentials
const std::size_t _n_species
std::vector< double > _moles_phase
const ChemicalCompositionAction & _action
dof_id_type * _shared_dofid_mem
shared memory pointer for dof_id_type values
OutputTools< Real >::VariableValue VariableValue
void notify(T send_msg)
Real * _shared_real_mem
shared memory pointer for Real values
virtual void execute() override
ThermochimicaDataBase< false > ThermochimicaElementData
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
std::vector< MooseWritableVariable * > _sp
Writable species amount variables.
const VariableValue & _temperature
const VariableValue & _pressure
const std::size_t _n_phase_elements
std::vector< MooseWritableVariable * > _el_ph
Writable variable for molar amounts of each element in specified phase.
void expect(T expect_msg)
std::unordered_map< dof_id_type, Data > _data
Nodal data (Used only for reinitialization)
The ChemicalCompositionAction sets up user objects, aux kernels, and aux variables for a thermochemis...
std::vector< int > _elements_used
ThermochimicaDataBase< true > ThermochimicaNodalData
const std::vector< std::pair< std::string, std::string > > & _vapor_phase_pairs
std::vector< MooseWritableVariable * > _ph
Writable phase amount variables.
uint8_t dof_id_type