Source code for armi.physics.neutronics.fissionProductModel.fissionProductModelSettings

# Copyright 2019 TerraPower, LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""Settings related to the fission product model."""

from armi.settings import setting
from armi.physics.neutronics import fissionProductModel

CONF_FP_MODEL = "fpModel"
CONF_MAKE_ALL_BLOCK_LFPS_INDEPENDENT = "makeAllBlockLFPsIndependent"
CONF_LFP_COMPOSITION_FILE_PATH = "lfpCompositionFilePath"
CONF_FISSION_PRODUCT_LIBRARY_NAME = "fpModelLibrary"


[docs]def defineSettings(): """Define settings for the plugin.""" settings = [ setting.Setting( CONF_FP_MODEL, default="infinitelyDilute", label="Fission Product Model", description=( "This setting is used to determine how fission products are treated in an analysis. " "By choosing `noFissionProducts`, no fission products will be added. By selecting, `infinitelyDilute`, " "lumped fission products will be initialized to a very small number on the blocks/components that require them. " "By choosing `MO99`, the fission products will be represented only by Mo-99. This is a simplistic assumption that " "is commonly used by fast reactor analyses in scoping calculations and is not necessarily a great assumption for " "depletion evaluations. Finally, by choosing `explicitFissionProducts` the fission products will be added explicitly " "to the blocks/components that are depletable. This is useful for detailed tracking of fission products." ), options=[ "noFissionProducts", "infinitelyDilute", "MO99", "explicitFissionProducts", ], ), setting.Setting( CONF_FISSION_PRODUCT_LIBRARY_NAME, default="", label="Fission Product Library", description=( f"This setting can used when the `{CONF_FP_MODEL}` setting " "is set to `explicitFissionProducts` and is used to configure " "all the nuclides that should be modeled within the core. " "Setting this is equivalent to adding all nuclides in the " "selected code library (i.e., MC2-3) within the blueprints " "`nuclideFlags` to be [xs:true, burn:false]. This option acts " "as a short-cut so that analysts do not need to change their " "inputs when modifying the fission product treatment for " "calculations. This may be extended for other cross section " "generation codes." ), options=[ "", "MC2-3", ], ), setting.Setting( CONF_MAKE_ALL_BLOCK_LFPS_INDEPENDENT, default=False, label="Use Independent LFPs", description=( "Flag to make all blocks have independent lumped fission products. Note that this is forced to be True " "when the ``explicitFissionProducts`` modeling option is selected or an interface named `mcnp` is " "on registered on the operator stack." ), ), setting.Setting( CONF_LFP_COMPOSITION_FILE_PATH, default=fissionProductModel.REFERENCE_LUMPED_FISSION_PRODUCT_FILE, label="LFP Definition File", description=( "Path to the file that contains lumped fission product composition " "definitions (e.g. equilibrium yields). This is unused when the " "`explicitFissionProducts` or `MO99` modeling options are selected." ), ), ] return settings
[docs]def getFissionProductModelSettingValidators(inspector): """The standard helper method, to provide validators to the fission product model.""" # Import the Query class here to avoid circular imports. from armi.operators.settingsValidation import Query queries = [] queries.append( Query( lambda: inspector.cs[CONF_FP_MODEL] != "explicitFissionProducts" and not bool(inspector.cs["initializeBurnChain"]), ( "The burn chain is not being initialized and the fission product model is not set to `explicitFissionProducts`. " "This will likely fail." ), f"Would you like to set the `{CONF_FP_MODEL}` to `explicitFissionProducts`?", lambda: inspector._assignCS(CONF_FP_MODEL, "explicitFissionProducts"), ) ) queries.append( Query( lambda: inspector.cs[CONF_FP_MODEL] != "explicitFissionProducts" and inspector.cs[CONF_FISSION_PRODUCT_LIBRARY_NAME] != "", ( "The explicit fission product model is disabled and the fission product model library is set. This will have no " f"impact on the results, but it is best to disable the `{CONF_FISSION_PRODUCT_LIBRARY_NAME}` option." ), "Would you like to do this?", lambda: inspector._assignCS(CONF_FISSION_PRODUCT_LIBRARY_NAME, ""), ) ) queries.append( Query( lambda: inspector.cs[CONF_FP_MODEL] == "explicitFissionProducts" and bool(inspector.cs["initializeBurnChain"]), ( "The explicit fission product model is enabled, but initializing the burn chain is also enabled. This will " "likely fail." ), "Would you like to disable the burn chain initialization?", lambda: inspector._assignCS("initializeBurnChain", False), ) ) queries.append( Query( lambda: inspector.cs[CONF_FP_MODEL] == "explicitFissionProducts" and inspector.cs[CONF_FISSION_PRODUCT_LIBRARY_NAME] == "", ( "The explicit fission product model is enabled and the fission product model library is disabled. May result in " "no fission product nuclides being added to the case, unless these have manually added in `nuclideFlags`." ), f"Would you like to set the `{CONF_FISSION_PRODUCT_LIBRARY_NAME}` option to be equal to the default implementation of MC2-3?.", lambda: inspector._assignCS(CONF_FISSION_PRODUCT_LIBRARY_NAME, "MC2-3"), ) ) return queries