LifeV
FSIMonolithicGI Class Reference

FSIMonolithicGI Geometry-Implicit solver. More...

#include <FSIMonolithicGI.hpp>

+ Inheritance diagram for FSIMonolithicGI:
+ Collaboration diagram for FSIMonolithicGI:

Public Types

typedef FSIMonolithic super_Type
 
typedef Preconditioner prec_Type
 
typedef std::shared_ptr< prec_Typeprec_type
 
- Public Types inherited from FSIMonolithic
typedef FSIOperator super_Type
 
typedef FSIOperator::fluid_Type::matrix_Type matrix_Type
 
typedef std::shared_ptr< matrix_TypematrixPtr_Type
 
typedef super_Type::solution_Type solution_Type
 
typedef super_Type::solutionPtr_Type solutionPtr_Type
 
typedef MonolithicBlock prec_Type
 
typedef std::shared_ptr< prec_TypeprecPtr_Type
 
typedef MonolithicBlockMatrix blockMatrix_Type
 
typedef std::shared_ptr< blockMatrix_TypeblockMatrixPtr_Type
 
typedef FactorySingleton< Factory< FSIMonolithic, std::string > > factory_Type
 
typedef SolverAztecOO solver_Type
 
typedef MatrixEpetraStructured< RealmatrixBlock_Type
 
typedef MatrixEpetraStructuredView< RealmatrixBlockView_Type
 
typedef std::shared_ptr< matrixBlock_TypematrixBlockPtr_Type
 
- Public Types inherited from FSIOperator
typedef RegionMesh< LinearTetramesh_Type
 
typedef ExporterHDF5Mesh3D< mesh_TypemeshFilter_Type
 
typedef OseenSolverShapeDerivative< mesh_Typefluid_Type
 
typedef StructuralOperator< mesh_Typesolid_Type
 
typedef HarmonicExtensionSolver< mesh_TypemeshMotion_Type
 
typedef OseenSolverShapeDerivative< mesh_TypefluidLin_Type
 
typedef StructuralOperator< mesh_TypesolidLin_Type
 
typedef std::shared_ptr< fluid_TypefluidPtr_Type
 
typedef std::shared_ptr< solid_TypesolidPtr_Type
 
typedef std::shared_ptr< meshMotion_TypemeshMotionPtr_Type
 
typedef std::shared_ptr< fluidLin_TypefluidLinPtr_Type
 
typedef std::shared_ptr< solidLin_TypesolidLinPtr_Type
 
typedef fluid_Type::vector_Type vector_Type
 
typedef std::shared_ptr< vector_TypevectorPtr_Type
 
typedef vector_Type solution_Type
 
typedef std::shared_ptr< solution_TypesolutionPtr_Type
 
typedef fluid_Type::source_Type fluidSource_Type
 
typedef solid_Type::source_Type solidSource_Type
 
typedef std::function< Real(const Real &, const Real &, const Real &, const Real &, const ID &) > function_Type
 
typedef Real(* bcFunction_Type) (const Real &, const Real &, const Real &, const Real &, const ID &)
 
typedef std::shared_ptr< DOFInterface3Dto3DdofInterface3DPtr_Type
 
typedef std::shared_ptr< DOFInterface3Dto2DdofInterface2DPtr_Type
 
typedef std::shared_ptr< BCVectorInterfacebcVectorInterfacePtr_Type
 
typedef fluid_Type::bcHandlerPtr_Type fluidBchandlerPtr_Type
 
typedef fluid_Type::bcHandler_Type fluidBchandler_Type
 
typedef BCHandler solidBchandler_Type
 
typedef std::shared_ptr< solidBchandler_TypesolidBchandlerPtr_Type
 
typedef FSIData data_Type
 
typedef std::shared_ptr< data_TypedataPtr_Type
 
typedef std::map< ID, ID >::const_iterator iterator_Type
 
typedef FactorySingleton< Factory< FSIOperator, std::string > > FSIFactory_Type
 
typedef Displayer::commPtr_Type commPtr_Type
 
typedef GetPot dataFile_Type
 
typedef std::shared_ptr< dataFile_TypedataFilePtr_Type
 

Static Private Member Functions

static FSIOperatorinstantiate ()
 Factory method. More...
 

Constructor and Destructor

 FSIMonolithicGI ()
 Empty Constructor. More...
 
virtual ~FSIMonolithicGI ()
 Destructor. More...
 

Public Methods

void setup (const GetPot &dataFile)
 Sets the parameters read from data file. More...
 
void setupFluidSolid (UInt const fluxes)
 initializes the fluid and mesh problems, creates the map of the global matrix More...
 
void buildSystem ()
 builds the constant part of the fluid-structure-mesh motion matrix More...
 
void evalResidual (vector_Type &res, const vector_Type &sol, const UInt iter)
 evaluates the residual b-Ax More...
 
void applyBoundaryConditions ()
 Apply the boundary conditions to each block composing the monolithic problem. More...
 
void updateSolution (const vector_Type &solution)
 Update the solution after NonLinearRichardson is called. More...
 
void setALEVectorInStencil (const vectorPtr_Type &fluidDisp, const UInt iter, const bool lastVector)
 Set vectors for restart. More...
 

Get Methods

static bool S_register
 
const MapEpetramapWithoutMesh () const
 get the current solution vector. More...
 
const matrixPtr_Type matrixPtr () const
 getter for the global matrix of the system More...
 

Protected Methods

void setupBlockPrec ()
 set the block preconditioner More...
 

Private Methods

void createOperator (std::string &operType)
 Factory method for the system matrix, of type MonolithicBlockBase. More...
 
void shapeDerivatives (FSIOperator::fluid_Type::matrixPtr_Type sdMatrix)
 calculates the terms due to the shape derivatives given the mesh increment deltaDisp. More...
 
void assembleMeshBlock (UInt iter)
 assembles the mesh motion matrix. More...
 

Private Members

std::shared_ptr< MapEpetraM_mapWithoutMesh
 
vectorPtr_Type M_uk
 
UInt M_interface
 
matrixPtr_Type M_meshBlock
 
FSIOperator::fluid_Type::matrixPtr_Type M_shapeDerivativesBlock
 
matrixPtr_Type M_solidDerBlock
 

Additional Inherited Members

- Public Member Functions inherited from FSIMonolithic
 FSIMonolithic ()
 
 ~FSIMonolithic ()
 
void setupFEspace ()
 create FEspace More...
 
virtual void setupDOF (void)
 sets the interface map between the fluid and solid meshes (non scalable, do not use for massively parallel simulations) More...
 
void setupDOF (meshFilter_Type &filterMesh)
 reads the interface map between the fluid and solid meshes from file. More...
 
virtual void setupSystem ()
 sets the parameters from data file More...
 
virtual void setupFluidSolid ()
 builds the global Epetra map More...
 
void monolithicToInterface (vector_Type &lambdaSolid, const vector_Type &sol)
 Transfers a vector to the interface. More...
 
void monolithicToX (const vector_Type &disp, vector_Type &dispFluid, MapEpetra &map, UInt offset=(UInt) 0)
 Transfers a vector to a subdomain. More...
 
void buildSystem ()
 builds the constant part of the monolithic matrix More...
 
void mergeBCHandlers ()
 Merges the flux boundary conditions into the fluid BCHandler. More...
 
void computeFluidNormals (vector_Type &normals)
 Computes the normals to the fluid domain. More...
 
virtual void solveJac (vector_Type &muk, const vector_Type &res, const Real linearRelTol)
 solves the Jacobian system More...
 
virtual void updateSystem ()
 updates the meshmotion, advances of a time step More...
 
void enableStressComputation (UInt flag)
 activates the computation of the wall stress on the boundary with a specified flag. More...
 
vectorPtr_Type computeStress ()
 Computes the stress on the coupling boundary (the traction vector) More...
 
precPtr_TypeprecPtrView ()
 returns a non-const pointer to the preconditioner. Can be used either as a setter or a getter. More...
 
blockMatrixPtr_TypeoperatorPtrView ()
 returns a non-const pointer to the preconditioner. Can be used either as a setter or a getter. More...
 
virtual void setSolidBC (const fluidBchandlerPtr_Type &bc_solid)
 sets the solid BCHandle More...
 
void setFluidBC (const fluidBchandlerPtr_Type &bc_fluid)
 initializes the solution by reference (through a shared_ptr) More...
 
UInt dimInterface () const
 get the total dimension of the FS interface More...
 
UInt offset () const
 Returns true if CE of FI methods are used, false otherwise (GCE) More...
 
void exportSolidDisplacement (vector_Type &solidDisplacement)
 Get the solid displacement from the solution. More...
 
void exportSolidVelocity (vector_Type &solidVelocity)
 Get the solid velocity. More...
 
void exportSolidAcceleration (vector_Type &solidAcceleration)
 Get the solid accelration. More...
 
void exportFluidVelocity (vector_Type &fluidVelocity)
 Export the fluid velocity by copying it to an external vector. More...
 
void exportFluidPressure (vector_Type &fluidPressure)
 Export the fluid pressure by copying it to an external vector. More...
 
void exportFluidVelocityAndPressure (vector_Type &fluidVelocityAndPressure)
 Gets the fluid and pressure. More...
 
virtual std::shared_ptr< MapEpetra > & couplingVariableMap ()
 Returns the monolithic map. More...
 
virtual const vector_Typesolution () const =0
 get the solution vector More...
 
void updateRHS ()
 Updates the right hand side. More...
 
void setVectorInStencils (const vectorPtr_Type &vel, const vectorPtr_Type &pressure, const vectorPtr_Type &solidDisp, const UInt iter)
 Set vectors for restart. More...
 
void setFluidVectorInStencil (const vectorPtr_Type &vel, const vectorPtr_Type &pressure, const UInt iter)
 
void setSolidVectorInStencil (const vectorPtr_Type &solidDisp, const UInt iter)
 
void finalizeRestart ()
 
void initializeMonolithicOperator (std::vector< vectorPtr_Type > u0, std::vector< vectorPtr_Type > ds0, std::vector< vectorPtr_Type > df0)
 
- Public Member Functions inherited from FSIOperator
 FSIOperator ()
 
virtual ~FSIOperator ()
 
virtual void setDataFile (const dataFile_Type &data)
 initializes the GetPot data file More...
 
virtual void partitionMeshes ()
 partitions the meshes for the fluid and the structure More...
 
void partitionMeshes (meshFilter_Type &fluidMeshFilter, meshFilter_Type &solidMeshFilter)
 reads the meshes already partitioned for the fluid and the structure More...
 
void couplingVariableExtrap ()
 Extrapolates an approximation of the solution. More...
 
virtual void initialize (fluid_Type::function_Type const &u0, fluid_Type::function_Type const &p0, solid_Type::function const &d0, solid_Type::function const &w0, fluid_Type::function_Type const &df0)
 Initializes all the quantities using functions. More...
 
virtual void iterateMesh (const vector_Type &)
 
virtual void setupBDF (const vector_Type &)
 
void initializeTimeAdvance (const std::vector< vectorPtr_Type > &initialFluidVel, const std::vector< vectorPtr_Type > &initialSolidDisp, const std::vector< vectorPtr_Type > &initialFluiDisp)
 Initializes the TimeAdvance scheme which should handle the fluid time discretization, solid and move mesh. More...
 
void initializeFluid (const vector_Type &velAndPressure, const vector_Type &displacement)
 initializes the fluid solver with vectors More...
 
void initializeSolid (vectorPtr_Type displacement, vectorPtr_Type)
 initializes the solid solver with vectors More...
 
void moveMesh (const vector_Type &disp)
 moves the mesh using the solution of the harmonic extension equation More...
 
void createInterfaceMaps (std::map< ID, ID > const &locDofMap)
 Creates the Epetra maps for the interface. More...
 
void transferFluidOnInterface (const vector_Type &_vec1, vector_Type &_vec2)
 Method to import an VectorEpetra defined on the fluid map (i.e. with the fluid numeration of the dofs) to the interface. More...
 
void transferSolidOnFluid (const vector_Type &_vec1, vector_Type &_vec2)
 
void transferSolidOnInterface (const vector_Type &_vec1, vector_Type &_vec2)
 Method to import an VectorEpetra defined on the solid map (i.e. with the solid numeration of the dofs) to the interface. More...
 
void transferInterfaceOnSolid (const vector_Type &_vec1, vector_Type &_vec2)
 Method to import an VectorEpetra defined on the solid map (i.e. with the solid numeration of the dofs) to the interface. More...
 
void bcManageVectorRHS (const fluidBchandlerPtr_Type &bch, vector_Type &rhs)
 Update the RHS on the base of the fluid BC. More...
 
void bcManageVectorRHS (const fluidBchandlerPtr_Type &bcHandlerFluid, const solidBchandlerPtr_Type &bcHandlerSolid, vector_Type &rhs)
 Update the RHS on the base of the fluid and solid BC. More...
 
void setAlphaf ()
 Method to set the Robin vector coefficient of the Robin–Neumann coupling scheme (as a constant vector vector) More...
 
void setAlphafCoef ()
 Method to compute the scalar coefficient $\alpha$ of the Robin–Neumann coupling scheme. More...
 
void setStructureToFluidParameters ()
 Method calling setAlphaf and setAlphafCoef. More...
 
void resetRHS ()
 Reset the right hand side to zero. More...
 
bool isLeader () const
 
Displayer const & displayer ()
 Getter for the Displayer attribute. More...
 
void extrapolation (vector_Type &extrapolation) const
 Get the extrapolation of the solution. More...
 
UInt imposedFluxes ()
 Returns the number of imposed fluxes. More...
 
const vector_TypelambdaFluid () const
 
const vector_TypelambdaSolid () const
 
const vector_TypelambdaSolidOld () const
 
const vector_TypelambdaDotSolid () const
 
const vector_TypesigmaFluid () const
 
const vector_TypesigmaSolid () const
 
const vector_TypelambdaFluidRepeated () const
 
const vector_TypelambdaSolidRepeated () const
 
const vector_TypelambdaDotSolidRepeated () const
 
const vector_TypesigmaFluidRepeated () const
 
const vector_TypesigmaSolidRepeated () const
 
const vector_TypeminusSigmaFluid () const
 
const vector_TypeminusSigmaFluidRepeated () const
 
vector_TypeAlphaf () const
 coefficient for the Robin–Neumann coupling scheme More...
 
commPtr_Type worldComm () const
 
bool isFluid () const
 
bool isSolid () const
 
bool isLinearFluid () const
 
bool isLinearSolid () const
 
int getFluidLeaderId () const
 
int getSolidLeaderId () const
 
const fluid_Typefluid () const
 Getter for the fluid solver. More...
 
const solid_Typesolid () const
 Getter for the solid solver. More...
 
const meshMotion_TypemeshMotion () const
 Getter for the harmonic extension solver. More...
 
fluid_Typefluid ()
 Getter-Setter for the fluid solver. More...
 
solid_Typesolid ()
 Getter-Setter for the solid solver. More...
 
meshMotion_TypemeshMotion ()
 Getter-Setter for the mesh motion solver. More...
 
const data_Typedata () const
 getter for the FSI data container More...
 
const data_Type::dataFluidPtr_TypedataFluid () const
 getter for the fluid data container More...
 
const data_Type::dataSolidPtr_TypedataSolid () const
 getter for the solid data container More...
 
mesh_TypefluidMesh () const
 getter for the unpartitioned fluid mesh More...
 
mesh_TypesolidMesh () const
 getter for the unpartitioned solid mesh More...
 
mesh_TypefluidLocalMesh ()
 getter for the partitioned fluid mesh More...
 
mesh_TypesolidLocalMesh ()
 getter for the partitioned solid mesh More...
 
const FESpace< mesh_Type, MapEpetra > & uFESpace () const
 getter for the fluid velocity FESpace More...
 
std::shared_ptr< FESpace< mesh_Type, MapEpetra > > uFESpacePtr () const
 
const FESpace< mesh_Type, MapEpetra > & pFESpace () const
 getter for the fluid pressure FESpace More...
 
std::shared_ptr< FESpace< mesh_Type, MapEpetra > > pFESpacePtr () const
 
const FESpace< mesh_Type, MapEpetra > & dFESpace () const
 getter for the solid displacement FESpace More...
 
std::shared_ptr< FESpace< mesh_Type, MapEpetra > > dFESpacePtr () const
 
const ETFESpace< mesh_Type, MapEpetra, 3, 3 > & dFESpaceET () const
 getter for the solid displacement FESpace More...
 
std::shared_ptr< ETFESpace< mesh_Type, MapEpetra, 3, 3 > > dFESpaceETPtr () const
 
const FESpace< mesh_Type, MapEpetra > & mmFESpace () const
 getter for the harmonic extension solution FESpace More...
 
std::shared_ptr< FESpace< mesh_Type, MapEpetra > > mmFESpacePtr () const
 
const vector_TypemeshDisp () const
 getter for the harmonic extension solution More...
 
const vector_TypedispFluidMeshOld () const
 getter for the harmonic extension solution of the previous time step More...
 
virtual vector_TypeveloFluidMesh ()
 getter for the mesh velocity More...
 
vector_TypederVeloFluidMesh ()
 getter for the mesh velocity increment (used for Newton FSI) More...
 
const dofInterface3DPtr_TypedofFluidToStructure () const
 
const dofInterface3DPtr_TypedofStructureToSolid () const
 
const dofInterface3DPtr_TypedofStructureToHarmonicExtension () const
 
const dofInterface3DPtr_TypedofHarmonicExtensionToFluid () const
 
std::shared_ptr< MapEpetra > & fluidInterfaceMap ()
 
std::shared_ptr< MapEpetra > & solidInterfaceMap ()
 
BCFunctionRobinbcfRobinOuterWall ()
 Method to implement Robin boundary conditions on the external wall for the structure. More...
 
bcVectorInterfacePtr_Type bcvStructureDisptoFluid () const
 
bcVectorInterfacePtr_Type bcvStructureToFluid () const
 
bcVectorInterfacePtr_Type bcvSolidLoadToStructure () const
 
bcVectorInterfacePtr_Type bcvFluidInterfaceDisp () const
 
bcVectorInterfacePtr_Type bcvHarmonicExtensionVelToFluid () const
 
bcVectorInterfacePtr_Type bcvDerHarmonicExtensionVelToFluid () const
 
bcVectorInterfacePtr_Type bcvStructureDispToHarmonicExtension () const
 
bcVectorInterfacePtr_Type bcvStructureDispToSolid () const
 
bcVectorInterfacePtr_Type bcvDerStructureDispToSolid () const
 
bcVectorInterfacePtr_Type bcvFluidLoadToStructure () const
 
bcVectorInterfacePtr_Type bcvDerFluidLoadToStructure () const
 
bcVectorInterfacePtr_Type bcvDerFluidLoadToFluid () const
 
const fluidBchandlerPtr_TypeBCh_fluid () const
 Getter for the BCHandler of the fluid problem. More...
 
const fluidBchandlerPtr_TypeBCh_harmonicExtension () const
 Getter for the BCHandler of the harmonic extension problem. More...
 
const fluidBchandlerPtr_TypeBCh_du () const
 Getter for the BCHandler of the linearized fluid problem (to be used in Newton for the partitioned FSI) More...
 
const fluidBchandlerPtr_TypeBCh_du_inv () const
 Getter for the BCHandler of the linearized inverse of the fluid Steklov Poincare' operator (not used) More...
 
const solidBchandlerPtr_TypeBCh_solid () const
 Getter for the BCHandler of the solid problem. More...
 
const solidBchandlerPtr_TypeBCh_dz () const
 Getter for the BCHandler of the linearized solid problem. More...
 
const solidBchandlerPtr_TypeBCh_dz_inv () const
 Getter for the BCHandler of the linearized inverse of the solid Steklov Poincare' operator (not used) More...
 
const vectorPtr_TypegetRHS () const
 Getter for the right hand side. More...
 
const std::shared_ptr< TimeAdvance< vector_Type > > ALETimeAdvance () const
 
const std::shared_ptr< TimeAdvance< vector_Type > > fluidTimeAdvance () const
 
const std::shared_ptr< TimeAdvance< vector_Type > > solidTimeAdvance () const
 
const std::string ALETimeAdvanceMethod () const
 
const std::string fluidTimeAdvanceMethod () const
 
const std::string solidTimeAdvanceMethod () const
 
virtual void getSolidDisp (vector_Type &soliddisp)
 gets the solid displacement by copy More...
 
virtual void getSolidVel (vector_Type &solidvel)
 gets the solid velocity by copy More...
 
virtual void exportFluidDisplacement (vector_Type &fluidDisplacement)
 Export the fluid displacement by copying it to an external vector. More...
 
void setComm (const commPtr_Type &comm, const commPtr_Type &worldComm)
 Setter for the local and world communicators. More...
 
void setData (const dataPtr_Type &data)
 Setter for the FSI data. More...
 
void setFluid (const fluidPtr_Type &fluid, const meshMotionPtr_Type &meshmotion)
 Setter for the fluid and geometry problems. More...
 
void setSolid (const solidPtr_Type &solid)
 Setter for the solid problem. More...
 
void setFluid (const bool &isFluid)
 Setter for the "fluid" flag. More...
 
void setSolid (const bool &isSolid)
 Setter for the "solid" flag. More...
 
void setLinearFluid (const bool &linFluid)
 Setter for the "linear fluid" flag. More...
 
void setLinearSolid (const bool &linSolid)
 Setter for the "linear solid" flag. More...
 
void setFluidLeader (const int &fluidLeader)
 
void setSolidLeader (const int &solidLeader)
 
void setLinFluidBC (const fluidBchandlerPtr_Type &bc_dfluid)
 Setter for the BCHandler of the linearized fluid problem (to be used in segregated Newton FSI) More...
 
void setInvLinFluidBC (const fluidBchandlerPtr_Type &bc_dfluid_inv)
 Setter for the BCHandler of the inverse linearized fluid steklov Poincare' operator (to be used in SP FSI formulation) More...
 
void setHarmonicExtensionBC (const fluidBchandlerPtr_Type &bc_he)
 Setter for the BCHandler of the gerometry problem (to be used in segregated Newton FSI) More...
 
virtual void setSolidBC (const solidBchandlerPtr_Type &bc_solid)
 Setter for the fluid BCHandler. More...
 
void setLinSolidBC (const solidBchandlerPtr_Type &bc_dsolid)
 Setter for the BCHandler of the linearized solid problem (to be used in segregated Newton FSI) More...
 
void setInvLinSolidBC (const solidBchandlerPtr_Type &bc_dsolid_inv)
 Setter for the BCHandler of the inverse linearized solid steklov Poincare' operator (to be used in SP FSI formulation) More...
 
void setLambdaFluid (const vector_Type &lambda)
 Setter for the interface displacement (partitioned according to the fluid) More...
 
void setLambdaSolid (const vector_Type &lambda)
 Setter for the interface displacement (partitioned according to the solid) More...
 
void setLambdaSolidOld (const vector_Type &lambda)
 Setter for the solid interface displacement at the previous time step. More...
 
void setLambdaDotSolid (const vector_Type &lambda)
 Setter for the solid interface velocity at the previous time step. More...
 
void setSigmaFluid (const vector_Type &sigma)
 Setter for the fluid interface stress. More...
 
void setSigmaSolid (const vector_Type &sigma)
 Setter for the solid interface stress. More...
 
void setMinusSigmaFluid (const vector_Type &sigma)
 
void setAlphafbcf (const bcFunction_Type &alphafbcf)
 Setter for the Robin coefficient of the Robin–Neumann coupling scheme (as a BCFunction) More...
 
void setStructureDispToHarmonicExtension (const vector_Type &disp, UInt type=0)
 
void setStructureToFluid (const vector_Type &vel, UInt type=0)
 
void setStructureDispToFluid (const vector_Type &vel, UInt type=0)
 
void setStructureDispToSolid (const vector_Type &disp, UInt type=0)
 
void setDerStructureDispToSolid (const vector_Type &ddisp, UInt type=0)
 
void setSolidLoadToStructure (const vector_Type &load, UInt type=0)
 
void setHarmonicExtensionVelToFluid (const vector_Type &vel, UInt type=0)
 
void setDerHarmonicExtensionVelToFluid (const vector_Type &dvel, UInt type=0)
 
void setFluidLoadToStructure (const vector_Type &load, UInt type=0)
 
void setDerFluidLoadToStructure (const vector_Type &dload, UInt type=0)
 
void setDerFluidLoadToFluid (const vector_Type &dload, UInt type=0)
 
void setRobinOuterWall (const function_Type &dload, const function_Type &E)
 
void setSolutionDerivative (const vector_Type &solutionDerivative)
 Setter for the time derivative of the interface displacement. More...
 
void setupTimeAdvance (const dataFile_Type &dataFile)
 Setup of the TimeAdvance classes given the input data file. More...
 
- Static Public Member Functions inherited from FSIOperator
static StructuralIsotropicConstitutiveLaw< FSIOperator::mesh_Type > * createVenantKirchhoffLinear ()
 
static StructuralIsotropicConstitutiveLaw< FSIOperator::mesh_Type > * createVenantKirchhoffNonLinear ()
 
static StructuralIsotropicConstitutiveLaw< FSIOperator::mesh_Type > * createExponentialMaterialNonLinear ()
 
static StructuralIsotropicConstitutiveLaw< FSIOperator::mesh_Type > * createNeoHookeanMaterialNonLinear ()
 
static StructuralIsotropicConstitutiveLaw< FSIOperator::mesh_Type > * createVenantKirchhoffNonLinearPenalized ()
 
static StructuralIsotropicConstitutiveLaw< FSIOperator::mesh_Type > * createSecondOrderExponentialMaterialNonLinear ()
 
- Protected Member Functions inherited from FSIMonolithic
void iterateMonolithic (const vector_Type &rhs, vector_Type &step)
 solves the monolithic system, once a solver, a preconditioner and a rhs have been defined. More...
 
void couplingRhs (vectorPtr_Type rhs)
 adds the part due to coupling to the rhs More...
 
void evalResidual (const vector_Type &sol, const vectorPtr_Type &rhs, vector_Type &res, bool diagonalScaling=false)
 evaluates the linear residual More...
 
bool recomputePrec ()
 says if the preconditioner will be recomputed More...
 
void updateSolidSystem (vectorPtr_Type &rhsFluidCoupling)
 updates the rhs of the solid block. More...
 
void diagonalScale (vector_Type &rhs, matrixPtr_Type matrFull)
 scales matrix and rhs More...
 
void solidInit (std::string const &dOrder)
 Constructs the solid FESpace. More...
 
void variablesInit (std::string const &dOrder)
 Constructs the solid FESpace and initializes the coupling variables at the interface. More...
 
void assembleSolidBlock (UInt iter, const vector_Type &solution)
 assembles the solid problem (the matrix and the rhs due to the time derivative) More...
 
void assembleFluidBlock (UInt iter, const vector_Type &solution)
 assembles the fluid problem (the matrix and the rhs due to the time derivative) More...
 
void checkIfChangedFluxBC (precPtr_Type oper)
 Checks if the flux bcs changed during the simulation, e.g. More...
 
- Protected Member Functions inherited from FSIOperator
void transferMeshMotionOnFluid (const vector_Type &_vec1, vector_Type &_vec2)
 Interpolates the mesh motion dofs on the fluid. More...
 
void interpolateVelocity (const vector_Type &_vec1, vector_Type &_vec2)
 Interpolates mesh motion into velocity. More...
 
void interpolateInterfaceDofs (const FESpace< mesh_Type, MapEpetra > &_fespace1, const vector_Type &_vec1, const FESpace< mesh_Type, MapEpetra > &_fespace2, vector_Type &_vec2, dofInterface3DPtr_Type &_dofInterface)
 Interpolates to vectors on the interface. More...
 
- Protected Attributes inherited from FSIMonolithic
std::shared_ptr< MapEpetraM_monolithicMap
 
std::shared_ptr< MapEpetraM_interfaceMap
 
std::shared_ptr< vector_TypeM_beta
 the solid interface map More...
 
std::shared_ptr< MonolithicBlockMatrixM_monolithicMatrix
 
precPtr_Type M_precPtr
 
std::shared_ptr< vector_TypeM_rhsFull
 
fluidBchandlerPtr_Type M_BCh_flux
 
solidBchandlerPtr_Type M_BChWS
 
BCFunctionRobin M_bcfWs
 
UInt M_offset
 
UInt M_solidAndFluidDim
 
FSIOperator::fluid_Type::matrixPtr_Type M_fluidBlock
 
matrixPtr_Type M_solidBlockPrec
 
matrixPtr_Type M_robinCoupling
 
matrixPtr_Type M_boundaryMass
 
std::shared_ptr< solver_TypeM_linearSolver
 
std::shared_ptr< vector_TypeM_numerationInterface
 
std::vector< fluidBchandlerPtr_TypeM_BChs
 
std::vector< std::shared_ptr< FESpace< mesh_Type, MapEpetra > > > M_FESpaces
 
bool M_diagonalScale
 
bool M_reusePrec
 
bool M_resetPrec
 
Int M_maxIterSolver
 
bool M_restarts
 
- Protected Attributes inherited from FSIOperator
std::shared_ptr< FESpace< mesh_Type, MapEpetra > > M_uFESpace
 
std::shared_ptr< FESpace< mesh_Type, MapEpetra > > M_pFESpace
 
std::shared_ptr< FESpace< mesh_Type, MapEpetra > > M_dFESpace
 
std::shared_ptr< ETFESpace< mesh_Type, MapEpetra, 3, 3 > > M_dETFESpace
 
std::shared_ptr< FESpace< mesh_Type, MapEpetra > > M_mmFESpace
 
std::shared_ptr< mesh_TypeM_fluidMesh
 
std::shared_ptr< mesh_TypeM_solidMesh
 
std::shared_ptr< mesh_TypeM_fluidLocalMesh
 
std::shared_ptr< mesh_TypeM_solidLocalMesh
 
fluidBchandlerPtr_Type M_BCh_u
 
solidBchandlerPtr_Type M_BCh_d
 
fluidBchandlerPtr_Type M_BCh_mesh
 
fluidBchandlerPtr_Type M_BCh_du
 
fluidBchandlerPtr_Type M_BCh_du_inv
 
solidBchandlerPtr_Type M_BCh_dz
 
solidBchandlerPtr_Type M_BCh_dz_inv
 
fluidBchandlerPtr_Type M_BCh_dp
 
fluidBchandlerPtr_Type M_BCh_dp_inv
 
fluidPtr_Type M_fluid
 
solidPtr_Type M_solid
 
meshMotionPtr_Type M_meshMotion
 
std::string M_fluidTimeAdvanceMethod
 
std::string M_solidTimeAdvanceMethod
 
std::string M_ALETimeAdvanceMethod
 
std::shared_ptr< TimeAdvance< vector_Type > > M_fluidTimeAdvance
 
std::shared_ptr< TimeAdvance< vector_Type > > M_fluidMassTimeAdvance
 
std::shared_ptr< TimeAdvance< vector_Type > > M_solidTimeAdvance
 
std::shared_ptr< TimeAdvance< vector_Type > > M_ALETimeAdvance
 
dataFile_Type M_dataFile
 
std::shared_ptr< MeshDataM_meshDataFluid
 
std::shared_ptr< MeshDataM_meshDataSolid
 
dataPtr_Type M_data
 
std::shared_ptr< MapEpetraM_fluidInterfaceMap
 
std::shared_ptr< MapEpetraM_solidInterfaceMap
 
std::shared_ptr< MapEpetraM_fluidInterfaceMapOnZero
 
std::shared_ptr< MapEpetraM_solidInterfaceMapOnZero
 
dofInterface3DPtr_Type M_dofFluidToStructure
 
dofInterface3DPtr_Type M_dofStructureToFluid
 
dofInterface3DPtr_Type M_dofStructureToSolid
 
dofInterface3DPtr_Type M_dofStructureToHarmonicExtension
 
dofInterface3DPtr_Type M_dofHarmonicExtensionToFluid
 
dofInterface2DPtr_Type M_dofFluid
 
dofInterface2DPtr_Type M_dofSolid
 
dofInterface2DPtr_Type M_dofFluidInv
 
dofInterface2DPtr_Type M_dofSolidInv
 
bcVectorInterfacePtr_Type M_bcvFluidInterfaceDisp
 
bcVectorInterfacePtr_Type M_bcvFluidLoadToStructure
 
bcVectorInterfacePtr_Type M_bcvSolidLoadToStructure
 
bcVectorInterfacePtr_Type M_bcvStructureToFluid
 
bcVectorInterfacePtr_Type M_bcvStructureDispToFluid
 
bcVectorInterfacePtr_Type M_bcvStructureDispToSolid
 
bcVectorInterfacePtr_Type M_bcvStructureDispToHarmonicExtension
 
bcVectorInterfacePtr_Type M_bcvHarmonicExtensionVelToFluid
 
bcVectorInterfacePtr_Type M_bcvDerHarmonicExtensionVelToFluid
 
bcVectorInterfacePtr_Type M_bcvDerFluidLoadToStructure
 
bcVectorInterfacePtr_Type M_bcvDerFluidLoadToFluid
 
bcVectorInterfacePtr_Type M_bcvDerStructureDispToSolid
 
BCFunctionRobin M_bcfRobinOuterWall
 
vectorPtr_Type M_lambdaFluid
 
vectorPtr_Type M_lambdaFluidRepeated
 
vectorPtr_Type M_lambda
 
vectorPtr_Type M_lambdaDot
 
vectorPtr_Type M_rhs
 
vectorPtr_Type M_alphaF
 
Real M_alphaFCoef
 
Real M_betaMean
 
commPtr_Type M_epetraComm
 
commPtr_Type M_epetraWorldComm
 
bool M_structureNonLinear
 

Detailed Description

FSIMonolithicGI Geometry-Implicit solver.

Author
Paolo Crosetto paolo.nosp@m..cro.nosp@m.setto.nosp@m.@epf.nosp@m.l.ch Class handling the nonlinear monolithic solver for FSI problems. The (exact or inexact) Newton algorithm is used to solve the nonlinearity. The block structure of the jacobian matrix is $\left(\begin{array}{ccc} C&B&S\\ D&N&0\\ 0&E&H \end{array}\right)$ where $N$ represents the solid block, $C$ the fluid block, $H$ is the harmonic extension block, while the extra diagonal blocks represent the coupling. The implementation of the stress continuity coupling condition is obtained by means of an augmented formulation. Different possible preconditioners are implemented.

Important parameters to set properly in the data file:

  • useShapeDerivatives: if true the shape derivatives block is added to the Jacobian matrix;
  • domainVelImplicit: if true the domain velocity w in the convective term is considered an unknown (at the time n+1);
  • convectiveTermDer: false if the convective term is linearized ( $u^{n+1}\nabla(u^n-w^n)$), otherwise it can be either true (if we use the Newton method to solve the convective term nonlinearity) or false (fixed-point method);
  • semiImplicit: if true only one iteration of the nonlinear solver is performed. Otherwise the nonlinear iterations continue up to the specified tolerance. Set it to true for the GCE;
  • method: can be either monolithicGE, monolithicGI if the geometry is treated respectively explicitly or implicitly, or exactJacobians, fixedPoint for partitioned strategies;
  • blockOper: specifies the matrix type to be used for the linear system: if AdditiveSchwarz, the matrix is the standard ine for GE; if AdditiveSchwarzRN the coupling blocks are of Robin type instead of Dirichlet and Neumann. The parameters for the Robin coupling are alphaf and alphas in the data file. NOTE: this method has currently been tested only for alphas=0.
  • DDBlockPrec: specifies the possible preconditioners to use. Can be: AdditiveSchwarz, MonolithicBlockComposedDN, MonolithicBlockComposedDN2, MonolithicBlockComposedNN, MonolithicBlockComposedDNND.

Definition at line 85 of file FSIMonolithicGI.hpp.

Member Typedef Documentation

◆ super_Type

Definition at line 89 of file FSIMonolithicGI.hpp.

◆ prec_Type

Definition at line 90 of file FSIMonolithicGI.hpp.

◆ prec_type

typedef std::shared_ptr< prec_Type > prec_type

Definition at line 91 of file FSIMonolithicGI.hpp.

Constructor & Destructor Documentation

◆ FSIMonolithicGI()

Empty Constructor.

Definition at line 41 of file FSIMonolithicGI.cpp.

◆ ~FSIMonolithicGI()

virtual ~FSIMonolithicGI ( )
inlinevirtual

Destructor.

Definition at line 100 of file FSIMonolithicGI.hpp.

Member Function Documentation

◆ setup()

void setup ( const GetPot dataFile)
virtual

Sets the parameters read from data file.

Reimplemented from FSIMonolithic.

Definition at line 55 of file FSIMonolithicGI.cpp.

◆ setupFluidSolid()

void setupFluidSolid ( UInt const  fluxes)
virtual

initializes the fluid and mesh problems, creates the map of the global matrix

Reimplemented from FSIMonolithic.

Definition at line 60 of file FSIMonolithicGI.cpp.

◆ buildSystem()

void buildSystem ( )
virtual

builds the constant part of the fluid-structure-mesh motion matrix

Reimplemented from FSIOperator.

Definition at line 103 of file FSIMonolithicGI.cpp.

◆ evalResidual()

void evalResidual ( vector_Type res,
const vector_Type sol,
const UInt  iter 
)
virtual

evaluates the residual b-Ax

Parameters
resoutput
_solfluid domain displacement solution
itercurrent NonLinearRichardson (block Gauss Seidel for the tangent system) iteration

Implements FSIMonolithic.

Definition at line 110 of file FSIMonolithicGI.cpp.

◆ applyBoundaryConditions()

void applyBoundaryConditions ( )
virtual

Apply the boundary conditions to each block composing the monolithic problem.

Sets the vectors of: boundary conditions, FESpaces, couplings, offsets, and sets the blocks in the composed operator which constitutes the monolithic problem. Then calls the applyBoundaryConditions of the MonolithicBlockMatrix operator, passing also the right hand side.

Reimplemented from FSIOperator.

Definition at line 229 of file FSIMonolithicGI.cpp.

◆ updateSolution()

void updateSolution ( const vector_Type solution)
inlinevirtual

Update the solution after NonLinearRichardson is called.

Here it is used also to update the velocity for the post-processing.

Reimplemented from FSIMonolithic.

Definition at line 134 of file FSIMonolithicGI.hpp.

◆ setALEVectorInStencil()

void setALEVectorInStencil ( const vectorPtr_Type fluidDisp,
const UInt  iter,
const bool  lastVector 
)
virtual

Set vectors for restart.

Set vectors for restart

Implements FSIMonolithic.

Definition at line 249 of file FSIMonolithicGI.cpp.

◆ mapWithoutMesh()

const MapEpetra& mapWithoutMesh ( ) const
inline

get the current solution vector.

getter for the map of fluid-structure-interface (without the mesh motion)

Definition at line 177 of file FSIMonolithicGI.hpp.

◆ matrixPtr()

const matrixPtr_Type matrixPtr ( ) const
inline

getter for the global matrix of the system

Definition at line 183 of file FSIMonolithicGI.hpp.

◆ setupBlockPrec()

void setupBlockPrec ( )
protectedvirtual

set the block preconditioner

Reimplemented from FSIMonolithic.

Definition at line 296 of file FSIMonolithicGI.cpp.

◆ createOperator()

void createOperator ( std::string &  operType)
inlineprivatevirtual

Factory method for the system matrix, of type MonolithicBlockBase.

Implements FSIMonolithic.

Definition at line 208 of file FSIMonolithicGI.hpp.

◆ shapeDerivatives()

void shapeDerivatives ( FSIOperator::fluid_Type::matrixPtr_Type  sdMatrix)
private

calculates the terms due to the shape derivatives given the mesh increment deltaDisp.

The shape derivative block is assembled in a matrix (not in a right hand side representing the matrix-vector multiplication)

Parameters
sdMatrixoutput. Shape derivatives block to be summed to the Jacobian matrix.

Definition at line 384 of file FSIMonolithicGI.cpp.

◆ assembleMeshBlock()

void assembleMeshBlock ( UInt  iter)
private

assembles the mesh motion matrix.

In Particular it diagonalize the part of the matrix corresponding to the Dirichlet condition expressing the coupling

Parameters
itercurrent iteration: used as flag to distinguish the first nonlinear iteration from the others

Definition at line 414 of file FSIMonolithicGI.cpp.

◆ instantiate()

static FSIOperator* instantiate ( )
inlinestaticprivate

Factory method.

Definition at line 246 of file FSIMonolithicGI.hpp.

Field Documentation

◆ S_register

bool S_register
static

◆ M_mapWithoutMesh

std::shared_ptr<MapEpetra> M_mapWithoutMesh
private

Definition at line 234 of file FSIMonolithicGI.hpp.

◆ M_uk

vectorPtr_Type M_uk
private

Definition at line 237 of file FSIMonolithicGI.hpp.

◆ M_interface

UInt M_interface
private

Definition at line 238 of file FSIMonolithicGI.hpp.

◆ M_meshBlock

matrixPtr_Type M_meshBlock
private

Definition at line 239 of file FSIMonolithicGI.hpp.

◆ M_shapeDerivativesBlock

FSIOperator::fluid_Type::matrixPtr_Type M_shapeDerivativesBlock
private

Definition at line 240 of file FSIMonolithicGI.hpp.

◆ M_solidDerBlock

matrixPtr_Type M_solidDerBlock
private

Definition at line 241 of file FSIMonolithicGI.hpp.


The documentation for this class was generated from the following files: