123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- # These are the van Genuchten (1980) equations
- # The input is matric potential, psi and the hydraulic parameters.
- # psi must be sent in as a numpy array.
- # The pars variable is like a MATLAB structure.
- import numpy as np
- def thetaFun(psi,pars):
- if psi>=0.:
- Se = 1.
- else:
- Se=(1+abs(psi*pars['alpha'])**pars['n'])**(-pars['m'])
- return pars['thetaR']+(pars['thetaS']-pars['thetaR'])*Se
- thetaFun=np.vectorize(thetaFun)
- def CFun(psi,pars):
- if psi>=0.:
- Se=1.
- else:
- Se=(1+abs(psi*pars['alpha'])**pars['n'])**(-pars['m'])
- dSedh=pars['alpha']*pars['m']/(1-pars['m'])*Se**(1/pars['m'])*(1-Se**(1/pars['m']))**pars['m']
- return Se*pars['Ss']+(pars['thetaS']-pars['thetaR'])*dSedh
- CFun = np.vectorize(CFun)
- def KFun(psi,pars):
- if psi>=0.:
- Se=1.
- else:
- Se=(1+abs(psi*pars['alpha'])**pars['n'])**(-pars['m'])
- return pars['Ks']*Se**pars['neta']*(1-(1-Se**(1/pars['m']))**pars['m'])**2
-
- KFun = np.vectorize(KFun)
- def setpars():
- pars={}
- pars['thetaR']=float(raw_input("thetaR = "))
- pars['thetaS']=float(raw_input("thetaS = "))
- pars['alpha']=float(raw_input("alpha = "))
- pars['n']=float(raw_input("n = "))
- pars['m']=1-1/pars['n']
- pars['Ks']=float(raw_input("Ks = "))
- pars['neta']=float(raw_input("neta = "))
- pars['Ss']=float(raw_input("Ss = "))
- return pars
-
- def PlotProps(pars):
- import numpy as np
- import pylab as pl
- import vanGenuchten as vg
- psi=np.linspace(-10,2,200)
- pl.figure
- pl.subplot(3,1,1)
- pl.plot(psi,vg.thetaFun(psi,pars))
- pl.ylabel(r'$\theta(\psi) [-]$')
- pl.subplot(3,1,2)
- pl.plot(psi,vg.CFun(psi,pars))
- pl.ylabel(r'$C(\psi) [1/m]$')
- pl.subplot(3,1,3)
- pl.plot(psi,vg.KFun(psi,pars))
- pl.xlabel(r'$\psi [m]$')
- pl.ylabel(r'$K(\psi) [m/d]$')
- #pl.show()
-
- def HygieneSandstone():
- pars={}
- pars['thetaR']=0.153
- pars['thetaS']=0.25
- pars['alpha']=0.79
- pars['n']=10.4
- pars['m']=1-1/pars['n']
- pars['Ks']=1.08
- pars['neta']=0.5
- pars['Ss']=0.000001
- return pars
-
- def TouchetSiltLoam():
- pars={}
- pars['thetaR']=0.19
- pars['thetaS']=0.469
- pars['alpha']=0.5
- pars['n']=7.09
- pars['m']=1-1/pars['n']
- pars['Ks']=3.03
- pars['neta']=0.5
- pars['Ss']=0.000001
- return pars
- def SiltLoamGE3():
- pars={}
- pars['thetaR']=0.131
- pars['thetaS']=0.396
- pars['alpha']=0.423
- pars['n']=2.06
- pars['m']=1-1/pars['n']
- pars['Ks']=0.0496
- pars['neta']=0.5
- pars['Ss']=0.000001
- return pars
-
- def GuelphLoamDrying():
- pars={}
- pars['thetaR']=0.218
- pars['thetaS']=0.520
- pars['alpha']=1.15
- pars['n']=2.03
- pars['m']=1-1/pars['n']
- pars['Ks']=0.316
- pars['neta']=0.5
- pars['Ss']=0.000001
- return pars
-
- def GuelphLoamWetting():
- pars={}
- pars['thetaR']=0.218
- pars['thetaS']=0.434
- pars['alpha']=2.0
- pars['n']=2.76
- pars['m']=1-1/pars['n']
- pars['Ks']=0.316
- pars['neta']=0.5
- pars['Ss']=0.000001
- return pars
-
- def BeitNetofaClay():
- pars={}
- pars['thetaR']=0.
- pars['thetaS']=0.446
- pars['alpha']=0.152
- pars['n']=1.17
- pars['m']=1-1/pars['n']
- pars['Ks']=0.00082
- pars['neta']=0.5
- pars['Ss']=0.000001
- return pars
|