include/meltpooldg/core/material.hpp Source File

Developer Documentation: include/meltpooldg/core/material.hpp Source File
Developer Documentation
material.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <deal.II/base/vectorization.h>
4
8
9#include <vector>
10
11namespace MeltPoolDG
12{
13 template <typename value_type, typename number>
15 {
16 MaterialParameterValues(const number thermal_conductivity_in = 0.0,
17 const number specific_heat_capacity_in = 0.0,
18 const number density_in = 0.0,
19 const number dynamic_viscosity_in = 0.0,
20 const number volume_specific_heat_capacity_in = 0.0,
21 const number d_thermal_conductivity_d_T_in = 0.0,
22 const number d_specific_heat_capacity_d_T_in = 0.0,
23 const number d_density_d_T_in = 0.0,
24 const number d_volume_specific_heat_capacity_d_T_in = 0.0,
25 const number gas_fraction_in = 0.0,
26 const number liquid_fraction_in = 0.0,
27 const number solid_fraction_in = 0.0);
28
29 template <typename material_phase_data_struct>
30 MaterialParameterValues(const material_phase_data_struct &data);
31
34 value_type density;
39 value_type d_density_d_T;
41 value_type gas_fraction;
42 value_type liquid_fraction;
43 value_type solid_fraction;
44 };
45
56
58 determine_material_type(const bool do_two_phase,
59 const bool do_solidification,
60 const bool do_evaporation);
61
93
94 template <typename number>
96 {
97 public:
104
105 Material(const MaterialData<number> &material_data, const MaterialTypes material_type);
106
114 get_data() const;
115
120 template <typename value_type>
123
131 template <typename value_type>
133 compute_parameters(const value_type &v,
135
140 template <typename value_type>
142 compute_parameters(const value_type &level_set_heaviside,
143 const value_type &temperature,
145
167 template <typename value_type, int dim>
169 compute_parameters(const FECellIntegrator<dim, 1, number> &level_set_heaviside_val,
170 const FECellIntegrator<dim, 1, number> &temperature_val,
172 const unsigned int q_index) const;
173
182 template <typename value_type, int dim>
184 compute_parameters(const FECellIntegrator<dim, 1, number> &level_set_heaviside_val,
185 const std::vector<FECellIntegrator<dim, 1, number>> &temperature_val,
187 const unsigned int q_index) const;
188
194 bool
195 has_dependency(const FieldType &field_type) const;
196
197 private:
201 template <typename value_type>
203 compute_parameters_internal(const value_type &v1,
204 const value_type &v2,
206
224 template <typename value_type>
225 inline value_type
226 compute_two_phase_fluid_property(const value_type &level_set_heaviside,
227 const value_type &gas_value,
228 const value_type &liquid_solid_value) const;
229
248 template <typename value_type>
249 inline value_type
251 const value_type &level_set_heaviside,
252 const value_type &gas_density,
253 const value_type &liquid_solid_density) const;
254
265 template <typename value_type>
266 inline value_type
267 compute_solid_liquid_phases_property(const value_type &temperature_dependent_solid_fraction,
268 const value_type &liquid_value,
269 const value_type &solid_value) const;
270
287 template <typename value_type>
288 inline value_type
290 const value_type &temperature_dependent_solid_fraction,
291 const value_type &liquid_value,
292 const value_type &solid_value) const;
293
315 template <typename value_type>
316 inline value_type
317 compute_solid_liquid_gas_phases_property(const value_type &level_set_heaviside,
318 const value_type &temperature_dependent_solid_fraction,
319 const value_type &gas_value,
320 const value_type &liquid_value,
321 const value_type &solid_value) const;
322
349 template <typename value_type>
350 inline value_type
352 const value_type &level_set_heaviside,
353 const value_type &temperature_dependent_solid_fraction,
354 const value_type &gas_value,
355 const value_type &liquid_value,
356 const value_type &solid_value) const;
357
380 template <typename value_type>
381 inline value_type
383 const value_type &level_set_heaviside,
384 const value_type &temperature_dependent_solid_fraction,
385 const value_type &liquid_value,
386 const value_type &solid_value) const;
387
407 template <typename value_type>
408 inline value_type
410 const value_type &temperature_dependent_solid_fraction,
411 const value_type &liquid_value,
412 const value_type &solid_value) const;
413
437 template <typename value_type>
438 inline value_type
440 const value_type &level_set_heaviside,
441 const value_type &temperature_dependent_solid_fraction,
442 const value_type &gas_value,
443 const value_type &liquid_value,
444 const value_type &solid_value) const;
445
466 template <typename value_type>
467 inline value_type
469 const value_type &temperature_dependent_solid_fraction,
470 const value_type &liquid_value,
471 const value_type &solid_value) const;
472
497 template <typename value_type>
498 inline value_type
500 const value_type &level_set_heaviside,
501 const value_type &temperature_dependent_solid_fraction,
502 const value_type &liquid_value,
503 const value_type &solid_value) const;
504
528 template <typename value_type>
529 inline value_type
531 const value_type &level_set_heaviside,
532 const value_type &temperature_dependent_solid_fraction,
533 const value_type &gas_value,
534 const value_type &liquid_value,
535 const value_type &solid_value) const;
536
552 inline number
554
555 inline dealii::VectorizedArray<number>
557 const dealii::VectorizedArray<number> &temperature) const;
558
560 {
561 template <typename material_phase_data_struct>
562 MaterialParameterValuesContainer(const material_phase_data_struct data);
563
566
567 constexpr operator const MaterialParameterValues<number, number> &() const;
568
569 constexpr
570 operator const MaterialParameterValues<dealii::VectorizedArray<number>, number> &() const;
571 };
572
574
578
580
581 const number inv_mushy_interval;
582
583 std::unique_ptr<Heat::ApparentCapacity<number>> apparent_capacity = nullptr;
584 };
585
586
587 /*----------------- Template constructors -----------------*/
588
589
590 template <typename value_type, typename number>
592 const number thermal_conductivity_in,
593 const number specific_heat_capacity_in,
594 const number density_in,
595 const number dynamic_viscosity_in,
596 const number volume_specific_heat_capacity_in,
597 const number d_thermal_conductivity_d_T_in,
598 const number d_specific_heat_capacity_d_T_in,
599 const number d_density_d_T_in,
600 const number d_volume_specific_heat_capacity_d_T_in,
601 const number gas_fraction_in,
602 const number liquid_fraction_in,
603 const number solid_fraction_in)
604 : thermal_conductivity(thermal_conductivity_in)
605 , specific_heat_capacity(specific_heat_capacity_in)
606 , density(density_in)
607 , dynamic_viscosity(dynamic_viscosity_in)
608 , volume_specific_heat_capacity(volume_specific_heat_capacity_in)
609 , d_thermal_conductivity_d_T(d_thermal_conductivity_d_T_in)
610 , d_specific_heat_capacity_d_T(d_specific_heat_capacity_d_T_in)
611 , d_density_d_T(d_density_d_T_in)
612 , d_volume_specific_heat_capacity_d_T(d_volume_specific_heat_capacity_d_T_in)
613 , gas_fraction(gas_fraction_in)
614 , liquid_fraction(liquid_fraction_in)
615 , solid_fraction(solid_fraction_in)
616 {}
617
618
619
620 template <typename value_type, typename number>
621 template <typename material_phase_data_struct>
623 const material_phase_data_struct &data)
624 : thermal_conductivity(data.thermal_conductivity)
625 , specific_heat_capacity(data.specific_heat_capacity)
626 , density(data.density)
627 , dynamic_viscosity(data.dynamic_viscosity)
628 , volume_specific_heat_capacity(data.density * data.specific_heat_capacity)
629 , d_thermal_conductivity_d_T(0.0)
630 , d_specific_heat_capacity_d_T(0.0)
631 , d_density_d_T(0.0)
632 , d_volume_specific_heat_capacity_d_T(0.0)
633 , gas_fraction(1.0)
634 , liquid_fraction(0.0)
635 , solid_fraction(0.0)
636 {}
637
638
639
640 template <typename number>
642 const MaterialTypes material_type)
643 : data(material_data)
644 , gas(data.gas)
645 , liquid(data.liquid)
646 , solid(data.solid)
647 , material_type(material_type)
648 , inv_mushy_interval(material_type == MaterialTypes::liquid_solid ||
649 material_type == MaterialTypes::gas_liquid_solid ||
650 material_type ==
652 1.0 / (data.liquidus_temperature - data.solidus_temperature) :
653 0.0)
654 {
655 if (material_data.latent_heat_of_fusion > 0)
656 apparent_capacity = std::make_unique<Heat::ApparentCapacity<number>>(material_data);
657 }
658
659
660
661 template <typename number>
662 template <typename material_phase_data_struct>
664 const material_phase_data_struct data)
665 : scalar_parameters(data)
666 , vectorized_parameters(data)
667 {}
668} // namespace MeltPoolDG
Definition material.hpp:96
value_type compute_solid_liquid_gas_phases_property(const value_type &level_set_heaviside, const value_type &temperature_dependent_solid_fraction, const value_type &gas_value, const value_type &liquid_value, const value_type &solid_value) const
Definition material.templates.hpp:624
value_type compute_solid_liquid_gas_phases_density_consistent_with_evaporation(const value_type &level_set_heaviside, const value_type &temperature_dependent_solid_fraction, const value_type &gas_value, const value_type &liquid_value, const value_type &solid_value) const
Definition material.templates.hpp:663
value_type compute_solid_liquid_gas_phases_specific_heat_capacity(const value_type &level_set_heaviside, const value_type &temperature_dependent_solid_fraction, const value_type &gas_value, const value_type &liquid_value, const value_type &solid_value) const
Definition material.templates.hpp:643
value_type compute_temperature_derivative_of_solid_liquid_gas_specific_heat_capacity(const value_type &level_set_heaviside, const value_type &temperature_dependent_solid_fraction, const value_type &liquid_value, const value_type &solid_value) const
Definition material.templates.hpp:704
const MaterialTypes material_type
Definition material.hpp:579
MaterialParameterValuesContainer liquid
Definition material.hpp:576
value_type compute_solid_liquid_phases_specific_heat_capacity(const value_type &temperature_dependent_solid_fraction, const value_type &liquid_value, const value_type &solid_value) const
Definition material.templates.hpp:565
value_type compute_temperature_derivative_of_solid_liquid_phases_property(const value_type &temperature_dependent_solid_fraction, const value_type &liquid_value, const value_type &solid_value) const
Definition material.templates.hpp:585
const MaterialData< number > & data
Definition material.hpp:573
number compute_temperature_dependent_solid_fraction(const number temperature) const
Definition material.templates.hpp:748
value_type compute_temperature_derivative_of_solid_liquid_gas_property(const value_type &level_set_heaviside, const value_type &temperature_dependent_solid_fraction, const value_type &liquid_value, const value_type &solid_value) const
Definition material.templates.hpp:684
value_type compute_solid_liquid_phases_property(const value_type &temperature_dependent_solid_fraction, const value_type &liquid_value, const value_type &solid_value) const
Definition material.templates.hpp:546
MaterialParameterValues< value_type, number > compute_parameters_internal(const value_type &v1, const value_type &v2, const MaterialUpdateFlags::MaterialUpdateFlags &flags) const
Definition material.templates.hpp:226
value_type compute_two_phase_fluid_density_consistent_with_evaporation(const value_type &level_set_heaviside, const value_type &gas_density, const value_type &liquid_solid_density) const
Definition material.templates.hpp:531
value_type compute_two_phase_fluid_property(const value_type &level_set_heaviside, const value_type &gas_value, const value_type &liquid_solid_value) const
Definition material.templates.hpp:515
const MaterialData< number > & get_data() const
Definition material.cpp:45
value_type compute_temperature_derivative_of_solid_liquid_gas_density_consistent_with_evaporation(const value_type &level_set_heaviside, const value_type &temperature_dependent_solid_fraction, const value_type &gas_value, const value_type &liquid_value, const value_type &solid_value) const
Definition material.templates.hpp:725
MaterialParameterValues< value_type, number > compute_parameters(const MaterialUpdateFlags::MaterialUpdateFlags &flags) const
Definition material.templates.hpp:63
std::unique_ptr< Heat::ApparentCapacity< number > > apparent_capacity
Definition material.hpp:583
value_type compute_temperature_derivative_of_solid_liquid_specific_heat_capacity(const value_type &temperature_dependent_solid_fraction, const value_type &liquid_value, const value_type &solid_value) const
Definition material.templates.hpp:604
Material(const MaterialData< number > &material_data, const MaterialTypes material_type)
Definition material.hpp:641
FieldType
Definition material.hpp:99
@ none
Definition material.hpp:100
@ temperature
Definition material.hpp:101
@ level_set
Definition material.hpp:102
MaterialParameterValuesContainer solid
Definition material.hpp:577
const number inv_mushy_interval
Definition material.hpp:581
bool has_dependency(const FieldType &field_type) const
Definition material.templates.hpp:200
MaterialParameterValuesContainer gas
Definition material.hpp:575
MaterialUpdateFlags operator|(const MaterialUpdateFlags f1, const MaterialUpdateFlags f2)
Definition material.templates.hpp:23
MaterialUpdateFlags
Definition material.hpp:65
@ dynamic_viscosity
Definition material.hpp:70
@ phase_fractions
Definition material.hpp:76
@ d_specific_heat_capacity_d_T
Definition material.hpp:73
@ density
Definition material.hpp:69
@ d_volume_specific_heat_capacity_d_T
Definition material.hpp:75
@ volume_specific_heat_capacity
Definition material.hpp:71
@ thermal_conductivity
Definition material.hpp:67
@ d_thermal_conductivity_d_T
Definition material.hpp:72
@ specific_heat_capacity
Definition material.hpp:68
@ d_density_d_T
Definition material.hpp:74
@ none
Definition material.hpp:66
MaterialUpdateFlags operator&(const MaterialUpdateFlags f1, const MaterialUpdateFlags f2)
Definition material.templates.hpp:41
MaterialUpdateFlags & operator&=(MaterialUpdateFlags &f1, const MaterialUpdateFlags f2)
Definition material.templates.hpp:50
MaterialUpdateFlags & operator|=(MaterialUpdateFlags &f1, const MaterialUpdateFlags f2)
Definition material.templates.hpp:32
Interface for a general preconditioner.
Definition boundary_condition_functions.hpp:17
MaterialTypes determine_material_type(const bool do_two_phase, const bool do_solidification, const bool do_evaporation)
Definition material.cpp:7
MaterialTypes
Definition material.hpp:47
dealii::FEEvaluation< dim, -1, 0, n_components, number, VectorizedArrayType > FECellIntegrator
Definition fe_integrator.hpp:14
Definition material_data.hpp:84
number latent_heat_of_fusion
Definition material_data.hpp:106
Definition material.hpp:15
value_type volume_specific_heat_capacity
Definition material.hpp:36
value_type d_specific_heat_capacity_d_T
Definition material.hpp:38
value_type liquid_fraction
Definition material.hpp:42
MaterialParameterValues(const material_phase_data_struct &data)
Definition material.hpp:622
value_type density
Definition material.hpp:34
value_type d_volume_specific_heat_capacity_d_T
Definition material.hpp:40
value_type solid_fraction
Definition material.hpp:43
value_type specific_heat_capacity
Definition material.hpp:33
value_type dynamic_viscosity
Definition material.hpp:35
value_type thermal_conductivity
Definition material.hpp:32
value_type d_thermal_conductivity_d_T
Definition material.hpp:37
value_type d_density_d_T
Definition material.hpp:39
MaterialParameterValues(const number thermal_conductivity_in=0.0, const number specific_heat_capacity_in=0.0, const number density_in=0.0, const number dynamic_viscosity_in=0.0, const number volume_specific_heat_capacity_in=0.0, const number d_thermal_conductivity_d_T_in=0.0, const number d_specific_heat_capacity_d_T_in=0.0, const number d_density_d_T_in=0.0, const number d_volume_specific_heat_capacity_d_T_in=0.0, const number gas_fraction_in=0.0, const number liquid_fraction_in=0.0, const number solid_fraction_in=0.0)
Definition material.hpp:591
value_type gas_fraction
Definition material.hpp:41
const MaterialParameterValues< number, number > scalar_parameters
Definition material.hpp:564
const MaterialParameterValues< dealii::VectorizedArray< number >, number > vectorized_parameters
Definition material.hpp:565
MaterialParameterValuesContainer(const material_phase_data_struct data)
Definition material.hpp:663