5#include <deal.II/base/exceptions.h>
26 static_cast<unsigned int>(f2));
44 static_cast<unsigned int>(f2));
60 template <
typename number>
61 template <
typename value_type>
62 inline MaterialParameterValues<value_type, number>
68 "This compute_parameters() implementation should not be called for the current material type! Abort..."));
70 return compute_parameters_internal(value_type(0.0), value_type(0.0), flags);
75 template <
typename number>
76 template <
typename value_type>
85 "This compute_parameters() implementation should not be called for the current material type! Abort..."));
87 return compute_parameters_internal(v, value_type(0.0), flags);
92 template <
typename number>
93 template <
typename value_type>
96 const value_type &temperature,
99 return compute_parameters_internal(level_set_heaviside, temperature, flags);
104 template <
typename number>
105 template <
typename value_type,
int dim>
111 const unsigned int q_index)
const
113 switch (material_type)
117 return compute_parameters_internal(level_set_heaviside_val.get_value(q_index),
118 temperature_val.get_value(q_index),
122 return compute_parameters_internal(level_set_heaviside_val.get_value(q_index),
126 return compute_parameters_internal(temperature_val.get_value(q_index),
131 return compute_parameters_internal(value_type(0.0), value_type(0.0), flags);
133 Assert(
false, dealii::ExcNotImplemented());
140 template <
typename number>
141 template <
typename value_type,
int dim>
147 const unsigned int q_index)
const
149 Assert(temperature_val.size() <= 2, dealii::ExcInternalError());
151 const auto get_temperature_value = [&]() {
152 if (temperature_val.size() == 1)
153 return temperature_val[0].get_value(q_index);
154 else if (temperature_val.size() == 2)
159 return dealii::compare_and_apply_mask<dealii::SIMDComparison::greater_than_or_equal>(
160 level_set_heaviside_val.get_value(q_index),
162 temperature_val[0].get_value(q_index),
163 temperature_val[1].get_value(q_index));
170 std::nextafter(data.liquidus_temperature, std::numeric_limits<number>::infinity()));
173 switch (material_type)
177 return compute_parameters_internal(level_set_heaviside_val.get_value(q_index),
178 get_temperature_value(),
182 return compute_parameters_internal(level_set_heaviside_val.get_value(q_index),
186 return compute_parameters_internal(get_temperature_value(), value_type(0.0), flags);
189 return compute_parameters_internal(value_type(0.0), value_type(0.0), flags);
191 Assert(
false, dealii::ExcNotImplemented());
198 template <
typename number>
204 case FieldType::none:
206 case FieldType::temperature:
210 case FieldType::level_set:
216 AssertThrow(
false, dealii::ExcNotImplemented());
223 template <
typename number>
224 template <
typename value_type>
227 const value_type &v1,
228 const value_type &v2,
232 switch (material_type)
245 const auto &level_set_heaviside = v1;
249 compute_two_phase_fluid_property<value_type>(level_set_heaviside,
255 compute_two_phase_fluid_property<value_type>(level_set_heaviside,
262 compute_two_phase_fluid_density_consistent_with_evaporation<value_type>(
265 t.
density = compute_two_phase_fluid_property<value_type>(level_set_heaviside,
271 compute_two_phase_fluid_property<value_type>(level_set_heaviside,
277 apparent_capacity ==
nullptr,
279 "The apparent capacity type "
280 " \"apparent_capacity\" is currently not implemented for the volume specific "
281 " heat capacity! Abort..."));
283 compute_two_phase_fluid_property<value_type>(level_set_heaviside,
300 const auto &temperature = v1;
301 const auto temperature_dependent_solid_fraction =
302 compute_temperature_dependent_solid_fraction(temperature);
306 temperature_dependent_solid_fraction,
311 compute_solid_liquid_phases_specific_heat_capacity<value_type>(
312 temperature_dependent_solid_fraction,
316 t.
density = compute_solid_liquid_phases_property<value_type>(
324 apparent_capacity ==
nullptr,
326 "The apparent capacity type "
327 " \"apparent_capacity\" is currently not implemented for the volume specific "
328 " heat capacity! Abort..."));
330 temperature_dependent_solid_fraction,
336 compute_temperature_derivative_of_solid_liquid_phases_property<value_type>(
337 temperature_dependent_solid_fraction,
342 compute_temperature_derivative_of_solid_liquid_specific_heat_capacity<value_type>(
343 temperature_dependent_solid_fraction,
348 compute_temperature_derivative_of_solid_liquid_phases_property<value_type>(
353 apparent_capacity ==
nullptr,
355 "The apparent capacity type "
356 " \"apparent_capacity\" is currently not implemented for the volume specific "
357 " heat capacity! Abort..."));
359 compute_temperature_derivative_of_solid_liquid_phases_property<value_type>(
360 temperature_dependent_solid_fraction,
382 const auto &level_set_heaviside = v1;
383 const auto &temperature = v2;
384 const auto temperature_dependent_solid_fraction =
385 compute_temperature_dependent_solid_fraction(temperature);
390 temperature_dependent_solid_fraction,
396 compute_solid_liquid_gas_phases_specific_heat_capacity<value_type>(
398 temperature_dependent_solid_fraction,
406 compute_solid_liquid_gas_phases_density_consistent_with_evaporation<value_type>(
408 temperature_dependent_solid_fraction,
413 t.
density = compute_solid_liquid_gas_phases_property<value_type>(
415 temperature_dependent_solid_fraction,
423 temperature_dependent_solid_fraction,
430 apparent_capacity ==
nullptr,
432 "The apparent capacity type "
433 " \"apparent_capacity\" is currently not implemented for the volume specific "
434 " heat capacity! Abort..."));
436 compute_solid_liquid_gas_phases_property<value_type>(
438 temperature_dependent_solid_fraction,
445 compute_temperature_derivative_of_solid_liquid_gas_property<value_type>(
447 temperature_dependent_solid_fraction,
452 compute_temperature_derivative_of_solid_liquid_gas_specific_heat_capacity<
453 value_type>(level_set_heaviside,
454 temperature_dependent_solid_fraction,
461 compute_temperature_derivative_of_solid_liquid_gas_density_consistent_with_evaporation<
462 value_type>(level_set_heaviside,
463 temperature_dependent_solid_fraction,
469 compute_temperature_derivative_of_solid_liquid_gas_property<value_type>(
471 temperature_dependent_solid_fraction,
478 apparent_capacity ==
nullptr,
480 "The apparent capacity type "
481 " \"apparent_capacity\" is currently not implemented for the volume specific "
482 " heat capacity! Abort..."));
484 compute_temperature_derivative_of_solid_liquid_gas_property<value_type>(
486 temperature_dependent_solid_fraction,
493 const auto liquid_solid_heaviside =
497 t.
liquid_fraction = (1. - liquid_solid_heaviside) * level_set_heaviside;
503 Assert(
false, dealii::ExcNotImplemented());
512 template <
typename number>
513 template <
typename value_type>
516 const value_type &gas_value,
517 const value_type &liquid_solid_value)
const
519 const value_type weight = data.two_phase_fluid_properties_transition_type !=
520 TwoPhaseFluidPropertiesTransitionType::sharp ?
521 level_set_heaviside :
528 template <
typename number>
529 template <
typename value_type>
532 const value_type &level_set_heaviside,
533 const value_type &gas_density,
534 const value_type &liquid_solid_density)
const
538 liquid_solid_density);
543 template <
typename number>
544 template <
typename value_type>
547 const value_type &temperature_dependent_solid_fraction,
548 const value_type &liquid_value,
549 const value_type &solid_value)
const
551 if (temperature_dependent_solid_fraction == value_type(0.0))
553 if (temperature_dependent_solid_fraction == value_type(1.0))
562 template <
typename number>
563 template <
typename value_type>
566 const value_type &temperature_dependent_solid_fraction,
567 const value_type &liquid_value,
568 const value_type &solid_value)
const
570 auto value = compute_solid_liquid_phases_property(temperature_dependent_solid_fraction,
574 if (apparent_capacity)
575 value += apparent_capacity->evaluate(temperature_dependent_solid_fraction);
582 template <
typename number>
583 template <
typename value_type>
586 const value_type &temperature_dependent_solid_fraction,
587 const value_type &liquid_value,
588 const value_type &solid_value)
const
590 if (temperature_dependent_solid_fraction == value_type(0.0) or
591 temperature_dependent_solid_fraction == value_type(1.0))
592 return value_type(0.0);
593 return -1.0 * inv_mushy_interval *
601 template <
typename number>
602 template <
typename value_type>
605 const value_type &temperature_dependent_solid_fraction,
606 const value_type &liquid_value,
607 const value_type &solid_value)
const
609 auto value = compute_temperature_derivative_of_solid_liquid_phases_property(
610 temperature_dependent_solid_fraction, liquid_value, solid_value);
612 if (apparent_capacity)
614 apparent_capacity->compute_temperature_derivative(temperature_dependent_solid_fraction);
621 template <
typename number>
622 template <
typename value_type>
625 const value_type &level_set_heaviside,
626 const value_type &temperature_dependent_solid_fraction,
627 const value_type &gas_value,
628 const value_type &liquid_value,
629 const value_type &solid_value)
const
631 const auto liquid_solid_value =
632 compute_solid_liquid_phases_property(temperature_dependent_solid_fraction,
635 return compute_two_phase_fluid_property(level_set_heaviside, gas_value, liquid_solid_value);
640 template <
typename number>
641 template <
typename value_type>
644 const value_type &level_set_heaviside,
645 const value_type &temperature_dependent_solid_fraction,
646 const value_type &gas_value,
647 const value_type &liquid_value,
648 const value_type &solid_value)
const
650 const auto liquid_solid_value =
651 compute_solid_liquid_phases_specific_heat_capacity(temperature_dependent_solid_fraction,
655 return compute_two_phase_fluid_property(level_set_heaviside, gas_value, liquid_solid_value);
660 template <
typename number>
661 template <
typename value_type>
664 const value_type &level_set_heaviside,
665 const value_type &temperature_dependent_solid_fraction,
666 const value_type &gas_value,
667 const value_type &liquid_value,
668 const value_type &solid_value)
const
670 const auto liquid_solid_value =
671 compute_solid_liquid_phases_property(temperature_dependent_solid_fraction,
674 return compute_two_phase_fluid_density_consistent_with_evaporation(level_set_heaviside,
681 template <
typename number>
682 template <
typename value_type>
685 const value_type &level_set_heaviside,
686 const value_type &temperature_dependent_solid_fraction,
687 const value_type &liquid_value,
688 const value_type &solid_value)
const
690 const auto temp = compute_temperature_derivative_of_solid_liquid_phases_property(
691 temperature_dependent_solid_fraction, liquid_value, solid_value);
692 const auto weight = data.two_phase_fluid_properties_transition_type !=
693 TwoPhaseFluidPropertiesTransitionType::sharp ?
694 level_set_heaviside :
696 return temp * weight;
701 template <
typename number>
702 template <
typename value_type>
705 const value_type &level_set_heaviside,
706 const value_type &temperature_dependent_solid_fraction,
707 const value_type &liquid_value,
708 const value_type &solid_value)
const
710 const auto temp = compute_temperature_derivative_of_solid_liquid_specific_heat_capacity(
711 temperature_dependent_solid_fraction, liquid_value, solid_value);
712 const auto weight = data.two_phase_fluid_properties_transition_type !=
713 TwoPhaseFluidPropertiesTransitionType::sharp ?
714 level_set_heaviside :
716 return temp * weight;
721 template <
typename number>
722 template <
typename value_type>
726 const value_type &level_set_heaviside,
727 const value_type &temperature_dependent_solid_fraction,
728 const value_type &gas_value,
729 const value_type &liquid_value,
730 const value_type &solid_value)
const
732 const auto liquid_solid_value =
733 compute_solid_liquid_phases_property(temperature_dependent_solid_fraction,
736 const auto liquid_solid_derivative =
737 compute_temperature_derivative_of_solid_liquid_phases_property(
738 temperature_dependent_solid_fraction, liquid_value, solid_value);
740 liquid_solid_value * (1. + level_set_heaviside * (gas_value / liquid_solid_value - 1.));
741 return level_set_heaviside * gas_value * gas_value * liquid_solid_derivative / (temp * temp);
746 template <
typename number>
750 if (data.solid_liquid_properties_transition_type ==
751 SolidLiquidPropertiesTransitionType::mushy_zone)
753 (data.liquidus_temperature - temperature) * inv_mushy_interval, 0.0, 1.0);
754 else if (data.solid_liquid_properties_transition_type ==
755 SolidLiquidPropertiesTransitionType::sharp)
756 return temperature < data.solidus_temperature ? 1.0 : 0.0;
757 Assert(
false, dealii::ExcNotImplemented());
763 template <
typename number>
764 inline dealii::VectorizedArray<number>
766 const dealii::VectorizedArray<number> &temperature)
const
768 if (data.solid_liquid_properties_transition_type ==
769 SolidLiquidPropertiesTransitionType::mushy_zone)
771 (data.liquidus_temperature - temperature) * inv_mushy_interval, 0.0, 1.0);
772 else if (data.solid_liquid_properties_transition_type ==
773 SolidLiquidPropertiesTransitionType::sharp)
774 return dealii::compare_and_apply_mask<dealii::SIMDComparison::less_than>(
775 temperature, data.solidus_temperature, 1.0, 0.0);
776 Assert(
false, dealii::ExcNotImplemented());
777 return dealii::VectorizedArray<number>(0.0);
782 template <
typename number>
786 return scalar_parameters;
791 template <
typename number>
795 return vectorized_parameters;
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
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
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
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
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
FieldType
Definition material.hpp:99
bool has_dependency(const FieldType &field_type) const
Definition material.templates.hpp:200
number heaviside(const number in, const number limit=0.0)
Definition characteristic_functions.hpp:37
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
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
dealii::VectorizedArray< number > limit_to_bounds(const dealii::VectorizedArray< number > &in, const number lower_limit, const number upper_limit)
Definition utility_functions.hpp:62
Interface for a general preconditioner.
Definition boundary_condition_functions.hpp:17
@ gas_liquid_consistent_with_evaporation
@ gas_liquid_solid_consistent_with_evaporation
dealii::FEEvaluation< dim, -1, 0, n_components, number, VectorizedArrayType > FECellIntegrator
Definition fe_integrator.hpp:14
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
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
value_type gas_fraction
Definition material.hpp:41
Definition material.hpp:560