escript  Revision_
escriptcore/src/IndexList.h
Go to the documentation of this file.
1 
2 /*****************************************************************************
3 *
4 * Copyright (c) 2003-2020 by The University of Queensland
5 * http://www.uq.edu.au
6 *
7 * Primary Business: Queensland, Australia
8 * Licensed under the Apache License, version 2.0
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Development until 2012 by Earth Systems Science Computational Center (ESSCC)
12 * Development 2012-2013 by School of Earth Sciences
13 * Development from 2014-2017 by Centre for Geoscience Computing (GeoComp)
14 * Development from 2019 by School of Earth and Environmental Sciences
15 **
16 *****************************************************************************/
17 
18 #ifndef __ESCRIPT_INDEXLIST_H__
19 #define __ESCRIPT_INDEXLIST_H__
20 
21 #include <escript/DataTypes.h>
22 
23 // pre-reserving saves time under OpenMP. The 85 is a value taken over
24 // from revision ~101 by jgs.
25 #define ESYS_INDEXLIST_LENGTH 85
26 
27 namespace escript {
28 
29 struct IndexList {
30  IndexList() : n(0), extension(NULL) {}
31  ~IndexList() { delete extension; }
32 
36 
38  inline void insertIndex(DataTypes::index_t index)
39  {
40  for (DataTypes::dim_t i=0; i<n; i++) {
41  if (m_list[i] == index)
42  return;
43  }
44  if (n < ESYS_INDEXLIST_LENGTH) {
45  m_list[n++] = index;
46  } else {
47  if (extension == NULL)
48  extension = new IndexList();
49  extension->insertIndex(index);
50  }
51  }
52 
55  DataTypes::index_t range_max) const
56  {
57  DataTypes::dim_t out=0;
58  for (DataTypes::dim_t i=0; i < n; i++) {
59  if (m_list[i] >= range_min && range_max > m_list[i])
60  ++out;
61  }
62  if (extension)
63  out += extension->count(range_min, range_max);
64  return out;
65  }
66 
68  inline void toArray(DataTypes::index_t* array,
69  DataTypes::index_t range_min, DataTypes::index_t range_max,
70  DataTypes::index_t index_offset) const
71  {
72  DataTypes::index_t idx = 0;
73  for (DataTypes::dim_t i=0; i < n; i++) {
74  if (m_list[i] >= range_min && range_max > m_list[i]) {
75  array[idx] = m_list[i]+index_offset;
76  ++idx;
77  }
78  }
79  if (extension)
80  extension->toArray(&array[idx], range_min, range_max, index_offset);
81  }
82 };
83 
84 } // namespace escript
85 
86 #endif // __ESCRIPT_INDEXLIST_H__
87 
dudley::ElementFile::numShapes
int numShapes
number of shape functions
Definition: dudley/src/ElementFile.h:159
finley::ElementFile::minColor
index_t minColor
minimum color value
Definition: finley/src/ElementFile.h:153
escript::IndexList::toArray
void toArray(DataTypes::index_t *array, DataTypes::index_t range_min, DataTypes::index_t range_max, DataTypes::index_t index_offset) const
index list to array
Definition: escriptcore/src/IndexList.h:68
INDEX2
#define INDEX2(_X1_, _X2_, _N1_)
Definition: index.h:23
escript::IndexList::insertIndex
void insertIndex(DataTypes::index_t index)
inserts row index into the IndexList in if it does not exist
Definition: escriptcore/src/IndexList.h:38
dudley::ElementFile::Nodes
index_t * Nodes
Nodes[INDEX(k, i, numNodes)] is the k-th node in the i-th element.
Definition: dudley/src/ElementFile.h:133
dudley::IndexList_insertElementsWithRowRangeNoMainDiagonal
void IndexList_insertElementsWithRowRangeNoMainDiagonal(IndexList *indexList, index_t firstRow, index_t lastRow, const ElementFile *elements, const index_t *map)
Definition: dudley/src/IndexList.cpp:63
finley::const_ReferenceElement_ptr
boost::shared_ptr< const ReferenceElement > const_ReferenceElement_ptr
Definition: ReferenceElements.h:216
finley::ElementFile::Nodes
index_t * Nodes
Definition: finley/src/ElementFile.h:144
dudley::IndexList_insertElements
void IndexList_insertElements(IndexList *index_list, const ElementFile *elements, const index_t *map)
Definition: dudley/src/IndexList.cpp:35
escript::IndexList::count
DataTypes::dim_t count(DataTypes::index_t range_min, DataTypes::index_t range_max) const
counts the number of row indices in the IndexList in
Definition: escriptcore/src/IndexList.h:54
dudley::ElementFile::minColor
index_t minColor
minimum color value
Definition: dudley/src/ElementFile.h:141
finley::ElementFile::numElements
dim_t numElements
number of elements
Definition: finley/src/ElementFile.h:122
dudley
A suite of factory methods for creating 2D and 3D dudley domains.
Definition: dudley/src/Assemble.h:32
escript::DataTypes::dim_t
index_t dim_t
Definition: DataTypes.h:66
dudley::ElementFile::numElements
dim_t numElements
number of elements
Definition: dudley/src/ElementFile.h:113
escript::IndexList::m_list
DataTypes::index_t m_list[85]
Definition: escriptcore/src/IndexList.h:33
dudley::ElementFile
Definition: dudley/src/ElementFile.h:53
ElementFile.h
IndexList.h
finley::ElementFile::Color
index_t * Color
Definition: finley/src/ElementFile.h:150
escript::IndexList::extension
IndexList * extension
Definition: escriptcore/src/IndexList.h:35
escript::IndexList::n
DataTypes::dim_t n
Definition: escriptcore/src/IndexList.h:34
escript::DataTypes::index_t
int index_t
type for array/matrix indices used both globally and on each rank
Definition: DataTypes.h:61
escript
Definition: AbstractContinuousDomain.cpp:23
escript::IndexList::IndexList
IndexList()
Definition: escriptcore/src/IndexList.h:30
escript::IndexList::~IndexList
~IndexList()
Definition: escriptcore/src/IndexList.h:31
finley::IndexList_insertElementsWithRowRangeNoMainDiagonal
void IndexList_insertElementsWithRowRangeNoMainDiagonal(IndexList *index_list, index_t firstRow, index_t lastRow, ElementFile *elements, index_t *row_map, index_t *col_map)
Definition: finley/src/IndexList.cpp:89
finley::IndexList_insertElements
void IndexList_insertElements(IndexList *index_list, ElementFile *elements, bool reduce_row_order, const index_t *row_map, bool reduce_col_order, const index_t *col_map)
Definition: finley/src/IndexList.cpp:36
finley::ElementFile
Definition: finley/src/ElementFile.h:63
ESYS_INDEXLIST_LENGTH
#define ESYS_INDEXLIST_LENGTH
Definition: escriptcore/src/IndexList.h:25
dudley::ElementFile::Color
index_t * Color
Definition: dudley/src/ElementFile.h:138
escript::IndexList
Definition: escriptcore/src/IndexList.h:29
finley::ElementFile::referenceElementSet
const_ReferenceElementSet_ptr referenceElementSet
the reference element to be used
Definition: finley/src/ElementFile.h:120
finley
A suite of factory methods for creating various finley domains.
Definition: finley/src/Assemble.h:32
dudley::ElementFile::numNodes
int numNodes
number of nodes per element
Definition: dudley/src/ElementFile.h:130
finley::ElementFile::numNodes
int numNodes
number of nodes per element
Definition: finley/src/ElementFile.h:138