Exemple #1
0
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;
}
Exemple #2
0
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;
}