- mu_function_namesThe names of the functions for the chemical potentials of zirconium in the alpha, beta, gamma, delta, and zeta phases (in that order)
C++ Type:std::vector<FunctionName>
Unit:(no unit assumed)
Controllable:No
Description:The names of the functions for the chemical potentials of zirconium in the alpha, beta, gamma, delta, and zeta phases (in that order)
- phase_function_namesThe names of the functions for the phase fractions of the alpha, beta, gamma, delta, and zeta phases (in that order)
C++ Type:std::vector<FunctionName>
Unit:(no unit assumed)
Controllable:No
Description:The names of the functions for the phase fractions of the alpha, beta, gamma, delta, and zeta phases (in that order)
- temperatureThe temperature variable
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:The temperature variable
- x_puPlutonium atom fraction
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:Plutonium atom fraction
- x_pu_eq_function_namesThe names of the functions for the equilibrium concentrations of plutonium in the alpha, beta, gamma, delta, and zeta phases (in that order)
C++ Type:std::vector<FunctionName>
Unit:(no unit assumed)
Controllable:No
Description:The names of the functions for the equilibrium concentrations of plutonium in the alpha, beta, gamma, delta, and zeta phases (in that order)
- x_zrZirconium atom fraction
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:Zirconium atom fraction
- x_zr_eq_function_namesThe names of the functions for the equilibrium concentrations of zirconium in the alpha, beta, gamma, delta, and zeta phases (in that order)
C++ Type:std::vector<FunctionName>
Unit:(no unit assumed)
Controllable:No
Description:The names of the functions for the equilibrium concentrations of zirconium in the alpha, beta, gamma, delta, and zeta phases (in that order)
ADUPuZrPhaseLookup
Uses lookup tables to return U-Pu-Zr phase fractions, equilibrium concentrations, and chemical potentials as functions of temperature and composition.
Description
ADUPuZrPhaseLookup is part of a system used to model constituent redistribution in U-Zr and U-Pu-Zr metallic nuclear fuels. It is used in conjunction with lookup tables that describe equilibrium parameters of the fuel as functions of temperature () and the concentrations of plutonium () and zirconium ().
The model accounts for exactly five phases: , , , , and . Twenty lookup tables are required to describe the equilibrium parameters of the phases. The required lookup tables include: the fraction of each phase (five total), the equilibrium concentration of zirconium in each phase (five total), the equilibrium concentration of plutonium in each phase (five total), and the chemical potential of zirconium in each phase (five total).
Due to the computational expense of generating the lookup tables, this task is performed outside of BISON using an external thermodynamic solver, e.g., ThermoCalc. The lookup tables included with BISON were generated using a thermodynamic database and the Pycalphad thermodynamic solver presented in Otis and Liu (2017). The python scripts used to build and verify the lookup tables are also included in tools/metallic (build_redistribution_tables.py and verify_redistribution_tables.py, respectively).
Existing three-dimensional functions, such as PiecewiseMultilinear, are used to read and store data from the lookup tables. These functions are supplied to ADUPuZrPhaseLookup along with three variables or auxvariables that represent , , and . , , and are mapped to , , and to sample the data stored in the functions. Temperature should be supplied in (K) and concentration should be supplied in (mol-fraction). One function must be defined for each of the required twenty lookup tables.
An optional temperature bias () can be specified to manipulate sampling of the lookup tables. When specified, the lookup tables will be sampled at . Arbitrary dependencies can be built into the temperature bias through parsed materials, but care must be taken to ensure that the appropriate derivatives are passed through the Automatic Differentiation system.
ADUPuZrPhaseLookup evaluates the functions at the specified values and stores the results as material properties. These material properties can then be used to define phase-specific diffusion parameters in ADUPuZrMobility for modeling of constituent redistribution. The material properties could also be used to define phase-specific thermal or mechanical properties for other applications.
ADUPuZrPhaseLookup also calculates a unique numerical code to represent regions with different combinations of stable phases. Each phase is assigned an integer, as shown in Table 1. The phase region code at each location within the domain is the sum of the integers of all the phases that have a stable phase fraction greater than one percent at that location. For example, a mixture of alpha and delta would have a phase region code of nine. The resulting material property can be used to visualize how phase stabilities vary over a problem domain.
Table 1: Integers assigned to each phase, which are used to define a phase region code for visualization of phase stabilities.
| Phase | Integer |
|---|---|
| 1 | |
| 2 | |
| 4 | |
| 8 | |
| 16 |
A weighted phase region code is also available. The weighted phase region code at each location within the domain is given by the sum of the integers weighted by their associated phase fractions. The phase region code and weighted phase region code have the same value in single-phase regions but have different values in multi-phase regions. The weighted phase region code can be helpful for visualizing the contributions of individual phases within multi-phase regions.
Example Input Syntax
[Functions<<<{"href": "../../syntax/Functions/index.html"}>>>]
[f_alpha]
type = PiecewiseMultilinear<<<{"description": "PiecewiseMultilinear performs linear interpolation on 1D, 2D, 3D or 4D data. The data_file specifies the axes directions and the function values. If a point lies outside the data range, the appropriate end value is used.", "href": "../functions/PiecewiseMultilinear.html"}>>>
data_file<<<{"description": "File holding data for use with PiecewiseMultiInterpolation. Format: any empty line and any line beginning with # are ignored, all other lines are assumed to contain relevant information. The file must begin with specification of the grid. This is done through lines containing the keywords: AXIS X; AXIS Y; AXIS Z; or AXIS T. Immediately following the keyword line must be a space-separated line of real numbers which define the grid along the specified axis. These data must be monotonically increasing. After all the axes and their grids have been specified, there must be a line that is DATA. Following that line, function values are given in the correct order (they may be on individual lines, or be space-separated on a number of lines). When the function is evaluated, f[i,j,k,l] corresponds to the i + j*Ni + k*Ni*Nj + l*Ni*Nj*Nk data value. Here i>=0 corresponding to the index along the first AXIS, j>=0 corresponding to the index along the second AXIS, etc, and Ni = number of grid points along the first AXIS, etc."}>>> = lookup_tables/alpha_frac.txt
[]
[](examples/constituent_redistribution/1d_thermo_composition.i)[Materials<<<{"href": "../../syntax/Materials/index.html"}>>>]
[phases]
type = ADUPuZrPhaseLookup<<<{"description": "Uses lookup tables to return U-Pu-Zr phase fractions, equilibrium concentrations, and chemical potentials as functions of temperature and composition.", "href": "ADUPuZrPhaseLookup.html"}>>>
phase_function_names<<<{"description": "The names of the functions for the phase fractions of the alpha, beta, gamma, delta, and zeta phases (in that order)"}>>> = 'f_alpha f_beta f_gamma f_delta f_zeta'
x_zr_eq_function_names<<<{"description": "The names of the functions for the equilibrium concentrations of zirconium in the alpha, beta, gamma, delta, and zeta phases (in that order)"}>>> = 'f_X_Zr_eq_alpha f_X_Zr_eq_beta f_X_Zr_eq_gamma f_X_Zr_eq_delta f_X_Zr_eq_zeta'
x_pu_eq_function_names<<<{"description": "The names of the functions for the equilibrium concentrations of plutonium in the alpha, beta, gamma, delta, and zeta phases (in that order)"}>>> = 'f_X_Pu_eq_alpha f_X_Pu_eq_beta f_X_Pu_eq_gamma f_X_Pu_eq_delta f_X_Pu_eq_zeta'
mu_function_names<<<{"description": "The names of the functions for the chemical potentials of zirconium in the alpha, beta, gamma, delta, and zeta phases (in that order)"}>>> = 'f_mu_alpha f_mu_beta f_mu_gamma f_mu_delta f_mu_zeta'
temperature<<<{"description": "The temperature variable"}>>> = T
x_pu<<<{"description": "Plutonium atom fraction"}>>> = X_Pu
x_zr<<<{"description": "Zirconium atom fraction"}>>> = X_Zr
calculate_derivatives<<<{"description": "Whether to calculate AD derivatives from the lookup tables"}>>> = true # can be set to false when using PJFNK
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = all
[]
[](examples/constituent_redistribution/1d_thermo_composition.i)Input Parameters
- 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
- calculate_derivativesTrueWhether to calculate AD derivatives from the lookup tables
Default:True
C++ Type:bool
Controllable:No
Description:Whether to calculate AD derivatives from the lookup tables
- 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.
- temperature_bias0Value added to the temperature variable before evaluation sampling the lookup tables
Default:0
C++ Type:MaterialPropertyName
Unit:(no unit assumed)
Controllable:No
Description:Value added to the temperature variable before evaluation sampling the lookup tables
Optional 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
- (examples/constituent_redistribution/1d_thermo_composition.i)
- (test/tests/ad_upuzr_phase_lookup/jacobian_test.i)
- (test/tests/ad_upuzr_mobility/exact.i)
- (test/tests/ad_upuzr_mobility/jacobian_test.i)
- (test/tests/ad_upuzr_phase_lookup/mu_active_test.i)
- (test/tests/ad_upuzr_phase_lookup/phase_region_test.i)
- (test/tests/ad_upuzr_phase_lookup/3d_function_test.i)
- (examples/constituent_redistribution/2d_composition.i)
References
- R. Otis and Z. K. Liu.
pycalphad: CALPHAD-based Computational Thermodynamics in Python.
Journal of Open Research Software, 5(1):1, 2017.
doi:10.5334/jors.140.[BibTeX]