FSIOperator::fluidBchandlerPtr_Type BCh_monolithicFluid (FSIOperator& _oper, bool const& isOpen = true) { // Boundary conditions for the fluid velocity debugStream ( 10000 ) << "Boundary condition for the fluid\n"; if (! _oper.isFluid() ) { return FSIOperator::fluidBchandlerPtr_Type(); } FSIOperator::fluidBchandlerPtr_Type BCh_fluid ( new FSIOperator::fluidBchandler_Type ); BCFunctionBase bcf (fZero); BCFunctionBase in_flow (/*uInterpolated*/u2normal/*aortaPhisPress*/); // BCFunctionBase out_flow (fZero); //BCFunctionBase in_flow (LumpedHeart::outPressure); BCFunctionBase out_press (FlowConditions::outPressure0); BCFunctionBase bcfw0 (w0); // if(!isOpen) // BCh_fluid->addBC("InFlow" , INLET, Natural, Full, bcf,3); BCh_fluid->addBC ("OutFlow", OUTLET, Natural, Normal, out_press); //BCh_fluid->addBC("OutFlow", INOUTEDGE, EssentialEdges, Full, bcf,3); return BCh_fluid; }
FSIOperator::fluidBchandlerPtr_Type BCh_monolithicFluid (FSIOperator& _oper, bool const& /*isOpen=true*/) { // Boundary conditions for the fluid velocity debugStream ( 10000 ) << "Boundary condition for the fluid\n"; if (! _oper.isFluid() ) { return FSIOperator::fluidBchandlerPtr_Type(); } FSIOperator::fluidBchandlerPtr_Type BCh_fluid ( new FSIOperator::fluidBchandler_Type ); BCFunctionBase bcf (fZero); BCFunctionBase in_flow (uInterpolated); // BCFunctionBase out_flow (fZero); BCFunctionBase out_press3 (FlowConditions::outPressure0); BCFunctionBase InletVect (aneurismFluxInVectorial); //BCFunctionBase bcfw0 (w0); //Inlets BCh_fluid->addBC ("InFlow" , INLET, EssentialVertices, Full, InletVect, 3); //Outlets //Absorbing BC seemed not to work //Absorbing BC on outlet 2and3 caused instabilities BCh_fluid->addBC ("out3", OUTLET, Natural, Normal, out_press3); //BCh_fluid->addBC("out3", OUTLET, Natural, Normal, bcf); return BCh_fluid; }
FSIOperator::fluidBchandlerPtr_Type BCh_fluid (FSIOperator& _oper) { // Boundary conditions for the fluid velocity debugStream ( 10000 ) << "Boundary condition for the fluid\n"; if (! _oper.isFluid() ) { return FSIOperator::fluidBchandlerPtr_Type(); } FSIOperator::fluidBchandlerPtr_Type BCh_fluid ( new FSIOperator::fluidBchandler_Type ); BCFunctionBase bcf (fZero); BCFunctionBase in_flow (u2); // BCFunctionBase in_flow_flux (PhysFlux); BCFunctionBase out_flow (fZero); #ifdef FLUX BCh_fluid->addBC ("InFlow" , 2, Flux, Normal, in_flow, 3); #else BCh_fluid->addBC ("InFlow" , 2, Natural, Full, in_flow, 3); #endif BCh_fluid->addBC ("OutFlow", 3, Natural, Full, out_flow, 3); //BCh_fluid->addBC("EdgesIn", 20, EssentialVertices, Full, bcf, 3); // BCh_fluid->showMe(); _oper.setStructureToFluid (_oper.veloFluidMesh() ); // _oper.setHarmonicExtensionVelToFluid(_oper.veloFluidMesh()); if (_oper.data().algorithm() == "RobinNeumann") { // _oper.setAlphafbcf(alpha); // if alpha is bcFunction define in ud_function.cpp // assert(false); _oper.setSolidLoadToStructure ( _oper.minusSigmaFluidRepeated() ); _oper.setStructureToFluidParameters(); BCh_fluid->addBC ("Interface", FLUIDINTERFACE, Robin, Full, *_oper.bcvStructureToFluid(), 3); BCh_fluid->addBC ("Interface", FLUIDINTERFACE, Natural, Full, *_oper.bcvSolidLoadToStructure(), 3); } else { BCh_fluid->addBC ("Interface", FLUIDINTERFACE, Essential, Full, *_oper.bcvStructureToFluid(), 3); } return BCh_fluid; }
FSIOperator::fluidBchandlerPtr_Type BCh_fluidLin (FSIOperator& _oper) { if (! _oper.isFluid() ) { return FSIOperator::fluidBchandlerPtr_Type(); } // Boundary conditions for the fluid velocity debugStream ( 10000 ) << "Boundary condition for the linearized fluid\n"; FSIOperator::fluidBchandlerPtr_Type BCh_fluidLin ( new FSIOperator::fluidBchandler_Type ); BCFunctionBase bcf (fZero); BCFunctionBase in_flow (u2); #ifdef FLUX BCh_fluidLin->addBC ("InFlow", 2, Flux, Normal, bcf, 3); #else //BCh_fluidLin->addBC("InFlow", 2, Natural, Full, bcf, 3); #endif BCh_fluidLin->addBC ("outFlow", 3, Natural, Full, bcf, 3); //BCh_fluidLin->addBC("Edges", 20, EssentialVertices, Full, bcf, 3);//this condition must be equal to the one //BCh_fluidLin->addBC("ainterface", 1, Essential, Full, bcf, 3); if (_oper.data().method() == "steklovPoincare") { // steklovPoincare *SPOper = dynamic_cast<steklovPoincare *>(&_oper); // SPOper->setDerHarmonicExtensionVelToFluid(_oper.dw()); // BCh_fluidLin->addBC("Wall" , 1, Essential , Full, // *SPOper->bcvDerHarmonicExtensionVelToFluid(), 3); } if (_oper.data().method() == "exactJacobian") { FSIExactJacobian* EJOper = dynamic_cast<FSIExactJacobian*> (&_oper); EJOper->setDerHarmonicExtensionVelToFluid (_oper.derVeloFluidMesh() ); BCh_fluidLin->addBC ("Interface", FLUIDINTERFACE, Essential , Full, *_oper.bcvDerHarmonicExtensionVelToFluid(), 3); } return BCh_fluidLin; }
FSIOperator::fluidBchandlerPtr_Type BCh_fluidInv (FSIOperator& _oper) { if (! _oper.isFluid() ) { return FSIOperator::fluidBchandlerPtr_Type(); } // Boundary conditions for the fluid velocity debugStream ( 10000 ) << "Boundary condition for the inverse fluid\n"; FSIOperator::fluidBchandlerPtr_Type BCh_fluidInv ( new FSIOperator::fluidBchandler_Type ); BCFunctionBase bcf (fZero); BCFunctionBase in_flow (u2); BCh_fluidInv->addBC ("InFlow", 2, Natural, Full, in_flow, 3); BCh_fluidInv->addBC ("EdgesIn", 20, EssentialVertices, Full, bcf, 3); return BCh_fluidInv; }