PorousMedia Class
This class defines a porous media object with various physical and mechanical properties. It includes methods for setting and retrieving these properties, as well as performing calculations related to porous media behavior.
Contents
Methods
- effectiveSaturationDegree: Computes the effective saturation degree.
- intrinsicPermeabilityMatrix: Returns the intrinsic permeability matrix.
- setMinLiquidRelPermeability: Sets the minimum liquid relative permeability.
- setMinGasRelPermeability: Sets the minimum gas relative permeability.
- setUMATCapillaryPressureCurve: Sets the user-defined capillary pressure curve.
- setUMATLiquidRelPermCurve: Sets the user-defined liquid relative permeability curve.
- setUMATGasRelPermCurve: Sets the user-defined gas relative permeability curve.
- setMechanicalConstitutiveLaw: Sets the mechanical constitutive law.
- setMechanicalProperties: Sets the mechanical properties (Young's modulus and Poisson's ratio).
- setDensity: Sets the density.
- getDensity: Retrieves the density.
Author
Danilo Cavalcanti
Version History
Version 1.00.
Class Definition
classdef PorousMedia < handle
Public attributes
properties (SetAccess = public, GetAccess = public) id = ''; Young = []; % Young modulus (Pa) nu = []; % Poisson ratio sy0 = []; % Initial yield stress (Pa) Kp = []; % Plastic modulus (Pa) cohesion = []; % Cohesion (Pa) frictionAngle = []; % Friction angle (rad) dilationAngle = []; % Dilation angle (rad) stressIntAlgorithm = 'implicit'; % Stress integration algorithm MCmatch = 'planestrain'; % How the DP surfaces match the MC ones friction = []; % Friction coefficient asympt = []; % Asymptotic model eref = []; % Reference strain for asymptotic model sy = []; % Isotropic tensile limit (Pa) tauy = []; % Shear yield stress (Pa) kappa = []; % Ratio between the uniaxial compressive strength and the uniaxial tensile strength DamageThreshold = []; % Damage threshold FractureEnergyMode1 = []; % Fracture energy associated with mode 1 (N/m) rho = []; % Density (kg/m3) K = 0.0; % Intrinsic permeability (m2) phi = 0.0; % Porosity biot = 1.0; % Biot's coefficient Ks = 1.0e25; % Solid bulk modulus (Pa) Slr = 0.0; % Residual liquid saturation Sgr = 0.0; % Residual gas saturation Pb = 0.0; % Gas-entry pressure (Pa) lambda = 0.0; % Curve-fitting parameter liqRelPermeability = 'BrooksCorey'; % Liquid relative permeability gasRelPermeability = 'BrooksCorey'; % Gas relative permeability capillaryPressure = 'BrooksCorey'; % Saturation degree function mechanical = 'elastic'; % Mechanical constitutive law b = [0.0;-1.0]; % Gravity force direction vector SlPc_umat = []; % User material curve saturation law klr_umat = []; % User material curve liquid relative permeability kgr_umat = []; % User material curve gas relative permeability m = 1; % Expoent for the polynomial relationships end properties (SetAccess = protected, GetAccess = public) klrmin = 1.0e-9; % Minimum liquid relative permeability kgrmin = 1.0e-9; % Minimum gas relative permeability end
Constructor method
methods %------------------------------------------------------------------ function this = PorousMedia(id, permeability, porosity, ... biotCoefficient, solidBulkModulus, ... residualLiquidSaturationDegree, ... residualGasSaturationDegree,... gasEntryPressure,curveFittingParameter, ... liqRelPermeability, gasRelPermeability, ... capillaryPressure) if nargin == 1, this.id = id; end if nargin > 1 this.id = id; this.K = permeability; this.phi = porosity; this.biot = biotCoefficient; this.Ks = solidBulkModulus; this.Slr = residualLiquidSaturationDegree; this.Sgr = residualGasSaturationDegree; this.Pb = gasEntryPressure; this.lambda = curveFittingParameter; this.liqRelPermeability = liqRelPermeability; this.gasRelPermeability = gasRelPermeability; this.capillaryPressure = capillaryPressure; end end end
Public methods
methods % ----------------------------------------------------------------- % Compute the effective saturation degree function Se = effectiveSaturationDegree(this,Sl) Se = (Sl - this.Slr)/(1.0 - this.Slr - this.Sgr); end % ----------------------------------------------------------------- % Create the intrinsic permeability matrix function Km = intrinsicPermeabilityMatrix(this) Km = this.K * eye(2); end % ----------------------------------------------------------------- % Set the minimum liquid relative permeability function setMinLiquidRelPermeability(this,klrmin) this.klrmin = klrmin; end % ----------------------------------------------------------------- % Set the minimum gas relative permeability function setMinGasRelPermeability(this,kgrmin) this.kgrmin = kgrmin; end % ----------------------------------------------------------------- % Set the user defined capillary pressure curve function setUMATCapillaryPressureCurve(this,curve) curve = sortrows(curve, 2); this.SlPc_umat = curve; end % ----------------------------------------------------------------- % Set the user defined liquid relative permeability curve function setUMATLiquidRelPermCurve(this,curve) curve = sortrows(curve, 1); this.klr_umat = curve; end % ----------------------------------------------------------------- % Set the user defined gas relative permeability curve function setUMATGasRelPermCurve(this,curve) curve = sortrows(curve, 1); this.kgr_umat = curve; end % ----------------------------------------------------------------- % Set the mecahnical constitutive law function setMechanicalConstitutiveLaw(this,law) this.mechanical = law; end % ----------------------------------------------------------------- % Set the mechanical properties of the material function setMechanicalProperties(this,E,nu) this.Young = E; this.nu = nu; end % ----------------------------------------------------------------- % Set the density of the material function setDensity(this,rho) this.rho = rho; end % ----------------------------------------------------------------- % Get the density of the material function rho = getDensity(this) rho = this.rho; end end
end