Skip to content

Instantly share code, notes, and snippets.

@ma-sadeghi
Created March 17, 2020 16:34
Show Gist options
  • Save ma-sadeghi/45044acdda2658d7f67f68e13fd4d5c1 to your computer and use it in GitHub Desktop.
Save ma-sadeghi/45044acdda2658d7f67f68e13fd4d5c1 to your computer and use it in GitHub Desktop.
Diffusion in a 3D PNM on a regular lattice network
import numpy as np
import openpnm as op
from time import time
import openpnm.utils.petsc
rank = openpnm.utils.petsc.PETSc.COMM_WORLD.rank
size = openpnm.utils.petsc.PETSc.COMM_WORLD.size
np.random.seed(10)
nvar = [150]
sfs = ["petsc"]
sts = ["cg"]
runtime = {f"{sf}.{st}": [] for sf, st in zip(sfs, sts)}
for n in nvar:
net = op.network.Cubic(shape=[n, n, n], spacing=1e-4)
geom = op.geometry.StickAndBall(network=net)
air = op.phases.Air(network=net, name="air")
phys = op.physics.Standard(network=net, phase=air, geometry=geom)
fd = op.algorithms.FickianDiffusion(network=net, phase=air)
fd.set_value_BC(pores=net.pores("left"), values=1)
fd.set_value_BC(pores=net.pores("right"), values=0.674)
for sf, st in zip(sfs, sts):
fd.setup(solver_family=sf, solver_type=st)
t0 = time()
fd.run()
dt = time() - t0
runtime[f"{sf}.{st}"].append(dt)
if rank == 0:
print(f"No. unknowns: {n**3:<8}, Runtime: {dt:<6.1f}s ({sf}.{st})")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment