~vcs-imports/escript-finley/trunk

« back to all changes in this revision

Viewing changes to dudley/src/ElementFile_markNodes.c

  • Committer: jfenwick
  • Date: 2010-10-11 01:48:14 UTC
  • Revision ID: svn-v4:77569008-7704-0410-b7a0-a92fef0b09fd:trunk:3259
Merging dudley and scons updates from branches

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
/*******************************************************
 
3
*
 
4
* Copyright (c) 2003-2010 by University of Queensland
 
5
* Earth Systems Science Computational Center (ESSCC)
 
6
* http://www.uq.edu.au/esscc
 
7
*
 
8
* Primary Business: Queensland, Australia
 
9
* Licensed under the Open Software License version 3.0
 
10
* http://www.opensource.org/licenses/osl-3.0.php
 
11
*
 
12
*******************************************************/
 
13
 
 
14
/**************************************************************/
 
15
 
 
16
/*   Dudley: ElementFile */
 
17
 
 
18
/*   mark the used nodes with offeset: */
 
19
 
 
20
/**************************************************************/
 
21
 
 
22
#include "ElementFile.h"
 
23
 
 
24
/**************************************************************/
 
25
 
 
26
void Dudley_ElementFile_markNodes(index_t * mask, index_t offset, dim_t numNodes, Dudley_ElementFile * in,
 
27
                                  bool_t useLinear)
 
28
{
 
29
    dim_t i, NN, e;
 
30
    if (in != NULL)
 
31
    {
 
32
        NN = in->numNodes;
 
33
#pragma omp parallel for private(e,i) schedule(static)
 
34
        for (e = 0; e < in->numElements; e++)
 
35
        {
 
36
            for (i = 0; i < NN; i++)
 
37
            {
 
38
                mask[in->Nodes[INDEX2(i, e, NN)] - offset] = 1;
 
39
            }
 
40
        }
 
41
    }
 
42
}
 
43
 
 
44
void Dudley_ElementFile_markDOFsConnectedToRange(index_t * mask, index_t offset, index_t marker, index_t firstDOF,
 
45
                                                 index_t lastDOF, index_t * dofIndex, Dudley_ElementFile * in,
 
46
                                                 bool_t useLinear)
 
47
{
 
48
    dim_t i, NN, e, j;
 
49
    index_t color;
 
50
    register index_t k;
 
51
 
 
52
    if (in != NULL)
 
53
    {
 
54
        NN = in->numNodes;
 
55
        for (color = in->minColor; color <= in->maxColor; color++)
 
56
        {
 
57
#pragma omp parallel for private(e,i,j,k) schedule(static)
 
58
            for (e = 0; e < in->numElements; e++)
 
59
            {
 
60
                if (in->Color[e] == color)
 
61
                {
 
62
                    for (i = 0; i < NN; i++)
 
63
                    {
 
64
                        k = dofIndex[in->Nodes[INDEX2(i, e, NN)]];
 
65
                        if ((firstDOF <= k) && (k < lastDOF))
 
66
                        {
 
67
                            for (j = 0; j < NN; j++)
 
68
                                mask[dofIndex[in->Nodes[INDEX2(j, e, NN)]] - offset] = marker;
 
69
                            break;
 
70
                        }
 
71
                    }
 
72
                }
 
73
            }
 
74
        }
 
75
    }
 
76
}