Rock Density and Porosity Calculator

ANALife Services AuthorityNational Calculator Authority›Rock Density and Porosity Calculator

.calc-container { max-width: 640px; margin: 2rem 0; padding: 1.5rem; background: #fff; border: 1px solid #ddd; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.06); font-family: system-ui, -apple-system, sans-serif; } .calc-container h3 { font-family: Georgia, serif; font-size: 1.15rem; color: #1a1a1a; margin-bottom: 1rem; padding-bottom: 0.5rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-row { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.75rem; flex-wrap: wrap; } .calc-row label { min-width: 160px; font-size: 0.9rem; color: #333; font-weight: 500; } .calc-row input[type="number"], .calc-row select { flex: 1; min-width: 120px; max-width: 200px; padding: 0.5rem 0.6rem; border: 1px solid #ccc; border-radius: 4px; font-size: 0.9rem; font-family: system-ui, sans-serif; color: #1a1a1a; background: #fafaf8; } .calc-row input:focus, .calc-row select:focus { outline: none; border-color: var(--ac, #3d5a80); box-shadow: 0 0 0 2px rgba(26,74,138,0.12); } .calc-row .unit { font-size: 0.82rem; color: #888; min-width: 30px; } .calc-btn { display: inline-block; margin-top: 0.5rem; padding: 0.55rem 1.5rem; background: var(--ac, #3d5a80); color: #fff; border: none; border-radius: 4px; font-size: 0.9rem; font-weight: 600; cursor: pointer; font-family: system-ui, sans-serif; } .calc-btn:hover { opacity: 0.9; } .calc-result { margin-top: 1.25rem; padding: 1rem 1.25rem; background: #f0f6fc; border-left: 3px solid var(--ac, #3d5a80); border-radius: 0 6px 6px 0; display: none; } .calc-result.visible { display: block; } .calc-result-label { font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.06em; color: #666; margin-bottom: 0.25rem; } .calc-result-value { font-size: 1.6rem; font-weight: 700; color: var(--ac, #3d5a80); } .calc-result-detail { font-size: 0.85rem; color: #555; margin-top: 0.5rem; line-height: 1.5; } .calc-note { margin-top: 1rem; font-size: 0.8rem; color: #888; font-style: italic; } .calc-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; margin-top: 0.75rem; } .calc-grid-item { padding: 0.6rem 0.8rem; background: #f8f9fa; border-radius: 4px; border: 1px solid #eee; } .calc-grid-item .label { font-size: 0.75rem; color: #888; text-transform: uppercase; letter-spacing: 0.04em; } .calc-grid-item .value { font-size: 1.1rem; font-weight: 600; color: #1a1a1a; } @media (max-width: 720px) { .calc-row { flex-direction: column; align-items: flex-start; gap: 0.3rem; } .calc-row label { min-width: auto; } .calc-row input[type="number"], .calc-row select { max-width: 100%; width: 100%; } .calc-grid { grid-template-columns: 1fr; } } .calc-chart { margin: 1rem 0; text-align: center; } .calc-chart svg { max-width: 100%; height: auto; } .calc-chart-legend { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.6rem 1.2rem; margin-top: 0.6rem; font-size: 0.8rem; color: #555; } .calc-chart-legend span { display: inline-flex; align-items: center; gap: 0.3rem; } .calc-chart-legend i { display: inline-block; width: 10px; height: 10px; border-radius: 2px; font-style: normal; } .calc-related { max-width: 640px; margin: 2rem 0 1rem; padding: 1.25rem 1.5rem; background: #f8f9fa; border: 1px solid #e8e8e8; border-radius: 8px; } .calc-related h3 { font-family: Georgia, serif; font-size: 1rem; color: #1a1a1a; margin: 0 0 0.75rem; padding-bottom: 0.4rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-related-list { list-style: none; padding: 0; margin: 0 0 0.75rem; display: grid; grid-template-columns: 1fr 1fr; gap: 0.4rem 1.5rem; } .calc-related-list li a { font-size: 0.88rem; color: var(--ac, #3d5a80); text-decoration: none; } .calc-related-list li a:hover { text-decoration: underline; } .calc-browse-all { margin: 0.5rem 0 0; font-size: 0.9rem; font-weight: 600; } .calc-browse-all a { color: var(--ac, #3d5a80); text-decoration: none; } .calc-browse-all a:hover { text-decoration: underline; } @media (max-width: 720px) { .calc-related-list { grid-template-columns: 1fr; } }

Rock Density and Porosity Calculator

Calculate bulk density, grain (matrix) density, fluid density, and porosity using standard petrophysical relationships. Provide any three known values to solve for the fourth.

Bulk Density (ρb) [g/cm³]

Measured density of the rock sample (solid + pore fluid)

Grain (Matrix) Density (ρg) [g/cm³]

Density of the solid mineral grains (quartz ≈ 2.65, calcite ≈ 2.71, dolomite ≈ 2.87)

Fluid Density (ρf) [g/cm³]

Density of pore-filling fluid (water ≈ 1.00, oil ≈ 0.80, gas ≈ 0.001–0.3)

Porosity (φ) [%]

Fraction of rock volume occupied by pores (0–100%)

⚠️ Leave exactly one field blank — it will be calculated from the other three.

Calculate

function rocCalc() { const bulkEl = document.getElementById('roc-bulk-density'); const grainEl = document.getElementById('roc-grain-density'); const fluidEl = document.getElementById('roc-fluid-density'); const porEl = document.getElementById('roc-porosity'); const resultEl = document.getElementById('roc-result');

const rawBulk = bulkEl.value.trim(); const rawGrain = grainEl.value.trim(); const rawFluid = fluidEl.value.trim(); const rawPor = porEl.value.trim();

const emptyFields = [rawBulk, rawGrain, rawFluid, rawPor].filter(v => v === '').length;

if (emptyFields === 0) { resultEl.innerHTML = 'Please leave exactly one field blank to solve for it.'; return; } if (emptyFields > 1) { resultEl.innerHTML = 'Please leave exactly one field blank. Too many unknowns.'; return; }

const pb = rawBulk !== '' ? parseFloat(rawBulk) : null; const pg = rawGrain !== '' ? parseFloat(rawGrain) : null; const pf = rawFluid !== '' ? parseFloat(rawFluid) : null; const ph = rawPor !== '' ? parseFloat(rawPor) / 100.0 : null;

// Validate provided values if (pb !== null && (isNaN(pb) || pb 5)) { resultEl.innerHTML = 'Bulk density must be between 0 and 5 g/cm³.'; return; } if (pg !== null && (isNaN(pg) || pg 5)) { resultEl.innerHTML = 'Grain density must be between 0 and 5 g/cm³.'; return; } if (pf !== null && (isNaN(pf) || pf 3)) { resultEl.innerHTML = 'Fluid density must be between 0 and 3 g/cm³.'; return; } if (ph !== null && (isNaN(ph) || ph 1)) { resultEl.innerHTML = 'Porosity must be between 0% and 100%.'; return; }

// Core formula: ρ_b = φ·ρ_f + (1 − φ)·ρ_g let calcPb = pb, calcPg = pg, calcPf = pf, calcPh = ph; let solvedFor = '';

if (pb === null) { // Solve for bulk density calcPb = ph * pf + (1 - ph) * pg; solvedFor = 'bulk'; if (calcPb 5) { resultEl.innerHTML = 'Calculated bulk density is out of physical range. Check inputs.'; return; } } else if (pg === null) { // Solve for grain density: ρ_g = (ρ_b − φ·ρ_f) / (1 − φ) if (Math.abs(1 - ph) Porosity cannot be 100% when solving for grain density (division by zero).'; return; } calcPg = (pb - ph * pf) / (1 - ph); solvedFor = 'grain'; if (calcPg 5) { resultEl.innerHTML = 'Calculated grain density is out of physical range (0–5 g/cm³). Check inputs.'; return; } } else if (pf === null) { // Solve for fluid density: ρ_f = (ρ_b − (1 − φ)·ρ_g) / φ if (Math.abs(ph) Porosity cannot be 0% when solving for fluid density (division by zero).'; return; } calcPf = (pb - (1 - ph) * pg) / ph; solvedFor = 'fluid'; if (calcPf 3) { resultEl.innerHTML = 'Calculated fluid density is out of physical range (0–3 g/cm³). Check inputs.'; return; } } else if (ph === null) { // Solve for porosity: φ = (ρ_g − ρ_b) / (ρ_g − ρ_f) const denom = pg - pf; if (Math.abs(denom) Grain density and fluid density cannot be equal (division by zero).'; return; } calcPh = (pg - pb) / denom; solvedFor = 'porosity'; if (calcPh 1) { resultEl.innerHTML = 'Calculated porosity is out of physical range (0–100%). Check inputs.'; return; } }

// Additional derived quantities const voidRatio = calcPh / (1 - calcPh); const saturation = (calcPf > 0 && calcPg > 0) ? ((calcPb - calcPg * (1 - calcPh)) / (calcPh * calcPf)) : null;

const labels = { bulk: 'Bulk Density (ρb)', grain: 'Grain Density (ρg)', fluid: 'Fluid Density (ρf)', porosity: 'Porosity (φ)' };

const values = { bulk: calcPb.toFixed(4) + ' g/cm³', grain: calcPg.toFixed(4) + ' g/cm³', fluid: calcPf.toFixed(4) + ' g/cm³', porosity: (calcPh * 100).toFixed(4) + ' %' };

let html = '### Results '; html += 'ParameterValue'; for (const key of ['bulk', 'grain', 'fluid', 'porosity']) { const highlight = key === solvedFor ? ' style="background:#e8f5e9; font-weight:bold;"' : ''; const tag = key === solvedFor ? ' ✅ (solved)' : ''; html += ${labels[key]}${tag}${values[key]}; } html += Void Ratio (e = φ / (1−φ))${voidRatio.toFixed(4)}; if (saturation !== null) { const satPct = (saturation * 100).toFixed(2); html += Fluid Saturation (Sw)${satPct} %; } html += '';

// Mineral reference html += ` Common grain densities: Quartz 2.65 | Calcite 2.71 | Dolomite 2.87 | Feldspar 2.56–2.76 | Clay 2.60–2.80 g/cm³

`;

resultEl.innerHTML = html; }

#### Formula

The fundamental petrophysical relationship linking bulk density, grain density, fluid density, and porosity:

ρb = φ · ρf + (1 − φ) · ρg

Rearranged to solve for each unknown:

Where: ρb = bulk density, ρg = grain (matrix) density, ρf = pore fluid density, φ = porosity (fraction).

#### Assumptions & References

More Calculators

Read Next

Server Vulnerability Patch Priority Scorer ANA › Life Services Authority › National Calculator Authority › Server Vulnerability Patch Priority Scorer .calc-container {...

Study Time Planner Authority Network America › Life Services Authority › National Calculator Authority .calc-container { max-width: 640px;...

References