Skip to content

SPE10 upscaling — pressure-solve vs simple averaging

SPE10 model 2 (60×220×85 ≈ 1.12M cells) is deliberately brutal: permeability spans ~5 orders of magnitude. A full-resolution run took 8h32m wall on the HPC box — fine to run once, hopeless for parameter sweeps. Upscaling is the way out.

Porosity upscales by arithmetic (volume-weighted) mean:

ϕˉ=1ViϕiVi\bar\phi = \frac{1}{V}\sum_i \phi_i\,V_i

Permeability has the layered bounds — arithmetic (parallel flow) and harmonic (series flow):

Karith=1ViKiVi,Kharm=(1ViViKi)1K_\text{arith} = \frac{1}{V}\sum_i K_i V_i, \qquad K_\text{harm} = \left(\frac{1}{V}\sum_i \frac{V_i}{K_i}\right)^{-1}

On a 5-orders-of-magnitude field these bounds are far apart, so a single scalar average is unreliable.

upscale_perm solves the single-phase pressure equation on each coarse block

(Kp)=0\nabla\cdot\big(\mathbf{K}\,\nabla p\big) = 0

under periodic / fixed / linear boundary conditions, then back-computes the effective permeability tensor Keff\mathbf{K}_\text{eff} from the Darcy flux response. This is the only method that stays honest on SPE10’s contrast.

binarywhat it does
upscale_permsingle-phase → effective K\mathbf{K} tensor
upscale_relpermtwo-phase steady state → upscaled kr(S)k_r(S)
upscale_avgarithmetic / geometric / harmonic means (fast, crude)
Terminal window
# effective permeability of a coarse block, periodic BCs
upscale_perm -bc p fine_block.grdecl