Material< number > Class Template Reference

Developer Documentation: MeltPoolDG::Material< number > Class Template Reference
Developer Documentation
MeltPoolDG::Material< number > Class Template Reference

#include <material.hpp>

Collaboration diagram for MeltPoolDG::Material< number >:
[legend]

Classes

struct  MaterialParameterValuesContainer
 

Public Types

enum  FieldType { none , temperature , level_set }
 

Public Member Functions

 Material (const MaterialData< number > &material_data, const MaterialTypes material_type)
 
const MaterialData< number > & get_data () const
 
template<typename value_type >
MaterialParameterValues< value_type, number > compute_parameters (const MaterialUpdateFlags::MaterialUpdateFlags &flags) const
 
template<typename value_type >
MaterialParameterValues< value_type, number > compute_parameters (const value_type &v, const MaterialUpdateFlags::MaterialUpdateFlags &flags) const
 
template<typename value_type >
MaterialParameterValues< value_type, number > compute_parameters (const value_type &level_set_heaviside, const value_type &temperature, const MaterialUpdateFlags::MaterialUpdateFlags &flags) const
 
template<typename value_type , int dim>
MaterialParameterValues< value_type, number > compute_parameters (const FECellIntegrator< dim, 1, number > &level_set_heaviside_val, const FECellIntegrator< dim, 1, number > &temperature_val, const MaterialUpdateFlags::MaterialUpdateFlags &flags, const unsigned int q_index) const
 
template<typename value_type , int dim>
MaterialParameterValues< value_type, number > compute_parameters (const FECellIntegrator< dim, 1, number > &level_set_heaviside_val, const std::vector< FECellIntegrator< dim, 1, number > > &temperature_val, const MaterialUpdateFlags::MaterialUpdateFlags &flags, const unsigned int q_index) const
 
bool has_dependency (const FieldType &field_type) const
 

Private Member Functions

template<typename value_type >
MaterialParameterValues< value_type, number > compute_parameters_internal (const value_type &v1, const value_type &v2, const MaterialUpdateFlags::MaterialUpdateFlags &flags) const
 
template<typename value_type >
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
 
template<typename value_type >
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
 
template<typename value_type >
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
 
template<typename value_type >
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
 
template<typename value_type >
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
 
template<typename value_type >
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
 
template<typename value_type >
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
 
template<typename value_type >
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
 
template<typename value_type >
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
 
template<typename value_type >
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
 
template<typename value_type >
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
 
template<typename value_type >
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
 
number compute_temperature_dependent_solid_fraction (const number temperature) const
 
dealii::VectorizedArray< number > compute_temperature_dependent_solid_fraction (const dealii::VectorizedArray< number > &temperature) const
 

Private Attributes

const MaterialData< number > & data
 
MaterialParameterValuesContainer gas
 
MaterialParameterValuesContainer liquid
 
MaterialParameterValuesContainer solid
 
const MaterialTypes material_type
 
const number inv_mushy_interval
 
std::unique_ptr< Heat::ApparentCapacity< number > > apparent_capacity = nullptr
 

Member Enumeration Documentation

◆ FieldType

template<typename number >
enum MeltPoolDG::Material::FieldType
Enumerator
none 
temperature 
level_set 

Constructor & Destructor Documentation

◆ Material()

template<typename number >
MeltPoolDG::Material< number >::Material ( const MaterialData< number > &  material_data,
const MaterialTypes  material_type 
)

Member Function Documentation

◆ compute_parameters() [1/5]

template<typename number >
template<typename value_type , int dim>
MaterialParameterValues< value_type, number > MeltPoolDG::Material< number >::compute_parameters ( const FECellIntegrator< dim, 1, number > &  level_set_heaviside_val,
const FECellIntegrator< dim, 1, number > &  temperature_val,
const MaterialUpdateFlags::MaterialUpdateFlags flags,
const unsigned int  q_index 
) const
inline

This overload of compute_parameters() can be used for any material_type.

The level_set_heaviside_val and temperature_val FECellIntegrators are evaluated only if the respective values are required for the current material_type. I.e. for

Before the evaluation of the respective FECellIntegrator's, the values must be set via FEEvaluation::evaluate() with EvaluationFlags::values, or via FEEvaluationBase::submit_value(). The values are evaluated at the quadrature point number q_index.

◆ compute_parameters() [2/5]

template<typename number >
template<typename value_type , int dim>
MaterialParameterValues< value_type, number > MeltPoolDG::Material< number >::compute_parameters ( const FECellIntegrator< dim, 1, number > &  level_set_heaviside_val,
const std::vector< FECellIntegrator< dim, 1, number > > &  temperature_val,
const MaterialUpdateFlags::MaterialUpdateFlags flags,
const unsigned int  q_index 
) const
inline

Same as above, but with the ability to handle a cut temperature.

The FECellIntegrator for the temperature is wrapped in a std::vector. If that vector has two entries, the cell is assumed to be an intersected cell and the first entry is the liquid side and the second entry is the gas side. Then we use the heaviside level set as an indicator to select the correct temperature value for each quadrature point.

◆ compute_parameters() [3/5]

template<typename number >
template<typename value_type >
MaterialParameterValues< value_type, number > MeltPoolDG::Material< number >::compute_parameters ( const MaterialUpdateFlags::MaterialUpdateFlags flags) const
inline

This overload of compute_parameters() can be used only in the context of single phase simulations.

◆ compute_parameters() [4/5]

template<typename number >
template<typename value_type >
MaterialParameterValues< value_type, number > MeltPoolDG::Material< number >::compute_parameters ( const value_type &  level_set_heaviside,
const value_type &  temperature,
const MaterialUpdateFlags::MaterialUpdateFlags flags 
) const
inline

This overload of compute_parameters() can be used only in the context of three-phase simulations (gas-liquid-solid).

◆ compute_parameters() [5/5]

template<typename number >
template<typename value_type >
MaterialParameterValues< value_type, number > MeltPoolDG::Material< number >::compute_parameters ( const value_type &  v,
const MaterialUpdateFlags::MaterialUpdateFlags flags 
) const
inline

This overload of compute_parameters() can be used only in the context of two-phase simulations (gas-liquid or liquid-solid).

If the material_type is MaterialTypes::gas_liquid, v is the heaviside representation of the level set, if the material_type is MaterialTypes::liquid_solid, v is the temperature.

◆ compute_parameters_internal()

template<typename number >
template<typename value_type >
MaterialParameterValues< value_type, number > MeltPoolDG::Material< number >::compute_parameters_internal ( const value_type &  v1,
const value_type &  v2,
const MaterialUpdateFlags::MaterialUpdateFlags flags 
) const
inlineprivate

Get arbitrary parameters, specified by flags, for the currently active material_type.

◆ compute_solid_liquid_gas_phases_density_consistent_with_evaporation()

template<typename number >
template<typename value_type >
value_type MeltPoolDG::Material< number >::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
inlineprivate

Determine the density x of a material containing solid/liquid/gas phases consistently with mass flux due to evaporation. Across the interface, the density is distributed following a reciprocal distribution function

1 ls (1-ls) — = --------------------------— + -----— x ___________________________ x_g | | (1) | (sf * x_s + (1-sf) * x_l) | |___________________________|

  ^-----------------------------------------^
                      (2)

with the heaviside representation of the level set function ls (level_set_heaviside) and the solid fraction sf (temperature_dependent_solid_fraction). (1) is calculated using compute_solid_liquid_phases_property() and is plugged into compute_two_phase_fluid_density_consistent_with_evaporation() (2) resulting in the parameter x.

gas_value The parameter's value for the gaseous phase liquid_value The parameter's value for the liquid phase solid_value The parameter's value for the solid phase

◆ compute_solid_liquid_gas_phases_property()

template<typename number >
template<typename value_type >
value_type MeltPoolDG::Material< number >::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
inlineprivate

Determine the parameter of a material containing solid/liquid/gas phases.

                    /                           \

x = (1-ls) * x_g + ls * | (1 - sf) * x_l + sf * x_s | \ /

^--------------------------—^ (1) ^---------------------------------------------—^ (2)

with the heaviside representation of the level set function ls (level_set_heaviside) and the solid fraction sf (temperature_dependent_solid_fraction). (1) is calculated using compute_solid_liquid_phases_property() and is plugged into compute_two_phase_fluid_property() (2) reulting in the parameter x.

gas_value The parameter's value for the gaseous phase liquid_value The parameter's value for the liquid phase solid_value The parameter's value for the solid phase

◆ compute_solid_liquid_gas_phases_specific_heat_capacity()

template<typename number >
template<typename value_type >
value_type MeltPoolDG::Material< number >::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
inlineprivate

Compute the effective specific heat capacity for a three-phase solid-liquid-gas material.

The solid and liquid phase values are interpolated using the temperature-dependent solid fraction. If an apparent heat capacity model is enabled, its latent-heat contribution is added to the solid-liquid contribution before blending with the gas phase through the level-set Heaviside value.

Template Parameters
value_typeScalar or vectorized value type.
Parameters
level_set_heavisideHeaviside value used to interpolate between the gas phase and the condensed solid-liquid phases.
temperature_dependent_solid_fractionTemperature-dependent solid fraction used for the solid-liquid interpolation.
gas_valueSpecific heat capacity of the gas phase.
liquid_valueSpecific heat capacity of the liquid phase.
solid_valueSpecific heat capacity of the solid phase.
Returns
Effective solid-liquid-gas specific heat capacity, including the apparent heat capacity contribution if enabled.

◆ compute_solid_liquid_phases_property()

template<typename number >
template<typename value_type >
value_type MeltPoolDG::Material< number >::compute_solid_liquid_phases_property ( const value_type &  temperature_dependent_solid_fraction,
const value_type &  liquid_value,
const value_type &  solid_value 
) const
inlineprivate

Determine a material parameter for the solid/liquid phases. In the mushy zone (where the solid_fraction is between 0 and 1) the material parameter will be interpolated by a smooth cubic spline function, see UtilityFunctions::interpolate_cubic(),

x = x_l + (x_s - x_l) * (-2*sf^3 + 3*sf^2)

with the solid_fraction sf (temperature_dependent_solid_fraction), the value of the solid phase x_s (solid_value) and the value of the liquid phase x_l (liquid_value).

◆ compute_solid_liquid_phases_specific_heat_capacity()

template<typename number >
template<typename value_type >
value_type MeltPoolDG::Material< number >::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
inlineprivate

Compute the effective specific heat capacity for a two-phase solid-liquid material.

The solid and liquid phase values are interpolated using the temperature-dependent solid fraction. If an apparent heat capacity model is enabled, its latent-heat contribution is added to the interpolated phase value.

Template Parameters
value_typeScalar or vectorized value type.
Parameters
temperature_dependent_solid_fractionTemperature-dependent solid fraction used for the solid-liquid interpolation.
liquid_valueSpecific heat capacity of the liquid phase.
solid_valueSpecific heat capacity of the solid phase.
Returns
Effective solid-liquid specific heat capacity, including the apparent heat capacity contribution if enabled.

◆ compute_temperature_dependent_solid_fraction() [1/2]

template<typename number >
dealii::VectorizedArray< number > MeltPoolDG::Material< number >::compute_temperature_dependent_solid_fraction ( const dealii::VectorizedArray< number > &  temperature) const
inlineprivate

◆ compute_temperature_dependent_solid_fraction() [2/2]

template<typename number >
number MeltPoolDG::Material< number >::compute_temperature_dependent_solid_fraction ( const number  temperature) const
inlineprivate

Compute the solid fraction depending on the SolidLiquidPropertiesTransitionType.

SolidLiquidPropertiesTransitionType = mushy_zone If the temperature is greater than the liquidus temperature, then the solid fraction is zero. If the temperature is less than the solidus temperature, then the solid fraction is one. In between there is a linear interpolation.

SolidLiquidPropertiesTransitionType = sharp The solid fraction is zero above the melting point and one below the melting point.

Note
The computation of the solid fraction within this function is performed solely based on the temperature. In the case of a solid/liquid/gaseous material, thus the gaseous phase is ignored.

◆ compute_temperature_derivative_of_solid_liquid_gas_density_consistent_with_evaporation()

template<typename number >
template<typename value_type >
value_type MeltPoolDG::Material< number >::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
inlineprivate

Determine the derivative of the density with respect to the temperature for a material containing solid/liquid/gaseous phases consistent with the mass flux due to evaporation. This function returns the temperature derivatives of the values determined by compute_solid_liquid_gas_phases_density_consistent_with_evaporation().

The derivative dx_d_T of the solid/liquid/gaseous phases material is computed by

dx ls * x_g² d x_ls -— = ------------------------------------------— * -----— dT ( x_ls * ( 1 + ls * ( x_g / x_ls - 1 ) ) )² dT

with the heaviside representation of the level set function ls (level_set_heaviside), the value of the gaseous phase x_g (gas_value), the value of the liquid(and solid) phase x_ls as determined by compute_solid_liquid_phases_property() and its temperature derivative dx_ls_d_T as determined by compute_temperature_derivative_of_solid_liquid_phases_property().

gas_value The parameter's value for the gaseous phase liquid_value The parameter's value for the liquid phase solid_value The parameter's value for the solid phase

◆ compute_temperature_derivative_of_solid_liquid_gas_property()

template<typename number >
template<typename value_type >
value_type MeltPoolDG::Material< number >::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
inlineprivate

Determine the derivative of a material parameter with respect to the temperature for a material containing solid/liquid/gaseous phases. This function returns the temperature derivatives of the values determined by compute_solid_liquid_gas_phases_property(). Across the interface, the derivative reduces to zero if TwoPhaseFluidPropertiesTransitionType is sharp. Otherwise the derivative d_x/d_T is computed by

dx dx_ls -— = ls * ----— dT dT

with the heaviside representation of the level set function ls (level_set_heaviside), the derivative of the liquid(and solid) phase x_ls, which is determined by compute_temperature_derivative_of_solid_liquid_phases_property().

Note
The gaseous phases is identified based on the level set value only. Thus, its temperature derivative is zero.

liquid_value The parameter's value for the liquid phase solid_value The parameter's value for the solid phase

◆ compute_temperature_derivative_of_solid_liquid_gas_specific_heat_capacity()

template<typename number >
template<typename value_type >
value_type MeltPoolDG::Material< number >::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
inlineprivate

Compute the temperature derivative of the effective specific heat capacity for a three-phase solid-liquid-gas material.

The derivative contains the contribution from the temperature-dependent solid-liquid interpolation and, if enabled, the temperature derivative of the apparent heat capacity. The gas phase is assumed to be independent of temperature in this derivative contribution, while the condensed phase contribution is blended with the gas phase through the level-set Heaviside value.

Template Parameters
value_typeScalar or vectorized value type.
Parameters
level_set_heavisideHeaviside value used to interpolate between the gas phase and the condensed solid-liquid phases.
temperature_dependent_solid_fractionTemperature-dependent solid fraction used for the solid-liquid interpolation.
liquid_valueSpecific heat capacity of the liquid phase.
solid_valueSpecific heat capacity of the solid phase.
Returns
Temperature derivative of the effective solid-liquid-gas specific heat capacity, including the apparent heat capacity derivative if enabled.

◆ compute_temperature_derivative_of_solid_liquid_phases_property()

template<typename number >
template<typename value_type >
value_type MeltPoolDG::Material< number >::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
inlineprivate

Determine the derivative of a material parameter for the solid/liquid phases, calculated by compute_solid_liquid_phases_property(), with respect to the temperature, given as

dx d sf -— = (x_s - x_l) * (-6*sf^2 + 6*sf) * ---— dT dT

d sf -1 ---— = ------------— , if T_sol < T < T_liq , 0 otherwise dT T_liq - T_sol

with the solid_fraction sf (temperature_dependent_solid_fraction), the value of the solid phase x_s (solid_value), the value of the liquid phase x_l (liquid_value), the liquidus temperature T_liq and the solidus temperature T_sol.

◆ compute_temperature_derivative_of_solid_liquid_specific_heat_capacity()

template<typename number >
template<typename value_type >
value_type MeltPoolDG::Material< number >::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
inlineprivate

Compute the temperature derivative of the effective specific heat capacity for a two-phase solid-liquid material.

The derivative contains the contribution from the temperature-dependent solid-liquid interpolation. If an apparent heat capacity model is enabled, the temperature derivative of the apparent heat capacity is added.

Template Parameters
value_typeScalar or vectorized value type.
Parameters
temperature_dependent_solid_fractionTemperature-dependent solid fraction used for the solid-liquid interpolation.
liquid_valueSpecific heat capacity of the liquid phase.
solid_valueSpecific heat capacity of the solid phase.
Returns
Temperature derivative of the effective solid-liquid specific heat capacity, including the apparent heat capacity derivative if enabled.

◆ compute_two_phase_fluid_density_consistent_with_evaporation()

template<typename number >
template<typename value_type >
value_type MeltPoolDG::Material< number >::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
inlineprivate

Determine the density for two phase flow consistent with mass flux due to evaporation. If level_set_heaviside = 0 this function returns the gas_density and if ls_heaviside_val = 1 it returns the liquid_solid_density. Across the interface, the density is distributed following a reciprocal distribution function

1 ls (1-ls) — = -— + -----— x x_l x_g

with the heaviside representation of the level set function ls (level_set_heaviside), the density of the gaseous phase x_g (gas_density) and the density of the liquid (and solid) phase x_l (liquid_solid_density).

Note
In case of a material containing solid/liquid/gas phases, the value of liquid_solid_value represents the liquid/solid phase's (level set = 1) value, as determined by compute_solid_liquid_phases_property().

◆ compute_two_phase_fluid_property()

template<typename number >
template<typename value_type >
value_type MeltPoolDG::Material< number >::compute_two_phase_fluid_property ( const value_type &  level_set_heaviside,
const value_type &  gas_value,
const value_type &  liquid_solid_value 
) const
inlineprivate

Determine a material parameter for two phase flow. If level_set_heaviside = 0, the parameter results in the gas_value and if ls_heaviside_val = 1 it results in the liquid_solid_value. Across the interface, the parameter jumps if TwoPhaseFluidPropertiesTransitionType is "sharp". Otherwise, the parameter x is distributed according to the level set function

x = (1-ls) * x_g + ls * x_l

with the heaviside representation of the level set function ls (level_set_heaviside), the value of the gaseous phase x_g (gas_value) and the value of the liquid (and solid) phase x_l (liquid_solid_value).

Note
In case of a material containing solid/liquid/gas phases, the value of liquid_solid_value represents the liquid/solid phase's (level set = 1) value, as determined by compute_solid_liquid_phases_property().

◆ get_data()

template<typename number >
const MaterialData< number > & MeltPoolDG::Material< number >::get_data ( ) const

Return a reference to the material MaterialData.

Note
This function does not compute multiphase material parameters. Only use this function if you need access to the raw MaterialData struct.

◆ has_dependency()

template<typename number >
bool MeltPoolDG::Material< number >::has_dependency ( const FieldType field_type) const
inline

Check whether the material type depends on a certain field variable.

Parameters
field_typePotentially dependent field variable.

Member Data Documentation

◆ apparent_capacity

template<typename number >
std::unique_ptr<Heat::ApparentCapacity<number> > MeltPoolDG::Material< number >::apparent_capacity = nullptr
private

◆ data

template<typename number >
const MaterialData<number>& MeltPoolDG::Material< number >::data
private

◆ gas

template<typename number >
MaterialParameterValuesContainer MeltPoolDG::Material< number >::gas
private

◆ inv_mushy_interval

template<typename number >
const number MeltPoolDG::Material< number >::inv_mushy_interval
private

◆ liquid

template<typename number >
MaterialParameterValuesContainer MeltPoolDG::Material< number >::liquid
private

◆ material_type

template<typename number >
const MaterialTypes MeltPoolDG::Material< number >::material_type
private

◆ solid

template<typename number >
MaterialParameterValuesContainer MeltPoolDG::Material< number >::solid
private

The documentation for this class was generated from the following files: