Dear Alex,
i try this proposition, so i have the code:
 void boundaryTypes(BoundaryTypes &bcTypes, const Vertex &vertex) const
    {
        const GlobalPosition &globalPos = vertex.geometry().center();
        if (globalPos[0] > 580-eps_ && globalPos[1] > 580-eps_)   //
           bcTypes.setAllDirichlet();
        if (globalPos[0] < 20+eps_ && globalPos[1] < 20+eps_)
          {
           bcTypes.setDirichlet(Indices::snIdx);
                 bcTypes.setNeumann(Indices::contiWEqIdx);

           }

        else // neuman for the remaining boundaries
           bcTypes.setAllNeumann();

    }

    //! Evaluates the Dirichlet boundary conditions for a finite volume
    //! on the grid boundary. Here, the 'values' parameter stores
    //! primary variables.
    void dirichletAtPos(PrimaryVariables &values, const GlobalPosition&
globalPos) const
    {
      if (globalPos[0] > 580-eps_ && globalPos[1] > 580-eps_ )
       {
        values[Indices::pwIdx] = 1.5e7; // 1 bar = e5 Pa
        values[Indices::snIdx] = 1.0; // 0 % oil saturation on left
boundary
       }
     else if (globalPos[0] < 20+eps_ && globalPos[1] < 20+eps_)
      {
       values[Indices::snIdx] = 0.0;
      }

    }

    //! Evaluates the boundary conditions for a Neumann boundary
    //! segment. Here, the 'values' parameter stores the mass flux in
    //! [kg/(m^2 * s)] in normal direction of each phase. Negative
    //! values mean influx.
    void neumann(PrimaryVariables &values,
                 const Element &element,
                 const FVElementGeometry &fvGeometry,
                 const Intersection &intersection,
                 int scvIdx,
                 int boundaryFaceIdx) const
    {
        const GlobalPosition &globalPos =
            fvGeometry.boundaryFace[boundaryFaceIdx].ipGlobal;

       if (globalPos[0] < 20+eps_ && globalPos[1] < 20+eps_ )
       {
        values[Indices::contiWEqIdx] = -1.e-8; // 1 bar = e5 Pa

       }

        else
        {
            values[Indices::contiWEqIdx] = 0.0;
            values[Indices::contiNEqIdx] = 0.0;
         }


    }

    //! Evaluates the initial value for a control volume. For this
    //! method, the 'values' parameter stores primary variables.
    void initial(PrimaryVariables &values,
                 const Element &element,
                 const FVElementGeometry &fvGeometry,
                 int scvIdx) const
    {
        const GlobalPosition& globalPos =
fvGeometry.subContVol[scvIdx].global;
        if (globalPos[0] < 20+eps_ && globalPos[1] < 20+eps_ )
       {
        values[Indices::pwIdx] = 2.e7; // 200 kPa = 2 bar
        values[Indices::snIdx] = 0.0;
       }
        else
        {
        values[Indices::pwIdx] = 2.e7; // 200 kPa = 2 bar
        values[Indices::snIdx] = 1.0;
       }
    }

    //! Evaluates the source term for all phases within a given
    //! sub-control-volume. In this case, the 'values' parameter
    //! stores the rate mass generated or annihilated per volume unit
    //! in [kg / (m^3 * s)]. Positive values mean that mass is created.
    void source(PrimaryVariables &values,
                const Element &element,
                const FVElementGeometry &fvGeometry,
                int scvIdx) const
    {
        values[Indices::contiWEqIdx] = 0.0;
        values[Indices::contiNEqIdx]= 0.0;
    }

the method converge, but there is no simulation with paraview, i.e,.
that nothing
happens.

Beste regards.

2015-10-19 14:12 GMT+02:00 Alexander Kissinger <
[email protected]>:

> Dear Ait,
>
> please always answer to the mailing list, so that everyone can give input.
>
> Your boundary conditions seem correct.
> Have you tried with small initial time step sizes?
> You could also set your initial condition similar to your Dirichlet
> condition for your Sn = 0 boundary so that you have a better initial guess.
>
> Best regards
> Alex
>
>
>
> On 10/19/2015 11:37 AM, Ait Mahiout Latifa wrote:
>
>> Hi,
>> i try to write the bc and bi like this:
>> //! Specifies which kind of boundary condition should be used for
>>     //! which equation for a finite volume on the boundary.
>>     void boundaryTypes(BoundaryTypes &bcTypes, const Vertex &vertex) const
>>     {
>>         const GlobalPosition &globalPos = vertex.geometry().center();
>>         if (globalPos[0] > 580-eps_ && globalPos[1] > 580-eps_)   //
>>            bcTypes.setAllDirichlet();
>>         if (globalPos[0] < 20+eps_ && globalPos[1] < 20+eps_)
>>           {
>>            bcTypes.setDirichlet(Indices::snIdx);
>>                  bcTypes.setNeumann(Indices::contiWEqIdx);
>>
>>            }
>>
>>         else // neuman for the remaining boundaries
>>            bcTypes.setAllNeumann();
>>
>>     }
>>
>>     //! Evaluates the Dirichlet boundary conditions for a finite volume
>>     //! on the grid boundary. Here, the 'values' parameter stores
>>     //! primary variables.
>>     void dirichletAtPos(PrimaryVariables &values, const GlobalPosition&
>> globalPos) const
>>     {
>>       if (globalPos[0] > 580-eps_ && globalPos[1] > 580-eps_ )
>>        {
>>         values[Indices::pwIdx] = 1.5e7; // 1 bar = e5 Pa
>>         values[Indices::snIdx] = 1.0; // 0 % oil saturation on left
>> boundary
>>        }
>>      else if (globalPos[0] < 20+eps_ && globalPos[1] < 20+eps_)
>>       {
>>        values[Indices::snIdx] = 0.0;
>>       }
>>
>>     }
>>
>>     //! Evaluates the boundary conditions for a Neumann boundary
>>     //! segment. Here, the 'values' parameter stores the mass flux in
>>     //! [kg/(m^2 * s)] in normal direction of each phase. Negative
>>     //! values mean influx.
>>     void neumann(PrimaryVariables &values,
>>                  const Element &element,
>>                  const FVElementGeometry &fvGeometry,
>>                  const Intersection &intersection,
>>                  int scvIdx,
>>                  int boundaryFaceIdx) const
>>     {
>>         const GlobalPosition &globalPos =
>> fvGeometry.boundaryFace[boundaryFaceIdx].ipGlobal;
>>
>>        if (globalPos[0] < 20+eps_ && globalPos[1] < 20+eps_ )
>>        {
>>         values[Indices::contiWEqIdx] = 0*-1.e-6; // 1 bar = e5 Pa
>>
>>        }
>>
>>         else
>>         {
>>             values[Indices::contiWEqIdx] = 0.0;
>>             values[Indices::contiNEqIdx] = 0.0;
>>          }
>>
>>
>>     }
>>
>>     //! Evaluates the initial value for a control volume. For this
>>     //! method, the 'values' parameter stores primary variables.
>>     void initial(PrimaryVariables &values,
>>                  const Element &element,
>>                  const FVElementGeometry &fvGeometry,
>>                  int scvIdx) const
>>     {
>>         values[Indices::pwIdx] = 2.e7; // 200 kPa = 2 bar
>>         values[Indices::snIdx] = 1.0;
>>     }
>>
>>
>> and i tried the solutions you propose, but the problem don't converge.
>> What we can do?
>> Best regards
>>
>
>
> --
> Alexander Kissinger
> Institut für Wasser- und Umweltsystemmodellierung
> Lehrstuhl für Hydromechanik und Hydrosystemmodellierung
> Pfaffenwaldring 61
> D-70569 Stuttgart
>
> Telefon: +49 (0) 711 685-64729
> E-Mail:  [email protected]
>
>
_______________________________________________
Dumux mailing list
[email protected]
https://listserv.uni-stuttgart.de/mailman/listinfo/dumux

Reply via email to