~ubuntu-branches/ubuntu/lucid/mumps/lucid

« back to all changes in this revision

Viewing changes to include/zmumps_struc.h

  • Committer: Bazaar Package Importer
  • Author(s): Adam C. Powell, IV
  • Date: 2009-12-07 17:56:51 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20091207175651-ftogh061hebcqzty
Tags: 4.9.2.dfsg-1
* New upstream release (closes: #554159).
* Changed -lblas to -lblas-3gf in Makefile.*.inc (closes: #557699).
* Linking tests to shared instead of static libs (closes: #555759).

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
!
2
 
!  This file is part of MUMPS 4.8.4, built on Mon Dec 15 15:31:38 UTC 2008
 
2
!  This file is part of MUMPS 4.9.2, built on Thu Nov  5 07:05:08 UTC 2009
3
3
!
4
4
!
5
5
!  This version of MUMPS is provided to you free of charge. It is public
6
6
!  domain, based on public domain software developed during the Esprit IV
7
7
!  European project PARASOL (1996-1999) by CERFACS, ENSEEIHT-IRIT and RAL.
8
8
!  Since this first public domain version in 1999, the developments are
9
 
!  supported by the following institutions: CERFACS, ENSEEIHT-IRIT, and
10
 
!  INRIA.
 
9
!  supported by the following institutions: CERFACS, CNRS, INPT(ENSEEIHT)-
 
10
!  IRIT, and INRIA.
11
11
!
12
 
!  Main contributors are Patrick Amestoy, Iain Duff, Abdou Guermouche,
13
 
!  Jacko Koster, Jean-Yves L'Excellent, and Stephane Pralet.
 
12
!  Current development team includes Patrick Amestoy, Alfredo Buttari,
 
13
!  Abdou Guermouche, Jean-Yves L'Excellent, Bora Ucar.
14
14
!
15
15
!  Up-to-date copies of the MUMPS package can be obtained
16
16
!  from the Web pages:
23
23
!
24
24
!  User documentation of any code that uses this software can
25
25
!  include this complete notice. You can acknowledge (using
26
 
!  references [1], [2], and [3]) the contribution of this package
 
26
!  references [1] and [2]) the contribution of this package
27
27
!  in any scientific publication dependent upon the use of the
28
28
!  package. You shall use reasonable endeavours to notify
29
29
!  the authors of the package of this publication.
30
30
!
31
 
!   [1] P. R. Amestoy, I. S. Duff and  J.-Y. L'Excellent,
32
 
!   Multifrontal parallel distributed symmetric and unsymmetric solvers,
33
 
!   in Comput. Methods in Appl. Mech. Eng., 184,  501-520 (2000).
34
 
!
35
 
!   [2] P. R. Amestoy, I. S. Duff, J. Koster and  J.-Y. L'Excellent,
 
31
!   [1] P. R. Amestoy, I. S. Duff, J. Koster and  J.-Y. L'Excellent,
36
32
!   A fully asynchronous multifrontal solver using distributed dynamic
37
33
!   scheduling, SIAM Journal of Matrix Analysis and Applications,
38
34
!   Vol 23, No 1, pp 15-41 (2001).
39
35
!
40
 
!   [3] P. R. Amestoy and A. Guermouche and J.-Y. L'Excellent and
 
36
!   [2] P. R. Amestoy and A. Guermouche and J.-Y. L'Excellent and
41
37
!   S. Pralet, Hybrid scheduling for the parallel solution of linear
42
38
!   systems. Parallel Computing Vol 32 (2), pp 136-156 (2006).
43
39
!
55
51
!    -----------------
56
52
!    MPI Communicator
57
53
!    -----------------
58
 
         INTEGER COMM
 
54
        INTEGER COMM
59
55
!    ------------------
60
56
!    Problem definition
61
57
!    ------------------
62
58
!    Solver (SYM=0 unsymmetric,SYM=1 symmetric Positive Definite, 
63
 
!         SYM=2 general symmetric)
 
59
!        SYM=2 general symmetric)
64
60
!    Type of parallelism (PAR=1 host working, PAR=0 host not working)
65
 
         INTEGER SYM, PAR
66
 
         INTEGER JOB 
 
61
        INTEGER SYM, PAR
 
62
        INTEGER JOB 
67
63
!    --------------------
68
64
!    Order of Input matrix 
69
65
!    --------------------
70
 
         INTEGER N
 
66
        INTEGER N
71
67
!
72
68
!    ----------------------------------------
73
69
!    Assembled input matrix : User interface
74
70
!    ----------------------------------------
75
 
         INTEGER NZ
76
 
         COMPLEX*16, DIMENSION(:), POINTER :: A
77
 
         INTEGER, DIMENSION(:), POINTER :: IRN, JCN
78
 
         DOUBLE PRECISION, DIMENSION(:), POINTER :: COLSCA, ROWSCA, pad0
 
71
        INTEGER NZ
 
72
        COMPLEX*16, DIMENSION(:), POINTER :: A
 
73
        INTEGER, DIMENSION(:), POINTER :: IRN, JCN
 
74
        DOUBLE PRECISION, DIMENSION(:), POINTER :: COLSCA, ROWSCA, pad0
79
75
!
80
 
!        ------------------------------------
81
 
!        Case of distributed assembled matrix
82
 
!        matrix on entry:
83
 
!        ------------------------------------
84
 
         INTEGER NZ_loc, pad1
85
 
         INTEGER, DIMENSION(:), POINTER :: IRN_loc, JCN_loc
86
 
         COMPLEX*16, DIMENSION(:), POINTER :: A_loc, pad2
 
76
!       ------------------------------------
 
77
!       Case of distributed assembled matrix
 
78
!       matrix on entry:
 
79
!       ------------------------------------
 
80
        INTEGER NZ_loc, pad1
 
81
        INTEGER, DIMENSION(:), POINTER :: IRN_loc, JCN_loc
 
82
        COMPLEX*16, DIMENSION(:), POINTER :: A_loc, pad2
87
83
!
88
84
!    ----------------------------------------
89
85
!    Unassembled input matrix: User interface
90
86
!    ----------------------------------------
91
 
         INTEGER NELT, pad3
92
 
         INTEGER, DIMENSION(:), POINTER :: ELTPTR
93
 
         INTEGER, DIMENSION(:), POINTER :: ELTVAR
94
 
         COMPLEX*16, DIMENSION(:), POINTER :: A_ELT, pad4
 
87
        INTEGER NELT, pad3
 
88
        INTEGER, DIMENSION(:), POINTER :: ELTPTR
 
89
        INTEGER, DIMENSION(:), POINTER :: ELTVAR
 
90
        COMPLEX*16, DIMENSION(:), POINTER :: A_ELT, pad4
95
91
!
96
92
!    ---------------------------------------------
97
93
!    Symmetric permutation : 
98
94
!               PERM_IN if given by user (optional)
99
95
!    ---------------------------------------------
100
 
         INTEGER, DIMENSION(:), POINTER :: PERM_IN
 
96
        INTEGER, DIMENSION(:), POINTER :: PERM_IN
101
97
!
102
98
!
103
99
! ******************
108
104
!    -------------
109
105
!       right-hand side and solution
110
106
!    -------------------------------------------------------
111
 
         COMPLEX*16, DIMENSION(:), POINTER :: RHS, REDRHS
112
 
         COMPLEX*16, DIMENSION(:), POINTER :: RHS_SPARSE
113
 
         COMPLEX*16, DIMENSION(:), POINTER :: SOL_LOC
114
 
         INTEGER, DIMENSION(:), POINTER :: IRHS_SPARSE
115
 
         INTEGER, DIMENSION(:), POINTER :: IRHS_PTR
116
 
         INTEGER, DIMENSION(:), POINTER :: ISOL_LOC
117
 
         INTEGER LRHS, NRHS, NZ_RHS, LSOL_LOC, LREDRHS
118
 
         INTEGER pad5
 
107
        COMPLEX*16, DIMENSION(:), POINTER :: RHS, REDRHS
 
108
        COMPLEX*16, DIMENSION(:), POINTER :: RHS_SPARSE
 
109
        COMPLEX*16, DIMENSION(:), POINTER :: SOL_LOC
 
110
        INTEGER, DIMENSION(:), POINTER :: IRHS_SPARSE
 
111
        INTEGER, DIMENSION(:), POINTER :: IRHS_PTR
 
112
        INTEGER, DIMENSION(:), POINTER :: ISOL_LOC
 
113
        INTEGER LRHS, NRHS, NZ_RHS, LSOL_LOC, LREDRHS
 
114
        INTEGER pad5
119
115
!    ----------------------------
120
116
!    Control parameters,
121
117
!    statistics and output data
122
118
!    ---------------------------
123
 
         INTEGER ICNTL(40)
124
 
         INTEGER INFO(40) 
125
 
         INTEGER INFOG(40)
126
 
         DOUBLE PRECISION COST_SUBTREES
127
 
         DOUBLE PRECISION CNTL(15)
128
 
         DOUBLE PRECISION RINFO(20)
129
 
         DOUBLE PRECISION RINFOG(20)
 
119
        INTEGER ICNTL(40)
 
120
        INTEGER INFO(40) 
 
121
        INTEGER INFOG(40)
 
122
        DOUBLE PRECISION COST_SUBTREES
 
123
        DOUBLE PRECISION CNTL(15)
 
124
        DOUBLE PRECISION RINFO(20)
 
125
        DOUBLE PRECISION RINFOG(20)
130
126
!    ---------------------------------------------------------
131
127
!    Permutations computed during analysis:
132
 
!        SYM_PERM: Symmetric permutation 
133
 
!        UNS_PERM: Column permutations (optionnal)
 
128
!       SYM_PERM: Symmetric permutation 
 
129
!       UNS_PERM: Column permutations (optionnal)
134
130
!    ---------------------------------------------------------
135
 
         INTEGER, DIMENSION(:), POINTER :: SYM_PERM, UNS_PERM
 
131
        INTEGER, DIMENSION(:), POINTER :: SYM_PERM, UNS_PERM
136
132
137
133
!    -------------------------------------
138
134
!    Case of distributed matrix on entry:
139
135
!    ZMUMPS potentially provides mapping
140
136
!    -------------------------------------
141
 
         INTEGER, DIMENSION(:), POINTER :: MAPPING
 
137
        INTEGER, DIMENSION(:), POINTER :: MAPPING
142
138
!
143
139
!    -------------------------------
144
140
!    Deficiency and null space basis
145
141
!    -------------------------------
146
 
         COMPLEX*16, DIMENSION(:,:), POINTER :: NULL_SPACE
147
 
         INTEGER Deficiency, pad6
 
142
        COMPLEX*16, DIMENSION(:,:), POINTER :: NULL_SPACE
 
143
        INTEGER Deficiency, pad6
148
144
!    -----
149
145
!    Schur
150
146
!    -----
151
 
         INTEGER NPROW, NPCOL, MBLOCK, NBLOCK
152
 
         INTEGER SCHUR_MLOC, SCHUR_NLOC, SCHUR_LLD
153
 
         INTEGER SIZE_SCHUR
154
 
         INTEGER, DIMENSION(:), POINTER :: LISTVAR_SCHUR
155
 
         COMPLEX*16, DIMENSION(:), POINTER :: SCHUR
156
 
         COMPLEX*16, DIMENSION(:), POINTER :: SCHUR_CINTERFACE
 
147
        INTEGER NPROW, NPCOL, MBLOCK, NBLOCK
 
148
        INTEGER SCHUR_MLOC, SCHUR_NLOC, SCHUR_LLD
 
149
        INTEGER SIZE_SCHUR
 
150
        INTEGER, DIMENSION(:), POINTER :: LISTVAR_SCHUR
 
151
        COMPLEX*16, DIMENSION(:), POINTER :: SCHUR
 
152
        COMPLEX*16, DIMENSION(:), POINTER :: SCHUR_CINTERFACE
157
153
!    --------------
158
154
!    Version number
159
155
!    --------------
160
 
         CHARACTER(LEN=14) VERSION_NUMBER
 
156
        CHARACTER(LEN=14) VERSION_NUMBER
161
157
!    -----------
162
158
!    Out-of-core
163
159
!    -----------
164
 
         CHARACTER(LEN=255) :: OOC_TMPDIR
165
 
         CHARACTER(LEN=63) :: OOC_PREFIX
 
160
        CHARACTER(LEN=255) :: OOC_TMPDIR
 
161
        CHARACTER(LEN=63) :: OOC_PREFIX
166
162
!    ------------------------------------------
167
163
!    To save the matrix in matrix market format
168
164
!    ------------------------------------------
169
 
         CHARACTER(LEN=255) WRITE_PROBLEM
 
165
        CHARACTER(LEN=255) WRITE_PROBLEM
170
166
!
171
167
!
172
168
! **********************
173
169
! INTERNAL Working data
174
 
! **********************
175
 
         INTEGER INST_Number
176
 
!        For MPI
177
 
         INTEGER COMM_NODES, MYID_NODES, COMM_LOAD
178
 
         INTEGER  MYID, NPROCS, NSLAVES
179
 
         INTEGER ASS_IRECV
180
 
         INTEGER, DIMENSION(:), POINTER :: POIDS
181
 
         INTEGER LBUFR
182
 
         INTEGER LBUFR_BYTES
183
 
         INTEGER, DIMENSION(:), POINTER ::  BUFR
184
 
!        For analysis/facto/solve phases
185
 
         INTEGER MAXIS1, pad7
186
 
         INTEGER KEEP(500)
187
 
         INTEGER*8 KEEP8(150)
188
 
!        IS is used for the factors + workspace for contrib. blocks
189
 
         INTEGER, DIMENSION(:), POINTER :: IS
190
 
!        is1 (maxis1) contains working arrays computed 
191
 
!        and used only during analysis
192
 
         INTEGER, DIMENSION(:), POINTER :: IS1
193
 
!        The following data/arrays are computed during the analysis
194
 
!        phase and used during the factorization and solve phases.
195
 
         INTEGER LNA
196
 
         INTEGER NBSA
197
 
         INTEGER,POINTER,DIMENSION(:)::STEP, NE_STEPS, ND_STEPS
 
170
! *********************
 
171
        INTEGER INST_Number
 
172
!       For MPI
 
173
        INTEGER COMM_NODES, MYID_NODES, COMM_LOAD
 
174
        INTEGER  MYID, NPROCS, NSLAVES
 
175
        INTEGER ASS_IRECV
 
176
        INTEGER, DIMENSION(:), POINTER :: POIDS
 
177
        INTEGER LBUFR
 
178
        INTEGER LBUFR_BYTES
 
179
        INTEGER, DIMENSION(:), POINTER ::  BUFR
 
180
!       For analysis/facto/solve phases
 
181
        INTEGER MAXIS1, pad7
 
182
        INTEGER KEEP(500)
 
183
        INTEGER*8 KEEP8(150)
 
184
!       IS is used for the factors + workspace for contrib. blocks
 
185
        INTEGER, DIMENSION(:), POINTER :: IS
 
186
!       is1 (maxis1) contains working arrays computed 
 
187
!       and used only during analysis
 
188
        INTEGER, DIMENSION(:), POINTER :: IS1
 
189
!       The following data/arrays are computed during the analysis
 
190
!       phase and used during the factorization and solve phases.
 
191
        INTEGER LNA
 
192
        INTEGER NBSA
 
193
        INTEGER,POINTER,DIMENSION(:)::STEP, NE_STEPS, ND_STEPS
198
194
!  Info for pruning tree 
199
 
         INTEGER,POINTER,DIMENSION(:)::Step2node
 
195
        INTEGER,POINTER,DIMENSION(:)::Step2node
200
196
!  ---------------------
201
 
         INTEGER,POINTER,DIMENSION(:)::FRERE_STEPS, DAD_STEPS
202
 
         INTEGER,POINTER,DIMENSION(:)::FILS, PTRAR, FRTPTR, FRTELT
203
 
         INTEGER,POINTER,DIMENSION(:)::NA, PROCNODE_STEPS
204
 
!        The two pointer arrays computed in facto and used by the solve
205
 
!           (except the factors) are PTLUST_S and PTRFAC. 
206
 
         INTEGER, DIMENSION(:), POINTER :: PTLUST_S, PTRFAC
207
 
!        main real working arrays for factorization/solve phases
208
 
         COMPLEX*16, DIMENSION(:), POINTER :: S
209
 
!        Information on mapping
210
 
         INTEGER, DIMENSION(:), POINTER :: PROCNODE
211
 
!        Input matrix ready for numerical assembly 
212
 
!            -arrowhead format in case of assembled matrix
213
 
!            -element format otherwise
214
 
         INTEGER, DIMENSION(:), POINTER :: INTARR
215
 
         COMPLEX*16, DIMENSION(:), POINTER :: DBLARR
216
 
!         Element entry: internal data
217
 
         INTEGER NELT_LOC, LELTVAR, NA_ELT, pad8
218
 
         INTEGER, DIMENSION(:), POINTER :: ELTPROC
219
 
!         Candidates and node partitionning
220
 
         INTEGER, DIMENSION(:,:), POINTER :: CANDIDATES
221
 
         INTEGER, DIMENSION(:),   POINTER :: ISTEP_TO_INIV2
222
 
         INTEGER, DIMENSION(:),   POINTER :: FUTURE_NIV2
223
 
         INTEGER, DIMENSION(:,:), POINTER :: TAB_POS_IN_PERE 
224
 
         LOGICAL, DIMENSION(:), POINTER :: I_AM_CAND
225
 
!        For heterogeneous architecture
226
 
         INTEGER, DIMENSION(:), POINTER :: MEM_DIST
227
 
!        Compressed RHS
228
 
         INTEGER, DIMENSION(:),   POINTER :: POSINRHSCOMP
229
 
         COMPLEX*16, DIMENSION(:), POINTER :: RHSCOMP
230
 
!        For C interface
231
 
!   Info on the subtrees to be used during facto
232
 
         INTEGER, DIMENSION(:),   POINTER :: MEM_SUBTREE
233
 
         INTEGER, DIMENSION(:),   POINTER :: MY_ROOT_SBTR
234
 
         INTEGER, DIMENSION(:),   POINTER :: MY_FIRST_LEAF
235
 
         INTEGER, DIMENSION(:),   POINTER :: MY_NB_LEAF
236
 
         INTEGER, DIMENSION(:),   POINTER :: DEPTH_FIRST
237
 
         DOUBLE PRECISION, DIMENSION(:),   POINTER :: COST_TRAV
238
 
         INTEGER NBSA_LOCAL
239
 
         INTEGER MAX_SURF_MASTER
 
197
        INTEGER,POINTER,DIMENSION(:)::FRERE_STEPS, DAD_STEPS
 
198
        INTEGER,POINTER,DIMENSION(:)::FILS, PTRAR, FRTPTR, FRTELT
 
199
        INTEGER,POINTER,DIMENSION(:)::NA, PROCNODE_STEPS
 
200
!       The two pointer arrays computed in facto and used by the solve
 
201
!          (except the factors) are PTLUST_S and PTRFAC. 
 
202
        INTEGER, DIMENSION(:), POINTER :: PTLUST_S
 
203
        INTEGER(8), DIMENSION(:), POINTER :: PTRFAC
 
204
!       main real working arrays for factorization/solve phases
 
205
        COMPLEX*16, DIMENSION(:), POINTER :: S
 
206
!       Information on mapping
 
207
        INTEGER, DIMENSION(:), POINTER :: PROCNODE
 
208
!       Input matrix ready for numerical assembly 
 
209
!           -arrowhead format in case of assembled matrix
 
210
!           -element format otherwise
 
211
        INTEGER, DIMENSION(:), POINTER :: INTARR
 
212
        COMPLEX*16, DIMENSION(:), POINTER :: DBLARR
 
213
!       Element entry: internal data
 
214
        INTEGER NELT_LOC, LELTVAR, NA_ELT, pad8
 
215
        INTEGER, DIMENSION(:), POINTER :: ELTPROC
 
216
!       Candidates and node partitionning
 
217
        INTEGER, DIMENSION(:,:), POINTER :: CANDIDATES
 
218
        INTEGER, DIMENSION(:),   POINTER :: ISTEP_TO_INIV2
 
219
        INTEGER, DIMENSION(:),   POINTER :: FUTURE_NIV2
 
220
        INTEGER, DIMENSION(:,:), POINTER :: TAB_POS_IN_PERE 
 
221
        LOGICAL, DIMENSION(:), POINTER :: I_AM_CAND
 
222
!       For heterogeneous architecture
 
223
        INTEGER, DIMENSION(:), POINTER :: MEM_DIST
 
224
!       Compressed RHS
 
225
        INTEGER, DIMENSION(:),   POINTER :: POSINRHSCOMP
 
226
        COMPLEX*16, DIMENSION(:), POINTER :: RHSCOMP
 
227
!       For C interface
 
228
!   Info on the subtrees to be used during factorization
 
229
        DOUBLE PRECISION, DIMENSION(:),   POINTER :: MEM_SUBTREE
 
230
        INTEGER, DIMENSION(:),   POINTER :: MY_ROOT_SBTR
 
231
        INTEGER, DIMENSION(:),   POINTER :: MY_FIRST_LEAF
 
232
        INTEGER, DIMENSION(:),   POINTER :: MY_NB_LEAF
 
233
        INTEGER, DIMENSION(:),   POINTER :: DEPTH_FIRST
 
234
        DOUBLE PRECISION, DIMENSION(:),   POINTER :: COST_TRAV
 
235
        INTEGER NBSA_LOCAL
 
236
        INTEGER(8) :: MAX_SURF_MASTER
 
237
        INTEGER :: LWK_USER
 
238
        COMPLEX*16, DIMENSION(:), POINTER :: WK_USER
240
239
!    For simulating parallel out-of-core stack.
241
 
         INTEGER, DIMENSION(:),POINTER ::CB_SON_SIZE
 
240
        DOUBLE PRECISION, DIMENSION(:),POINTER ::CB_SON_SIZE
242
241
!   Instance number used/managed by the C/F77 interface
243
 
         INTEGER INSTANCE_NUMBER
 
242
        INTEGER INSTANCE_NUMBER
244
243
!    OOC management data that must persist from factorization to solve.
245
 
         INTEGER OOC_MAX_NB_NODES_FOR_ZONE
246
 
         INTEGER, DIMENSION(:,:),   POINTER :: OOC_INODE_SEQUENCE
247
 
         INTEGER, DIMENSION(:,:),   POINTER :: OOC_SIZE_OF_BLOCK
248
 
         INTEGER*8, DIMENSION(:,:),   POINTER :: OOC_VADDR
249
 
         INTEGER,DIMENSION(:), POINTER :: OOC_TOTAL_NB_NODES
250
 
         INTEGER,DIMENSION(:), POINTER :: OOC_NB_FILES
251
 
         CHARACTER,DIMENSION(:,:), POINTER :: OOC_FILE_NAMES  
252
 
         INTEGER,DIMENSION(:), POINTER :: OOC_FILE_NAME_LENGTH
 
244
        INTEGER OOC_MAX_NB_NODES_FOR_ZONE
 
245
        INTEGER, DIMENSION(:,:),   POINTER :: OOC_INODE_SEQUENCE
 
246
        INTEGER(8),DIMENSION(:,:), POINTER :: OOC_SIZE_OF_BLOCK
 
247
        INTEGER*8, DIMENSION(:,:),   POINTER :: OOC_VADDR
 
248
        INTEGER,DIMENSION(:), POINTER :: OOC_TOTAL_NB_NODES
 
249
        INTEGER,DIMENSION(:), POINTER :: OOC_NB_FILES
 
250
        CHARACTER,DIMENSION(:,:), POINTER :: OOC_FILE_NAMES  
 
251
        INTEGER,DIMENSION(:), POINTER :: OOC_FILE_NAME_LENGTH
253
252
!    Indices of nul pivots
254
 
         INTEGER,DIMENSION(:), POINTER :: PIVNUL_LIST
 
253
        INTEGER,DIMENSION(:), POINTER :: PIVNUL_LIST
255
254
!    Internal control array
256
 
         DOUBLE PRECISION DKEEP(30)
 
255
        DOUBLE PRECISION DKEEP(30)
257
256
!    Array needed to manage additionnal candidate processor 
258
 
         INTEGER, DIMENSION(:,:), POINTER :: SUP_PROC
 
257
        INTEGER, DIMENSION(:,:), POINTER :: SUP_PROC
259
258
!   ------------------------
260
259
!   Root structure(internal)
261
260
!   ------------------------
262
 
         TYPE (ZMUMPS_ROOT_STRUC) :: root
 
261
        TYPE (ZMUMPS_ROOT_STRUC) :: root
263
262
      END TYPE ZMUMPS_STRUC