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