In-core thermal-hydraulic calculations
This application mode is used to calculate temperature distributions throughout the core using a system code when supplied with a power distribution. The user can specify the structure of the relevant heat structures and hydro-dynamic volumes to be used in the system model, and the OSCAR-5 system will generate the in-core representation for such a structure.
Note
This application inherits from the CoreThermalHydraulic application. The generation of the system representation of the core is largely dynamic and based on high level specifications of the design purpose of core channels in the system code. Channels are automatically prepared based on available steady-state neutronic and thermal-hydraulic results.
Typical Use Cases
Define and compare various in-core representations for use in a system model for plant transient analysis
Automatically generate heat-structure and flow channel parameters as required by system codes
Allow dynamic generation of channels and heat structures based on generic criteria
Update existing “templated” RELAP input, run and post process the output, or generate only the core representation for manual inclusion in external RELAP model
Additional Input Parameters
In the following cth denotes a SystemCoreThermalHydraulic parameter set, created as follows:
import applications.core_thermal_hydraulics as app
cth = app.parameters()
The application accepts the typical Rapyds input sets, such as defining the model, setting the time_stamp, and working directory. In addition, a number of basic thermal-hydraulics parameters have to be set, as defined below:
- cth.single_phase_heat_transfer_model
Define the heat transfer model of interest.
- cth.critical_heat_flux_model
Define the critical_heat_flux_model of interest.
- cth.pressure_drop
Define the pressure_drop over the core.
- cth.inlet_pressure
Define the inlet_pressure.
- cth.axial_power_shapes
Define the axial_power_shapes option. The value can be set to HotPlate or Striped, which determine the detail level of the power shapes provided to the thermal-hydraulic code. HotPlate uses the axial power shape of the hot plate for all plates, while Striped provides a detailed piece-of-plate level axial shape to each radial zone along each plate, of each assembly.
- cth.flow_mode
Define the solution mode for the thermal-hydraulic analysis. Flow mode uses a defined flow to calculate a temperature distribution. Pressure mode iterates over the defined pressure drop to find the correct flow.
- cth.thermal_data_sets
Define the location of the thermal data dictionary providing basic thermal-hydraulic properties for each assembly type. The typical location of this model extension can be found in the model folder, named thermal_hydraulic_data.py
- cth.assemblies
Define the set of assemblies for which to calculate thermal-hydraulic solutions. If not specified, all assemblies are included. Three alternatives exist. An explicit list of assembly names may be specified, a regular expression as applied to assembly names can be given, or an assembly type identifier from the core.assembly class can be given.
- cth.neutronic_result_set
Define the pointer to the neutronic result set to be used for the calculation. A path to a valid .res file must be provided.
. _core_thermal_hydraulics_cli:
Command Line Usage
This application supports all the standard application modes and options as described in General Application Command Line Interface (CLI).
Typical command line usage
oscar5 MY_REACTOR.projects.core_th_fuel --target-mode <MODE> --config-file <CONFIG> run --force
After output processing, a simple list of maximum temperatures are printed, with full detailed results provided in the produced .res file (can be viewed via the hdf5 viewer in the manager application.
Examples
The following example will calculate the detailed temperature and density distributions in all fuel assemblies in the specified core.
import applications.core_thermal_hydraulic as app
from core import *
from ..configurations.with_loadable_reflectors import model, create_heu_moly_batch
import sys
from ..model import thermal_hydraulic_assembly_data
from core.assembly import irradiation_rig, control, intra_assembly_control, fueled
param = app.CoreThermalHydraulicParameters()
param.model = model
param.working_directory = utilities.path_relative_to(__file__, 'TH_TEST_FUEL_FIX')
param.project_name = 'th_test'
param.model_scope = 'assemblies'
param.time_stamp = '9/12/2022, 7:30:00'
# basic options for the thermal-hydraulic setup
param.model.facility_description.design_coolant_flow_direction = 'DOWNWARDS'
#param.single_phase_heat_transfer_model = 'SiederTate'
param.single_phase_heat_transfer_model = 'DittusBoelter'
param.critical_heat_flux_model = 'MirshakDurantTowell'
param.pressure_drop = 0.069 * units.MPa
param.inlet_pressure = 194 * units.kPa
param.power_fraction_to_clad = 0.0
param.power_fraction_to_coolant = 0.0
param.axial_power_shapes = 'Striped' # HotPlate or Striped
param.flow_mode = 'Flow' #Pressure or Flow
param.full_core_flow = (0.28 * 3500) * units('kg/s')
param.force_total_flow_match = False
param.bypass_flow_fraction = 0.276
# Three region fuel plate assumed (centre is fuelled)
# The MORE input options has not yet been implemented - set to 0
# Fins not yet implemented (IH != -1)
# Searches not yet implemented (ISRCH = 0)
# Standard convergence parameters are assumed
# Values of zero typically imply automatic internal calculation of quantities
#assume thermal
param.thermal_data_sets = thermal_hydraulic_assembly_data.thermal_data_sets
param.thermal_data_sets['SAFARI-1-LEU-fuel']['PinMeshCrossPadding'] = 1
param.thermal_data_sets['SAFARI-1-LEU-fuel-follower']['PinMeshCrossPadding'] = 1
#param.thermal_data_sets['SAFARI-1-LEU-fuel-follower']['PinMeshPadding'] = 3
param.hot_channel_factors = \
{
'BulkCoolant' : 1.0,
'Film' : 1.0,
'HeatFlux' : 1.0,
'HeatedDiameter': 1.0,
'Velocity' : 1.0
}
# Assemblies which should be included in the model
#param.assemblies = ['EF444L', 'EF473L', 'EF488L'] #, 'EF118L', 'EF112L','EF128L']
#param.assemblies = ['CF086L']
param.assemblies = [fueled()]
param.neutronic_result_set = 'C:\\Users\\rianp\\Desktop\\Repos\\SAFARI_1\\projects\\C2208_critical_no_molly\\MGRAC\\C2208_Critical.res'
if __name__ == '__main__':
sys.path.insert(0, 'C:\\oscar5\\rapyds_plugins\\pltemp')
app.main(param)