Debug: Database connection successful
You are not logged in.
To confirm we have a stable model, I started a new run from 7 seconds to 8. Because we are now heating, run time has increased significantly. What took 4 hours with 20 Kelvin hydrogen now is taking 20 hours. The solver is having to slice time into smaller and smaller intervals, as the complexity of dealing with heat in all cells increases. What I find reassuring is that the remaining teeny-tiny-training-wheel seems to be handling the stress. Here is a snapshot of progress:
ExecutionTime = 44940.86 s ClockTime = 44946 s << 12 hours of 20 estimated
volFieldValue heatBoxStats write:
sum(heaterCells) of e = 9.352828e+10volFieldValue p_avg write:
volAverage(heaterCells) of p = 218645.7 << pressure holding steadyvolFieldValue T_avg write:
volAverage(heaterCells) of T = 681.1487 << temperature holding steadyvolFieldValue rho_mass write:
volIntegrate(heaterCells) of rho = 2.031409 << mass up slightlyvolFieldValue T_min_global write:
min() of T = 22.46052 at location (-240.275 0.16 0) in cell 37871 << minimum steadyvolFieldValue T_max_global write:
max() of T = 1466.182 at location (-0.182823 -0.1878 3.407286e-18) in cell 3401 << Maximum steadyCourant Number mean: 0.03092569 max: 0.7
deltaT = 1.931606e-06
Time = 7.6186164s
The run just ended in just under 20 hours. That is the "new normal" for a heated flow for one second.
ExecutionTime = 70707.46 s ClockTime = 70748 s << 19 hours +
volFieldValue heatBoxStats write:
sum(heaterCells) of e = 1.026401e+11volFieldValue p_avg write:
volAverage(heaterCells) of p = 219808.7 << pressure holding steadyvolFieldValue T_avg write:
volAverage(heaterCells) of T = 718.4616 << temperature holding steadyvolFieldValue rho_mass write:
volIntegrate(heaterCells) of rho = 2.019911 << mass 2 kg per second through heatervolFieldValue T_min_global write:
min() of T = 22.45298 at location (-240.275 -0.16 0) in cell 37621 << intake is 20 KelvinvolFieldValue T_max_global write:
max() of T = 1527.314 at location (-0.182823 -0.1878 3.407286e-18) in cell 3401 << Temperature at throatEnd
I'll work on plots next .. I'm expecting a flat line with minor fluctuations
The trace from 6 to 7 showed adjustment of the system to addition of heating.
The trace from 7 to 8 shows that the system settled down at 7 seconds.
I think we can safely proceed to the next critical phase of the project, which is to reduce the throat diameter from 25 centimeters to 3.
We should definitely see changes. The pressure should build in the intake. Temperature should rise. Mass in the intake should increase. Thrust should increase.
If someone is seeing the chart above for the first time, here is a quick summary.
We've preloaded the model with hydrogen at 1 bar and 21 Kelvin. This is done to avoid equation crashes when we open the system to vacuum.
At the start of the run, we open the exit to vacuum, and we begin feeding hydrogen at 20 Kelvin. The intake ramps from 0 to 2 kg/s over 2 seconds.
The massive thrust we see in the plot occurs because the hydrogen exits rapidly. We see the arriving flow of hydrogen near second 2.
After 5 seconds, the flow of hydrogen stabilizes. At 6 seconds we introduce 40 MW of energy distributed evenly over 24,000 intake cells.
After 7 seconds, we reach a stable condition that prevails from then on to 8 seconds.
In the next run we will introduce the smaller throat, so we can expect the plot to reflect that change.
(th)
Offline
Like button can go here
This post is about planning for introduction of a reduced diameter throat for the extendedMerlin model.
Our strategy is to introduce a mathematical "washer" that will sit square in the center of the existing throat. I have not attempted something like this before, and while ChatGPT5 is brimming with confidence, I have learned to be cautiously optimistic. Things probably won't work as hoped in the first try. For one thing, since this is an artificial construct the mesh itself is unchanged, and the opening in the "washer" will probably be jagged. Below is a transcript of planning:
Hello Again! First, I'd like to thank you for your support (along with ChatgPT4o) over the past 8 months, in finding a CFD model of the Merlin engine, and then building up up to the point we have a stable run using 2 kg/s of hydrogen at 20 Kelvin heated by 40 MW of volume heating over 240 meters of a heat pipe that generates a solid thrust. I just completed a run from 7 seconds to 8 seconds, and the plot shows we are steady as a rock. All fluctuations have disappeared. We are ready to begin work on the washer style throat restriction at the center of the throat at Zero X. Some weeks ago we had a preliminary discussion about how to proceed. I held off until we could be sure our model is stable and that we understand what it is doing. We discussed a porous filter and a washer configuration, and the team selected the washer. Our long term goal is to revise the mesh, but that can wait. I'd like to proceed with the washer style modification. The desired throat diameter is 3 centimeters, down from the current 23 centimeters. As we enter the New Year we may not have time to finish the throat changes but we'll certainly be ready before next Sunday's project meeting. I understand you will need fresh copies of the case files, and I am standing by to provide them.
***
Thought for 4m 45s << that is ** really ** long thinking time!You’re in a great spot to do the washer-style throat restriction without remeshing by treating the washer as a thin “porous resistance” region at x ≈ 0, with a 3 cm diameter “hole” left unobstructed.
The cleanest way to do that in your now-working fvModels pipeline is:
Create a thin annulus cellZone at the throat (the “washer” solid)
Add a porosityForce fvModel that applies a huge momentum sink through that annulus
This is exactly what porosityForce is for: adding Darcy–Forchheimer resistance to selected cells via selectionMode cellZone.
OpenFOAM CPP1) Make a washer cellZone at x=0 (annulus: r=1.5 cm to r=11.5 cm)
A. Create system/topoSetDict.washerThis uses cylinderAnnulusToCell to grab only the annulus (so you don’t need set subtraction). Example syntax for cylinderAnnulusToCell with p1/p2 and innerRadius/outerRadius is standard in topoSetDict workflows.
foaming time
+1actions
(
// 1) CellSet for a thin annulus (washer “solid”) at the throat plane
{
name washerCells;
type cellSet;
action new;
source cylinderAnnulusToCell;
sourceInfo
{
// thickness of washer region along x:
// choose something like 1–3 cells thick in your mesh
p1 (-0.005 0 0);
p2 ( 0.005 0 0);// current throat radius ~ 0.115 m (23 cm dia)
outerRadius 0.115;// desired hole radius = 0.015 m (3 cm dia)
innerRadius 0.015;
}
}// 2) Convert that cellSet into a cellZone (fvModels likes zones)
{
name washerZone;
type cellZoneSet;
action new;
source setToCellZone;
sourceInfo
{
set washerCells;
}
}
);I note that the washer does NOT penetrate the existing mesh. It is sized to exactly match the opening!
About the thickness (p1/p2): start with ±5 mm (as above). If you later see the washer zone has “too few” cells (or is ragged), increase to ±1 cm. You just want a thin plate-like region, not a long plug.
B. Run topoSet
topoSet -dict system/topoSetDict.washerC. Confirm it exists
You should see a zone created (typically under constant/polyMesh/cellZones/), and in the next solver start you’ll be able to select it.
Quick visual check (optional but very helpful): open ParaView and color by Cell Zones and confirm the annulus is at x≈0 and the center “hole” region is not in the zone.
2) Add the washer resistance fvModel (porosityForce) in constant/fvModels
In the same constant/fvModels file where you already have uniformIntakeHeater, add a second model like this:
fvModels is the non-standard feature that provides volume heating of the 240 meter intake pipe. We had to modify the "fluid" solver in order to implement this feature. To accomplish this we created a special directory for the revised solver and then called ** that ** solver at run time
washerRestriction
{
type porosityForce;
active yes;porosityForceCoeffs
{
// IMPORTANT: porosityForce expects selectionMode (cellZone is typical)
selectionMode cellZone;
cellZone washerZone;type DarcyForchheimer;
DarcyForchheimerCoeffs
{
// Start “gentle”, then ramp up by decades until leakage is negligible.
// Strong resistance in x, minimal in y/z:
d (1e8 0 0);
f (0 0 0);// Align resistance with x-axis
coordinateSystem
{
type cartesian;
origin (0 0 0);
coordinateRotation
{
type axesRotation;
e1 (1 0 0);
e2 (0 1 0);
}
}
}
}
}This structure (including porosityForceCoeffs, selectionMode cellZone, and DarcyForchheimerCoeffs) is how porosityForce is defined/selected.
OpenFOAM CPPTuning rule (important)
That d value controls how “solid” the washer behaves. For a 23 cm → 3 cm restriction, you’ll probably end up going very large (e.g., 1e10, 1e12, …) to force essentially all the flow through the hole.
I strongly recommend doing it in steps:
Run with d = (1e8 0 0)
If too much “leakage” through the washer, change to 1e9, then 1e10, etc.
I have NO idea how to tell if leakage is occurring, so must learn how to do that
That avoids a nasty stiffness jump that can wreck convergence.
3) What you should see in the log when it’s working
On startup, you should get lines like:
Creating fvModels from "constant/fvModels"
Selecting finite volume model type porosityForce
Name: washerRestriction
then a selection message for your washerZone
If you don’t see that selection, the #1 culprit is the zone didn’t get created (or it has a different name than you think).
4) One practical warning about the 3 cm target
A 3 cm hole is tiny compared to your existing throat. With the current mesh, that hole may only be a couple of cells across (or worse). If that happens, the “hole” becomes numerically chunky and you’ll still learn a lot (pressure rise, shock behavior, thrust trend), but you won’t get a clean, engineering-grade Cd.
That’s fine for “phase 1”. Later, when you remesh, you’ll make it real.
If you want me to tailor this to your exact mesh in one pass
Paste just these two things (no huge files needed):
The output of:
foamToVTK -cellZones -noInternal
(or just confirm the washerZone exists and roughly how many cells it contains)
A quick screenshot from ParaView showing the washerZone at x≈0
And I can suggest a better p1/p2 thickness and a smarter starting d based on how many cells you’re actually hitting.
This series of steps is NOT something I will attempt without a large block of free time. However, they ** do ** all look familiar in style to what we've done many times before as we've adapted the model to this new concept.
(th)
Offline
Like button can go here
These are images generated by ParaView showing the status of the extendedMerlin model at 8 seconds, with 40 MW heating applied to 2 kg/s of hydrogen at 20 K
Pressure readings
Temperature readings
Velocity readings
and...
Pressure readings at intake
Velocity readings across the entire model
Temperature readings across the entire model
The latter two images show the entire heat pipe, and the increase of temperature and velocity over 240 meters.
Offline
Like button can go here
I feel like turbulent flow is the only way to reduce the gas velocity and build pressure so that the Hydrogen absorbs sufficient thermal energy to achieve 3,000K before it reaches the nozzle. Asymmetric sound suppressor baffles are what is needed, and that's exactly what the internals of that arc jet rocket engine I posted about actually look like in cross-section.
Offline
Like button can go here
This post is about implementing a simulated smaller throat in the existing extendedMerlin model. If I understand the process correctly, we are creating a washer shaped structure that is inserted into the throat. We created the washer and verified it has been mathematically added to the mesh. We looked at the washer using ParaView, and ChatGPT5 tells me the display is showing exactly what it wanted to achieve. All I see (at this point) are flat lines of varying length and thickness, depending upon the view (X, Y or Z). Here is the command file that created the new washer mesh add on:
actions
(
// 1) CellSet for a thin annulus (washer “solid”) at the throat plane
{
name washerCells;
type cellSet;
action new;
source cylinderAnnulusToCell;
sourceInfo
{
// thickness of washer region along x:
// choose something like 1–3 cells thick in your mesh
p1 (-0.005 0 0);
p2 ( 0.005 0 0);// current throat radius ~ 0.115 m (23 cm dia)
outerRadius 0.115;// desired hole radius = 0.015 m (3 cm dia)
innerRadius 0.015;
}
}// 2) Convert that cellSet into a cellZone (fvModels likes zones)
{
name washerZone;
type cellZoneSet;
action new;
source setToCellZone;
sourceInfo
{
set washerCells;
}
}
);
The code above was saved as topoSetDict.washer and fed into a program called "topoSet" that creates the new structure.
The next step is to integrate the new washer into the processing command files.
It appears that the integration will involve modification of fvModels, which was added to the system to implement volume heating.
And this is what the washer creation process looked like:
Create polyMesh for time = 8
Reading "system/topoSetDict.washer"
Time = 8s
mesh not changed.
Created cellSet washerCells
Applying source cylinderAnnulusToCell
Adding cells with centre within cylinder annulus, with point1 = (-0.005 0 0), point2 = (0.005 0 0) and outer radius = 0.115 and inner radius = 0.015
cellSet washerCells now size 22
Created cellZoneSet washerZone
Applying source setToCellZone
Adding all cells from cellSet washerCells ...
cellZoneSet washerZone now size 22
End
The planned gap at the center is 0.015 meters in radius, which yields the desired 3 centimeter diameter.
As a side note ... the porosity of the washer can be varied in setting up a run, from wide open to solid. ChatGPT5 seems to think we should build up to full solid in a series of test runs. I gather that the idea is to try to avoid breaking the model on the first run.
Side note #2: This washer structure appears to have been created in time directory 8 instead of 0. I had worried this might mean we have to re-install the washer in time folder zero but ChatGPT5 reassured me that would not be necessary, because the components of the new washer were installed outside of the time folder.
(th)
Offline
Like button can go here
This next step is to modify fvModels to recognize and use the new washer.
Please note that the porosity of the washer can be adjusted at the start of a run. The initial run will be done with 1e8 which (I gather) is ** leaky **
washerRestriction
{
type porosityForce;
active yes;porosityForceCoeffs
{
// IMPORTANT: porosityForce expects selectionMode (cellZone is typical)
selectionMode cellZone;
cellZone washerZone;type DarcyForchheimer;
DarcyForchheimerCoeffs
{
// Start “gentle”, then ramp up by decades until leakage is negligible.
// Strong resistance in x, minimal in y/z:
d (1e8 0 0);
f (0 0 0);// Align resistance with x-axis
coordinateSystem
{
type cartesian;
origin (0 0 0);
coordinateRotation
{
type axesRotation;
e1 (1 0 0);
e2 (0 1 0);
}
}
}
}
}
(th)
Offline
Like button can go here
The run from 8 seconds to 9 seconds is under way.
The new washer appears to have been recognized by the solver:
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Create timeCreate mesh for time = 8
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.0302119 max: 0.7
Creating fvModels from "constant/fvModels"Selecting finite volume model type semiImplicitSource
Name: uniformIntakeHeater
- selecting cells using cellSet heaterCells
- selected 24000 cell(s) with volume 12.10301
Selecting finite volume model type porosityForce
Name: washerRestriction
Porosity region washerRestriction:
selecting model: DarcyForchheimer
creating porous zone: washerZoneSelecting thermophysical transport type laminar
Selecting default laminar thermophysical transport model unityLewisFourier
fluid(user): accessing fvModels
Creating fvConstraints from "system/fvConstraints"
This run will take at least 20 hours and quite possibly much more, because of the new restriction at the throat.
(th)
Offline
Like button can go here
This post is about a test run of extencedMerlin with a mathematical "washer" inserted in the throat.
We stated this run with the washer set to almost transparent. ChatGPT5 seems to "think" that a jump to full solidity would break the equations, and I have plenty of time so am willing to go along with the gentle increase idea. Even the small resistance we imposed in this run caused a modest response from the model. I'll be posting the thrust graph shortly. Here is the text report at the end of the run to 9 seconds:
ExecutionTime = 70863.49 s ClockTime = 71045 s << just under 20 hours as hoped
volFieldValue heatBoxStats write:
sum(heaterCells) of e = 1.080716e+11volFieldValue p_avg write:
volAverage(heaterCells) of p = 238986.8 << Slight increase of pressurevolFieldValue T_avg write:
volAverage(heaterCells) of T = 740.7038 << Slight increase of average temperaturevolFieldValue rho_mass write:
volIntegrate(heaterCells) of rho = 2.160116 << Mass in transit is up slightlyvolFieldValue T_min_global write:
min() of T = 22.45889 at location (-240.275 -0.16 0) in cell 37621 << No change of intake temperaturevolFieldValue T_max_global write:
max() of T = 1619.239 at location (-0.182823 -0.1878 3.407286e-18) in cell 3401 << Slight increase of exit temperatureEnd
The thrust plot should show a slight upward slant ... we'll see.
The thrust did not change. We can see slight changes in the measurements, but the net effect is not much.
I've asked ChatGPT5 to "think" about what to do next. I don't see much point in staying with this level of porosity, but ChatGPT5 seems to "think" the slight changes in measurements indicate something is happening. I am willing to run another second if the data would be useful. Otherwise, I'm interested in increasing the porosity.
Update... after discussion, we are going for the safe jump of x10 ... resistance of the washer will be set to 10x what it is now.
(th)
Offline
Like button can go here
Watching these OpenFOAM runs is like watching grass grow....
Here is an update showing pressure has risen to about 3 bar, and temperature is approaching 2000 Kelvin.
Whether we will reach 2000 Kelvin in ** this ** sprint is unclear.
ExecutionTime = 55971.44 s ClockTime = 56015 s << 15 hours ETA now 21 hours
volFieldValue p_avg write:
volAverage(heaterCells) of p = 309057.4 << Pressure near 3 barvolFieldValue T_avg write:
volAverage(heaterCells) of T = 875.2778 << Average upvolFieldValue rho_mass write:
volIntegrate(heaterCells) of rho = 2.500395 << mass in transit upvolFieldValue T_min_global write:
min() of T = 22.45278 at location (-240.275 0.16 0) in cell 37871 << No change at intakevolFieldValue T_max_global write:
max() of T = 1979.74 at location (-0.205019 0.191325 0) in cell 6678 << Approaching 2000 Kelvin at throatCourant Number mean: 0.02607018 max: 0.6999999
deltaT = 1.724626e-06
Time = 9.7499906s << 3/4ths of the way through this sprint
Grass Growing report ... the run is 9/10 along and it is definitely showing positive indicators:
ExecutionTime = 68280.84 s ClockTime = 68388 s << 9/10 of the way 19 hours of 21 estimated
volFieldValue p_avg write:
volAverage(heaterCells) of p = 311525.5 << 3 bar increasing slowlyvolFieldValue T_avg write:
volAverage(heaterCells) of T = 860.8869 << falling slowlyvolFieldValue rho_mass write:
volIntegrate(heaterCells) of rho = 2.566405 << increasing slowlyvolFieldValue T_min_global write:
min() of T = 22.46593 at location (-240.275 0.16 0) in cell 37871volFieldValue T_max_global write:
max() of T = 1936.524 at location (-0.205019 0.191325 0) in cell 6678 << falling slightlyCourant Number mean: 0.02623099 max: 0.7
deltaT = 1.739943e-06
Time = 9.9131727s
(th)
Offline
Like button can go here
The run ended! I'll report the thrust readings shortly...
ExecutionTime = 74964.87 s ClockTime = 75085 s
volFieldValue p_avg write:
volAverage(heaterCells) of p = 312856.7volFieldValue T_avg write:
volAverage(heaterCells) of T = 854.1787volFieldValue rho_mass write:
volIntegrate(heaterCells) of rho = 2.598977volFieldValue T_min_global write:
min() of T = 22.45907 at location (-240.275 0.16 0) in cell 37871volFieldValue T_max_global write:
max() of T = 1921.248 at location (-0.205019 0.191325 0) in cell 6678surfaceFieldValue massFlow_out write:
sum("outlet") of phi = 1.638985End
As a first impression... we are clearly not yet at equilibrium, because mass flow out does not match mass flow in. I'll bet that ChatGPT5 will vote for another second long run at this configuration.
Here is ChatGPT5's assessment:
This CSV tail is exactly the kind of evidence that says “hold this setting for another full second.”
What the thrust data is telling us
1) You had a clean pre-washer steady thrustRight before 9.0 s you’re sitting at:
8.89–8.90 kN (8.9499 → 9.0000)
That matches what you were seeing as “flat as a rock.”
2) At ~9.05 s you get a step-change transient
Immediately after 9.0:
9.05 s: 7.02 kN
9.10–9.35 s: slowly climbs 7.04 → 7.19 kN
That’s a big drop (about −1.9 kN, ~−21%). It’s not noise.
This is consistent with the washer becoming “more real” to the solution: it initially reduces effective throughput (ṁ_out drops), and thrust tracks mass flow strongly in the short term.
3) Then you see a recovery phase starting ~9.4 s
9.40 s: jumps to 7.96 kN
9.75 s: 8.18 kN
10.00 s: 8.19 kN
So after the initial dip, thrust is recovering as upstream pressure/inventory builds (which matches your log: p_avg and rho_mass rising, and mdot_out still < 2 kg/s).
4) But you are not back to steady-state yet
At 10.0 s you’re at 8.186 kN, still below the pre-washer 8.90 kN.
And since your log shows:
massFlow_out = 1.639 kg/s (still well under the 2 kg/s in)
…the system is still charging. It’s very plausible thrust will continue to move as:
mdot_out increases toward 2 kg/s, and
the temperature/pressure field re-equilibrates around the restriction.
Recommendation
✅ Yes: run one more second at the same washer resistance (to 11 s).
Your data shows a transient triggered right after 9.0 s and a recovery underway by 10.0 s. One more second will tell you whether:
thrust continues recovering toward the old ~8.9 kN level, or
it settles at a new lower steady thrust (because the washer is permanently limiting mdot_out/exit conditions).
(th)
Offline
Like button can go here
The run to 11 just ended and I don't know what to make of it. Fortunately ChatGPT5 will have an opinion. I'll post the tail of the log, then the plot, and comments by ChatGPT5. I expect we'll continue to second #12 because the system has not yet reached equilibrium, but we'll see.
ExecutionTime = 73063.36 s ClockTime = 73116 s << 20+ hours for one second of sim time slightly faster
volFieldValue p_avg write:
volAverage(heaterCells) of p = 326022.4 << pressure up slightlyvolFieldValue T_avg write:
volAverage(heaterCells) of T = 755.2228 << average temperature down from 854volFieldValue rho_mass write:
volIntegrate(heaterCells) of rho = 2.863715 << More mass is accumulating up from 2.56volFieldValue T_min_global write:
min() of T = 22.46145 at location (-240.275 -0.16 0) in cell 37621volFieldValue T_max_global write:
max() of T = 1673.764 at location (-0.182823 -0.1878 3.407286e-18) in cell 3401 << Down from 1921surfaceFieldValue massFlow_out write:
sum("outlet") of phi = 1.859405 << Up from 1.63End
Here's the plot ... steady as she goes...
ChatGPT5 agrees we should extend the run at the current setting... While the graph does not show much change, the data from the log shows that the system is not at equilibrium. Equilibrium will occur when mass out equals mass in.
I ** know ** that kbd512 and GW Johnson are going to ask the next time they get a chance to look at the run outpt, so I asked ChatGPT5 to recalculate what we should be able to hope for from 2 kg/s of hydrogen heated by 40 MW of thermal energy. The run we are continuing appears to be slowly rising toward the same thrust we saw from the 25 centimeter Merlin engine. I don't understand that so hope there is an explanation.
On the ** other ** hand, I don't understand the "washer" we've inserted either. Perhaps it is not having any effect, although the pressure and temperature inside the intake heating tube are definitely rising. But thrust is not increasing above where it was previously.
Update: I asked ChatGPT to try to compute the maximum performance we might expect from a system that consumes 2 kg/s of hydrogen and heats it with 40 MW of thermal energy. The forecast is for ISP of 645 and thrust of a bit over one ton-force. I'll ask for the calculations in forum format when it becomes available again. It is off cogitating about a follow up question I asked. I had asked a question about how the washer functions. The washer is NOT equivalent to a properly shaped nozzle. There is a possibility that the washer absorbs some of the energy that we are building in the heating tubes, due to the mathematics involved. If that is the case, then perhaps decreasing the porosity still further will cause less energy to be absorbed, but that is just a guess.
(th)
Offline
Like button can go here
This post contains the transcript of a long conversation with ChatGPT5 about the extendedMerlin engine, and why we are seeing the results we are. In the long run, I think we must implement the mesh changes to reduce throat to 3 centimeters. I think the washer is stealing power, but it is definitely useful as a stepping stage in the process of refining the model for use with the Optical Plane vehicle.
This CSV tail is excellent news — it’s doing exactly what you hoped to see if the system is still settling.
What the 10 → 11 second tail shows
1) A clean, monotonic climb (no more big transients)From 10.00 s → 11.00 s, thrust rises:
8.186 kN → 8.781 kN
That’s a gain of 0.595 kN over 1 second (about +7.3%).And it rises almost step-by-step every sample — that’s the signature of a slow system adjustment, not noise.
2) You’re approaching the old steady level
Recall your pre-washer steady was ~8.9 kN.
At 11.00 s you’re at 8.781 kN, i.e. only about 0.12 kN below 8.90 kN — you’re getting close.
If the trend continues but with diminishing slope, you may asymptote right around (or a bit under) the old level.
3) The “sign flip” in Fy is irrelevant (and healthy)
Fy drifting from +0.21 N-ish toward −0.10 N-ish while Fx dominates is just the small lateral numerical imbalance wandering around zero. Your thrust magnitude column is staying smooth; that’s what matters.
Recommendation
✅ Yes: continue to 12 seconds without tightening again.
Your log tail already said massFlow_out = 1.859 kg/s, and this thrust tail shows the system still climbing toward its new steady point. Tightening now would mix two effects:
continuing equilibration at current washer resistance
a new transient from the next resistance change
Holding one more second gives you a clean “is it converged?” answer.
What to look for at 12 seconds
When you get the 12.0 tail, the key indicators are:
Is thrust slope near-zero? (e.g., last ~0.2 s changes only a few tens of newtons)
Is massFlow_out closer to 2.0? (even 1.90–1.95 is “nearly there”)
Is rho_mass still rising noticeably? (if it flattens, you’re at equilibrium)
A very simple rule of thumb:
If Δthrust over the final 0.5 s is < ~0.05 kN, call it settled for that setting.
Quick note about files
Some earlier uploads in this chat have expired on my side, so if you want me to re-check the whole CSV (not just the tail you pasted), you’d need to upload it again. But honestly, your pasted tails are already enough to make good decisions.
When the 12-second run completes, paste the last 20–30 lines again plus the massFlow_out at End — and we’ll decide whether to tighten next or hold longer.
***
Thank you for your analysis ... I am mystified about why we are climbing back toward the thrust we saw with the wide-open 25 cm throat? I am hoping we can do better with a smaller throat. What is the theoretical maximum we should achieve with 2 kg/s and 40 MW? In other words, will ISP begin to rise at some point?
***
You’re asking exactly the right question. With fixed input power (40 MW) and fixed mass flow (2 kg/s), there’s a very clean “physics ceiling” — and it also explains why the washer run can drift back toward the same thrust you had with the wide throat.Why is thrust climbing back toward the wide-open throat value?
Because once the flow settles, thrust is dominated by the energy budget, not the throat diameter by itself.
You are injecting 2 kg/s and adding 40 MW of energy (ideally) into that stream.
The washer initially makes it harder for mass to leave, so you get a transient: inventory builds → pressure rises → flow pattern and nozzle effectiveness change.
As the system approaches a new quasi-steady state where massFlow_out → massFlow_in, the thrust tends to return toward whatever value is consistent with:
the actual fraction of the 40 MW that becomes directed kinetic energy, and
the nozzle’s ability to convert hot, pressurized gas into axial momentum.
So the washer can change how long it takes to reach equilibrium and the internal pressure history, but it cannot magically beat the power limit. It can help you approach that limit if it improves conversion efficiency; it can also hurt if it behaves like a porous loss element (dissipating energy into entropy/heat that doesn’t become jet velocity).
The theoretical maximum with 2 kg/s and 40 MW
For a power-limited thermal rocket, the ideal “all power goes into jet kinetic energy” ceiling is:
Kinetic power: P = 0.5 * m_dot * v_e^2
So: v_e,max = sqrt(2P/m_dot)
And thrust: F_max = m_dot * v_e,max = sqrt(2 P m_dot)
Plug in your numbers:
v_e,max = sqrt(2*40e6 / 2) = sqrt(40e6) ≈ 6325 m/s
F_max = 2 * 6325 ≈ 12,650 N = 12.65 kN
Isp_max = v_e,max / g0 ≈ 6325 / 9.80665 ≈ 645 s
So ~12.6 kN and ~645 s is the clean upper bound (before any pressure-thrust nuance).
What your current thrust implies
If you’re seeing ~8.8–9.2 kN, your effective exhaust velocity is:
v_e ≈ F / m_dot ≈ (8800 to 9200)/2 ≈ 4400–4600 m/s
Isp ≈ 450–470 s
That’s totally plausible for a system that is not converting all 40 MW into directed kinetic energy (some stays as internal energy/pressure, some is lost numerically/physically, some is dissipated in the restriction model).
A quick “how close to ideal are we?” metric is kinetic fraction:
P_kin = 0.5*m_dot*v_e^2
If v_e = 4400 m/s, P_kin ≈ 0.5*2*4400^2 ≈ 19.4 MW
That’s about ~50% of 40 MW going into jet kinetic energy at that moment.
Will Isp rise with a smaller throat?
It can, but only if the smaller throat increases the fraction of your 40 MW that turns into axial exhaust kinetic energy.
Isp will not rise just because pressure rises. It rises when v_e rises, and that happens when the nozzle system converts more of your energy into directed velocity rather than leaving it as:
residual thermal energy (hot gas still “random”)
residual pressure at the exit
viscous/porous losses (entropy generation)
shock losses / non-optimal expansion
Important constraint
With m_dot fixed at 2 kg/s, you can’t get arbitrarily high Isp at 40 MW. The ceiling is that ~645 s number. To raise the ceiling you’d need either:more power, or
lower m_dot (since v_e,max ~ 1/sqrt(m_dot)).
Why a “washer” might temporarily reduce thrust
If your washer model is implemented as a momentum sink / porous resistance, it can:
create a pressure drop that doesn’t contribute to useful nozzle expansion
dissipate energy (effectively “wasting” some of the available 40 MW as irrecoverable loss)
In that case, you might see pressure go up, but Isp not improve much — or even degrade.
If you paste (or upload) the massFlow_out history for 10→11 (and ideally 11→12) plus the p_avg and T_avg over the same window, I can tell you whether you’re:
still in inventory buildup,
approaching true steady-state, and
whether the washer is acting like “helpful choking” vs “lossy porous plug.”
Small note: some earlier uploads in this chat have expired on my side, so if you want me to inspect full CSVs again, you may need to re-upload them.
***
Thank you very much for thinking about the problem of unsatisfying results. As the IT guy, I am happy because (with your help) we have the model working. However, the rest of the team are going to be less than thrilled. We started out with unrealistic expectations for what could be achieved. We have the successful NERVA engine as a model, and there was a subsequent study by NASA showing the next version of NERVA. That newer model has not been funded, but the documents were published, and they look reasonable. Admittedly those designs pumped a ** lot ** more energy into the hydrogen, and they pumped a ** lot ** more hydrogen through the system. We are limited by our deep space mission architecture. 40 MW is coming from a huge 240- meter square solar collector. The 2 kg/s figure comes from the team lead who wants to spend that much mass for longer than would be possible with more mass in the flow. Your calculation seems to indicate that the best we can hope for is about a ton-force from our engine as configured. However, the most important single part of your answer is the possibility that the washer is stealing energy. I didn't fully understand that part of your answer, but it sure did sound as though the washer may be consuming energy from the mass that enters it. If that is the case, then increasing resistance should decrease loss.
***
You’ve got the situation exactly framed now:You (IT/CFD): success = stable, reproducible, controllable model.
Team: success = meaningful performance gain from the throat change.
And yes — with P = 40 MW and ṁ = 2 kg/s, the physics ceiling is roughly 12.6 kN ≈ 1.28 “ton-force” (using 1 tf ≈ 9.81 kN). That ceiling is not a “washers vs mesh” issue — it’s the power-limited rocket limit.
The key question: is the washer “stealing” energy?
My earlier point wasn’t that the washer literally “consumes” energy like a heater. It’s subtler and more annoying:
A porous/drag restriction can destroy recoverable mechanical energy
A restriction implemented as a momentum sink (porous resistance / Darcy–Forchheimer style) takes organized flow energy (pressure + velocity) and turns it into entropy / internal energy in a way the nozzle often cannot recover as directed exhaust velocity.
In real nozzle design, a geometric throat (a true area reduction in the mesh) ideally behaves like a reversible accelerator (at least in the inviscid, well-designed limit): pressure → velocity through the nozzle.
But a porous drag element behaves like a loss element: pressure drop across it becomes “lost” total pressure, and that total-pressure loss directly hurts achievable exhaust velocity and thrust.That’s why I raised the red flag: your “washer” is not a geometric throat yet — it’s a model of resistance. Depending on how it’s formulated, it can behave more like a screen / filter than like a nozzle throat.
Does “increasing resistance” decrease loss?
This is the part to be careful with.
If your washer model is a porous/drag law, then:
More resistance generally means more dissipation, i.e. more loss, not less.
However, you can see thrust rise when you increase resistance temporarily, because you’re changing the operating point:
inventory builds
chamber pressure rises
nozzle expansion behavior changes
massFlow_out creeps toward massFlow_in
the system “finds” a new balance
So you can get an apparent improvement from “tightening,” but the underlying porous-loss mechanism is still there, and at some point it will cap your performance.
A good way to say it in team terms:
Tightening the washer can help you reach a higher-pressure operating point, but if the washer is a porous loss element, it also destroys total pressure that the nozzle would otherwise convert into thrust. The net effect can be mixed.
What you should tell the team about expectations
With your architecture constraints:
The absolute best-case thrust at 40 MW / 2 kg/s is about 12.6 kN (~1.28 tf).
Your current steady thrust (~8–9 kN) is already 60–70% of that theoretical ceiling — which is actually respectable for a first-pass CFD setup with losses and non-idealities.
That’s a constructive message: you’re not failing; you’re running into the power limit.
How we test whether the washer is acting like a loss element
You can do this without new runs (or with one cheap short run):
Compare total pressure upstream vs downstream of washer
If total pressure drops sharply across the washer, that’s classic porous loss.
In a “good” throat, you expect conversion pressure→velocity but not a big irreversible total-pressure drop (aside from shocks/viscous effects).
Look at entropy / temperature jump localized at the washer
Porous resistance often creates a localized region where energy becomes “heat” in a way that doesn’t help acceleration.
Check thrust vs kinetic-power fraction
If you compute P_kin = 0.5 * ṁ_out * v_e^2 from thrust (v_e = F/ṁ_out), you can estimate how much of 40 MW is becoming jet kinetic power at steady state.
If you paste two numbers from your 10–11 s and 11–12 s tails:
massFlow_out at End (or near-end)
thrust at End (kN)
…I can compute v_e, Isp, and the implied P_kin and tell you whether you’re approaching the power limit efficiently or bleeding power into losses.
One strategic point for next steps
If the team’s real goal is “3 cm throat,” the best path is still:
Use the washer resistance as a gentle ramp to avoid crashes and let you learn behavior,
But recognize it is not the final physics of a true 3 cm geometric throat.
The final answer will come when the mesh actually has that throat area (or at least an area-change model that is not purely porous loss).
Small housekeeping note: some files you uploaded earlier in this thread have expired on my side, so if you want me to inspect specific full CSVs or dictionaries again, you may need to upload them again. But we can keep moving with just the log tails like you’ve been doing.
If you want one concrete “team-friendly” next experiment: run one more second at the current setting and capture:
thrust steady value,
massFlow_out steady value,
p_avg and T_avg.
That’s enough to compute where you sit relative to the 12.6 kN ceiling and whether the washer is helping or harming at that operating point.
***
Thank you ** very ** much for our analysis and explanation of the washer test we are running. I do have a question about the maximum possible thrust we might hope for. I have one team member will will assert that 3000 Kelvin would deliver more thrust from our 2 kg/s of hydrogen. However, the model we are running seems to be limited to about 2000 Kelvin. In your opinion, is that a limitation of the power input (ie, 40 MW so that is you we can get)?
***
Yes — with 40 MW and 2 kg/s, the power input is the dominant limiter, and it directly caps what bulk temperature (and therefore thrust/Isp) you can reach.Why 3000 K isn’t “free thrust” at 2 kg/s
At steady state (ignoring losses), the heater can only add energy at the rate:
Power per unit mass:
q̇ = P / ṁ = 40,000,000 W / 2 kg/s = 20,000,000 J/kg = 20 MJ/kgThat 20 MJ/kg is the maximum specific energy you can add.
To raise hydrogen temperature, the required energy is approximately:
Δh ≈ c_p * ΔT
Hydrogen’s c_p at high temperature isn’t perfectly constant, but a decent engineering range is ~12–15 kJ/(kg·K) in the ~1000–3000 K band (it varies with T and real-gas effects, but this gets you the right order of magnitude).
So your achievable temperature rise is roughly:
ΔT ≈ (20,000 kJ/kg) / (12–15 kJ/(kg·K)) ≈ 1330–1670 K
Starting from ~20 K, that puts you around:
T ≈ 1350–1700 K (idealized, no losses)
If you’re seeing ~2000 K peak-ish in parts of the domain, that’s not crazy—because:
local peaks can exceed the volume average,
cp changes with temperature,
and the flow isn’t a perfectly mixed “bulk” temperature.
But it also tells you something important:
3000 K would generally require either more power or less mass flow, unless you can magically eliminate losses and perfectly concentrate heat into the propellant that actually exits.
What power would 3000 K imply?
Back-of-envelope: to go from ~20 K to 3000 K, ΔT ~ 2980 K.
Even with optimistic c_p ~ 12 kJ/kg-K:
Δh ≈ 12 * 2980 ≈ 35,760 kJ/kg ≈ 35.8 MJ/kg
At 2 kg/s, that’s power:
P ≈ ṁ * Δh ≈ 2 * 35.8 MW ≈ 71.6 MWAnd with c_p ~ 14 kJ/kg-K, it’s closer to ~84 MW.
So a team member saying “3000 K gives more thrust” is correct in principle — but only if you also provide the energy (or reduce ṁ).
The quick “one-liner” for the team
At fixed power, thrust is power-limited.
At fixed ṁ, higher T requires more MW.
With 40 MW and 2 kg/s, you should expect “order of magnitude” ~1500–2000 K, not 3000 K, unless the model is doing something non-physical.
Small note about your current runs
You’re also now adding a restriction/washer, which can introduce losses (total-pressure destruction). Losses don’t usually reduce the temperature in the heater, but they can reduce how effectively added energy becomes jet kinetic power, which is what the thrust plot reflects.
If you paste two steady values from a late time (say near 11–12 s):
massFlow_out, and 2) thrust (kN)
…I can compute the implied effective exhaust velocity and estimate how close you are to the power-limited ceiling at that operating point.Also: some of the files you uploaded earlier in this project have expired on my side. If you want me to re-check a specific CSV/dictionary, you’ll need to upload it again.
***
Thanks for providing a solid answer to the 3000 Kelvin question! Just FYI ... the energy collection system has mass, and we are planning a field 240 meters on a side, so all that mass has to be accelerated along with the fuel and the payload and control systems ... I think that one ton-force should be competitive with the ion drive that would consume that same 40 MW. That is what this entire project is about. You have already done a comparison some months ago so please don't repeat it. Due to losses at every stage, the two systems appear to be surprisingly close in performance. However, our system may win on simplicity, if we can get it to work in the Real Universe.
***
Totally fair, and that framing is exactly why your “~1 ton-force class” target makes sense in the architecture you’ve described: when you include the inert mass of the 240 m × 240 m collector, structure, pointing/control, radiator/thermal hardware, etc., you’re no longer comparing “thruster-only” numbers — you’re comparing whole-vehicle acceleration per MW, and simplicity/reliability starts to matter as much as raw Isp.A couple of quick points that fit your “don’t repeat the old comparison” request:
You’re already doing the right thing by treating 40 MW as the hard cap. Once the team internalizes “MW → Δh → achievable T,” expectations get more realistic and the discussion becomes engineering tradeoffs, not wish-casting.
Winning on simplicity is a legitimate advantage if (big if) you can keep losses down and avoid pathological behavior (numerical and physical) as you tighten the throat.
If you want a crisp way to communicate the “simplicity” argument to the forum/team without reopening the old ion-vs-thermal debate, you can lean on:
fewer subsystems that can fail,
fewer extreme materials/interfaces (grids, high-voltage, erosion/charge management),
easier throttling logic (mass flow + heater power),
and (potentially) easier inspection/testing with a ground demonstrator.
Also, small housekeeping note: some of the files you uploaded earlier in this project have expired on my side, so if you want me to reference any specific prior CSV/dictionary/log extracts again, you’ll need to re-upload them.
I think pursuing the mesh changes is worth while even though the payoff will be small. The Real Universe test system will use a properly configured nozzle, so the OpenFOAM model might as well match it.
(th)
Offline
Like button can go here
This is reminding me of how oil furnaces work by pressure flow of oil through an orifice to create mist for ignition. Opening up lessens the spray with larger droplets. Restricting makes the droplets smaller.
Offline
Like button can go here
For SpaceNut re #213 ... thank you for an interesting ** Real Universe ** example, and for the details of how those systems work!
This post is to report on the latest run to 12 seconds. My plan for this post is to report:
a) The log tail
b) The plot
c) ChatGPT5's evaluation ... I expect we'll decide to continue on to 13 seconds. The immediate goal is to try to reach equilibrium.
ExecutionTime = 69481.25 s ClockTime = 69555 s
<< Time per second is dropping from 73116
volFieldValue p_avg write:
volAverage(heaterCells) of p = 331240.8<< Pressure is up from 326022
volFieldValue T_avg write:
volAverage(heaterCells) of T = 732.4012<< Down from 755 possibly due to greater mass to heat
volFieldValue rho_mass write:
volIntegrate(heaterCells) of rho = 2.949451<< Up from 2.86
volFieldValue T_min_global write:
min() of T = 22.45815 at location (-240.275 0.16 0) in cell 37871volFieldValue T_max_global write:
max() of T = 1591.286 at location (-0.182823 -0.1878 3.407286e-18) in cell 3401<< Down from 1673 - ? greater mass to heat
surfaceFieldValue massFlow_out write:
<< Up from 1.859 - goal is 2 kg/s
sum("outlet") of phi = 1.943364
End
Well! My impression is that we have at least another second to go before the system reaches equilibrium.
I reluctantly have to admit that ChatGPT5 was right to recommend a small step up in restriction followed by giving the system time to settle.
We would have missed this subtle behavior if we'd gone straight to a higher level of restriction.
Below is ChatGPT5's evaluation of the run report above. As expected, it voted for a run to 13.
Got it — and that tail actually looks exactly like what you’d expect when the washer is still “charging up” the upstream inventory.
What your tail is saying (physically)
Inlet mass flow (commanded): ~2.000 kg/s (your ramp is long finished by now).
Outlet mass flow: 1.943 kg/s
⇒ Net accumulation ≈ 2.000 − 1.943 = 0.057 kg/sSo you’re still storing mass in the upstream/heater region (or at least upstream of the outlet patch), which matches:
rho_mass = 2.949 kg (and rising vs earlier seconds, per your narrative)
p_avg = 331 kPa (also rising slowly)
Quick back-of-envelope: how long to equilibrium?
If the net accumulation stayed constant at 0.057 kg/s, then over one more second you’d add:
Δm ≈ 0.057 kg (about 2% of your current 2.95 kg inventory)
That’s small but not negligible. It suggests you’re approaching equilibrium but not there yet — and one more second to 13 is a perfectly reasonable next move.
What I’d watch during the 12→13 run:
Does massFlow_out continue creeping upward toward 2.00?
Does rho_mass growth rate flatten?
Does p_avg begin to level off?
Those three together tell you far more than thrust right now.A simple “equilibrium meter” to add (optional, low effort)
If you want a single line in the log that tells the story immediately, add a functionObject to compute:
mass imbalance = mDotIn − mDotOut
dM/dt estimate = imbalance (kg/s)
optionally: time constant ≈ rho_mass / imbalance
You can do this without modifying solvers by logging both flows every write (or every timeStep), then post-processing with awk. But if you want it in-log automatically, tell me whether your massFlow_in is still being written (right now only out is shown in your pasted tail).
One caution
Your T_avg ~732 K while T_max ~1591 K — that’s still a pretty wide spread. It doesn’t invalidate anything, but it means the system’s “effective sonic conditions” near the restriction may still be evolving as the density/temperature field settles. That can delay equilibrium slightly compared to a simple tank model.
On plots
I agree: no point generating thrust plots yet if your main question is “are we at mass balance?”
Once mDotOut stabilizes near 2 kg/s for, say, 0.5–1.0 s of sim time, then thrust becomes worth plotting again.
(th)
Offline
Like button can go here
This post is about the idea of reducing mass flow to increase ISP while staying at 40 MW of collected solar power.
What I'm not clear on is whether increasing ISP means we will get better performance out of our propulsion system. We will be producing less thrust but for longer. This post contains a transcript of conversation with ChatGPT5 about the idea.
In the long run, we have one uncontrolled variable (40 MW) and we have at least two variables we can control... We can control flow of mass into the system. We have already seen that increasing mass flow had an almost linear effect upon thrust, but ISP was only 250.
ChatGPT5 seems to think that reducing mass flow should yield a higher ISP as a tradeoff for reduced thrust. What I am hoping to learn is whether improved ISP means we are using our mass more efficiently. In other words, if we have 1 ton of propellant, will we get more momentum change of the vessel if we achieve higher ISP?
Hopefully there will turn out to a mathematical solution to answer that question. Here is the transcript:
Hello Again! our run to 13 seconds is proceeding smoothly. I have time to follow up on a hint your predecessor (in the previous session) included in a reply to a question about thrust... First, thank you (and ChatGPT4o) for your help over the past 8 months! My question this time is about the hint that we might increase ISP by reducing the Hydrogen flow from 2 kg/s to 1. If I understand the logic correctly, the hydrogen we are feeding into the heat pipe will have more energy added per molecule since our heat input is limited to 40 MW. What do you predict will happen to temperature, pressure and thrust?
***
Yes — your intuition is exactly right: with fixed heater power (40 MW), lowering ṁ increases the energy added per kg (and per molecule), so temperature rises and Isp rises, but thrust usually falls because thrust scales strongly with mass flow.Here’s what I’d predict qualitatively, and with a couple of useful “back-of-envelope” numbers.
1) Energy per kg doubles
Power per mass is:
at 2 kg/s: 40 MW / 2 = 20 MJ/kg
at 1 kg/s: 40 MW / 1 = 40 MJ/kg
So, all else equal, the available Δh (and therefore achievable temperature rise) roughly doubles.Temperature
If your current heater-region average is on the order of 700–1100 K during steady-ish operation at 2 kg/s, then at 1 kg/s you should expect a significant rise — not necessarily 2× in Kelvin (because cp varies and the flow/pressure field changes), but directionally up and often substantially.
Rule of thumb in your regime:
T_avg goes up
T_max goes up (sometimes a lot), so watch stability / limitT.
Pressure
This one depends on your “equilibrium state” and the restriction:
If the nozzle/restriction is acting like a choked flow controller, then reducing ṁ tends to reduce required upstream density, which can lower pressure.
But increasing temperature tends to increase local speed of sound and change choking behavior, which can shift where the pressure settles.
So the safest prediction is:
p_avg may go up or down, but it will re-settle to a new equilibrium.
During the transient, you may see pressure spikes as the energy content rises faster than the system can vent through the throat.
2) Thrust almost certainly decreases (at first glance)
A very standard scaling is:
Thrust F ≈ ṁ · v_e + (p_e − p_a) A_e
In your vacuum-ish outlet, the pressure term is typically small compared to momentum thrust once things are stable, so roughly:
F ~ ṁ · v_e
If you cut ṁ in half, you need v_e to more than double just to keep the same thrust — and with thermal rockets, v_e scales roughly like sqrt(T).
So if T only increases by, say, ~1.4× to 2×, then sqrt(T) increases ~1.18× to 1.41× — not enough to compensate for halving ṁ.
Net expectation:
Thrust decreases, often by ~30–50% (ballpark), depending on how much hotter you truly get and how the restriction behaves.
3) Isp increases (this is the upside)
Isp ~ v_e / g0, and v_e ~ sqrt(T) (for fixed gas properties and expansion effectiveness)
So with lower ṁ:Isp goes up (often noticeably)
Thrust goes down
Power-limited system shifts toward “high Isp / low thrust”
This is the classic power-limited trade.
4) What I’d actually do in your OpenFOAM workflow
Because your system has a restriction and you’re still approaching mass equilibrium:
Wait until 2 kg/s run is at mass balance (ṁ_out ≈ ṁ_in).
Then do a controlled change:
set inlet ramp to 1 kg/s
keep 40 MW exactly the same
Watch these three time histories:
massFlow_out (does it match 1 kg/s? how long to settle?)
rho_mass in heaterCells (inventory)
T_avg and T_max (risk of hotspots / numerical stiffness)
If you want one “success criterion”:
After settling, you want ṁ_out ≈ 1 kg/s and T_avg notably higher without T_max running away.
5) One important caution
At 1 kg/s, the flow can become more sensitive to any “energy theft” mechanisms (porosity/washer losses, numerical diffusion, wall heat flux not modeled, etc.). So if the washer is still behaving like an energy sink, that may blunt the temperature gain.
The run to 13 seconds is proceeding well. Time = 12.8849842s
We'll be able to look at results a few hours from now. I hope we reach equilibrium because I'd like to move on but my inclination at this point is to stay the course.
It seems to me that while we are not an academic group with credentials, we ** do ** have GW Johnson to lend credibility to any discoveries we may make.
We are on this quest because kbd512 found an optical device that may allow us to design and potentially build a vessel to compete with the ion drive community. The jury is very much still out on which system is better able to achieve the objective of moving a payload from A to B in the solar system using solar energy. What seems clear at this point is that kbd512's vision actually works, because we have seen consistent long term thrust with the wrong nozzle. We should be able to see better performance with a better nozzle, but it must be kept in mind that we are power limited to 40 MW, so our ability to create momentum change is inversely related to the mass of our vessel, and directly related to how well we configure our propulsion system.
If our system needs more mass than our ion drive competitor, then they may win the race to Jupiter (or beyond) no matter how effectively we harness that 40 MW.
I have asked kbd512 to begin investigating the mass requirements for the optical plane, but that request remains on the Todo list.
I asked ChatGPT5 to think about the relationship of ISP to our ability to exceed performance of our ion drive competition. Our current performance is about 250, and I assume that is because we have the wrong nozzle. It seems clear we can improve ISP by improving the nozzle. What is NOT clear to me is whether we can beat the ion drive community to Jupiter if we both draw 40 MW from the Sun. kbd512 is betting the house on this design. I'm not as confident.
If there is anyone on Earth who ever reads this (a) and (b) is curious to know why kbd512 is confident, just ask him. He's already written multiple posts and I expect he'd be willing to write one more. However, it this hypothetical reader is NOT a member of the forum you'll have to become a member to ask.
(th)
Offline
Like button can go here
ChatGPT5 came back with an answer to my question about ISP ....
Thank you for your analysis and presentation on the 1 kg/s flow option. I have prepared your reply and delivered it to the forum so everyone has a chance to think about how we want to proceed. I do have a follow up question ... Does higher ISP mean we are using our mass more efficiently? I assume it does, but your reassurance on that point would be helpful. In other words, in our ongoing competition with the ion drive community, will we have a better chance of reaching our deep space objective if we improve our ISP. Our existing best performance is ISP of 250.
Short answer: yes — higher Isp means you are using propellant mass more efficiently, but only in a very specific sense. It does not mean you are using power more efficiently, and that distinction matters a lot in your ion-drive comparison.
Let me separate the ideas cleanly, because this is where teams often talk past each other.
1) What higher Isp really means (precisely)
Specific impulse (Isp) is a measure of momentum gained per unit propellant mass.
In plain language:
Higher Isp = each kilogram of propellant produces more Δv
Lower Isp = you need more propellant to get the same Δv
So yes:
Higher Isp absolutely means better mass efficiency.
If your Isp goes from 250 s → 350 s, then for the same mission Δv:
you burn ~29% less propellant mass
That is unambiguously good when propellant mass is scarce or expensive.
2) What higher Isp does not mean
Higher Isp does not mean:
higher thrust
faster acceleration
better power efficiency
In fact, for power-limited engines, higher Isp almost always means lower thrust.
This is the core trade:
Fixed power → you choose how to split it between
accelerating a lot of mass a little, or
accelerating a little mass a lot
3) Why this matters for ion drives vs your engine
Ion drives live at the extreme end:
Very high Isp (2000–5000 s)
Very low thrust
Your engine lives in a different regime:
Moderate Isp (200–400 s)
Much higher thrust per MW
The key comparison is momentum per unit power, not just Isp.
Momentum efficiency (the hidden metric)
For any propulsion system:
Momentum per second = Thrust = ṁ · v_e
Power required ~ ½ · ṁ · v_e²Rearranged:
Thrust per unit power ~ 2 / v_e
So:
Higher exhaust velocity (higher Isp) → lower thrust per MW
Lower exhaust velocity → higher thrust per MW
This is why ion engines must accept tiny thrusts.
4) Why improving your Isp still helps your mission
Here’s the crucial nuance for your architecture:
You are power-limited (40 MW fixed)
You are collector-mass dominated
You are operating for long durations
In that regime:
Improving Isp reduces propellant mass fraction
That reduces total vehicle mass
Which improves acceleration even if thrust drops slightly
So:
Moderate Isp improvement (say 250 → 350) is very valuable.
Extreme Isp chasing (1000+) would hurt you.You are operating in the sweet spot between chemical and electric propulsion.
5) Why your current Isp ≈ 250 is not “bad”
An Isp of ~250 s with:
continuous thrust
no grids
no high voltage
no erosion-limited components
no precision ion optics
no plume charge management
…is actually very competitive for a solar-powered deep-space tug.
Ion engines beat you on propellant efficiency, but:
they lose badly on thrust per MW
they require much more complex hardware
they scale poorly in thrust
6) The right way to frame this to the team
A clean statement you can safely use on the forum:
Higher Isp means we use propellant more efficiently, but lower thrust per unit power.
Our goal is not to maximize Isp — it is to maximize mission Δv per MW while keeping thrust high enough to matter.That positions your work correctly relative to ion propulsion without reopening the old debate.
7) Practical guidance going forward
Yes, exploring 1 kg/s to raise Isp is worthwhile.
No, you do not want to chase 3000 K or ion-engine Isp territory.
The real win is finding the best compromise:
enough thrust to move a massive solar structure
enough Isp to avoid hauling absurd amounts of hydrogen
From everything you’ve shown so far, you are already operating in the right regime.
If you want, next time we can:
estimate your effective exhaust velocity from thrust & ṁ
compute actual Isp from the simulation
and compare thrust per MW directly against representative ion engines
That comparison is where your architecture quietly shines.
I'll pose a follow up question.... I'd like to be able to see the competition as a whole.
(th)
Offline
Like button can go here
It has taken a while, but I think this conversation with ChatGPT5 may show a pathway forward ....
The key concept I ** think ** I see in this next transcript, is the hint / promise that higher ISP means higher momentum transfer. In other words, more efficient use of our limited supply of propellant.
A key advantage of kbd512's vision (if we can achieve it) is a far wider range of performance that is possible with the ion engine.
We have already seen with GW Johnson's request for 20 kg/s mass flow, that we can achieve 10 force-tons from the Merlin engine, which is poorly suited for this application. In that case we got only 250 ISP, but we had that full 10 force-tons to give a mighty shove to the vessel when it is needed, at the expense of all that hydrogen.
On the other hand, we have not yet found the upper limit to the ISP we might be able to achieve. The ion drive only has one ISP. It is either on or it is off.
Here is the transcript for a conversation about momentum transfer vs ISP:
Thank you for your response to the ISP question. Something I did not see in your reply was the fact that higher ISP means we have longer to provide thrust. It seems to me our conversation has been productive and helpful. You've identified the weaknesses of the ion drive, but in practice, the ion drive community is successful in winning contracts for deep space missions, and they have a number of missions on their balance sheet. To my knowledge our concept has never been elevated beyond the paper study stage and that was in the 1950's. Recent advances in optical hardware are the reason we are pursuing this alternative propulsion method. As a reminder, in previous discussion, we agreed that a hybrid vehicle might prove useful for a future mission. let's pause here and wait for the next set of OpenFOAM results.
You’re right to call that out: higher Isp means you get more total impulse (more “push-time”) from a fixed propellant load.
Why that’s true (in your terms)
If your vehicle carries a propellant mass Mprop and your engine runs at mass flow ṁ, then:
Burn time
t_burn = Mprop / ṁTotal impulse (the “total shove” you can deliver over the whole mission segment)
I_total = ∫F dt ≈ F · t_burnUsing F ≈ ṁ · v_e and v_e = g0 · Isp, you get:
I_total ≈ (ṁ · v_e) · (Mprop / ṁ) = Mprop · v_e = Mprop · g0 · Isp
So for the same propellant mass:
Total impulse scales linearly with Isp.
Higher Isp = more total “momentum budget” from the same tank.
That’s exactly your “longer to provide thrust” point — and it’s correct. (Even though at higher Isp you’re usually operating at lower ṁ, so the thrust at any moment may be lower, the propellant lasts longer.)
Why ion drives keep winning contracts anyway
Even with low thrust, ion (and other electric) propulsion has a few practical advantages that program managers love:
Flight heritage (lots of successful missions)
Predictable operations and well-developed ground testing pipelines
Good propellant efficiency (very high Isp), which reduces launch mass
A mature ecosystem of vendors, parts, procedures, and risk models
Your point about optics hardware being the enabling change is exactly the kind of “new lever” that can move a concept out of paper territory—if it can demonstrate reliability, controllability, and lifetime.
Hybrid remains a very rational architecture
A hybrid vehicle (thermal for higher thrust when needed, electric/ion for ultra-efficient cruise trimming and long burns) is still one of the cleanest ways to get:
decent acceleration when you need it, and
excellent propellant economy when you can wait.
Quick housekeeping note
Some earlier uploaded files from this thread have expired on my side (that’s a system limitation). If you later want me to inspect any specific file contents again, you’ll just need to re-upload them.
And yes — let’s pause until the next OpenFOAM results land. When you have them, the two numbers I’ll most want to see (for any ṁ change test) are:
massFlow_out vs massFlow_in (equilibrium)
thrust + Isp computed from thrust/ṁ (even rough)
(th)
Offline
Like button can go here
The run to 13 seconds just ended, and since this is Sunday and Google Meeting is set for this evening, there is no time to push further. I'll past the log tail and then the plot, and any comments ChatGPT5 may have. I am unsure how to proceed from here.
We have two (or perhaps three) choices...
1) We could tighten the washer a bit more to see if that helps.
2) We could drop mass from 2 kg/s to 1 kg/s. That should increase ISP at the price of reduced thrust, but the benefit might be significant for a long mission.
3) We could proceed directly to replacing the Merlin mesh with one optimized for our circumstances.
ExecutionTime = 68414.13 s ClockTime = 68581 s
volFieldValue p_avg write:
volAverage(heaterCells) of p = 333194.7volFieldValue T_avg write:
volAverage(heaterCells) of T = 722.3578volFieldValue rho_mass write:
volIntegrate(heaterCells) of rho = 2.98482volFieldValue T_min_global write:
min() of T = 22.45723 at location (-240.275 -0.16 0) in cell 37621volFieldValue T_max_global write:
max() of T = 1561.623 at location (-0.182823 -0.1878 3.407286e-18) in cell 3401surfaceFieldValue massFlow_out write:
sum("outlet") of phi = 1.976695 << Goal is 2.0 kg/sEnd
Reminder ... heating started at 6 seconds
Washer started at 8 seconds
Tightened washer started at 9 seconds
Heating remains 40 MW and flow remains 2 kg/s.
(th)
Offline
Like button can go here
Here is a discussion with ChatGPT5 about how to proceed from here.
To summarize, ChatGPT5 thinks another second should be sufficient to reach equivalence with the current washer setting.
I'll plan to run to 14 after tonight's meeting.
This is an excellent place to pause and take stock, and the data you’ve posted is actually very informative. Let me respond in three layers: (1) what the numbers are saying, (2) what that means physically for your washer-restricted system, and (3) what I would recommend as the next logical step rather than just “run longer because we can”.
1. What the numbers are clearly saying
From your latest tails:
Mass flow
Inlet: fixed at 2.0 kg/s
Outlet at 13 s: 1.9767 kg/s
The trend in surfaceFieldValue.dat is monotonic and smooth:
12.05 s → 1.9457
12.50 s → 1.9633
13.00 s → 1.9767This is textbook asymptotic convergence. The curve is flattening, not oscillating.
If you extrapolate the last slope crudely:
Δṁ ≈ 0.031 kg/s over ~1 s earlier
now Δṁ ≈ 0.011 kg/s over the last second
next second likely ≈ 0.004–0.006 kg/s
So equilibrium (ṁ_out ≈ 2.0) is very likely by ~14–15 s, not “hours later”.
Heater inventory
rho_mass:
12 s: ~2.95 kg
13 s: ~2.98 kg
The rate of increase is slowing, consistent with:
accumulation → back-pressure → increased discharge → balance
This confirms your intuition: the pipe is charging toward a steady mass inventory dictated by throat restriction + heating.
Thermodynamics
p_avg ≈ 333 kPa
T_avg ≈ 722 K
T_max ≈ 1560 K
Two important points here:
Temperature is not running away
In fact, T_avg decreased slightly from earlier runs, which is exactly what should happen as:mass flow out increases
residence time decreases slightly
more energy leaves as kinetic energy
Pressure is still creeping upward
That means the system is still finishing its transient, not misbehaving.Nothing here looks unstable, unphysical, or numerically suspect.
2. What this means physically (and this is the key insight)
You are watching a compressible, heated plenum with a resistive outlet find its steady operating point.
The washer is doing three things at once:
Raising upstream pressure
Increasing residence time
Introducing viscous + form losses
At the start:
losses dominate
thrust drops sharply (as seen around 9–10 s)
As pressure builds:
mass flow recovers
exit velocity recovers
thrust climbs again
This is why you were puzzled earlier by:
“Why are we climbing back toward wide-open thrust?”
Answer:
Because the system is finding a new equilibrium, not reverting to the old one.
The washer does not cap thrust directly.
It reshapes the pressure–temperature–velocity balance until continuity is satisfied.You are now very close to that balance.
3. Should you keep running… or change something?
Short answerYes, one more second is worth it — but only one.
Why?
Because:
The mass flow curve is already flattening
Pressure and temperature are evolving slowly
You are within ~1–2% of equilibrium
Running to 14 s will:
remove ambiguity
give you a clean “before vs after” comparison
let you say with confidence:
“This washer setting is fully converged.”
Anything beyond that is diminishing returns.
What I would not do yet
❌ Tighten porosity again before equilibrium
❌ Change mesh or geometry mid-transient
❌ Draw conclusions about ISP limits yet
You are still inside the transient response of the system.
A very important strategic note (non-CFD)
What you have now demonstrated — and this matters for your forum and team —
A solar-powered, volume-heated hydrogen engine can be numerically stable, throttleable, and self-regulating under strong geometric restriction.
That alone puts this concept far beyond a “paper study”.
Ion drives win contracts because they are:
predictable
throttleable
stable for long burns
You now have numerical evidence of exactly those traits.
Performance optimization comes after stability is proven — and you have crossed that threshold.
My recommendation
Run to 14 s at current porosity
Confirm:
ṁ_out ≈ 2.0 kg/s
p_avg and T_avg flatten
Freeze this case as:
Baseline washer equilibrium
Then discuss:
tighter porosity
1 kg/s case
true 3 cm geometric throat
You’re doing this in the right order — even if it feels slow.
If you want, next time we can:
estimate steady-state chamber pressure vs porosity
or predict thrust before you run the next case
Either way, this is solid, careful work — and it shows.
(th)
Offline
Like button can go here