program Griggs; { A ThermalModel of the Griggs Gadget ----------------------------------- by J. Stolfi Introduction ------------ This program implements a crude thermal model of the Hydrosonics steam generator and pump, a.k.a. the "Griggs' Gadget" (GG). The dimensions and physical properties of the pump were obtained exclusively from J. Rotwell's trip report [1] and his subsequent postings to sci.physics.fusion. Unfortunately, J.R. was unable or unwilling to provide many critical parameters, such as the thickness of the pump's housing, the rotor's material, etc. Therefore, one should not expect this model to be quantitatively accurate. Its aim is merely to give a rough, order-of-magnitude feeling for the behavior one can expect from such a device: especially, for the amount of heat can be stored in the system, and its thermal time scales. Although crude, this model seems consistent will all GG data that I have seen so far. In particular, by simulating J.R.'s "barrel calorimeter" experiments with this model, one can easily reproduce his data, including the right amount of bogus "excess heat". The Device ---------- The Griggs gadget is being sold as a steam generator for industrial applications, in the range of tens to hundreds of kW. It consists of a massive metal cylinder (the "rotor"), enclosed in a cylindrical steel "housing". The rotor is forced to spin at thousands of RPM by a large electric motor attached directly to its axle. A small auxiliary pump forces a steady trickle of water into the narrow gap between rotor and housing, where it becomes quite hot. The desired "product"---hot water, steam, or a mixture of the two--- escapes through a hole in the housing. The behavior of the water/steam mixture in the gap is poorly known, so one cannot tell exactly how the input mechanical power get converted into heat. Viscous flow and friction at the bearings surely play a major role. Since the rotor has many shallow holes drilled on its round surface, it is quite possible that cavitation, ultrasound, or more exotic phenomena may also be involved. The efficiency of Griggs device as a water heater or steam generator can be expressed by its "coefficient of production" (COP), which we take to be the increase in thermal energy of the water divided by the amount of electrical energy consumed by the motor. Jed states that Griggs claims that, under certain circumstances, the device shows "over unity" COP: that is, the thermal energy added to the water is greater than the electrical energy consumed. Since standard physics does not allow such thing, their claimed "excess heat" would have to come from some hitherto unknown physical phenomenon. This "mysterious process" should be able to gereate large amounts of low-temperature heat, with no visible radiation or byproducts; hence the connection to "cold fusion" claims. The model --------- This program implements a "skeptical" model of the Griggs gadget, where there is no that energy is conserved according to standard physics. The model assumes that temerature and material properties have cylindrical symmetry; that is, they depend only on the distance from the axle. (This assumption is almost surely wrong; but, compared all the other guesses and simplifications I had to make, it seems relatively minor.) Based on this assumption, we divide the rotor, water gap, and housing into a number of concentric cylindrical layers, and assume that each layer is homogeneous in material and temperature. Each layer is then treated as a point-like thermal reservoir connected to the adjacent layers by thermal conductors. Specifically, we number the layers from [-NH] to [NR], where Layers [-NH] to [-1] comprise the housing, [1] to [NR] the rotor. Layer [-NH] is in contact with the atmosphere. Layer [0] is the water/steam in gap between rotor and housing. Layer [NR] is the part of the axle inside the rotor. Thus, our model is mathematically equivalent to the following electrical circuit: Tamb Osurf Tsurf +----///)-----+ | | | \ | / R[1] | \ | C[1] | +------||------+ T[1] | | | \ | / R[2] | \ | C[2] | +------||------+ T[2] | | ~ ~ ~ ~ | C[NR] | +------||------+ T[NR] | | | \ | / R[NR+1] | \ | Ibear | +-----(->)-----+ | | | | +----//////----+ Tamb Obear Tbear Electrical Thermal Symbol interpretation interpretation ------ ------------------- --------------- -\/\/- resistor thermal resistance --||-- capacitor thermal reservoir -(->)- current source heat source -////- non-linear resistor heat sink The parameters and variables of this "circuit" are explained below. Here is a quick summary: Iwater = Heat generated by viscosity/cavitation/etc. Ibear = Heat generated by friction at the bearings. C[i] = Thermal capacity of layer [i]. R[i] = Thermal resistance between layers [i-1] and [i]. Tamb = Ambient temperature. Tsurf = Surface temperature of pump housing. Osurf = Heat loss to ambient from housing surface. Obear = Heat loss to ambient through axle and bearings. Twater = Temperature of water/steam in the gap. Owater = Heat carried away by the escaping steam/water. Input Heat Flows ---------------- We assume that virtually all the mechanical power applied to the device gets converted into heat, in two places. Some of the heat (Ibear) is assumed to be generated by friction at the bearings. The balance of the conversion (Iwater) is assumed to happen in the water layer, due to viscous flow, cavitation, or whatever else is happening there. Output Heat Flows ----------------- Heat leaves the Griggs device through various mechanisms, which are modeled by "load" resistors connected to the "ambient" node. Secondary losses include radiation and convection from the housing surface and bearings, and conduction through the axle and housing supports. These are lumped into two outgoing heat flows, removing heat from the outer surface of the housing (Osurf), and from the points on the axle that are in contact with the bearings (Obear). As a first approximation, we assumed that convection and condution losses are linear, while radiative losses follow the standard fourth power law. That is, Osurf = Ksurf*(Tsurf - Tamb) + Vsurf*(Tsurf**4 - Tamb**4) Obear = Kbear*(Tbear - Tamb) + Vbear*(Tbear**4 - Tamb**4) The main loss (Owater) is the heat removed directly from the gap between rotor and housing by the steam/water mixture. As long as there is some amount of liquid water in the gap, it seems safe to assume that any steam and water leaving the gap will be at the same temperature Twater, namely the boiling point at the local pressure Pwater. Therefore, we can express the heat carried by the steam (Ogas) and by the hot water (Oliq) as Oliq = Sliq * (Eliq - Efeed) Ogas = Sgas * (Egas - Efeed) Here Sgas and Sliq are the output flow rates (mass over time) of steam and water; Egas and Eliq are the respective enthalpies (energy contents per mass) at the gap temperature Twater and Efeed is the enthalpy of the feedwater. The boiling pressure (Pwater), the enthalpies (Eliq, Egas), and the corresponding densities (Dliq, Dgas) can be read out from the so-called "steam tables". Here are the relevant entries, from page E-16 of the CRC Handbook: Twater (F) 32 122 212 302 392 482 ----------------------- ---------------------------------- Eliq (Btu/lbm) 0 90 180 272 367 467 Egas (Btu/lbm) 1076 1114 1151 1180 1200 1204 Pwater (psia) 0.88 1.79 14.7 69.0 226 577 1/Dgas (ft^3/lbm) 3302 193 26.8 6.29 2.04 .802 1/Dliq (ft^3/lbm) .0160 .0163 .0167 .0175 .0185 .0200 Since liquid water is practically incompressible, the enthalpy Efeed can be taken to be Eliq(Tamb). Note that, for this range of temperatures, the enthalpy of liquid water is much less than that of steam. Therefore, the flow Osteam depends quite strongly on the ratio wetness = Sliq/(Sgas+Sliq) Unfortunately, this important variable depends quite strongly on many unknown parameters---valve settings, resiliency of the auxiliary pump, amount of water in the gap---in ways that seem impossible to guess. For instance, if there is a stable water/steam boundary in the gap, then shifting that boundary by a few millimeters could change the wetness from 0% to 100%. In fact, it seems very likely that, for some fixed settings of the parameters, the water/steam boundary in the gap will slosh around chaotically, and so will the wetness of the output stream. So, just to get something running, we will foolishly assume that water and steam are thoroughly mixed in the gap, so the wetness is also the mass ratio of liquid water over total water in the gap. This ratio can be computed from the total amount of water in the gap (Mwater), the total volume of the gap (Vgap), and the densities of the two phases (Dgas, Dliq). Since Vgap = Mwater * (1 - wetness) / Dgas + Mwater * wetness / Dliq we must have wetness = (Dgas * Vgap / Mwater - 1)/(Dgas / Dliq - 1) We also assume that the total mass flow is given by the formula K * D * (Pwater - Patm) * G where D is the density of the steam/water mixture, G is a viscosity coefficient that varies linearly from Ggas = 1/(150e-6)to Gliq = 1/(???) as the wetness increases from 0 to 1, and K is a constant that depends on the geometry and adjustment of the steam outlet. *Viscosity of water vapor (CRC F-51) (at 1atm? saturated?) T(Celsius) 100 150 200 250 300 350 400 Ggas(poises*10^-6) 126 145 164 183 202 222 241 *Viscosity of liquid water T(Celsius) 0 10 20 30 40 50 60 70 80 90 100 Gliq(poises*10^-2) 1.787 1.307 1.002 .7975 .6529 .5468 .4665 .4042 3547 .3147 .2818 *Flow in pipe Mass flow = (D/G) * (Pa-Pb) * (Pi/8) (r^4/L) where Pa-Pb is the pressure diffrerence, L is the length, r the radius, G the dynamic viscosity (poises) 2. The total mass flow Sgas + Sliq is constant and independent Estimating the Numerical Parameters ----------------------------------- The numerical parameters incorporated in the program below correspond to the "small" pump used in J.R.'s barrel calorimeter experiments --- the only one for which enough data is available to make the exercise worthwhile. The rotor was described as a metal cylinder, 1 foot long and 2 feet in diameter. We assume it is solid aluminum, as per J.R's cathegorical guess. The heat input due to bearing friction (Ibear) is assumed to be a constant 4kW, the mechanical load under "dry" conditons reported by J.R. The heat input at the water layer (Iwater) is obtained by subtracting Ibear from the the input mechanical power (Imech), which is read from the program's input file. Heat losses to ambient from the housing's outermost layer (the Rsurf load) are guessed to be 1kW when the housing is at 350 F. Half of this amount is assumed to be radiated, and therefore proportional to Tsurf**4 - Tamb**4. The other half, comprising convection and conduction, is assumed to be proportional to Tsurf - Tamb. That is, the heat flow through Rsurf is computed by the formula Isurf = Kr * (Tsurf**4 - Tamb**4) + Kc * (Tsurf - Tamb) where Kr = ..., Kc = ... Lacking real data, we arbitrarily assumed that the same formula, with Tsurf replaced by Tbear, gives the heat lost by conduction through the axle and radiation/convection from the bearing area (the Raxle load). That is, when the axle temperature at the bearings is 350 F, another 1kW is lost there, half by direct radiation and half by conduction. Time-Varying Data ----------------- In thismodel, there are two To use this model, one must specify the values of two "independent" variables throughout the desired As noted above, the the Rsteam load, which represents the heat carried away by the steam, may change during the run because of changes in the settings of the water inlet and steam outlet valves. Therefore, this parameter too is given as program's input file . We assume this term depends only on the the current temperature in the water layer (Twater) and the current fluid-mechanical properties of the plumbing system, such as the Since nothing is known about the latter, we estimate the steam flow indirectly, as follows. If the valve settings and input mechanical power were to remain fixed indefinitely at the, the temperature in the water layer would tend to some equlibrium value Tlimit. to estimate. The heat flow is the mass flow times some well-known function of the steam's pressure Psteam and temperature Tsteam. It seems reasonable to assume that the mass flow is proportional to the Psteam**r, the constant factor Cv being determined by the setting of the output valve. Assuming that the steam in the gap is in equilibrium with liquid water, the pressure Psteam is some known function of Tsteam. We conclude that the output heat flow is a definite function of the temperature Tsteam and the output valve's setting Cv, and this function is known in principle. Unfortunately (1) the function is rather complex and I particularly don't know it; and (2) the parameter Cv is unknown, varies from one run to the next,and may even change in the middle of a run. So we assume instead that the output heat flow is given by the formula Isteam = A * (Tsteam - 100C)**k where A is a parameter that must be specified for each run (and may vary with time). In principle, we could compute the value of A from the input power, surface temperature, and steam temperature once the pump has reached thermal equilibrium. Unfortunately, in the reported runs the pump was not allowed to reach equilibrium, and the steam temperature in the gap was not measured. Jed's report does give a couple of bits of data in tis regard. Here are the total mass and heat content of the released steam, as measured by his "barrel calorimeter": Test 1 Test 2 "normal" "heat producing" regime regime ------------------------- -------------- -------------- Motor load (kW) 23 14 Measurement time (sec) Condensed mass (kg) Recovered heat (J) Rec. heat/mass (J/kg) Est. steam temp. (C) Note, by the way, that in the so-called "excess heat" regime the exiting steam is subtantially *cooler* than in the "normal" regime. This is hardly surprising, of course; I just mention it here because it seems to have escaped Jed's attention. Anyway, those data we should be able to compute the steam temperature. } { ** CONSTANTS ** } { Units are meters, kilograms, seconds, joules, watts, celsius. } const AxleRadius = 0.020; RotorRadius = 0.300; { Including the axle } RotorLength = 0.300; HousingThickness = 0.020; AmbientTemp = 25.0; { Ambient temperature } { The pump is conceptually sliced into nested cylindrical layers. Layers [-NH] to [-1] comprise the housing, [1] to [NR] the rotor. Layer [0] is the water/steam filled gap between rotor and housing. Layer [-NH-1] is the atmosphere. Layer [NR+1] is the rotor's axle. Thermal properties (capacity and conductance) are assumed to be uniform within each layer. } NH = 4; { Number of layers in housing } NR = 58; { Number of layers in rotor } { ** STATE VARIABLES ** } var cap: array [-NH .. NR ] of real; { Heat capacity of each layer } cond: array [-NH .. NR+1] of real; { Thermal cond. [j-1] -> [j]. } temp: array [-NH .. NR+1] of real; { Mean temperature in each layer } flow: array [-NH .. NR+1] of real; { Heat flow [j-1] -> [j] } procedure Evolve(inputPower, outputPower, dt: real); var flowNew: array [-NH .. NR] of real; { Flow [j-1] -> [j] at t + dt } tempNew: array [-NH .. NR] of real; { Mean temperatures at t + dt } begin { ** Input power partitioning ** } { We know that the pump consumes 4 kW when run dry, } { due to bearing friction and motor heating: } dryLoad := 4000.0; { Some of the dry load is lost directly to ambient: } directLoss := 0.5 * dryLoad; { The rest gets carried to the pump rotor through the axle: } axleHeating := dryLoad - directLoss; { Iaxle } { The extra "wet" load must be due to water friction: } waterHeating := inputPower - dryLoad; { Iwater } temperature[-NH-1] := AmbientTemp; { Tamb } { ** Pump heat loss ** } { The pump housing loses heat to ambient air. } { Assuming that the loss is linear with temp difference: } flow[NH] := conductivity[NH] * (temperature[-NH-1] - AmbientTemp); { **