Failed during Eigen linear solve

Hello all,

I am very new to using the OGS software and have met a roadblock in my attempts to run my first project file. The software consistently fails to converge at “Eigen linear solve”.

I have consulted the OGS docs concerning divergence issues which has led me to increase the number of time steps, decrease the time step size and increase the error tolerance values to try and make the solver less strict. Unfortunately, none of this helped with convergence. I am going to try and attach the .prj file in the first reply by copying the text as it seems that new OGS discourse users do not have permission to attach files directly.

Any guidance on this matter would be very much appreciated.

Thank you in advance.

Here is the project file in question:

Summary <?xml version='1.0' encoding='ISO-8859-1'?> mesh_cube1-StructuredMesh.vtu cube_bottom1-full.vtu cube_top1-full.vtu cube_left1-full.vtu cube_right1-full.vtu
<processes>
    <process>
        <name>HM_NodalSourceTem</name>
        <type>HYDRO_MECHANICS</type>
        <integration_order>2</integration_order>
        <dimension>3</dimension>
        <constitutive_relation>
            <type>LinearElasticIsotropic</type>
            <youngs_modulus>E</youngs_modulus>
            <poissons_ratio>nu</poissons_ratio>
        </constitutive_relation>
        <process_variables>
            <displacement>displacement</displacement>
            <pressure>pressure</pressure>
        </process_variables>
        <specific_body_force>0 0 0</specific_body_force>
    </process>
</processes>

<time_loop>
    <processes>
        <process ref="HM_NodalSourceTem">
            <nonlinear_solver>basic_newton</nonlinear_solver>
            <convergence_criterion>
                <type>PerComponentDeltaX</type>
                <norm_type>NORM2</norm_type>
                <reltols>
					1e-9 1e-9 1e-9
					1e-9
				</reltols>
            </convergence_criterion>
            <time_discretization>
                <type>BackwardEuler</type>
            </time_discretization>
            <time_stepping>
                <type>FixedTimeStepping</type>
                <t_initial>0</t_initial>
                <t_end>10</t_end>
                <timesteps>
                    <pair>
                        <repeat>10000</repeat>
                        <delta_t>0.001</delta_t>
                    </pair>
                </timesteps>
            </time_stepping>
        </process>
    </processes>
    <output>
        <type>VTK</type>
        <prefix>HM_NodalSourceTem</prefix>
        <timesteps>
            <pair>
                <repeat>10</repeat>
                <each_steps>1000</each_steps>
            </pair>
        </timesteps>
        <variables>
            <variable>displacement</variable>
            <variable>pressure</variable>
        </variables>
    </output>
</time_loop>

<media>
    <medium id="0">
        <phases>
            <phase>
                <type>AqueousLiquid</type>
                <properties>
                    <property>
                        <name>viscosity</name>
                        <type>Constant</type>
                        <value>0.001</value>
                    </property>
                    <property>
                        <name>density</name>
                        <type>Constant</type>
                        <value>1000</value>
                    </property>
                </properties>
            </phase>
            <phase>
                <type>Solid</type>
                <properties>
                    <property>
                        <name>density</name>
                        <type>Constant</type>
                        <value>2500</value>
                    </property>
                </properties>
            </phase>
        </phases>
        <properties>
            <property>
                <name>porosity</name>
                <type>Constant</type>
                <value>0.1</value>
            </property>
            <property>
                <name>biot_coefficient</name>
                <type>Constant</type>
                <value>0.9</value>
            </property>
            <property>
                <name>reference_temperature</name>
                <type>Constant</type>
                <value>293.15</value>
            </property>
            <property>
                <name>permeability</name>
                <type>Constant</type>
                <value>0.00000000000001</value>
            </property>
        </properties>
    </medium>
</media>

<parameters>
    <parameter>
        <name>E</name>
        <type>Constant</type>
        <value>2.5e9</value>
    </parameter>
    <parameter>
        <name>nu</name>
        <type>Constant</type>
        <value>0.27</value>
    </parameter>
    <parameter>
        <name>displacement0</name>
        <type>Constant</type>
        <values>0 0 0</values>
    </parameter>
    <parameter>
        <name>displacement0_1d</name>
        <type>Constant</type>
        <value>0</value>
    </parameter>
    <parameter>
        <name>pressure0</name>
        <type>Constant</type>
        <value>6000</value>
    </parameter>
    <parameter>
        <name>nodal_flux</name>
        <type>Constant</type>
        <value>0.0001</value>
    </parameter>
</parameters>

<process_variables>
    <process_variable>
        <name>displacement</name>
        <components>3</components>
        <order>2</order>
        <initial_condition>displacement0</initial_condition>
		<!-- -->
        <boundary_conditions>
            <boundary_condition>
                <mesh>cube_right1-full</mesh>
                <type>Dirichlet</type>
                <component>1</component>
                <parameter>displacement0_1d</parameter> 
            </boundary_condition>
            <boundary_condition>
                <mesh>cube_bottom1-full</mesh>
                <type>Dirichlet</type>
                <component>1</component>
                <parameter>displacement0_1d</parameter> 
            </boundary_condition>
            <boundary_condition>
                <mesh>cube_top1-full</mesh>
                <type>Dirichlet</type>
                <component>1</component>
				<parameter>displacement0_1d</parameter> 
            </boundary_condition>
        </boundary_conditions>
		<!-- -->
    </process_variable>
    <process_variable>
        <name>pressure</name>
        <components>1</components>
        <order>1</order>
        <initial_condition>pressure0</initial_condition>
		<!-- -->
        <source_terms>
            <source_term>
                <mesh>cube_left1-full</mesh>
                <type>Nodal</type>                    
                <parameter>nodal_flux</parameter>
            </source_term>
        </source_terms>
		<!-- -->
    </process_variable>
</process_variables>

<nonlinear_solvers>
    <nonlinear_solver>
        <name>basic_newton</name>
        <type>Newton</type>
        <max_iter>50</max_iter>
        <linear_solver>general_linear_solver</linear_solver>
    </nonlinear_solver>
</nonlinear_solvers>

<linear_solvers>
    <linear_solver>
        <name>general_linear_solver</name>
        <lis>-i bicgstab -p ilu -tol 1e-12 -maxiter 10000</lis>
        <eigen>
            <solver_type>BiCGSTAB</solver_type>
            <precon_type>ILUT</precon_type>
            <max_iteration_step>10000</max_iteration_step>
            <error_tolerance>1e-9</error_tolerance>
        </eigen>
    </linear_solver>
</linear_solvers>

Hi!
first of all, a residual of $1e-6$ fails the criterion but is not divergent in the sense that it gives INF, i.e.
this could mean that the issue is ‘just’ a time stepping issue.
Concluding from the parameters given in the project file, I assume you use the SI system. Therefore, my first hint:

  • time discretization \Delta t=1e-3 s sounds very low. Typical time steps of problems of this kind are on the order of days. (Best values from a numerical standpoint also depend on the spatial discretization as well). You should get at least the first time step running. If the problem occurs in later time steps, an IterationNumberBased time stepping scheme might be better where you give a minimal and a maximal time step, depending on the nature of your problem.
    Other things to look at:
  • Physics: should be meaningful, if you use source terms, check the solution without first, altough your problem looks relatively simple, simplifying BCs might also help to get a clue what is wrong. E.g. I see that you fix always the second component for the displacement, although for different faces of the cube. Not sure if it was intended, but other components are not fixed anywhere, this could affect the convergence negatively as well.
    As the first iteration worked, you could add <output_iteration_results>true</output_iteration_results> to <output> to see if the physics is doing anything strange.
  • Integration order: might be too low
  • Solver: 1st: You could switch on <scaling>true</scaling>in your case, 2nd: you could try to increase <max_iteration_step>, many more iterations also means it takes much longer… . 3rd: you could try DIAGONAL preconditioner. 4th: use a direct solver: SparseLU for very small problems, PardisoLU for large problems. For Pardiso you need to compile OGS with MKL. However, I would recommend using PardisoLU either way for most problems up to ~1e6 DOF as it is able to solve the widest problem class and is most performant in many cases.