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

  1. Define and compare various in-core representations for use in a system model for plant transient analysis

  2. Automatically generate heat-structure and flow channel parameters as required by system codes

  3. Allow dynamic generation of channels and heat structures based on generic criteria

  4. 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)