Commit dd8ffdf7 authored by Thomas Witkowski's avatar Thomas Witkowski

* big update

parent 6020c0d7
......@@ -84,6 +84,7 @@ $(SOURCE_DIR)/ProblemVec.h $(SOURCE_DIR)/ProblemVec.cc \
$(SOURCE_DIR)/DualTraverse.h $(SOURCE_DIR)/DualTraverse.cc \
$(SOURCE_DIR)/ElementPartition_ED.h $(SOURCE_DIR)/SurfacePartition_ED.h \
$(SOURCE_DIR)/ElementData.h $(SOURCE_DIR)/ElementData.cc \
$(SOURCE_DIR)/ComponentTraverseInfo.h $(SOURCE_DIR)/ComponentTraverseInfo.cc \
$(SOURCE_DIR)/CreatorMap.h $(SOURCE_DIR)/CreatorMap.hh $(SOURCE_DIR)/CreatorMap.cc \
$(SOURCE_DIR)/CreatorInterface.h \
$(SOURCE_DIR)/ElementFunction.h \
......
......@@ -112,6 +112,8 @@ am__libamdis_la_SOURCES_DIST = $(PARALLEL_DIR)/ConditionalEstimator.h \
$(SOURCE_DIR)/ElementPartition_ED.h \
$(SOURCE_DIR)/SurfacePartition_ED.h \
$(SOURCE_DIR)/ElementData.h $(SOURCE_DIR)/ElementData.cc \
$(SOURCE_DIR)/ComponentTraverseInfo.h \
$(SOURCE_DIR)/ComponentTraverseInfo.cc \
$(SOURCE_DIR)/CreatorMap.h $(SOURCE_DIR)/CreatorMap.hh \
$(SOURCE_DIR)/CreatorMap.cc $(SOURCE_DIR)/CreatorInterface.h \
$(SOURCE_DIR)/ElementFunction.h \
......@@ -270,7 +272,8 @@ am_libamdis_la_OBJECTS = $(am__objects_1) \
libamdis_la-StandardProblemIteration.lo \
libamdis_la-ProblemScal.lo libamdis_la-ProblemVec.lo \
libamdis_la-DualTraverse.lo libamdis_la-ElementData.lo \
libamdis_la-CreatorMap.lo libamdis_la-ProblemInterpolScal.lo \
libamdis_la-ComponentTraverseInfo.lo libamdis_la-CreatorMap.lo \
libamdis_la-ProblemInterpolScal.lo \
libamdis_la-ProblemInterpolVec.lo libamdis_la-MacroReader.lo \
libamdis_la-ValueReader.lo libamdis_la-Projection.lo \
libamdis_la-SubAssembler.lo libamdis_la-ZeroOrderAssembler.lo \
......@@ -525,6 +528,7 @@ $(SOURCE_DIR)/ProblemVec.h $(SOURCE_DIR)/ProblemVec.cc \
$(SOURCE_DIR)/DualTraverse.h $(SOURCE_DIR)/DualTraverse.cc \
$(SOURCE_DIR)/ElementPartition_ED.h $(SOURCE_DIR)/SurfacePartition_ED.h \
$(SOURCE_DIR)/ElementData.h $(SOURCE_DIR)/ElementData.cc \
$(SOURCE_DIR)/ComponentTraverseInfo.h $(SOURCE_DIR)/ComponentTraverseInfo.cc \
$(SOURCE_DIR)/CreatorMap.h $(SOURCE_DIR)/CreatorMap.hh $(SOURCE_DIR)/CreatorMap.cc \
$(SOURCE_DIR)/CreatorInterface.h \
$(SOURCE_DIR)/ElementFunction.h \
......@@ -783,6 +787,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libamdis_la-CoarseningManager1d.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libamdis_la-CoarseningManager2d.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libamdis_la-CoarseningManager3d.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libamdis_la-ComponentTraverseInfo.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libamdis_la-ConditionalEstimator.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libamdis_la-CreatorMap.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libamdis_la-DOFAdmin.Plo@am__quote@
......@@ -1082,6 +1087,13 @@ libamdis_la-ElementData.lo: $(SOURCE_DIR)/ElementData.cc
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libamdis_la_CXXFLAGS) $(CXXFLAGS) -c -o libamdis_la-ElementData.lo `test -f '$(SOURCE_DIR)/ElementData.cc' || echo '$(srcdir)/'`$(SOURCE_DIR)/ElementData.cc
libamdis_la-ComponentTraverseInfo.lo: $(SOURCE_DIR)/ComponentTraverseInfo.cc
@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libamdis_la_CXXFLAGS) $(CXXFLAGS) -MT libamdis_la-ComponentTraverseInfo.lo -MD -MP -MF "$(DEPDIR)/libamdis_la-ComponentTraverseInfo.Tpo" -c -o libamdis_la-ComponentTraverseInfo.lo `test -f '$(SOURCE_DIR)/ComponentTraverseInfo.cc' || echo '$(srcdir)/'`$(SOURCE_DIR)/ComponentTraverseInfo.cc; \
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/libamdis_la-ComponentTraverseInfo.Tpo" "$(DEPDIR)/libamdis_la-ComponentTraverseInfo.Plo"; else rm -f "$(DEPDIR)/libamdis_la-ComponentTraverseInfo.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(SOURCE_DIR)/ComponentTraverseInfo.cc' object='libamdis_la-ComponentTraverseInfo.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libamdis_la_CXXFLAGS) $(CXXFLAGS) -c -o libamdis_la-ComponentTraverseInfo.lo `test -f '$(SOURCE_DIR)/ComponentTraverseInfo.cc' || echo '$(srcdir)/'`$(SOURCE_DIR)/ComponentTraverseInfo.cc
libamdis_la-CreatorMap.lo: $(SOURCE_DIR)/CreatorMap.cc
@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libamdis_la_CXXFLAGS) $(CXXFLAGS) -MT libamdis_la-CreatorMap.lo -MD -MP -MF "$(DEPDIR)/libamdis_la-CreatorMap.Tpo" -c -o libamdis_la-CreatorMap.lo `test -f '$(SOURCE_DIR)/CreatorMap.cc' || echo '$(srcdir)/'`$(SOURCE_DIR)/CreatorMap.cc; \
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/libamdis_la-CreatorMap.Tpo" "$(DEPDIR)/libamdis_la-CreatorMap.Plo"; else rm -f "$(DEPDIR)/libamdis_la-CreatorMap.Tpo"; exit 1; fi
......
......@@ -55,6 +55,7 @@
#include "MemoryManager.h"
#include "MemoryPool.h"
#include "Mesh.h"
#include "ComponentTraverseInfo.h"
#include "Newton.h"
#include "NewtonS.h"
#include "NonLinSolver.h"
......
......@@ -51,16 +51,16 @@ namespace AMDiS {
*/
AbstractFunction(int degree = 0) :
degree_(degree)
{};
{}
virtual ~AbstractFunction() {};
virtual ~AbstractFunction() {}
/** \brief
* Returns \ref degree_.
*/
inline int getDegree() const {
return degree_;
};
}
/** \brief
* Deligates the evaluation to overriden method f.
......
......@@ -34,30 +34,24 @@ namespace AMDiS {
// ===== class AdaptBase ======================================================
// ============================================================================
/** \brief
* Interface for adaption loops.
*/
/// Interface for adaption loops.
class AdaptBase
{
public:
/** \brief
* Constructor
*/
AdaptBase(const std::string& name,
/// Constructor
AdaptBase(const std::string& sname,
ProblemIterationInterface *problemIteration,
AdaptInfo *adapt,
ProblemTimeInterface *problemTime = NULL,
AdaptInfo *initialAdaptInfo = NULL)
: name_(name),
: name(sname),
problemIteration_(problemIteration),
adaptInfo(adapt),
problemTime_(problemTime),
initialAdaptInfo_(initialAdaptInfo)
{}
/** \brief
* Destructor
*/
/// Destructor
virtual ~AdaptBase() {}
/** \brief
......@@ -66,68 +60,52 @@ namespace AMDiS {
*/
virtual int adapt() = 0;
/** \brief
* Returns \ref name_
*/
/// Returns \ref name
inline const std::string& getName() const {
return name_;
return name;
}
/** \brief
* Returns \ref problemIteration_
*/
/// Returns \ref problemIteration_
inline ProblemIterationInterface *getProblemIteration() {
return problemIteration_;
}
///
inline void setProblemIteration(ProblemIterationInterface *pii) {
problemIteration_ = pii;
}
/** \brief
* Returns \ref adaptInfo
*/
/// Returns \ref adaptInfo
inline AdaptInfo *getAdaptInfo() {
return adaptInfo;
}
/** \brief
* Returns \ref problemTime_
*/
/// Returns \ref problemTime_
inline ProblemTimeInterface *getProblemTime() {
return problemTime_;
}
///
inline void setProblemTime(ProblemTimeInterface *pti) {
problemTime_ = pti;
}
/** \brief
* Returns \ref initialAdaptInfo_
*/
/// Returns \ref initialAdaptInfo_
inline AdaptInfo *getInitialAdaptInfo() {
return initialAdaptInfo_;
}
protected:
/** \brief
* Name of the adaption loop
*/
std::string name_;
/// Name of the adaption loop
std::string name;
/** \brief
* Problem iteration interface
*/
/// Problem iteration interface
ProblemIterationInterface *problemIteration_;
/** \brief
* Main adapt info
*/
/// Main adapt info
AdaptInfo *adaptInfo;
/** \brief
* problem time interface
*/
/// problem time interface
ProblemTimeInterface *problemTime_;
/** \brief
......@@ -136,9 +114,7 @@ namespace AMDiS {
*/
AdaptInfo *initialAdaptInfo_;
/** \brief
* Info level
*/
/// Info level
static int info_;
};
......
......@@ -8,7 +8,7 @@
namespace AMDiS {
AdaptInstationary::AdaptInstationary(const char *name,
AdaptInstationary::AdaptInstationary(const std::string &name,
ProblemIterationInterface *problemStat,
AdaptInfo *info,
ProblemTimeInterface *problemInstat,
......@@ -20,7 +20,7 @@ namespace AMDiS {
{
FUNCNAME("AdaptInstationary::AdaptInstationary()");
initialize(name_);
initialize(name);
fixedTimestep_ = (info->getMinTimestep() == info->getMaxTimestep());
......
......@@ -54,7 +54,7 @@ namespace AMDiS {
* Creates a AdaptInstationary object with the given name for the time
* dependent problem problemInstat.
*/
AdaptInstationary(const char *name_,
AdaptInstationary(const std::string &name,
ProblemIterationInterface *problemStat,
AdaptInfo *info,
ProblemTimeInterface *problemInstat,
......
......@@ -7,9 +7,9 @@
namespace AMDiS {
AdaptStationary::AdaptStationary(const char *name,
AdaptStationary::AdaptStationary(const std::string &name,
ProblemIterationInterface *prob,
AdaptInfo *info)
AdaptInfo *info)
: AdaptBase(name, prob, info)
{
initialize();
......@@ -49,7 +49,7 @@ namespace AMDiS {
{
FUNCNAME("AdaptStationary::initialize()");
GET_PARAMETER(0, name_ + "->info", "%d", &info_);
GET_PARAMETER(0, name + "->info", "%d", &info_);
}
}
......@@ -58,9 +58,9 @@ namespace AMDiS {
/** \brief
* Creates a AdaptStationary object with given name.
*/
AdaptStationary(const char *name,
AdaptStationary(const std::string &name,
ProblemIterationInterface *prob,
AdaptInfo *info);
AdaptInfo *info);
/** \brief
* Destructor
......
......@@ -36,20 +36,18 @@ namespace AMDiS {
{
FUNCNAME("Assembler::calculateElementMatrix()");
if (remember && ((factor != 1.0) || (operat->uhOld))) {
if (remember && ((factor != 1.0) || (operat->uhOld))) {
rememberElMat = true;
}
if (rememberElMat && !elementMatrix)
elementMatrix = NEW ElementMatrix(nRow, nCol);
Element *el = elInfo->getElement();
checkForNewTraverse();
checkQuadratures();
if ((el != lastMatEl && el != lastVecEl) || !operat->isOptimized()) {
initElement(elInfo);
}
......@@ -65,7 +63,7 @@ namespace AMDiS {
return;
}
}
ElementMatrix *mat = rememberElMat ? elementMatrix : userMat;
if (secondOrderAssembler)
......@@ -77,9 +75,10 @@ namespace AMDiS {
if (zeroOrderAssembler)
zeroOrderAssembler->calculateElementMatrix(elInfo, mat);
if (rememberElMat && userMat) {
if (rememberElMat && userMat) {
axpy(factor, *elementMatrix, *userMat);
}
}
void Assembler::calculateElementMatrix(const ElInfo *rowElInfo,
......@@ -98,7 +97,7 @@ namespace AMDiS {
if (rememberElMat && !elementMatrix)
elementMatrix = NEW ElementMatrix(nRow, nCol);
Element *el = rowElInfo->getElement();
Element *el = smallElInfo->getElement();
// checkForNewTraverse();
......@@ -107,7 +106,7 @@ namespace AMDiS {
checkQuadratures();
if ((el != lastMatEl && el != lastVecEl) || !operat->isOptimized()) {
initElement(rowElInfo);
initElement(smallElInfo, largeElInfo);
}
if (el != lastMatEl || !operat->isOptimized()) {
......@@ -124,26 +123,31 @@ namespace AMDiS {
ElementMatrix *mat = rememberElMat ? elementMatrix : userMat;
if (secondOrderAssembler) {
secondOrderAssembler->calculateElementMatrix(rowElInfo, colElInfo,
smallElInfo, largeElInfo, mat);
}
if (firstOrderAssemblerGrdPsi) {
firstOrderAssemblerGrdPsi->calculateElementMatrix(rowElInfo, colElInfo,
smallElInfo, largeElInfo, mat);
}
if (firstOrderAssemblerGrdPhi) {
firstOrderAssemblerGrdPhi->calculateElementMatrix(rowElInfo, colElInfo,
smallElInfo, largeElInfo, mat);
}
if (zeroOrderAssembler) {
zeroOrderAssembler->calculateElementMatrix(rowElInfo, colElInfo,
if (smallElInfo->getLevel() == largeElInfo->getLevel()) {
if (secondOrderAssembler)
secondOrderAssembler->calculateElementMatrix(smallElInfo, mat);
if (firstOrderAssemblerGrdPsi)
firstOrderAssemblerGrdPsi->calculateElementMatrix(smallElInfo, mat);
if (firstOrderAssemblerGrdPhi)
firstOrderAssemblerGrdPhi->calculateElementMatrix(smallElInfo, mat);
if (zeroOrderAssembler)
zeroOrderAssembler->calculateElementMatrix(smallElInfo, mat);
} else {
if (secondOrderAssembler)
secondOrderAssembler->calculateElementMatrix(rowElInfo, colElInfo,
smallElInfo, largeElInfo, mat);
if (firstOrderAssemblerGrdPsi)
firstOrderAssemblerGrdPsi->calculateElementMatrix(rowElInfo, colElInfo,
smallElInfo, largeElInfo, mat);
if (firstOrderAssemblerGrdPhi)
firstOrderAssemblerGrdPhi->calculateElementMatrix(rowElInfo, colElInfo,
smallElInfo, largeElInfo, mat);
if (zeroOrderAssembler)
zeroOrderAssembler->calculateElementMatrix(rowElInfo, colElInfo,
smallElInfo, largeElInfo, mat);
}
if (rememberElMat && userMat) {
axpy(factor, *elementMatrix, *userMat);
}
......@@ -201,6 +205,71 @@ namespace AMDiS {
}
}
void Assembler::calculateElementVector(const ElInfo *mainElInfo,
const ElInfo *auxElInfo,
const ElInfo *smallElInfo,
const ElInfo *largeElInfo,
ElementVector *userVec,
double factor)
{
FUNCNAME("Assembler::calculateElementVector()");
if (remember && factor != 1.0) {
rememberElVec = true;
}
if (rememberElVec && !elementVector) {
elementVector = NEW ElementVector(nRow);
}
Element *el = mainElInfo->getElement();
// checkForNewTraverse();
checkQuadratures();
if ((el != lastMatEl && el != lastVecEl) || !operat->isOptimized()) {
initElement(auxElInfo);
}
if (el != lastVecEl || !operat->isOptimized()) {
if (rememberElVec) {
elementVector->set(0.0);
}
lastVecEl = el;
} else {
if (rememberElVec) {
axpy(factor, *elementVector, *userVec);
return;
}
}
ElementVector *vec = rememberElVec ? elementVector : userVec;
if (operat->uhOld && remember) {
if (smallElInfo->getLevel() == largeElInfo->getLevel()) {
matVecAssemble(auxElInfo, vec);
} else {
matVecAssemble(mainElInfo, auxElInfo, smallElInfo, largeElInfo, vec);
}
if (rememberElVec) {
axpy(factor, *elementVector, *userVec);
}
return;
}
ERROR_EXIT("Not yet implemented!\n");
// if (firstOrderAssemblerGrdPsi) {
// firstOrderAssemblerGrdPsi->calculateElementVector(elInfo, vec);
// }
// if (zeroOrderAssembler) {
// zeroOrderAssembler->calculateElementVector(elInfo, vec);
// }
// if (rememberElVec) {
// axpy(factor, *elementVector, *userVec);
// }
}
void Assembler::matVecAssemble(const ElInfo *elInfo, ElementVector *vec)
{
FUNCNAME("Assembler::matVecAssemble()");
......@@ -225,21 +294,72 @@ namespace AMDiS {
}
delete [] uhOldLoc;
delete [] uhOldLoc;
}
void Assembler::matVecAssemble(const ElInfo *mainElInfo, const ElInfo *auxElInfo,
const ElInfo *smallElInfo, const ElInfo *largeElInfo,
ElementVector *vec)
{
FUNCNAME("Assembler::matVecAssemble()");
TEST_EXIT(rowFESpace->getBasisFcts() == colFESpace->getBasisFcts())
("Works only for equal basis functions for different components!\n");
TEST_EXIT(operat->uhOld->getFESpace()->getMesh() == auxElInfo->getMesh())
("Da stimmt was nicht!\n");
Element *mainEl = mainElInfo->getElement();
Element *auxEl = auxElInfo->getElement();
const BasisFunction *basFcts = rowFESpace->getBasisFcts();
int nBasFcts = basFcts->getNumber();
double *uhOldLoc = new double[nBasFcts];
double *uhOldLoc2 = new double[nBasFcts];
operat->uhOld->getLocalVector(auxEl, uhOldLoc);
DimMat<double> *m = smallElInfo->getSubElemCoordsMat();
for (int i = 0; i < nBasFcts; i++) {
uhOldLoc2[i] = 0.0;
for (int j = 0; j < nBasFcts; j++) {
uhOldLoc2[i] += (*m)[j][i] * uhOldLoc[i];
}
}
if (mainEl != lastMatEl) {
calculateElementMatrix(mainElInfo, auxElInfo, smallElInfo, largeElInfo, NULL);
}
for (int i = 0; i < nBasFcts; i++) {
double val = 0.0;
for (int j = 0; j < nBasFcts; j++) {
val += (*elementMatrix)[i][j] * uhOldLoc2[j];
}
(*vec)[i] += val;
}
delete [] uhOldLoc;
delete [] uhOldLoc2;
}
void Assembler::initElement(const ElInfo *elInfo, Quadrature *quad)
void Assembler::initElement(const ElInfo *smallElInfo,
const ElInfo *largeElInfo,
Quadrature *quad)
{
checkQuadratures();
if (secondOrderAssembler)
secondOrderAssembler->initElement(elInfo, quad);
secondOrderAssembler->initElement(smallElInfo, largeElInfo, quad);
if (firstOrderAssemblerGrdPsi)
firstOrderAssemblerGrdPsi->initElement(elInfo, quad);
firstOrderAssemblerGrdPsi->initElement(smallElInfo, largeElInfo, quad);
if (firstOrderAssemblerGrdPhi)
firstOrderAssemblerGrdPhi->initElement(elInfo, quad);
firstOrderAssemblerGrdPhi->initElement(smallElInfo, largeElInfo, quad);
if (zeroOrderAssembler)
zeroOrderAssembler->initElement(elInfo, quad);
zeroOrderAssembler->initElement(smallElInfo, largeElInfo, quad);
}
OptimizedAssembler::OptimizedAssembler(Operator *op,
......
......@@ -41,7 +41,6 @@
namespace AMDiS {
// class ElInfo;
class Element;
class Quadrature;
class ElementMatrix;
......@@ -68,8 +67,7 @@ namespace AMDiS {
const FiniteElemSpace *rowFESpace,
const FiniteElemSpace *colFESpace = NULL);
virtual ~Assembler()
{}
virtual ~Assembler() {}
ElementMatrix *initElementMatrix(ElementMatrix *elMat,
const ElInfo *rowElInfo,
......@@ -100,6 +98,14 @@ namespace AMDiS {
ElementVector *userVec,
double factor = 1.0);
void calculateElementVector(const ElInfo *mainElInfo,
const ElInfo *auxElInfo,
const ElInfo *smallElInfo,
const ElInfo *largeElInfo,
ElementVector *userVec,
double factor = 1.0);
/** \brief
* Returns \ref rowFESpace.
*/
......@@ -178,7 +184,8 @@ namespace AMDiS {
* Initialisation for the given ElInfo. The call is deligated to
* the sub assemblers.
*/
void initElement(const ElInfo *elInfo,
void initElement(const ElInfo *smallElInfo,
const ElInfo *largeElInfo = NULL,
Quadrature *quad = NULL);
/** \brief
......@@ -218,6 +225,11 @@ namespace AMDiS {
*/
void matVecAssemble(const ElInfo *elInfo, ElementVector *vec);
void matVecAssemble(const ElInfo *mainElInfo, const ElInfo *auxElInfo,
const ElInfo *smallElInfo, const ElInfo *largeElInfo,
ElementVector *vec);
/** \brief
* Checks whether this is a new travese.
*/
......@@ -280,6 +292,9 @@ namespace AMDiS {
*/
ZeroOrderAssembler *zeroOrderAssembler;
/** \brief
*
*/
bool remember;
/** \brief
......
#include "ComponentTraverseInfo.h"
namespace AMDiS {
const int SingleComponentInfo::EMPTY = 0;
const int SingleComponentInfo::EQ_SPACES_NO_AUX = 1;
const int SingleComponentInfo::EQ_SPACES_WITH_AUX = 2;
const int SingleComponentInfo::EQ_SPACES_WITH_DIF_AUX = 3;
const int SingleComponentInfo::DIF_SPACES_NO_AUX = 4;
const int SingleComponentInfo::DIF_SPACES_WITH_AUX = 5;
const int SingleComponentInfo::DIF_SPACES_WITH_DIF_AUX = 6;
void SingleComponentInfo::updateStatus()
{
if (rowFESpace == NULL) {
status = SingleComponentInfo::EMPTY;
return;
}
if (colFESpace == NULL ||
(colFESpace != NULL && rowFESpace->getMesh() == colFESpace->getMesh())) {
if (auxFESpaces.size() == 0) {
status = SingleComponentInfo::EQ_SPACES_NO_AUX;
} else {
status = SingleComponentInfo::EQ_SPACES_WITH_AUX;
for (int i = 0; i < static_cast<int>(auxFESpaces.size()); i++) {
if (auxFESpaces[i]->getMesh() != rowFESpace->getMesh()) {
status = SingleComponentInfo::EQ_SPACES_WITH_DIF_AUX;
break;
}
}
}
} else {