34 typedef typename Problem_Type::Matrix_Type Matrix_Type;
35 typedef typename Problem_Type::MatrixPtr_Type MatrixPtr_Type;
37 typedef typename Problem_Type::BlockMatrix_Type BlockMatrix_Type;
38 typedef typename Problem_Type::BlockMatrixPtr_Type BlockMatrixPtr_Type;
40 typedef typename Problem_Type::MultiVector_Type MultiVector_Type;
41 typedef typename Problem_Type::MultiVectorPtr_Type MultiVectorPtr_Type;
42 typedef typename Problem_Type::MultiVectorConstPtr_Type MultiVectorConstPtr_Type;
43 typedef typename Problem_Type::BlockMultiVector_Type BlockMultiVector_Type;
44 typedef typename Problem_Type::BlockMultiVectorPtr_Type BlockMultiVectorPtr_Type;
46 typedef typename Problem_Type::Domain_Type Domain_Type;
47 typedef Teuchos::RCP<Domain_Type > DomainPtr_Type;
48 typedef typename Problem_Type::DomainConstPtr_Type DomainConstPtr_Type;
50 typedef typename Problem_Type::Domain_Type::Mesh_Type Mesh_Type;
51 typedef typename Problem_Type::Domain_Type::MeshPtr_Type MeshPtr_Type;
53 typedef typename Problem_Type::CommConstPtr_Type CommConstPtr_Type;
57 typedef typename NonLinearProblem_Type::BlockMultiVectorPtrArray_Type BlockMultiVectorPtrArray_Type;
60 typedef Teuchos::RCP<TimeProblem_Type> TimeProblemPtr_Type;
73 typedef Teuchos::RCP<FluidProblem_Type> FluidProblemPtr_Type;
74 typedef Teuchos::RCP<StructureProblem_Type> StructureProblemPtr_Type;
75 typedef Teuchos::RCP<StructureNonLinProblem_Type> StructureNonLinProblemPtr_Type;
76 typedef Teuchos::RCP<GeometryProblem_Type> GeometryProblemPtr_Type;
78 typedef typename Problem_Type::MapConstPtr_Type MapConstPtr_Type;
80 typedef typename Problem_Type::BC_Type BC_Type;
81 typedef typename Teuchos::RCP<BC_Type> BCPtr_Type;
84 typedef Teuchos::RCP<MeshUnstr_Type> MeshUnstrPtr_Type;
87 typedef Teuchos::RCP<Exporter_Type> ExporterPtr_Type;
88 typedef Teuchos::RCP<ExporterTxt> ExporterTxtPtr_Type;
90 typedef std::vector<GO> vec_GO_Type;
91 typedef std::vector<vec_GO_Type> vec2D_GO_Type;
92 typedef std::vector<vec2D_GO_Type> vec3D_GO_Type;
93 typedef Teuchos::RCP<vec3D_GO_Type> vec3D_GO_ptr_Type;
97 FSI(
const DomainConstPtr_Type &domainVelocity, std::string FETypeVelocity,
98 const DomainConstPtr_Type &domainPressure, std::string FETypePressure,
99 const DomainConstPtr_Type &domainStructure, std::string FETypeStructure,
100 const DomainConstPtr_Type &domainInterface, std::string FETypeInterface,
101 const DomainConstPtr_Type &domainGeometry, std::string FETypeGeometry,
102 ParameterListPtr_Type parameterListFluid, ParameterListPtr_Type parameterListStructure,
103 ParameterListPtr_Type parameterListFSI, ParameterListPtr_Type parameterListGeometry,
110 virtual void assemble( std::string type =
"" )
const;
114 void reAssemble( std::string type )
const;
122 virtual void reAssemble( BlockMultiVectorPtr_Type previousSolution )
const{}
124 virtual void reAssembleExtrapolation(BlockMultiVectorPtrArray_Type previousSolutions);
134 void setFromPartialVectorsInit()
const;
137 void updateMeshDisplacement()
const;
140 void solveGeometryProblem()
const;
147 void setFluidMassmatrix(MatrixPtr_Type& massmatrix)
const;
151 void computeFluidRHSInTime( )
const;
154 void updateFluidInTime()
const;
159 void setSolidMassmatrix( MatrixPtr_Type& massmatrix )
const;
161 void computeSolidRHSInTime()
const;
163 void computePressureRHSInTime()
const;
165 void updateTime()
const;
168 void moveMesh()
const;
171 void addInterfaceBlockRHS()
const;
174 void setupSubTimeProblems(ParameterListPtr_Type parameterListFluid, ParameterListPtr_Type parameterListStructure)
const;
176 FluidProblemPtr_Type getFluidProblem(){
177 return problemFluid_;
180 StructureProblemPtr_Type getStructureProblem(){
181 return problemStructure_;
184 StructureNonLinProblemPtr_Type getNonLinStructureProblem(){
185 return problemStructureNonLin_;
188 GeometryProblemPtr_Type getGeometryProblem(){
189 return problemGeometry_;
194 void toNodeID(UN dim, GO dofID, GO& nodeID, LO& localDofNumber )
const
196 nodeID = (GO) (dofID/dim);
197 localDofNumber = (LO) (dofID%dim);
201 void toDofID(UN dim, GO nodeID, LO localDofNumber, GO& dofID)
const
203 dofID = (GO) ( dim * nodeID + localDofNumber);
206 void findDisplacementTurek2DBenchmark();
208 void findDisplacementRichter3DBenchmark();
210 void getValuesOfInterest2DBenchmark( vec_dbl_Type& values );
212 void getValuesOfInterest3DBenchmark( vec_dbl_Type& values );
214 virtual void computeValuesOfInterestAndExport();
216 double getPressureOutlet(){
return pressureOutlet_;};
222 MultiVectorPtr_Type meshDisplacementOld_rep_;
223 MultiVectorPtr_Type meshDisplacementNew_rep_;
224 MultiVectorPtr_Type u_rep_;
225 MultiVectorPtr_Type w_rep_;
226 MultiVectorPtr_Type u_minus_w_rep_;
227 MultiVectorPtr_Type p_rep_;
229 mutable MatrixPtr_Type C2_;
231 mutable MatrixPtr_Type P_;
232 mutable int counterP;
234 FluidProblemPtr_Type problemFluid_;
235 StructureProblemPtr_Type problemStructure_;
236 StructureNonLinProblemPtr_Type problemStructureNonLin_;
237 GeometryProblemPtr_Type problemGeometry_;
240 mutable TimeProblemPtr_Type problemTimeFluid_;
241 mutable TimeProblemPtr_Type problemTimeStructure_;
243 Teuchos::RCP<SmallMatrix<int>> defTS_;
244 mutable Teuchos::RCP<TimeSteppingTools> timeSteppingTool_;
247 std::string materialModel_;
248 vec_dbl_Type valuesForExport_;
249 bool geometryExplicit_;
250 ExporterTxtPtr_Type exporterTxtDrag_;
251 ExporterTxtPtr_Type exporterTxtLift_;
252 mutable ExporterPtr_Type exporterGeo_;
254 ExporterTxtPtr_Type exporterBoundaryCondition_;
255 mutable double areaInlet_init_=0.;
256 mutable double areaOutlet_init_ =0.;
257 mutable double areaOutlet_T_ =0.;
258 mutable double flowRateOutlet_n_ =0.;
259 mutable double flowRateOutlet_n_1_ =0.;
260 mutable double pressureOutlet_ =0.;