- blockThe list of blocks (ids or names) that this object will be applied
C++ Type:std::vector<SubdomainName>
Controllable:No
Description:The list of blocks (ids or names) that this object will be applied
- boundaryThe list of boundaries (ids or names) from the mesh where this object applies
C++ Type:std::vector<BoundaryName>
Controllable:No
Description:The list of boundaries (ids or names) from the mesh where this object applies
- computeTrueWhen false, MOOSE will not call compute methods on this material. The user must call computeProperties() after retrieving the MaterialBase via MaterialBasePropertyInterface::getMaterialBase(). Non-computed MaterialBases are not sorted for dependencies.
Default:True
C++ Type:bool
Controllable:No
Description:When false, MOOSE will not call compute methods on this material. The user must call computeProperties() after retrieving the MaterialBase via MaterialBasePropertyInterface::getMaterialBase(). Non-computed MaterialBases are not sorted for dependencies.
- constant_onNONEWhen ELEMENT, MOOSE will only call computeQpProperties() for the 0th quadrature point, and then copy that value to the other qps.When SUBDOMAIN, MOOSE will only call computeQpProperties() for the 0th quadrature point, and then copy that value to the other qps. Evaluations on element qps will be skipped
Default:NONE
C++ Type:MooseEnum
Controllable:No
Description:When ELEMENT, MOOSE will only call computeQpProperties() for the 0th quadrature point, and then copy that value to the other qps.When SUBDOMAIN, MOOSE will only call computeQpProperties() for the 0th quadrature point, and then copy that value to the other qps. Evaluations on element qps will be skipped
- declare_suffixAn optional suffix parameter that can be appended to any declared properties. The suffix will be prepended with a '_' character.
C++ Type:MaterialPropertyName
Unit:(no unit assumed)
Controllable:No
Description:An optional suffix parameter that can be appended to any declared properties. The suffix will be prepended with a '_' character.
GraphiteStainlessMeanHardness
Calculates the harmonic mean of the hardness values of graphite and stainless steel.
Description
This material object calculates the harmonic mean of the hardness values for AT 101 graphite and AISI 304 stainless steel. The defined constant hardness values are taken from (Cincotti et al., 2007), and are as follows:
Parameter | Value (Pa) |
---|---|
The harmonic mean of these hardness values can be calculated as
which leads to a value of approximately Pa.
Example Input File Syntax
[Materials<<<{"href": "../../syntax/Materials/index.html"}>>>]
[mean_hardness]
type = GraphiteStainlessMeanHardness<<<{"description": "Calculates the harmonic mean of the hardness values of graphite and stainless steel.", "href": "GraphiteStainlessMeanHardness.html"}>>>
output_properties<<<{"description": "List of material properties, from this material, to output (outputs must also be defined to an output type)"}>>> = 'graphite_stainless_mean_hardness'
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = exodus
[]
[]
(test/tests/materials/hardness/mean_hardness.i)Input Parameters
- control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector<std::string>
Controllable:No
Description:Adds user-defined labels for accessing object parameters via control logic.
- enableTrueSet the enabled status of the MooseObject.
Default:True
C++ Type:bool
Controllable:Yes
Description:Set the enabled status of the MooseObject.
- implicitTrueDetermines whether this object is calculated using an implicit or explicit form
Default:True
C++ Type:bool
Controllable:No
Description:Determines whether this object is calculated using an implicit or explicit form
- seed0The seed for the master random number generator
Default:0
C++ Type:unsigned int
Controllable:No
Description:The seed for the master random number generator
- use_displaced_meshFalseWhether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Default:False
C++ Type:bool
Controllable:No
Description:Whether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Advanced Parameters
- output_propertiesList of material properties, from this material, to output (outputs must also be defined to an output type)
C++ Type:std::vector<std::string>
Controllable:No
Description:List of material properties, from this material, to output (outputs must also be defined to an output type)
- outputsnone Vector of output names where you would like to restrict the output of variables(s) associated with this object
Default:none
C++ Type:std::vector<OutputName>
Controllable:No
Description:Vector of output names where you would like to restrict the output of variables(s) associated with this object
Outputs Parameters
- prop_getter_suffixAn optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
C++ Type:MaterialPropertyName
Unit:(no unit assumed)
Controllable:No
Description:An optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
- use_interpolated_stateFalseFor the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.
Default:False
C++ Type:bool
Controllable:No
Description:For the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.
Material Property Retrieval Parameters
Input Files
- (test/tests/interfacekernels/thermal_conductance/thermal_interface.i)
- (test/tests/example_testing/sample_three.i)
- (examples/sps/multiapp/complete_geometry/electrothermal/engineering_scale_electrothermal.i)
- (test/tests/materials/hardness/mean_hardness.i)
- (test/tests/example_testing/sample_one.i)
- (examples/sps/multiapp/electrothermal_with_phase_field/twoway_lots_of_particles_prototype/engineering_scale_electrothermal_twoway_lots_prototype.i)
- (examples/sps/multiapp/complete_geometry/electrothermal/engineering_scale_electrothermal_goofycontact.i)
- (test/tests/example_testing/sample_four.i)
- (examples/sps/multiapp/electrothermal_with_phase_field/twoway_initial_prototype/engineering_scale_electrothermal_twoway_prototype.i)
- (examples/sps/multiapp/electrothermal_with_phase_field/oneway_controls/engineering_scale_electrothermal_oneway_controls.i)
References
- A. Cincotti, A. M. Locci, R. OrrĂ¹, and G. Cao.
Modeling of SPS apparatus: temperature, current and strain distribution with no powders.
AIChE Journal, 53(3):703–719, 2007.
doi:10.1002/aic.11102.[BibTeX]
@article{cincotti2007sps, author = "Cincotti, A. and Locci, A. M. and OrrĂ¹, R. and Cao, G.", title = "Modeling of {SPS} apparatus: Temperature, current and strain distribution with no powders", journal = "AIChE Journal", volume = "53", number = "3", pages = "703-719", doi = "10.1002/aic.11102", year = "2007" }
(test/tests/materials/hardness/mean_hardness.i)
# This test demonstrates the capability of the GraphiteStainlessMeanHardness
# ADMaterial object. Using the values below for AT 101 graphite and AISI 304
# stainless steel taken from Cincotti et al (DOI: 10.1002/aic.11102), the object
# calculates the harmonic mean of the hardness value. This is to be used in
# calculating thermal and electrical contact conductances.
#
# Hardness (Pa)
# Stainless Steel 1.92e9
# Graphite 3.5e9
# Harmonic Mean ~2.4797e9
[Mesh]
[generated]
type = GeneratedMeshGenerator
dim = 2
nx = 2
ny = 2
[]
[]
[Problem]
type = FEProblem
solve = false
[]
[Materials]
[mean_hardness]
type = GraphiteStainlessMeanHardness
output_properties = 'graphite_stainless_mean_hardness'
outputs = exodus
[]
[]
[Executioner]
type = Steady
[]
[Outputs]
exodus = true
[]
(test/tests/interfacekernels/thermal_conductance/thermal_interface.i)
# Input file block to generate this mesh can be found in thermal_interface_mesh.i
[Mesh]
file = thermal_interface_regular_mesh.e
coord_type = RZ
[]
[Variables]
[temperature_graphite]
initial_condition = 300.0
block = graphite
[]
[temperature_stainless_steel]
initial_condition = 300.0
block = stainless_steel
[]
[potential_graphite]
block = graphite
[]
[potential_stainless_steel]
block = stainless_steel
[]
[]
[AuxVariables]
[T_infinity]
initial_condition = 300.0
[]
[]
[Kernels]
[HeatDiff_graphite]
type = ADHeatConduction
variable = temperature_graphite
block = graphite
[]
[HeatTdot_graphite]
type = ADHeatConductionTimeDerivative
variable = temperature_graphite
block = graphite
[]
[HeatSource_graphite]
type = ADJouleHeatingSource
variable = temperature_graphite
elec = potential_graphite
electrical_conductivity = electrical_conductivity
block = graphite
[]
[HeatDiff_stainless_steel]
type = ADHeatConduction
variable = temperature_stainless_steel
block = stainless_steel
[]
[HeatTdot_stainless_steel]
type = ADHeatConductionTimeDerivative
variable = temperature_stainless_steel
block = stainless_steel
[]
[HeatSource_stainless_steel]
type = ADJouleHeatingSource
variable = temperature_stainless_steel
elec = potential_stainless_steel
electrical_conductivity = electrical_conductivity
block = stainless_steel
[]
[electric_graphite]
type = ADMatDiffusion
variable = potential_graphite
diffusivity = electrical_conductivity
block = graphite
[]
[electric_stainless_steel]
type = ADMatDiffusion
variable = potential_stainless_steel
diffusivity = electrical_conductivity
block = stainless_steel
[]
[]
[BCs]
[external_surface_stainless]
type = ADCoupledSimpleRadiativeHeatFluxBC
boundary = right_stainless_steel
variable = temperature_stainless_steel
T_infinity = T_infinity
emissivity = 0.85
[]
[external_surface_graphite]
type = ADCoupledSimpleRadiativeHeatFluxBC
boundary = right_graphite
variable = temperature_graphite
T_infinity = T_infinity
emissivity = 0.85
[]
[elec_top]
type = ADDirichletBC
variable = potential_stainless_steel
boundary = top_die
value = 0.68 # Better reflects Cincotti et al (DOI: 10.1002/aic.11102) Figure 19
[]
[elec_bottom]
type = ADDirichletBC
variable = potential_stainless_steel
boundary = bottom_die
value = 0
[]
[]
[InterfaceKernels]
active = 'thermal_contact_conductance electric_contact_conductance'
[thermal_contact_conductance]
type = ThermalContactCondition
variable = temperature_stainless_steel
neighbor_var = temperature_graphite
primary_potential = potential_stainless_steel
secondary_potential = potential_graphite
primary_thermal_conductivity = thermal_conductivity
secondary_thermal_conductivity = thermal_conductivity
primary_electrical_conductivity = electrical_conductivity
secondary_electrical_conductivity = electrical_conductivity
user_electrical_contact_conductance = 2.5e5 # as described in Cincotti et al (DOI: 10.1002/aic.11102)
user_thermal_contact_conductance = 7 # also from Cincotti et al
boundary = ssg_interface
[]
[electric_contact_conductance]
type = ElectrostaticContactCondition
variable = potential_stainless_steel
neighbor_var = potential_graphite
primary_conductivity = electrical_conductivity
secondary_conductivity = electrical_conductivity
boundary = ssg_interface
user_electrical_contact_conductance = 2.5e5 # as described in Cincotti et al (DOI: 10.1002/aic.11102)
[]
[thermal_contact_conductance_calculated]
type = ThermalContactCondition
variable = temperature_stainless_steel
neighbor_var = temperature_graphite
primary_potential = potential_stainless_steel
secondary_potential = potential_graphite
primary_thermal_conductivity = thermal_conductivity
secondary_thermal_conductivity = thermal_conductivity
primary_electrical_conductivity = electrical_conductivity
secondary_electrical_conductivity = electrical_conductivity
mean_hardness = graphite_stainless_mean_hardness
mechanical_pressure = 8.52842e10 # resulting in electrical contact conductance = ~1.4715e5, thermal contact conductance = ~3.44689e7
boundary = ssg_interface
[]
[]
[Materials]
active = 'heat_conductor_graphite rho_graphite sigma_graphite heat_conductor_stainless_steel rho_stainless_steel sigma_stainless_steel'
#graphite
[heat_conductor_graphite]
type = ADHeatConductionMaterial
thermal_conductivity = 630
specific_heat = 60
block = graphite
[]
[rho_graphite]
type = ADGenericConstantMaterial
prop_names = 'density'
prop_values = 1.75e3
block = graphite
[]
[sigma_graphite]
type = ADElectricalConductivity
temperature = temperature_graphite
reference_temperature = 293.0
reference_resistivity = 3.0e-3
temperature_coefficient = 0 # makes conductivity constant
block = graphite
[]
#stainless_steel
[heat_conductor_stainless_steel]
type = ADHeatConductionMaterial
thermal_conductivity = 17
specific_heat = 502
block = stainless_steel
[]
[rho_stainless_steel]
type = ADGenericConstantMaterial
prop_names = 'density'
prop_values = 8e3
block = stainless_steel
[]
[sigma_stainless_steel]
type = ADElectricalConductivity
temperature = temperature_stainless_steel
reference_temperature = 293.0
reference_resistivity = 7e-7
temperature_coefficient = 0 # makes conductivity constant
block = stainless_steel
[]
# harmonic mean of graphite and stainless steel hardness
[mean_hardness]
type = GraphiteStainlessMeanHardness
[]
[]
[Preconditioning]
[SMP]
type = SMP
full = true
[]
[]
[Executioner]
type = Transient
scheme = bdf2
solve_type = NEWTON
dt = 0.1
end_time = 100
petsc_options_iname = '-pc_type'
petsc_options_value = 'lu'
[]
[Outputs]
exodus = true
perf_graph = true
[]
(test/tests/example_testing/sample_three.i)
# Cincotti Sample III SPS System Electrothermal Example
# Configuration: Two stainless steel electrodes (with cooling channels) with two
# large spacers, two small spacers, and one plunger in-between.
# RZ, axisymmetric. Reproduces Figures 20(a) and 20(b) in Cincotti
# reference (below)
#
# BCs:
# Potential:
# V (top electrode, top surface) --> Neumann condition specifiying potential
# based on applied RMS Current (670 A)
# and cross-sectional electrode area (see
# elec_top BC below). Current turned off
# at 1200 s.
# V (bottom electrode, bottom surface) = 0 V
# V (elsewhere) --> natural boundary conditions (no current external to circuit)
# Temperature:
# T (top electrode, top surface) = 293 K
# T (bottom electrode, bottom surface) = 293 K
# T (right side) --> simple radiative BC into black body at 293 K
# T (water channel) --> simple convective BC into "water" with heat transfer coefficient parameter from Cincotti and temperature of 293 K
# T (elsewhere) --> natural boundary conditions
# Interface Conditions:
# V (SS-G upper and G-SS lower interface) --> ElectrostaticContactCondition
# T (SS-G upper and G-SS lower interface) --> ThermalContactCondition
# Initial Conditions:
# V = default (0 V)
# T = 293 K
# Applied Mechanical Load: 3.5 kN
#
# Reference: Cincotti et al, DOI 10.1002/aic.11102
[Mesh]
[import_mesh]
type = FileMeshGenerator
file = spsdie_table1model3_2d.e
[]
coord_type = RZ
[]
[Variables]
[temperature_graphite]
initial_condition = 293.0
block = graphite
[]
[temperature_stainless_steel]
initial_condition = 293.0
block = stainless_steel
[]
[potential_graphite]
block = graphite
[]
[potential_stainless_steel]
block = stainless_steel
[]
[]
[AuxVariables]
[electric_field_r]
family = MONOMIAL
order = CONSTANT
[]
[electric_field_z]
family = MONOMIAL
order = CONSTANT
[]
[current_density]
family = NEDELEC_ONE
order = FIRST
[]
[T_infinity]
initial_condition = 293.0
[]
[heatflux_graphite_r]
family = MONOMIAL
order = CONSTANT
block = graphite
[]
[heatflux_graphite_z]
family = MONOMIAL
order = CONSTANT
block = graphite
[]
[heatflux_stainless_steel_r]
family = MONOMIAL
order = CONSTANT
block = stainless_steel
[]
[heatflux_stainless_steel_z]
family = MONOMIAL
order = CONSTANT
block = stainless_steel
[]
[]
[Kernels]
[HeatDiff_graphite]
type = ADHeatConduction
variable = temperature_graphite
block = graphite
[]
[HeatTdot_graphite]
type = ADHeatConductionTimeDerivative
variable = temperature_graphite
specific_heat = heat_capacity
block = graphite
[]
[HeatSource_graphite]
type = ADJouleHeatingSource
variable = temperature_graphite
elec = potential_graphite
block = graphite
[]
[HeatDiff_stainless_steel]
type = ADHeatConduction
variable = temperature_stainless_steel
block = stainless_steel
[]
[HeatTdot_stainless_steel]
type = ADHeatConductionTimeDerivative
variable = temperature_stainless_steel
specific_heat = heat_capacity
block = stainless_steel
[]
[HeatSource_stainless_steel]
type = ADJouleHeatingSource
variable = temperature_stainless_steel
elec = potential_stainless_steel
block = stainless_steel
[]
[electric_graphite]
type = ADMatDiffusion
variable = potential_graphite
diffusivity = electrical_conductivity
block = graphite
[]
[electric_stainless_steel]
type = ADMatDiffusion
variable = potential_stainless_steel
diffusivity = electrical_conductivity
block = stainless_steel
[]
[]
[AuxKernels]
[electrostatic_calculation_r_graphite]
type = PotentialToFieldAux
gradient_variable = potential_graphite
variable = electric_field_r
sign = negative
component = x
block = graphite
[]
[electrostatic_calculation_z_graphite]
type = PotentialToFieldAux
gradient_variable = potential_graphite
variable = electric_field_z
sign = negative
component = y
block = graphite
[]
[electrostatic_calculation_r_stainless_steel]
type = PotentialToFieldAux
gradient_variable = potential_stainless_steel
variable = electric_field_r
sign = negative
component = x
block = stainless_steel
[]
[electrostatic_calculation_z_stainless_steel]
type = PotentialToFieldAux
gradient_variable = potential_stainless_steel
variable = electric_field_z
sign = negative
component = y
block = stainless_steel
[]
[current_density_graphite]
type = ADCurrentDensity
variable = current_density
potential = potential_graphite
block = graphite
[]
[current_density_stainless_steel]
type = ADCurrentDensity
variable = current_density
potential = potential_stainless_steel
block = stainless_steel
[]
[heat_flux_graphite_r]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature_graphite
variable = heatflux_graphite_r
component = x
block = graphite
[]
[heat_flux_graphite_z]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature_graphite
variable = heatflux_graphite_z
component = y
block = graphite
[]
[heat_flux_stainless_r]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature_stainless_steel
variable = heatflux_stainless_steel_r
block = stainless_steel
component = x
[]
[heat_flux_stainless_z]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature_stainless_steel
variable = heatflux_stainless_steel_z
block = stainless_steel
component = y
[]
[]
[BCs]
[external_surface_stainless]
type = ADCoupledSimpleRadiativeHeatFluxBC
boundary = right_die_stainless_steel
variable = temperature_stainless_steel
T_infinity = T_infinity
emissivity = 0.4
[]
[external_surface_graphite]
type = ADCoupledSimpleRadiativeHeatFluxBC
boundary = right_die_graphite
variable = temperature_graphite
T_infinity = T_infinity
emissivity = 0.85
[]
[water_channel]
type = CoupledConvectiveHeatFluxBC
boundary = water_channel
variable = temperature_stainless_steel
T_infinity = 293
htc = 4725
[]
[temp_top]
type = ADDirichletBC
variable = temperature_stainless_steel
boundary = top_die
value = 293
[]
[temp_bottom]
type = ADDirichletBC
variable = temperature_stainless_steel
boundary = bottom_die
value = 293
[]
[elec_top]
type = ADFunctionNeumannBC
variable = potential_stainless_steel
boundary = top_die
function = 'if(t < 47, (670 / (pi * 0.00155))*((0.057531/2.6969)*t), if(t > 1200, 0, 670 / (pi * 0.00155)))' # RMS Current / Cross-sectional Area. Ramping for t < 47s approximately reflects Cincotti et al (DOI: 10.1002/aic.11102) Figure 20(b)
[]
[elec_bottom]
type = ADDirichletBC
variable = potential_stainless_steel
boundary = bottom_die
value = 0
[]
[]
[InterfaceKernels]
[electric_contact_conductance_ssg]
type = ElectrostaticContactCondition
variable = potential_stainless_steel
neighbor_var = potential_graphite
boundary = ssg_interface
mean_hardness = graphite_stainless_mean_hardness
mechanical_pressure = mechanical_pressure_func
[]
[thermal_contact_conductance_calculated_ssg]
type = ThermalContactCondition
variable = temperature_stainless_steel
neighbor_var = temperature_graphite
primary_potential = potential_stainless_steel
secondary_potential = potential_graphite
primary_thermal_conductivity = thermal_conductivity
secondary_thermal_conductivity = thermal_conductivity
primary_electrical_conductivity = electrical_conductivity
secondary_electrical_conductivity = electrical_conductivity
mean_hardness = graphite_stainless_mean_hardness
mechanical_pressure = mechanical_pressure_func
boundary = ssg_interface
[]
[electric_contact_conductance_gss]
type = ElectrostaticContactCondition
variable = potential_graphite
neighbor_var = potential_stainless_steel
boundary = gss_interface
mean_hardness = graphite_stainless_mean_hardness
mechanical_pressure = mechanical_pressure_func
[]
[thermal_contact_conductance_calculated_gss]
type = ThermalContactCondition
variable = temperature_graphite
neighbor_var = temperature_stainless_steel
primary_potential = potential_graphite
secondary_potential = potential_stainless_steel
primary_thermal_conductivity = thermal_conductivity
secondary_thermal_conductivity = thermal_conductivity
primary_electrical_conductivity = electrical_conductivity
secondary_electrical_conductivity = electrical_conductivity
mean_hardness = graphite_stainless_mean_hardness
mechanical_pressure = mechanical_pressure_func
boundary = gss_interface
[]
[]
[Materials]
#graphite
[heat_conductor_graphite]
type = ADGraphiteThermal
temperature = temperature_graphite
block = graphite
[]
[rho_graphite]
type = ADGenericConstantMaterial
prop_names = 'density'
prop_values = 1750
block = graphite
[]
[sigma_graphite]
type = ADGraphiteElectricalConductivity
temperature = temperature_graphite
block = graphite
[]
#stainless_steel
[heat_conductor_stainless_steel]
type = ADStainlessSteelThermal
temperature = temperature_stainless_steel
block = stainless_steel
[]
[rho_stainless_steel]
type = ADGenericConstantMaterial
prop_names = 'density'
prop_values = 8000
block = stainless_steel
[]
[sigma_stainless_steel]
type = ADStainlessSteelElectricalConductivity
temperature = temperature_stainless_steel
block = stainless_steel
[]
# harmonic mean of graphite and stainless steel hardness
[mean_hardness]
type = GraphiteStainlessMeanHardness
[]
# Material property converter for DiffusionFluxAux object
[converter]
type = MaterialADConverter
ad_props_in = thermal_conductivity
reg_props_out = nonad_thermal_conductivity
[]
[]
[Functions]
[mechanical_pressure_func]
type = ParsedFunction
symbol_names = 'radius force'
symbol_values = '0.04 3.5' # 'm kN'
expression = 'force * 1e3 / (pi * radius^2)' # (N / m^2)
[]
[]
# Tracking data locations specified in Cincotti paper
# [Postprocessors]
# [./lower_big_spacer]
# type = PointValue
# variable = temperature_graphite
# point = '0 0.28 0'
# [../]
# [./lower_small_spacer]
# type = PointValue
# variable = temperature_graphite
# point = '0 0.315 0'
# [../]
# [./center_plunger]
# type = PointValue
# variable = temperature_graphite
# point = '0 0.34 0'
# [../]
# [./potential_tracking]
# type = PointValue
# variable = potential_stainless_steel
# point = '0.027 0.584 0'
# [../]
# []
[Preconditioning]
[SMP]
type = SMP
full = true
[]
[]
[Executioner]
type = Transient
scheme = bdf2
solve_type = NEWTON
dt = 1
end_time = 3600
petsc_options_iname = '-pc_type'
petsc_options_value = 'lu'
[]
[Outputs]
perf_graph = true
file_base = sample_three_out
active = 'normal_out'
[normal_out]
type = Exodus
[]
[testing_out]
# Due to platform diffs in *really* small auxvariable values
type = Exodus
show = 'temperature_graphite temperature_stainless_steel potential_graphite potential_stainless_steel'
[]
[]
(examples/sps/multiapp/complete_geometry/electrothermal/engineering_scale_electrothermal.i)
# Approximate Dr. Sinter Geometry
# Configuration: Two stainless steel electrodes (with cooling channels) with two
# large spacers, and one die-and-plungers assembly.
# RZ, axisymmetric.
# BCs:
# Potential:
# V (top electrode, top surface) --> Neumann condition specifiying potential
# based on applied RMS Current (980 A)
# and cross-sectional electrode area (see
# elec_top BC below). Current turned off
# at 1200 s.
# V (bottom electrode, bottom surface) = 0 V
# V (elsewhere) --> natural boundary conditions (no current external to circuit)
# Temperature:
# T (top electrode, top surface) = 293 K
# T (bottom electrode, bottom surface) = 293 K
# T (vertical right side) --> simple radiative BC into black body at 293 K
# T (horizonal surfaces) --> GapHeatTransfer
# T (water channel) --> simple convective BC into "water" with heat transfer coefficient parameter from Cincotti and temperature of 293 K
# T (elsewhere) --> natural boundary conditions
# Mechanics (not added yet):
# Displacement: --> pinned axial centerpoint along interior surface of powder block, outer die wall
# Pressure: top and bottom surfaces of upper and lower rams, 20.7 MPa
# ramped quickly at simulation start, then held constant
# Interface Conditions:
# V (SS-G upper and G-SS lower interface) --> ElectrostaticContactCondition
# T (SS-G upper and G-SS lower interface) --> ThermalContactCondition
# V (graphite-yttria and graphite-graphite) --> GapHeatTransfer
# T (graphite-yttria and graphite-graphite) --> GapHeatTransfer
# P (graphite-yttria and graphite-graphite) --> Mechanical Contact
# Initial Conditions:
# V = default (0 V)
# T = 293 K
# Applied Mechanical Load: needs to be updated to 6.5kN, was 3.5 kN
#
# Reference for graphite, stainless steel: Cincotti et al, DOI 10.1002/aic.11102
# Assorted references for yttria, listed as comments in input file
initial_temperature = 293 #roughly 600C where the pyrometer kicks in
#initial_porosity=0.36 #Maximum random jammed packing, Donev et al (2004) Science Magazine
[Mesh]
file = ../../../meshes/drsinter_nodalcontact_2d.e
coord_type = RZ
construct_side_list_from_node_list = true
patch_update_strategy = iteration
patch_size = 20
# ghosting_patch_size = 5*patch_size
[]
[Problem]
type = ReferenceResidualProblem
reference_vector = 'ref'
extra_tag_vectors = 'ref'
[]
[Variables]
[temperature_stainless_steel]
initial_condition = ${initial_temperature}
block = stainless_steel
[]
[temperature]
initial_condition = ${initial_temperature}
block = 'graphite_spacers lower_plunger upper_plunger die_wall powder_compact'
[]
[potential_stainless_steel]
block = stainless_steel
[]
[electric_potential]
block = 'graphite_spacers lower_plunger upper_plunger die_wall powder_compact'
[]
[]
[AuxVariables]
[electric_field_x]
family = MONOMIAL #prettier pictures with smoother values
order = FIRST
[]
[electric_field_y]
family = MONOMIAL
order = FIRST
[]
[current_density]
family = NEDELEC_ONE
order = FIRST
[]
[yttria_sigma_aeh]
initial_condition = 2.0e-10 #in units eV/((nV)^2-s-nm)
block = 'powder_compact'
[]
[microapp_potential]
#converted to microapp electronVolts units
block = 'powder_compact'
[]
[E_x]
order = FIRST
family = MONOMIAL
block = 'powder_compact'
[]
[E_y]
order = FIRST
family = MONOMIAL
block = 'powder_compact'
[]
[yttria_current_density_forBC_microapp]
order = FIRST
family = MONOMIAL
block = 'powder_compact'
[]
# [T_infinity]
# initial_condition = ${initial_temperature}
# []
[heatflux_graphite_x]
family = MONOMIAL
order = CONSTANT
block = 'graphite_spacers lower_plunger upper_plunger die_wall'
[]
[heatflux_graphite_y]
family = MONOMIAL
order = CONSTANT
block = 'graphite_spacers lower_plunger upper_plunger die_wall'
[]
[heatflux_stainless_steel_x]
family = MONOMIAL
order = CONSTANT
block = stainless_steel
[]
[heatflux_stainless_steel_y]
family = MONOMIAL
order = CONSTANT
block = stainless_steel
[]
[heatflux_yttria_x]
family = MONOMIAL
order = CONSTANT
block = 'powder_compact'
[]
[heatflux_yttria_y]
family = MONOMIAL
order = CONSTANT
block = 'powder_compact'
[]
[yttria_thermal_conductivity_aeh]
initial_condition = 0.4
[]
[yttria_heat_capacity_volume_avg]
initial_condition = 447.281 #842.2 at 1600K probably? # at 1500K #568.73 at 1000K #447.281 # at 293K
[]
[yttria_density_volume_avg]
initial_condition = 3206.4 ##5010.0*(1-${initial_porosity}) #in kg/m^3
[]
[heat_transfer_radiation]
[]
# [thermal_conductivity]
# family = MONOMIAL
# order = FIRST
# []
[]
[Kernels]
[HeatDiff_graphite]
type = ADHeatConduction
variable = temperature
thermal_conductivity = thermal_conductivity
extra_vector_tags = 'ref'
block = 'graphite_spacers lower_plunger upper_plunger die_wall'
[]
[HeatTdot_graphite]
type = ADHeatConductionTimeDerivative
variable = temperature
specific_heat = heat_capacity
density_name = density
extra_vector_tags = 'ref'
block = 'graphite_spacers lower_plunger upper_plunger die_wall'
[]
[JouleHeating_graphite]
type = ADJouleHeatingSource
variable = temperature
elec = electric_potential
electrical_conductivity = electrical_conductivity
use_displaced_mesh = true
extra_vector_tags = 'ref'
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[electric_graphite]
type = ADMatDiffusion
variable = electric_potential
diffusivity = electrical_conductivity
extra_vector_tags = 'ref'
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[HeatDiff_stainless_steel]
type = ADHeatConduction
variable = temperature_stainless_steel
thermal_conductivity = thermal_conductivity
extra_vector_tags = 'ref'
block = stainless_steel
[]
[HeatTdot_stainless_steel]
type = ADHeatConductionTimeDerivative
variable = temperature_stainless_steel
specific_heat = heat_capacity
density_name = density
extra_vector_tags = 'ref'
block = stainless_steel
[]
[HeatSource_stainless_steel]
type = ADJouleHeatingSource
variable = temperature_stainless_steel
elec = potential_stainless_steel
electrical_conductivity = electrical_conductivity
use_displaced_mesh = true
extra_vector_tags = 'ref'
block = stainless_steel
[]
[electric_stainless_steel]
type = ADMatDiffusion
variable = potential_stainless_steel
diffusivity = electrical_conductivity
extra_vector_tags = 'ref'
block = stainless_steel
[]
[HeatDiff_yttria]
type = ADHeatConduction
variable = temperature
thermal_conductivity = thermal_conductivity #use parsed material property, hope it works
extra_vector_tags = 'ref'
block = powder_compact
[]
[HeatTdot_yttria]
type = ADHeatConductionTimeDerivative
variable = temperature
specific_heat = heat_capacity #use parsed material property
density_name = density
extra_vector_tags = 'ref'
block = powder_compact
[]
[JouleHeating_yttria]
type = ADJouleHeatingSource
variable = temperature
elec = electric_potential
electrical_conductivity = electrical_conductivity
use_displaced_mesh = true
extra_vector_tags = 'ref'
block = powder_compact
[]
[electric_yttria]
type = ADMatDiffusion
variable = electric_potential
diffusivity = electrical_conductivity
extra_vector_tags = 'ref'
block = powder_compact
[]
[]
[AuxKernels]
[electrostatic_calculation_x_graphite_yttria]
type = PotentialToFieldAux
gradient_variable = electric_potential
variable = electric_field_x
sign = negative
component = x
block = 'powder_compact graphite_spacers upper_plunger lower_plunger die_wall'
[]
[electrostatic_calculation_y_graphite_yttria]
type = PotentialToFieldAux
gradient_variable = electric_potential
variable = electric_field_y
sign = negative
component = y
block = 'powder_compact graphite_spacers upper_plunger lower_plunger die_wall'
[]
[electrostatic_calculation_x_stainless_steel]
type = PotentialToFieldAux
gradient_variable = potential_stainless_steel
variable = electric_field_x
sign = negative
component = x
block = stainless_steel
[]
[electrostatic_calculation_y_stainless_steel]
type = PotentialToFieldAux
gradient_variable = potential_stainless_steel
variable = electric_field_y
sign = negative
component = y
block = stainless_steel
[]
[current_density_graphite_yttria]
type = ADCurrentDensity
variable = current_density
potential = electric_potential
block = 'powder_compact graphite_spacers upper_plunger lower_plunger die_wall'
[]
[current_density_stainless_steel]
type = ADCurrentDensity
variable = current_density
potential = potential_stainless_steel
block = stainless_steel
[]
[microapp_potential]
type = ParsedAux
variable = microapp_potential
coupled_variables = electric_potential
expression = 'electric_potential*1e9' #convert from V to nV
block = 'powder_compact'
[]
[E_x]
type = VariableGradientComponent
variable = E_x
gradient_variable = electric_potential
component = x
block = 'powder_compact'
[]
[E_y]
type = VariableGradientComponent
variable = E_y
gradient_variable = electric_potential
component = y
block = 'powder_compact'
[]
[yttria_current_density_forBC_microapp]
type = ParsedAux
variable = yttria_current_density_forBC_microapp
coupled_variables = 'electrical_conductivity E_y'
expression = '-1.0*electrical_conductivity*E_y'
block = 'powder_compact'
[]
[heat_flux_graphite_x]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature
variable = heatflux_graphite_x
component = x
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[heat_flux_graphite_y]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature
variable = heatflux_graphite_y
component = y
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[heat_flux_stainless_x]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature_stainless_steel
variable = heatflux_stainless_steel_x
block = stainless_steel
component = x
[]
[heat_flux_stainless_y]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature_stainless_steel
variable = heatflux_stainless_steel_y
block = stainless_steel
component = y
[]
[heat_flux_yttria_x]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature
variable = heatflux_yttria_x
component = x
block = 'powder_compact'
[]
[heat_flux_yttria_y]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature
variable = heatflux_yttria_y
component = y
block = 'powder_compact'
[]
[heat_transfer_radiation_graphite]
type = ParsedAux
variable = heat_transfer_radiation
boundary = 'outer_radiative_spacers outer_die_wall radiative_upper_plunger radiative_lower_plunger'
coupled_variables = 'temperature'
constant_names = 'boltzmann epsilon temperature_farfield' #published emissivity for graphite is 0.85
constant_expressions = '5.67e-8 0.85 293.0' #roughly room temperature, which is probably too cold
expression = '-boltzmann*epsilon*(temperature^4-temperature_farfield^4)'
[]
[heat_transfer_radiation_stainless_steel]
type = ParsedAux
variable = heat_transfer_radiation
boundary = 'outer_radiative_stainless_steel'
coupled_variables = 'temperature_stainless_steel'
constant_names = 'boltzmann epsilon temperature_farfield' #published emissivity for graphite is 0.85
constant_expressions = '5.67e-8 0.4 293.0' #roughly room temperature, which is probably too cold
expression = '-boltzmann*epsilon*(temperature_stainless_steel^4-temperature_farfield^4)'
[]
[thermal_conductivity_graphite]
type = ADMaterialRealAux
variable = thermal_conductivity
property = thermal_conductivity
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[thermal_conductivity_steel]
type = ADMaterialRealAux
variable = thermal_conductivity
property = thermal_conductivity
block = 'stainless_steel'
[]
[thermal_conductivity_yttria]
type = ADMaterialRealAux
variable = thermal_conductivity
property = thermal_conductivity
block = 'powder_compact'
[]
[electrical_conductivity_graphite]
type = ADMaterialRealAux
variable = electrical_conductivity
property = electrical_conductivity
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[electrical_conductivity_steel]
type = ADMaterialRealAux
variable = electrical_conductivity
property = electrical_conductivity
block = 'stainless_steel'
[]
[electrical_conductivity_yttria]
type = ADMaterialRealAux
variable = electrical_conductivity
property = electrical_conductivity
block = 'powder_compact'
[]
[]
[BCs]
[external_surface_stainless]
type = CoupledVarNeumannBC
boundary = 'outer_radiative_stainless_steel'
variable = temperature_stainless_steel
v = heat_transfer_radiation
[]
[external_surface_graphite]
type = CoupledVarNeumannBC
boundary = 'outer_radiative_spacers outer_die_wall radiative_upper_plunger radiative_lower_plunger'
variable = temperature
v = heat_transfer_radiation
[]
[water_channel]
type = CoupledConvectiveHeatFluxBC
boundary = water_channel
variable = temperature_stainless_steel
T_infinity = ${initial_temperature}
htc = 4725
[]
[temperature_ram_extremes]
type = ADDirichletBC
variable = temperature_stainless_steel
boundary = 'top_upper_steel_ram bottom_lower_steel_ram'
value = 293
[]
[electric_potential_top]
type = ADFunctionNeumannBC
variable = potential_stainless_steel
boundary = top_upper_steel_ram
## This will need to be updated to match the Dr. Sinter geometry
function = 'if(t < 31, (980 / (pi * 0.00155))*((0.141301/4.3625)*t), if(t > 600, 0, 980 / (pi * 0.00155)))' # RMS Current / Cross-sectional Area. Ramping for t < 31s approximately reflects Cincotti et al (DOI: 10.1002/aic.11102) Figure 21(b)
[]
[electric_potential_bottom]
type = ADDirichletBC
variable = potential_stainless_steel
boundary = bottom_lower_steel_ram
value = 0
[]
[]
[Functions]
[graphite_thermal_conductivity_fcn]
type = ParsedFunction
expression = '-4.418e-12*t^4+2.904e-8*t^3-4.688e-5*t^2-0.0316*t+119.659'
[]
# [yttria_thermal_conductivity_fcn] #from the multiapp
# type = ParsedFunction
# expression = '3214.46/(t-147.73)'
# []
[harmonic_mean_thermal_conductivity]
type = ParsedFunction
expression = '2*(-4.418e-12*t^4+2.904e-8*t^3-4.688e-5*t^2-0.0316*t+119.659)*(3214.46/(t-147.73))/((-4.418e-12*t^4+2.904e-8*t^3-4.688e-5*t^2-0.0316*t+119.659)+(3214.46/(t-147.73)))'
# symbol_names = 'k_graphite k_yttria'
# symbol_values = 'graphite_thermal_conductivity_fcn yttria_thermal_conductivity_fcn'
[]
[graphite_electrical_conductivity_fcn]
type = ParsedFunction
expression = '1.0/(-2.705e-15*t^3+1.263e-11*t^2-1.836e-8*t+1.813e-5)'
[]
# [electrical_conductivity_fcn]
# type = ParsedFunction
# # symbol_names = porosity
# # symbol_values = initial_porosity
# expression = '(1-0.62)*2.0025e4*exp(-1.61/8.617343e-5/t)'
# []
[harmonic_mean_electrical_conductivity]
type = ParsedFunction
expression = '2*(1.0/(-2.705e-15*t^3+1.263e-11*t^2-1.836e-8*t+1.813e-5))*((1)*2.0025e4*exp(-1.61/8.617343e-5/t))/((1.0/(-2.705e-15*t^3+1.263e-11*t^2-1.836e-8*t+1.813e-5))+((1)*2.0025e4*exp(-1.61/8.617343e-5/t)))'
# symbol_names = 'k_graphite k_yttria'
# symbol_values = 'graphite_thermal_conductivity_fcn yttria_thermal_conductivity_fcn'
[]
[mechanical_pressure_func]
type = ParsedFunction
symbol_names = 'radius coolant_radius force'
symbol_values = '0.04 7.071e-3 6.5' # 'm kN'
expression = 'force * 1e3 / (pi * (radius^2 - coolant_radius^2))' # (N / m^2)
[]
[]
[InterfaceKernels]
[electric_contact_conductance_ssg]
type = ElectrostaticContactCondition
variable = potential_stainless_steel
neighbor_var = electric_potential
boundary = 'upper_ram_spacer_interface lower_ram_spacer_interface'
mean_hardness = graphite_stainless_mean_hardness
mechanical_pressure = mechanical_pressure_func
[]
[thermal_contact_conductance_calculated_ssg]
type = ThermalContactCondition
variable = temperature_stainless_steel
neighbor_var = temperature
primary_potential = potential_stainless_steel
secondary_potential = electric_potential
primary_thermal_conductivity = thermal_conductivity
secondary_thermal_conductivity = thermal_conductivity
primary_electrical_conductivity = electrical_conductivity
secondary_electrical_conductivity = electrical_conductivity
mean_hardness = graphite_stainless_mean_hardness
mechanical_pressure = mechanical_pressure_func
boundary = 'upper_ram_spacer_interface lower_ram_spacer_interface'
[]
[electric_contact_conductance_gss]
type = ElectrostaticContactCondition
variable = electric_potential
neighbor_var = potential_stainless_steel
boundary = 'upper_ram_spacer_interface lower_ram_spacer_interface'
mean_hardness = graphite_stainless_mean_hardness
mechanical_pressure = mechanical_pressure_func
[]
[thermal_contact_conductance_calculated_gss]
type = ThermalContactCondition
variable = temperature
neighbor_var = temperature_stainless_steel
primary_potential = electric_potential
secondary_potential = potential_stainless_steel
primary_thermal_conductivity = thermal_conductivity
secondary_thermal_conductivity = thermal_conductivity
primary_electrical_conductivity = electrical_conductivity
secondary_electrical_conductivity = electrical_conductivity
mean_hardness = graphite_stainless_mean_hardness
mechanical_pressure = mechanical_pressure_func
boundary = 'upper_ram_spacer_interface lower_ram_spacer_interface'
[]
[]
[ThermalContact]
[upper_plunger_powder_electric]
type = GapHeatTransfer
primary = bottom_upper_plunger
secondary = top_powder_compact
variable = electric_potential
quadrature = true
emissivity_primary = 0.0 #not applicable for electric potential
emissivity_secondary = 0.0 #not applicable for electric potential
gap_geometry_type = PLATE
# gap_conductivity = 1e-23 #rough harmonic mean
gap_conductivity_function = 'harmonic_mean_electrical_conductivity'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[powder_bottom_plunger_electric]
type = GapHeatTransfer
primary = top_lower_plunger
secondary = bottom_powder_compact
variable = electric_potential
quadrature = true
emissivity_primary = 0.0 #not applicable for electric potential
emissivity_secondary = 0.0 #not applicable for electric potential
gap_geometry_type = PLATE
# gap_conductivity = 1e-23 #rough harmonic mean
gap_conductivity_function = 'harmonic_mean_electrical_conductivity'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[powder_die_electric]
type = GapHeatTransfer
primary = inner_die_wall
secondary = outer_powder_compact
variable = electric_potential
quadrature = true
emissivity_primary = 0.0 #0.85 #cincotti 2007, table 2
emissivity_secondary = 0.0 #0.85
# gap_geometry_type = PLATE # Not for vertical surfaces
# gap_conductivity = 1e-23 #rough harmonic mean
gap_conductivity_function = 'harmonic_mean_electrical_conductivity'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[combined_plungers_die_electric]
type = GapHeatTransfer
primary = inner_die_wall
secondary = combined_outer_plungers
variable = electric_potential
quadrature = true
emissivity_primary = 0.0 #not applicable for electric potential
emissivity_secondary = 0.0 #not applicable for electric potential
# gap_geometry_type = PLATE # Not for vertical surfaces
# gap_conductivity = 8.5e4 #graphite, at 500K
gap_conductivity_function = 'graphite_electrical_conductivity_fcn'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
##Thermal Contact between gapped graphite die components
[upper_plunger_spacer_gap_thermal]
type = GapHeatTransfer
primary = spacer_facing_upper_plunger
secondary = plunger_facing_upper_spacer
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.85
gap_geometry_type = PLATE
gap_conductivity_function = 'graphite_thermal_conductivity_fcn'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[upper_diewall_spacer_gap_thermal]
type = GapHeatTransfer
primary = top_die_wall
secondary = bottom_upper_spacer
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.85
gap_geometry_type = PLATE
gap_conductivity_function = 'graphite_thermal_conductivity_fcn'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[lower_plunger_spacer_gap_thermal]
type = GapHeatTransfer
primary = spacer_facing_lower_plunger
secondary = plunger_facing_lower_spacer
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.85
gap_geometry_type = PLATE
gap_conductivity_function = 'graphite_thermal_conductivity_fcn'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[lower_diewall_spacer_gap_thermal]
type = GapHeatTransfer
primary = bottom_die_wall
secondary = top_lower_spacer
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.85
gap_geometry_type = PLATE
gap_conductivity_function = 'graphite_thermal_conductivity_fcn'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[upper_plunger_diewall_gap_thermal]
type = GapHeatTransfer
primary = inner_die_wall ### paired temperature doesn't show on inner die wall, but temperature profile looks reasonable
secondary = die_wall_facing_upper_plunger
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.85
# gap_geometry_type = PLATE # Not for vertical surfaces
gap_conductivity_function = 'graphite_thermal_conductivity_fcn'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[lower_plunger_diewall_gap_thermal]
type = GapHeatTransfer
primary = inner_die_wall ### paired temperature doesn't show on inner die wall, but temperature profile looks reasonable
secondary = die_wall_facing_lower_plunger
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.85
# gap_geometry_type = PLATE # Not for vertical surfaces
gap_conductivity_function = 'graphite_thermal_conductivity_fcn'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
## Thermal Contact between touching components of powder and die
[upper_plunger_powder_thermal]
type = GapHeatTransfer
primary = bottom_upper_plunger
secondary = top_powder_compact
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.3 #estimated from McMahon and Wilder, High Temperature Spectral Emissivity of Yttrium, Samarium, Gadolinium, Ebrium and Lutetium Oxides (1963) Atomic Energy Commission, IS-578, Figure 12
gap_geometry_type = PLATE
gap_conductivity_function = 'harmonic_mean_thermal_conductivity'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[powder_bottom_plunger_thermal]
type = GapHeatTransfer
primary = top_lower_plunger
secondary = bottom_powder_compact #expect more heat transfer from the die to the powder
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.3 #estimated from McMahon and Wilder, High Temperature Spectral Emissivity of Yttrium, Samarium, Gadolinium, Ebrium and Lutetium Oxides (1963) Atomic Energy Commission, IS-578, Figure 12
gap_geometry_type = PLATE
gap_conductivity_function = 'harmonic_mean_thermal_conductivity'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[powder_die_thermal]
type = GapHeatTransfer
primary = inner_die_wall
secondary = outer_powder_compact
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.3 #estimated from McMahon and Wilder, High Temperature Spectral Emissivity of Yttrium, Samarium, Gadolinium, Ebrium and Lutetium Oxides (1963) Atomic Energy Commission, IS-578, Figure 12
# gap_geometry_type = PLATE # Not for vertical surfaces
gap_conductivity_function = 'harmonic_mean_thermal_conductivity'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[combined_plungers_die_thermal]
type = GapHeatTransfer
primary = inner_die_wall
secondary = combined_outer_plungers
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.85
# gap_geometry_type = PLATE # Not for vertical surfaces
gap_conductivity_function = 'graphite_thermal_conductivity_fcn'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[]
[Materials]
## graphite blocks
[graphite_thermal]
type = ADGraphiteThermal
temperature = temperature
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[graphite_density]
type = ADGenericConstantMaterial
prop_names = 'density'
prop_values = 1.750e3 #in kg/m^3 from Cincotti et al 2007, Table 2, doi:10.1002/aic
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[graphite_electrical_conductivity]
type = ADGraphiteElectricalConductivity
temperature = temperature
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
#stainless_steel
[stainless_steel_thermal]
type = ADStainlessSteelThermal
temperature = temperature_stainless_steel
block = stainless_steel
[]
[stainless_steel_density]
type = ADGenericConstantMaterial
prop_names = 'density'
prop_values = 8000
block = stainless_steel
[]
[stainless_steel_electrical_conductivity]
type = ADStainlessSteelElectricalConductivity
temperature = temperature_stainless_steel
block = stainless_steel
[]
# harmonic mean of graphite and stainless steel hardness
[mean_hardness_graphite_stainless_steel]
type = GraphiteStainlessMeanHardness
block = 'graphite_spacers upper_plunger lower_plunger die_wall stainless_steel'
[]
## yttria powder compact
[yttria_thermal_conductivity]
type = ADParsedMaterial
coupled_variables = 'temperature'
expression = '3214.46 / (temperature - 147.73)' #in W/(m-K) #Given from Larry's curve fitting, data from Klein and Croft, JAP, v. 38, p. 1603 and UC report "For Computer Heat Conduction Calculations - A compilation of thermal properties data" by A.L. Edwards, UCRL-50589 (1969)
# coupled_variables = 'thermal_conductivity_aeh'
# expression = 'thermal_conductivity_aeh' #in W/(m-K) directly, for now
property_name = 'thermal_conductivity'
output_properties = thermal_conductivity
outputs = 'exodus'
block = powder_compact
[]
[yttria_specific_heat_capacity]
type = ADParsedMaterial
property_name = heat_capacity
coupled_variables = 'yttria_heat_capacity_volume_avg'
expression = 'yttria_heat_capacity_volume_avg' #in J/(K-kg)
# output_properties = yttria_specific_heat_capacity
# outputs = 'exodus'
block = powder_compact
[]
[yttria_density]
type = ADParsedMaterial
property_name = 'density'
coupled_variables = 'yttria_density_volume_avg'
expression = 'yttria_density_volume_avg'
# output_properties = yttria_density
# outputs = 'exodus'
block = powder_compact
[]
[electrical_conductivity]
type = ADParsedMaterial
# coupled_variables = 'yttria_sigma_aeh'
# expression = 'yttria_sigma_aeh*1.602e8' #converts to units of J/(V^2-m-s)
property_name = 'electrical_conductivity'
output_properties = electrical_conductivity
outputs = 'exodus'
block = powder_compact
# type = ADDerivativeParsedMaterial
# property_name = electrical_conductivity
coupled_variables = 'temperature'
constant_names = 'Q_elec kB prefactor_solid initial_porosity'
constant_expressions = '1.61 8.617343e-5 1.25e-4 0.38'
expression = '(1-initial_porosity) * prefactor_solid * exp(-Q_elec/kB/temperature) * 1.602e8' # in eV/(nV^2 s nm) per chat with Larry, last term converts to units of J/(V^2-m-s)
[]
# Material property converter for DiffusionFluxAux object
[converter]
type = MaterialADConverter
ad_props_in = thermal_conductivity
reg_props_out = nonad_thermal_conductivity
[]
[]
[Executioner]
type = Transient
solve_type = NEWTON
automatic_scaling = true
line_search = 'none'
# compute_scaling_once = false
# force running options
# petsc_options_iname = '-pc_type -snes_linesearch_type -pc_factor_shift_type -pc_factor_shift_amount'
# petsc_options_value = 'lu basic NONZERO 1e-15'
# #mechanical contact options
# petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu superlu_dist'
petsc_options = '-snes_converged_reason -ksp_converged_reason'
nl_forced_its = 1
nl_rel_tol = 2e-5 #1e-6 #2e-5 for with mechanics #was 1e-10, for temperature only
nl_abs_tol = 2e-12 #was 1e-12
nl_max_its = 20
l_max_its = 50
dtmin = 1.0e-4
end_time = 900 #600 #900 #15 minutes, rule of thumb from Dennis is 10 minutes
[Quadrature]
order = FIFTH #required for thermal and mechanical node-face contact
side_order = SEVENTH
[]
[TimeStepper]
type = IterationAdaptiveDT
dt = 0.05
optimal_iterations = 8
iteration_window = 2
[]
[]
[Postprocessors]
[temperature_pp]
type = AverageNodalVariableValue
variable = temperature
block = 'graphite_spacers upper_plunger lower_plunger die_wall powder_compact'
[]
[temperature_stainless_steel_pp]
type = AverageNodalVariableValue
variable = temperature_stainless_steel
block = stainless_steel
[]
[graphite_thermal_conductivity]
type = ElementAverageValue
variable = thermal_conductivity
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[graphite_electrical_conductivity]
type = ElementAverageValue
variable = electrical_conductivity
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[steel_thermal_conductivity]
type = ElementAverageValue
variable = thermal_conductivity
block = stainless_steel
[]
[steel_electrical_conductivity]
type = ElementAverageValue
variable = electrical_conductivity
block = stainless_steel
[]
[yttria_thermal_conductivity]
type = ElementAverageValue
variable = thermal_conductivity
block = powder_compact
[]
[yttria_electrical_conductivity]
type = ElementAverageValue
variable = electrical_conductivity
block = powder_compact
[]
[]
[Outputs]
csv = true
exodus = true
perf_graph = true
# [ckpt]
# type =Checkpoint
# time_step_interval = 1
# num_files = 2
# []
[]
(test/tests/materials/hardness/mean_hardness.i)
# This test demonstrates the capability of the GraphiteStainlessMeanHardness
# ADMaterial object. Using the values below for AT 101 graphite and AISI 304
# stainless steel taken from Cincotti et al (DOI: 10.1002/aic.11102), the object
# calculates the harmonic mean of the hardness value. This is to be used in
# calculating thermal and electrical contact conductances.
#
# Hardness (Pa)
# Stainless Steel 1.92e9
# Graphite 3.5e9
# Harmonic Mean ~2.4797e9
[Mesh]
[generated]
type = GeneratedMeshGenerator
dim = 2
nx = 2
ny = 2
[]
[]
[Problem]
type = FEProblem
solve = false
[]
[Materials]
[mean_hardness]
type = GraphiteStainlessMeanHardness
output_properties = 'graphite_stainless_mean_hardness'
outputs = exodus
[]
[]
[Executioner]
type = Steady
[]
[Outputs]
exodus = true
[]
(test/tests/example_testing/sample_one.i)
# Cincotti Sample I SPS System Electrothermal Example
# Configuration: Two stainless steel electrodes (with cooling channels) with two
# large spacers in-between. RZ, axisymmetric. Reproduces Figures
# 18(a), 18(b), and 19 in Cincotti reference (below)
#
# BCs:
# Potential:
# V (top electrode, top surface) --> Neumann condition specifiying potential
# based on applied RMS Current (1200 A)
# and cross-sectional electrode area (see
# elec_top BC below). Current turned off
# at 1200 s.
# V (bottom electrode, bottom surface) = 0 V
# V (elsewhere) --> natural boundary conditions (no current external to circuit)
# Temperature:
# T (top electrode, top surface) = 293 K
# T (bottom electrode, bottom surface) = 293 K
# T (right side) --> simple radiative BC into black body at 293 K
# T (water channel) --> simple convective BC into "water" with heat transfer
# coefficient parameter from Cincotti and temperature of 293 K
# T (elsewhere) --> natural boundary conditions
# Interface Conditions:
# V (SS-G upper and G-SS lower interface) --> ElectrostaticContactCondition
# T (SS-G upper and G-SS lower interface) --> ThermalContactCondition
# Initial Conditions:
# V = default (0 V)
# T = 293 K
# Applied Mechanical Load: 50 kN
#
# Reference: Cincotti et al, DOI 10.1002/aic.11102
[Mesh]
[import_mesh]
type = FileMeshGenerator
file = spsdie_table1model1_2d.e
[]
coord_type = RZ
[]
[Variables]
[temperature_graphite]
initial_condition = 293.0
block = graphite
[]
[temperature_stainless_steel]
initial_condition = 293.0
block = stainless_steel
[]
[potential_graphite]
block = graphite
[]
[potential_stainless_steel]
block = stainless_steel
[]
[]
[AuxVariables]
[electric_field_r]
family = MONOMIAL
order = CONSTANT
[]
[electric_field_z]
family = MONOMIAL
order = CONSTANT
[]
[current_density]
family = NEDELEC_ONE
order = FIRST
[]
[T_infinity]
initial_condition = 293.0
[]
[heatflux_graphite_r]
family = MONOMIAL
order = CONSTANT
block = graphite
[]
[heatflux_graphite_z]
family = MONOMIAL
order = CONSTANT
block = graphite
[]
[heatflux_stainless_steel_r]
family = MONOMIAL
order = CONSTANT
block = stainless_steel
[]
[heatflux_stainless_steel_z]
family = MONOMIAL
order = CONSTANT
block = stainless_steel
[]
[]
[Kernels]
[HeatDiff_graphite]
type = ADHeatConduction
variable = temperature_graphite
block = graphite
[]
[HeatTdot_graphite]
type = ADHeatConductionTimeDerivative
variable = temperature_graphite
specific_heat = heat_capacity
block = graphite
[]
[HeatSource_graphite]
type = ADJouleHeatingSource
variable = temperature_graphite
elec = potential_graphite
block = graphite
[]
[HeatDiff_stainless_steel]
type = ADHeatConduction
variable = temperature_stainless_steel
block = stainless_steel
[]
[HeatTdot_stainless_steel]
type = ADHeatConductionTimeDerivative
variable = temperature_stainless_steel
specific_heat = heat_capacity
block = stainless_steel
[]
[HeatSource_stainless_steel]
type = ADJouleHeatingSource
variable = temperature_stainless_steel
elec = potential_stainless_steel
block = stainless_steel
[]
[electric_graphite]
type = ADMatDiffusion
variable = potential_graphite
diffusivity = electrical_conductivity
block = graphite
[]
[electric_stainless_steel]
type = ADMatDiffusion
variable = potential_stainless_steel
diffusivity = electrical_conductivity
block = stainless_steel
[]
[]
[AuxKernels]
[electrostatic_calculation_r_graphite]
type = PotentialToFieldAux
gradient_variable = potential_graphite
variable = electric_field_r
sign = negative
component = x
block = graphite
[]
[electrostatic_calculation_z_graphite]
type = PotentialToFieldAux
gradient_variable = potential_graphite
variable = electric_field_z
sign = negative
component = y
block = graphite
[]
[electrostatic_calculation_r_stainless_steel]
type = PotentialToFieldAux
gradient_variable = potential_stainless_steel
variable = electric_field_r
sign = negative
component = x
block = stainless_steel
[]
[electrostatic_calculation_z_stainless_steel]
type = PotentialToFieldAux
gradient_variable = potential_stainless_steel
variable = electric_field_z
sign = negative
component = y
block = stainless_steel
[]
[current_density_graphite]
type = ADCurrentDensity
variable = current_density
potential = potential_graphite
block = graphite
[]
[current_density_stainless_steel]
type = ADCurrentDensity
variable = current_density
potential = potential_stainless_steel
block = stainless_steel
[]
[heat_flux_graphite_r]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature_graphite
variable = heatflux_graphite_r
component = x
block = graphite
[]
[heat_flux_graphite_z]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature_graphite
variable = heatflux_graphite_z
component = y
block = graphite
[]
[heat_flux_stainless_r]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature_stainless_steel
variable = heatflux_stainless_steel_r
block = stainless_steel
component = x
[]
[heat_flux_stainless_z]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature_stainless_steel
variable = heatflux_stainless_steel_z
block = stainless_steel
component = y
[]
[]
[BCs]
[external_surface_stainless]
type = ADCoupledSimpleRadiativeHeatFluxBC
boundary = right_die_stainless_steel
variable = temperature_stainless_steel
T_infinity = T_infinity
emissivity = 0.4
[]
[external_surface_graphite]
type = ADCoupledSimpleRadiativeHeatFluxBC
boundary = right_die_graphite
variable = temperature_graphite
T_infinity = T_infinity
emissivity = 0.85
[]
[water_channel]
type = CoupledConvectiveHeatFluxBC
boundary = water_channel
variable = temperature_stainless_steel
T_infinity = 293
htc = 4725
[]
[temp_top]
type = ADDirichletBC
variable = temperature_stainless_steel
boundary = top_die
value = 293
[]
[temp_bottom]
type = ADDirichletBC
variable = temperature_stainless_steel
boundary = bottom_die
value = 293
[]
[elec_top]
type = ADFunctionNeumannBC
variable = potential_stainless_steel
boundary = top_die
function = 'if(t < 43, (1200 / (pi * 0.00155))*((0.017703/0.75549)*t), if(t > 1200, 0, 1200 / (pi * 0.00155)))' # RMS Current / Cross-sectional Area. Ramping for t < 43s approximately reflects Cincotti et al (DOI: 10.1002/aic.11102) Figure 18(b)
[]
[elec_bottom]
type = ADDirichletBC
variable = potential_stainless_steel
boundary = bottom_die
value = 0
[]
[]
[InterfaceKernels]
[electric_contact_conductance_ssg]
type = ElectrostaticContactCondition
variable = potential_stainless_steel
neighbor_var = potential_graphite
boundary = ssg_interface
mean_hardness = graphite_stainless_mean_hardness
mechanical_pressure = mechanical_pressure_func
[]
[thermal_contact_conductance_calculated_ssg]
type = ThermalContactCondition
variable = temperature_stainless_steel
neighbor_var = temperature_graphite
primary_potential = potential_stainless_steel
secondary_potential = potential_graphite
primary_thermal_conductivity = thermal_conductivity
secondary_thermal_conductivity = thermal_conductivity
primary_electrical_conductivity = electrical_conductivity
secondary_electrical_conductivity = electrical_conductivity
mean_hardness = graphite_stainless_mean_hardness
mechanical_pressure = mechanical_pressure_func
boundary = ssg_interface
[]
[electric_contact_conductance_gss]
type = ElectrostaticContactCondition
variable = potential_graphite
neighbor_var = potential_stainless_steel
boundary = gss_interface
mean_hardness = graphite_stainless_mean_hardness
mechanical_pressure = mechanical_pressure_func
[]
[thermal_contact_conductance_calculated_gss]
type = ThermalContactCondition
variable = temperature_graphite
neighbor_var = temperature_stainless_steel
primary_potential = potential_graphite
secondary_potential = potential_stainless_steel
primary_thermal_conductivity = thermal_conductivity
secondary_thermal_conductivity = thermal_conductivity
primary_electrical_conductivity = electrical_conductivity
secondary_electrical_conductivity = electrical_conductivity
mean_hardness = graphite_stainless_mean_hardness
mechanical_pressure = mechanical_pressure_func
boundary = gss_interface
[]
[]
[Materials]
#graphite
[heat_conductor_graphite]
type = ADGraphiteThermal
temperature = temperature_graphite
block = graphite
[]
[rho_graphite]
type = ADGenericConstantMaterial
prop_names = 'density'
prop_values = 1750
block = graphite
[]
[sigma_graphite]
type = ADGraphiteElectricalConductivity
temperature = temperature_graphite
block = graphite
[]
#stainless_steel
[heat_conductor_stainless_steel]
type = ADStainlessSteelThermal
temperature = temperature_stainless_steel
block = stainless_steel
[]
[rho_stainless_steel]
type = ADGenericConstantMaterial
prop_names = 'density'
prop_values = 8000
block = stainless_steel
[]
[sigma_stainless_steel]
type = ADStainlessSteelElectricalConductivity
temperature = temperature_stainless_steel
block = stainless_steel
[]
# harmonic mean of graphite and stainless steel hardness
[mean_hardness]
type = GraphiteStainlessMeanHardness
[]
# Material property converter for DiffusionFluxAux object
[converter]
type = MaterialADConverter
ad_props_in = thermal_conductivity
reg_props_out = nonad_thermal_conductivity
[]
[]
[Functions]
[mechanical_pressure_func]
type = ParsedFunction
symbol_names = 'radius force'
symbol_values = '0.04 50' # 'm kN'
expression = 'force * 1e3 / (pi * radius^2)' # (N / m^2)
[]
[]
# Tracking data locations specified in Cincotti paper
# [Postprocessors]
# [./temp_tracking]
# type = PointValue
# variable = temperature_graphite
# point = '0 0.28 0'
# [../]
# [./potential_tracking]
# type = PointValue
# variable = potential_stainless_steel
# point = '0.027 0.504 0'
# [../]
# []
[Preconditioning]
[SMP]
type = SMP
full = true
[]
[]
[Executioner]
type = Transient
scheme = bdf2
solve_type = NEWTON
dt = 1
end_time = 3600
petsc_options_iname = '-pc_type'
petsc_options_value = 'lu'
[]
[Outputs]
perf_graph = true
file_base = sample_one_out
active = 'normal_out'
[normal_out]
type = Exodus
[]
[testing_out]
# Due to platform diffs in *really* small auxvariable values
type = Exodus
show = 'temperature_graphite temperature_stainless_steel potential_graphite potential_stainless_steel'
[]
[]
(examples/sps/multiapp/electrothermal_with_phase_field/twoway_lots_of_particles_prototype/engineering_scale_electrothermal_twoway_lots_prototype.i)
# Approximate Dr. Sinter Geometry
# Configuration: Two stainless steel electrodes (with cooling channels) with two
# large spacers, and one die-and-plungers assembly.
# RZ, axisymmetric.
#
# Two-way coupling (thermal and electrical conductivities and integrated heat
# source) of micro-scale app with lots of particles in one location.
#
# BCs:
# Potential:
# V (top electrode, top surface) --> Neumann condition specifiying potential
# based on applied RMS Current (980 A)
# and cross-sectional electrode area (see
# elec_top BC below). Current turned off
# at 1200 s.
# V (bottom electrode, bottom surface) = 0 V
# V (elsewhere) --> natural boundary conditions (no current external to circuit)
# Temperature:
# T (top electrode, top surface) = 293 K
# T (bottom electrode, bottom surface) = 293 K
# T (vertical right side) --> simple radiative BC into black body at 293 K
# T (horizonal surfaces) --> GapHeatTransfer
# T (water channel) --> simple convective BC into "water" with heat transfer coefficient parameter from Cincotti and temperature of 293 K
# T (elsewhere) --> natural boundary conditions
# Mechanics (not added yet):
# Displacement: --> pinned axial centerpoint along interior surface of powder block, outer die wall
# Pressure: top and bottom surfaces of upper and lower rams, 20.7 MPa
# ramped quickly at simulation start, then held constant
# Interface Conditions:
# V (SS-G upper and G-SS lower interface) --> ElectrostaticContactCondition
# T (SS-G upper and G-SS lower interface) --> ThermalContactCondition
# V (graphite-yttria and graphite-graphite) --> GapHeatTransfer
# T (graphite-yttria and graphite-graphite) --> GapHeatTransfer
# P (graphite-yttria and graphite-graphite) --> Mechanical Contact
# Initial Conditions:
# V = default (0 V)
# T = 873 K
# Applied Mechanical Load: needs to be updated to 6.5kN, was 3.5 kN
# Location of micro-app: (x, y, z) = (0.00125, 0.034, 0)
#
# Reference for graphite, stainless steel: Cincotti et al, DOI 10.1002/aic.11102
# Assorted references for yttria, listed as comments in input file
initial_temperature = 873 #roughly 600C where the pyrometer kicks in
#initial_porosity=0.36 #Maximum random jammed packing, Donev et al (2004) Science Magazine
[Mesh]
file = ../../../meshes/drsinter_nodalcontact_2d.e
coord_type = RZ
construct_side_list_from_node_list = true
patch_update_strategy = iteration
patch_size = 20
# ghosting_patch_size = 5*patch_size
[]
[Problem]
type = ReferenceResidualProblem
reference_vector = 'ref'
extra_tag_vectors = 'ref'
[]
[Variables]
[temperature_stainless_steel]
initial_condition = 300 #units of K
block = stainless_steel
[]
[temperature]
initial_condition = ${initial_temperature}
block = 'graphite_spacers lower_plunger upper_plunger die_wall powder_compact'
[]
[potential_stainless_steel]
block = stainless_steel
[]
[electric_potential]
block = 'graphite_spacers lower_plunger upper_plunger die_wall powder_compact'
[]
[]
[AuxVariables]
[electric_field_x]
family = MONOMIAL #prettier pictures with smoother values
order = FIRST
[]
[electric_field_y]
family = MONOMIAL
order = FIRST
[]
[current_density]
family = NEDELEC_ONE
order = FIRST
[]
[yttria_sigma_aeh]
initial_condition = 2.0e-10 #in units eV/((nV)^2-s-nm)
block = 'powder_compact'
[]
[microapp_potential]
#converted to microapp electronVolts units
block = 'powder_compact'
[]
[E_x]
order = FIRST
family = MONOMIAL
block = 'powder_compact'
[]
[E_y]
order = FIRST
family = MONOMIAL
block = 'powder_compact'
[]
[yttria_current_density_forBC_microapp]
order = FIRST
family = MONOMIAL
block = 'powder_compact'
[]
[Q_from_sub]
#this will be in eV/m/s, will need unit conversion to J/m^3/s based on phase-field domain size
order = FIRST
family = LAGRANGE
[]
# [T_infinity]
# initial_condition = ${initial_temperature}
# []
[heatflux_graphite_x]
family = MONOMIAL
order = CONSTANT
block = 'graphite_spacers lower_plunger upper_plunger die_wall'
[]
[heatflux_graphite_y]
family = MONOMIAL
order = CONSTANT
block = 'graphite_spacers lower_plunger upper_plunger die_wall'
[]
[heatflux_stainless_steel_x]
family = MONOMIAL
order = CONSTANT
block = stainless_steel
[]
[heatflux_stainless_steel_y]
family = MONOMIAL
order = CONSTANT
block = stainless_steel
[]
[heatflux_yttria_x]
family = MONOMIAL
order = CONSTANT
block = 'powder_compact'
[]
[heatflux_yttria_y]
family = MONOMIAL
order = CONSTANT
block = 'powder_compact'
[]
[yttria_thermal_conductivity_aeh]
initial_condition = 0.4
[]
[yttria_heat_capacity_volume_avg]
initial_condition = 447.281 #842.2 at 1600K probably? # at 1500K #568.73 at 1000K #447.281 # at 293K
[]
[yttria_density_volume_avg]
initial_condition = 3206.4 ##5010.0*(1-${initial_porosity}) #in kg/m^3
[]
[heat_transfer_radiation]
[]
# [thermal_conductivity]
# family = MONOMIAL
# order = FIRST
# []
[]
[Kernels]
[HeatDiff_graphite]
type = ADHeatConduction
variable = temperature
thermal_conductivity = thermal_conductivity
extra_vector_tags = 'ref'
block = 'graphite_spacers lower_plunger upper_plunger die_wall'
[]
[HeatTdot_graphite]
type = ADHeatConductionTimeDerivative
variable = temperature
specific_heat = heat_capacity
density_name = density
extra_vector_tags = 'ref'
block = 'graphite_spacers lower_plunger upper_plunger die_wall'
[]
[JouleHeating_graphite]
type = ADJouleHeatingSource
variable = temperature
elec = electric_potential
electrical_conductivity = electrical_conductivity
use_displaced_mesh = true
extra_vector_tags = 'ref'
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[electric_graphite]
type = ADMatDiffusion
variable = electric_potential
diffusivity = electrical_conductivity
extra_vector_tags = 'ref'
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[HeatDiff_stainless_steel]
type = ADHeatConduction
variable = temperature_stainless_steel
thermal_conductivity = thermal_conductivity
extra_vector_tags = 'ref'
block = stainless_steel
[]
[HeatTdot_stainless_steel]
type = ADHeatConductionTimeDerivative
variable = temperature_stainless_steel
specific_heat = heat_capacity
density_name = density
extra_vector_tags = 'ref'
block = stainless_steel
[]
[HeatSource_stainless_steel]
type = ADJouleHeatingSource
variable = temperature_stainless_steel
elec = potential_stainless_steel
electrical_conductivity = electrical_conductivity
use_displaced_mesh = true
extra_vector_tags = 'ref'
block = stainless_steel
[]
[electric_stainless_steel]
type = ADMatDiffusion
variable = potential_stainless_steel
diffusivity = electrical_conductivity
extra_vector_tags = 'ref'
block = stainless_steel
[]
[HeatDiff_yttria]
type = ADHeatConduction
variable = temperature
thermal_conductivity = thermal_conductivity #use parsed material property, hope it works
extra_vector_tags = 'ref'
block = powder_compact
[]
[HeatTdot_yttria]
type = ADHeatConductionTimeDerivative
variable = temperature
specific_heat = heat_capacity #use parsed material property
density_name = density
extra_vector_tags = 'ref'
block = powder_compact
[]
[JouleHeating_yttria]
type = ADJouleHeatingSource
variable = temperature
elec = electric_potential
electrical_conductivity = electrical_conductivity
use_displaced_mesh = true
extra_vector_tags = 'ref'
block = powder_compact
[]
[electric_yttria]
type = ADMatDiffusion
variable = electric_potential
diffusivity = electrical_conductivity
extra_vector_tags = 'ref'
block = powder_compact
[]
[]
[AuxKernels]
[electrostatic_calculation_x_graphite_yttria]
type = PotentialToFieldAux
gradient_variable = electric_potential
variable = electric_field_x
sign = negative
component = x
block = 'powder_compact graphite_spacers upper_plunger lower_plunger die_wall'
[]
[electrostatic_calculation_y_graphite_yttria]
type = PotentialToFieldAux
gradient_variable = electric_potential
variable = electric_field_y
sign = negative
component = y
block = 'powder_compact graphite_spacers upper_plunger lower_plunger die_wall'
[]
[electrostatic_calculation_x_stainless_steel]
type = PotentialToFieldAux
gradient_variable = potential_stainless_steel
variable = electric_field_x
sign = negative
component = x
block = stainless_steel
[]
[electrostatic_calculation_y_stainless_steel]
type = PotentialToFieldAux
gradient_variable = potential_stainless_steel
variable = electric_field_y
sign = negative
component = y
block = stainless_steel
[]
[current_density_graphite_yttria]
type = ADCurrentDensity
variable = current_density
potential = electric_potential
block = 'powder_compact graphite_spacers upper_plunger lower_plunger die_wall'
[]
[current_density_stainless_steel]
type = ADCurrentDensity
variable = current_density
potential = potential_stainless_steel
block = stainless_steel
[]
[microapp_potential]
type = ParsedAux
variable = microapp_potential
coupled_variables = electric_potential
expression = 'electric_potential*1e9' #convert from V to nV
block = 'powder_compact'
[]
[E_x]
type = VariableGradientComponent
variable = E_x
gradient_variable = electric_potential
component = x
block = 'powder_compact'
[]
[E_y]
type = VariableGradientComponent
variable = E_y
gradient_variable = electric_potential
component = y
block = 'powder_compact'
[]
[yttria_current_density_forBC_microapp]
type = ParsedAux
variable = yttria_current_density_forBC_microapp
coupled_variables = 'electrical_conductivity E_y'
expression = '-1.0*electrical_conductivity*E_y'
block = 'powder_compact'
[]
[heat_flux_graphite_x]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature
variable = heatflux_graphite_x
component = x
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[heat_flux_graphite_y]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature
variable = heatflux_graphite_y
component = y
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[heat_flux_stainless_x]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature_stainless_steel
variable = heatflux_stainless_steel_x
block = stainless_steel
component = x
[]
[heat_flux_stainless_y]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature_stainless_steel
variable = heatflux_stainless_steel_y
block = stainless_steel
component = y
[]
[heat_flux_yttria_x]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature
variable = heatflux_yttria_x
component = x
block = 'powder_compact'
[]
[heat_flux_yttria_y]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature
variable = heatflux_yttria_y
component = y
block = 'powder_compact'
[]
[heat_transfer_radiation_graphite]
type = ParsedAux
variable = heat_transfer_radiation
boundary = 'outer_radiative_spacers outer_die_wall radiative_upper_plunger radiative_lower_plunger'
coupled_variables = 'temperature'
constant_names = 'boltzmann epsilon temperature_farfield' #published emissivity for graphite is 0.85
constant_expressions = '5.67e-8 0.85 293.0' #roughly room temperature, which is probably too cold
expression = '-boltzmann*epsilon*(temperature^4-temperature_farfield^4)'
[]
[heat_transfer_radiation_stainless_steel]
type = ParsedAux
variable = heat_transfer_radiation
boundary = 'outer_radiative_stainless_steel'
coupled_variables = 'temperature_stainless_steel'
constant_names = 'boltzmann epsilon temperature_farfield' #published emissivity for graphite is 0.85
constant_expressions = '5.67e-8 0.4 293.0' #roughly room temperature, which is probably too cold
expression = '-boltzmann*epsilon*(temperature_stainless_steel^4-temperature_farfield^4)'
[]
[thermal_conductivity_graphite]
type = ADMaterialRealAux
variable = thermal_conductivity
property = thermal_conductivity
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[thermal_conductivity_steel]
type = ADMaterialRealAux
variable = thermal_conductivity
property = thermal_conductivity
block = 'stainless_steel'
[]
[thermal_conductivity_yttria]
type = ADMaterialRealAux
variable = thermal_conductivity
property = thermal_conductivity
block = 'powder_compact'
[]
[electrical_conductivity_graphite]
type = ADMaterialRealAux
variable = electrical_conductivity
property = electrical_conductivity
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[electrical_conductivity_steel]
type = ADMaterialRealAux
variable = electrical_conductivity
property = electrical_conductivity
block = 'stainless_steel'
[]
[electrical_conductivity_yttria]
type = ADMaterialRealAux
variable = electrical_conductivity
property = electrical_conductivity
block = 'powder_compact'
[]
[]
[BCs]
[external_surface_stainless]
type = CoupledVarNeumannBC
boundary = 'outer_radiative_stainless_steel'
variable = temperature_stainless_steel
v = heat_transfer_radiation
[]
[external_surface_graphite]
type = CoupledVarNeumannBC
boundary = 'outer_radiative_spacers outer_die_wall radiative_upper_plunger radiative_lower_plunger'
variable = temperature
v = heat_transfer_radiation
[]
[water_channel]
type = CoupledConvectiveHeatFluxBC
boundary = water_channel
variable = temperature_stainless_steel
T_infinity = 300 #units of K
htc = 4725
[]
[temperature_ram_extremes]
type = ADDirichletBC
variable = temperature_stainless_steel
boundary = 'top_upper_steel_ram bottom_lower_steel_ram'
value = 293
[]
[electric_potential_top]
type = ADFunctionNeumannBC
variable = potential_stainless_steel
boundary = top_upper_steel_ram
## This will need to be updated to match the Dr. Sinter geometry
function = 'if(t < 31, (980 / (pi * 0.00155))*((0.141301/4.3625)*t), if(t > 600, 0, 980 / (pi * 0.00155)))' # RMS Current / Cross-sectional Area. Ramping for t < 31s approximately reflects Cincotti et al (DOI: 10.1002/aic.11102) Figure 21(b)
[]
[electric_potential_bottom]
type = ADDirichletBC
variable = potential_stainless_steel
boundary = bottom_lower_steel_ram
value = 0
[]
[]
[Functions]
[graphite_thermal_conductivity_fcn]
type = ParsedFunction
expression = '-4.418e-12*t^4+2.904e-8*t^3-4.688e-5*t^2-0.0316*t+119.659'
[]
# [yttria_thermal_conductivity_fcn] #from the multiapp
# type = ParsedFunction
# expression = '3214.46/(t-147.73)'
# []
[harmonic_mean_thermal_conductivity]
type = ParsedFunction
expression = '2*(-4.418e-12*t^4+2.904e-8*t^3-4.688e-5*t^2-0.0316*t+119.659)*(3214.46/(t-147.73))/((-4.418e-12*t^4+2.904e-8*t^3-4.688e-5*t^2-0.0316*t+119.659)+(3214.46/(t-147.73)))'
# symbol_names = 'k_graphite k_yttria'
# symbol_values = 'graphite_thermal_conductivity_fcn yttria_thermal_conductivity_fcn'
[]
[graphite_electrical_conductivity_fcn]
type = ParsedFunction
expression = '1.0/(-2.705e-15*t^3+1.263e-11*t^2-1.836e-8*t+1.813e-5)'
[]
# [electrical_conductivity_fcn]
# type = ParsedFunction
# # symbol_names = porosity
# # symbol_values = initial_porosity
# expression = '(1-0.62)*2.0025e4*exp(-1.61/8.617343e-5/t)'
# []
[harmonic_mean_electrical_conductivity]
type = ParsedFunction
expression = '2*(1.0/(-2.705e-15*t^3+1.263e-11*t^2-1.836e-8*t+1.813e-5))*((1)*2.0025e4*exp(-1.61/8.617343e-5/t))/((1.0/(-2.705e-15*t^3+1.263e-11*t^2-1.836e-8*t+1.813e-5))+((1)*2.0025e4*exp(-1.61/8.617343e-5/t)))'
# symbol_names = 'k_graphite k_yttria'
# symbol_values = 'graphite_thermal_conductivity_fcn yttria_thermal_conductivity_fcn'
[]
[mechanical_pressure_func]
type = ParsedFunction
symbol_names = 'radius coolant_radius force'
symbol_values = '0.04 7.071e-3 6.5' # 'm kN'
expression = 'force * 1e3 / (pi * (radius^2 - coolant_radius^2))' # (N / m^2)
[]
[]
[InterfaceKernels]
[electric_contact_conductance_ssg]
type = ElectrostaticContactCondition
variable = potential_stainless_steel
neighbor_var = electric_potential
boundary = 'upper_ram_spacer_interface lower_ram_spacer_interface'
mean_hardness = graphite_stainless_mean_hardness
mechanical_pressure = mechanical_pressure_func
[]
[thermal_contact_conductance_calculated_ssg]
type = ThermalContactCondition
variable = temperature_stainless_steel
neighbor_var = temperature
primary_potential = potential_stainless_steel
secondary_potential = electric_potential
primary_thermal_conductivity = thermal_conductivity
secondary_thermal_conductivity = thermal_conductivity
primary_electrical_conductivity = electrical_conductivity
secondary_electrical_conductivity = electrical_conductivity
mean_hardness = graphite_stainless_mean_hardness
mechanical_pressure = mechanical_pressure_func
boundary = 'upper_ram_spacer_interface lower_ram_spacer_interface'
[]
[electric_contact_conductance_gss]
type = ElectrostaticContactCondition
variable = electric_potential
neighbor_var = potential_stainless_steel
boundary = 'upper_ram_spacer_interface lower_ram_spacer_interface'
mean_hardness = graphite_stainless_mean_hardness
mechanical_pressure = mechanical_pressure_func
[]
[thermal_contact_conductance_calculated_gss]
type = ThermalContactCondition
variable = temperature
neighbor_var = temperature_stainless_steel
primary_potential = electric_potential
secondary_potential = potential_stainless_steel
primary_thermal_conductivity = thermal_conductivity
secondary_thermal_conductivity = thermal_conductivity
primary_electrical_conductivity = electrical_conductivity
secondary_electrical_conductivity = electrical_conductivity
mean_hardness = graphite_stainless_mean_hardness
mechanical_pressure = mechanical_pressure_func
boundary = 'upper_ram_spacer_interface lower_ram_spacer_interface'
[]
[]
[ThermalContact]
[upper_plunger_powder_electric]
type = GapHeatTransfer
primary = bottom_upper_plunger
secondary = top_powder_compact
variable = electric_potential
quadrature = true
emissivity_primary = 0.0 #not applicable for electric potential
emissivity_secondary = 0.0 #not applicable for electric potential
gap_geometry_type = PLATE
# gap_conductivity = 1e-23 #rough harmonic mean
gap_conductivity_function = 'harmonic_mean_electrical_conductivity'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[powder_bottom_plunger_electric]
type = GapHeatTransfer
primary = top_lower_plunger
secondary = bottom_powder_compact
variable = electric_potential
quadrature = true
emissivity_primary = 0.0 #not applicable for electric potential
emissivity_secondary = 0.0 #not applicable for electric potential
gap_geometry_type = PLATE
# gap_conductivity = 1e-23 #rough harmonic mean
gap_conductivity_function = 'harmonic_mean_electrical_conductivity'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[powder_die_electric]
type = GapHeatTransfer
primary = inner_die_wall
secondary = outer_powder_compact
variable = electric_potential
quadrature = true
emissivity_primary = 0.0 #0.85 #cincotti 2007, table 2
emissivity_secondary = 0.0 #0.85
# gap_geometry_type = PLATE # Not for vertical surfaces
# gap_conductivity = 1e-23 #rough harmonic mean
gap_conductivity_function = 'harmonic_mean_electrical_conductivity'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[combined_plungers_die_electric]
type = GapHeatTransfer
primary = inner_die_wall
secondary = combined_outer_plungers
variable = electric_potential
quadrature = true
emissivity_primary = 0.0 #not applicable for electric potential
emissivity_secondary = 0.0 #not applicable for electric potential
# gap_geometry_type = PLATE # Not for vertical surfaces
# gap_conductivity = 8.5e4 #graphite, at 500K
gap_conductivity_function = 'graphite_electrical_conductivity_fcn'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
##Thermal Contact between gapped graphite die components
[upper_plunger_spacer_gap_thermal]
type = GapHeatTransfer
primary = spacer_facing_upper_plunger
secondary = plunger_facing_upper_spacer
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.85
gap_geometry_type = PLATE
gap_conductivity_function = 'graphite_thermal_conductivity_fcn'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[upper_diewall_spacer_gap_thermal]
type = GapHeatTransfer
primary = top_die_wall
secondary = bottom_upper_spacer
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.85
gap_geometry_type = PLATE
gap_conductivity_function = 'graphite_thermal_conductivity_fcn'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[lower_plunger_spacer_gap_thermal]
type = GapHeatTransfer
primary = spacer_facing_lower_plunger
secondary = plunger_facing_lower_spacer
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.85
gap_geometry_type = PLATE
gap_conductivity_function = 'graphite_thermal_conductivity_fcn'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[lower_diewall_spacer_gap_thermal]
type = GapHeatTransfer
primary = bottom_die_wall
secondary = top_lower_spacer
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.85
gap_geometry_type = PLATE
gap_conductivity_function = 'graphite_thermal_conductivity_fcn'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[upper_plunger_diewall_gap_thermal]
type = GapHeatTransfer
primary = inner_die_wall ### paired temperature doesn't show on inner die wall, but temperature profile looks reasonable
secondary = die_wall_facing_upper_plunger
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.85
# gap_geometry_type = PLATE # Not for vertical surfaces
gap_conductivity_function = 'graphite_thermal_conductivity_fcn'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[lower_plunger_diewall_gap_thermal]
type = GapHeatTransfer
primary = inner_die_wall ### paired temperature doesn't show on inner die wall, but temperature profile looks reasonable
secondary = die_wall_facing_lower_plunger
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.85
# gap_geometry_type = PLATE # Not for vertical surfaces
gap_conductivity_function = 'graphite_thermal_conductivity_fcn'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
## Thermal Contact between touching components of powder and die
[upper_plunger_powder_thermal]
type = GapHeatTransfer
primary = bottom_upper_plunger
secondary = top_powder_compact
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.3 #estimated from McMahon and Wilder, High Temperature Spectral Emissivity of Yttrium, Samarium, Gadolinium, Ebrium and Lutetium Oxides (1963) Atomic Energy Commission, IS-578, Figure 12
gap_geometry_type = PLATE
gap_conductivity_function = 'harmonic_mean_thermal_conductivity'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[powder_bottom_plunger_thermal]
type = GapHeatTransfer
primary = top_lower_plunger
secondary = bottom_powder_compact #expect more heat transfer from the die to the powder
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.3 #estimated from McMahon and Wilder, High Temperature Spectral Emissivity of Yttrium, Samarium, Gadolinium, Ebrium and Lutetium Oxides (1963) Atomic Energy Commission, IS-578, Figure 12
gap_geometry_type = PLATE
gap_conductivity_function = 'harmonic_mean_thermal_conductivity'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[powder_die_thermal]
type = GapHeatTransfer
primary = inner_die_wall
secondary = outer_powder_compact
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.3 #estimated from McMahon and Wilder, High Temperature Spectral Emissivity of Yttrium, Samarium, Gadolinium, Ebrium and Lutetium Oxides (1963) Atomic Energy Commission, IS-578, Figure 12
# gap_geometry_type = PLATE # Not for vertical surfaces
gap_conductivity_function = 'harmonic_mean_thermal_conductivity'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[combined_plungers_die_thermal]
type = GapHeatTransfer
primary = inner_die_wall
secondary = combined_outer_plungers
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.85
# gap_geometry_type = PLATE # Not for vertical surfaces
gap_conductivity_function = 'graphite_thermal_conductivity_fcn'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[]
[Materials]
## graphite blocks
[graphite_thermal]
type = ADGraphiteThermal
temperature = temperature
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[graphite_density]
type = ADGenericConstantMaterial
prop_names = 'density'
prop_values = 1.750e3 #in kg/m^3 from Cincotti et al 2007, Table 2, doi:10.1002/aic
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[graphite_electrical_conductivity]
type = ADGraphiteElectricalConductivity
temperature = temperature
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
#stainless_steel
[stainless_steel_thermal]
type = ADStainlessSteelThermal
temperature = temperature_stainless_steel
block = stainless_steel
[]
[stainless_steel_density]
type = ADGenericConstantMaterial
prop_names = 'density'
prop_values = 8000
block = stainless_steel
[]
[stainless_steel_electrical_conductivity]
type = ADStainlessSteelElectricalConductivity
temperature = temperature_stainless_steel
block = stainless_steel
[]
# harmonic mean of graphite and stainless steel hardness
[mean_hardness_graphite_stainless_steel]
type = GraphiteStainlessMeanHardness
block = 'graphite_spacers upper_plunger lower_plunger die_wall stainless_steel'
[]
## yttria powder compact
[yttria_thermal_conductivity]
type = ADParsedMaterial
# coupled_variables = 'temperature'
# expression = '3214.46 / (temperature - 147.73)' #in W/(m-K) #Given from Larry's curve fitting, data from Klein and Croft, JAP, v. 38, p. 1603 and UC report "For Computer Heat Conduction Calculations - A compilation of thermal properties data" by A.L. Edwards, UCRL-50589 (1969)
coupled_variables = 'yttria_thermal_conductivity_aeh'
expression = 'yttria_thermal_conductivity_aeh' #in W/(m-K) directly, for now
property_name = 'thermal_conductivity'
output_properties = thermal_conductivity
outputs = 'exodus'
block = powder_compact
[]
[yttria_specific_heat_capacity]
type = ADParsedMaterial
property_name = heat_capacity
coupled_variables = 'yttria_heat_capacity_volume_avg'
expression = 'yttria_heat_capacity_volume_avg' #in J/(K-kg)
# output_properties = yttria_specific_heat_capacity
# outputs = 'exodus'
block = powder_compact
[]
[yttria_density]
type = ADParsedMaterial
property_name = 'density'
coupled_variables = 'yttria_density_volume_avg'
expression = 'yttria_density_volume_avg'
# output_properties = yttria_density
# outputs = 'exodus'
block = powder_compact
[]
[electrical_conductivity]
type = ADParsedMaterial
coupled_variables = 'yttria_sigma_aeh'
expression = 'yttria_sigma_aeh*1.602e-10' #converts from eV/(V^2 s nm) to units of J/(V^2-m-s)
property_name = 'electrical_conductivity'
output_properties = electrical_conductivity
outputs = 'exodus'
block = powder_compact
# type = ADDerivativeParsedMaterial
# property_name = electrical_conductivity
# coupled_variables = 'temperature'
# constant_names = 'Q_elec kB prefactor_solid initial_porosity'
# constant_expressions = '1.61 8.617343e-5 1.25e-4 0.38'
# expression = '(1-initial_porosity) * prefactor_solid * exp(-Q_elec/kB/temperature) * 1.602e8' # in eV/(nV^2 s nm) per chat with Larry, last term converts to units of J/(V^2-m-s)
[]
# Material property converter for DiffusionFluxAux object
[converter]
type = MaterialADConverter
ad_props_in = thermal_conductivity
reg_props_out = nonad_thermal_conductivity
[]
[Q_SI]
type = ParsedMaterial
property_name = Q_SI
coupled_variables = 'Q_from_sub'
expression = 'Q_from_sub / 260 / 260 * 0.1602' #divide by domain size and unit conversion to go from eV/S to J/m^3/s
outputs = 'exodus'
[]
[]
[Executioner]
type = Transient
solve_type = NEWTON
automatic_scaling = true
line_search = 'none'
# compute_scaling_once = false
# force running options
# petsc_options_iname = '-pc_type -snes_linesearch_type -pc_factor_shift_type -pc_factor_shift_amount'
# petsc_options_value = 'lu basic NONZERO 1e-15'
# #mechanical contact options
# petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu superlu_dist'
petsc_options = '-snes_converged_reason -ksp_converged_reason'
nl_forced_its = 1
nl_rel_tol = 2e-5 #1e-6 #2e-5 for with mechanics #was 1e-10, for temperature only
nl_abs_tol = 2e-12 #was 1e-12
nl_max_its = 20
l_max_its = 50
dtmin = 1.0e-4
end_time = 900 #600 #900 #15 minutes, rule of thumb from Dennis is 10 minutes
[Quadrature]
order = FIFTH #required for thermal and mechanical node-face contact
side_order = SEVENTH
[]
[TimeStepper]
type = IterationAdaptiveDT
dt = 0.05
optimal_iterations = 8
iteration_window = 2
[]
[]
[Postprocessors]
[temperature_pp]
type = AverageNodalVariableValue
variable = temperature
block = 'graphite_spacers upper_plunger lower_plunger die_wall powder_compact'
[]
[temperature_stainless_steel_pp]
type = AverageNodalVariableValue
variable = temperature_stainless_steel
block = stainless_steel
[]
[graphite_thermal_conductivity]
type = ElementAverageValue
variable = thermal_conductivity
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[graphite_electrical_conductivity]
type = ElementAverageValue
variable = electrical_conductivity
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[steel_thermal_conductivity]
type = ElementAverageValue
variable = thermal_conductivity
block = stainless_steel
[]
[steel_electrical_conductivity]
type = ElementAverageValue
variable = electrical_conductivity
block = stainless_steel
[]
[yttria_thermal_conductivity]
type = ElementAverageValue
variable = thermal_conductivity
block = powder_compact
[]
[yttria_electrical_conductivity]
type = ElementAverageValue
variable = electrical_conductivity
block = powder_compact
[]
[]
[MultiApps]
[micro]
type = TransientMultiApp
# type = CentroidMultiApp # lauches one in the middle of each element so don't need to give positions
#can specify the number of procs
max_procs_per_app = 10 #Can specify more than this, but it will degrade convergence
app_type = MalamuteApp
positions = '0.00125 0.034 0' #roughly the center of element 117 in this mesh
input_files = micro_yttria_thermoelectric_twoway_lots_controls.i
catch_up = true
execute_on = TIMESTEP_BEGIN #the default
[]
[]
[Transfers]
[keff_from_sub]
type = MultiAppPostprocessorInterpolationTransfer
from_multi_app = micro
variable = yttria_thermal_conductivity_aeh
power = 2 #2 is the default value, tutorial uses 1
postprocessor = k_AEH_average
[]
[sigma_aeh_eff_from_sub]
type = MultiAppPostprocessorInterpolationTransfer
from_multi_app = micro
variable = yttria_sigma_aeh
power = 2 #2 is the default value, tutorial uses 1
postprocessor = sigma_y_AEH
[]
[Q_from_sub]
type = MultiAppPostprocessorInterpolationTransfer
from_multi_app = micro
variable = Q_from_sub #This is the integrated heat produced in the phase-field simulation in eV/m/s
power = 2 #2 is the default value, tutorial uses 1
postprocessor = Q_joule_total
[]
[temperature_to_sub]
type = MultiAppVariableValueSampleTransfer
to_multi_app = micro
source_variable = temperature
variable = T
[]
[temperature_to_sub_postproc]
type = MultiAppVariableValueSamplePostprocessorTransfer
to_multi_app = micro
source_variable = temperature
postprocessor = T_postproc
[]
[potential_to_sub_postproc]
type = MultiAppVariableValueSamplePostprocessorTransfer
to_multi_app = micro
source_variable = electric_potential
postprocessor = V_postproc
[]
[micro_field_pp_to_sub]
type = MultiAppVariableValueSamplePostprocessorTransfer
to_multi_app = micro
source_variable = E_y
postprocessor = Ey_in
[]
[]
[Outputs]
csv = true
exodus = true
perf_graph = true
# [ckpt]
# type =Checkpoint
# time_step_interval = 1
# num_files = 2
# []
[]
(examples/sps/multiapp/complete_geometry/electrothermal/engineering_scale_electrothermal_goofycontact.i)
# Approximate Dr. Sinter Geometry
# Configuration: Two stainless steel electrodes (with cooling channels) with two
# large spacers, and one die-and-plungers assembly.
# RZ, axisymmetric.
# BCs:
# Potential:
# V (top electrode, top surface) --> Neumann condition specifiying potential
# based on applied RMS Current (980 A)
# and cross-sectional electrode area (see
# elec_top BC below). Current turned off
# at 1200 s.
# V (bottom electrode, bottom surface) = 0 V
# V (elsewhere) --> natural boundary conditions (no current external to circuit)
# Temperature:
# T (top electrode, top surface) = 293 K
# T (bottom electrode, bottom surface) = 293 K
# T (vertical right side) --> simple radiative BC into black body at 293 K
# T (horizonal surfaces) --> GapHeatTransfer
# T (water channel) --> simple convective BC into "water" with heat transfer coefficient parameter from Cincotti and temperature of 293 K
# T (elsewhere) --> natural boundary conditions
# Mechanics (not added yet):
# Displacement: --> pinned axial centerpoint along interior surface of powder block, outer die wall
# Pressure: top and bottom surfaces of upper and lower rams, 20.7 MPa
# ramped quickly at simulation start, then held constant
# Interface Conditions:
# V (SS-G upper and G-SS lower interface) --> ElectrostaticContactCondition
# T (SS-G upper and G-SS lower interface) --> ThermalContactCondition
# V (graphite-yttria and graphite-graphite) --> GapHeatTransfer
# T (graphite-yttria and graphite-graphite) --> GapHeatTransfer
# P (graphite-yttria and graphite-graphite) --> Mechanical Contact
# Initial Conditions:
# V = default (0 V)
# T = 293 K
# Applied Mechanical Load: needs to be updated to 6.5kN, was 3.5 kN
#
# Reference for graphite, stainless steel: Cincotti et al, DOI 10.1002/aic.11102
# Assorted references for yttria, listed as comments in input file
initial_temperature = 293 #roughly 600C where the pyrometer kicks in
#initial_porosity=0.36 #Maximum random jammed packing, Donev et al (2004) Science Magazine
[Mesh]
file = ../../../meshes/drsinter_nodalcontact_2d.e
coord_type = RZ
construct_side_list_from_node_list = true
patch_update_strategy = iteration
patch_size = 20
# ghosting_patch_size = 5*patch_size
[]
[Problem]
type = ReferenceResidualProblem
reference_vector = 'ref'
extra_tag_vectors = 'ref'
[]
[Variables]
[temperature_stainless_steel]
initial_condition = ${initial_temperature}
block = stainless_steel
[]
[temperature]
initial_condition = ${initial_temperature}
block = 'graphite_spacers lower_plunger upper_plunger die_wall powder_compact'
[]
[potential_stainless_steel]
block = stainless_steel
[]
[electric_potential]
block = 'graphite_spacers lower_plunger upper_plunger die_wall powder_compact'
[]
[]
[AuxVariables]
[electric_field_x]
family = MONOMIAL #prettier pictures with smoother values
order = FIRST
[]
[electric_field_y]
family = MONOMIAL
order = FIRST
[]
[current_density]
family = NEDELEC_ONE
order = FIRST
[]
[yttria_sigma_aeh]
initial_condition = 2.0e-10 #in units eV/((nV)^2-s-nm)
block = 'powder_compact'
[]
[microapp_potential]
#converted to microapp electronVolts units
block = 'powder_compact'
[]
[E_x]
order = FIRST
family = MONOMIAL
block = 'powder_compact'
[]
[E_y]
order = FIRST
family = MONOMIAL
block = 'powder_compact'
[]
[yttria_current_density_forBC_microapp]
order = FIRST
family = MONOMIAL
block = 'powder_compact'
[]
# [T_infinity]
# initial_condition = ${initial_temperature}
# []
[heatflux_graphite_x]
family = MONOMIAL
order = CONSTANT
block = 'graphite_spacers lower_plunger upper_plunger die_wall'
[]
[heatflux_graphite_y]
family = MONOMIAL
order = CONSTANT
block = 'graphite_spacers lower_plunger upper_plunger die_wall'
[]
[heatflux_stainless_steel_x]
family = MONOMIAL
order = CONSTANT
block = stainless_steel
[]
[heatflux_stainless_steel_y]
family = MONOMIAL
order = CONSTANT
block = stainless_steel
[]
[heatflux_yttria_x]
family = MONOMIAL
order = CONSTANT
block = 'powder_compact'
[]
[heatflux_yttria_y]
family = MONOMIAL
order = CONSTANT
block = 'powder_compact'
[]
[yttria_thermal_conductivity_aeh]
initial_condition = 0.4
[]
[yttria_heat_capacity_volume_avg]
initial_condition = 447.281 #842.2 at 1600K probably? # at 1500K #568.73 at 1000K #447.281 # at 293K
[]
[yttria_density_volume_avg]
initial_condition = 3206.4 ##5010.0*(1-${initial_porosity}) #in kg/m^3
[]
[heat_transfer_radiation]
[]
# [thermal_conductivity]
# family = MONOMIAL
# order = FIRST
# []
[]
[Kernels]
[HeatDiff_graphite]
type = ADHeatConduction
variable = temperature
thermal_conductivity = thermal_conductivity
extra_vector_tags = 'ref'
block = 'graphite_spacers lower_plunger upper_plunger die_wall'
[]
[HeatTdot_graphite]
type = ADHeatConductionTimeDerivative
variable = temperature
specific_heat = heat_capacity
density_name = density
extra_vector_tags = 'ref'
block = 'graphite_spacers lower_plunger upper_plunger die_wall'
[]
[JouleHeating_graphite]
type = ADJouleHeatingSource
variable = temperature
elec = electric_potential
electrical_conductivity = electrical_conductivity
use_displaced_mesh = true
extra_vector_tags = 'ref'
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[electric_graphite]
type = ADMatDiffusion
variable = electric_potential
diffusivity = electrical_conductivity
extra_vector_tags = 'ref'
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[HeatDiff_stainless_steel]
type = ADHeatConduction
variable = temperature_stainless_steel
thermal_conductivity = thermal_conductivity
extra_vector_tags = 'ref'
block = stainless_steel
[]
[HeatTdot_stainless_steel]
type = ADHeatConductionTimeDerivative
variable = temperature_stainless_steel
specific_heat = heat_capacity
density_name = density
extra_vector_tags = 'ref'
block = stainless_steel
[]
[HeatSource_stainless_steel]
type = ADJouleHeatingSource
variable = temperature_stainless_steel
elec = potential_stainless_steel
electrical_conductivity = electrical_conductivity
use_displaced_mesh = true
extra_vector_tags = 'ref'
block = stainless_steel
[]
[electric_stainless_steel]
type = ADMatDiffusion
variable = potential_stainless_steel
diffusivity = electrical_conductivity
extra_vector_tags = 'ref'
block = stainless_steel
[]
[HeatDiff_yttria]
type = ADHeatConduction
variable = temperature
thermal_conductivity = thermal_conductivity #use parsed material property, hope it works
extra_vector_tags = 'ref'
block = powder_compact
[]
[HeatTdot_yttria]
type = ADHeatConductionTimeDerivative
variable = temperature
specific_heat = heat_capacity #use parsed material property
density_name = density
extra_vector_tags = 'ref'
block = powder_compact
[]
[JouleHeating_yttria]
type = ADJouleHeatingSource
variable = temperature
elec = electric_potential
electrical_conductivity = electrical_conductivity
use_displaced_mesh = true
extra_vector_tags = 'ref'
block = powder_compact
[]
[electric_yttria]
type = ADMatDiffusion
variable = electric_potential
diffusivity = electrical_conductivity
extra_vector_tags = 'ref'
block = powder_compact
[]
[]
[AuxKernels]
[electrostatic_calculation_x_graphite_yttria]
type = PotentialToFieldAux
gradient_variable = electric_potential
variable = electric_field_x
sign = negative
component = x
block = 'powder_compact graphite_spacers upper_plunger lower_plunger die_wall'
[]
[electrostatic_calculation_y_graphite_yttria]
type = PotentialToFieldAux
gradient_variable = electric_potential
variable = electric_field_y
sign = negative
component = y
block = 'powder_compact graphite_spacers upper_plunger lower_plunger die_wall'
[]
[electrostatic_calculation_x_stainless_steel]
type = PotentialToFieldAux
gradient_variable = potential_stainless_steel
variable = electric_field_x
sign = negative
component = x
block = stainless_steel
[]
[electrostatic_calculation_y_stainless_steel]
type = PotentialToFieldAux
gradient_variable = potential_stainless_steel
variable = electric_field_y
sign = negative
component = y
block = stainless_steel
[]
[current_density_graphite_yttria]
type = ADCurrentDensity
variable = current_density
potential = electric_potential
block = 'powder_compact graphite_spacers upper_plunger lower_plunger die_wall'
[]
[current_density_stainless_steel]
type = ADCurrentDensity
variable = current_density
potential = potential_stainless_steel
block = stainless_steel
[]
[microapp_potential]
type = ParsedAux
variable = microapp_potential
coupled_variables = electric_potential
expression = 'electric_potential*1e9' #convert from V to nV
block = 'powder_compact'
[]
[E_x]
type = VariableGradientComponent
variable = E_x
gradient_variable = electric_potential
component = x
block = 'powder_compact'
[]
[E_y]
type = VariableGradientComponent
variable = E_y
gradient_variable = electric_potential
component = y
block = 'powder_compact'
[]
[yttria_current_density_forBC_microapp]
type = ParsedAux
variable = yttria_current_density_forBC_microapp
coupled_variables = 'electrical_conductivity E_y'
expression = '-1.0*electrical_conductivity*E_y'
block = 'powder_compact'
[]
[heat_flux_graphite_x]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature
variable = heatflux_graphite_x
component = x
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[heat_flux_graphite_y]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature
variable = heatflux_graphite_y
component = y
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[heat_flux_stainless_x]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature_stainless_steel
variable = heatflux_stainless_steel_x
block = stainless_steel
component = x
[]
[heat_flux_stainless_y]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature_stainless_steel
variable = heatflux_stainless_steel_y
block = stainless_steel
component = y
[]
[heat_flux_yttria_x]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature
variable = heatflux_yttria_x
component = x
block = 'powder_compact'
[]
[heat_flux_yttria_y]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature
variable = heatflux_yttria_y
component = y
block = 'powder_compact'
[]
[heat_transfer_radiation_graphite]
type = ParsedAux
variable = heat_transfer_radiation
boundary = 'outer_radiative_spacers outer_die_wall radiative_upper_plunger radiative_lower_plunger'
coupled_variables = 'temperature'
constant_names = 'boltzmann epsilon temperature_farfield' #published emissivity for graphite is 0.85
constant_expressions = '5.67e-8 0.85 293.0' #roughly room temperature, which is probably too cold
expression = '-boltzmann*epsilon*(temperature^4-temperature_farfield^4)'
[]
[heat_transfer_radiation_stainless_steel]
type = ParsedAux
variable = heat_transfer_radiation
boundary = 'outer_radiative_stainless_steel'
coupled_variables = 'temperature'
constant_names = 'boltzmann epsilon temperature_farfield' #published emissivity for graphite is 0.85
constant_expressions = '5.67e-8 0.4 293.0' #roughly room temperature, which is probably too cold
expression = '-boltzmann*epsilon*(temperature^4-temperature_farfield^4)'
[]
[thermal_conductivity_graphite]
type = ADMaterialRealAux
variable = thermal_conductivity
property = thermal_conductivity
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[thermal_conductivity_steel]
type = ADMaterialRealAux
variable = thermal_conductivity
property = thermal_conductivity
block = 'stainless_steel'
[]
[thermal_conductivity_yttria]
type = ADMaterialRealAux
variable = thermal_conductivity
property = thermal_conductivity
block = 'powder_compact'
[]
[electrical_conductivity_graphite]
type = ADMaterialRealAux
variable = electrical_conductivity
property = electrical_conductivity
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[electrical_conductivity_steel]
type = ADMaterialRealAux
variable = electrical_conductivity
property = electrical_conductivity
block = 'stainless_steel'
[]
[electrical_conductivity_yttria]
type = ADMaterialRealAux
variable = electrical_conductivity
property = electrical_conductivity
block = 'powder_compact'
[]
[]
[BCs]
[external_surface_stainless]
type = CoupledVarNeumannBC
boundary = 'outer_radiative_stainless_steel'
variable = temperature_stainless_steel
v = heat_transfer_radiation
[]
[external_surface_graphite]
type = CoupledVarNeumannBC
boundary = 'outer_radiative_spacers outer_die_wall radiative_upper_plunger radiative_lower_plunger'
variable = temperature
v = heat_transfer_radiation
[]
[water_channel]
type = CoupledConvectiveHeatFluxBC
boundary = water_channel
variable = temperature_stainless_steel
T_infinity = ${initial_temperature}
htc = 4725
[]
[temperature_ram_extremes]
type = ADDirichletBC
variable = temperature_stainless_steel
boundary = 'top_upper_steel_ram bottom_lower_steel_ram'
value = 293
[]
[electric_potential_top]
type = ADFunctionNeumannBC
variable = potential_stainless_steel
boundary = top_upper_steel_ram
## This will need to be updated to match the Dr. Sinter geometry
function = 'if(t < 31, (980 / (pi * 0.00155))*((0.141301/4.3625)*t), if(t > 600, 0, 980 / (pi * 0.00155)))' # RMS Current / Cross-sectional Area. Ramping for t < 31s approximately reflects Cincotti et al (DOI: 10.1002/aic.11102) Figure 21(b)
[]
[electric_potential_bottom]
type = ADDirichletBC
variable = potential_stainless_steel
boundary = bottom_lower_steel_ram
value = 0
[]
[]
[Functions]
[graphite_thermal_conductivity_fcn]
type = ParsedFunction
expression = '-4.418e-12*t^4+2.904e-8*t^3-4.688e-5*t^2-0.0316*t+119.659'
[]
# [yttria_thermal_conductivity_fcn] #from the multiapp
# type = ParsedFunction
# expression = '3214.46/(t-147.73)'
# []
[harmonic_mean_thermal_conductivity]
type = ParsedFunction
expression = '2*(-4.418e-12*t^4+2.904e-8*t^3-4.688e-5*t^2-0.0316*t+119.659)*(3214.46/(t-147.73))/((-4.418e-12*t^4+2.904e-8*t^3-4.688e-5*t^2-0.0316*t+119.659)+(3214.46/(t-147.73)))'
# symbol_names = 'k_graphite k_yttria'
# symbol_values = 'graphite_thermal_conductivity_fcn yttria_thermal_conductivity_fcn'
[]
[graphite_electrical_conductivity_fcn]
type = ParsedFunction
expression = '1.0/(-2.705e-15*t^3+1.263e-11*t^2-1.836e-8*t+1.813e-5)'
[]
# [electrical_conductivity_fcn]
# type = ParsedFunction
# # symbol_names = porosity
# # symbol_values = initial_porosity
# expression = '(1-0.62)*2.0025e4*exp(-1.61/8.617343e-5/t)'
# []
[harmonic_mean_electrical_conductivity]
type = ParsedFunction
expression = '2*(1.0/(-2.705e-15*t^3+1.263e-11*t^2-1.836e-8*t+1.813e-5))*((1)*2.0025e4*exp(-1.61/8.617343e-5/t))/((1.0/(-2.705e-15*t^3+1.263e-11*t^2-1.836e-8*t+1.813e-5))+((1)*2.0025e4*exp(-1.61/8.617343e-5/t)))'
# symbol_names = 'k_graphite k_yttria'
# symbol_values = 'graphite_thermal_conductivity_fcn yttria_thermal_conductivity_fcn'
[]
[mechanical_pressure_func]
type = ParsedFunction
symbol_names = 'radius force'
symbol_values = '0.04 6.5' # 'm kN'
expression = 'force * 1e3 / (pi * radius^2)' # (N / m^2)
[]
[]
[InterfaceKernels]
[electric_contact_conductance_ssg]
type = ElectrostaticContactCondition
variable = potential_stainless_steel
neighbor_var = electric_potential
boundary = 'upper_ram_spacer_interface lower_ram_spacer_interface'
mean_hardness = graphite_stainless_mean_hardness
mechanical_pressure = mechanical_pressure_func
[]
[thermal_contact_conductance_calculated_ssg]
type = ThermalContactCondition
variable = temperature_stainless_steel
neighbor_var = temperature
primary_potential = potential_stainless_steel
secondary_potential = electric_potential
primary_thermal_conductivity = thermal_conductivity
secondary_thermal_conductivity = thermal_conductivity
primary_electrical_conductivity = electrical_conductivity
secondary_electrical_conductivity = electrical_conductivity
mean_hardness = graphite_stainless_mean_hardness
mechanical_pressure = mechanical_pressure_func
boundary = 'upper_ram_spacer_interface lower_ram_spacer_interface'
[]
[electric_contact_conductance_gss]
type = ElectrostaticContactCondition
variable = electric_potential
neighbor_var = potential_stainless_steel
boundary = 'upper_ram_spacer_interface lower_ram_spacer_interface'
mean_hardness = graphite_stainless_mean_hardness
mechanical_pressure = mechanical_pressure_func
[]
[thermal_contact_conductance_calculated_gss]
type = ThermalContactCondition
variable = temperature
neighbor_var = temperature_stainless_steel
primary_potential = electric_potential
secondary_potential = potential_stainless_steel
primary_thermal_conductivity = thermal_conductivity
secondary_thermal_conductivity = thermal_conductivity
primary_electrical_conductivity = electrical_conductivity
secondary_electrical_conductivity = electrical_conductivity
mean_hardness = graphite_stainless_mean_hardness
mechanical_pressure = mechanical_pressure_func
boundary = 'upper_ram_spacer_interface lower_ram_spacer_interface'
[]
[]
[ThermalContact]
[upper_plunger_powder_electric]
type = GapHeatTransfer
primary = bottom_upper_plunger
secondary = top_powder_compact
variable = electric_potential
quadrature = true
emissivity_primary = 0.0 #not applicable for electric potential
emissivity_secondary = 0.0 #not applicable for electric potential
gap_geometry_type = PLATE
# gap_conductivity = 1e-23 #rough harmonic mean
gap_conductivity_function = 'harmonic_mean_electrical_conductivity'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[powder_bottom_plunger_electric]
type = GapHeatTransfer
primary = top_lower_plunger
secondary = bottom_powder_compact
variable = electric_potential
quadrature = true
emissivity_primary = 0.0 #not applicable for electric potential
emissivity_secondary = 0.0 #not applicable for electric potential
gap_geometry_type = PLATE
# gap_conductivity = 1e-23 #rough harmonic mean
gap_conductivity_function = 'harmonic_mean_electrical_conductivity'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[combined_plungers_die_electric]
#to reproduce a more symmetric temperature profile, move this block to the bottom of this ThermalContact section
type = GapHeatTransfer
primary = inner_die_wall
secondary = combined_outer_plungers
variable = electric_potential
quadrature = true
emissivity_primary = 0.0 #not applicable for electric potential
emissivity_secondary = 0.0 #not applicable for electric potential
# gap_geometry_type = PLATE # Not for vertical surfaces
# gap_conductivity = 8.5e4 #graphite, at 500K
gap_conductivity_function = 'graphite_electrical_conductivity_fcn'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
# appended_property_name = plungers
[]
[powder_die_electric]
type = GapHeatTransfer
primary = inner_die_wall
secondary = outer_powder_compact
variable = electric_potential
quadrature = true
emissivity_primary = 0.0 #0.85 #cincotti 2007, table 2
emissivity_secondary = 0.0 #0.85
# gap_geometry_type = PLATE # Not for vertical surfaces
# gap_conductivity = 1e-23 #rough harmonic mean
gap_conductivity_function = 'harmonic_mean_electrical_conductivity'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
# appended_property_name = powder
[]
[]
# ## Thermal Contact between touching components of powder and die
# [ThermalContact]
# [lower_plunger_die_thermal]
# type = GapHeatTransfer
# primary = inner_die_wall
# secondary = outer_lower_plunger
# variable = temperature
# quadrature = true
# emissivity_primary = 0.85 #cincotti 2007, table 2
# emissivity_secondary = 0.85
# # gap_geometry_type = PLATE # Not for vertical surfaces
# gap_conductivity_function = 'graphite_thermal_conductivity_fcn'
# gap_conductivity_function_variable = temperature
# normal_smoothing_distance = 0.1
# []
# [top_plunger_die_thermal]
# type = GapHeatTransfer
# primary = inner_die_wall
# secondary = outer_upper_plunger
# variable = temperature
# quadrature = true
# emissivity_primary = 0.85 #cincotti 2007, table 2
# emissivity_secondary = 0.85
# # gap_geometry_type = PLATE # Not for vertical surfaces
# gap_conductivity_function = 'graphite_thermal_conductivity_fcn'
# gap_conductivity_function_variable = temperature
# normal_smoothing_distance = 0.1
# []
# [upper_plunger_powder_thermal]
# type = GapHeatTransfer
# primary = bottom_upper_plunger
# secondary = top_powder_compact
# variable = temperature
# quadrature = true
# emissivity_primary = 0.85 #cincotti 2007, table 2
# emissivity_secondary = 0.85
# gap_geometry_type = PLATE
# gap_conductivity_function = 'harmonic_mean_thermal_conductivity'
# gap_conductivity_function_variable = temperature
# normal_smoothing_distance = 0.1
# []
# [powder_die_thermal]
# type = GapHeatTransfer
# primary = inner_die_wall
# secondary = outer_powder_compact
# variable = temperature
# quadrature = true
# emissivity_primary = 0.85 #cincotti 2007, table 2
# emissivity_secondary = 0.3 #estimated from McMahon and Wilder, High Temperature Spectral Emissivity of Yttrium, Samarium, Gadolinium, Ebrium and Lutetium Oxides (1963) Atomic Energy Commission, IS-578, Figure 12
# # gap_geometry_type = PLATE # Not for vertical surfaces
# gap_conductivity_function = 'harmonic_mean_thermal_conductivity'
# gap_conductivity_function_variable = temperature
# normal_smoothing_distance = 0.1
# []
# [powder_bottom_plunger_thermal]
# type = GapHeatTransfer
# primary = top_lower_plunger
# secondary = bottom_powder_compact #expect more heat transfer from the die to the powder
# variable = temperature
# quadrature = true
# emissivity_primary = 0.85 #cincotti 2007, table 2
# emissivity_secondary = 0.3 #estimated from McMahon and Wilder, High Temperature Spectral Emissivity of Yttrium, Samarium, Gadolinium, Ebrium and Lutetium Oxides (1963) Atomic Energy Commission, IS-578, Figure 12
# gap_geometry_type = PLATE
# gap_conductivity_function = 'harmonic_mean_thermal_conductivity'
# gap_conductivity_function_variable = temperature
# normal_smoothing_distance = 0.1
# []
# ##Thermal Contact between gapped graphite die components
# [lower_plunger_spacer_gap_thermal]
# type = GapHeatTransfer
# primary = spacer_facing_lower_plunger
# secondary = plunger_facing_lower_spacer
# variable = temperature
# quadrature = true
# emissivity_primary = 0.85 #cincotti 2007, table 2
# emissivity_secondary = 0.85
# gap_geometry_type = PLATE
# gap_conductivity_function = 'graphite_thermal_conductivity_fcn'
# gap_conductivity_function_variable = temperature
# normal_smoothing_distance = 0.1
# []
# [lower_plunger_diewall_gap_thermal]
# type = GapHeatTransfer
# primary = die_wall_facing_lower_plunger
# secondary = inner_die_wall
# variable = temperature
# quadrature = true
# emissivity_primary = 0.85 #cincotti 2007, table 2
# emissivity_secondary = 0.85
# # gap_geometry_type = PLATE # Not for vertical surfaces
# gap_conductivity_function = 'graphite_thermal_conductivity_fcn'
# gap_conductivity_function_variable = temperature
# normal_smoothing_distance = 0.1
# []
# [lower_diewall_spacer_gap_thermal]
# type = GapHeatTransfer
# primary = bottom_die_wall
# secondary = top_lower_spacer
# variable = temperature
# quadrature = true
# emissivity_primary = 0.85 #cincotti 2007, table 2
# emissivity_secondary = 0.85
# gap_geometry_type = PLATE
# gap_conductivity_function = 'graphite_thermal_conductivity_fcn'
# gap_conductivity_function_variable = temperature
# normal_smoothing_distance = 0.1
# []
# [upper_plunger_spacer_gap_thermal]
# type = GapHeatTransfer
# primary = spacer_facing_upper_plunger
# secondary = plunger_facing_upper_spacer
# variable = temperature
# quadrature = true
# emissivity_primary = 0.85 #cincotti 2007, table 2
# emissivity_secondary = 0.85
# gap_geometry_type = PLATE
# gap_conductivity_function = 'graphite_thermal_conductivity_fcn'
# gap_conductivity_function_variable = temperature
# normal_smoothing_distance = 0.1
# []
# [upper_plunger_diewall_gap_thermal]
# type = GapHeatTransfer
# primary = die_wall_facing_upper_plunger
# secondary = inner_die_wall
# variable = temperature
# quadrature = true
# emissivity_primary = 0.85 #cincotti 2007, table 2
# emissivity_secondary = 0.85
# # gap_geometry_type = PLATE # Not for vertical surfaces
# gap_conductivity_function = 'graphite_thermal_conductivity_fcn'
# gap_conductivity_function_variable = temperature
# normal_smoothing_distance = 0.1
# []
# [upper_diewall_spacer_gap_thermal]
# type = GapHeatTransfer
# primary = top_die_wall
# secondary = bottom_upper_spacer
# variable = temperature
# quadrature = true
# emissivity_primary = 0.85 #cincotti 2007, table 2
# emissivity_secondary = 0.85
# gap_geometry_type = PLATE
# gap_conductivity_function = 'graphite_thermal_conductivity_fcn'
# gap_conductivity_function_variable = temperature
# normal_smoothing_distance = 0.1
# []
# []
[Materials]
## graphite blocks
[graphite_thermal]
type = ADGraphiteThermal
temperature = temperature
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[graphite_density]
type = ADGenericConstantMaterial
prop_names = 'density'
prop_values = 1.750e3 #in kg/m^3 from Cincotti et al 2007, Table 2, doi:10.1002/aic
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[graphite_electrical_conductivity]
type = ADGraphiteElectricalConductivity
temperature = temperature
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
#stainless_steel
[stainless_steel_thermal]
type = ADStainlessSteelThermal
temperature = temperature_stainless_steel
block = stainless_steel
[]
[stainless_steel_density]
type = ADGenericConstantMaterial
prop_names = 'density'
prop_values = 8000
block = stainless_steel
[]
[stainless_steel_electrical_conductivity]
type = ADStainlessSteelElectricalConductivity
temperature = temperature_stainless_steel
block = stainless_steel
[]
# harmonic mean of graphite and stainless steel hardness
[mean_hardness_graphite_stainless_steel]
type = GraphiteStainlessMeanHardness
block = 'graphite_spacers upper_plunger lower_plunger die_wall stainless_steel'
[]
## yttria powder compact
[yttria_thermal_conductivity]
type = ADParsedMaterial
coupled_variables = 'temperature'
expression = '3214.46 / (temperature - 147.73)' #in W/(m-K) #Given from Larry's curve fitting, data from Klein and Croft, JAP, v. 38, p. 1603 and UC report "For Computer Heat Conduction Calculations - A compilation of thermal properties data" by A.L. Edwards, UCRL-50589 (1969)
# coupled_variables = 'thermal_conductivity_aeh'
# expression = 'thermal_conductivity_aeh' #in W/(m-K) directly, for now
property_name = 'thermal_conductivity'
output_properties = thermal_conductivity
outputs = 'exodus'
block = powder_compact
[]
[yttria_specific_heat_capacity]
type = ADParsedMaterial
property_name = heat_capacity
coupled_variables = 'yttria_heat_capacity_volume_avg'
expression = 'yttria_heat_capacity_volume_avg' #in J/(K-kg)
# output_properties = yttria_specific_heat_capacity
# outputs = 'exodus'
block = powder_compact
[]
[yttria_density]
type = ADParsedMaterial
property_name = 'density'
coupled_variables = 'yttria_density_volume_avg'
expression = 'yttria_density_volume_avg'
# output_properties = yttria_density
# outputs = 'exodus'
block = powder_compact
[]
[electrical_conductivity]
type = ADParsedMaterial
# coupled_variables = 'yttria_sigma_aeh'
# expression = 'yttria_sigma_aeh*1.602e8' #converts to units of J/(V^2-m-s)
property_name = 'electrical_conductivity'
output_properties = electrical_conductivity
outputs = 'exodus'
block = powder_compact
# type = ADDerivativeParsedMaterial
# property_name = electrical_conductivity
coupled_variables = 'temperature'
constant_names = 'Q_elec kB prefactor_solid initial_porosity'
constant_expressions = '1.61 8.617343e-5 1.25e-4 0.38'
expression = '(1-initial_porosity) * prefactor_solid * exp(-Q_elec/kB/temperature) * 1.602e8' # in eV/(nV^2 s nm) per chat with Larry, last term converts to units of J/(V^2-m-s)
[]
# Material property converter for DiffusionFluxAux object
[converter]
type = MaterialADConverter
ad_props_in = thermal_conductivity
reg_props_out = nonad_thermal_conductivity
[]
[]
[Executioner]
type = Transient
solve_type = NEWTON
automatic_scaling = true
line_search = 'none'
# compute_scaling_once = false
# force running options
# petsc_options_iname = '-pc_type -snes_linesearch_type -pc_factor_shift_type -pc_factor_shift_amount'
# petsc_options_value = 'lu basic NONZERO 1e-15'
# #mechanical contact options
# petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu superlu_dist'
petsc_options = '-snes_converged_reason -ksp_converged_reason'
nl_forced_its = 1
nl_rel_tol = 2e-5 #1e-6 #2e-5 for with mechanics #was 1e-10, for temperature only
nl_abs_tol = 2e-12 #was 1e-12
nl_max_its = 20
l_max_its = 50
dtmin = 1.0e-4
# num_steps = 1
end_time = 50 #600 #900 #15 minutes, rule of thumb from Dennis is 10 minutes
[Quadrature]
order = FIFTH #required for thermal and mechanical node-face contact
side_order = SEVENTH
[]
[TimeStepper]
type = IterationAdaptiveDT
dt = 0.05
optimal_iterations = 8
iteration_window = 2
[]
[]
[Postprocessors]
[temperature_pp]
type = AverageNodalVariableValue
variable = temperature
block = 'graphite_spacers upper_plunger lower_plunger die_wall powder_compact'
[]
[temperature_stainless_steel_pp]
type = AverageNodalVariableValue
variable = temperature_stainless_steel
block = stainless_steel
[]
[graphite_thermal_conductivity]
type = ElementAverageValue
variable = thermal_conductivity
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[graphite_electrical_conductivity]
type = ElementAverageValue
variable = electrical_conductivity
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[steel_thermal_conductivity]
type = ElementAverageValue
variable = thermal_conductivity
block = stainless_steel
[]
[steel_electrical_conductivity]
type = ElementAverageValue
variable = electrical_conductivity
block = stainless_steel
[]
[yttria_thermal_conductivity]
type = ElementAverageValue
variable = thermal_conductivity
block = powder_compact
[]
[yttria_electrical_conductivity]
type = ElementAverageValue
variable = electrical_conductivity
block = powder_compact
[]
[]
[Outputs]
csv = true
exodus = true
perf_graph = true
# [ckpt]
# type =Checkpoint
# time_step_interval = 1
# num_files = 2
# []
[]
(test/tests/example_testing/sample_four.i)
# Cincotti Sample IV SPS System Electrothermal Example
# Configuration: Two stainless steel electrodes (with cooling channels) with two
# large spacers, two small spacers, and one die-and-plungers
# ensemble in-between. RZ, axisymmetric. Reproduces Figures 21(a)
# and 21(b) in Cincotti reference (below)
#
# BCs:
# Potential:
# V (top electrode, top surface) --> Neumann condition specifiying potential
# based on applied RMS Current (980 A)
# and cross-sectional electrode area (see
# elec_top BC below). Current turned off
# at 1200 s.
# V (bottom electrode, bottom surface) = 0 V
# V (elsewhere) --> natural boundary conditions (no current external to circuit)
# Temperature:
# T (top electrode, top surface) = 293 K
# T (bottom electrode, bottom surface) = 293 K
# T (right side) --> simple radiative BC into black body at 293 K
# T (water channel) --> simple convective BC into "water" with heat transfer coefficient parameter from Cincotti and temperature of 293 K
# T (elsewhere) --> natural boundary conditions
# Interface Conditions:
# V (SS-G upper and G-SS lower interface) --> ElectrostaticContactCondition
# T (SS-G upper and G-SS lower interface) --> ThermalContactCondition
# Initial Conditions:
# V = default (0 V)
# T = 293 K
# Applied Mechanical Load: 3.5 kN
#
# Reference: Cincotti et al, DOI 10.1002/aic.11102
[Mesh]
[import_mesh]
type = FileMeshGenerator
file = spsdie_table1model4_2d.e
[]
coord_type = RZ
[]
[Variables]
[temperature_graphite]
initial_condition = 293.0
block = graphite
[]
[temperature_stainless_steel]
initial_condition = 293.0
block = stainless_steel
[]
[potential_graphite]
block = graphite
[]
[potential_stainless_steel]
block = stainless_steel
[]
[]
[AuxVariables]
[electric_field_r]
family = MONOMIAL
order = CONSTANT
[]
[electric_field_z]
family = MONOMIAL
order = CONSTANT
[]
[current_density]
family = NEDELEC_ONE
order = FIRST
[]
[T_infinity]
initial_condition = 293.0
[]
[heatflux_graphite_r]
family = MONOMIAL
order = CONSTANT
block = graphite
[]
[heatflux_graphite_z]
family = MONOMIAL
order = CONSTANT
block = graphite
[]
[heatflux_stainless_steel_r]
family = MONOMIAL
order = CONSTANT
block = stainless_steel
[]
[heatflux_stainless_steel_z]
family = MONOMIAL
order = CONSTANT
block = stainless_steel
[]
[]
[Kernels]
[HeatDiff_graphite]
type = ADHeatConduction
variable = temperature_graphite
block = graphite
[]
[HeatTdot_graphite]
type = ADHeatConductionTimeDerivative
variable = temperature_graphite
specific_heat = heat_capacity
block = graphite
[]
[HeatSource_graphite]
type = ADJouleHeatingSource
variable = temperature_graphite
elec = potential_graphite
block = graphite
[]
[HeatDiff_stainless_steel]
type = ADHeatConduction
variable = temperature_stainless_steel
block = stainless_steel
[]
[HeatTdot_stainless_steel]
type = ADHeatConductionTimeDerivative
variable = temperature_stainless_steel
specific_heat = heat_capacity
block = stainless_steel
[]
[HeatSource_stainless_steel]
type = ADJouleHeatingSource
variable = temperature_stainless_steel
elec = potential_stainless_steel
block = stainless_steel
[]
[electric_graphite]
type = ADMatDiffusion
variable = potential_graphite
diffusivity = electrical_conductivity
block = graphite
[]
[electric_stainless_steel]
type = ADMatDiffusion
variable = potential_stainless_steel
diffusivity = electrical_conductivity
block = stainless_steel
[]
[]
[AuxKernels]
[electrostatic_calculation_r_graphite]
type = PotentialToFieldAux
gradient_variable = potential_graphite
variable = electric_field_r
sign = negative
component = x
block = graphite
[]
[electrostatic_calculation_z_graphite]
type = PotentialToFieldAux
gradient_variable = potential_graphite
variable = electric_field_z
sign = negative
component = y
block = graphite
[]
[electrostatic_calculation_r_stainless_steel]
type = PotentialToFieldAux
gradient_variable = potential_stainless_steel
variable = electric_field_r
sign = negative
component = x
block = stainless_steel
[]
[electrostatic_calculation_z_stainless_steel]
type = PotentialToFieldAux
gradient_variable = potential_stainless_steel
variable = electric_field_z
sign = negative
component = y
block = stainless_steel
[]
[current_density_graphite]
type = ADCurrentDensity
variable = current_density
potential = potential_graphite
block = graphite
[]
[current_density_stainless_steel]
type = ADCurrentDensity
variable = current_density
potential = potential_stainless_steel
block = stainless_steel
[]
[heat_flux_graphite_r]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature_graphite
variable = heatflux_graphite_r
component = x
block = graphite
[]
[heat_flux_graphite_z]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature_graphite
variable = heatflux_graphite_z
component = y
block = graphite
[]
[heat_flux_stainless_r]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature_stainless_steel
variable = heatflux_stainless_steel_r
block = stainless_steel
component = x
[]
[heat_flux_stainless_z]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature_stainless_steel
variable = heatflux_stainless_steel_z
block = stainless_steel
component = y
[]
[]
[BCs]
[external_surface_stainless]
type = ADCoupledSimpleRadiativeHeatFluxBC
boundary = right_die_stainless_steel
variable = temperature_stainless_steel
T_infinity = T_infinity
emissivity = 0.4
[]
[external_surface_graphite]
type = ADCoupledSimpleRadiativeHeatFluxBC
boundary = right_die_graphite
variable = temperature_graphite
T_infinity = T_infinity
emissivity = 0.85
[]
[water_channel]
type = CoupledConvectiveHeatFluxBC
boundary = water_channel
variable = temperature_stainless_steel
T_infinity = 293
htc = 4725
[]
[temp_top]
type = ADDirichletBC
variable = temperature_stainless_steel
boundary = top_die
value = 293
[]
[temp_bottom]
type = ADDirichletBC
variable = temperature_stainless_steel
boundary = bottom_die
value = 293
[]
[elec_top]
type = ADFunctionNeumannBC
variable = potential_stainless_steel
boundary = top_die
function = 'if(t < 31, (980 / (pi * 0.00155))*((0.141301/4.3625)*t), if(t > 600, 0, 980 / (pi * 0.00155)))' # RMS Current / Cross-sectional Area. Ramping for t < 31s approximately reflects Cincotti et al (DOI: 10.1002/aic.11102) Figure 21(b)
[]
[elec_bottom]
type = ADDirichletBC
variable = potential_stainless_steel
boundary = bottom_die
value = 0
[]
[]
[InterfaceKernels]
[electric_contact_conductance_ssg]
type = ElectrostaticContactCondition
variable = potential_stainless_steel
neighbor_var = potential_graphite
boundary = ssg_interface
mean_hardness = graphite_stainless_mean_hardness
mechanical_pressure = mechanical_pressure_func
[]
[thermal_contact_conductance_calculated_ssg]
type = ThermalContactCondition
variable = temperature_stainless_steel
neighbor_var = temperature_graphite
primary_potential = potential_stainless_steel
secondary_potential = potential_graphite
primary_thermal_conductivity = thermal_conductivity
secondary_thermal_conductivity = thermal_conductivity
primary_electrical_conductivity = electrical_conductivity
secondary_electrical_conductivity = electrical_conductivity
mean_hardness = graphite_stainless_mean_hardness
mechanical_pressure = mechanical_pressure_func
boundary = ssg_interface
[]
[electric_contact_conductance_gss]
type = ElectrostaticContactCondition
variable = potential_graphite
neighbor_var = potential_stainless_steel
boundary = gss_interface
mean_hardness = graphite_stainless_mean_hardness
mechanical_pressure = mechanical_pressure_func
[]
[thermal_contact_conductance_calculated_gss]
type = ThermalContactCondition
variable = temperature_graphite
neighbor_var = temperature_stainless_steel
primary_potential = potential_graphite
secondary_potential = potential_stainless_steel
primary_thermal_conductivity = thermal_conductivity
secondary_thermal_conductivity = thermal_conductivity
primary_electrical_conductivity = electrical_conductivity
secondary_electrical_conductivity = electrical_conductivity
mean_hardness = graphite_stainless_mean_hardness
mechanical_pressure = mechanical_pressure_func
boundary = gss_interface
[]
[]
[Materials]
#graphite
[heat_conductor_graphite]
type = ADGraphiteThermal
temperature = temperature_graphite
block = graphite
[]
[rho_graphite]
type = ADGenericConstantMaterial
prop_names = 'density'
prop_values = 1750
block = graphite
[]
[sigma_graphite]
type = ADGraphiteElectricalConductivity
temperature = temperature_graphite
block = graphite
[]
#stainless_steel
[heat_conductor_stainless_steel]
type = ADStainlessSteelThermal
temperature = temperature_stainless_steel
block = stainless_steel
[]
[rho_stainless_steel]
type = ADGenericConstantMaterial
prop_names = 'density'
prop_values = 8000
block = stainless_steel
[]
[sigma_stainless_steel]
type = ADStainlessSteelElectricalConductivity
temperature = temperature_stainless_steel
block = stainless_steel
[]
# harmonic mean of graphite and stainless steel hardness
[mean_hardness]
type = GraphiteStainlessMeanHardness
[]
# Material property converter for DiffusionFluxAux object
[converter]
type = MaterialADConverter
ad_props_in = thermal_conductivity
reg_props_out = nonad_thermal_conductivity
[]
[]
[Functions]
[mechanical_pressure_func]
type = ParsedFunction
symbol_names = 'radius force'
symbol_values = '0.04 3.5' # 'm kN'
expression = 'force * 1e3 / (pi * radius^2)' # (N / m^2)
[]
[]
# Tracking data locations specified in Cincotti paper
# [Postprocessors]
# [./lower_small_spacer]
# type = PointValue
# variable = temperature_graphite
# point = '0 0.315 0'
# [../]
# [./inside_die]
# type = PointValue
# variable = temperature_graphite
# point = '0.011 0.3525 0'
# [../]
# [./potential_tracking]
# type = PointValue
# variable = potential_stainless_steel
# point = '0.027 0.609 0'
# [../]
# []
[Preconditioning]
[SMP]
type = SMP
full = true
[]
[]
[Executioner]
type = Transient
scheme = bdf2
solve_type = NEWTON
dt = 1
end_time = 1800
petsc_options_iname = '-pc_type'
petsc_options_value = 'lu'
[]
[Outputs]
perf_graph = true
file_base = sample_four_out
active = 'normal_out'
[normal_out]
type = Exodus
[]
[testing_out]
# Due to platform diffs in *really* small auxvariable values
type = Exodus
show = 'temperature_graphite temperature_stainless_steel potential_graphite potential_stainless_steel'
[]
[]
(examples/sps/multiapp/electrothermal_with_phase_field/twoway_initial_prototype/engineering_scale_electrothermal_twoway_prototype.i)
# Approximate Dr. Sinter Geometry
# Configuration: Two stainless steel electrodes (with cooling channels) with two
# large spacers, and one die-and-plungers assembly.
# RZ, axisymmetric.
# BCs:
# Potential:
# V (top electrode, top surface) --> Neumann condition specifiying potential
# based on applied RMS Current (980 A)
# and cross-sectional electrode area (see
# elec_top BC below). Current turned off
# at 1200 s.
# V (bottom electrode, bottom surface) = 0 V
# V (elsewhere) --> natural boundary conditions (no current external to circuit)
# Temperature:
# T (top electrode, top surface) = 293 K
# T (bottom electrode, bottom surface) = 293 K
# T (vertical right side) --> simple radiative BC into black body at 293 K
# T (horizonal surfaces) --> GapHeatTransfer
# T (water channel) --> simple convective BC into "water" with heat transfer coefficient parameter from Cincotti and temperature of 293 K
# T (elsewhere) --> natural boundary conditions
# Mechanics (not added yet):
# Displacement: --> pinned axial centerpoint along interior surface of powder block, outer die wall
# Pressure: top and bottom surfaces of upper and lower rams, 20.7 MPa
# ramped quickly at simulation start, then held constant
# Interface Conditions:
# V (SS-G upper and G-SS lower interface) --> ElectrostaticContactCondition
# T (SS-G upper and G-SS lower interface) --> ThermalContactCondition
# V (graphite-yttria and graphite-graphite) --> GapHeatTransfer
# T (graphite-yttria and graphite-graphite) --> GapHeatTransfer
# P (graphite-yttria and graphite-graphite) --> Mechanical Contact
# Initial Conditions:
# V = default (0 V)
# T = 873 K (~600C)
# Applied Mechanical Load: needs to be updated to 6.5kN, was 3.5 kN
#
# Reference for graphite, stainless steel: Cincotti et al, DOI 10.1002/aic.11102
# Assorted references for yttria, listed as comments in input file
initial_temperature = 873 #roughly 600C where the pyrometer kicks in
#initial_porosity=0.36 #Maximum random jammed packing, Donev et al (2004) Science Magazine
[Mesh]
file = ../../../meshes/drsinter_nodalcontact_2d.e
coord_type = RZ
construct_side_list_from_node_list = true
patch_update_strategy = iteration
patch_size = 20
# ghosting_patch_size = 5*patch_size
[]
[Problem]
type = ReferenceResidualProblem
reference_vector = 'ref'
extra_tag_vectors = 'ref'
[]
[Variables]
[temperature_stainless_steel]
initial_condition = 300 #units of K
block = stainless_steel
[]
[temperature]
initial_condition = ${initial_temperature}
block = 'graphite_spacers lower_plunger upper_plunger die_wall powder_compact'
[]
[potential_stainless_steel]
block = stainless_steel
[]
[electric_potential]
block = 'graphite_spacers lower_plunger upper_plunger die_wall powder_compact'
[]
[]
[AuxVariables]
[electric_field_x]
family = MONOMIAL #prettier pictures with smoother values
order = FIRST
[]
[electric_field_y]
family = MONOMIAL
order = FIRST
[]
[current_density]
family = NEDELEC_ONE
order = FIRST
[]
[yttria_sigma_aeh]
initial_condition = 2.0e-10 #in units eV/((nV)^2-s-nm)
block = 'powder_compact'
[]
[microapp_potential]
#converted to microapp electronVolts units
block = 'powder_compact'
[]
[E_x]
order = FIRST
family = MONOMIAL
block = 'powder_compact'
[]
[E_y]
order = FIRST
family = MONOMIAL
block = 'powder_compact'
[]
[yttria_current_density_forBC_microapp]
order = FIRST
family = MONOMIAL
block = 'powder_compact'
[]
[heatflux_graphite_x]
family = MONOMIAL
order = CONSTANT
block = 'graphite_spacers lower_plunger upper_plunger die_wall'
[]
[heatflux_graphite_y]
family = MONOMIAL
order = CONSTANT
block = 'graphite_spacers lower_plunger upper_plunger die_wall'
[]
[heatflux_stainless_steel_x]
family = MONOMIAL
order = CONSTANT
block = stainless_steel
[]
[heatflux_stainless_steel_y]
family = MONOMIAL
order = CONSTANT
block = stainless_steel
[]
[heatflux_yttria_x]
family = MONOMIAL
order = CONSTANT
block = 'powder_compact'
[]
[heatflux_yttria_y]
family = MONOMIAL
order = CONSTANT
block = 'powder_compact'
[]
[yttria_thermal_conductivity_aeh]
initial_condition = 3.0
[]
[yttria_heat_capacity_volume_avg]
initial_condition = 546.914 # at 873K probably? #842.2 at 1600K probably? # at 1500K #568.73 at 1000K #447.281 # at 293K
[]
[yttria_density_volume_avg]
initial_condition = 3206.4 ##5010.0*(1-${initial_porosity}) #in kg/m^3
[]
[heat_transfer_radiation]
[]
# [thermal_conductivity]
# family = MONOMIAL
# order = FIRST
# []
[Q_from_sub]
#this will be in eV/m/s, will need unit conversion to J/m^3/s based on phase-field domain size
order = FIRST
family = LAGRANGE
[]
[]
[Kernels]
[HeatDiff_graphite]
type = ADHeatConduction
variable = temperature
thermal_conductivity = thermal_conductivity
extra_vector_tags = 'ref'
block = 'graphite_spacers lower_plunger upper_plunger die_wall'
[]
[HeatTdot_graphite]
type = ADHeatConductionTimeDerivative
variable = temperature
specific_heat = heat_capacity
density_name = density
extra_vector_tags = 'ref'
block = 'graphite_spacers lower_plunger upper_plunger die_wall'
[]
[JouleHeating_graphite]
type = ADJouleHeatingSource
variable = temperature
elec = electric_potential
electrical_conductivity = electrical_conductivity
use_displaced_mesh = true
extra_vector_tags = 'ref'
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[electric_graphite]
type = ADMatDiffusion
variable = electric_potential
diffusivity = electrical_conductivity
extra_vector_tags = 'ref'
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[HeatDiff_stainless_steel]
type = ADHeatConduction
variable = temperature_stainless_steel
thermal_conductivity = thermal_conductivity
extra_vector_tags = 'ref'
block = stainless_steel
[]
[HeatTdot_stainless_steel]
type = ADHeatConductionTimeDerivative
variable = temperature_stainless_steel
specific_heat = heat_capacity
density_name = density
extra_vector_tags = 'ref'
block = stainless_steel
[]
[HeatSource_stainless_steel]
type = ADJouleHeatingSource
variable = temperature_stainless_steel
elec = potential_stainless_steel
electrical_conductivity = electrical_conductivity
use_displaced_mesh = true
extra_vector_tags = 'ref'
block = stainless_steel
[]
[electric_stainless_steel]
type = ADMatDiffusion
variable = potential_stainless_steel
diffusivity = electrical_conductivity
extra_vector_tags = 'ref'
block = stainless_steel
[]
[HeatDiff_yttria]
type = ADHeatConduction
variable = temperature
thermal_conductivity = thermal_conductivity #use parsed material property, hope it works
extra_vector_tags = 'ref'
block = powder_compact
[]
[HeatTdot_yttria]
type = ADHeatConductionTimeDerivative
variable = temperature
specific_heat = heat_capacity #use parsed material property
density_name = density
extra_vector_tags = 'ref'
block = powder_compact
[]
[heat_source]
type = MaskedBodyForce
mask = Q_SI
variable = temperature
[]
# [JouleHeating_yttria]
# type = ADJouleHeatingSource
# variable = temperature
# elec = electric_potential
# electrical_conductivity = electrical_conductivity
# use_displaced_mesh = true
# extra_vector_tags = 'ref'
# block = powder_compact
# []
[electric_yttria]
type = ADMatDiffusion
variable = electric_potential
diffusivity = electrical_conductivity
extra_vector_tags = 'ref'
block = powder_compact
[]
[]
[AuxKernels]
[electrostatic_calculation_x_graphite_yttria]
type = PotentialToFieldAux
gradient_variable = electric_potential
variable = electric_field_x
sign = negative
component = x
block = 'powder_compact graphite_spacers upper_plunger lower_plunger die_wall'
[]
[electrostatic_calculation_y_graphite_yttria]
type = PotentialToFieldAux
gradient_variable = electric_potential
variable = electric_field_y
sign = negative
component = y
block = 'powder_compact graphite_spacers upper_plunger lower_plunger die_wall'
[]
[electrostatic_calculation_x_stainless_steel]
type = PotentialToFieldAux
gradient_variable = potential_stainless_steel
variable = electric_field_x
sign = negative
component = x
block = stainless_steel
[]
[electrostatic_calculation_y_stainless_steel]
type = PotentialToFieldAux
gradient_variable = potential_stainless_steel
variable = electric_field_y
sign = negative
component = y
block = stainless_steel
[]
[current_density_graphite_yttria]
type = ADCurrentDensity
variable = current_density
potential = electric_potential
block = 'powder_compact graphite_spacers upper_plunger lower_plunger die_wall'
[]
[current_density_stainless_steel]
type = ADCurrentDensity
variable = current_density
potential = potential_stainless_steel
block = stainless_steel
[]
[microapp_potential]
type = ParsedAux
variable = microapp_potential
coupled_variables = electric_potential
expression = 'electric_potential*1e9' #convert from V to nV
block = 'powder_compact'
[]
[E_x]
type = VariableGradientComponent
variable = E_x
gradient_variable = electric_potential
component = x
block = 'powder_compact'
[]
[E_y]
type = VariableGradientComponent
variable = E_y
gradient_variable = electric_potential
component = y
block = 'powder_compact'
[]
[yttria_current_density_forBC_microapp]
type = ParsedAux
variable = yttria_current_density_forBC_microapp
coupled_variables = 'electrical_conductivity E_y'
expression = '-1.0*electrical_conductivity*E_y'
block = 'powder_compact'
[]
[heat_flux_graphite_x]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature
variable = heatflux_graphite_x
component = x
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[heat_flux_graphite_y]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature
variable = heatflux_graphite_y
component = y
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[heat_flux_stainless_x]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature_stainless_steel
variable = heatflux_stainless_steel_x
block = stainless_steel
component = x
[]
[heat_flux_stainless_y]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature_stainless_steel
variable = heatflux_stainless_steel_y
block = stainless_steel
component = y
[]
[heat_flux_yttria_x]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature
variable = heatflux_yttria_x
component = x
block = 'powder_compact'
[]
[heat_flux_yttria_y]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature
variable = heatflux_yttria_y
component = y
block = 'powder_compact'
[]
[heat_transfer_radiation_graphite]
type = ParsedAux
variable = heat_transfer_radiation
boundary = 'outer_radiative_spacers outer_die_wall radiative_upper_plunger radiative_lower_plunger'
coupled_variables = 'temperature'
constant_names = 'boltzmann epsilon temperature_farfield' #published emissivity for graphite is 0.85
constant_expressions = '5.67e-8 0.85 293.0' #roughly room temperature, which is probably too cold
expression = '-boltzmann*epsilon*(temperature^4-temperature_farfield^4)'
[]
[heat_transfer_radiation_stainless_steel]
type = ParsedAux
variable = heat_transfer_radiation
boundary = 'outer_radiative_stainless_steel'
coupled_variables = 'temperature_stainless_steel'
constant_names = 'boltzmann epsilon temperature_farfield' #published emissivity for graphite is 0.85
constant_expressions = '5.67e-8 0.4 293.0' #roughly room temperature, which is probably too cold
expression = '-boltzmann*epsilon*(temperature_stainless_steel^4-temperature_farfield^4)'
[]
[thermal_conductivity_graphite]
type = ADMaterialRealAux
variable = thermal_conductivity
property = thermal_conductivity
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[thermal_conductivity_steel]
type = ADMaterialRealAux
variable = thermal_conductivity
property = thermal_conductivity
block = 'stainless_steel'
[]
[thermal_conductivity_yttria]
type = ADMaterialRealAux
variable = thermal_conductivity
property = thermal_conductivity
block = 'powder_compact'
[]
[electrical_conductivity_graphite]
type = ADMaterialRealAux
variable = electrical_conductivity
property = electrical_conductivity
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[electrical_conductivity_steel]
type = ADMaterialRealAux
variable = electrical_conductivity
property = electrical_conductivity
block = 'stainless_steel'
[]
[electrical_conductivity_yttria]
type = ADMaterialRealAux
variable = electrical_conductivity
property = electrical_conductivity
block = 'powder_compact'
[]
[]
[BCs]
[external_surface_stainless]
type = CoupledVarNeumannBC
boundary = 'outer_radiative_stainless_steel'
variable = temperature_stainless_steel
v = heat_transfer_radiation
[]
[external_surface_graphite]
type = CoupledVarNeumannBC
boundary = 'outer_radiative_spacers outer_die_wall radiative_upper_plunger radiative_lower_plunger'
variable = temperature
v = heat_transfer_radiation
[]
[water_channel]
type = CoupledConvectiveHeatFluxBC
boundary = water_channel
variable = temperature_stainless_steel
T_infinity = 300 #units of K
htc = 4725
[]
[temperature_ram_extremes]
type = ADDirichletBC
variable = temperature_stainless_steel
boundary = 'top_upper_steel_ram bottom_lower_steel_ram'
value = 293
[]
[electric_potential_top]
type = ADFunctionNeumannBC
variable = potential_stainless_steel
boundary = top_upper_steel_ram
## This will need to be updated to match the Dr. Sinter geometry
function = 'if(t < 31, (980 / (pi * 0.00155))*((0.141301/4.3625)*t), if(t > 600, 0, 980 / (pi * 0.00155)))' # RMS Current / Cross-sectional Area. Ramping for t < 31s approximately reflects Cincotti et al (DOI: 10.1002/aic.11102) Figure 21(b)
[]
[electric_potential_bottom]
type = ADDirichletBC
variable = potential_stainless_steel
boundary = bottom_lower_steel_ram
value = 0
[]
[]
[Functions]
[graphite_thermal_conductivity_fcn]
type = ParsedFunction
expression = '-4.418e-12*t^4+2.904e-8*t^3-4.688e-5*t^2-0.0316*t+119.659'
[]
# [yttria_thermal_conductivity_fcn] #from the multiapp
# type = ParsedFunction
# expression = '3214.46/(t-147.73)'
# []
[harmonic_mean_thermal_conductivity]
type = ParsedFunction
expression = '2*(-4.418e-12*t^4+2.904e-8*t^3-4.688e-5*t^2-0.0316*t+119.659)*(3214.46/(t-147.73))/((-4.418e-12*t^4+2.904e-8*t^3-4.688e-5*t^2-0.0316*t+119.659)+(3214.46/(t-147.73)))'
# symbol_names = 'k_graphite k_yttria'
# symbol_values = 'graphite_thermal_conductivity_fcn yttria_thermal_conductivity_fcn'
[]
[graphite_electrical_conductivity_fcn]
type = ParsedFunction
expression = '1.0/(-2.705e-15*t^3+1.263e-11*t^2-1.836e-8*t+1.813e-5)'
[]
# [electrical_conductivity_fcn]
# type = ParsedFunction
# # symbol_names = porosity
# # symbol_values = initial_porosity
# expression = '(1-0.62)*2.0025e4*exp(-1.61/8.617343e-5/t)'
# []
[harmonic_mean_electrical_conductivity]
type = ParsedFunction
expression = '2*(1.0/(-2.705e-15*t^3+1.263e-11*t^2-1.836e-8*t+1.813e-5))*((1)*2.0025e4*exp(-1.61/8.617343e-5/t))/((1.0/(-2.705e-15*t^3+1.263e-11*t^2-1.836e-8*t+1.813e-5))+((1)*2.0025e4*exp(-1.61/8.617343e-5/t)))'
# symbol_names = 'k_graphite k_yttria'
# symbol_values = 'graphite_thermal_conductivity_fcn yttria_thermal_conductivity_fcn'
[]
[mechanical_pressure_func]
type = ParsedFunction
symbol_names = 'radius coolant_radius force'
symbol_values = '0.04 7.071e-3 6.5' # 'm kN'
expression = 'force * 1e3 / (pi * (radius^2 - coolant_radius^2))' # (N / m^2)
[]
[]
[InterfaceKernels]
[electric_contact_conductance_ssg]
type = ElectrostaticContactCondition
variable = potential_stainless_steel
neighbor_var = electric_potential
boundary = 'upper_ram_spacer_interface lower_ram_spacer_interface'
mean_hardness = graphite_stainless_mean_hardness
mechanical_pressure = mechanical_pressure_func
[]
[thermal_contact_conductance_calculated_ssg]
type = ThermalContactCondition
variable = temperature_stainless_steel
neighbor_var = temperature
primary_potential = potential_stainless_steel
secondary_potential = electric_potential
primary_thermal_conductivity = thermal_conductivity
secondary_thermal_conductivity = thermal_conductivity
primary_electrical_conductivity = electrical_conductivity
secondary_electrical_conductivity = electrical_conductivity
mean_hardness = graphite_stainless_mean_hardness
mechanical_pressure = mechanical_pressure_func
boundary = 'upper_ram_spacer_interface lower_ram_spacer_interface'
[]
[electric_contact_conductance_gss]
type = ElectrostaticContactCondition
variable = electric_potential
neighbor_var = potential_stainless_steel
boundary = 'upper_ram_spacer_interface lower_ram_spacer_interface'
mean_hardness = graphite_stainless_mean_hardness
mechanical_pressure = mechanical_pressure_func
[]
[thermal_contact_conductance_calculated_gss]
type = ThermalContactCondition
variable = temperature
neighbor_var = temperature_stainless_steel
primary_potential = electric_potential
secondary_potential = potential_stainless_steel
primary_thermal_conductivity = thermal_conductivity
secondary_thermal_conductivity = thermal_conductivity
primary_electrical_conductivity = electrical_conductivity
secondary_electrical_conductivity = electrical_conductivity
mean_hardness = graphite_stainless_mean_hardness
mechanical_pressure = mechanical_pressure_func
boundary = 'upper_ram_spacer_interface lower_ram_spacer_interface'
[]
[]
[ThermalContact]
[upper_plunger_powder_electric]
type = GapHeatTransfer
primary = bottom_upper_plunger
secondary = top_powder_compact
variable = electric_potential
quadrature = true
emissivity_primary = 0.0 #not applicable for electric potential
emissivity_secondary = 0.0 #not applicable for electric potential
gap_geometry_type = PLATE
# gap_conductivity = 1e-23 #rough harmonic mean
gap_conductivity_function = 'harmonic_mean_electrical_conductivity'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[powder_bottom_plunger_electric]
type = GapHeatTransfer
primary = top_lower_plunger
secondary = bottom_powder_compact
variable = electric_potential
quadrature = true
emissivity_primary = 0.0 #not applicable for electric potential
emissivity_secondary = 0.0 #not applicable for electric potential
gap_geometry_type = PLATE
# gap_conductivity = 1e-23 #rough harmonic mean
gap_conductivity_function = 'harmonic_mean_electrical_conductivity'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[powder_die_electric]
type = GapHeatTransfer
primary = inner_die_wall
secondary = outer_powder_compact
variable = electric_potential
quadrature = true
emissivity_primary = 0.0 #0.85 #cincotti 2007, table 2
emissivity_secondary = 0.0 #0.85
# gap_geometry_type = PLATE # Not for vertical surfaces
# gap_conductivity = 1e-23 #rough harmonic mean
gap_conductivity_function = 'harmonic_mean_electrical_conductivity'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[combined_plungers_die_electric]
type = GapHeatTransfer
primary = inner_die_wall
secondary = combined_outer_plungers
variable = electric_potential
quadrature = true
emissivity_primary = 0.0 #not applicable for electric potential
emissivity_secondary = 0.0 #not applicable for electric potential
# gap_geometry_type = PLATE # Not for vertical surfaces
# gap_conductivity = 8.5e4 #graphite, at 500K
gap_conductivity_function = 'graphite_electrical_conductivity_fcn'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
##Thermal Contact between gapped graphite die components
[upper_plunger_spacer_gap_thermal]
type = GapHeatTransfer
primary = spacer_facing_upper_plunger
secondary = plunger_facing_upper_spacer
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.85
gap_geometry_type = PLATE
gap_conductivity_function = 'graphite_thermal_conductivity_fcn'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[upper_diewall_spacer_gap_thermal]
type = GapHeatTransfer
primary = top_die_wall
secondary = bottom_upper_spacer
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.85
gap_geometry_type = PLATE
gap_conductivity_function = 'graphite_thermal_conductivity_fcn'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[lower_plunger_spacer_gap_thermal]
type = GapHeatTransfer
primary = spacer_facing_lower_plunger
secondary = plunger_facing_lower_spacer
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.85
gap_geometry_type = PLATE
gap_conductivity_function = 'graphite_thermal_conductivity_fcn'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[lower_diewall_spacer_gap_thermal]
type = GapHeatTransfer
primary = bottom_die_wall
secondary = top_lower_spacer
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.85
gap_geometry_type = PLATE
gap_conductivity_function = 'graphite_thermal_conductivity_fcn'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[upper_plunger_diewall_gap_thermal]
type = GapHeatTransfer
primary = inner_die_wall ### paired temperature doesn't show on inner die wall, but temperature profile looks reasonable
secondary = die_wall_facing_upper_plunger
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.85
# gap_geometry_type = PLATE # Not for vertical surfaces
gap_conductivity_function = 'graphite_thermal_conductivity_fcn'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[lower_plunger_diewall_gap_thermal]
type = GapHeatTransfer
primary = inner_die_wall ### paired temperature doesn't show on inner die wall, but temperature profile looks reasonable
secondary = die_wall_facing_lower_plunger
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.85
# gap_geometry_type = PLATE # Not for vertical surfaces
gap_conductivity_function = 'graphite_thermal_conductivity_fcn'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
## Thermal Contact between touching components of powder and die
[upper_plunger_powder_thermal]
type = GapHeatTransfer
primary = bottom_upper_plunger
secondary = top_powder_compact
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.3 #estimated from McMahon and Wilder, High Temperature Spectral Emissivity of Yttrium, Samarium, Gadolinium, Ebrium and Lutetium Oxides (1963) Atomic Energy Commission, IS-578, Figure 12
gap_geometry_type = PLATE
gap_conductivity_function = 'harmonic_mean_thermal_conductivity'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[powder_bottom_plunger_thermal]
type = GapHeatTransfer
primary = top_lower_plunger
secondary = bottom_powder_compact #expect more heat transfer from the die to the powder
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.3 #estimated from McMahon and Wilder, High Temperature Spectral Emissivity of Yttrium, Samarium, Gadolinium, Ebrium and Lutetium Oxides (1963) Atomic Energy Commission, IS-578, Figure 12
gap_geometry_type = PLATE
gap_conductivity_function = 'harmonic_mean_thermal_conductivity'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[powder_die_thermal]
type = GapHeatTransfer
primary = inner_die_wall
secondary = outer_powder_compact
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.3 #estimated from McMahon and Wilder, High Temperature Spectral Emissivity of Yttrium, Samarium, Gadolinium, Ebrium and Lutetium Oxides (1963) Atomic Energy Commission, IS-578, Figure 12
# gap_geometry_type = PLATE # Not for vertical surfaces
gap_conductivity_function = 'harmonic_mean_thermal_conductivity'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[combined_plungers_die_thermal]
type = GapHeatTransfer
primary = inner_die_wall
secondary = combined_outer_plungers
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.85
# gap_geometry_type = PLATE # Not for vertical surfaces
gap_conductivity_function = 'graphite_thermal_conductivity_fcn'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[]
[Materials]
## graphite blocks
[graphite_thermal]
type = ADGraphiteThermal
temperature = temperature
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[graphite_density]
type = ADGenericConstantMaterial
prop_names = 'density'
prop_values = 1.750e3 #in kg/m^3 from Cincotti et al 2007, Table 2, doi:10.1002/aic
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[graphite_electrical_conductivity]
type = ADGraphiteElectricalConductivity
temperature = temperature
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
#stainless_steel
[stainless_steel_thermal]
type = ADStainlessSteelThermal
temperature = temperature_stainless_steel
block = stainless_steel
[]
[stainless_steel_density]
type = ADGenericConstantMaterial
prop_names = 'density'
prop_values = 8000
block = stainless_steel
[]
[stainless_steel_electrical_conductivity]
type = ADStainlessSteelElectricalConductivity
temperature = temperature_stainless_steel
block = stainless_steel
[]
# harmonic mean of graphite and stainless steel hardness
[mean_hardness_graphite_stainless_steel]
type = GraphiteStainlessMeanHardness
block = 'graphite_spacers upper_plunger lower_plunger die_wall stainless_steel'
[]
## yttria powder compact
[yttria_thermal_conductivity]
type = ADParsedMaterial
# coupled_variables = 'temperature'
# expression = '3214.46 / (temperature - 147.73)' #in W/(m-K) #Given from Larry's curve fitting, data from Klein and Croft, JAP, v. 38, p. 1603 and UC report "For Computer Heat Conduction Calculations - A compilation of thermal properties data" by A.L. Edwards, UCRL-50589 (1969)
coupled_variables = 'yttria_thermal_conductivity_aeh'
expression = 'yttria_thermal_conductivity_aeh' #in W/(m-K) directly, for now
property_name = 'thermal_conductivity'
output_properties = thermal_conductivity
outputs = 'exodus'
block = powder_compact
[]
[yttria_specific_heat_capacity]
type = ADParsedMaterial
property_name = heat_capacity
coupled_variables = 'yttria_heat_capacity_volume_avg'
expression = 'yttria_heat_capacity_volume_avg' #in J/(K-kg)
# output_properties = yttria_specific_heat_capacity
# outputs = 'exodus'
block = powder_compact
[]
[yttria_density]
type = ADParsedMaterial
property_name = 'density'
coupled_variables = 'yttria_density_volume_avg'
expression = 'yttria_density_volume_avg'
# output_properties = yttria_density
# outputs = 'exodus'
block = powder_compact
[]
[electrical_conductivity]
type = ADParsedMaterial
coupled_variables = 'yttria_sigma_aeh'
expression = 'yttria_sigma_aeh*1.602e-10' #converts from eV/(V^2 s nm) to units of J/(V^2-m-s)
property_name = 'electrical_conductivity'
output_properties = electrical_conductivity
outputs = 'exodus'
block = powder_compact
# type = ADDerivativeParsedMaterial
# property_name = electrical_conductivity
# coupled_variables = 'temperature'
# constant_names = 'Q_elec kB prefactor_solid initial_porosity'
# constant_expressions = '1.61 8.617343e-5 1.25e-4 0.38'
# expression = '(1-initial_porosity) * prefactor_solid * exp(-Q_elec/kB/temperature) * 1.602e-10' # in eV/(V^2 s nm) per chat with Larry, last term converts to units of J/(V^2-m-s)
[]
[Q_SI]
type = ParsedMaterial
property_name = Q_SI
coupled_variables = 'Q_from_sub'
expression = 'Q_from_sub / 80 / 40 * 0.1602' #divide by domain size and unit conversion to go from eV/S to J/m^3/s
outputs = 'exodus'
[]
# Material property converter for DiffusionFluxAux object
[converter]
type = MaterialADConverter
ad_props_in = thermal_conductivity
reg_props_out = nonad_thermal_conductivity
[]
[]
[Executioner]
type = Transient
solve_type = NEWTON
automatic_scaling = true
line_search = 'none'
# compute_scaling_once = false
# force running options
# petsc_options_iname = '-pc_type -snes_linesearch_type -pc_factor_shift_type -pc_factor_shift_amount'
# petsc_options_value = 'lu basic NONZERO 1e-15'
# #mechanical contact options
# petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu superlu_dist'
petsc_options = '-snes_converged_reason -ksp_converged_reason'
nl_forced_its = 1
nl_rel_tol = 2e-5 #1e-6 #2e-5 for with mechanics #was 1e-10, for temperature only
nl_abs_tol = 2e-12 #was 1e-12
nl_max_its = 20
l_max_its = 50
dtmin = 1.0e-4
end_time = 900 #600 #900 #15 minutes, rule of thumb from Dennis is 10 minutes
[Quadrature]
order = FIFTH #required for thermal and mechanical node-face contact
side_order = SEVENTH
[]
[TimeStepper]
type = IterationAdaptiveDT
dt = 0.05
optimal_iterations = 8
iteration_window = 2
[]
[]
[Postprocessors]
[temperature_pp]
type = AverageNodalVariableValue
variable = temperature
block = 'graphite_spacers upper_plunger lower_plunger die_wall powder_compact'
[]
[temperature_stainless_steel_pp]
type = AverageNodalVariableValue
variable = temperature_stainless_steel
block = stainless_steel
[]
[graphite_thermal_conductivity]
type = ElementAverageValue
variable = thermal_conductivity
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[graphite_electrical_conductivity]
type = ElementAverageValue
variable = electrical_conductivity
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[steel_thermal_conductivity]
type = ElementAverageValue
variable = thermal_conductivity
block = stainless_steel
[]
[steel_electrical_conductivity]
type = ElementAverageValue
variable = electrical_conductivity
block = stainless_steel
[]
[yttria_thermal_conductivity]
type = ElementAverageValue
variable = thermal_conductivity
block = powder_compact
[]
[yttria_electrical_conductivity]
type = ElementAverageValue
variable = electrical_conductivity
block = powder_compact
[]
[]
[MultiApps]
[micro]
type = TransientMultiApp
# type = CentroidMultiApp # lauches one in the middle of each element so don't need to give positions
#can specify the number of procs
max_procs_per_app = 1 #paolo recommends starting here
app_type = MalamuteApp
positions = '0.00125 0.034 0' #roughly the center of element 117 in this mesh
# positions = '0.0074 0.0058 0' #roughly the center of element 368 in this mesh
input_files = micro_yttria_thermoelectric_twoway.i
sub_cycling = true
execute_on = TIMESTEP_BEGIN #the default
[]
[]
[Transfers]
[keff_from_sub]
type = MultiAppPostprocessorInterpolationTransfer
from_multi_app = micro
variable = yttria_thermal_conductivity_aeh
power = 2 #2 is the default value, tutorial uses 1
postprocessor = k_AEH_average
[]
[sigma_aeh_eff_from_sub]
type = MultiAppPostprocessorInterpolationTransfer
from_multi_app = micro
variable = yttria_sigma_aeh
power = 2 #2 is the default value, tutorial uses 1
postprocessor = sigma_y_AEH
[]
[Q_from_sub]
type = MultiAppPostprocessorInterpolationTransfer
from_multi_app = micro
variable = Q_from_sub #This is the integrated heat produced in the phase-field simulation in eV/m/s
power = 2 #2 is the default value, tutorial uses 1
postprocessor = Q_joule_total
[]
[temperature_to_sub]
type = MultiAppVariableValueSampleTransfer
to_multi_app = micro
source_variable = temperature
variable = T
[]
[temperature_to_sub_postproc]
type = MultiAppVariableValueSamplePostprocessorTransfer
to_multi_app = micro
source_variable = temperature
postprocessor = T_postproc
[]
[potential_to_sub_postproc]
type = MultiAppVariableValueSamplePostprocessorTransfer
to_multi_app = micro
source_variable = electric_potential
postprocessor = V_postproc
[]
[micro_field_pp_to_sub]
type = MultiAppVariableValueSamplePostprocessorTransfer
to_multi_app = micro
source_variable = E_y
postprocessor = Ey_in
[]
[]
[Outputs]
csv = true
exodus = true
perf_graph = true
# [ckpt]
# type =Checkpoint
# time_step_interval = 1
# num_files = 2
# []
[]
(examples/sps/multiapp/electrothermal_with_phase_field/oneway_controls/engineering_scale_electrothermal_oneway_controls.i)
# Approximate Dr. Sinter Geometry
# Configuration: Two stainless steel electrodes (with cooling channels) with two
# large spacers, and one die-and-plungers assembly.
# RZ, axisymmetric.
# BCs:
# Potential:
# V (top electrode, top surface) --> Neumann condition specifiying potential
# based on applied RMS Current (980 A)
# and cross-sectional electrode area (see
# elec_top BC below). Current turned off
# at 1200 s.
# V (bottom electrode, bottom surface) = 0 V
# V (elsewhere) --> natural boundary conditions (no current external to circuit)
# Temperature:
# T (top electrode, top surface) = 293 K
# T (bottom electrode, bottom surface) = 293 K
# T (vertical right side) --> simple radiative BC into black body at 293 K
# T (horizonal surfaces) --> GapHeatTransfer
# T (water channel) --> simple convective BC into "water" with heat transfer coefficient parameter from Cincotti and temperature of 293 K
# T (elsewhere) --> natural boundary conditions
# Mechanics (not added yet):
# Displacement: --> pinned axial centerpoint along interior surface of powder block, outer die wall
# Pressure: top and bottom surfaces of upper and lower rams, 20.7 MPa
# ramped quickly at simulation start, then held constant
# Interface Conditions:
# V (SS-G upper and G-SS lower interface) --> ElectrostaticContactCondition
# T (SS-G upper and G-SS lower interface) --> ThermalContactCondition
# V (graphite-yttria and graphite-graphite) --> GapHeatTransfer
# T (graphite-yttria and graphite-graphite) --> GapHeatTransfer
# P (graphite-yttria and graphite-graphite) --> Mechanical Contact
# Initial Conditions:
# V = default (0 V)
# T = 873 K (~600C)
# Applied Mechanical Load: needs to be updated to 6.5kN, was 3.5 kN
#
# Reference for graphite, stainless steel: Cincotti et al, DOI 10.1002/aic.11102
# Assorted references for yttria, listed as comments in input file
initial_temperature = 873 #roughly 600C where the pyrometer kicks in
#initial_porosity=0.36 #Maximum random jammed packing, Donev et al (2004) Science Magazine
[Mesh]
file = ../../../meshes/drsinter_nodalcontact_2d.e
coord_type = RZ
construct_side_list_from_node_list = true
patch_update_strategy = iteration
patch_size = 20
# ghosting_patch_size = 5*patch_size
[]
[Problem]
type = ReferenceResidualProblem
reference_vector = 'ref'
extra_tag_vectors = 'ref'
[]
[Variables]
[temperature_stainless_steel]
initial_condition = 300 #units of K
block = stainless_steel
[]
[temperature]
initial_condition = ${initial_temperature}
block = 'graphite_spacers lower_plunger upper_plunger die_wall powder_compact'
[]
[potential_stainless_steel]
block = stainless_steel
[]
[electric_potential]
block = 'graphite_spacers lower_plunger upper_plunger die_wall powder_compact'
[]
[]
[AuxVariables]
[electric_field_x]
family = MONOMIAL #prettier pictures with smoother values
order = FIRST
[]
[electric_field_y]
family = MONOMIAL
order = FIRST
[]
[current_density]
family = NEDELEC_ONE
order = FIRST
[]
[yttria_sigma_aeh]
initial_condition = 2.0e-10 #in units eV/((nV)^2-s-nm)
block = 'powder_compact'
[]
[microapp_potential]
#converted to microapp electronVolts units
block = 'powder_compact'
[]
[E_x]
order = FIRST
family = MONOMIAL
block = 'powder_compact'
[]
[E_y]
order = FIRST
family = MONOMIAL
block = 'powder_compact'
[]
[yttria_current_density_forBC_microapp]
order = FIRST
family = MONOMIAL
block = 'powder_compact'
[]
[heatflux_graphite_x]
family = MONOMIAL
order = CONSTANT
block = 'graphite_spacers lower_plunger upper_plunger die_wall'
[]
[heatflux_graphite_y]
family = MONOMIAL
order = CONSTANT
block = 'graphite_spacers lower_plunger upper_plunger die_wall'
[]
[heatflux_stainless_steel_x]
family = MONOMIAL
order = CONSTANT
block = stainless_steel
[]
[heatflux_stainless_steel_y]
family = MONOMIAL
order = CONSTANT
block = stainless_steel
[]
[heatflux_yttria_x]
family = MONOMIAL
order = CONSTANT
block = 'powder_compact'
[]
[heatflux_yttria_y]
family = MONOMIAL
order = CONSTANT
block = 'powder_compact'
[]
[yttria_thermal_conductivity_aeh]
initial_condition = 0.4
[]
[yttria_heat_capacity_volume_avg]
initial_condition = 546.914 # at 873K probably? #842.2 at 1600K probably? # at 1500K #568.73 at 1000K #447.281 # at 293K
[]
[yttria_density_volume_avg]
initial_condition = 3106.2 ##5010.0*(1-${initial_porosity}) #in kg/m^3
[]
[heat_transfer_radiation]
[]
# [thermal_conductivity]
# family = MONOMIAL
# order = FIRST
# []
[]
[Kernels]
[HeatDiff_graphite]
type = ADHeatConduction
variable = temperature
thermal_conductivity = thermal_conductivity
extra_vector_tags = 'ref'
block = 'graphite_spacers lower_plunger upper_plunger die_wall'
[]
[HeatTdot_graphite]
type = ADHeatConductionTimeDerivative
variable = temperature
specific_heat = heat_capacity
density_name = density
extra_vector_tags = 'ref'
block = 'graphite_spacers lower_plunger upper_plunger die_wall'
[]
[JouleHeating_graphite]
type = ADJouleHeatingSource
variable = temperature
elec = electric_potential
electrical_conductivity = electrical_conductivity
use_displaced_mesh = true
extra_vector_tags = 'ref'
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[electric_graphite]
type = ADMatDiffusion
variable = electric_potential
diffusivity = electrical_conductivity
extra_vector_tags = 'ref'
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[HeatDiff_stainless_steel]
type = ADHeatConduction
variable = temperature_stainless_steel
thermal_conductivity = thermal_conductivity
extra_vector_tags = 'ref'
block = stainless_steel
[]
[HeatTdot_stainless_steel]
type = ADHeatConductionTimeDerivative
variable = temperature_stainless_steel
specific_heat = heat_capacity
density_name = density
extra_vector_tags = 'ref'
block = stainless_steel
[]
[HeatSource_stainless_steel]
type = ADJouleHeatingSource
variable = temperature_stainless_steel
elec = potential_stainless_steel
electrical_conductivity = electrical_conductivity
use_displaced_mesh = true
extra_vector_tags = 'ref'
block = stainless_steel
[]
[electric_stainless_steel]
type = ADMatDiffusion
variable = potential_stainless_steel
diffusivity = electrical_conductivity
extra_vector_tags = 'ref'
block = stainless_steel
[]
[HeatDiff_yttria]
type = ADHeatConduction
variable = temperature
thermal_conductivity = thermal_conductivity #use parsed material property, hope it works
extra_vector_tags = 'ref'
block = powder_compact
[]
[HeatTdot_yttria]
type = ADHeatConductionTimeDerivative
variable = temperature
specific_heat = heat_capacity #use parsed material property
density_name = density
extra_vector_tags = 'ref'
block = powder_compact
[]
[JouleHeating_yttria]
type = ADJouleHeatingSource
variable = temperature
elec = electric_potential
electrical_conductivity = electrical_conductivity
use_displaced_mesh = true
extra_vector_tags = 'ref'
block = powder_compact
[]
[electric_yttria]
type = ADMatDiffusion
variable = electric_potential
diffusivity = electrical_conductivity
extra_vector_tags = 'ref'
block = powder_compact
[]
[]
[AuxKernels]
[electrostatic_calculation_x_graphite_yttria]
type = PotentialToFieldAux
gradient_variable = electric_potential
variable = electric_field_x
sign = negative
component = x
block = 'powder_compact graphite_spacers upper_plunger lower_plunger die_wall'
[]
[electrostatic_calculation_y_graphite_yttria]
type = PotentialToFieldAux
gradient_variable = electric_potential
variable = electric_field_y
sign = negative
component = y
block = 'powder_compact graphite_spacers upper_plunger lower_plunger die_wall'
[]
[electrostatic_calculation_x_stainless_steel]
type = PotentialToFieldAux
gradient_variable = potential_stainless_steel
variable = electric_field_x
sign = negative
component = x
block = stainless_steel
[]
[electrostatic_calculation_y_stainless_steel]
type = PotentialToFieldAux
gradient_variable = potential_stainless_steel
variable = electric_field_y
sign = negative
component = y
block = stainless_steel
[]
[current_density_graphite_yttria]
type = ADCurrentDensity
variable = current_density
potential = electric_potential
block = 'powder_compact graphite_spacers upper_plunger lower_plunger die_wall'
[]
[current_density_stainless_steel]
type = ADCurrentDensity
variable = current_density
potential = potential_stainless_steel
block = stainless_steel
[]
[microapp_potential]
type = ParsedAux
variable = microapp_potential
coupled_variables = electric_potential
expression = 'electric_potential*1e9' #convert from V to nV
block = 'powder_compact'
[]
[E_x]
type = VariableGradientComponent
variable = E_x
gradient_variable = electric_potential
component = x
block = 'powder_compact'
[]
[E_y]
type = VariableGradientComponent
variable = E_y
gradient_variable = electric_potential
component = y
block = 'powder_compact'
[]
[yttria_current_density_forBC_microapp]
type = ParsedAux
variable = yttria_current_density_forBC_microapp
coupled_variables = 'electrical_conductivity E_y'
expression = '-1.0*electrical_conductivity*E_y'
block = 'powder_compact'
[]
[heat_flux_graphite_x]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature
variable = heatflux_graphite_x
component = x
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[heat_flux_graphite_y]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature
variable = heatflux_graphite_y
component = y
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[heat_flux_stainless_x]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature_stainless_steel
variable = heatflux_stainless_steel_x
block = stainless_steel
component = x
[]
[heat_flux_stainless_y]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature_stainless_steel
variable = heatflux_stainless_steel_y
block = stainless_steel
component = y
[]
[heat_flux_yttria_x]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature
variable = heatflux_yttria_x
component = x
block = 'powder_compact'
[]
[heat_flux_yttria_y]
type = DiffusionFluxAux
diffusivity = nonad_thermal_conductivity
diffusion_variable = temperature
variable = heatflux_yttria_y
component = y
block = 'powder_compact'
[]
[heat_transfer_radiation_graphite]
type = ParsedAux
variable = heat_transfer_radiation
boundary = 'outer_radiative_spacers outer_die_wall radiative_upper_plunger radiative_lower_plunger'
coupled_variables = 'temperature'
constant_names = 'boltzmann epsilon temperature_farfield' #published emissivity for graphite is 0.85
constant_expressions = '5.67e-8 0.85 293.0' #roughly room temperature, which is probably too cold
expression = '-boltzmann*epsilon*(temperature^4-temperature_farfield^4)'
[]
[heat_transfer_radiation_stainless_steel]
type = ParsedAux
variable = heat_transfer_radiation
boundary = 'outer_radiative_stainless_steel'
coupled_variables = 'temperature_stainless_steel'
constant_names = 'boltzmann epsilon temperature_farfield' #published emissivity for graphite is 0.85
constant_expressions = '5.67e-8 0.4 293.0' #roughly room temperature, which is probably too cold
expression = '-boltzmann*epsilon*(temperature_stainless_steel^4-temperature_farfield^4)'
[]
[thermal_conductivity_graphite]
type = ADMaterialRealAux
variable = thermal_conductivity
property = thermal_conductivity
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[thermal_conductivity_steel]
type = ADMaterialRealAux
variable = thermal_conductivity
property = thermal_conductivity
block = 'stainless_steel'
[]
[thermal_conductivity_yttria]
type = ADMaterialRealAux
variable = thermal_conductivity
property = thermal_conductivity
block = 'powder_compact'
[]
[electrical_conductivity_graphite]
type = ADMaterialRealAux
variable = electrical_conductivity
property = electrical_conductivity
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[electrical_conductivity_steel]
type = ADMaterialRealAux
variable = electrical_conductivity
property = electrical_conductivity
block = 'stainless_steel'
[]
[electrical_conductivity_yttria]
type = ADMaterialRealAux
variable = electrical_conductivity
property = electrical_conductivity
block = 'powder_compact'
[]
[]
[BCs]
[external_surface_stainless]
type = CoupledVarNeumannBC
boundary = 'outer_radiative_stainless_steel'
variable = temperature_stainless_steel
v = heat_transfer_radiation
[]
[external_surface_graphite]
type = CoupledVarNeumannBC
boundary = 'outer_radiative_spacers outer_die_wall radiative_upper_plunger radiative_lower_plunger'
variable = temperature
v = heat_transfer_radiation
[]
[water_channel]
type = CoupledConvectiveHeatFluxBC
boundary = water_channel
variable = temperature_stainless_steel
T_infinity = 300 #units of K
htc = 4725
[]
[temperature_ram_extremes]
type = ADDirichletBC
variable = temperature_stainless_steel
boundary = 'top_upper_steel_ram bottom_lower_steel_ram'
value = 293
[]
[electric_potential_top]
type = ADFunctionNeumannBC
variable = potential_stainless_steel
boundary = top_upper_steel_ram
## This will need to be updated to match the Dr. Sinter geometry
function = 'if(t < 31, (980 / (pi * 0.00155))*((0.141301/4.3625)*t), if(t > 600, 0, 980 / (pi * 0.00155)))' # RMS Current / Cross-sectional Area. Ramping for t < 31s approximately reflects Cincotti et al (DOI: 10.1002/aic.11102) Figure 21(b)
[]
[electric_potential_bottom]
type = ADDirichletBC
variable = potential_stainless_steel
boundary = bottom_lower_steel_ram
value = 0
[]
[]
[Functions]
[graphite_thermal_conductivity_fcn]
type = ParsedFunction
expression = '-4.418e-12*t^4+2.904e-8*t^3-4.688e-5*t^2-0.0316*t+119.659'
[]
# [yttria_thermal_conductivity_fcn] #from the multiapp
# type = ParsedFunction
# expression = '3214.46/(t-147.73)'
# []
[harmonic_mean_thermal_conductivity]
type = ParsedFunction
expression = '2*(-4.418e-12*t^4+2.904e-8*t^3-4.688e-5*t^2-0.0316*t+119.659)*(3214.46/(t-147.73))/((-4.418e-12*t^4+2.904e-8*t^3-4.688e-5*t^2-0.0316*t+119.659)+(3214.46/(t-147.73)))'
# symbol_names = 'k_graphite k_yttria'
# symbol_values = 'graphite_thermal_conductivity_fcn yttria_thermal_conductivity_fcn'
[]
[graphite_electrical_conductivity_fcn]
type = ParsedFunction
expression = '1.0/(-2.705e-15*t^3+1.263e-11*t^2-1.836e-8*t+1.813e-5)'
[]
# [electrical_conductivity_fcn]
# type = ParsedFunction
# # symbol_names = porosity
# # symbol_values = initial_porosity
# expression = '(1-0.62)*2.0025e4*exp(-1.61/8.617343e-5/t)'
# []
[harmonic_mean_electrical_conductivity]
type = ParsedFunction
expression = '2*(1.0/(-2.705e-15*t^3+1.263e-11*t^2-1.836e-8*t+1.813e-5))*((1)*2.0025e4*exp(-1.61/8.617343e-5/t))/((1.0/(-2.705e-15*t^3+1.263e-11*t^2-1.836e-8*t+1.813e-5))+((1)*2.0025e4*exp(-1.61/8.617343e-5/t)))'
# symbol_names = 'k_graphite k_yttria'
# symbol_values = 'graphite_thermal_conductivity_fcn yttria_thermal_conductivity_fcn'
[]
[mechanical_pressure_func]
type = ParsedFunction
symbol_names = 'radius coolant_radius force'
symbol_values = '0.04 7.071e-3 6.5' # 'm kN'
expression = 'force * 1e3 / (pi * (radius^2 - coolant_radius^2))' # (N / m^2)
[]
[]
[InterfaceKernels]
[electric_contact_conductance_ssg]
type = ElectrostaticContactCondition
variable = potential_stainless_steel
neighbor_var = electric_potential
boundary = 'upper_ram_spacer_interface lower_ram_spacer_interface'
mean_hardness = graphite_stainless_mean_hardness
mechanical_pressure = mechanical_pressure_func
[]
[thermal_contact_conductance_calculated_ssg]
type = ThermalContactCondition
variable = temperature_stainless_steel
neighbor_var = temperature
primary_potential = potential_stainless_steel
secondary_potential = electric_potential
primary_thermal_conductivity = thermal_conductivity
secondary_thermal_conductivity = thermal_conductivity
primary_electrical_conductivity = electrical_conductivity
secondary_electrical_conductivity = electrical_conductivity
mean_hardness = graphite_stainless_mean_hardness
mechanical_pressure = mechanical_pressure_func
boundary = 'upper_ram_spacer_interface lower_ram_spacer_interface'
[]
[electric_contact_conductance_gss]
type = ElectrostaticContactCondition
variable = electric_potential
neighbor_var = potential_stainless_steel
boundary = 'upper_ram_spacer_interface lower_ram_spacer_interface'
mean_hardness = graphite_stainless_mean_hardness
mechanical_pressure = mechanical_pressure_func
[]
[thermal_contact_conductance_calculated_gss]
type = ThermalContactCondition
variable = temperature
neighbor_var = temperature_stainless_steel
primary_potential = electric_potential
secondary_potential = potential_stainless_steel
primary_thermal_conductivity = thermal_conductivity
secondary_thermal_conductivity = thermal_conductivity
primary_electrical_conductivity = electrical_conductivity
secondary_electrical_conductivity = electrical_conductivity
mean_hardness = graphite_stainless_mean_hardness
mechanical_pressure = mechanical_pressure_func
boundary = 'upper_ram_spacer_interface lower_ram_spacer_interface'
[]
[]
[ThermalContact]
[upper_plunger_powder_electric]
type = GapHeatTransfer
primary = bottom_upper_plunger
secondary = top_powder_compact
variable = electric_potential
quadrature = true
emissivity_primary = 0.0 #not applicable for electric potential
emissivity_secondary = 0.0 #not applicable for electric potential
gap_geometry_type = PLATE
# gap_conductivity = 1e-23 #rough harmonic mean
gap_conductivity_function = 'harmonic_mean_electrical_conductivity'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[powder_bottom_plunger_electric]
type = GapHeatTransfer
primary = top_lower_plunger
secondary = bottom_powder_compact
variable = electric_potential
quadrature = true
emissivity_primary = 0.0 #not applicable for electric potential
emissivity_secondary = 0.0 #not applicable for electric potential
gap_geometry_type = PLATE
# gap_conductivity = 1e-23 #rough harmonic mean
gap_conductivity_function = 'harmonic_mean_electrical_conductivity'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[powder_die_electric]
type = GapHeatTransfer
primary = inner_die_wall
secondary = outer_powder_compact
variable = electric_potential
quadrature = true
emissivity_primary = 0.0 #0.85 #cincotti 2007, table 2
emissivity_secondary = 0.0 #0.85
# gap_geometry_type = PLATE # Not for vertical surfaces
# gap_conductivity = 1e-23 #rough harmonic mean
gap_conductivity_function = 'harmonic_mean_electrical_conductivity'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[combined_plungers_die_electric]
type = GapHeatTransfer
primary = inner_die_wall
secondary = combined_outer_plungers
variable = electric_potential
quadrature = true
emissivity_primary = 0.0 #not applicable for electric potential
emissivity_secondary = 0.0 #not applicable for electric potential
# gap_geometry_type = PLATE # Not for vertical surfaces
# gap_conductivity = 8.5e4 #graphite, at 500K
gap_conductivity_function = 'graphite_electrical_conductivity_fcn'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
##Thermal Contact between gapped graphite die components
[upper_plunger_spacer_gap_thermal]
type = GapHeatTransfer
primary = spacer_facing_upper_plunger
secondary = plunger_facing_upper_spacer
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.85
gap_geometry_type = PLATE
gap_conductivity_function = 'graphite_thermal_conductivity_fcn'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[upper_diewall_spacer_gap_thermal]
type = GapHeatTransfer
primary = top_die_wall
secondary = bottom_upper_spacer
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.85
gap_geometry_type = PLATE
gap_conductivity_function = 'graphite_thermal_conductivity_fcn'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[lower_plunger_spacer_gap_thermal]
type = GapHeatTransfer
primary = spacer_facing_lower_plunger
secondary = plunger_facing_lower_spacer
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.85
gap_geometry_type = PLATE
gap_conductivity_function = 'graphite_thermal_conductivity_fcn'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[lower_diewall_spacer_gap_thermal]
type = GapHeatTransfer
primary = bottom_die_wall
secondary = top_lower_spacer
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.85
gap_geometry_type = PLATE
gap_conductivity_function = 'graphite_thermal_conductivity_fcn'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[upper_plunger_diewall_gap_thermal]
type = GapHeatTransfer
primary = inner_die_wall ### paired temperature doesn't show on inner die wall, but temperature profile looks reasonable
secondary = die_wall_facing_upper_plunger
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.85
# gap_geometry_type = PLATE # Not for vertical surfaces
gap_conductivity_function = 'graphite_thermal_conductivity_fcn'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[lower_plunger_diewall_gap_thermal]
type = GapHeatTransfer
primary = inner_die_wall ### paired temperature doesn't show on inner die wall, but temperature profile looks reasonable
secondary = die_wall_facing_lower_plunger
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.85
# gap_geometry_type = PLATE # Not for vertical surfaces
gap_conductivity_function = 'graphite_thermal_conductivity_fcn'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
## Thermal Contact between touching components of powder and die
[upper_plunger_powder_thermal]
type = GapHeatTransfer
primary = bottom_upper_plunger
secondary = top_powder_compact
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.3 #estimated from McMahon and Wilder, High Temperature Spectral Emissivity of Yttrium, Samarium, Gadolinium, Ebrium and Lutetium Oxides (1963) Atomic Energy Commission, IS-578, Figure 12
gap_geometry_type = PLATE
gap_conductivity_function = 'harmonic_mean_thermal_conductivity'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[powder_bottom_plunger_thermal]
type = GapHeatTransfer
primary = top_lower_plunger
secondary = bottom_powder_compact #expect more heat transfer from the die to the powder
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.3 #estimated from McMahon and Wilder, High Temperature Spectral Emissivity of Yttrium, Samarium, Gadolinium, Ebrium and Lutetium Oxides (1963) Atomic Energy Commission, IS-578, Figure 12
gap_geometry_type = PLATE
gap_conductivity_function = 'harmonic_mean_thermal_conductivity'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[powder_die_thermal]
type = GapHeatTransfer
primary = inner_die_wall
secondary = outer_powder_compact
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.3 #estimated from McMahon and Wilder, High Temperature Spectral Emissivity of Yttrium, Samarium, Gadolinium, Ebrium and Lutetium Oxides (1963) Atomic Energy Commission, IS-578, Figure 12
# gap_geometry_type = PLATE # Not for vertical surfaces
gap_conductivity_function = 'harmonic_mean_thermal_conductivity'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[combined_plungers_die_thermal]
type = GapHeatTransfer
primary = inner_die_wall
secondary = combined_outer_plungers
variable = temperature
quadrature = true
emissivity_primary = 0.85 #cincotti 2007, table 2
emissivity_secondary = 0.85
# gap_geometry_type = PLATE # Not for vertical surfaces
gap_conductivity_function = 'graphite_thermal_conductivity_fcn'
gap_conductivity_function_variable = temperature
normal_smoothing_distance = 0.1
[]
[]
[Materials]
## graphite blocks
[graphite_thermal]
type = ADGraphiteThermal
temperature = temperature
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[graphite_density]
type = ADGenericConstantMaterial
prop_names = 'density'
prop_values = 1.750e3 #in kg/m^3 from Cincotti et al 2007, Table 2, doi:10.1002/aic
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[graphite_electrical_conductivity]
type = ADGraphiteElectricalConductivity
temperature = temperature
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
#stainless_steel
[stainless_steel_thermal]
type = ADStainlessSteelThermal
temperature = temperature_stainless_steel
block = stainless_steel
[]
[stainless_steel_density]
type = ADGenericConstantMaterial
prop_names = 'density'
prop_values = 8000
block = stainless_steel
[]
[stainless_steel_electrical_conductivity]
type = ADStainlessSteelElectricalConductivity
temperature = temperature_stainless_steel
block = stainless_steel
[]
# harmonic mean of graphite and stainless steel hardness
[mean_hardness_graphite_stainless_steel]
type = GraphiteStainlessMeanHardness
block = 'graphite_spacers upper_plunger lower_plunger die_wall stainless_steel'
[]
## yttria powder compact
[yttria_thermal_conductivity]
type = ADParsedMaterial
coupled_variables = 'temperature'
expression = '3214.46 / (temperature - 147.73)' #in W/(m-K) #Given from Larry's curve fitting, data from Klein and Croft, JAP, v. 38, p. 1603 and UC report "For Computer Heat Conduction Calculations - A compilation of thermal properties data" by A.L. Edwards, UCRL-50589 (1969)
# coupled_variables = 'thermal_conductivity_aeh'
# expression = 'thermal_conductivity_aeh' #in W/(m-K) directly, for now
property_name = 'thermal_conductivity'
output_properties = thermal_conductivity
outputs = 'exodus'
block = powder_compact
[]
[yttria_specific_heat_capacity]
type = ADParsedMaterial
property_name = heat_capacity
coupled_variables = 'yttria_heat_capacity_volume_avg'
expression = 'yttria_heat_capacity_volume_avg' #in J/(K-kg)
# output_properties = yttria_specific_heat_capacity
# outputs = 'exodus'
block = powder_compact
[]
[yttria_density]
type = ADParsedMaterial
property_name = 'density'
coupled_variables = 'yttria_density_volume_avg'
expression = 'yttria_density_volume_avg'
# output_properties = yttria_density
# outputs = 'exodus'
block = powder_compact
[]
[electrical_conductivity]
type = ADParsedMaterial
# coupled_variables = 'yttria_sigma_aeh'
# expression = 'yttria_sigma_aeh*1.602e8' #converts to units of J/(V^2-m-s)
property_name = 'electrical_conductivity'
output_properties = electrical_conductivity
outputs = 'exodus'
block = powder_compact
# type = ADDerivativeParsedMaterial
# property_name = electrical_conductivity
coupled_variables = 'temperature'
constant_names = 'Q_elec kB prefactor_solid initial_porosity'
constant_expressions = '1.61 8.617343e-5 1.25e-4 0.38'
expression = '(1-initial_porosity) * prefactor_solid * exp(-Q_elec/kB/temperature) * 1.602e8' # in eV/(nV^2 s nm) per chat with Larry, last term converts to units of J/(V^2-m-s)
[]
# Material property converter for DiffusionFluxAux object
[converter]
type = MaterialADConverter
ad_props_in = thermal_conductivity
reg_props_out = nonad_thermal_conductivity
[]
[]
[Executioner]
type = Transient
solve_type = NEWTON
automatic_scaling = true
line_search = 'none'
# compute_scaling_once = false
# force running options
# petsc_options_iname = '-pc_type -snes_linesearch_type -pc_factor_shift_type -pc_factor_shift_amount'
# petsc_options_value = 'lu basic NONZERO 1e-15'
# #mechanical contact options
# petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu superlu_dist'
petsc_options = '-snes_converged_reason -ksp_converged_reason'
nl_forced_its = 1
nl_rel_tol = 2e-5 #1e-6 #2e-5 for with mechanics #was 1e-10, for temperature only
nl_abs_tol = 2e-12 #was 1e-12
nl_max_its = 20
l_max_its = 50
dtmin = 1.0e-4
end_time = 900 #600 #900 #15 minutes, rule of thumb from Dennis is 10 minutes
[Quadrature]
order = FIFTH #required for thermal and mechanical node-face contact
side_order = SEVENTH
[]
[TimeStepper]
type = IterationAdaptiveDT
dt = 0.05
optimal_iterations = 8
iteration_window = 2
[]
[]
[Postprocessors]
[temperature_pp]
type = AverageNodalVariableValue
variable = temperature
block = 'graphite_spacers upper_plunger lower_plunger die_wall powder_compact'
[]
[temperature_stainless_steel_pp]
type = AverageNodalVariableValue
variable = temperature_stainless_steel
block = stainless_steel
[]
[graphite_thermal_conductivity]
type = ElementAverageValue
variable = thermal_conductivity
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[graphite_electrical_conductivity]
type = ElementAverageValue
variable = electrical_conductivity
block = 'graphite_spacers upper_plunger lower_plunger die_wall'
[]
[steel_thermal_conductivity]
type = ElementAverageValue
variable = thermal_conductivity
block = stainless_steel
[]
[steel_electrical_conductivity]
type = ElementAverageValue
variable = electrical_conductivity
block = stainless_steel
[]
[yttria_thermal_conductivity]
type = ElementAverageValue
variable = thermal_conductivity
block = powder_compact
[]
[yttria_electrical_conductivity]
type = ElementAverageValue
variable = electrical_conductivity
block = powder_compact
[]
[yttria_grad_potential]
type = ElementalVariableValue
variable = E_y
elementid = 117
[]
[]
[MultiApps]
[micro]
type = TransientMultiApp
# type = CentroidMultiApp # lauches one in the middle of each element so don't need to give positions
#can specify the number of procs
max_procs_per_app = 1 #paolo recommends starting here
app_type = MalamuteApp
positions = '0.00125 0.034 0' #roughly the center of element 117 in this mesh
#positions = '0.0074 0.0058 0' #roughly the center of element 368 in this mesh
input_files = micro_yttria_thermoelectric_oneway_controls.i
sub_cycling = true
execute_on = TIMESTEP_BEGIN #the default
[]
[]
[Transfers]
[temperature_to_sub]
type = MultiAppVariableValueSampleTransfer
to_multi_app = micro
source_variable = temperature
variable = T
[]
[micro_field_pp_to_sub]
type = MultiAppVariableValueSamplePostprocessorTransfer
to_multi_app = micro
source_variable = E_y
postprocessor = Ey_in
[]
[]
[Outputs]
csv = true
exodus = true
perf_graph = true
# [ckpt]
# type =Checkpoint
# time_step_interval = 1
# num_files = 2
# []
[]