🎨 Add blkt pipes output - #4369
Conversation
|
Can you fix the conflicts before I do my first review. Please also add which variables have been renamed in the PR body |
a175010 to
3b043bb
Compare
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #4369 +/- ##
==========================================
+ Coverage 49.30% 49.32% +0.01%
==========================================
Files 151 151
Lines 29611 29794 +183
==========================================
+ Hits 14599 14695 +96
- Misses 15012 15099 +87 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
611c3c1 to
188a388
Compare
There was a problem hiding this comment.
For large tokamak (eval and nof) I am getting 0's for most of the quantities in the summary PDF:
They are being written as 0 to the MFile:
Pressure_drop_for_straight_sections_of_outboard_blanket_(Pa)_____________ (dpres_blkt_outboard_coolant_channel_straight_total)_ 0.00000000000000000e+00 OP
Pressure_drop_for_90°_bends_of_outboard_blanket_(Pa)_____________________ (dpres_blkt_outboard_coolant_channel_90_bend)_ 0.00000000000000000e+00 OP
Total_pressure_drop_for_90°_bends_of_outboard_blanket_(Pa)_______________ (dpres_blkt_outboard_coolant_channel_90_bends_total)_ 0.00000000000000000e+00 OP
Pressure_drop_for_180°_bends_of_outboard_blanket_(Pa)____________________ (dpres_blkt_outboard_coolant_channel_180_bend)_ 0.00000000000000000e+00 OP
Total_pressure_drop_for_180°_bends_of_outboard_blanket_(Pa)______________ (dpres_blkt_outboard_coolant_channel_180_bends_total)_ 0.00000000000000000e+00 OP
Total_pressure_drop_for_all_bends_(Pa)___________________________________ (dpres_blkt_outboard_bends_total)_ 0.00000000000000000e+00 OP
Reynolds_number_of_outboard_blanket_coolant______________________________ (reynolds_blkt_outboard_coolant)_ 0.00000000000000000e+00 OP
Darcy_friction_factor_of_outboard_blanket_coolant________________________ (darcy_frict_blkt_outboard_coolant)_ 0.00000000000000000e+00 OP
Pressure_drop_coefficient_for_straight_sections_of_outboard_blanket______ (f_straight_blkt_outboard_coolant)_ 0.00000000000000000e+00 OP
Total_length_of_straight_sections_of_outboard_blanket_coolant_channels_(m)_ (len_blkt_outboard_coolant_channel_straight_total)_ 0.00000000000000000e+00 OP
Pressure_drop_coefficient_for_90°_bends_in_outboard_blanket______________ (f_elbow_blkt_outboard_90_bend)_ 0.00000000000000000e+00 OP
Pressure_drop_coefficient_for_180°_bends_in_outboard_blanket_____________ (f_elbow_blkt_outboard_180_bend)_ 0.00000000000000000e+00 OP
Mass_flow_rate_of_outboard_blanket_coolant_(kg/s)________________________ (mflow_blkt_outboard_coolant)__ 0.00000000000000000e+00 OP
Mass_flow_rate_of_outboard_blanket_coolant_in_single_channel_(kg/s)______ (mflow_blkt_outboard_coolant_channel)_ 0.00000000000000000e+00 OP
Velocity_of_outboard_blanket_coolant_in_single_channel_(m/s)_____________ (vel_blkt_outboard_coolant)____ 0.00000000000000000e+00 OP
You will need to specify |
We probably should not be writing values out to the MFile which are not being calculated because they may get misused by those without that specific knowledge (as I have just done :D). I also do not think we should be including them in the output PDF in this case either. |
…board blanket coolant properties
…he new generic Pumping class
…nd INPUT_PRESSURE_DROP
693fcfd to
7e03a94
Compare
Have changed it so that the coolant pumping vars are only output if |
| N_FW_PIPE_90_DEG_BENDS = 2 | ||
| "Number of 90 degree bends in first wall coolant channels." | ||
| N_FW_PIPE_180_DEG_BENDS = 0 | ||
| "Number of 180 degree bends in first wall coolant channels." |
There was a problem hiding this comment.
Would it make sense to allow these as inputs?
| ) | ||
|
|
||
| dia_blkt_channel = self.pipe_hydraulic_diameter(i_channel_shape=1) | ||
| dia_blkt_channel = self.pipe_hydraulic_diameter( |
There was a problem hiding this comment.
Shouldn't this be calling the function defined in process/models/engineering/pumping.py rather than a self method?
| if data.fwbs.i_p_coolant_pumping == PumpingPowerModelTypes.CALCULATE_PRESSURE_DROP: | ||
| if ( | ||
| data.build.i_blkt_inboard | ||
| == InboardBlanketConfiguration.INBOARD_BLANKET_PRESENT | ||
| ): | ||
| models.blanket_library.output_inboard_blkt_pumping_variables() | ||
|
|
||
| models.blanket_library.output_outboard_blkt_pumping_variables() | ||
|
|
There was a problem hiding this comment.
This should be able to be moved into the blanket library output
|
|
||
| ## Required mass flow rate | `calculate_required_mass_flow_rate()` | ||
|
|
||
| The required mass flow rate of a coolant is given simply by the fundamental heat transfer equation: | ||
|
|
||
| $$ | ||
| \dot{m} = \frac{P}{c_{\text{p}}(T)\times \Delta T} | ||
| $$ | ||
|
|
||
| where $\dot{m}$ is the required mass flow rate in, $P$ is the heating power to be removed, $c_{\text{p}}$ is the coolant specific heat capacity for constant pressure and $\Delta T$ is the temperature change in the coolant. | ||
|
|
||
| !!! note "Variation specific heat capacity" | ||
|
|
||
| The heat capacity itself is a function of temperature. Therefore it is common to use the heat capacity value at the simple average between the initial and final temperature. | ||
| This however assumes a linear relationship. Ideally the equation should be solves as: | ||
|
|
||
| $$ | ||
| \dot{m} = \frac{P}{\int_{T_{\text{in}}}^{T_{\text{in}}}c_{\text{p}}(T) dT} | ||
| $$ | ||
|
|
||
|
|
||
| !!! info "Choice of specific heat capacity" | ||
|
|
||
| For pumping, the specific heat capacity for constant pressure $(c_{\text{p}})$ is used as cooling loops are open-flow systems where the fluid moves continuously through pipes, heat exchangers, and pumps. As the coolant heats up, it expands freely along the loop. Because it is free to expand, the local pressure remains relatively constant while the volume changes. | ||
|
|
||
| You would only use the specific heat capacity for constant volume $(c_{\text{v}})$ if the coolant was completely sealed inside a rigid, unyielding container with zero flow, where heating it would cause the pressure to spike but the volume to stay exactly the same. No newline at end of file |
There was a problem hiding this comment.
I think this bit of doc is new, so probably worth an @ukaea/process-model-review looking at it
| self.component_volumes() | ||
|
|
||
| dia_blkt_channel = self.pipe_hydraulic_diameter(i_channel_shape=1) | ||
| dia_blkt_channel = self.pipe_hydraulic_diameter( |
There was a problem hiding this comment.
Should be using the new method in process/models/engineering/pumping.py
| self.component_volumes() | ||
|
|
||
| dia_blkt_channel = self.pipe_hydraulic_diameter(i_channel_shape=1) | ||
| dia_blkt_channel = self.pipe_hydraulic_diameter( |
There was a problem hiding this comment.
Should be using the new method in process/models/engineering/pumping.py
| raise ProcessValueError(f"i_channel_shape ={i_channel_shape} is an invalid option.") | ||
|
|
||
|
|
||
| @staticmethod |
There was a problem hiding this comment.
| @staticmethod |
|
|
||
| # Friction - for all coolants | ||
| dpres_friction = self.coolant_friction_pressure_drop( | ||
| friction_params: CoolantFrictionLossParameters = coolant_friction_pressure_drop( |
There was a problem hiding this comment.
| friction_params: CoolantFrictionLossParameters = coolant_friction_pressure_drop( | |
| friction_params = coolant_friction_pressure_drop( |
This shouldn't be necessary
| return den_coolant * vel_coolant * diameter / visc_coolant | ||
|
|
||
|
|
||
| @staticmethod |
There was a problem hiding this comment.
| @staticmethod |
|
@chris-ashe maybe you can assist me in setting up a DCLL input file too just so we can check nothing changes before and after |
This pull request introduces significant improvements to the documentation, data structure, and output related to blanket coolant channel pumping and pressure drop calculations. The main changes include moving detailed coolant pumping and pressure drop documentation to a more appropriate location, adding new variables for coolant flow and pressure drop tracking, enhancing plotting capabilities for coolant properties, and updating variable names for clarity.
Documentation Improvements:
blanket_overview.mdinto a new section ingeneric_methods/pumping.md, making the documentation more modular and easier to maintain. Also added a new section on calculating required mass flow rate and clarified when to use specific heat capacities at constant pressure or volume.🔄 Renames
mfblktpi- >mflow_blkt_inboard_coolant_channelmfblktpo->mflow_blkt_outboard_coolant_channelcp_fw->heatcap_pres_fw_coolant_averagecv_fw->heatcap_vol_fw_coolant_averagecp_bl->heatcap_pres_blkt_coolant_averagecv_bl->heatcap_vol_blkt_coolant_averageData Structure and Variable Enhancements:
BlanketDatafor tracking Reynolds numbers, Darcy friction factors, bend loss coefficients, friction coefficients, pressure drops, and mass flow rates for both inboard and outboard blanket coolant channels. Updated variable names for mass flow rates for clarity and consistency.roughness_fw_channelinFWBSDatafor clarity.Plotting and Output Updates:
plot_blanket_coolant_channel_structure_and_properties, tosummary.pythat provides a comprehensive summary of coolant channel structure and properties for both inboard and outboard blankets. Integrated this new plot into the summary plotting workflow.Naming and Standards:
heatcap_,heatcap_vol_, andheatcap_pres_prefixes.These changes collectively improve the clarity, maintainability, and usability of the codebase and its documentation for coolant channel analysis and reporting.
Checklist
I confirm that I have completed the following checks: