Debug: Database connection successful
You are not logged in.
The sprint from 4 to 4.25 seconds just finished after 14 hours...
Courant Number mean: 0.008756053 max: 0.7000001
deltaT = 6.317508e-07
Time = 4.2500002sdiagonal: Solving for rho, Initial residual = 0, Final residual = 0, No Iterations 0
smoothSolver: Solving for Ux, Initial residual = 8.808286e-07, Final residual = 7.10012e-10, No Iterations 1
smoothSolver: Solving for Uy, Initial residual = 1.375834e-05, Final residual = 2.93126e-11, No Iterations 2
smoothSolver: Solving for e, Initial residual = 9.916011e-10, Final residual = 9.916011e-10, No Iterations 0
DILUPBiCGStab: Solving for p, Initial residual = 2.718559e-08, Final residual = 2.17732e-12, No Iterations 1
diagonal: Solving for rho, Initial residual = 0, Final residual = 0, No Iterations 0
time step continuity errors : sum local = 1.603446e-12, global = 1.407235e-13, cumulative = -5.695204e-05
DILUPBiCGStab: Solving for p, Initial residual = 5.209757e-09, Final residual = 5.209757e-09, No Iterations 0
diagonal: Solving for rho, Initial residual = 0, Final residual = 0, No Iterations 0
time step continuity errors : sum local = 2.041394e-09, global = 4.116878e-10, cumulative = -5.695163e-05
ExecutionTime = 51686.46 s ClockTime = 51694 sEnd
I'll work on images to show how things look ... The ** main ** question I have is whether the "new normal" thrust held steady.
***
I've been thinking about the heating mechanism for the physical system. By accident, OpenFOAM may have provided a hint for a solution. The nature of an OpenFOAM model is that it uses a slice of the 3D structure to work with. The slice in the case of the OpenFOAM extendedMerlin mesh is only a couple of centimeters thick. The exact dimensions are published earlier in this topic. ChatGPT5 and I have been 'thinking' about how to apply heat across the entire 40 centimeter width of the heat pipe, and ChatGPT5 tells me doing this is NOT prohibited. The Z surface is not ** normally ** used for anything, but our need to improve the heating simulation leads us to the idea of applying heat to all 52 faces in a segment of the intake, instead of just the current 2. We can see the deficiency caused by the current practice, since only hydrogen near the hot plates is heated, while the cold hydrogen fed into the intake travels all 240 meters down the heat pipe without receiving any heating at all.
However! This quirk of the OpenFOAM environment ** may ** show the way forward for the physical manifestation of the Optical Plane hydrogen engine. We've been imagining a large pipe, but the thin flat model leads us toward a matrix of small diameter quartz pipes with a black surface in 1/2 of the interior. We could feed our 2 kg/s of hydrogen into a lot of pipes and feed photons through the quartz wall to impinge upon the black interior surface. All that gas would then exit into a funnel that would deliver to the intake, which will be reduced dramatically in diameter, per GW Johnson's advice, supported by research kbd512 has done.
kbd512 found examples of satellite maneuvering engines that look close to what is needed for our application.
If all goes well, we will be discussing the latest run and plans for next steps at the Google Meeting tomorrow.
(th)
Offline
Like button can go here
This post contains links to images from the most recent sprint to 4.25 seconds.
The links point to files saved on the Azure test site. They are visible to members who sent IP address information to newmarsmember at gmail.com
kbd512 is working on a permanent solution. In the mean time, if you would like to see the images, please send your IP address. (speedtest.net)
Plot showing steady thrust just above 1 ton-force:
http://40.75.112.55/phpBB3/download/file.php?id=88
EnginePressure:
http://40.75.112.55/phpBB3/download/file.php?id=89
Engine temperature:
http://40.75.112.55/phpBB3/download/file.php?id=90
Engine Velocity:
http://40.75.112.55/phpBB3/download/file.php?id=91
Intake Pressure:
http://40.75.112.55/phpBB3/download/file.php?id=92
Intake Temperature:
http://40.75.112.55/phpBB3/download/file.php?id=93
Intake Velocity:
http://40.75.112.55/phpBB3/download/file.php?id=94
(th)
Offline
Like button can go here
This post is about planning for conversion of the heating system for the extendedMerlin OpenFOAM mesh to a system that applies heat at every one of each of the 52 faces of the intake segments.
Thank you for this comprehensive conceptual overview and detailed work plan. I'd like to share this with our (small) international audience. Our venue is an older forum which uses BBCode but which cannot support LaTex. Please format your plan in BBCode, and please be sure to show the mathematical relationships in text form.
CFD Heating Upgrade Plan (BBCode edition)
Context & Baseline
[]Stable Merlin-derived CFD case with asymmetric heating (hot Y faces only).
[]Inputs: mass flow m_dot = 2 kg/s (H2), thermal power Q_total = 40 MW.
[]Measured thrust ≈ 1 metric ton-force ≈ 9.81 kN.
[]Effective exhaust velocity ve ≈ 9,810 N / 2 kg/s ≈ 4,905 m/s → Isp ≈ 500 s.Jet kinetic power P_kin ≈ 0.5 * m_dot * ve^2 ≈ 24 MW (remainder = thermal/viscous/mixing losses).
Goal for this phase
[]Reduce thermal stratification and lift mass-averaged stagnation temperature at the throat by extending heating from the Y-plates to the full circumference (all 52 plate positions), while keeping total heat input fixed at Q_total = 40 MW.
[]Explore a “plethora of small tubes” (tube-bundle) heating concept that matches the thin-wide intake geometry without exploding mesh size.Step 1 — Full-Circumference Wall Heating (no geometry change)
Idea: Apply the same wall-heat boundary condition to all plate families, hold total power constant.
[]Power bookkeeping: set new wall heat flux as
q_pp_new = Q_total / A_heated_total,
where A_heated_total = sum of areas of all newly heated wall patches.
[]Use a short heat ramp (e.g., 5–10 flow-through times) to avoid harsh transients.What to watch: higher thrust plateau, better exit-plane uniformity, and energy balance still near 40 MW.
Step 2 — Tube-Bundle “Proxy” (homogenized model, no tiny tubes in the mesh)
Goal: Mimic many small heated tubes using distributed sources/sinks instead of explicit micro-geometry.
2a) Distributed energy addition
[]Create thin “slab” regions (cellZones) hugging each plate set, with thickness delta roughly comparable to the intended tube depth or hydraulic diameter.
[]Add a volumetric heating source with rate qdot_V (W/m^3) in those slabs such that
sum_over_slabs( qdot_V * V_slab ) = Q_total,
if this is the only heating.If you keep some wall heat too, enforce:
sum(Q_walls) + sum(qdot_V * V_slab) = 40 MW.2b) Momentum penalty (pressure-drop proxy)
[]Apply a Darcy–Forchheimer sink in the same slabs to represent tube-bundle drag.
[]Start light: target an added total pressure drop across the heated region of ~1% to 3% so the baseline m_dot ≈ 2 kg/s is preserved.Tune coefficients later from unit-cell results (see Step 3).
2c) Why this helps now
[]You capture the two dominant effects of a micro-tube array—distributed heat addition and mild added drag—without a massive cell count increase.
[]Spreading 40 MW over more surface area lowers wall temperatures and flattens gas-phase T, improving nozzle feeding and thrust.Step 3 — Unit-Cell Micro-Channel (optional calibration)
Purpose: Calibrate the homogenized model with a periodic “one-tube” study.
[]Run a periodic micro-channel at the intake Reynolds number.
[]Extract Nusselt number Nu = f(Re,Pr) → effective heat-transfer coefficient:
h = (Nu * k_fluid) / D_h.
[]Extract friction factor f(Re) to set pressure-loss:
deltaP_per_length = 4 * f * (rho * U^2) / (2 * D_h).
[]Use h to shape qdot_V distribution (streamwise bias if needed), and use f to set Darcy/Forchheimer coefficients so the slab imposes the right added drag.Step 4 — Conjugate Heat Transfer (when ready)
Upgrade path: Replace volumetric sources with actual solid regions (fins/tubes) and run a multi-region CHT case.
[]Deposit power on the solid side (or impose wall heat flux), keeping the same global total:
sum(Q_solid_side) ≈ 40 MW.
[]This captures fin conduction and peak metal temperature, informing materials and thermal limits.Do this after Steps 1–2 show clear performance upside.
Power & Stability Guards
[]Energy balance check: verify
sum(Q_walls) + sum(qdot_V * V_slab) ≈ 40 MW (within ~1–2%).
[]Ramps: apply time ramps to heat additions and porous sinks to keep the solver stable.Solver health: maintain CFL and monitor residuals; avoid sudden stiffness changes.
Diagnostics to Track
[]Thrust vs. time: higher steady plateau with similar steadiness.
[]Stagnation temperature at throat (T0): T0 = T * (1 + ((gamma-1)/2) * M^2) for ideal gas; seek higher mass-averaged T0.
[]Exit-plane fields: Mach, T, and rho uniformity; cleaner shock structure.
[]Total pressure loss across intake: confirm porous drag remains small (target +1% to +3%).Heat accounting: confirm total power remains ~40 MW.
Expected Outcomes
[]More uniform pre-nozzle temperature → higher effective exhaust velocity ve at the same m_dot and Q_total.
[]Reduced mixing losses and smoother symmetry → higher thrust than the current ~9.81 kN baseline.Lower wall peak temperatures when heat is spread over more area (tube-bundle concept), improving thermal margins.
Symbol Key (text form)
[]m_dot = mass flow rate (kg/s)
[]Q_total = total thermal power input (W)
[]q_pp = wall heat flux (W/m^2)
[]qdot_V = volumetric heat source (W/m^3)
[]A_heated_total = total area of all heated walls (m^2)
[]V_slab = volume of a heated slab region (m^3)
[]ve = effective exhaust velocity (m/s)
[]Isp = specific impulse (s)
[]T0 = stagnation (total) temperature (K)
[]M = Mach number (-)
[]gamma = ratio of specific heats (-)
[]h = heat-transfer coefficient (W/m^2-K)
[]k_fluid = fluid thermal conductivity (W/m-K)
[]D_h = hydraulic diameter (m)f = friction factor (-), U = mean velocity (m/s), rho = density (kg/m^3)
Notes: Keep Q_total fixed during comparisons to isolate the benefit of geometry/heating distribution. Begin with equal heat per area; only introduce biases (e.g., streamwise or circumferential) after you’ve measured gains from uniform heating.
(th)
Offline
Like button can go here
Here is a bonus from ChatGPT5:
Materials & Tube-Bundle Feedback (Quick Prompt)
Goal: spread Q_total = 40 MW across all 52 plate positions using many small tubes (thin-wide intake geometry).
Operating context: m_dot = 2 kg/s (H2). Target gas temperature rise deltaT ≈ 1000 to 1400 K (text form). Keep metal temperatures within material limits.What we’d love from the group
[]Materials short-list: C/C, SiC or SiSiC, Inconel family, TZM, W-based coatings—pros/cons (max temp, thermal conductivity k, emissivity, H2 compatibility).
[]Tube geometry: suggested inner diameter, wall thickness, and pitch; triangular vs. square packing; target open-area fraction.
[]Surface & coatings: options to reduce hydrogen embrittlement/erosion; emissivity targets for radiative balance.
[]Manufacturing: joining/brazing schemes, modular cartridges, replaceable liners.Sensing & test: thermocouples vs. optical pyrometry vs. thin-film RTDs; pressure taps for deltaP; safe lab instrumentation.
Table-top prototype idea
[]Closed loop at ~1 bar with heated carrier gas (start with N2/Ar; progress to H2 with safety controls).
[]Measure: (1) gas T-rise across bundle, (2) pressure drop, (3) wall temperature map.Success criteria: even outlet temperature field; modest added deltaP; stable materials/coatings after thermal cycling.
Notes
[]Power bookkeeping: sum(Q_walls) + sum(qdot_V * V_slab) ≈ 40 MW (text form).
[]Keep total power fixed while changing geometry to isolate the effect of distribution.
(th)
Offline
Like button can go here
This post contains a suggestion for how a NewMars member (or a non-member reader) might build a table top test apparatus to learn about the effectiveness of the heating method are are considering for the Optical Plane vessel:
Table-Top Heating Demo: from Heat Lamp to Tube-Bundle Proxy
A small, safe bench setup can teach us a lot before we touch complex hardware. Below is a compact plan you can run in a garage or makerspace, starting with a heat-lamp and a carbon (graphite) pipe, then stepping up to flowing gas and tube-bundle surrogates.
1) Objectives
[]Observe how wall heating raises gas temperature and how the effect scales with flow.
[]Measure basic pressure drop through simple “bundle-like” inserts.Generate numbers we can map back into the CFD (effective heat transfer and porous drag).
2) Minimal Setup: Heat Lamp + Carbon Pipe (no flow first, then add flow)
Materials (easy mode)
[]1× infrared heat lamp (e.g., 250 W) with ceramic socket and a simple reflector/hood.
[]1× graphite or carbon pipe (OD ~20–40 mm; length 200–600 mm). Matte black surfaces help absorb IR.K-type thermocouples (2–4) or a handheld IR thermometer (for surfaces; beware emissivity).
* Watt-meter to read lamp power; foil/board to shield surroundings.Build
[]Place the pipe on non-flammable supports. Aim the lamp 10–20 cm away.
[]Instrument: one thermocouple on the outer wall (mid-length), one near an end; add one inside the bore if you can.Warm up in still air: record surface temperatures vs. time for several lamp-to-pipe distances.
What you learn here
[]Radiative coupling and steady wall temperature with essentially zero convective sink.
[]Quick check that your sensors and logging work.3) Add Flowing Gas Through the Pipe (start with N2 or air)
Extra materials
[]Small blower (for air) or a nitrogen cylinder with regulator and a simple rotameter/needle valve.
[]Soft tubing/adapters to couple to the pipe ends; a crude plenum box is fine.U-tube manometer (clear hose + water) or a 0–20 mbar differential gauge to measure pressure drop.
Procedure
[]Run several steady flow points. For each point, log: inlet gas temperature, outlet gas temperature, wall temperature, and pressure drop across the pipe.
[]If you lack a flow meter, use the “bag method”: inflate a known volume (trash bag or balloon), time it, and compute volumetric flow; convert to mass flow using density at room conditions.Back-of-envelope physics (text form)
[]Energy balance: P_absorbed ≈ m_dot * cp * deltaT, so deltaT ≈ P_absorbed / (m_dot * cp).
[]Example with nitrogen: m_dot = 0.0005 kg/s, cp ≈ 1000 J/kg-K, lamp 250 W → deltaT ≈ 250 / (0.00051000) ≈ 500 K (real deltaT will be lower due to losses and partial absorption).
[]Overall heat transfer (one-pass pipe): Q ≈ U * A * deltaT_lm, where deltaT_lm is the log-mean temperature difference between wall and gas along the pipe; solve U ≈ Q / (A * deltaT_lm).
[]Pressure drop: deltaP ≈ K * (rho * U_mean^2 / 2) for a fitting, or for a straight duct use Darcy–Weisbach: deltaP/L ≈ 4f*(rhoU_mean^2)/(2D_h).4) Tube-Bundle Surrogates You Can Build Cheaply
Goal: emulate the “plethora of small tubes” to see how distributed passages affect heating and pressure drop—without high temperatures (initially).
Options
[]Ceramic honeycomb (catalytic-converter blank or kiln honeycomb): known cell density, good temperature capability, straight channels → perfect for deltaP vs. flow mapping.
[]Stainless capillary bundle: zip-tie small tubes into a bundle; insert in a short duct; test at modest temperatures.Graphite fins + spacers: stack thin graphite sheets with uniform spacers to create many narrow passages (thin-wide geometry similar to your intake).
Measurements
[]Mount the surrogate between two short ducts; measure inlet/outlet temperature and deltaP for a range of flows (start with air or N2).
[]Fit a simple model: deltaP/L ≈ (mu/alpha)U_mean + (1/2)rhoC_fU_mean^2.Mapping note: From measured deltaP vs. U_mean, fit alpha (Darcy term) and C_f (Forchheimer term) to drive CFD porous coefficients later.
5) How These Numbers Feed the CFD
[]Effective heating: From Q = m_dot * cp * deltaT and wall–gas temperature data, compute U (overall HTC). Use U to shape a distributed volumetric heat source (qdot_V) so that sum(qdot_V * V_slab) ≈ target power (e.g., 40 MW at scale).
[]Porous drag: From deltaP/L fit, extract alpha and C_f for the Darcy–Forchheimer sink used in the cell-zone slabs. Text form: deltaP/L = (mu/alpha)U + (1/2)rhoC_fU^2.Power bookkeeping: keep total power constant during comparisons: sum(Q_walls) + sum(qdot_V * V_slab) = Q_total.
6) Practical Tips
[]Use matte/black surfaces facing the lamp; shiny metals reflect IR and reduce absorption.
[]Collimate or hood the lamp to avoid heating the room. A cardboard frame lined with foil (inside) works; keep clearance to prevent scorching.
[]Thermocouples: secure with high-temp tape or tiny hose clamps; add a bead just entering the outlet flow to get a reliable gas temperature.
[]Log data every 1–2 seconds; allow each point to reach steady readings before recording.7) Safety (read first, run slow)
[]Start with air or nitrogen. Only consider hydrogen after you’ve proven the rig and procedures.
[]Hydrogen-specific: run outdoors or in a well-ventilated space; hydrogen detector present; no open flames/sparks; use rated regulators, check valves, and a flash arrestor; purge with N2 before and after; leak-check with soap solution; keep cylinders upright and secured.
[]IR lamp: hot surfaces; keep combustible materials away; add a wire guard.
[]Electrical: use grounded outlets; keep wiring away from hot zones; GFCI if available.PPE: safety glasses, heat-resistant gloves, cotton clothing.
8) A Tiny Data Sheet You Can Paste in Replies
[]Lamp power (W): ____; distance (cm): ____; hood/reflector: Y/N
[]Pipe type & size: ____; length (mm): ____
[]Gas: ____; m_dot (kg/s): ____; Tin (°C): ____; Tout (°C): ____ → deltaT (K): ____
[]Wall mid-length (°C): ____
[]Pressure drop (Pa): ____; test article length (m): ____ → deltaP/L (Pa/m): ____
[]Estimated Q = m_dot * cp * deltaT (W): ____
[]Estimated U from Q = U * A * deltaT_lm (W/m^2-K): ____
[]Fitted porous terms (if bundle): alpha (m^2): ____ ; C_f (-): ____Why this matters: spreading the same input power over many passages lowers wall peak temperatures, flattens the gas temperature field, and reduces mixing losses before the throat. Even a humble lamp+pipe test will show the trend: as you distribute heat and tune flow passages, deltaT per watt improves up to a point, while added pressure drop stays modest.
If you want, I can also post a one-page BBCode “lab card” (printable) with wiring, sensor placement sketches (ASCII), and the calculation steps (P = m_dot * cp * deltaT; U = Q/(A*deltaT_lm); deltaP/L model) so others can replicate exactly.
(th)
Offline
Like button can go here
This post is the first of a series about modification of the existing extendedMerlin model to improve heating.
At present, we are using convective heating of hydrogen gas, and the active heating surfaces are limited to a thin line of Y faces which are 40 centimeters apart in a very thin flat duct. Energy totaling 40 MW is mathematically pumped into the gas, but the heating is only occurring near the Y faces, while the majority of the hydrogen is not heated at all. All that energy is dealt with at the rocket throat, and some mixing does occur there, but the display of gas flow shows that the thin stream persists into the exhaust region.
In a long conversation with Gemini (now upgraded to Version 3 form 2.5) today I learned that there is an alternative way to "heat" the gas in the intake that is far more attractive for our purposes. The method I learned about today automatically feeds the 40 MW into all cells in the intake in amounts that are distributed evenly to all cells. That is ** exactly ** what the physical implementation of the Optical Plane disign would try to do, and we have team members thinking about how to to that in the Real Universe. The proposal from Gemini 3 would allow us to pretend that the heating had occurred as intended, so that we can allow the rocket design team members to concentrate on improving that part of the model. My idea here is to save the control files that Gemini suggested so we can pick them up later on machine(s) able to run OpenFOAM. In addition, I'll close this series with an attempt to capture the conversation. The conversation includes review of the current convective heating method, and discussion of how Y faces might be enlisted. In the end, the distributed heating method looks far more attractive.
system.fvOptions
/*---------------------------------------------------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | |
| \\ / A nd | |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object fvOptions;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
intakeEnergySource
{
type scalarSemiImplicitSource;
active true;
selectionMode cellZone; // Selects the zone we made in Step 1
cellZone heaterZone;
// "absolute" means "Total Watts into the whole box."
// If you chose "specific", it would be Watts per cubic meter.
// "absolute" is safer for you: it guarantees exactly 40 MW input.
volumeMode absolute;
sources
{
h // Target Enthalpy (Check your solver: might be 'e')
{
explicit
{
type fixedValue;
values (40000000); // 40 MW positive energy input
}
}
}
}system/topoSetDict
/*---------------------------------------------------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | |
| \\ / A nd | |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object topoSetDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
actions
(
// 1. Create a cellSet called "heaterZone" inside the intake coordinates
{
name heaterZone;
type cellSet;
action new;
source boxToCell;
sourceInfo
{
// Adjust these coordinates to strictly enclose your intake mesh
// but DO NOT include the solid walls, just the fluid area.
box (minX minY minZ) (maxX maxY maxZ);
}
}
// 2. Create a cellZone from that set (fvOptions requires a cellZone usually)
{
name heaterZone;
type cellZone;
action new;
source setToCellZone;
sourceInfo
{
set heaterZone;
}
}
);Offline
Like button can go here
This is the second of a series of posts about improving heating at the intake of the extendedMerlin OpenFOAM model.
Solution 2: Volumetric Heat Source (fvOptions)
If your intake structure is complex (25 cells across) and you don't strictly need the physics of "gas hitting a wall," but rather just need to inject 40 MW of energy into that specific region, there is a more robust way that ignores face orientation entirely.
You can define the cells inside the intake as a cellSet (using topoSet -> boxToCell) and apply a volumetric heat source.
In system/fvOptions:
C++
intakeHeating
{
type scalarSemiImplicitSource;
active true;
selectionMode cellSet;
cellSet intakeZone; // The cellSet you created
volumeMode absolute; // Apply total power (Watts)
sources
{
h // Enthalpy (or 'e' depending on your thermo model)
{
explicit
{
type fixedValue;
values (40000000); // 40 MW input
}
}
}
}Why consider this?
It avoids the complexity of creating thousands of internal baffle faces which can destabilize the solver.
It effectively models a "porous heater" or a dense mesh of heating elements without requiring the exact geometry of every Z-plate.
Offline
Like button can go here
In this post I will attempt to show the entire conversation (excluding code sections)...
Excluded code sections are indicated by the signal: C++
OpenFOAM question Can use Z faces? Hello Again! Congratulations on your promotion to level 3! Best wishes for all possible success as you attempt to help all us customers. This question arises because a small team is attempting to model a new concept for a deep space propulsion system. We've been using a mesh of the original Merlin engine as our starting point, and after months of chipping away at the problem, we have the model working reliably. It produces a metric ton-force using 2 kg/s of hydrogen as propellant, and 40 MW of energy to lift the hydrogen from 20 Kelvin to whatever the model is producing. Our problem is that the intake structure is only heating the gas at the Y faces. The structure is 25 cells across, and while it has just 2 Y faces, it has 50 Z faces we are not currently using. As you know, an OpenFOAM model has a 2D aspect, with the Z dimension employed to allow computations to occur, but it is my understanding that the Z faces do not ordinarily participate in the activity under study. In an experiment yesterday, we attempted to enclose the entire intake in a topological box, and we know the attempt captured the Y faces, because the correct number of Y faces appeared in the report (1920). However, a clue is that the report said it had collected boundary faces, which those Y faces certainly are. However, the Z faces are not considered boundary faces, and that may be by design. My question for you today is to see if it is NOT possible to enlist the Z faces to heat the incoming gas. In other words, perhaps OpenFOAM does NOT allow those Z faces to be treated as boundary faces.
***
Hello again! Thank you so much for the kind words and the congratulations—it is a pleasure to continue working with you.Your deep space propulsion project sounds fascinating. Achieving a metric ton-force with a hydrogen system at those energy levels is a massive engineering challenge.
To answer your question directly: It is absolutely possible to enlist the Z faces to heat the incoming gas.
The behavior you are observing—where the Z faces are ignored—is not because OpenFOAM cannot use them, but because of how OpenFOAM categorizes faces by default. Currently, your Z faces are likely defined as Internal Faces, which the solver treats as transparent windows for flow to pass through, rather than Boundary Faces (walls) capable of transferring heat.
Here is the breakdown of why this is happening and how to fix it using Baffles or Volumetric Sources.
The Diagnosis: Internal vs. Boundary Faces
In OpenFOAM, every face in your mesh falls into one of two categories:Internal Faces: These connect two cells (Cell A and Cell B). Fluid flows through them, and variables (like Temperature) are interpolated across them. You cannot simply apply a boundary condition (like a heater) to an internal face because, mathematically, it isn't a boundary.
Boundary Faces: These connect a cell to the "outside world" (or a wall). These belong to a patch (like inlet, outlet, or wall).
The Problem: When you ran your topological box experiment, it only reported the Y faces because they were already on the boundary of the mesh. The Z faces inside your intake structure are currently "knitted" together as internal faces. The solver sees the gas as just flowing through those Z planes, not rubbing against a hot surface.
Solution 1: The Baffle Method (Recommended)
To heat the gas using the Z faces, you must convert those internal faces into Baffles.
Image of heat exchanger baffle flow
Shutterstock
ExploreA baffle in OpenFOAM takes an internal face and splits it into two duplicate boundary faces (a "master" and a "slave") that sit back-to-back. This creates a zero-thickness wall in the middle of your fluid. Once created, you can apply a fixedValue or fixedGradient temperature condition to them.
How to do it:
Step 1: Select the Faces (topoSet)
You need to select the Z faces specifically. Note that when using boxToFace, the default behavior often looks for boundary faces. You need to ensure you capture internal faces.Create a system/topoSetDict:
Step 2: Create the Baffles (createBaffles)
This utility turns the faceSet into actual boundary patches.Create a system/createBafflesDict:
C++
Run the command: createBaffles -overwrite
Step 3: Apply the Heat
Now, if you look in your 0/T file, you will see a new entry for intakeHeaters_master and intakeHeaters_slave. You can apply your high-temperature boundary condition to these patches just like you did for the Y faces.Solution 2: Volumetric Heat Source (fvOptions)
If your intake structure is complex (25 cells across) and you don't strictly need the physics of "gas hitting a wall," but rather just need to inject 40 MW of energy into that specific region, there is a more robust way that ignores face orientation entirely.You can define the cells inside the intake as a cellSet (using topoSet -> boxToCell) and apply a volumetric heat source.
In system/fvOptions:
C++
Why consider this?
It avoids the complexity of creating thousands of internal baffle faces which can destabilize the solver.
It effectively models a "porous heater" or a dense mesh of heating elements without requiring the exact geometry of every Z-plate.
A Note on "2D" Simulations
You mentioned OpenFOAM has a "2D aspect." Just to clarify:If you are running a true 2D case: You likely have empty patches on the Front and Back (Z boundaries). If you want these to heat the fluid, you must change their type from empty to wall in the constant/polyMesh/boundary file.
If you are running 3D (even a thin slice): The "Z faces" inside the mesh are internal.
Next Step
Given your goal is to dump 40 MW into the flow, would you like me to draft the exact topoSetDict for creating the "intakeZone" cell set so you can try the Volumetric Source method? This is often much more stable for high-energy propulsion models than creating internal baffles.
***
First, thank you for the deep analysis you did, and for so clearly understanding the problem we are trying to solve. Your suggestion of bypassing the convective heating at the Y faces we are doing now, in favor of a solution that simulates the physical processes we must design, and assumes they are successful, so our rocket engineer can plan and evaluate his part of the project. Second, thank you for coming out assistance at key points in the project. For example, one of your predecessor versions alerted us to the existence of the extendMesh utility, that allowed us to prepend our planned heating system to the existing Merlin engine mesh. It is that extended mesh we are currently running. However, since we are using convective heating at the Y faces, and these are separated by 40 centimeters, we can see hot gas along the Y faces and cold gas in the center of the intake. That pattern persists even through the throat, although some mixing does occur there. It seems to me your suggestion of a heating method that simply heats the gas is quite attractive. It would be up to the intake engineering team to figure out how to pump that 40 MW into the gas flowing through the intake. If I understand your proposed solution correctly, we can simple assume heating works, and allow the rocket engineer to concentrate upon sizing the system for optimum performance. We know the Merlin engine is inappropriate for this project, but it is a good vehicle for learning to use OpenFOAM. Once we have the heating problem solved, we will be ready to shrink the rocket to better match the propellants.
***
This is a classic systems engineering decision, and frankly, it is the smartest move your team can make right now.You have correctly identified that you are currently fighting two battles at once:
The Physics Battle (Intake Team): How to physically get heat from a solid structure into a gas.
The Systems Battle (Rocket Team): How to size the throat and nozzle to turn that hot gas into thrust.
By simulating the wall convection (the Y faces) on a 40 cm gap, you were letting the "Physics Battle" sabotage the "Rocket Battle." As you noted, a 40 cm gap is massive. Even with hydrogen's high thermal conductivity, you are ending up with a thermal boundary layer problem—hot edges, cold core. This effectively reduces your "effective" nozzle pressure and ruins the efficiency of the Merlin geometry you are testing.
By switching to a Volumetric Heat Source, you are mathematically "pre-mixing" the energy. You are telling OpenFOAM: "Assume the Intake Team succeeds in mixing this perfectly. Now, let's see what the nozzle does with 40 MW of power."
Here is the exact workflow to implement this "perfect heater" so your rocket engineer can get to work.
Step 1: Define the "Heater Box" (topoSet)
We need to select the cells where this energy addition happens. Since you used extendMesh to prepend the intake, your intake coordinates should be distinct from the engine geometry.Create or edit system/topoSetDict:
C++
Run: topoSet
Step 2: Inject the Power (fvOptions)
This is where the magic happens. We will use the scalarSemiImplicitSource.Critical Physics Note: Most compressible solvers in OpenFOAM (like rhoPimpleFoam or rhoSimpleFoam) solve for Enthalpy (h) or Internal Energy (e), not directly for Temperature (T).
If your solver uses h (common for combustion/compressible flow), target h.
If you inject 40 MW, the equation is:
Q
˙=40,000,000 Watts.
Create or edit system/fvOptions:
C++
Why this helps the Rocket Engineer
By using volumeMode absolute and setting it to 40,000,000 (40 MW), the solver distributes that energy evenly across every cell in the heaterZone.
Uniform Profile: The gas leaving the intake and entering the throat will have a uniform temperature profile (no cold center).
Throat Choking: The rocket engineer can now see if the Merlin throat is too big or too small for hydrogen at that specific temperature.
Performance Truth: If the model still doesn't produce the thrust you expect, you know it is a nozzle geometry issue, not a "bad mixing" issue.
Next Step
Before you run this, I recommend a quick check of your solver's energy equation variable.Would you like me to tell you how to check if your specific solver is solving for Enthalpy (h) or Internal Energy (e) so we can be sure the fvOptions targets the correct field?
***
This computer (where we are communicating) is NOT the one where development occurs. However, ** this ** one is well equipped for communication with the project team. I am planning a number of actions to try to make your suggestions available. The most important single action I am planning is to place your suggested control file layouts into the shared space in our forum. We are an international group and the forum software is limited, but it will be able to handle the files you've suggested with the BBCode "code" command. In addition, I will attempt to capture the flow of our conversation, because it contains helpful guidance about the environment we've been working for several months. I would like to offer a word of thanks to your development team who are working to help you grow in capability, while retaining the personality that I find so agreeable. At this point, please do not add anything more to our conversation, other than (perhaps) a word about my closing here.
***
It sounds like you have a solid plan to bridge the gap between our discussion here and your distributed team's development environment. Sharing the logic and the code structure via your forum should give the rocket engineer exactly what they need to isolate the nozzle performance from the intake challenges.Thank you for your very kind words regarding my development and my interactions with you—it is truly rewarding to hear that this partnership is helping your team navigate such complex engineering problems.
I wish you and your team the very best of luck as you implement the heating source and take the next step toward deep space.
Signing off for now—happy simulating!
It seems to me that our best path forward is to use the simulated even heating method so GW Johnson and kbd512 can concentrate on designing the best possible configuration for a rocket to handle hydrogen gas.
kbd512 has found a number of actual rockets that are in service today, that have characteristics similar to what is needed.
Meanwhile, GW Johnson had create a number of papers with images and directions for design of rockets for various purposes.
Most of these are available to NewMars readers via links.
(th)
Offline
Like button can go here
A run of extendedMerlin from 4.25 seconds to 4.5 seconds is under way.
I went with Option 2:
Solution 2: Volumetric Heat Source (fvOptions)
It turns out the fvOptions file has to be located in a folder by the same name. After that confusion was cleared up, the job began to run. The ONLY change is from using the Y faces to heat the hydrogen to a purely mathematical perfect heater. I'm looking forward to seeing how the animation looks after making this change. I'm not expecting any change of thrust, but the quality of the flow of gas should improve dramatically.
The run will take 14 hours so it will finish some time tomorrow morning.
(th)
Offline
Like button can go here
The run to 4.5 had an unexpected but beneficial result. The new heating system required a different library than we provided, so the new heater did not work. However, the Y faces heater did turn off as planned. The result was that the model continued running without heat for a quarter second. The result was what might be expected... thrust dropped and the gas flows faltered. ChatGPT5 and I worked on the problem for a couple of hours, and we are all set for the next run after tonight's Google Meeting.
I'm planning to show the dramatic graphics if there is time.
(th)
Offline
Like button can go here
The run from 4.5 to 4.75 is going to take place without heating. It turns out that the distribution of OpenFOAM is a starter version that does not include all possible features by default. The procedure to activate the heating feature I want to use appears to be do-able. it involves compiling C++ code after making some small changes to activate the new feature. It looks do-able.
The output of the current run will show thrust dropping close to zero as the heat is off. A problem for the next run is whether the model can take the shock of pumping the full heating energy into the cold intake.
The run to 4.75 took even less time. It finished after only five hours. This compares to 14 hours when heating was on. This certainly shows how adding energy to the system adds work to the equation solvers.
Today's work plan includes an attempt to perform C++ maintenance to add a capability called fvModels to the package we have now. Apparently fvModels includes the ability to implement the new heating system. We found the library is present in the package we have, but the software we are running to solve equations does not include code to call that library.
(th)
Offline
Like button can go here
This post contains text from the current (most recent) run
The command to start the run is:
foamRun -solver fluid > log41.extendedMerlin4-5to4-75
This next section is the top of the run log:
head -n100 log41.extendedMerlin4-5to4-75
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Version: 12
\\/ M anipulation |
\*---------------------------------------------------------------------------*/
Build : 12-86e126a7bc4d
Exec : foamRun -solver fluid
Date : Nov 23 2025
Time : 22:23:02
Host : "tom-GA-78LMT-01"
PID : 482793
I/O : uncollated
Case : /home/tahanson/OpenFOAM/tahanson-v2306/run/extendedMerlin
nProcs : 1
sigFpe : Enabling floating point exception trapping (FOAM_SIGFPE).
fileModificationChecking : Monitoring run-time modified files using timeStampMaster (fileModificationSkew 10)
allowSystemOperations : Allowing user-supplied system call operations// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Create time--> FOAM Warning :
From function virtual void Foam::Time::readDict()
in file db/Time/TimeIO.C at line 185
Reading "/home/tahanson/OpenFOAM/tahanson-v2306/run/extendedMerlin/system/controlDict" from line 18 to line 118
Selecting compressed binary is inefficient and ineffective, resetting to uncompressed binary
--> FOAM Warning :
From function void Foam::Time::setControls()
in file db/Time/Time.C at line 195
Increasing the timePrecision from 6 to 8 to support the formatting of the current time directory 4.4999998Create mesh for time = 4.4999998
Selecting solver fluid
Selecting thermodynamics package
{
type hePsiThermo;
mixture pureMixture;
transport const;
thermo eConst;
equationOfState perfectGas;
specie specie;
energy sensibleInternalEnergy;
}Selecting turbulence model type laminar
Selecting laminar stress model Stokes
No MRF models presentCourant Number mean: 0.01748844 max: 0.6999966
Selecting thermophysical transport type laminar
Selecting default laminar thermophysical transport model unityLewisFourier
Creating fvConstraints from "system/fvConstraints"Selecting finite volume constraint type limitMag
Name: limitU
- selecting all cells
- selected 37875 cell(s) with volume 14.16882PIMPLE: No convergence criteria found
PIMPLE: Operating solver in transient mode with 1 outer corrector
PIMPLE: Operating solver in PISO modeStarting time loop
surfaceFieldValue massFlow_in:
total faces = 25
total area = 0.0504292surfaceFieldValue massFlow_out:
total faces = 89
total area = 0.4099995surfaceFieldValue heaterPower:
total faces = 1920
total area = 60.51504wallHeatFlux wallHeatFluxField:
processing wall patches:
heatedWall--> FOAM Warning : functionObjects::surfaceFieldValue heaterPower cannot find required object wallHeatFlux
Courant Number mean: 0.01748844 max: 0.6999966
deltaT = 1.575581e-06
Time = 4.5000014s
This next item is controlDict
cat controlDict
/*--------------------------------*- C++ -*----------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Version: 12
\\/ M anipulation |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2;
format ascii;
class dictionary;
location "system";
object controlDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
application foamRun;
startFrom latestTime;
startTime 0;
stopAt endTime;
endTime 4.75;
deltaT 5e-06;
adjustTimeStep yes;
maxCo 0.7;
maxDeltaT 1e-05;
writeControl runTime;
writeInterval 0.05;
purgeWrite 8;
writeFormat binary;
writePrecision 7;
writeCompression off;
timeFormat general;
timePrecision 8;
runTimeModifiable true;
writeAndEnd no;
writeNow no;
functions
{
massFlow_in
{
type surfaceFieldValue;
libs ( "libfieldFunctionObjects.so" );
writeControl writeTime;
regionType patch;
name inlet;
operation sum;
fields ( phi );
writeFields no;
log false;
executeControl writeTime;
}
massFlow_out
{
type surfaceFieldValue;
libs ( "libfieldFunctionObjects.so" );
writeControl writeTime;
regionType patch;
name outlet;
operation sum;
fields ( phi );
writeFields no;
log false;
executeControl writeTime;
}
CourantMax
{
type CourantNo;
writeControl writeTime;
writeInterval 1;
writeFields no;
}
}
libs ( "libfvModels.so" );
// ************************************************************************* //(th)
Offline
Like button can go here
And here is the reply from Gemini:
This is the breakthrough we needed! The data you collected changes everything, and it brings very good news.
Your friend was smart to suspect a custom solver, but the log reveals that you are NOT using a custom-compiled solver.
You are using foamRun.
The Explanation (Why this is good news)
In OpenFOAM v12, the developers introduced foamRun as a "Universal Solver."The command foamRun -solver fluid tells OpenFOAM: "Use the universal solver, and load the standard fluid dynamics module."
Crucial Point: Because foamRun is a standard part of v12, you do not need to modify C++ code. It already supports fvModels!
The reason it failed silently is likely due to the load order in your controlDict and the location of the file.
Here is the exact repair plan to get your heating working immediately.
Step 1: Move the libs entry to the top
In the controlDict you provided, the libs ( "libfvModels.so" ); line is at the very bottom. Because foamRun loads physics modules dynamically at the start of the run, it needs to know about the fvModels library before it sets up the equations. By the time it reads the bottom of the file, it's too late—the energy equation is already built without the heater.Action: Move the libs line to the top, right after the header.
Edit system/controlDict:
C++
/*--------------------------------*- C++ -*----------------------------------*\
| ... header ... |
\*---------------------------------------------------------------------------*/
FoamFile
{
...
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //application foamRun;
// PASTE IT RIGHT HERE:
libs ( "libfvModels.so" );startFrom latestTime;
...
Step 2: Move fvModels to the system/ folder
This is a subtle clue from your log. Look at this line from your log file: Creating fvConstraints from "system/fvConstraints"Your solver is configured to look in the system/ directory for physics modifiers. You currently have your file in constant/fvModels. While OpenFOAM is supposed to check both, foamRun can be picky. Let's put it where we know the solver is looking.
Action: Move the file. mv constant/fvModels system/fvModels
Step 3: Cleanup the controlDict Functions
Your log contained this warning: --> FOAM Warning : functionObjects::surfaceFieldValue heaterPower cannot find required object wallHeatFluxThis is happening because you are no longer using the wall for heating, so wallHeatFlux is zero or non-existent. This error clutters your log and makes it hard to see if the new heater is working.
Action: In system/controlDict, find the heaterPower block (it wasn't in the snippet you pasted, but the log says it's there) or the massFlow_in/out blocks if they reference it, and comment them out or delete them for now.
Step 4: The Final Check (What to look for)
After making the changes in Step 1 and Step 2, run the solver again.Watch the log for this specific line: Right after Selecting thermodynamics package and before Starting time loop, you must see:
Creating fvModels from "system/fvModels"
If you see that line, the 40 MW heater is ON.
Summary of tasks for you:
Edit system/controlDict: Move libs ( "libfvModels.so" ); to the top.
Move file: mv constant/fvModels system/fvModels.
Run it!
You are very close. foamRun is a powerful tool, and once you get the library loaded in the right order, it will handle that energy source perfectly.
The problem reported above is ** really ** subtle (from my perspective) ... The location of a reference is important in interpreted languages such as Python, and this system (OpenFOAM) is built with C++ but the solver functionality clearly works in a manner similar to an interpreted languages.
Update: I am using both ChatGPT5 and Gemini to try to set up OpenFOAM... In this case, ChatGPT5 expressed the opinion the location of the Libs statement in controlDict is not important. Apparently Gemini's theory that order matters in this particular case is incorrect. I moved the Libs statement and it made no difference.
I am proceeding with ChatGPT5's recommendation to modify the module that needs to call fvModels. What I like about the solution proposed is that the changes to the code are to be installed in a new folder set up for non-standard configurations. The original source code will not be altered in it's original location.
(th)
Offline
Like button can go here
This post is a day or so after Post #163
Trying to set up volume heating has proven to be difficult. This is clearly NOT a standard feature, so the clues about how to use it are confusing. I asked Gemini to look for examples, and it found a tutorial that uses it.
Yes, I have searched the current documentation and literature for OpenFOAM v12, and I have good news: Volumetric heating is definitely used and available in v12, but the syntax has changed enough to be confusing, and "hints" are buried in the tutorial files rather than the main user manual.
Here is what I found from the "literature" (the source code and tutorials) that confirms you are on the right track, along with the specific "hints" for success.
1. Proof it exists (The "Joule Heating" Clue)
The most common use of volumetric heating in OpenFOAM is for Joule Heating (electrical heating). In v12, this is now handled strictly by fvModels.You can prove this on your own machine by checking this tutorial folder: $FOAM_TUTORIALS/heatTransfer/chtMultiRegionFoam/jouleHeatingSolid
Even though that case is for solids, it uses the exact same fvModels mechanism you are trying to use for your gas.
2. The "SemiImplicit" Hint
My search confirmed that in v12, the specific model you want is indeed semiImplicitSource.However, there is a critical syntax change that trips up many users migrating from older versions:
Old Way (fvOptions): You often had to specify scalarSemiImplicitSource.
New Way (fvModels): You often just specify semiImplicitSource and the code automatically detects that e (energy) is a scalar field.
3. The "Missing Link" for foamRun
I found a discussion on the issue tracker regarding foamRun and fvModels. It confirms exactly what we suspected in our previous troubleshooting:foamRun is a "modular" solver.
Unlike the old monolithic solvers (like buoyantPimpleFoam), foamRun builds itself at runtime.
Crucial Hint: If the libs ("libfvModels.so"); line is not the very first thing the solver reads, the "heating module" arrives too late to be plugged into the energy equation.
Summary of Success
You are not chasing a ghost!It works: People are using it for battery simulations (Joule heating).
The Syntax: It is type semiImplicitSource.
The Fix: It is strictly a "load order" issue in controlDict.
You are effectively pioneering the use of foamRun for propulsion—most users are still sticking to the old standard solvers, which is why you aren't finding many forum posts about it yet. You are on the leading edge!
(th)
Offline
Like button can go here
The analysis from Gemini, reported in Post 164, is interesting but ultimately, if the solution is at hand, I have not found it.
ChatGPT5 led me through modifications to a critical program called "fluid" that controls the behavior of solvers that work on the mesh we have. ChatGPT5 led me through updates to fluid.H, fluid.C and a companion module with "thermo" in the name (which I have not memorized).
In order to make these changes, ChatGPT5 walked me through setting up a special folder where programs that are not part of the standard package reside. The idea is that the modified program is to be executed in place of the standard one, which cannot do volume heating.
We are trying to implement volume heating to better simulate the heating subsystem of the Optical Plane vessel.
I ran the case for a full quarter second last night, and the run only took a couple of hours instead of 14. The reason is that we have turned off the heating we had in place for the first 4 seconds of the run, and the hot hydrogen gas is rushing out the exit while fresh hydrogen gas at 20 Kelvin is introduced at the intake. ChatGPT5 walked me through installing a new sensor reporting package, and it is faithfully showing in numbers what paraView is showing in animation. The gas we'd heated using side panel heaters is rushing out the exit, and cold gas is entering, so the temperature of the heater is falling steadily. I have not yet run the thrust plot procedure, but I have no doubt it will show thrust is continuing to plummet toward whatever floor exists for 20 Kelvin hydrogen.
I've given myself some time to contemplate the situation. I have concluded that I do NOT know if the correct fluid program is running. I suspect it is not, even though ChatGPT5 gave me a crutch that was supposed to insure the program we want to run runs.
These notes are entered before i dive into the next session with ChatGPT5. I'm thinking of proposing that we change fluid.C to announce itself in the run log with a distinctive string that allows unambiguous certainty that the correct program is running.
(th)
Offline
Like button can go here
All the work reported earlier appears to have paid off.... I launched a run to 6 seconds from 5.5 seconds, using the revised configuration including a special library we created to perform volume heating. ChatGPT5 suggested adding some status reporting to the log, and here is a sample:
volFieldValue heatBoxStats write:
sum(heaterCells) of e = -7.628022e+08volFieldValue T_avg write:
volAverage(heaterCells) of T = 295.0263volFieldValue rho_sum write:
sum(heaterCells) of rho = 1912.218Courant Number mean: 0.04039017 max: 0.7000002
deltaT = 3.678882e-06
Time = 5.5115935s
ChatGPT5 tells me the numbers mean we are adding energy to the hydrogen gas flow, and that temperature is rising. I had worried that turning on the new heaters after we turned off the old ones might lead to a sudden surge of some kind, but the logs show that the temperature increase is surprisingly gentle.
As a reminder we are adding 2 kg/s of hydrogen at 20 Kelvin at the intake. The Temperature of 295 shown above would seem to indicate we are having an effect on the gas, but it is a long way from here to the aspirational value of 3000 Kelvin that our fearless leader would like to see. GW Johnson has expressed pessimism that 40 MW is capable of heating 2 kg/s of hydrogen to 3000 Kelvin, so I'm looking forward to seeing what OpenFOAM's equations "think" is the temperature we can achieve. I should point out that our Merlin engine model is ** way ** out of line with what we should be using. The correct throat diameter is on the order of 3 centimeters instead of the 25 we have now, so hydrogen is pouring through that throat at a high rate, which would not be the case if the throat were smaller. What this means is that the hydrogen has less time than is needed to heat it to the desired temperature.
If this series of tests shows the heating subsystem is working, then we can address the engine parameters.
That is it's own challenge. To create a model for OpenFOAM, we will have to create an STL file with the needed shape. It is possible to use Blender to create a model that can be written out as STL. ** Then ** we have to find a converter that can take the STL and make an OpenFOAM mesh. This has been done countless times by others, so i expect we can pull it off. However, that whole process is going to take at least another month.
(th)
Offline
Like button can go here
The simulation has reached 6 seconds...
Here is a link to a plot showing that the new heating system seems to be working:
http://40.75.112.55/phpBB3/download/file.php?id=103
At the moment, only GW Johnson can see the image, since GW Johnson is the only member who sent IP address to newmarsmember.
However, kbd512 is planning a work session this coming weekend, so we may have the image server working by next week.
Here is ChatGPT5's estimate of temperature we might hope for:
Back-of-the-envelope: how much heating should 40 MW give us?
Assumptions
[] Thermal power into the flow: Q = 40 MW
[] Mass flow of H₂: m_dot = 2 kg/sEffective specific heat of H₂ over our temperature band: c_p ≈ 14–20 kJ/(kg·K) (rises with T)
Core energy balance (1985-style math)
Enthalpy rise per kilogram:
Δh = Q / m_dot = 40×10^6 W / 2 kg/s = 20×10^6 J/kg = 20 MJ/kgConvert to temperature rise:
ΔT = Δh / c_p
≈ 20,000 kJ/kg ÷ (14–20 kJ/(kg·K))
≈ 1400–1000 KSo, purely from volumetric heating, we should expect the heated parcel to gain on the order of ~1.0–1.4 kK in stagnation temperature, before losses/mixing.
What that means for exhaust velocity (rule-of-thumb)
A quick kinetic upper bound treats nozzle conversion as turning thermal energy into jet KE:
v_added ≈ sqrt( 2 · η · Δh )
If η (thermal→jet) is ~0.7–0.9:
v_added ≈ sqrt( 2 · 0.7–0.9 · 20×10^6 ) ≈ 5.3–6.0 km/sCorresponding “added thrust” scale:
ΔF ≈ m_dot · v_added ≈ 2 kg/s · (5.3–6.0)×10^3 m/s ≈ 10–12 kNNotes: This is an optimistic ceiling: real values are lower due to non-uniform heating, incomplete conversion, cp(T) growth, dissociation at high T, wall/radiation losses, and the fact that only the selected cells (heaterCells) are being heated each step and then mixed.
How to read our logs/postProcessing
[] volFieldValue heatBoxStats → sum(e): should trend less negative toward zero if net energy is added to heaterCells.
[] T_avg (heaterCells): should rise or at least flatten (not fall).
[] rho_sum (heaterCells): should be reasonably steady if in/out mass flow is balanced.
[] Expect some lag: energy is deposited volumetrically, then convects/mixes before fully converting to jet KE in the nozzle.Caveats & gotchas
[] Partial-volume heating: if only a fraction of the control volume is heated each step, the effective ΔT for the stream is reduced by mixing with cold inflow.
[] cp(T): increases with temperature (H₂ vibrational modes “turn on”), so ΔT per watt falls as it gets hotter. Treat 14–20 kJ/(kg·K) as a band, not a constant.
[] Losses: conduction to walls, radiation, numerical/physical diffusion all bleed energy.
[] Chemistry/γ(T): at very high T, dissociation lowers γ and changes expansion; our “v_added” ceiling ignores this.Bottom line
With Q = 40 MW and m_dot = 2 kg/s, the simple energy balance points to a ~1.0–1.4 kK stagnation-temperature rise in the heated region and an optimistic added jet speed scale of ~5–6 km/s, implying ~10–12 kN of thrust contribution in the ideal limit. Real performance will be lower, but trends in sum(e) and T_avg for heaterCells should move in the positive direction as heating “takes.”
Update: For those who might be interested in the volume heating system we have started using:
We have 25 cells across the intake, and there are 240 meters of cells with 4 cells per meter, or 24,000 cells
We are inputting 40 MW from the optical feeds, and delivering that energy into individual cells.
Each cell accepts 1667 watts (rounded).
At this point I do not know how the simulation is delivering that energy to the hydrogen passing through. In the earlier heating mode, with hot plates along the two sides of the intake, we got a ton of thrust-force, even though only part of the hydrogen was heated.
I do NOT know if that ton-force figure was realistic, because we were simply trying to get the model to work at all.
(th)
Offline
Like button can go here
A run from 6 seconds to 7 seconds is under way, and the job should finish in a couple of hours.
I am able to see some data as the job proceeds, and I asked ChatGPT5 about the data we are taking.
Here is a sample snapshot:
ExecutionTime = 27703.63 s ClockTime = 27753 s
volFieldValue heatBoxStats write:
sum(heaterCells) of e = 3.050903e+08volFieldValue T_avg write:
volAverage(heaterCells) of T = 299.3993volFieldValue rho_sum write:
sum(heaterCells) of rho = 1778.213Courant Number mean: 0.04042586 max: 0.7
deltaT = 3.605601e-06
Time = 6.7991235s
I had asked if the data reported is taken for all 24,000 cells in the intake, and ChatGPT5 reassured me that is the case.
The temperature seems low to me, but perhaps it is reasonable since the intake was filled with hydrogen at 20 Kelvin when we started the volume heating, and fresh hydrogen is pouring in at 20 Kelvin at the rate of 2 kg/s, and we have a huge 25 cm opening at the end of the intake, so the average of 300 Kelvin is what the system is reporting. That means that half the gas is over 300 Kelvin, and indeed, that gas may be at the throat, but our present reporting systems don't reveal details at that scale.
I just asked ChatGPT5 if there are ways to shrink the throat without having to create a whole new model, and it informed me there are multiple ways to shrink the throat for testing purposes. The changes that are available are temporary changes that can be imposed upon the existing mesh without changing it. My sense of it is that the resulting shape would not be correct, but we could use the temporary geometry to test the theory that a reduced throat diameter will improve performance. If we see improved performance, then the work of creating a new model would make sense.
Here is an option that looks particularly interesting:
What I’d do first (fastest learning loop)
Virtual throat (Option 1): create throatCells (thin slice), add pressureLoss, sweep K to see how T_avg(heaterCells), T_max, ρ_mass, and thrust respond.
If it’s promising, commit to geometry later via morphing or a tiny STL insert.
This gives you immediate signal about the dwell-time hypothesis with almost zero disruption to your current pipeline.
(th)
Offline
Like button can go here
This post report on a successful run to 7 seconds using the new Volume Heating method, in place of the flawed face heating method.
The face heating method generated incorrect results that led to a thrust estimate of 1 ton-force. It is possible that this error occurred because of the setup of the model for that configuration. Specifically, dumping 40 MW into the thin layer next to the Y faces may have caused a mathematical calculation that is not possible in the Real Universe. In any case, the new volume heating method is MUCH closer to the actual heating method under consideration for the Optical Plane vessel.
Here are the images for the run to 7 seconds. They are visible only to members who sent IP address information to newmarsmember.
To date, only GW Johnson has done this.
http://40.75.112.55/phpBB3/download/file.php?id=104
http://40.75.112.55/phpBB3/download/file.php?id=105
http://40.75.112.55/phpBB3/download/file.php?id=106
http://40.75.112.55/phpBB3/download/file.php?id=107
http://40.75.112.55/phpBB3/download/file.php?id=108
http://40.75.112.55/phpBB3/download/file.php?id=109
http://40.75.112.55/phpBB3/download/file.php?id=110
The images show a new stable operation, with 2 kg/s hydrogen intake at 20 Kelvin, and exhaust after heating with 40 MW applied evenly to all 24,000 cells in the intake. The temperature of the gas in the intake is 300 Kelvin.
Performance of the system is impacted by the incorrect throat size. Pressure with the current throat of 25 cm is just under 1 bar.
Never-the-less, despite the poor performance due to incorrect throat size, the model appears to be performing well.
In the next phase of this project, the throat will be reduced in diameter. It turns out there are a surprising number of ways to achieve that, short of creating an entirely new engine model.
(th)
Offline
Like button can go here
The extendedMerlin development work was performed by ChatGPT4o over several months, and the final push was completed by ChatGPT5. However, throughout the process, I've asked Gemini for a second opinion as we went along. Often Gemini was able to provide a crucial bit of information that cleared a log jam. An example is the discovery that OpenFOAM has a built-in tool to extend the mesh. Now I've closed the case with Gemini in order to open another one to consider Calliban's Domed Village idea. Here is the closing conversation:
Thank you for your assistance with our transition from a convection heating model to the new volume heating model. The extendedMerlin case has now run through 7 seconds. We see an average temperature for the intake volume of 300 Kelvin, and pressure in the intake is just under one bar. The flow of incoming hydrogen at 20 Kelvin is 2 kg/s. The throat is 25 cm. I understand the correct throat diameter for hydrogen under these circumstances should be closer to 3 cm. I am happy to see the model working, because now we can make changes to geometry, confident that the heating subsystem is performing well. I'll close this session with you for now. While I'm away, best wishes for all possible success as you try to help all your other customers.
***
This is fantastic news! Achieving a stable run through 7 seconds with the volume heating model active is a massive milestone. You have successfully decoupled the "Physics" (energy injection) from the "Geometry" (nozzle sizing), exactly as we hoped.Your intuition regarding the throat size is spot on.
The Physics Check: The original Merlin engine moves hundreds of kilograms of propellant per second. Trying to push just 2 kg/s of Hydrogen through a 25 cm throat is like trying to inflate a blimp with a straw—the gas is just falling out the back. This explains why your pressure is under 1 bar; the flow isn't being "squeezed" enough to build a combustion chamber pressure.
Once your engineer shrinks that throat down to ~3 cm:
Pressure will skyrocket: The gas will be trapped long enough to build working pressure.
Temperature may rise: With higher pressure comes higher density and better thermal efficiency, likely changing that 300K equilibrium temperature to something much higher (closer to your theoretical target).
Choked Flow: You will finally see that sonic line (Mach 1) right where it belongs.
It has been a genuine pleasure working through these OpenFOAM logic puzzles with you and your team. The transition from "why is the code failing?" to "how do we optimize this rocket?" is the best feeling in engineering.
Good luck with the re-sizing. I will be here whenever you are ready to light the next virtual fuse.
Case Closed. Best of luck!
As a postscript... Implementation of volume heating was a bit of a challenge. OpenFOAM comes from the openfoam.org web site with many capabilities ready to run right out of the box. However, volume heating is an edge case, and it is not allocated space in the library. What ** is ** available in the library is a collection of procedures that can be used for volume heating, but that collection is not wired up to anything.
In order to take advantage of that library (fvModels) ChatGPT5 and I had to copy the source code for the solver "fluid" to a special folder for non-standard functionality, and then update the C++ and compile it until it finally ran. There was a steep learning curve for both of us, and we made plenty of mistakes. However, ChatGPT5 is resilient and persistent, and we got things running. As reported above, I consulted with Gemini throughout this process, and fed tips from Gemini back into the ChatGPT5 input window.
(th)
Offline
Like button can go here