Am Montag, 13. Mai 2022, finden Wartungsarbeiten am Gitlab-Server (Update auf neue Version statt). Der Dienst wird daher am Montag für einige Zeit nicht verfügbar sein.
On Monday, May 13th 2022, the Gitlab server will be updated. The service will therefore not be accessible for some time on Monday.

DofComm.cc 2.05 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//
// Software License for AMDiS
//
// Copyright (c) 2010 Dresden University of Technology 
// All rights reserved.
// Authors: Simon Vey, Thomas Witkowski et al.
//
// This file is part of AMDiS
//
// See also license.opensource.txt in the distribution.


#include "DofComm.h"

namespace AMDiS {

  using namespace std;

  void DofComm::removeEmpty()
  {
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
    FUNCNAME("DofComm::removeEmpty()");

    for (unsigned int i = 0; i < data.size(); i++) {
      DataIter dit = data[i].begin();
      while (dit != data[i].end()) {
	FeMapIter it = dit->second.begin();
	while (it != dit->second.end()) {
	  if (it->second.size() == 0) {
	    const FiniteElemSpace *fe = it->first;
	    ++it;
	    dit->second.erase(fe);
	  } else
	    ++it;
	}
	
	if (dit->second.size() == 0)
	  data[i].erase(dit++);
	else
	  ++dit;
40
41
42
43
      }
    }
  }

44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63

  int DofComm::getNumberDofs(int level, const FiniteElemSpace *feSpace)
  {
    FUNCNAME("DofComm::getNumberDofs()");

    TEST_EXIT_DBG(level < data.size())("Should not happen!\n");

    DofContainerSet dofs;

    for (DataIter rankIt = data[level].begin(); 
	 rankIt != data[level].end(); ++rankIt)
      for (FeMapIter feIt = rankIt->second.begin();
	   feIt != rankIt->second.end(); ++feIt)
	if (feIt->first == feSpace)
	  dofs.insert(feIt->second.begin(), feIt->second.end());

    return static_cast<int>(dofs.size());
  }


64
  bool DofComm::Iterator::setNextFeMap()
65
  {
66
67
    FUNCNAME("DofComm::Iterator::setNextFeMap()");

68
    if (dataIter != dofComm.data[traverseLevel].end()) {
69
70
      TEST_EXIT_DBG(dataIter->second.size())("Should not happen!\n");

71
72
73
      feMapIter = dataIter->second.begin();
      
      if (traverseFeSpace != NULL) {
74
75
	if ((dataIter->second.count(traverseFeSpace) == 0))
	  return false;
76
77
78
79
80
81
82
83
84
85
	
	while (feMapIter->first != traverseFeSpace &&
	       feMapIter != dataIter->second.end())
	  ++feMapIter;
	
	TEST_EXIT_DBG(feMapIter != dataIter->second.end() &&
		      feMapIter->first == traverseFeSpace)
	  ("Should not happen!\n");
      }
      
86
      dofIter = feMapIter->second.begin();      
87
88
      dofCounter = 0;
    }
89
90

    return true;
91
92
93
  }

}