https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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
19template <bool is_nodal>
21 typename std::conditional<is_nodal, NodalUserObject, ElementUserObject>::type;
22
29template <bool is_nodal>
31{
32public:
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
47
53
54 struct Data
55 {
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
73protected:
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
138
140 pid_t _pid;
141
143 dof_id_type * _shared_dofid_mem;
144
147
148 // current node or element ID
149 dof_id_type _current_id;
150
151 using ThermochimicaDataBaseParent<is_nodal>::isCoupled;
152 using ThermochimicaDataBaseParent<is_nodal>::isParamValid;
153 using ThermochimicaDataBaseParent<is_nodal>::coupledValue;
154 using ThermochimicaDataBaseParent<is_nodal>::coupledComponents;
155 using ThermochimicaDataBaseParent<is_nodal>::writableVariable;
156};
157
const double T
typename std::conditional< is_nodal, NodalUserObject, ElementUserObject >::type ThermochimicaDataBaseParent
ThermochimicaDataBase< false > ThermochimicaElementData
ThermochimicaDataBase< true > ThermochimicaNodalData
The ChemicalCompositionAction sets up user objects, aux kernels, and aux variables for a thermochemis...
User object that performs a Gibbs energy minimization at each node by calling the Thermochimica code.
const std::size_t _n_phases
void reinitDataMooseToTc()
Function to load re-initialization data saved in this UserObject back into Thermochimica.
virtual void initialize() override
dof_id_type * _shared_dofid_mem
shared memory pointer for dof_id_type values
virtual void execute() override
const std::vector< std::pair< std::string, std::string > > & _vapor_phase_pairs
const ChemicalCompositionAction & _action
Real * _shared_real_mem
shared memory pointer for Real values
const std::size_t _n_elements
std::vector< MooseWritableVariable * > _vp
Writable vapour pressures for each element.
virtual void finalize() override
const std::vector< std::pair< std::string, std::string > > & _phase_element_pairs
OutputMassUnit
Mass unit for output species.
std::unordered_map< dof_id_type, Data > _data
Nodal data (Used only for reinitialization)
std::vector< MooseWritableVariable * > _el_pot
Writable chemical potential variables for each element.
const std::size_t _n_potentials
const std::size_t _n_vapor_species
std::vector< unsigned int > _el_ids
const bool _output_element_potentials
Element chemical potential output.
const VariableValue & _pressure
const Data & getData(dof_id_type id) const
static InputParameters validParams()
const std::size_t _n_species
const std::vector< std::string > & _ph_names
const Data & getElementData(dof_id_type id) const
void expect(T expect_msg)
const VariableValue & _temperature
std::vector< const VariableValue * > _el
const std::vector< std::pair< std::string, std::string > > & _species_phase_pairs
enum ThermochimicaDataBase::OutputMassUnit _output_mass_unit
virtual void threadJoin(const UserObject &) override
const std::size_t _n_phase_elements
int _socket
communication socket
std::vector< MooseWritableVariable * > _ph
Writable phase amount variables.
const std::vector< std::string > & _element_potentials
const Data & getNodalData(dof_id_type id) const
void reinitDataMooseFromTc()
Function to get re-initialization data from Thermochimica and save it in member variables of this Use...
std::vector< MooseWritableVariable * > _sp
Writable species amount variables.
enum ThermochimicaDataBase::ReinitializationType _reinit
std::vector< MooseWritableVariable * > _el_ph
Writable variable for molar amounts of each element in specified phase.
VariableValueTempl< false > VariableValue
std::vector< double > _chemical_potential
std::vector< double > _moles_phase
std::vector< int > _elements_used
std::vector< double > _element_potential
std::vector< double > _mol_fraction