1 /* basics.C */
2
3 #include "../BridgeMPI.h"
4
5 /*--------------------------------------------------------------------*/
6 /*
7 -----------------------
8 constructor method
9
10 created -- 98sep25, cca
11 -----------------------
12 */
13 BridgeMPI *
BridgeMPI_new(void)14 BridgeMPI_new (
15 void
16 ) {
17 BridgeMPI *bridge ;
18
19 ALLOCATE(bridge, struct _BridgeMPI, 1) ;
20
21 BridgeMPI_setDefaultFields(bridge) ;
22
23 return(bridge) ; }
24
25 /*--------------------------------------------------------------------*/
26 /*
27 -----------------------
28 set the default fields
29
30 return value ---
31 1 -- normal return
32 -1 -- bridge is NULL
33
34 created -- 98sep25, cca
35 -----------------------
36 */
37 int
BridgeMPI_setDefaultFields(BridgeMPI * bridge)38 BridgeMPI_setDefaultFields (
39 BridgeMPI *bridge
40 ) {
41 if ( bridge == NULL ) {
42 fprintf(stderr, "\n fatal error in BridgeMPI_setDefaultFields(%p)"
43 "\n bad input\n", bridge) ;
44 return(-1) ;
45 }
46 /*
47 ----------------
48 graph statistics
49 ----------------
50 */
51 bridge->neqns = 0 ;
52 bridge->nedges = 0 ;
53 bridge->Neqns = 0 ;
54 bridge->Nedges = 0 ;
55 /*
56 -------------------
57 ordering parameters
58 -------------------
59 */
60 bridge->compressCutoff = 0.0 ;
61 bridge->maxdomainsize = -1 ;
62 bridge->maxnzeros = -1 ;
63 bridge->maxsize = -1 ;
64 bridge->seed = -1 ;
65 /*
66 -------------------------------
67 matrix/factorization parameters
68 -------------------------------
69 */
70 bridge->type = SPOOLES_REAL ;
71 bridge->symmetryflag = SPOOLES_SYMMETRIC ;
72 bridge->sparsityflag = FRONTMTX_DENSE_FRONTS ;
73 bridge->pivotingflag = SPOOLES_NO_PIVOTING ;
74 bridge->tau = 100.0 ;
75 bridge->droptol = 1.e-3 ;
76 bridge->patchinfo = NULL ;
77 bridge->lookahead = 0 ;
78 /*
79 ---------------------------
80 MPI information and objects
81 ---------------------------
82 */
83 bridge->nproc = 0 ;
84 bridge->myid = -1 ;
85 bridge->comm = NULL ;
86 bridge->ownersIV = NULL ;
87 bridge->solvemap = NULL ;
88 bridge->cumopsDV = NULL ;
89 bridge->vtxmapIV = NULL ;
90 bridge->rowmapIV = NULL ;
91 bridge->ownedColumnsIV = NULL ;
92 bridge->Aloc = NULL ;
93 bridge->Xloc = NULL ;
94 bridge->Yloc = NULL ;
95 /*
96 ------------------------------------
97 message info, statistics and timings
98 ------------------------------------
99 */
100 IVzero(6, bridge->stats) ;
101 DVzero(22, bridge->cpus) ;
102 bridge->msglvl = 0 ;
103 bridge->msgFile = stdout ;
104 /*
105 -------------------
106 pointers to objects
107 -------------------
108 */
109 bridge->frontETree = NULL ;
110 bridge->symbfacIVL = NULL ;
111 bridge->mtxmanager = NULL ;
112 bridge->frontmtx = NULL ;
113 bridge->oldToNewIV = NULL ;
114 bridge->newToOldIV = NULL ;
115
116 return(1) ; }
117
118 /*--------------------------------------------------------------------*/
119 /*
120 -----------------------
121 clear the data fields
122
123 return value ---
124 1 -- normal return
125 -1 -- bridge is NULL
126
127 created -- 98sep25, cca
128 -----------------------
129 */
130 int
BridgeMPI_clearData(BridgeMPI * bridge)131 BridgeMPI_clearData (
132 BridgeMPI *bridge
133 ) {
134 if ( bridge == NULL ) {
135 fprintf(stderr, "\n fatal error in BridgeMPI_clearData(%p)"
136 "\n bad input\n", bridge) ;
137 return(-1) ;
138 }
139 /*
140 ------------
141 free objects
142 ------------
143 */
144 if ( bridge->frontmtx != NULL ) {
145 FrontMtx_free(bridge->frontmtx) ;
146 }
147 if ( bridge->frontETree != NULL ) {
148 ETree_free(bridge->frontETree) ;
149 }
150 if ( bridge->symbfacIVL != NULL ) {
151 IVL_free(bridge->symbfacIVL) ;
152 }
153 if ( bridge->mtxmanager != NULL ) {
154 SubMtxManager_free(bridge->mtxmanager) ;
155 }
156 if ( bridge->oldToNewIV != NULL ) {
157 IV_free(bridge->oldToNewIV) ;
158 }
159 if ( bridge->newToOldIV != NULL ) {
160 IV_free(bridge->newToOldIV) ;
161 }
162 /*
163 ----------------
164 free MPI objects
165 ----------------
166 */
167 if ( bridge->ownersIV != NULL ) {
168 IV_free(bridge->ownersIV) ;
169 }
170 if ( bridge->solvemap != NULL ) {
171 SolveMap_free(bridge->solvemap) ;
172 }
173 if ( bridge->cumopsDV != NULL ) {
174 DV_free(bridge->cumopsDV) ;
175 }
176 if ( bridge->rowmapIV != bridge->vtxmapIV ) {
177 IV_free(bridge->rowmapIV) ;
178 }
179 if ( bridge->vtxmapIV != NULL ) {
180 IV_free(bridge->vtxmapIV) ;
181 }
182 if ( bridge->ownedColumnsIV != NULL ) {
183 IV_free(bridge->ownedColumnsIV) ;
184 }
185 if ( bridge->Aloc != NULL ) {
186 InpMtx_free(bridge->Aloc) ;
187 }
188 if ( bridge->Xloc != NULL ) {
189 DenseMtx_free(bridge->Xloc) ;
190 }
191 if ( bridge->Yloc != NULL ) {
192 DenseMtx_free(bridge->Yloc) ;
193 }
194 /*
195 ------------------
196 set default fields
197 ------------------
198 */
199 BridgeMPI_setDefaultFields(bridge) ;
200
201 return(1) ; }
202
203 /*--------------------------------------------------------------------*/
204 /*
205 -----------------------
206 destructor
207
208 return value ---
209 1 -- normal return
210 -1 -- bridge is NULL
211
212 created -- 98sep25, cca
213 -----------------------
214 */
215 int
BridgeMPI_free(BridgeMPI * bridge)216 BridgeMPI_free (
217 BridgeMPI *bridge
218 ) {
219 if ( bridge == NULL ) {
220 fprintf(stderr, "\n fatal error in BridgeMPI_free(%p)"
221 "\n bad input\n", bridge) ;
222 return(-1) ;
223 }
224 BridgeMPI_clearData(bridge) ;
225 FREE(bridge) ;
226
227 return(1) ; }
228
229 /*--------------------------------------------------------------------*/
230