30class NavierStokes :
public NonLinearProblem<SC,LO,GO,NO> {
36 typedef typename Problem_Type::Matrix_Type Matrix_Type;
37 typedef typename Problem_Type::MatrixPtr_Type MatrixPtr_Type;
39 typedef typename Problem_Type::MapConstPtr_Type MapConstPtr_Type;
41 typedef typename Problem_Type::BlockMatrix_Type BlockMatrix_Type;
42 typedef typename Problem_Type::BlockMatrixPtr_Type BlockMatrixPtr_Type;
44 typedef typename Problem_Type::MultiVector_Type MultiVector_Type;
45 typedef typename Problem_Type::MultiVectorPtr_Type MultiVectorPtr_Type;
46 typedef typename Problem_Type::MultiVectorConstPtr_Type MultiVectorConstPtr_Type;
47 typedef typename Problem_Type::BlockMultiVectorPtr_Type BlockMultiVectorPtr_Type;
49 typedef typename Problem_Type::DomainConstPtr_Type DomainConstPtr_Type;
50 typedef typename Problem_Type::CommConstPtr_Type CommConstPtr_Type;
52 typedef NonLinearProblem<SC,LO,GO,NO> NonLinearProblem_Type;
53 typedef typename NonLinearProblem_Type::BlockMultiVectorPtrArray_Type BlockMultiVectorPtrArray_Type;
55 typedef typename NonLinearProblem_Type::TpetraMatrix_Type TpetraMatrix_Type;
57 typedef typename NonLinearProblem_Type::ThyraVecSpace_Type ThyraVecSpace_Type;
58 typedef typename NonLinearProblem_Type::ThyraVec_Type ThyraVec_Type;
59 typedef typename NonLinearProblem_Type::ThyraOp_Type ThyraOp_Type;
60 typedef Thyra::BlockedLinearOpBase<SC> ThyraBlockOp_Type;
62 typedef typename NonLinearProblem_Type::TpetraOp_Type TpetraOp_Type;
67 NavierStokes(
const DomainConstPtr_Type &domainVelocity, std::string FETypeVelocity,
const DomainConstPtr_Type &domainPressure, std::string FETypePressure, ParameterListPtr_Type parameterList );
72 virtual void assemble( std::string type =
"" )
const;
74 void assembleConstantMatrices()
const;
76 void assembleDivAndStab()
const;
78 void reAssemble( std::string type )
const;
80 virtual void reAssemble( BlockMultiVectorPtr_Type previousSolution )
const{};
82 void reAssembleFSI(std::string type, MultiVectorPtr_Type u_minus_w, MatrixPtr_Type P)
const;
84 virtual void reAssemble(MatrixPtr_Type& massmatrix, std::string type )
const;
86 virtual void reAssembleExtrapolation(BlockMultiVectorPtrArray_Type previousSolutions);
90 void calculateNonLinResidualVecWithMeshVelo(std::string type,
double time, MultiVectorPtr_Type u_minus_w, MatrixPtr_Type P)
const;
93 virtual void getValuesOfInterest( vec_dbl_Type& values ){};
95 virtual void computeValuesOfInterestAndExport() {};
100 mutable MatrixPtr_Type A_;
101 vec_int_ptr_Type pressureIDsLoc;
102 MultiVectorPtr_Type u_rep_;
104 mutable bool stokesTekoPrecUsed_;
109 Teuchos::RCP< Thyra::LinearOpBase<SC> > create_W_op()
const;
110 Teuchos::RCP< Thyra::LinearOpBase<SC> > create_W_op_Monolithic()
const;
112 Teuchos::RCP< Thyra::LinearOpBase<SC> > create_W_op_Block()
const;
114 Teuchos::RCP<Thyra::PreconditionerBase<SC> > create_W_prec()
const;
118 virtual void evalModelImpl(
119 const ::Thyra::ModelEvaluatorBase::InArgs<SC> &inArgs,
120 const ::Thyra::ModelEvaluatorBase::OutArgs<SC> &outArgs
123 void evalModelImplMonolithic(const ::Thyra::ModelEvaluatorBase::InArgs<SC> &inArgs,
124 const ::Thyra::ModelEvaluatorBase::OutArgs<SC> &outArgs)
const;
127 void evalModelImplBlock(const ::Thyra::ModelEvaluatorBase::InArgs<SC> &inArgs,
128 const ::Thyra::ModelEvaluatorBase::OutArgs<SC> &outArgs)
const;