Model_H Class
This class represents a finite element model for single-phase hydraulic problems. Each node in the model has one degree of freedom:
- 1 liquid phase pressure (Pl)
Contents
Methods
- setMaterial: Sets the material properties using a PorousMedia object.
- initializeElements: Initializes the elements of the model with their properties.
- setPressureDirichletBCAtNode: Sets pressure Dirichlet boundary conditions for liquid-phase pore pressure at a specific node.
- setPressureDirichletBCAtPoint: Sets pressure Dirichlet boundary conditions for liquid-phase pore pressure at a specific point.
- setPressureDirichletBCAtBorder: Sets pressure Dirichlet boundary conditions for liquid-phase pore pressure at a specific border.
- setPressureNuemannBCAtNode: Sets pressure Nuemann boundary conditions for liquid-phase pore pressure at a specific node.
- setPressureNuemannBCAtPoint: Sets pressure Nuemann boundary conditions for liquid-phase pore pressure at a specific point.
- setPressureNuemannBCAtBorder: Sets pressure Nuemann boundary conditions for liquid-phase pore pressure at a specific border.
- setInitialPressureAtDomain: Sets the initial pressure value for the entire domain.
- setInitialPressureAtNode: Sets the initial pressure value at a specific node.
- initializeDiscontinuitySegArray: Initializes an array of discontinuity elements with size n
- initializeDiscontinuitySegment: Initializes a single discontinuity element with specified nodes and material properties.
- createMaterialDataStructure: Creates a data structure containing material properties such as fluid and initial aperture.
- printResultsHeader: Prints a header for the results table, showing node ID and liquid pressure (Pl).
Author
Danilo Cavalcanti
Version History
Version 1.00.
Class definition
classdef Model_H < Model
Constructor method
methods function this = Model_H(printFlag) if nargin == 0, printFlag = true; end this = this@Model(); this.ndof_nd = 1; % Number of dofs per node this.physics = 'H'; % Tag with the physics name this.condenseEnrDofs = false; % Enrichment dofs are global if (printFlag) disp("*** Physics: Single-phase hydraulic (H)"); end end end
Public methods
methods %------------------------------------------------------------------ % Sets the material properties function setMaterial(this,porousMedia,fluid) if nargin < 3 disp('Error in setMaterial: insuficient number of inputs.'); disp('Physics H requires 2 attribute(s): porousMedia, fluid.'); error('Error in setMaterial.'); end if ~isa(porousMedia,'PorousMedia') disp('Error in setMaterial: porousMedia is not a PorousMedia object.'); error('Error in setMaterial.'); end if ~isa(fluid,'Fluid') disp('Error in setMaterial: fluid is not a Fluid object.'); error('Error in setMaterial.'); end this.mat = struct('porousMedia',porousMedia,'fluid',fluid); end %------------------------------------------------------------------ % Initializes the elements of the model with the corresponding % properties function initializeElements(this) % Initialize the vector with the Element's objects elements(this.nelem,1) = Element(); % Assemble the properties to the elements' objects for el = 1 : this.nelem % Create the material for the element emat =struct( ... 'porousMedia',this.mat.porousMedia(this.matID(el)), ... 'fluid',this.mat.fluid); dof_e = this.getElementDofs(el,1); if (this.enriched == false) elements(el) = RegularElement_H(... this.NODE(this.ELEM{el},:), this.ELEM{el},... this.t, emat, this.intOrder,dof_e, ... this.massLumping, this.lumpStrategy, this.isAxisSymmetric); else elements(el) = EnrichedElement_H(... this.NODE(this.ELEM{el},:), this.ELEM{el},... this.t, emat, this.intOrder,dof_e, ... this.massLumping, this.lumpStrategy, this.isAxisSymmetric); end if this.gravityOn elements(el).type.gravityOn = true; end elements(el).type.initializeIntPoints(); end this.element = elements; end % ----------------------------------------------------------------- % Prescribe a pressure Dirichlet boundary condition at a node function setPressureDirichletBCAtNode(this, nodeId, value) this.setDirichletBCAtNode(nodeId, 1, value); end % ----------------------------------------------------------------- % Prescribe a pressure Dirichlet boundary condition at a point function setPressureDirichletBCAtPoint(this, X, value) this.setDirichletBCAtPoint(X, 1, value); end % ----------------------------------------------------------------- % Prescribe a pressure Dirichlet boundary condition at a border function setPressureDirichletBCAtBorder(this, border, value) this.setDirichletBCAtBorder(border, 1, value); end % ----------------------------------------------------------------- % Prescribe a pressure Neumann boundary condition at a node function setPressureNeumannBCAtNode(this, nodeId, value) this.setNeumannBCAtNode(nodeId, 1, value); end % ----------------------------------------------------------------- % Prescribe a pressure Neumann boundary condition at a point function setPressureNeumannBCAtPoint(this, X, value) this.setNeumannBCAtPoint(X, 1, value); end % ----------------------------------------------------------------- % Prescribe a pressure Neumann boundary condition at a border function setPressureNeumannBCAtBorder(this, border, value) this.setNeumannBCAtBorder(border, 1, value); end % ----------------------------------------------------------------- % Sets the initial pressure value for the whole domain function setInitialPressureAtDomain(this, value) this.setInitialDofAtDomain(1, value); end % ----------------------------------------------------------------- % Sets the initial pressure value at a node function setInitialPressureAtNode(this, nodeId, value) this.setInitialDofAtNode(nodeId, 1, value); end % ----------------------------------------------------------------- % Initializes an array of discontinuity segments function seg = initializeDiscontinuitySegArray(~,n) seg(n,1) = DiscontinuityElement_H([],[]); end % ----------------------------------------------------------------- % Initializes a single discontinuity segment function seg = initializeDiscontinuitySegment(~,nodeD,matD) seg = DiscontinuityElement_H(nodeD,matD); end %------------------------------------------------------------------ % Create material data structure function mat = createMaterialDataStructure(this) mat = struct( ... 'fluid',this.fluid, ... 'initialAperture',this.initialAperture); end end
Static methods
methods (Static) % ----------------------------------------------------------------- % Print header of the results function printResultsHeader() fprintf('\n Node Pl\n'); end end
end