I am studying th el2p test example to see if it is possible to use it without 
modifications to the geomechanics/el2p/model in order to validate the code with 
a well known published example of the Mandel problem (Sangnimnuan 2018). My 
question is whether the el2p model can be used without further modifications 
for these boundary conditions.

The code for the initialization has no problem whatsoever when modifying the 
fixed parameters (Young Modulus, Poisson ratio, porosity, permeability rock 
density).
But when I modify the boundary conditions from Dirichlet to Neumann to allow an 
external force to be applied on the top boundary and expansion on the left 
boundary, the Newton method does not converge on the first step.

IOW:
 
    void boundaryTypesAtPos(BoundaryTypes &values, const GlobalPosition& 
globalPos) const
    {
        values.setAllNeumann();

        // The solid displacement normal to the lateral boundaries is fixed.
        if(globalPos[0] < eps_ || globalPos[0] > this->bBoxMax()[0]-eps_)
        {
            values.setDirichlet(uxIdx);
            if(initializationRun_ == false)
            {
                values.setDirichlet(pressureIdx);
                values.setDirichlet(saturationIdx);
            }
        }
        // The solid displacement normal to the lateral boundaries is fixed.
        // Only for 3 d
        if (dim == 3) {
        if(globalPos[1] < eps_ || globalPos[1] > this->bBoxMax()[1]-eps_)
        {
            values.setDirichlet(uyIdx);
            if(initializationRun_ == false)
            {
                values.setDirichlet(pressureIdx);
                values.setDirichlet(saturationIdx);
            }
        }}

        // Lower boundary closed for brine and CO2 flux, uz is fixed.
        if(globalPos[dimWorld-1] < eps_)
        {
            if(dim == 2)
                values.setDirichlet(uyIdx);
            if(dim == 3)
                values.setDirichlet(uzIdx);
        }
#define SANGNIMNUAN
#ifdef SANGNIMNUAN
        // right side
        if(globalPos[0] > this->bBoxMax()[0]-eps_) {
            values.setNeumann(uxIdx);
            values.setNeumann(uyIdx);
        }       
        // top side
        if(globalPos[1] > this->bBoxMax()[1]-eps_){
            values.setNeumann(uxIdx);
            values.setNeumann(uyIdx);
        }
#endif

        // for the initialization run the pressure and saturation
        // values are only given at the top boundary.
        if(globalPos[dimWorld-1] > this->bBoxMax()[dimWorld-1]-eps_)
        {
            values.setDirichlet(pressureIdx);
            values.setDirichlet(saturationIdx);
        }
    }

    void neumannAtPos(PrimaryVariables &values, const GlobalPosition& 
globalPos) const
    {
        values = 0;
#ifdef SANGNIMNUAN
        // right side
        if(globalPos[0] > this->bBoxMax()[0]-eps_) {
            // no force
        }       
        // top side
        if(globalPos[1] > this->bBoxMax()[1]-eps_){
            // assuming area of 1 and load of 616 psi. P=F/A
            values[uyIdx] = 4.2472e+6; // Newtons
            // no force in ux

        }
#endif
        if(globalPos[1] < eps_ || globalPos[1] > this->bBoxMax()[1]-eps_){
            // assuming area of 1 and load of 616 psi. P=F/A
            //values[uyIdx] = 4.2472e+6; // Newtons
        }
    }

I am assuming that the el2p model, as is, will not suffice to run a simple 
Mandel problem without some deep modifications. Yes?

best regards,

Edscott





_______________________________________________
Dumux mailing list
Dumux@listserv.uni-stuttgart.de
https://listserv.uni-stuttgart.de/mailman/listinfo/dumux

Reply via email to