Replies: 2 comments 8 replies
-
I also don't understand the difference between throat hydraulic conductance and throat hydraulic size factors. Can you help me? |
Beta Was this translation helpful? Give feedback.
-
You have a lot of code in your question so its hard for me to understand at a quick glance (which is all I have time for at the moment)...however, from what I can tell you are generating a network using Garbriel, then testing its K value. For this to match the experimental value you must 'calibrate' the network, meaning you need to find pore and throat sizes that match your material. I direct you to two of my old papers where I explain this process in detail for a cubic network and a Delaunay network, similar to the Gabriel network you are working on. I can also point you to a tutorial we have about adjusting the sizes of your pore network to match desired distributions. |
Beta Was this translation helpful? Give feedback.
-
Hi, I have a problem with the absolute permeability.
Here is my code:
Importing library
import math
import openpnm as op
import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as spst
from scipy.optimize import curve_fit
import csv
import pandas
import random
import openpnm.models as mods
from openpnm.geometry import GenericGeometry
from openpnm.io import PerGeos
df = pandas.read_csv('Dati_crop.csv')
print(df)
diametro = df['Diametro'].values
frequenza = df['Frequenza'].values
diametro = diametro.reshape((len(diametro), 1))
diametro = diametro*(10**-6)
frequenza = frequenza.reshape((len(frequenza), 1))
plt.plot(diametro,frequenza)
plt.show
Network topology
pts= np.random.rand(int(sum(frequenza)), 3)[4.45(10**-3),4.45*(10**-3),4.45*(10**-3)]
pn = op.network.Gabriel(points = pts,shape=[4.45*(10**-3),4.45*(10**-3),4.45*(10**-3)])
fig = op.topotools.plot_connections(pn)
Checking network health
h = pn.check_network_health()
print(h)
My Geometry object by modifing StickAndBall class
class MyGeo(GenericGeometry):
def init(self, random_state = None, **kwargs):
super().init(**kwargs)
geo = MyGeo(network=pn, pores=pn.Ps, throats=pn.Ts, random_state = 123)
geo.show_hist('pore.diameter')
geo.show_hist('throat.diameter')
pn['pore.top'] = pn.coords[:, 2] + geo["pore.diameter"] / 2 >= 4.40*(10**-3)
pn['pore.bottom'] = pn.coords[:, 2] - geo["pore.diameter"] / 2 <= 0.5*(10**-3)
op.topotools.plot_coordinates(network=pn, pores=pn.pores('top'),
markersize=50, c='r')
op.topotools.plot_coordinates(network=pn, pores=pn.pores('bottom'),
markersize=50, c='b')
water = op.phases.Water(network=pn) # Phase Object
phys_water =op.physics.Standard(network=pn, phase=water
,geometry=geo)
Perform Stokes flow to find Permeability coefficient
sf_z = op.algorithms.StokesFlow(network=pn, phase=water)
Pin = 101325
Pout = 0
sf_z.set_value_BC(pores=pn.pores('top'), values=Pin)
sf_z.set_value_BC(pores=pn.pores('bottom'), values=Pout)
sf_z.run()
A = 1.98*(10**-5) # In metri
L = 4450*(10**-6) # In metri
mu = water['pore.viscosity'][0] # Water Viscosity in Pas
Q = sf_z.rate(pores=pn.pores('top'), mode='group')
Kz = (QLmu/(A(Pin - Pout)))
print('The permeability coefficient is:', Kz)
n =(((sum(geo['pore.volume'])))/(87941400000*(10**-18)))*100
print('The porosity is:', n)
I obtain a Kz=10^(-20) m/s but, from experimental data, I kwnow it must be equal to 10^(-12) m/s. How is it possible?
Beta Was this translation helpful? Give feedback.
All reactions