1 /*
2  *
3  *  This file is part of MUMPS 4.10.0, built on Tue May 10 12:56:32 UTC 2011
4  *
5  *
6  *  This version of MUMPS is provided to you free of charge. It is public
7  *  domain, based on public domain software developed during the Esprit IV
8  *  European project PARASOL (1996-1999). Since this first public domain
9  *  version in 1999, research and developments have been supported by the
10  *  following institutions: CERFACS, CNRS, ENS Lyon, INPT(ENSEEIHT)-IRIT,
11  *  INRIA, and University of Bordeaux.
12  *
13  *  The MUMPS team at the moment of releasing this version includes
14  *  Patrick Amestoy, Maurice Bremond, Alfredo Buttari, Abdou Guermouche,
15  *  Guillaume Joslin, Jean-Yves L'Excellent, Francois-Henry Rouet, Bora
16  *  Ucar and Clement Weisbecker.
17  *
18  *  We are also grateful to Emmanuel Agullo, Caroline Bousquet, Indranil
19  *  Chowdhury, Philippe Combes, Christophe Daniel, Iain Duff, Vincent Espirat,
20  *  Aurelia Fevre, Jacko Koster, Stephane Pralet, Chiara Puglisi, Gregoire
21  *  Richard, Tzvetomila Slavova, Miroslav Tuma and Christophe Voemel who
22  *  have been contributing to this project.
23  *
24  *  Up-to-date copies of the MUMPS package can be obtained
25  *  from the Web pages:
26  *  http://mumps.enseeiht.fr/  or  http://graal.ens-lyon.fr/MUMPS
27  *
28  *
29  *   THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
30  *   EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.
31  *
32  *
33  *  User documentation of any code that uses this software can
34  *  include this complete notice. You can acknowledge (using
35  *  references [1] and [2]) the contribution of this package
36  *  in any scientific publication dependent upon the use of the
37  *  package. You shall use reasonable endeavours to notify
38  *  the authors of the package of this publication.
39  *
40  *   [1] P. R. Amestoy, I. S. Duff, J. Koster and  J.-Y. L'Excellent,
41  *   A fully asynchronous multifrontal solver using distributed dynamic
42  *   scheduling, SIAM Journal of Matrix Analysis and Applications,
43  *   Vol 23, No 1, pp 15-41 (2001).
44  *
45  *   [2] P. R. Amestoy and A. Guermouche and J.-Y. L'Excellent and
46  *   S. Pralet, Hybrid scheduling for the parallel solution of linear
47  *   systems. Parallel Computing Vol 32 (2), pp 136-156 (2006).
48  *
49  */
50 
51 /* Mostly written in march 2002 (JYL) */
52 
53 #ifndef DMUMPS_C_H
54 #define DMUMPS_C_H
55 
56 #ifdef __cplusplus
57 extern "C" {
58 #endif
59 
60 #include "mumps_compat.h"
61 /* Next line defines MUMPS_INT, DMUMPS_COMPLEX and DMUMPS_REAL */
62 #include "mumps_c_types.h"
63 
64 #ifndef MUMPS_VERSION
65 /* Protected in case headers of other arithmetics are included */
66 #define MUMPS_VERSION "4.10.0"
67 #endif
68 #ifndef MUMPS_VERSION_MAX_LEN
69 #define MUMPS_VERSION_MAX_LEN 14
70 #endif
71 
72 /*
73  * Definition of the (simplified) MUMPS C structure.
74  * NB: DMUMPS_COMPLEX are REAL types in s and d arithmetics.
75  */
76 typedef struct {
77 
78     MUMPS_INT      sym, par, job;
79     MUMPS_INT      comm_fortran;    /* Fortran communicator */
80     MUMPS_INT      icntl[40];
81     DMUMPS_REAL    cntl[15];
82     MUMPS_INT      n;
83 
84     MUMPS_INT      nz_alloc; /* used in matlab interface to decide if we
85                                 free + malloc when we have large variation */
86 
87     /* Assembled entry */
88     MUMPS_INT      nz;
89     MUMPS_INT      *irn;
90     MUMPS_INT      *jcn;
91     DMUMPS_COMPLEX *a;
92 
93     /* Distributed entry */
94     MUMPS_INT      nz_loc;
95     MUMPS_INT      *irn_loc;
96     MUMPS_INT      *jcn_loc;
97     DMUMPS_COMPLEX *a_loc;
98 
99     /* Element entry */
100     MUMPS_INT      nelt;
101     MUMPS_INT      *eltptr;
102     MUMPS_INT      *eltvar;
103     DMUMPS_COMPLEX *a_elt;
104 
105     /* Ordering, if given by user */
106     MUMPS_INT      *perm_in;
107 
108     /* Orderings returned to user */
109     MUMPS_INT      *sym_perm;    /* symmetric permutation */
110     MUMPS_INT      *uns_perm;    /* column permutation */
111 
112     /* Scaling (input only in this version) */
113     DMUMPS_REAL    *colsca;
114     DMUMPS_REAL    *rowsca;
115 
116     /* RHS, solution, ouptput data and statistics */
117     DMUMPS_COMPLEX *rhs, *redrhs, *rhs_sparse, *sol_loc;
118     MUMPS_INT      *irhs_sparse, *irhs_ptr, *isol_loc;
119     MUMPS_INT      nrhs, lrhs, lredrhs, nz_rhs, lsol_loc;
120     MUMPS_INT      schur_mloc, schur_nloc, schur_lld;
121     MUMPS_INT      mblock, nblock, nprow, npcol;
122     MUMPS_INT      info[40],infog[40];
123     DMUMPS_REAL    rinfo[40], rinfog[40];
124 
125     /* Null space */
126     MUMPS_INT      deficiency;
127     MUMPS_INT      *pivnul_list;
128     MUMPS_INT      *mapping;
129 
130     /* Schur */
131     MUMPS_INT      size_schur;
132     MUMPS_INT      *listvar_schur;
133     DMUMPS_COMPLEX *schur;
134 
135     /* Internal parameters */
136     MUMPS_INT      instance_number;
137     DMUMPS_COMPLEX *wk_user;
138 
139     /* Version number: length=14 in FORTRAN + 1 for final \0 + 1 for alignment */
140     char version_number[MUMPS_VERSION_MAX_LEN + 1 + 1];
141     /* For out-of-core */
142     char ooc_tmpdir[256];
143     char ooc_prefix[64];
144     /* To save the matrix in matrix market format */
145     char write_problem[256];
146     MUMPS_INT      lwk_user;
147 
148 } DMUMPS_STRUC_C;
149 
150 
151 void MUMPS_CALL
152 dmumps_c( DMUMPS_STRUC_C * dmumps_par );
153 
154 #ifdef __cplusplus
155 }
156 #endif
157 
158 #endif /* DMUMPS_C_H */
159 
160