/[escript]/branches/doubleplusgood/finley/src/Mesh_createNodeFileMappings.cpp
ViewVC logotype

Annotation of /branches/doubleplusgood/finley/src/Mesh_createNodeFileMappings.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4327 - (hide annotations)
Wed Mar 20 05:09:11 2013 UTC (6 years, 8 months ago) by jfenwick
File size: 17855 byte(s)
some finley memory
1 ksteube 1315
2 jfenwick 3981 /*****************************************************************************
3 ksteube 1811 *
4 jfenwick 4154 * Copyright (c) 2003-2013 by University of Queensland
5 jfenwick 3981 * http://www.uq.edu.au
6 ksteube 1811 *
7     * Primary Business: Queensland, Australia
8     * Licensed under the Open Software License version 3.0
9     * http://www.opensource.org/licenses/osl-3.0.php
10     *
11 jfenwick 3981 * Development until 2012 by Earth Systems Science Computational Center (ESSCC)
12     * Development since 2012 by School of Earth Sciences
13     *
14     *****************************************************************************/
15 ksteube 1315
16 ksteube 1811
17 jfenwick 3981 /************************************************************************************/
18 ksteube 1315
19 caltinay 3639 /* Finley: NodeFile : creates the mappings using by indexReducedNodes */
20 ksteube 1315 /* no distribution is happening */
21    
22 jfenwick 3981 /************************************************************************************/
23 ksteube 1315
24     #include "Mesh.h"
25     #define UNUSED -1
26    
27 jfenwick 3981 /************************************************************************************/
28 ksteube 1315
29 jfenwick 3259 void Finley_Mesh_createDOFMappingAndCoupling(Finley_Mesh* in, bool_t use_reduced_elements)
30 ksteube 1315 {
31 gross 1735 index_t min_DOF, max_DOF, *shared=NULL, *offsetInShared=NULL, *locDOFMask=NULL, i, k, myFirstDOF, myLastDOF, *nodeMask=NULL, firstDOF, lastDOF, *globalDOFIndex, *wanted_DOFs=NULL;
32     dim_t mpiSize, len_loc_dof, numNeighbors, n, lastn, numNodes,*rcv_len=NULL, *snd_len=NULL, count;
33 jfenwick 3259 Esys_MPI_rank myRank,p,p_min,p_max, *neighbor=NULL;
34 ksteube 1315 Paso_SharedComponents *rcv_shcomp=NULL, *snd_shcomp=NULL;
35     Finley_NodeMapping *this_mapping=NULL;
36 gross 1552 Paso_Connector* this_connector=NULL;
37 ksteube 1315 Paso_Distribution* dof_distribution;
38 jfenwick 3259 Esys_MPIInfo *mpi_info = in->MPIInfo;
39     #ifdef ESYS_MPI
40 gross 1735 MPI_Request* mpi_requests=NULL;
41     MPI_Status* mpi_stati=NULL;
42     #else
43     int *mpi_requests=NULL, *mpi_stati=NULL;
44     #endif
45    
46 ksteube 1315 numNodes=in->Nodes->numNodes;
47     if (use_reduced_elements) {
48     dof_distribution=in->Nodes->reducedDegreesOfFreedomDistribution;
49     globalDOFIndex=in->Nodes->globalReducedDOFIndex;
50     } else {
51     dof_distribution=in->Nodes->degreesOfFreedomDistribution;
52     globalDOFIndex=in->Nodes->globalDegreesOfFreedom;
53     }
54 gross 1738 myFirstDOF=Paso_Distribution_getFirstComponent(dof_distribution);
55     myLastDOF=Paso_Distribution_getLastComponent(dof_distribution);
56 ksteube 1315
57 gross 1738
58 gross 1735 mpiSize=mpi_info->size;
59     myRank=mpi_info->rank;
60 ksteube 1315
61     min_DOF=Finley_Util_getFlaggedMinInt(1,numNodes,globalDOFIndex,-1);
62     max_DOF=Finley_Util_getFlaggedMaxInt(1,numNodes,globalDOFIndex,-1);
63    
64 gross 1738 if (max_DOF < min_DOF) {
65     min_DOF=myFirstDOF;
66     max_DOF=myLastDOF-1;
67     }
68    
69 ksteube 1315 p_min=mpiSize;
70     p_max=-1;
71 gross 1738 if (max_DOF >= min_DOF) {
72     for (p=0; p<mpiSize; ++p) {
73     if (dof_distribution->first_component[p]<=min_DOF) p_min=p;
74     if (dof_distribution->first_component[p]<=max_DOF) p_max=p;
75     }
76     }
77 ksteube 1315
78     len_loc_dof=max_DOF-min_DOF+1;
79     if (! ((min_DOF<=myFirstDOF) && (myLastDOF-1<=max_DOF)) ) {
80 caltinay 3639 Finley_setError(SYSTEM_ERROR, "Local elements do not span local degrees of freedom.");
81 ksteube 1315 return;
82     }
83 jfenwick 4327 rcv_len=new dim_t[mpiSize];
84     snd_len=new dim_t[mpiSize];
85 jfenwick 3259 #ifdef ESYS_MPI
86 jfenwick 4327 mpi_requests=new MPI_Request[mpiSize*2];
87     mpi_stati=new MPI_Status[mpiSize*2];
88 gross 1735 #else
89 jfenwick 4327 mpi_requests=new int[mpiSize*2];
90     mpi_stati=new int[mpiSize*2];
91 gross 1735 #endif
92 jfenwick 4327 wanted_DOFs=new index_t[numNodes];
93     nodeMask=new index_t[numNodes];
94     neighbor=new Esys_MPI_rank[mpiSize];
95     shared=new index_t[numNodes*(p_max-p_min+1)];
96     offsetInShared=new index_t[mpiSize+1];
97     locDOFMask=new index_t[len_loc_dof];
98 gross 1735 if (! ( Finley_checkPtr(neighbor) || Finley_checkPtr(shared) || Finley_checkPtr(offsetInShared) || Finley_checkPtr(locDOFMask) ||
99     Finley_checkPtr(nodeMask) || Finley_checkPtr(rcv_len) || Finley_checkPtr(snd_len) || Finley_checkPtr(mpi_requests) || Finley_checkPtr(mpi_stati) ||
100     Finley_checkPtr(mpi_stati) )) {
101 ksteube 1315
102 gross 1735 memset(rcv_len,0,sizeof(dim_t)*mpiSize);
103     #pragma omp parallel
104     {
105     #pragma omp for private(i) schedule(static)
106     for (i=0;i<len_loc_dof;++i) locDOFMask[i]=UNUSED;
107     #pragma omp for private(i) schedule(static)
108     for (i=0;i<numNodes;++i) nodeMask[i]=UNUSED;
109     #pragma omp for private(i,k) schedule(static)
110     for (i=0;i<numNodes;++i) {
111     k=globalDOFIndex[i];
112     if (k>-1) {
113     locDOFMask[k-min_DOF]=UNUSED-1;
114     #ifdef BOUNDS_CHECK
115     if ((k-min_DOF) >= len_loc_dof) { printf("BOUNDS_CHECK %s %d i=%d k=%d min_DOF=%d\n", __FILE__, __LINE__, i, k, min_DOF); exit(1); }
116     #endif
117     }
118     }
119 ksteube 1315
120 gross 1735 #pragma omp for private(i) schedule(static)
121     for (i=myFirstDOF-min_DOF;i<myLastDOF-min_DOF;++i) {
122     locDOFMask[i]=i-myFirstDOF+min_DOF;
123     #ifdef BOUNDS_CHECK
124     if (i < 0 || i >= len_loc_dof) { printf("BOUNDS_CHECK %s %d i=%d\n", __FILE__, __LINE__, i); exit(1); }
125     #endif
126     }
127 ksteube 1315 }
128    
129     numNeighbors=0;
130     n=0;
131     lastn=n;
132     for (p=p_min;p<=p_max;++p) {
133     firstDOF=MAX(min_DOF,dof_distribution->first_component[p]);
134     lastDOF=MIN(max_DOF+1,dof_distribution->first_component[p+1]);
135     if (p != myRank) {
136     for (i=firstDOF-min_DOF;i<lastDOF-min_DOF;++i) {
137 gross 1735 #ifdef BOUNDS_CHECK
138     if (i < 0 || i >= len_loc_dof) { printf("BOUNDS_CHECK %s %d p=%d i=%d\n", __FILE__, __LINE__, p, i); exit(1); }
139     #endif
140 ksteube 1315 if (locDOFMask[i] == UNUSED-1) {
141     locDOFMask[i]=myLastDOF-myFirstDOF+n;
142 gross 1735 wanted_DOFs[n]=i+min_DOF;
143 ksteube 1315 ++n;
144     }
145     }
146     if (n>lastn) {
147 gross 1735 rcv_len[p]=n-lastn;
148 ksteube 1315 neighbor[numNeighbors]=p;
149 gross 1735 #ifdef BOUNDS_CHECK
150 ksteube 1326 if (numNeighbors < 0 || numNeighbors >= mpiSize+1) { printf("BOUNDS_CHECK %s %d p=%d numNeighbors=%d n=%d\n", __FILE__, __LINE__, p, numNeighbors, n); exit(1); }
151 gross 1735 #endif
152 ksteube 1315 offsetInShared[numNeighbors]=lastn;
153     numNeighbors++;
154     lastn=n;
155     }
156     }
157     }
158     #ifdef BOUNDS_CHECK
159 ksteube 1326 if (numNeighbors < 0 || numNeighbors >= mpiSize+1) { printf("BOUNDS_CHECK %s %d numNeighbors=%d\n", __FILE__, __LINE__, numNeighbors); exit(1); }
160 ksteube 1315 #endif
161     offsetInShared[numNeighbors]=lastn;
162    
163     /* assign new DOF labels to nodes */
164 jfenwick 2732 #pragma omp parallel for private(i,k) schedule(static)
165 ksteube 1315 for (i=0;i<numNodes;++i) {
166     k=globalDOFIndex[i];
167     if (k>-1) nodeMask[i]=locDOFMask[k-min_DOF];
168     }
169    
170     /* now we can set the mapping from nodes to local DOFs */
171     this_mapping=Finley_NodeMapping_alloc(numNodes,nodeMask,UNUSED);
172     /* define how to get DOF values for controlled bu other processors */
173 gross 1735 #ifdef BOUNDS_CHECK
174 ksteube 1315 for (i=0;i<offsetInShared[numNeighbors];++i) {
175 ksteube 1326 if (i < 0 || i >= numNodes*(p_max-p_min+1)) { printf("BOUNDS_CHECK %s %d i=%d\n", __FILE__, __LINE__, i); exit(1); }
176 ksteube 1315 }
177 gross 1735 #endif
178 ksteube 1315 #pragma omp parallel for private(i) schedule(static)
179     for (i=0;i<offsetInShared[numNeighbors];++i) shared[i]=myLastDOF-myFirstDOF+i;
180    
181 gross 1735 rcv_shcomp=Paso_SharedComponents_alloc(myLastDOF-myFirstDOF,numNeighbors,neighbor,shared,offsetInShared,1,0,mpi_info);
182 ksteube 1315
183 gross 1735 /*
184     * now we build the sender
185     */
186 jfenwick 3259 #ifdef ESYS_MPI
187 gross 1735 MPI_Alltoall(rcv_len,1,MPI_INT,snd_len,1,MPI_INT,mpi_info->comm);
188     #else
189 gross 1741 for (p=0;p<mpiSize;++p) snd_len[p]=rcv_len[p];
190 gross 1735 #endif
191     count=0;
192     for (p=0;p<rcv_shcomp->numNeighbors;p++) {
193 jfenwick 3259 #ifdef ESYS_MPI
194 gross 1735 MPI_Isend(&(wanted_DOFs[rcv_shcomp->offsetInShared[p]]), rcv_shcomp->offsetInShared[p+1]-rcv_shcomp->offsetInShared[p],
195     MPI_INT,rcv_shcomp->neighbor[p],mpi_info->msg_tag_counter+myRank,mpi_info->comm,&mpi_requests[count]);
196     #endif
197     count++;
198     }
199 ksteube 1315 n=0;
200     numNeighbors=0;
201 gross 1735 for (p=0;p<mpiSize;p++) {
202     if (snd_len[p] > 0) {
203 jfenwick 3259 #ifdef ESYS_MPI
204 gross 1735 MPI_Irecv(&(shared[n]),snd_len[p],
205     MPI_INT, p, mpi_info->msg_tag_counter+p, mpi_info->comm, &mpi_requests[count]);
206     #endif
207     count++;
208     neighbor[numNeighbors]=p;
209     offsetInShared[numNeighbors]=n;
210     numNeighbors++;
211     n+=snd_len[p];
212     }
213     }
214     mpi_info->msg_tag_counter+=mpi_info->size;
215     offsetInShared[numNeighbors]=n;
216 jfenwick 3259 #ifdef ESYS_MPI
217 gross 1735 MPI_Waitall(count,mpi_requests,mpi_stati);
218     #endif
219     /* map global ids to local id's */
220     #pragma omp parallel for private(i) schedule(static)
221     for (i=0;i<offsetInShared[numNeighbors];++i) {
222     shared[i]=locDOFMask[shared[i]-min_DOF];
223     }
224 ksteube 1315
225 gross 1562 snd_shcomp=Paso_SharedComponents_alloc(myLastDOF-myFirstDOF,numNeighbors,neighbor,shared,offsetInShared,1,0,dof_distribution->mpi_info);
226 ksteube 1315
227 gross 1552 if (Finley_noError()) this_connector=Paso_Connector_alloc(snd_shcomp,rcv_shcomp);
228 ksteube 1315 /* assign new DOF labels to nodes */
229     Paso_SharedComponents_free(rcv_shcomp);
230     Paso_SharedComponents_free(snd_shcomp);
231     }
232 jfenwick 4327 delete[] rcv_len;
233     delete[] snd_len;
234     delete[] mpi_requests;
235     delete[] mpi_stati;
236     delete[] wanted_DOFs;
237     delete[] nodeMask;
238     delete[] neighbor;
239     delete[] shared;
240     delete[] offsetInShared;
241     delete[] locDOFMask;
242 ksteube 1315 if (Finley_noError()) {
243     if (use_reduced_elements) {
244     in->Nodes->reducedDegreesOfFreedomMapping=this_mapping;
245 gross 1552 in->Nodes->reducedDegreesOfFreedomConnector=this_connector;
246 ksteube 1315 } else {
247     in->Nodes->degreesOfFreedomMapping=this_mapping;
248 gross 1552 in->Nodes->degreesOfFreedomConnector=this_connector;
249 ksteube 1315 }
250     } else {
251     Finley_NodeMapping_free(this_mapping);
252 gross 1552 Paso_Connector_free(this_connector);
253 ksteube 1315
254     }
255     }
256 ksteube 1347
257 gross 1749 void Finley_Mesh_createMappings(Finley_Mesh* mesh, index_t* dof_distribution, index_t* node_distribution) {
258 ksteube 1347 int i;
259     index_t *maskReducedNodes=NULL, *indexReducedNodes=NULL;
260     dim_t numReducedNodes;
261    
262 jfenwick 4327 maskReducedNodes=new index_t[mesh->Nodes->numNodes];
263     indexReducedNodes=new index_t[mesh->Nodes->numNodes];
264 ksteube 1347
265     if (! ( Finley_checkPtr(maskReducedNodes) || Finley_checkPtr(indexReducedNodes) ) ) {
266     #pragma omp parallel for private(i) schedule(static)
267     for (i=0;i<mesh->Nodes->numNodes;++i) maskReducedNodes[i]=-1;
268     Finley_Mesh_markNodes(maskReducedNodes,0,mesh,TRUE);
269 gross 1804
270 ksteube 1347 numReducedNodes=Finley_Util_packMask(mesh->Nodes->numNodes,maskReducedNodes,indexReducedNodes);
271 gross 1749 if (Finley_noError()) Finley_Mesh_createNodeFileMappings(mesh,numReducedNodes,indexReducedNodes,dof_distribution, node_distribution);
272 ksteube 1347 }
273    
274 jfenwick 4327 delete[] maskReducedNodes;
275     delete[] indexReducedNodes;
276 ksteube 1347 }
277    
278 gross 1749 void Finley_Mesh_createNodeFileMappings(Finley_Mesh* in, dim_t numReducedNodes, index_t* indexReducedNodes, index_t* dof_first_component, index_t* nodes_first_component) {
279 ksteube 1315
280    
281     index_t myFirstDOF, myLastDOF, myFirstNode, myLastNode, *reduced_dof_first_component=NULL, *nodeMask=NULL,
282 gross 1749 *reduced_nodes_first_component=NULL, k,*maskMyReducedDOF=NULL, *indexMyReducedDOF=NULL, *maskMyReducedNodes=NULL, *indexMyReducedNodes=NULL;
283 phornby 1920 dim_t myNumDOF, myNumNodes, myNumReducedNodes, myNumReducedDOF, globalNumReducedNodes, globalNumReducedDOF,i,mpiSize;
284 jfenwick 3259 Esys_MPI_rank myRank;
285 ksteube 1315
286     mpiSize=in->Nodes->MPIInfo->size;
287     myRank=in->Nodes->MPIInfo->rank;
288 gross 1804
289 ksteube 1315 /* mark the nodes used by the reduced mesh */
290    
291 jfenwick 4327 reduced_dof_first_component=new index_t[mpiSize+1];
292     reduced_nodes_first_component=new index_t[mpiSize+1];
293 ksteube 1315
294 gross 1749 if (! ( Finley_checkPtr(reduced_dof_first_component) || Finley_checkPtr(reduced_nodes_first_component) ) ) {
295 ksteube 1315
296     myFirstDOF=dof_first_component[myRank];
297     myLastDOF=dof_first_component[myRank+1];
298     myNumDOF=myLastDOF-myFirstDOF;
299 gross 1749
300 ksteube 1315 myFirstNode=nodes_first_component[myRank];
301     myLastNode=nodes_first_component[myRank+1];
302     myNumNodes=myLastNode-myFirstNode;
303    
304 jfenwick 4327 maskMyReducedDOF=new index_t[myNumDOF];
305     indexMyReducedDOF=new index_t[myNumDOF];
306     maskMyReducedNodes=new index_t[myNumNodes];
307     indexMyReducedNodes=new index_t[myNumNodes];
308 ksteube 1315
309     if (! ( Finley_checkPtr(maskMyReducedDOF) || Finley_checkPtr(indexMyReducedDOF) || Finley_checkPtr(maskMyReducedNodes) || Finley_checkPtr(indexMyReducedNodes) ) ) {
310    
311     #pragma omp parallel private(i)
312     {
313     #pragma omp for schedule(static)
314     for (i=0;i<myNumNodes;++i) maskMyReducedNodes[i]=-1;
315     #pragma omp for schedule(static)
316     for (i=0;i<myNumDOF;++i) maskMyReducedDOF[i]=-1;
317     #pragma omp for private(k) schedule(static)
318     for (i=0;i<numReducedNodes;++i) {
319     k=in->Nodes->globalNodesIndex[indexReducedNodes[i]];
320     if ( (k>=myFirstNode) && (myLastNode>k) ) maskMyReducedNodes[k-myFirstNode]=i;
321     k=in->Nodes->globalDegreesOfFreedom[indexReducedNodes[i]];
322 gross 1735 if ( (k>=myFirstDOF) && (myLastDOF>k) ) {
323     maskMyReducedDOF[k-myFirstDOF]=i;
324     }
325 ksteube 1315 }
326     }
327     myNumReducedNodes=Finley_Util_packMask(myNumNodes,maskMyReducedNodes,indexMyReducedNodes);
328     myNumReducedDOF=Finley_Util_packMask(myNumDOF,maskMyReducedDOF,indexMyReducedDOF);
329    
330 jfenwick 3259 #ifdef ESYS_MPI
331 ksteube 1315 MPI_Allgather(&myNumReducedNodes,1,MPI_INT,reduced_nodes_first_component,1,MPI_INT,in->Nodes->MPIInfo->comm);
332     MPI_Allgather(&myNumReducedDOF,1,MPI_INT,reduced_dof_first_component,1,MPI_INT,in->Nodes->MPIInfo->comm);
333     #else
334     reduced_nodes_first_component[0]=myNumReducedNodes;
335     reduced_dof_first_component[0]=myNumReducedDOF;
336     #endif
337     globalNumReducedNodes=0;
338     globalNumReducedDOF=0;
339     for (i=0;i<mpiSize;++i) {
340     k=reduced_nodes_first_component[i];
341     reduced_nodes_first_component[i]=globalNumReducedNodes;
342     globalNumReducedNodes+=k;
343    
344     k=reduced_dof_first_component[i];
345     reduced_dof_first_component[i]=globalNumReducedDOF;
346     globalNumReducedDOF+=k;
347     }
348     reduced_nodes_first_component[mpiSize]=globalNumReducedNodes;
349     reduced_dof_first_component[mpiSize]=globalNumReducedDOF;
350     /* ==== distribution of Nodes ===============================*/
351     in->Nodes->nodesDistribution=Paso_Distribution_alloc(in->Nodes->MPIInfo,nodes_first_component,1,0);
352    
353 gross 1749 /* ==== distribution of DOFs ===============================*/
354 ksteube 1315 in->Nodes->degreesOfFreedomDistribution=Paso_Distribution_alloc(in->Nodes->MPIInfo,dof_first_component,1,0);
355    
356     /* ==== distribution of reduced Nodes ===============================*/
357     in->Nodes->reducedNodesDistribution=Paso_Distribution_alloc(in->Nodes->MPIInfo,reduced_nodes_first_component,1,0);
358    
359     /* ==== distribution of reduced DOF ===============================*/
360     in->Nodes->reducedDegreesOfFreedomDistribution=Paso_Distribution_alloc(in->Nodes->MPIInfo,reduced_dof_first_component,1,0);
361     }
362 jfenwick 4327 delete[] maskMyReducedDOF;
363     delete[] indexMyReducedDOF;
364     delete[] maskMyReducedNodes;
365     delete[] indexMyReducedNodes;
366 ksteube 1315 }
367 jfenwick 4327 delete[] reduced_dof_first_component;
368     delete[] reduced_nodes_first_component;
369 ksteube 1315
370 jfenwick 4327 nodeMask=new index_t[in->Nodes->numNodes];
371 ksteube 1315 if (! Finley_checkPtr(nodeMask) && Finley_noError()) {
372    
373     /* ==== nodes mapping which is a dummy structure ======== */
374     #pragma omp parallel for private(i) schedule(static)
375     for (i=0;i<in->Nodes->numNodes;++i) nodeMask[i]=i;
376     in->Nodes->nodesMapping=Finley_NodeMapping_alloc(in->Nodes->numNodes,nodeMask,UNUSED);
377    
378     /* ==== mapping between nodes and reduced nodes ========== */
379     #pragma omp parallel for private(i) schedule(static)
380     for (i=0;i<in->Nodes->numNodes;++i) nodeMask[i]=UNUSED;
381     #pragma omp parallel for private(i) schedule(static)
382     for (i=0;i<numReducedNodes;++i) nodeMask[indexReducedNodes[i]]=i;
383     in->Nodes->reducedNodesMapping=Finley_NodeMapping_alloc(in->Nodes->numNodes,nodeMask,UNUSED);
384     }
385 jfenwick 4327 delete[] nodeMask;
386 gross 1552 /* ==== mapping between nodes and DOFs + DOF connector ========== */
387 jfenwick 3259 if ( Finley_noError()) Finley_Mesh_createDOFMappingAndCoupling(in,FALSE);
388 gross 1552 /* ==== mapping between nodes and reduced DOFs + reduced DOF connector ========== */
389 jfenwick 3259 if ( Finley_noError()) Finley_Mesh_createDOFMappingAndCoupling(in,TRUE);
390 ksteube 1315
391     /* get the Ids for DOFs and reduced nodes */
392     if (Finley_noError()) {
393     #pragma omp parallel private(i)
394     {
395     #pragma omp for
396     for (i=0;i<in->Nodes->reducedNodesMapping->numTargets;++i) in->Nodes->reducedNodesId[i]=in->Nodes->Id[in->Nodes->reducedNodesMapping->map[i]];
397     #pragma omp for
398     for (i=0;i<in->Nodes->degreesOfFreedomMapping->numTargets;++i) in->Nodes->degreesOfFreedomId[i]=in->Nodes->Id[in->Nodes->degreesOfFreedomMapping->map[i]];
399     #pragma omp for
400     for (i=0;i<in->Nodes->reducedDegreesOfFreedomMapping->numTargets;++i) in->Nodes->reducedDegreesOfFreedomId[i]=in->Nodes->Id[in->Nodes->reducedDegreesOfFreedomMapping->map[i]];
401     }
402     } else {
403     Finley_NodeMapping_free(in->Nodes->nodesMapping);
404     Finley_NodeMapping_free(in->Nodes->reducedNodesMapping);
405     Finley_NodeMapping_free(in->Nodes->degreesOfFreedomMapping);
406     Finley_NodeMapping_free(in->Nodes->reducedDegreesOfFreedomMapping);
407     Paso_Distribution_free(in->Nodes->nodesDistribution);
408     Paso_Distribution_free(in->Nodes->reducedNodesDistribution);
409     Paso_Distribution_free(in->Nodes->degreesOfFreedomDistribution);
410     Paso_Distribution_free(in->Nodes->reducedDegreesOfFreedomDistribution);
411 gross 1552 Paso_Connector_free(in->Nodes->degreesOfFreedomConnector);
412     Paso_Connector_free(in->Nodes->reducedDegreesOfFreedomConnector);
413 ksteube 1315 in->Nodes->nodesMapping=NULL;
414     in->Nodes->reducedNodesMapping=NULL;
415     in->Nodes->degreesOfFreedomMapping=NULL;
416     in->Nodes->reducedDegreesOfFreedomMapping=NULL;
417     in->Nodes->nodesDistribution=NULL;
418     in->Nodes->reducedNodesDistribution=NULL;
419     in->Nodes->degreesOfFreedomDistribution=NULL;
420     in->Nodes->reducedDegreesOfFreedomDistribution=NULL;
421 gross 1552 in->Nodes->degreesOfFreedomConnector=NULL;
422     in->Nodes->reducedDegreesOfFreedomConnector=NULL;
423 ksteube 1315 }
424     }
425    

  ViewVC Help
Powered by ViewVC 1.1.26