#include <biotfem.h>
Public Member Functions | |
BiotFEM (OrthoMesh &mesh, double dt, VecDouble &cK, double &fYoung, double &fPoisson, Function3D &fD, Function3D &fN) | |
virtual void | iterate (TransportBase &trans) |
virtual void | printOutput () |
virtual void | getVelocitiesAtFaces (Matrix &M) |
virtual const VecDouble & | getPressureAtCells () |
virtual | ~BiotFEM () |
Private Attributes | |
OrthoMesh & | m_mesh |
VecDouble & | m_cK |
IsotropicElasticEqVar | m_eqvar |
SparsityPattern | m_sparsity |
SparseMatrix< double > | m_M |
VecDouble | m_vRHS |
VecDouble | m_sol |
SparseDirectUMFPACK | solveA |
unsigned | m_debugLevel |
MapIntDouble | dirichlet_bc_map |
Function3D & | m_fN |
This class implements the Biot problem in 3D
Definition at line 13 of file biotfem.h.
BiotFEM::BiotFEM | ( | OrthoMesh & | mesh, | |
double | dt, | |||
VecDouble & | cK, | |||
double & | fYoung, | |||
double & | fPoisson, | |||
Function3D & | fD, | |||
Function3D & | fN | |||
) |
Definition at line 7 of file biotfem.cpp.
00008 :m_mesh(mesh),m_cK(cK),m_eqvar(mesh,cK,fYoung,fPoisson,fD,fN),m_fN(fN) 00009 { 00010 m_eqvar.printDealFEInfo(); 00011 exit(0); 00012 AssemblyOrthoMeshSystem<IsotropicElasticEqVar> assembler; 00013 m_vRHS.reinit(m_eqvar.n_dofs()); 00014 m_sol.reinit(m_eqvar.n_dofs()); 00015 m_sparsity.reinit(m_eqvar.n_dofs(),m_eqvar.n_dofs(),m_eqvar.n_max_dof_coupling()); 00016 assembler.buildSparsityPattern(m_sparsity,m_mesh,m_eqvar); 00017 m_sparsity.compress(); 00018 m_M.reinit(m_sparsity); 00019 assembler.setBoundaryValue(m_mesh,m_eqvar,fD,dirichlet_bc_map); 00020 00021 }
virtual const VecDouble& BiotFEM::getPressureAtCells | ( | ) | [inline, virtual] |
void BiotFEM::getVelocitiesAtFaces | ( | Matrix & | M | ) | [virtual] |
Reimplemented from DynamicBase.
Definition at line 58 of file biotfem.cpp.
00059 { 00060 throw new Exception("BiotFEM::getVelocitiesAtFaces Not implemented for this class\n"); 00061 }
void BiotFEM::iterate | ( | TransportBase & | trans | ) | [virtual] |
Implements DynamicBase.
Definition at line 25 of file biotfem.cpp.
00026 { 00027 AssemblyOrthoMeshSystem<IsotropicElasticEqVar> assembler; 00028 assembler.buildGlobalMatrix(m_M,m_mesh, m_eqvar); 00029 assembler.buildGlobalRhs(m_vRHS,m_mesh,m_eqvar); 00030 assembler.applyBoundaryValue(dirichlet_bc_map,m_M); 00031 assembler.applyBoundaryValue(dirichlet_bc_map,m_vRHS); 00032 //assembler.addNeummanCondition(m_mesh,m_vRHS,m_eqvar,m_fN); 00033 m_sol=m_vRHS; 00034 m_sol.print(); 00035 solveA.factorize(m_M); 00036 solveA.solve(m_sol); 00037 00038 }
void BiotFEM::printOutput | ( | ) | [virtual] |
Implements DynamicBase.
Definition at line 39 of file biotfem.cpp.
00040 { 00041 return; 00042 if (m_debugLevel > 0) 00043 { 00044 HDF5OrthoWriter &hdf5 = HDF5OrthoWriter::getHDF5OrthoWriter(); 00045 hdf5.writeScalarField(m_sol,"P"); 00046 00047 GnuPlotAnim &plot = GnuPlotAnim::getGnuPlotAnim(); 00048 00049 //char str[100]; 00050 //printf("Mass: %g\n",m_mesh.getIntegralAtCells(m_cValues)); 00051 plot.set("yrange","[0:1]"); 00052 plot.plotVerticeValuesAtFixedZ(m_mesh,m_sol,"Sc","with lines",5); 00053 plot.NextScene(); 00054 } 00055 }
MapIntDouble BiotFEM::dirichlet_bc_map [private] |
VecDouble& BiotFEM::m_cK [private] |
unsigned BiotFEM::m_debugLevel [private] |
IsotropicElasticEqVar BiotFEM::m_eqvar [private] |
Function3D& BiotFEM::m_fN [private] |
SparseMatrix<double> BiotFEM::m_M [private] |
OrthoMesh& BiotFEM::m_mesh [private] |
VecDouble BiotFEM::m_sol [private] |
SparsityPattern BiotFEM::m_sparsity [private] |
VecDouble BiotFEM::m_vRHS [private] |
SparseDirectUMFPACK BiotFEM::solveA [private] |