FSIOperator::solidBchandlerPtr_Type BCh_monolithicSolid (FSIOperator& _oper) { if (! _oper.isSolid() ) { return FSIOperator::solidBchandlerPtr_Type(); } // Boundary conditions for the solid displacement debugStream ( 10000 ) << "Boundary condition for the solid\n"; FSIOperator::solidBchandlerPtr_Type BCh_solid ( new FSIOperator::solidBchandler_Type ); BCFunctionBase bcf (fZero); BCh_solid->addBC ("Top", RING, Essential, Full, bcf, 3); BCh_solid->addBC ("Base", RING2, Essential, Full, bcf, 3); aortaVelIn::S_timestep = _oper.dataFluid()->dataTime()->timeStep(); BCFunctionBase hyd (fZero); BCFunctionBase young (E); //robin condition on the outer wall _oper.setRobinOuterWall (hyd, young); BCh_solid->addBC ("OuterWall", OUTERWALL, Robin, Normal, _oper.bcfRobinOuterWall() ); return BCh_solid; }
FSIOperator::solidBchandlerPtr_Type BCh_solid (FSIOperator& _oper) { if (! _oper.isSolid() ) { return FSIOperator::solidBchandlerPtr_Type(); } // Boundary conditions for the solid displacement debugStream ( 10000 ) << "Boundary condition for the solid\n"; FSIOperator::solidBchandlerPtr_Type BCh_solid ( new FSIOperator::solidBchandler_Type ); BCFunctionBase bcf (fZero); BCh_solid->addBC ("Top", 3, Essential, Full, bcf, 3); BCh_solid->addBC ("Base", 2, Essential, Full, bcf, 3); //BCh_solid->addBC("EdgesIn", 20, EssentialVertices, Full, bcf, 3); std::vector<ID> zComp (1); zComp[0] = 3; // debugStream(10000) << "SP harmonic extension\n"; if (_oper.data().method() == "steklovPoincare") { // steklovPoincare *SPOper = dynamic_cast<steklovPoincare *>(&_oper); // SPOper->setSolidInterfaceDisp((LifeV::Vector&) _oper.displacement()); // BCh_solid->addBC("Interface", 1, Essential, Full, // *SPOper->bcvSolidInterfaceDisp(), 3); } else if (_oper.data().method() == "exactJacobian") { FSIExactJacobian* EJOper = dynamic_cast<FSIExactJacobian*> (&_oper); EJOper->setFluidLoadToStructure (_oper.sigmaSolidRepeated() ); BCh_solid->addBC ("Interface", SOLIDINTERFACE, Natural, Full, *EJOper->bcvFluidLoadToStructure(), 3); } else if (_oper.data().method() == "fixedPoint") { FSIFixedPoint* FPOper = dynamic_cast<FSIFixedPoint*> (&_oper); FPOper->setFluidLoadToStructure (_oper.sigmaSolidRepeated() ); BCh_solid->addBC ("Interface", FLUIDINTERFACE, Natural, Full, *FPOper->bcvFluidLoadToStructure(), 3); } return BCh_solid; }
FSIOperator::solidBchandlerPtr_Type BCh_monolithicSolid (FSIOperator& _oper) { if (! _oper.isSolid() ) { return FSIOperator::solidBchandlerPtr_Type(); } // Boundary conditions for the solid displacement debugStream ( 10000 ) << "Boundary condition for the solid\n"; FSIOperator::solidBchandlerPtr_Type BCh_solid ( new FSIOperator::solidBchandler_Type ); BCFunctionBase bcf (fZero); //Inlets & Outlets BCh_solid->addBC ("BORDERS", INLETWALL, Essential, Full, bcf, 3); BCh_solid->addBC ("BORDERS-RIN", INLETWALL_INTRING, Essential, Full, bcf, 3); BCh_solid->addBC ("BORDERS-ROUT", INLETWALL_OUTRING, Essential, Full, bcf, 3); BCh_solid->addBC ("BORDERS", OUTLETWALL, Essential, Full, bcf, 3); BCh_solid->addBC ("BORDERS-rin", OUTLETWALL_INTRING, Essential, Full, bcf, 3); BCh_solid->addBC ("BORDERS-rout", OUTLETWALL_OUTRING, Essential, Full, bcf, 3); //aortaVelIn::S_timestep = _oper.dataFluid()->dataTime()->timeStep(); //Robin BC BCFunctionBase hyd (fZero); BCFunctionBase young (E); //robin condition on the outer wall _oper.setRobinOuterWall (hyd, young); //BCh_solid->addBC("OuterWall", OUTERWALL, Robin, Normal, _oper.bcfRobinOuterWall()); //First try: Homogeneous Neumann BCh_solid->addBC ("OuterWall", OUTERWALL, Natural, Normal, bcf); return BCh_solid; }