Community
cancel
Showing results for 
Search instead for 
Did you mean: 
greiner08
Beginner
103 Views

PARDISO and Nonlinear Systems

Hi,

I have been experimenting with the PARDISO solver, solving a system of linear equations

Ax=b

The example file 'pardiso_unsym_c.c' contains the variables

double *a : corresponds to the matrix A in the equation above
double *b : corresponds to the vector b in the equation above
double *x: corresponds to the vector x in the equation above

It has proven to be very fast for my purposes. I've also noticed a nonlinear example case 'pardiso_nonlinear.c' which contains an "Example of solving nonlinear problem using PARDISO and Sparse BLAS". Is there an expression of the specific nonlinear problem being tackled in the example? I would like to adapt the example to solve a system of semilinear equations I have (Ax=b, where b is a function of x). But I am unsure of what the variables pertain to. Specifically, the variables

double *a
double *f
double *u

Any help/documentation would be appreciated.

0 Kudos
2 Replies
mecej4
Black Belt
103 Views

I remember seeing a similar example in the MKL Cookbook, see https://software.intel.com/en-us/forums/intel-math-kernel-library/topic/557295 . If, indeed, the problem is the same as the one described in https://software.intel.com/en-us/node/507039 (please check first), it is notable that (i) the grid used is very coarse, (ii) the nonlinearity is removable (by use of the Kirchhoff transformation), and (iii) the finite-difference equations can be reduced to four unknowns, and can be solved with pencil and paper easily. The code should be taken to be for illustration only.

greiner08
Beginner
103 Views

Hi mecej4,

Thanks for the reply. It was a great help. I now understand the example, which is a procedure for a system A(u)u = g

- Set u to initial value u0.

- Calculate residual r = A(u)u - g.

- Do while ||r|| < tolerance:

    - Solve system A(u)w = g for w.

    - Set u = w.

    - Calculate residual r = A(u)u - g

(the above is in the documentation you linked to). I believe I can adapt this procedure for my semilinear case Au = g(u) I.e.

- Set u to initial value u0.

- Calculate residual r = Au - g(u).

- Do while ||r|| < tolerance:

    - Solve system Aw = g(u) for w.

    - Set u = w.

    - Calculate residual r = Au - g(u)

Thanks again

Reply