[petsc-users] Solving Ill Conditioned Problems

Anton Popov popov at uni-mainz.de
Fri Oct 19 11:02:57 CDT 2012


Of, course you have a more sophisticated case, but if you just put the 
orders of magnitude of your matrix blocks
into a toy two-by-two matrix, i.e. (in matlab notation)
A = [1e9, 1; 1, 1e-9]
then it's immediately visible that A is singular (det(A) is zero)
Symmetric scaling, that Matt suggested, just makes it more obvious, 
after scaling the matrix A will be:
A = [1, 1; 1, 1] - clearly the rows are linearly dependent.
Scaling may help you, but of course, this is not an always working solution

Anton

On 10/18/12 8:38 PM, Nachiket Gokhale wrote:
> On Thu, Oct 18, 2012 at 2:28 PM, Matthew Knepley <knepley at gmail.com> wrote:
>> On Thu, Oct 18, 2012 at 11:07 AM, Nachiket Gokhale <gokhalen at gmail.com>
>> wrote:
>>> Hi,
>>>
>>> I am solving a Piezoelectric problem using Petsc. The structure is
>>>
>>> [ K_uu        K_uv ]
>>> [K_uv ^T   -K_v,v ]
>>>
>>> More details about the formulation:  http://tinyurl.com/9hlbp4u
>>>
>>> K_uu  has elements O(1E9)  because the stiffnesses are in GPa,
>>> K_uv   has elements O(1) because piezoelectric coefficients are of that
>>> order
>>> K_v,v  has  elements O(1E-9) because the dielectric constants are of
>>> that order.
>>>
>>> I am using Petsc, with pc_type LU and MUMPS for the factorization,
>>> -ksp_type gmres. I am not sure if my solution is converging. A typical
>>> solve seems to be doing this:
>>>
>>> 28 KSP preconditioned resid norm 5.642364260456e-06 true resid norm
>>> 1.228976487745e-03 ||r(i)||/||b|| 3.317409023627e-14
>>>   29 KSP preconditioned resid norm 5.540718271043e-06 true resid norm
>>> 1.228453548651e-03 ||r(i)||/||b|| 3.315997440178e-14
>>>   30 KSP preconditioned resid norm 1.973052106578e-03 true resid norm
>>> 1.220399172500e-03 ||r(i)||/||b|| 3.294256047735e-14
>>>   31 KSP preconditioned resid norm 1.155762663956e-17 true resid norm
>>> 2.447631111938e-04 ||r(i)||/||b|| 6.606955965570e-15
>>>
>>> Is there a right way to solve this set of equations? Is PCFieldSplit
>>> the recommended way?
>>
>> First, you should really non-dimensionalize. You can see what this would
>> give
>> you by symmetrically scaling your problem with [ 3e4 3e-4 ], namely
>> everything
>> will be O(1).
>>
>> Second, you might get something out of using FieldSplit, but its tough to
>> tell
>> without knowing more about the operators.
>>
>>     Matt
>>
>>> Thanks,
>>>
>>> -Nachiket
> Oh, right, thanks. I wasn't even thinking of it that way. I'll scale
> the variables and I'll give it a try.
>
> Cheers,
>
> -Nachiket
>
>
>
>>
>>
>> --
>> What most experimenters take for granted before they begin their experiments
>> is infinitely more interesting than any results to which their experiments
>> lead.
>> -- Norbert Wiener



More information about the petsc-users mailing list