[petsc-users] Solving Ill Conditioned Problems
Barry Smith
bsmith at mcs.anl.gov
Fri Oct 19 14:04:00 CDT 2012
On Oct 19, 2012, at 11:02 AM, Anton Popov <popov at uni-mainz.de> wrote:
> 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
You need to do the scaling BEFORE you construct the matrix (or ideally before you do computing). Yes, forming the matrix and then scaling it is hopeless
Barry
>
> 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