1 #ifndef BOOST_NUMERIC_BINDINGS_MUMPS_464_SMUMPS_C_HPP
2 #define BOOST_NUMERIC_BINDINGS_MUMPS_464_SMUMPS_C_HPP
3 
4 /*
5 
6    THIS FILE IS PART OF MUMPS VERSION 4.6.4
7    This Version was built on Thu Jan 11 13:32:35 2007
8 
9 
10   This version of MUMPS is provided to you free of charge. It is public
11   domain, based on public domain software developed during the Esprit IV
12   European project PARASOL (1996-1999) by CERFACS, ENSEEIHT-IRIT and RAL.
13   Since this first public domain version in 1999, the developments are
14   supported by the following institutions: CERFACS, ENSEEIHT-IRIT, and
15   INRIA.
16 
17   Main contributors are Patrick Amestoy, Iain Duff, Abdou Guermouche,
18   Jacko Koster, Jean-Yves L'Excellent, and Stephane Pralet.
19 
20   Up-to-date copies of the MUMPS package can be obtained
21   from the Web pages http://www.enseeiht.fr/apo/MUMPS/
22   or http://graal.ens-lyon.fr/MUMPS
23 
24 
25    THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
26    EXPRESSED OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
27 
28 
29   User documentation of any code that uses this software can
30   include this complete notice. You can acknowledge (using
31   references [1], [2], and [3] the contribution of this package
32   in any scientific publication dependent upon the use of the
33   package. You shall use reasonable endeavours to notify
34   the authors of the package of this publication.
35 
36    [1] P. R. Amestoy, I. S. Duff and  J.-Y. L'Excellent,
37    Multifrontal parallel distributed symmetric and unsymmetric solvers,
38    in Comput. Methods in Appl. Mech. Eng., 184,  501-520 (2000).
39 
40    [2] 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    [3] 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 /* $Id: smumps_c.hpp 39206 2007-09-12 06:58:12Z karlmeerbergen $ */
51 /* Mostly written in march 2002 (JYL) */
52 
53 // This file is modified by Karl Meerbergen for C++ users
54 
55 /* Complex datatypes */
56 
57 /* Next line defines SMUMPS_INT, SMUMPS_DOUBLE and SMUMPS_DOUBLE2 */
58 #include <smumps_prec.h>
59 /*
60  * Definition of the (simplified)
61  * MUMPS C structure
62  */
63 typedef struct
64   {
65     SMUMPS_INT sym, par, job;
66     SMUMPS_INT comm_fortran;    /* Fortran communicator */
67     SMUMPS_INT icntl[40];
68     SMUMPS_DOUBLE2 cntl[5];
69     SMUMPS_INT n;
70 
71     SMUMPS_INT nz_alloc; /* used in matlab interface to decide if
72                        we free + malloc when we have large variation */
73 
74     /* Assembled entry */
75     SMUMPS_INT nz; SMUMPS_INT *irn; SMUMPS_INT *jcn; SMUMPS_DOUBLE *a;
76     /* Distributed entry */
77     SMUMPS_INT nz_loc; SMUMPS_INT *irn_loc; SMUMPS_INT *jcn_loc; SMUMPS_DOUBLE *a_loc;
78     /* Element entry */
79     SMUMPS_INT nelt; SMUMPS_INT *eltptr; SMUMPS_INT *eltvar; SMUMPS_DOUBLE *a_elt;
80 
81     /* Ordering, if given by user */
82     SMUMPS_INT *perm_in;
83 
84     /* Orderings returned to user */
85     /* symmetric permutation */
86     SMUMPS_INT *sym_perm;
87     /* column permutation */
88     SMUMPS_INT *uns_perm;
89 
90     /* Scaling (input only in this version) */
91     SMUMPS_DOUBLE *colsca; SMUMPS_DOUBLE *rowsca;
92     /* RHS, solution, ouptput data and statistics */
93     SMUMPS_DOUBLE *rhs, *rhs_sparse, *sol_loc;
94     SMUMPS_INT *irhs_sparse, *irhs_ptr, *isol_loc;
95     SMUMPS_INT nrhs, lrhs, nz_rhs, lsol_loc;
96   SMUMPS_INT schur_mloc, schur_nloc, schur_lld;
97   SMUMPS_INT mblock, nblock, nprow, npcol;
98     SMUMPS_INT info[40],infog[40];
99     SMUMPS_DOUBLE2 rinfo[20], rinfog[20];
100     /* Null space */
101     SMUMPS_INT deficiency; SMUMPS_DOUBLE * nullspace; SMUMPS_INT * mapping;
102     /* Schur */
103     SMUMPS_INT size_schur; SMUMPS_INT *listvar_schur; SMUMPS_DOUBLE *schur;
104     /* Internal parameters */
105     SMUMPS_INT instance_number;
106     /* For out-of-core */
107     char ooc_tmpdir[151];
108     char ooc_prefix[151];
109   } SMUMPS_STRUC_C;
110 
111 
112 extern "C" {
113 void smumps_c(SMUMPS_STRUC_C * smumps_par);
114 }
115 
116 #endif
117 
118