[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