1 |
|
2 |
/* $Id$ */ |
3 |
|
4 |
/******************************************************* |
5 |
* |
6 |
* Copyright 2003-2007 by ACceSS MNRF |
7 |
* Copyright 2007 by University of Queensland |
8 |
* |
9 |
* http://esscc.uq.edu.au |
10 |
* Primary Business: Queensland, Australia |
11 |
* Licensed under the Open Software License version 3.0 |
12 |
* http://www.opensource.org/licenses/osl-3.0.php |
13 |
* |
14 |
*******************************************************/ |
15 |
|
16 |
/**************************************************************/ |
17 |
|
18 |
/* Finley: ElementFile */ |
19 |
|
20 |
/* mark the used nodes with offeset: */ |
21 |
|
22 |
/**************************************************************/ |
23 |
|
24 |
#include "ElementFile.h" |
25 |
|
26 |
/**************************************************************/ |
27 |
|
28 |
void Finley_ElementFile_markNodes(index_t* mask,index_t offset,Finley_ElementFile* in,bool_t useLinear) { |
29 |
dim_t i,NN,NN2,e; |
30 |
index_t *lin_node,*id=NULL; |
31 |
if (in!=NULL) { |
32 |
id=TMPMEMALLOC(in->ReferenceElement->Type->numNodes, index_t); |
33 |
if (! Finley_checkPtr(id) ){ |
34 |
for (i=0;i<in->ReferenceElement->Type->numNodes;i++) id[i]=i; |
35 |
if (useLinear) { |
36 |
NN=in->LinearReferenceElement->Type->numNodes; |
37 |
lin_node=in->ReferenceElement->Type->linearNodes; |
38 |
} else { |
39 |
NN=in->ReferenceElement->Type->numNodes; |
40 |
lin_node=id; |
41 |
} |
42 |
NN2=in->numNodes; |
43 |
#pragma omp parallel for private(e,i) schedule(static) |
44 |
for (e=0;e<in->numElements;e++) { |
45 |
for (i=0;i<NN;i++) { |
46 |
mask[in->Nodes[INDEX2(lin_node[i],e,NN2)]-offset]=1; |
47 |
} |
48 |
} |
49 |
TMPMEMFREE(id); |
50 |
} |
51 |
} |
52 |
} |
53 |
|
54 |
void Finley_ElementFile_markDOFsConnectedToRange(index_t* mask,index_t offset,index_t marker,index_t firstDOF,index_t lastDOF,index_t *dofIndex,Finley_ElementFile*in ,bool_t useLinear) |
55 |
{ |
56 |
dim_t i,NN,NN2,e,j; |
57 |
index_t color,*lin_node,*id=NULL,k; |
58 |
if (in!=NULL) { |
59 |
id=TMPMEMALLOC(in->ReferenceElement->Type->numNodes, index_t); |
60 |
if (! Finley_checkPtr(id) ){ |
61 |
for (i=0;i<in->ReferenceElement->Type->numNodes;i++) id[i]=i; |
62 |
if (useLinear) { |
63 |
NN=in->LinearReferenceElement->Type->numNodes; |
64 |
lin_node=in->ReferenceElement->Type->linearNodes; |
65 |
} else { |
66 |
NN=in->ReferenceElement->Type->numNodes; |
67 |
lin_node=id; |
68 |
} |
69 |
NN2=in->numNodes; |
70 |
for (color=in->minColor;color<=in->maxColor;color++) { |
71 |
#pragma omp parallel for private(e,i,j,k) schedule(static) |
72 |
for (e=0;e<in->numElements;e++) { |
73 |
if (in->Color[e]==color) { |
74 |
for (i=0;i<NN;i++) { |
75 |
k=dofIndex[in->Nodes[INDEX2(lin_node[i],e,NN2)]]; |
76 |
if ( (firstDOF<=k) && (k<lastDOF) ) { |
77 |
for (j=0;j<NN;j++) mask[dofIndex[in->Nodes[INDEX2(lin_node[j],e,NN2)]]-offset]=marker; |
78 |
break; |
79 |
} |
80 |
} |
81 |
} |
82 |
} |
83 |
} |
84 |
} |
85 |
TMPMEMFREE(id); |
86 |
} |
87 |
} |
88 |
|