[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

solvers and tasks



Hello, everybody!

I am A.Chirkov. I have been occupied for about 20 years
with the creation of methods and programms for solving sparse 
systems of high order algebraic equations. 
I work out direct and iterative solvers of systems of linear 
and non-linear equations and iterative methods for solving 
eigenvalues problems. 
I consider symmetric, non-singular, sparse matrices (can be not band).
Applications which reduce to sparse matrices are well-known.
One of them is the finite element method (FEM).
I have the experience of solving such tasks. The methods I propose
solve large systems of equations (10000-100000) quite quickly, even on PC. 
Programm codes use FORTRAN-90 & WIN32 API.
I am interested in solving such tasks.

For preparing of input data NASA Matrix Format is used:

*****************************************************
* MATRIX FORMAT *
*****************************************************

SOLVE: [A] {x} = {y}, where

[A] = MATRIX (i.e. Stiffness) and
{y} = RIGHT HAND SIDE (i.e. load)
{x} = SOLUTION 


6 INPUT FILES :

1. "INFO" : NUMBER OF EQUATIONS AND NUMBER OF RIGHT HAND SIDES
2. "PTRS" : NUMBER OF NON-DIAGONAL COEFFICIENTS IN EACH ROW
3. "INDXS" : COLUMN LOCATION OF EACH COEFFICIENT
4. "COEFS" : COEFFICIENTS IN ROW FORMAT
5. "DIAG" : DIAGONAL TERMS
6. "RHS" : RIGHT HAND SIDE

1 OUTPUT FILE :

1. "RES" : SOLUTION

!----------------------------------------------------------------------------

EXAMPLE FOR INPUT DATA:


1 2 3 4 5 6

1 | 100 1 2 5 | | X1 | | 201 |
2 | 200 6 7 9 | | X2 | | 202 |
3 | 300 10 11 12 | | X3 | | 203 |
A = 4 | 400 13 14 | | X4 | = | 204 |
5 | 500 15 | | X5 | | 205 |
6 | 600 | | X6 | | 206 |



NUMBER OF EQUATIONS = 6

NUMBER OF RIGHT HAND SIDE = 1


1. "INFO" = JF, NEQ, NRHS = { 0, 6, 1 }

2. "PTRS" = { 3, 3, 3, 2, 1, 0 }

3. "INDXS" = { 2, 3, 6, 3, 4, 6, 4, 5, 6, 5, 6, 6 }

4. "COEFS" = { 1, 2, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15 }

5. "DIAG" = { 100, 200, 300, 400, 500, 600 }

6. "RHS" = { 201, 202, 203, 204, 205, 206 }


Note: First "INFO" parameter is 0 by default, else:

JF = DOF - degree of freedom in node. 

!****************************************************************************
CREATE FILES :
!****************************************************************************

1. ASCII FORMAT : All files are in ASCII FORMAT

!---------------------------------------------------------------------------

2. INPUT BINARY FORMAT ( preferably ) :


EXAMPLE OF FORTRAN PROGRAM FRAGMENT FOR CREATING INPUT DATA:


Let as : NEQ - NUMBER OF EQUATIONS; 
IRNP - NUMBER OF COEFFICIENTS;
NRHS - NUMBER OF RIGHT HAND SIDE


1. "INFO" : JF, NEQ, NRHS

2. "PTRS" : JM ( NEQ ) 

3. "INDXS" : MS ( IRNP )

4. "COEFS" : A ( IRNP ) - MATRIX

5. "DIAG" : DIAG ( NEQ ) - DIAGONAL TERMS

6. "RHS" : RHS ( NEQ, NRHS ) - RIGHT HANDS


!****************************************************************************

INTEGER ( KIND = 4 ) :: JF, NEQ, NRHS, IRNP

INTEGER ( KIND = 4 ) :: JM ( NEQ ), MS ( IRNP )

DOUBLE PRECISION :: A ( IRNP ), DIAG ( NEQ ), RHS ( NEQ, NRHS )



OPEN (1, FILE = "INFO", ACTION = "WRITE", FORM = "BINARY", &
ACCESS = "SEQUENTIAL", STATUS = "UNKNOWN" )

WRITE (1, ERR=1 ) JF, NEQ, NRHS

CLOSE (1, STATUS = "KEEP" )



OPEN (1, FILE = "PTRS", ACTION = "WRITE", FORM = "BINARY", &
ACCESS = "SEQUENTIAL", STATUS = "UNKNOWN" )

WRITE (1, ERR=1 ) JM

CLOSE (1, STATUS = "KEEP" )



OPEN (1, FILE = "INDXS", ACTION = "WRITE", FORM = "BINARY", &
ACCESS = "SEQUENTIAL", STATUS = "UNKNOWN" )

WRITE (1, ERR=1 ) MS

CLOSE (1, STATUS = "KEEP" )



OPEN (1, FILE = "COEFS", ACTION = "WRITE", FORM = "BINARY", &
ACCESS = "SEQUENTIAL", STATUS = "UNKNOWN" )

WRITE (1, ERR=1 ) A

CLOSE (1, STATUS = "KEEP" )



OPEN (1, FILE = "DIAG", ACTION = "WRITE", FORM = "BINARY", &
ACCESS = "SEQUENTIAL", STATUS = "UNKNOWN" )

WRITE (1, ERR=1 ) DIAG

CLOSE (1, STATUS = "KEEP" )



OPEN (1, FILE = "RHS", RECL = 8 * NEQ, ACTION = "WRITE", &
ACCESS = "DIRECT", STATUS = "UNKNOWN" )

DO IRHS = 1, NRHS

WRITE (1, REC = IRHS, ERR=6 ) RHS ( :, IRHS )

END DO

CLOSE (1, STATUS = "KEEP" )


!****************************************************************************

OUTPUT BINARY FORMAT : "RES" - SOLUTION

EXAMPLE FORTRAN PROGRAM FOR READING OUTPUT DATA:


!----------------------------------------------------------------------------

DOUBLE PRECISION :: X ( NEQ, NRHS )

OPEN (1, FILE = "RES", RECL = 8 * NEQ, ACTION = "READ", &
ACCESS = "DIRECT", STATUS = "OLD" )

DO IRHS = 1, NRHS

READ (1, REC = IRHS, ERR=6 ) X ( :, IRHS )

END DO

CLOSE (1, STATUS = "KEEP" )

------------------------------------------------------------------------------

Regards, Chirkov laboratory.

MAILTO: CHIRKOV@xxxxxxxxxxxxxxxx