PageSourceSearch

https://toolbreezy.com/_next/static/chunks/17602-68b1336acfc29c31.js

js toolbreezy.com collected 2026-09-24 14:58:39 UTC 33,937 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[17602],{17602:(e,t,s)=>{s.r(t),s.d(t,{SUMP_PUMP_OPENING:()=>ea,buildSumpPumpShare:()=>ei,default:()=>el,restoreFromShare:()=>er});var a=s(95155),i=s(12115),r=s(33789),l=s(97003),n=s(33534),o=s(16110),h=s(69869),d=s(49480),m=s(12513),u=s(27784),c=s(807),p=s(36663);let f=1728/c.ff,g=["standard","high"],w={standard:1.5,high:2},b={standard:"Standard, unfinished basement",high:"Finished basement or a volatile water table"},x={standard:"The published 1.5 factor covers the storm bigger than the one you measured. It is the floor on this page and there is no setting below it.",high:"The published 2.0 factor is for finished basements and highly volatile water tables. It only ever raises the flow you have to beat."},v=["1.25","1.5"],y=(e,t,s,a)=>({size:e,label:t,outsideDiameterIn:s,wallThicknessIn:a,internalDiameterIn:s-2*a}),F={"1.25":y("1.25","1-1/4 inch Schedule 40 PVC",1.66,.14),"1.5":y("1.5","1-1/2 inch Schedule 40 PVC",1.9,.145)},N=["elbow90","elbow45","checkValve"],j={elbow90:"90 degree elbow",elbow45:"45 degree elbow",checkValve:"Swing check valve"},k={elbow90:{"1.25":3.5,"1.5":4},elbow45:{"1.25":1.8,"1.5":2.1},checkValve:{"1.25":11.5,"1.5":13}},G=["third-sub","third-ped","half-sub","half-ped"],T=(e,t,s,a,i,r)=>{let l=r.find(e=>0===e.headFt),n=void 0===l?NaN:l.flowGpm,o=[],h=[];for(let e of r){if(e.headFt>=i){h.push({...e,reason:`The source lists ${e.flowGpm} gpm at ${e.headFt} feet for a pump it also gives a ${i} foot shutoff head. A pump delivers nothing at its shutoff head, so this point sits past the end of its own curve, and interpolating through it would report flow above ${i} feet that the same table says is not there.`});continue}if(e.flowGpm<=0){h.push({...e,reason:`The source lists zero flow at ${e.headFt} feet, below the ${i} foot shutoff head where zero flow belongs. Two different heights cannot both be where this pump stops.`});continue}o.push(e)}return o.push({headFt:i,flowGpm:0}),o.sort((e,t)=>e.headFt-t.headFt),{id:e,label:t,horsepower:s,drive:a,publishedPoints:r,shutoffHeadFt:i,freeFlowGpm:n,curvePoints:o,excludedPoints:h}},$={"third-sub":T("third-sub","1/3 HP submersible",1/3,"submersible",21,[{headFt:0,flowGpm:43},{headFt:10,flowGpm:30},{headFt:20,flowGpm:5}]),"third-ped":T("third-ped","1/3 HP pedestal",1/3,"pedestal",18,[{headFt:0,flowGpm:50},{headFt:10,flowGpm:32},{headFt:20,flowGpm:0}]),"half-sub":T("half-sub","1/2 HP submersible",.5,"submersible",24,[{headFt:0,flowGpm:60},{headFt:10,flowGpm:45},{headFt:20,flowGpm:25}]),"half-ped":T("half-ped","1/2 HP pedestal",.5,"pedestal",21,[{headFt:0,flowGpm:65},{headFt:10,flowGpm:48},{headFt:20,flowGpm:10}])},H=500*w.high,I=e=>"number"==typeof e&&Number.isFinite(e),S=e=>null!=e&&"object"==typeof e,L=e=>"string"==typeof e&&v.includes(e),D={gallonsPerInchOfRise:null,riseGallons:null,measuredGpm:0,riskLevel:null,safetyFactor:0,requiredGpm:0},q={spec:null,straightFt:0,fittingEquivalentFt:0,totalEquivalentFt:0,staticLiftFt:0,flowIndependentHeadFt:0,frictionPer100Ft:0,frictionFt:0,totalDynamicHeadFt:0,velocityFps:0,velocityLimitFps:6,overVelocity:!1,velocityCapGpm:0,sizesThatFit:[],violations:[]},z="The sizing this was handed does not describe a discharge line this page produced, so nothing is worked out from it. Reload the page and enter the pit, the lift and the pipe again.",A=(e,t,s)=>"number"==typeof e&&Number.isFinite(e)&&e>=t&&e<=s;function P(e){return!!S(e)&&null===e.problem&&!!S(e.inflow)&&null===e.inflow.problem&&!!A(e.inflow.requiredGpm,5e-324,H)&&null!==e.spec&&!!A(e.spec.internalDiameterIn,.1,12)&&!!A(e.staticLiftFt,0,60)&&!!A(e.totalEquivalentFt,0,3e3)&&!!A(e.frictionFt,0,300)&&!!A(e.totalDynamicHeadFt,0,300)&&e.flowIndependentHeadFt===e.staticLiftFt&&!0}let M=(e,t)=>e.flowIndependentHeadFt+(0,p.X8)(t,e.spec?.internalDiameterIn??NaN,140)*e.totalEquivalentFt/100,E={pumpId:null,label:"",shutoffHeadFt:0,freeFlowGpm:0,requiredGpm:0,designHeadFt:0,deliveredAtDesignHeadGpm:0,operatingFlowGpm:0,operatingHeadFt:0,modelOperatingFlowGpm:0,marginGpm:0,operatingVelocityFps:0,verdict:"stalled"};function C(e,t,s){let a=0,i=s;for(let s=0;s<60;s+=1){let s=(a+i)/2;t(s)>
1M(e,s)?a=s:i=s}return(a+i)/2}let V=["It will not estimate your inflow. The only honest number is the one your own pit gives during a real storm, and a guess with a safety factor on it is still a guess.","It stops at 1-1/2 inch pipe. The published fitting equivalent lengths this page uses cover 1-1/4 and 1-1/2 inch Schedule 40 PVC and nothing larger.","It will not turn a basement volume or a house footprint into a pump size. Water arriving at a pit depends on the water table, the drain tile, the grading and the storm, and a floor area knows about none of them.","It will not tell you how often the pump should cycle, how far the water should draw down, or how long a run should last. The published data carries no figures for any of that.","It will not size a battery backup, a second pump or a water powered standby, and it says nothing about freezing, ice or frost depth in the discharge line.","It will not check your own pump against these curves. The four classes here are published industry benchmarks for a horsepower and a drive type, and the curve printed on your pump outranks them.","It will not tell you whether your discharge point is legal. Where a sump line may terminate is set by local code, and that is not a hydraulic question."],O="toolbreezy:sump-pump-size-calculator",W=e=>""===e.trim()?null:(0,d.jO)(e),R=e=>{if(""===e.trim())return 0;let t=parseFloat(e);return Number.isFinite(t)?t:NaN},U=e=>(Math.round(10*e)/10).toLocaleString(void 0,{maximumFractionDigits:1}),_=e=>(Math.round(100*e)/100).toLocaleString(void 0,{maximumFractionDigits:2}),J=e=>Math.round(e).toLocaleString(),Y=["refill","known"],B={meets:e=>`Clears it. At ${U(e.designHeadFt)} feet of head this curve is still good for ${U(e.deliveredAtDesignHeadGpm)} gpm, and once the pipe friction settles out it runs at about ${U(e.operatingFlowGpm)} gpm against the ${U(e.requiredGpm)} you need.`,short:e=>`Falls short. At ${U(e.designHeadFt)} feet of head this curve gives ${U(e.deliveredAtDesignHeadGpm)} gpm, and the flow it really settles at is about ${U(e.operatingFlowGpm)} gpm against the ${U(e.requiredGpm)} you need. The water in the pit wins.`,stalled:e=>`Moves nothing at all. This class stops lifting at ${U(e.shutoffHeadFt)} feet and your lift on its own is already there, so the motor runs, the impeller spins and the level in the pit keeps climbing.`},X={meets:"clears it",short:"falls short",stalled:"moves nothing"},K={meets:"text-emerald-700 dark:text-emerald-400",short:"text-amber-700 dark:text-amber-400",stalled:"text-red-700 dark:text-red-400"},Q={elbow90:"0",elbow45:"0",checkValve:"0"},Z={elbow90:"2",elbow45:"0",checkValve:"1"},ee=e=>N.map(t=>e[t]).join("."),et=(e,t)=>{if(null===e)return t;let s=e.split(".");if(s.length!==N.length)return t;let a={...Q};return N.forEach((e,t)=>{a[e]=(s[t]??"0").slice(0,3)}),a},es=["m","pd","ri","rs","q","rk","x","z","r","c"],ea={mode:"refill",pitDiameter:"18",rise:"10",seconds:"30",knownGpm:"22",risk:"standard",lift:"10",size:"1.5",run:"25"},ei=e=>(0,h.CZ)([{key:"m",value:e.mode},{key:"pd",value:"refill"===e.mode?e.pitDiameter:null},{key:"ri",value:"refill"===e.mode?e.rise:null},{key:"rs",value:"refill"===e.mode?e.seconds:null},{key:"q",value:"known"===e.mode?e.knownGpm:null},{key:"rk",value:e.risk},{key:"x",value:e.lift},{key:"z",value:e.size},{key:"r",value:e.run},{key:"c",value:ee(e.fittings)}]);function er(e){if(!(0,h.Yc)(e,es))return null;let t=e.get("m"),s=e.get("rk"),a=e.get("z");return{mode:null!==t&&Y.includes(t)?t:ea.mode,pitDiameter:(e.get("pd")??"").slice(0,5),rise:(e.get("ri")??"").slice(0,5),seconds:(e.get("rs")??"").slice(0,6),knownGpm:(e.get("q")??"").slice(0,6),risk:null!==s&&g.includes(s)?s:ea.risk,lift:(e.get("x")??"").slice(0,5),size:null!==a&&v.includes(a)?a:ea.size,run:(e.get("r")??"").slice(0,5),fittings:et(e.get("c"),{...Q})}}function el(){let[e,t]=(0,i.useState)("refill"),[s,h]=(0,i.useState)("18"),[d,c]=(0,i.useState)("10"),[y,T]=(0,i.useState)("30"),[H,A]=(0,i.useState)("22"),[Q,es]=(0,i.useState)("standard"),[ea,el]=(0,i.useState)("10"),[en,eo]=(0,i.useState)("1.5"),[eh,ed]=(0,i.useState)("25"),[em,eu]=(0,i.useState)({...Z});(0,i.useEffect)(()=>{let e=er(new URLSearchParams(window.location.search));if(e){t(e.mode),h(e.pitDiameter),c(e.rise),T(e.seconds),A(e.knownGpm),es(e.risk),el(e.lift),eo(e.size),ed(e.run),eu(e.fittings);return}let s=(0,m.y5)(O);s.found&&(t(s.oneOf("m",Y,"refill")),h(s.str("pd","18",5)),c(s.str("ri","10",5)),T(s.str("rs","30",6)),A(s.str("q","22",6)),es(s.oneOf("rk",g,"standard")),el(s.str("x","10",5)),eo(s.oneOf("z",v,"1.5")),ed(s.str("r","25",5)),eu(et(s.str("c","",16)||null,{...Z})))},[]),(0,u.Vd)(O,()=>JSON.stringify({m:e,pd:s,ri:d,rs:y,q:H,rk:Q,x:ea,z:en,r:eh,c:ee(em)}),[e,s,d,y,H,Q,ea,en,eh,em],{debounceMs:250});let ec=(0,i.useMemo)(()=>"known"===e?{kind:"known",measuredGpm:W(H)}:{kind:"refill",pitDiameterIn:W(s),riseIn:W(d),refillSeconds:W(y)},[e,H,s,d,y]),ep=(0,i.useMemo)(()=>({size:en,straightFt:W(eh),fittings:{elbow90:R(em.elbow90),elbow45:R(em.elbow45),checkValve:R(em.checkValve)}}),[en,eh,em]),ef=(0,i.useMemo)(()=>(function(e){var t,s;let a={...D,problem:null},i={...q,inflow:a};if(!S(e))return{...i,problem:"Describe the pit and the discharge before this can size anything."};let r=function(e){let t;if(!S(e))return{...D,problem:"Describe how much water is coming into the pit."};if(!("string"==typeof(t=e.riskLevel)&&g.includes(t)))return{...D,problem:"Pick which safety factor applies. The published choice is 1.5 for a normal basement and 2.0 for a finished one or a volatile water table, and this page will not pick for you, because the two differ by a third of the pump."};let s=w[e.riskLevel],a=e.source;if(!S(a))return{...D,problem:"Measure the pit refill, or enter a flow rate you have already measured.",riskLevel:e.riskLevel,safetyFactor:s};if("known"===a.kind){let t=a.measuredGpm;return I(t)?t<.1||t>500?{...D,problem:`An inflow of ${t} gpm is outside the 0.1 to 500 gpm range this page covers. Check that the figure is gallons per MINUTE, because pump boxes are labeled in gallons per hour and the two are sixty times apart.`,riskLevel:e.riskLevel,safetyFactor:s}:{problem:null,gallonsPerInchOfRise:null,riseGallons:null,measuredGpm:t,riskLevel:e.riskLevel,safetyFactor:s,requiredGpm:t*s}:{...D,problem:"Enter the inflow you measured, in gallons per minute, or switch to the pit refill boxes and let this work it out.",riskLevel:e.riskLevel,safetyFactor:s}}
1if("refill"!==a.kind)return{...D,problem:"This page did not recognize how the inflow was described, so it will not guess. Measure the pit refill, or enter gallons per minute.",riskLevel:e.riskLevel,safetyFactor:s};let{pitDiameterIn:i,riseIn:r,refillSeconds:l}=a;if(!I(i))return{...D,problem:"Measure the inside diameter of the sump pit in inches. A standard basin is 18 or 24 inches, and the flow goes with the SQUARE of it, so an 18 entered as a 24 overstates the water by three quarters.",riskLevel:e.riskLevel,safetyFactor:s};if(i<8||i>60)return{...D,problem:`A pit ${i} inches across is outside the 8 to 60 inch range this page covers.`,riskLevel:e.riskLevel,safetyFactor:s};if(!I(r))return{...D,problem:"Enter how far the water rose, in inches. Measuring a 12 inch rise rather than a 2 inch one is what makes the answer worth having, because the stopwatch error stays the same size while the reading grows.",riskLevel:e.riskLevel,safetyFactor:s};if(r<.5||r>72)return{...D,problem:`A rise of ${r} inches is outside the 0.5 to 72 inch range this page covers.`,riskLevel:e.riskLevel,safetyFactor:s};if(!I(l))return{...D,problem:"Enter how many seconds that rise took, with the pump unplugged and the water starting from the turn-off level.",riskLevel:e.riskLevel,safetyFactor:s};if(l<1||l>3600)return{...D,problem:`A refill time of ${l}
1 seconds is outside the 1 to 3600 second range this page covers. Past an hour the pit is seeping rather than filling, and this method is meant to catch a storm.`,riskLevel:e.riskLevel,safetyFactor:s};let n=!I(i)||i<=0?NaN:Math.PI*(i/2)**2/f,o=n*r,h=o/(l/60);return h<.1||h>500?{...D,problem:`That refill works out at ${h.toFixed(1)} gpm, outside the 0.1 to 500 gpm range this page covers. Check the pit diameter, the rise and the stopwatch reading against each other.`,riskLevel:e.riskLevel,safetyFactor:s}:{problem:null,gallonsPerInchOfRise:n,riseGallons:o,measuredGpm:h,riskLevel:e.riskLevel,safetyFactor:s,requiredGpm:h*s}}(e.inflow);if(null!==r.problem)return{...i,inflow:r,problem:r.problem};let l=e.discharge;if(!S(l))return{...i,inflow:r,problem:"Describe the discharge pipe running out of the pit."};if(!L(l.size))return{...i,inflow:r,problem:"Pick the discharge pipe size. This page covers 1-1/4 and 1-1/2 inch Schedule 40 PVC, because that is where the published fitting table stops."};let n=F[l.size];if(!I(l.straightFt))return{...i,inflow:r,problem:"Enter how many feet of straight pipe run from the pump to where the water comes out. Pace the buried part rather than leaving it blank, because a head computed from a blank run is not a head."};if(l.straightFt<0||l.straightFt>300)return{...i,inflow:r,problem:`A run of ${l.straightFt} feet is outside the 0 to 300 foot range this page covers.`};if(!S(l.fittings))return{...i,inflow:r,problem:"Enter the fitting counts on the discharge, using zero where there are none."};for(let e of N){let t=l.fittings[e];if(null!=t&&(!I(t)||t<0||t>20||!Number.isInteger(t)))return{...i,inflow:r,problem:`The count for the ${j[e].toLowerCase()} came in as ${String(t)}. It has to be a whole number between 0 and 20.`}}let o=e.staticLiftFt;if(!I(o))return{...i,inflow:r,problem:"Enter the vertical lift in feet, from the pump at the bottom of the pit up to the highest point the discharge reaches. It is the biggest single number in the head and it is a tape measure reading, so this page will not estimate it."};if(o<0||o>60)return{...i,inflow:r,problem:o<0?"A negative lift means the discharge runs downhill from the pump, which would credit the pump with head it may not keep. This page will not take that credit, because a siphon that breaks leaves you with the full lift back again.":`A lift of ${o} feet is outside the 0 to 60 foot range this page covers.`};let h=function(e,t){if(!L(e)||!S(t))return NaN;let s=0;for(let a of N){let i=t[a];if(null!=i){if(!I(i))return NaN;s+=i*k[a][e]}}return s}(l.size,l.fittings),d=l.straightFt+h,m=(t=r.requiredGpm,L(s=l.size)?(0,p.X8)(t,F[s].internalDiameterIn,140):NaN),u=m*d/100,c=(0,p.DJ)(r.requiredGpm,n.internalDiameterIn),b=(0,p.PB)(n.internalDiameterIn,6),x=v.filter(e=>6>=(0,p.DJ)(r.requiredGpm,F[e].internalDiameterIn)),y=[];c>6&&y.push(`The discharge runs at ${c.toFixed(1)} feet per second, past the published 6 foot per second ceiling. ${n.label} carries ${Math.round(b)} gpm at that limit, so friction here is climbing faster than the extra water is worth and the line will be loud with it.`);let T=G.filter(e=>$[e].shutoffHeadFt<=o);return T.length>0&&y.push(`${T.length===G.length?"Every":`${T.length} of the ${G.length}`} published pump class has a shutoff head at or below your ${o} foot lift, so it moves no water at all through this line whatever the box says. Shutoff head is the height at which a pump stops lifting, and the lift on its own reaches it before a single foot of pipe friction is counted.`),{problem:null,inflow:r,spec:n,straightFt:l.straightFt,fittingEquivalentFt:h,totalEquivalentFt:d,staticLiftFt:o,flowIndependentHeadFt:o,frictionPer100Ft:m,frictionFt:u,totalDynamicHeadFt:o+u,velocityFps:c,velocityLimitFps:6,overVelocity:c>6,velocityCapGpm:b,sizesThatFit:x,violations:y}})({inflow:{source:ec,riskLevel:Q},staticLiftFt:W(ea),discharge:ep}),[ec,Q,ea,ep]),eg=(0,i.useMemo)(()=>(function(e){if(!P(e))return{problem:z,points:[],idsThatMeet:[],smallestThatMeets:null};let t=G.map(t=>(function(e,t){if(!P(e))return{...E,problem:z};if(!("string"==typeof t&&G.includes(t)))return{...E,problem:"This page did n
1ot recognize which pump was being checked, so it worked nothing out. Pick one of the published classes."};let s=$[t],a=e.inflow.requiredGpm,i=e.totalDynamicHeadFt,r=e.spec?.internalDiameterIn??NaN,l={problem:null,pumpId:t,label:s.label,shutoffHeadFt:s.shutoffHeadFt,freeFlowGpm:s.freeFlowGpm,requiredGpm:a,designHeadFt:i};if(e.flowIndependentHeadFt>=s.shutoffHeadFt)return{...l,deliveredAtDesignHeadGpm:0,operatingFlowGpm:0,operatingHeadFt:e.flowIndependentHeadFt,modelOperatingFlowGpm:0,marginGpm:-a,operatingVelocityFps:0,verdict:"stalled"};let n=C(e,e=>(function(e,t){if(!S(e)||!I(t))return NaN;if(t<=0)return e.shutoffHeadFt;if(t>=e.freeFlowGpm)return 0;let s=[...e.curvePoints].sort((e,t)=>e.flowGpm-t.flowGpm);for(let e=0;e<s.length-1;e+=1){let a=s[e],i=s[e+1];if(void 0===a||void 0===i)break;if(t>=a.flowGpm&&t<=i.flowGpm){let e=i.flowGpm-a.flowGpm;if(e<=0)return a.headFt;return a.headFt+(t-a.flowGpm)/e*(i.headFt-a.headFt)}}return 0})(s,e),s.freeFlowGpm),o=C(e,e=>S(s)&&I(e)&&!(e<0)&&s.freeFlowGpm>0?e>=s.freeFlowGpm?0:s.shutoffHeadFt*(1-(e/s.freeFlowGpm)**2):NaN,s.freeFlowGpm),h=function(e,t){if(!S(e)||!I(t))return NaN;if(t<=0)return e.freeFlowGpm;if(t>=e.shutoffHeadFt)return 0;let s=e.curvePoints;for(let e=0;e<s.length-1;e+=1){let a=s[e],i=s[e+1];if(void 0===a||void 0===i)break;if(t>=a.headFt&&t<=i.headFt){let e=i.headFt-a.headFt;if(e<=0)return a.flowGpm;return a.flowGpm+(t-a.headFt)/e*(i.flowGpm-a.flowGpm)}}return 0}(s,i);return{...l,deliveredAtDesignHeadGpm:h,operatingFlowGpm:n,operatingHeadFt:M(e,n),modelOperatingFlowGpm:o,marginGpm:n-a,operatingVelocityFps:(0,p.DJ)(n,r),verdict:h>=a?"meets":"short"}})(e,t)),s=t.filter(e=>"meets"===e.verdict).map(e=>e.pumpId).filter(e=>null!==e),a=[...s].sort((e,t)=>{let s=$[e],a=$[t];return s.horsepower!==a.horsepower?s.horsepower-a.horsepower:s.freeFlowGpm-a.freeFlowGpm});return{problem:null,points:t,idsThatMeet:s,smallestThatMeets:a[0]??null}})(ef),[ef]),ew=eg.smallestThatMeets,eb=null!==ef.problem?ef.problem:["WHAT THE PIT DEMANDS",`  Measured inflow    ${U(ef.inflow.measuredGpm)} gpm`,`  Safety factor      ${_(ef.inflow.safetyFactor)} (${b[Q]})`,`  Required flow      ${U(ef.inflow.requiredGpm)} gpm`,"","WHAT THE PIPE DEMANDS",`  Static lift        ${U(ef.staticLiftFt)} ft`,`  Straight pipe      ${U(ef.straightFt)} ft of ${ef.spec?.label??""}`,`  Fittings           ${U(ef.fittingEquivalentFt)} ft of equivalent pipe`,`  Total equivalent   ${U(ef.totalEquivalentFt)} ft`,`  Friction           ${U(ef.frictionFt)} ft, at ${_(ef.frictionPer100Ft)} ft per 100 ft`,`  TOTAL DYNAMIC HEAD ${U(ef.totalDynamicHeadFt)} ft`,`  Velocity           ${U(ef.velocityFps)} of 6 ft/s, this bore caps at ${J(ef.velocityCapGpm)} gpm`,"","DELIVERED FLOW AT THAT HEAD, WHICH IS THE COMPARISON THAT MATTERS",...eg.points.map(e=>`  ${e.label.padEnd(20)} ${"stalled"===e.verdict?"moves nothing":`${U(e.deliveredAtDesignHeadGpm)} gpm at the design head, settles near ${U(e.operatingFlowGpm)} gpm`}`),"",null===ew?`No published class clears ${U(ef.inflow.requiredGpm)} gpm at ${U(ef.totalDynamicHeadFt)} feet. Take those two figures to a manufacturer curve that goes further.`:`Smallest published class that clears it: ${$[ew].label}.`,...ef.violations.length>0?["","WHAT THIS LAYOUT BREAKS",...ef.violations.map(e=>`  ${e}`)]:[],"","Schedule 40 PVC, Hazen-Williams at C = 140. The pump curves are published benchmarks for a","class rather than any one model, so take the flow and the head to your own pump's curve."].join("\n");return(0,a.jsxs)("div",{className:"space-y-5",children:[(0,a.jsx)("div",{className:"rounded-lg border border-amber-500/40 bg-amber-500/5 p-4 text-sm",children:(0,a.jsxs)("p",{children:[(0,a.jsx)("strong",{children:"A sump pump is chosen against a flow AND a height, and nearly every calculator prints the flow on its own."})," ","The gallons per hour on the box is measured at almost no lift. Raise the water ten feet and the same pump moves far less, and at its shutoff head it moves nothing while the motor runs and the pit fills. This page works out both numbers and then reads what each published curve actually delivers at your height."]})}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)("span",{className:"text-sm font-medium",children:"How do you know your inflow?"}),(0,a.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,a.jsx)(l.$,{size:"sm",variant:"refill"===e?"default":"outline",onClick:()=>t("refill"),children:"I timed the pit refilling"}),(0,a.jsx)(l.$,{size:"sm",variant:"known"===e?"default":"outline",onClick:()=>t("known"),children:"I already know the gpm"})]})]}),"refill"===e?(0,a.jsxs)("div",{className:"rounded-lg border p-4",children:[(0,a.jsx)("h3",{className:"text-sm font-medium",children:"The pit refill test"}),(0,a.jsx)("p",{className:"mt-2 text-sm text-muted-foreground",children:"During heavy rain, let the pump run until the water hits its turn-off level, unplug it, and time how far the water climbs. Plug it back in before it overflows."}),(0,a.jsxs)("div",{className:"mt-4 grid gap-4 sm:grid-cols-3",children:[(0,a.jsxs)("div",{className:"space-y-1.5",children:[(0,a.jsx)("label",{className:"text-sm font-medium",htmlFor:"pd",children:"Pit inside diameter"}),(0,a.jsx)(r.p,{id:"pd",inputMode:"decimal",value:s,onChange:e=>h(e.target.value),className:"font-mono"}),(0,a.jsx)("p",{className:"text-xs text-muted-foreground",children:"Inches. Usually 18 or 24, and the flow goes with the square of it."})]}),(0,a.jsxs)("div",{className:"space-y-1.5",children:[(0,a.jsx)("label",{className:"text-sm font-medium",htmlFor:"ri",children:"Water rise"}
1),(0,a.jsx)(r.p,{id:"ri",inputMode:"decimal",value:d,onChange:e=>c(e.target.value),className:"font-mono"}),(0,a.jsx)("p",{className:"text-xs text-muted-foreground",children:"Inches. Measure a big rise, not a small one."})]}),(0,a.jsxs)("div",{className:"space-y-1.5",children:[(0,a.jsx)("label",{className:"text-sm font-medium",htmlFor:"rs",children:"Time it took"}),(0,a.jsx)(r.p,{id:"rs",inputMode:"decimal",value:y,onChange:e=>T(e.target.value),className:"font-mono"}),(0,a.jsx)("p",{className:"text-xs text-muted-foreground",children:"Seconds."})]})]}),null!==ef.inflow.gallonsPerInchOfRise&&null===ef.inflow.problem&&(0,a.jsxs)("p",{className:"mt-3 text-sm text-muted-foreground",children:["A pit that wide holds ",_(ef.inflow.gallonsPerInchOfRise)," gallons per inch of rise, so ",U(W(d)??0)," inches is ",_(ef.inflow.riseGallons??0)," gallons in ",U(W(y)??0)," seconds."]})]}):(0,a.jsxs)("div",{className:"space-y-1.5",children:[(0,a.jsx)("label",{className:"text-sm font-medium",htmlFor:"q",children:"Measured inflow, gallons per minute"}),(0,a.jsx)(r.p,{id:"q",inputMode:"decimal",value:H,onChange:e=>A(e.target.value),className:"w-32 font-mono"}),(0,a.jsx)("p",{className:"text-xs text-muted-foreground",children:"Gallons per MINUTE. A pump box is labeled in gallons per hour, and the two are sixty times apart."})]}),null!==ef.inflow.problem&&(0,a.jsx)("p",{className:"rounded-md border border-amber-500/40 bg-amber-500/5 p-3 text-sm",children:ef.inflow.problem}),(0,a.jsxs)("div",{className:"rounded-lg border p-4",children:[(0,a.jsx)("h3",{className:"text-sm font-medium",children:"Safety factor"}),(0,a.jsx)("div",{className:"mt-3 flex flex-wrap gap-2",children:g.map(e=>(0,a.jsxs)(l.$,{size:"sm",variant:Q===e?"default":"outline",onClick:()=>es(e),children:[b[e]," (",_(w[e]),"x)"]},e))}),(0,a.jsx)("p",{className:"mt-3 text-xs text-muted-foreground",children:x[Q]})]}),(0,a.jsxs)("div",{className:"rounded-lg border p-4",children:[(0,a.jsx)("h3",{className:"text-sm font-medium",children:"The discharge line"}),(0,a.jsx)("div",{className:"mt-3 flex flex-wrap gap-2",children:v.map(e=>(0,a.jsx)(l.$,{size:"sm",variant:en===e?"default":"outline",onClick:()=>eo(e),children:F[e].label},e))}),(0,a.jsxs)("div",{className:"mt-4 grid gap-4 sm:grid-cols-2",children:[(0,a.jsxs)("div",{className:"space-y-1.5",children:[(0,a.jsx)("label",{className:"text-sm font-medium",htmlFor:"x",children:"Vertical lift, feet"}),(0,a.jsx)(r.p,{id:"x",inputMode:"decimal",value:ea,onChange:e=>el(e.target.value),className:"w-32 font-mono"}),(0,a.jsx)("p",{className:"text-xs text-muted-foreground",children:"From the pump at the bottom of the pit up to the highest point the discharge reaches. This is the biggest single number in the whole answer."})]}),(0,a.jsxs)("div",{className:"space-y-1.5",children:[(0,a.jsx)("label",{className:"text-sm font-medium",htmlFor:"r",children:"Straight pipe, feet"}),(0,a.jsx)(r.p,{id:"r",inputMode:"decimal",value:eh,onChange:e=>ed(e.target.value),className:"w-32 font-mono"}),(0,a.jsx)("p",{className:"text-xs text-muted-foreground",children:"The vertical part plus everything horizontal, right out to the outlet."})]})]}),(0,a.jsx)("div",{className:"mt-4 grid gap-3 sm:grid-cols-3",children:N.map(e=>(0,a.jsxs)("div",{className:"space-y-1.5",children:[(0,a.jsx)("label",{className:"text-xs font-medium",htmlFor:`f-${e}`,children:j[e]}),(0,a.jsx)(r.p,{id:`f-${e}`,inputMode:"numeric",value:em[e],onChange:t=>eu({...em,[e]:t.target.value}),className:"font-mono"}),(0,a.jsxs)("p",{className:"text-xs text-muted-foreground",children:[U(k[e][en])," ft of pipe each"]})]},e))})]}),null!==ef.problem?(0,a.jsx)("p",{className:"rounded-md border bg-muted/40 p-4 text-sm text-muted-foreground",children:ef.problem===ef.inflow.problem?"Nothing below can be worked out until that measurement reads, and the reason it did not is shown with the boxes above.":ef.problem}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"rounded-lg border-2 border-primary/40 p-4",children:[(0,a.jsx)("h3",{className:"text-sm font-medium",children:"The two figures a pump is chosen on"}),(0,a.jsxs)("div",{className:"mt-3 space-y-1 font-mono text-sm",children:[(0,a.jsxs)("div",{className:"flex justify-between font-medium",children:[(0,a.jsx)("span",{children:"Required flow"}),(0,a.jsxs)("span",{className:"tabular-nums",children:[U(ef.inflow.requiredGpm)," gpm"]})]}),(0,a.jsxs)("div",{className:"flex justify-between font-medium",children:[(0,a.jsx)("span",{children:"Total dynamic head"}),(0,a.jsxs)("span",{className:"tabular-nums",children:[U(ef.totalDynamicHeadFt)," feet"]})]})]}),(0,a.jsxs)("p",{className:"mt-3 text-sm text-muted-foreground",children:[U(ef.inflow.measuredGpm)," gpm measured, times the ",_(ef.inflow.safetyFactor)," ","safety factor. Find where those two meet on a manufacturer curve, because a curve is the only document that maps a flow and a height onto a model number."]})]}),(0,a.jsxs)("div",{className:"rounded-lg border p-4",children:[(0,a.jsx)("h3",{className:"text-sm font-medium",children:"Where the head comes from"}),(0,a.jsxs)("div",{className:"mt-3 space-y-1 font-mono text-sm",children:[(0,a.jsxs)("div",{className:"flex justify-between",children:[(0,a.jsx)("span",{className:"text-muted-foreground",children:"Static lift, which never falls with flow"}),(0,a.jsxs)("span",{className:"tabular-nums",children:[U(ef.flowIndependentHeadFt)," ft"]})]}),(0,a.jsxs)("div",{className:"flex justify-between",children:[(0,a.jsx)("span",{className:"text-muted-foreground",children:"Straight pipe"}),(0,a.jsxs)("span",{className:"tabular-nums",children:[U(ef.straightFt)," ft"]})]}),(0,a.jsxs)("div",{className:"flex justify-between",children:[(0,a.jsx)("span",{className:"text-muted-foreground",children:"Fittings, as equivalent pipe"}),(0,a.jsxs)("span",{className:"tabular-nums",children:[U(ef.fittingEquivalentFt)," ft"]})]}),(0,a.jsxs)("div",{className:"flex justify-between border-t pt-1",children:[(0,a.jsxs)("span",{className:"text-muted-foreground",children:["Friction over ",U(ef.totalEquivalentFt)," equivalent feet"]}),(0,a.jsxs)("span",{className:"tabular-nums",children:[U(ef.frictionFt)," ft"]})]}),(0,a.jsxs)("div",{className:"flex justify-between",children:[(0,a.jsxs)("span",{className:"text-muted-foreground",children:["Velocity, ceiling ",6," ft/s"]}),(0,a.jsxs)("span",{className:"tabular-nums",children:[U(ef.velocityFps)," ft/s"]})]}),(0,a.jsxs)("div",{className:"flex justify-between",children:[(0,a.jsx)("span",{className:"text-muted-foreground",children:"This bore carries, at the ceiling"}),(0,a.jsxs)("span",{className:"tabular-nums",children:[J(ef.velocityCapGpm)," gpm"]})]})]}),(0,a.jsxs)("p",{className:"mt-3 text-sm text-muted-foreground",children:["Your fittings are worth ",U(ef.fittingEquivalentFt)," feet of straight pipe, which is why a short run with a check valve in it can beat a long clean one. Sizes that carry this flow inside the ceiling:"," ",ef.sizesThatFit.length>0?ef.sizesThatFit.map(e=>F[e].label).join(", "):"neither of the two this page covers","."]}),ef.violations.length>0&&(0,a.jsx)("ul",{className:"mt-3 list-disc space-y-2 pl-5 text-sm text-amber-700 dark:text-amber-400",children:ef.violations.map(e=>(0,a.jsx)("li",{children:e},e))})]}),(0,a.jsxs)("div",{className:"rounded-lg border p-4",children:[(0,a.jsx)("h3",{className:"text-sm font-medium",children:"What each published curve delivers at your head"}),(0,a.jsx)("div",{className:"mt-3 space-y-3",children:eg.points.map(e=>(0,a.jsxs)("div",{className:"rounded-md border p-3",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-baseline justify-between gap-2",children:[(0,a.jsx)("span",{className:"text-sm font-medium",children:e.label}),(0,a.jsx)("span",{className:`text-sm font-medium ${K[e.verdict]}`,children:X[e.verdict]})]}),(0,a.jsxs)("div",{className:"mt-2 space-y-1 font-mono text-xs",children:[(0,a.jsxs)("div",{className:"flex justify-between",children:[(0,a.jsx)("span",{className:"text-muted-foreground",children:"Free flow at no lift"}),(0,a.jsxs)("span",{className:"tabular-nums",children:[U(e.freeFlowGpm)," gpm"]})]}),(0,a.jsxs)("div",{className:"flex justify-between",children:[(0,a.jsxs)("span",{className:"text-muted-foreground",children:["At your ",U(e.designHeadFt)," feet of head"]}),(0,a.jsxs)("span",{className:"tabular-nums",children:[U(e.deliveredAtDesignHeadGpm)," gpm"]})]}),(0,a.jsxs)("div",{className:"flex justify-between",children:[(0,a.jsx)("span",{className:"text-muted-foreground",children:"Where it actually settles"}),(0,a.jsxs)("span",{className:"tabular-nums",children:[U(e.operatingFlowGpm)," gpm"]})]}),(0,a.jsxs)("div",{className:"flex justify-between",children:[(0,a.jsx)("span",{className:"text-muted-foreground",children:"Stops lifting at"}),(0,a.jsxs)("span",{className:"tabular-nums",children:[U(e.shutoffHeadFt)," ft"]})]})]}),(0,a.jsx)("p",{className:"mt-2 text-sm",children:B[e.verdict](e)})]},e.pumpId??e.label))}),(0,a.jsx)("p",{className:"mt-3 text-sm",children:null===ew?`Nothing in this published set clears ${U(ef.inflow.requiredGpm)} gpm at ${U(ef.totalDynamicHeadFt)} feet. Take those two figures to a manufacturer curve that reaches further, or shorten the lift and the pipe run, which is often the cheaper fix.`:`The smallest published class that clears your flow at your head is the ${$[ew].label}. Anything larger works too and costs more to run.`})]}),(0,a.jsx)(o.i,{value:eb,label:"Copy the flow, the head and the pump check"})]}),(0,a.jsxs)("div",{className:"rounded-lg border p-4",children:[(0,a.jsx)("h3",{className:"text-sm font-medium",children:"Where the published pump table contradicts itself, and what this page did about it"}),(0,a.jsxs)("ul",{className:"mt-3 list-disc space-y-2 pl-5 text-sm text-muted-foreground",children:[G.flatMap(e=>$[e].excludedPoints.map(t=>(0,a.jsxs)("li",{children:[(0,a.jsxs)("strong",{children:[$[e].label,"."]})," ",t.reason]},`${e}-${t.headFt}`))),(0,a.jsx)("li",{children:"The same source prints a friction loss table that its own stated method does not produce, and every figure in it is low. This page computes friction from the equation instead, because a low friction figure means a low head and a pump too small for the job."})]})]}),(0,a.jsxs)("div",{className:"rounded-lg border p-4",children:[(0,a.jsx)("h3",{className:"text-sm font-medium",children:"What this page refuses to do"}),(0,a.jsx)("ul",{className:"mt-3 list-disc space-y-2 pl-5 text-sm text-muted-foreground",children:V.map(e=>(0,a.jsx)("li",{children:e},e))})]}),(0,a.jsx)("p",{className:"text-sm text-muted-foreground",children:"This page is only as good as the refill you measured, and that measurement has to come from a real storm rather than a garden hose, because the flow it catches is the whole basis of the answer. The safety factor is published as 1.5 for a normal basement and 2.0 for a finished one, which is a judgement about how much worse a storm c
1an get rather than a measurement of anything. The four pump curves here are published benchmarks for a horsepower and a drive type rather than the curve of any one model, so two 1/2 HP submersibles from different makers will not land in the same place and your own printed curve beats this table every time. One of the published rows contradicts its own shutoff head, and this page drops that point rather than interpolating through it, which makes that pump look slightly weaker here than the source implies. Friction is computed from Hazen-Williams at C = 140 rather than from the loss table the same source printed, because that table does not reproduce from its own stated method and every cell of it is low, which would understate your head and buy you too small a pump. A swing check valve is carried as an equivalent length of pipe, so its cracking pressure is not counted separately and a stiff or partly seized one costs more than this shows. Nothing here knows about ice in the discharge, a frozen outlet or a power cut, and each of those floods a basement with a correctly sized pump sitting in the pit."}),(0,a.jsx)(n.ToolActions,{share:()=>ei({mode:e,pitDiameter:s,rise:d,seconds:y,knownGpm:H,risk:Q,lift:ea,size:en,run:eh,fittings:em}),title:"Sump Pump Size Calculator",queryIsImpersonal:"the pit measurement, lift, pipe size, run length and fitting counts you typed"})]})}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.