2
/*******************************************************
4
* Copyright (c) 2003-2010 by University of Queensland
5
* Earth Systems Science Computational Center (ESSCC)
6
* http://www.uq.edu.au/esscc
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
12
*******************************************************/
14
/**************************************************************/
16
/* Dudley: Mesh: ElementFile */
18
/* set tags to newTag where mask>0 */
20
/**************************************************************/
22
#include "ElementFile.h"
26
/**************************************************************/
28
void Dudley_ElementFile_setTags(Dudley_ElementFile * self, const int newTag, escriptDataC * mask)
31
dim_t numElements, numQuad;
32
register __const double *mask_array;
33
register bool_t check;
37
numElements = self->numElements;
39
numQuad = Dudley_Assemble_reducedIntegrationOrder(mask) ? 1 : (self->numDim + 1);
40
if (1 != getDataPointSize(mask))
42
Dudley_setError(TYPE_ERROR, "Dudley_ElementFile_setTags: number of components of mask is 1.");
44
else if (!numSamplesEqual(mask, numQuad, numElements))
46
Dudley_setError(TYPE_ERROR, "Dudley_ElementFile_setTags: illegal number of samples of mask Data object");
49
/* now we can start */
55
#pragma omp parallel private(n,check,mask_array)
57
#pragma omp for schedule(static)
58
for (n = 0; n < numElements; n++)
60
mask_array = getSampleDataRO(mask, n);
61
if (mask_array[0] > 0)
62
self->Tag[n] = newTag;
68
#pragma omp parallel private(q,n,check,mask_array)
70
#pragma omp for schedule(static)
71
for (n = 0; n < numElements; n++)
73
mask_array = getSampleDataRO(mask, n);
75
for (q = 0; q < numQuad; q++)
76
check = check || mask_array[q];
78
self->Tag[n] = newTag;
82
Dudley_ElementFile_setTagsInUse(self);