Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
Backofen, Rainer
amdis
Commits
78f007ce
Commit
78f007ce
authored
Mar 05, 2008
by
Thomas Witkowski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* New interpol-function for DOFVector<WorldVector<double>>
parent
196751d4
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
143 additions
and
277 deletions
+143
-277
AMDiS/src/BasisFunction.cc
AMDiS/src/BasisFunction.cc
+21
-0
AMDiS/src/BasisFunction.h
AMDiS/src/BasisFunction.h
+9
-0
AMDiS/src/DOFVector.cc
AMDiS/src/DOFVector.cc
+80
-119
AMDiS/src/DOFVector.h
AMDiS/src/DOFVector.h
+12
-133
AMDiS/src/DOFVector.hh
AMDiS/src/DOFVector.hh
+21
-25
No files found.
AMDiS/src/BasisFunction.cc
View file @
78f007ce
...
...
@@ -46,6 +46,27 @@ namespace AMDiS {
}
const
WorldVector
<
double
>&
BasisFunction
::
evalUh
(
const
DimVec
<
double
>&
lambda
,
const
WorldVector
<
double
>
*
uh_loc
,
WorldVector
<
double
>*
values
)
const
{
static
WorldVector
<
double
>
Values
(
DEFAULT_VALUE
,
0.
);
WorldVector
<
double
>
*
val
=
(
NULL
!=
values
)
?
values
:
&
Values
;
int
dow
=
Global
::
getGeo
(
WORLD
);
for
(
int
n
=
0
;
n
<
dow
;
n
++
)
(
*
val
)[
n
]
=
0
;
for
(
int
i
=
0
;
i
<
nBasFcts
;
i
++
)
{
double
phil
=
(
*
(
*
phi
)[
i
])(
lambda
);
for
(
int
n
=
0
;
n
<
dow
;
n
++
)
(
*
val
)[
n
]
+=
uh_loc
[
i
][
n
]
*
phil
;
}
return
((
*
val
));
}
const
WorldVector
<
double
>&
BasisFunction
::
evalGrdUh
(
const
DimVec
<
double
>&
lambda
,
const
DimVec
<
WorldVector
<
double
>
>&
grd_lambda
,
const
double
*
uh_loc
,
WorldVector
<
double
>*
grd_uh
)
const
...
...
AMDiS/src/BasisFunction.h
View file @
78f007ce
...
...
@@ -325,6 +325,15 @@ namespace AMDiS {
*/
double
evalUh
(
const
DimVec
<
double
>&
lambda
,
const
double
*
uh
)
const
;
/** \brief
* Evaluates elements value at barycentric coordinates lambda with local
* coefficient vector uh. If val is not NULL the result will be stored
* there, otherwise a pointer to a static local variable is returned which
* will be overwritten after the next call.
*/
const
WorldVector
<
double
>&
evalUh
(
const
DimVec
<
double
>&
lambda
,
const
WorldVector
<
double
>*
uh
,
WorldVector
<
double
>*
val
)
const
;
/** \brief
* Evaluates the gradient at barycentric coordinates lambda. Lambda is the
* Jacobian of the barycentric coordinates. uh is the local coefficient
...
...
AMDiS/src/DOFVector.cc
View file @
78f007ce
...
...
@@ -422,9 +422,8 @@ namespace AMDiS {
template
<
>
void
DOFVector
<
double
>::
interpol
(
DOFVector
<
double
>
*
source
,
double
factor
)
{
FUNCNAME
(
"DOFVector<double>::interpol"
);
FUNCNAME
(
"DOFVector<double>::interpol
()
"
);
int
i
,
j
;
const
FiniteElemSpace
*
sourceFeSpace
=
source
->
getFESpace
();
const
BasisFunction
*
basisFcts
=
feSpace
->
getBasisFcts
();
...
...
@@ -438,22 +437,22 @@ namespace AMDiS {
DegreeOfFreedom
*
localIndices
=
GET_MEMORY
(
DegreeOfFreedom
,
nBasisFcts
);
double
*
sourceLocalCoeffs
=
GET_MEMORY
(
double
,
nSourceBasisFcts
);
if
(
feSpace
->
getMesh
()
==
sourceFeSpace
->
getMesh
())
{
if
(
feSpace
->
getMesh
()
==
sourceFeSpace
->
getMesh
())
{
DimVec
<
double
>
*
coords
=
NULL
;
TraverseStack
stack
;
ElInfo
*
elInfo
=
stack
.
traverseFirst
(
feSpace
->
getMesh
(),
-
1
,
Mesh
::
CALL_LEAF_EL
|
Mesh
::
FILL_COORDS
);
while
(
elInfo
)
{
while
(
elInfo
)
{
Element
*
el
=
elInfo
->
getElement
();
basisFcts
->
getLocalIndices
(
el
,
feSpace
->
getAdmin
(),
localIndices
);
source
->
getLocalVector
(
el
,
sourceLocalCoeffs
);
for
(
i
=
0
;
i
<
nBasisFcts
;
i
++
)
{
if
(
vec
[
localIndices
[
i
]]
==
0.0
)
{
for
(
int
i
=
0
;
i
<
nBasisFcts
;
i
++
)
{
if
(
vec
[
localIndices
[
i
]]
==
0.0
)
{
coords
=
basisFcts
->
getCoords
(
i
);
vec
[
localIndices
[
i
]]
=
sourceBasisFcts
->
evalUh
(
*
coords
,
sourceLocalCoeffs
)
*
factor
;
}
...
...
@@ -475,28 +474,28 @@ namespace AMDiS {
Mesh
::
CALL_LEAF_EL
|
Mesh
::
FILL_COORDS
,
&
elInfo1
,
&
elInfo2
,
&
elInfoSmall
,
&
elInfoLarge
);
while
(
nextTraverse
)
{
while
(
nextTraverse
)
{
basisFcts
->
getLocalIndices
(
elInfo1
->
getElement
(),
feSpace
->
getAdmin
(),
localIndices
);
source
->
getLocalVector
(
elInfo2
->
getElement
(),
sourceLocalCoeffs
);
for
(
i
=
0
;
i
<
nBasisFcts
;
i
++
)
{
if
(
vec
[
localIndices
[
i
]]
==
0.0
)
{
for
(
int
i
=
0
;
i
<
nBasisFcts
;
i
++
)
{
if
(
vec
[
localIndices
[
i
]]
==
0.0
)
{
coords1
=
basisFcts
->
getCoords
(
i
);
elInfo1
->
coordToWorld
(
*
coords1
,
&
worldVec
);
elInfo2
->
worldToCoord
(
worldVec
,
&
coords2
);
bool
isPositive
=
true
;
for
(
j
=
0
;
j
<
coords2
.
size
();
j
++
)
{
for
(
int
j
=
0
;
j
<
coords2
.
size
();
j
++
)
{
if
(
coords2
[
j
]
<
0
)
{
isPositive
=
false
;
break
;
}
}
if
(
isPositive
)
{
if
(
isPositive
)
{
vec
[
localIndices
[
i
]]
=
sourceBasisFcts
->
evalUh
(
coords2
,
sourceLocalCoeffs
);
}
}
...
...
@@ -511,6 +510,63 @@ namespace AMDiS {
FREE_MEMORY
(
sourceLocalCoeffs
,
double
,
nSourceBasisFcts
);
}
template
<
>
void
DOFVector
<
WorldVector
<
double
>
>::
interpol
(
DOFVector
<
WorldVector
<
double
>
>
*
v
,
double
factor
)
{
WorldVector
<
double
>
nul
(
DEFAULT_VALUE
,
0.0
);
this
->
set
(
nul
);
DimVec
<
double
>
*
coords
=
NULL
;
const
FiniteElemSpace
*
vFESpace
=
v
->
getFESpace
();
if
(
feSpace
==
vFESpace
)
{
WARNING
(
"same FE-spaces
\n
"
);
}
const
BasisFunction
*
basFcts
=
feSpace
->
getBasisFcts
();
const
BasisFunction
*
vBasFcts
=
vFESpace
->
getBasisFcts
();
int
numBasFcts
=
basFcts
->
getNumber
();
int
vNumBasFcts
=
vBasFcts
->
getNumber
();
if
(
feSpace
->
getMesh
()
==
vFESpace
->
getMesh
())
{
DegreeOfFreedom
*
localIndices
=
GET_MEMORY
(
DegreeOfFreedom
,
numBasFcts
);
WorldVector
<
double
>
*
vLocalCoeffs
=
NEW
WorldVector
<
double
>
[
vNumBasFcts
];
Mesh
*
mesh
=
feSpace
->
getMesh
();
TraverseStack
stack
;
ElInfo
*
elInfo
=
stack
.
traverseFirst
(
mesh
,
-
1
,
Mesh
::
CALL_LEAF_EL
|
Mesh
::
FILL_COORDS
);
while
(
elInfo
)
{
Element
*
el
=
elInfo
->
getElement
();
basFcts
->
getLocalIndices
(
el
,
feSpace
->
getAdmin
(),
localIndices
);
v
->
getLocalVector
(
el
,
vLocalCoeffs
);
for
(
int
i
=
0
;
i
<
numBasFcts
;
i
++
)
{
if
(
vec
[
localIndices
[
i
]]
==
nul
)
{
coords
=
basFcts
->
getCoords
(
i
);
// for(j = 0; j < vNumBasFcts; j++) {
vec
[
localIndices
[
i
]]
+=
vBasFcts
->
evalUh
(
*
coords
,
vLocalCoeffs
,
NULL
)
*
factor
;
// }
}
}
elInfo
=
stack
.
traverseNext
(
elInfo
);
}
FREE_MEMORY
(
localIndices
,
DegreeOfFreedom
,
numBasFcts
);
DELETE
[]
vLocalCoeffs
;
}
else
{
ERROR_EXIT
(
"not yet for dual traverse
\n
"
);
}
}
template
<
>
WorldVector
<
DOFVector
<
double
>*>
*
DOFVector
<
double
>::
getGradient
(
WorldVector
<
DOFVector
<
double
>*>
*
grad
)
const
{
...
...
@@ -531,15 +587,15 @@ namespace AMDiS {
// define result vector
static
WorldVector
<
DOFVector
<
double
>*>
*
result
=
NULL
;
if
(
grad
)
{
if
(
grad
)
{
result
=
grad
;
}
else
{
if
(
!
result
)
{
if
(
!
result
)
{
result
=
NEW
WorldVector
<
DOFVector
<
double
>*>
;
result
->
set
(
NULL
);
}
for
(
i
=
0
;
i
<
dow
;
i
++
)
{
if
((
*
result
)[
i
]
&&
(
*
result
)[
i
]
->
getFESpace
()
!=
feSpace
)
{
for
(
i
=
0
;
i
<
dow
;
i
++
)
{
if
((
*
result
)[
i
]
&&
(
*
result
)[
i
]
->
getFESpace
()
!=
feSpace
)
{
DELETE
(
*
result
)[
i
];
(
*
result
)[
i
]
=
NEW
DOFVector
<
double
>
(
feSpace
,
"gradient"
);
}
...
...
@@ -554,11 +610,11 @@ namespace AMDiS {
int
numNodes
=
0
;
int
numDOFs
=
0
;
for
(
i
=
0
;
i
<
dim
+
1
;
i
++
)
{
for
(
i
=
0
;
i
<
dim
+
1
;
i
++
)
{
GeoIndex
geoIndex
=
INDEX_OF_DIM
(
i
,
dim
);
int
numPositionNodes
=
mesh
->
getGeo
(
geoIndex
);
int
numPreDOFs
=
admin
->
getNumberOfPreDOFs
(
i
);
for
(
j
=
0
;
j
<
numPositionNodes
;
j
++
)
{
for
(
j
=
0
;
j
<
numPositionNodes
;
j
++
)
{
int
dofs
=
basFcts
->
getNumberOfDOFs
(
geoIndex
);
numNodeDOFs
.
push_back
(
dofs
);
numDOFs
+=
dofs
;
...
...
@@ -573,7 +629,7 @@ namespace AMDiS {
TEST_EXIT
(
numDOFs
==
nBasFcts
)
(
"number of dofs != number of basis functions
\n
"
);
for
(
i
=
0
;
i
<
numDOFs
;
i
++
)
{
for
(
i
=
0
;
i
<
numDOFs
;
i
++
)
{
bary
.
push_back
(
basFcts
->
getCoords
(
i
));
}
...
...
@@ -588,7 +644,7 @@ namespace AMDiS {
WorldVector
<
double
>
grd
;
while
(
elInfo
)
{
while
(
elInfo
)
{
const
DegreeOfFreedom
**
dof
=
elInfo
->
getElement
()
->
getDOF
();
...
...
@@ -597,10 +653,10 @@ namespace AMDiS {
const
DimVec
<
WorldVector
<
double
>
>
&
grdLambda
=
elInfo
->
getGrdLambda
();
int
localDOFNr
=
0
;
for
(
i
=
0
;
i
<
numNodes
;
i
++
)
{
// for all nodes
for
(
j
=
0
;
j
<
numNodeDOFs
[
i
];
j
++
)
{
// for all dofs at this node
for
(
i
=
0
;
i
<
numNodes
;
i
++
)
{
// for all nodes
for
(
j
=
0
;
j
<
numNodeDOFs
[
i
];
j
++
)
{
// for all dofs at this node
DegreeOfFreedom
dofIndex
=
dof
[
i
][
numNodePreDOFs
[
localDOFNr
]
+
j
];
if
(
!
visited
[
dofIndex
])
{
if
(
!
visited
[
dofIndex
])
{
grd
=
basFcts
->
evalGrdUh
(
*
(
bary
[
localDOFNr
]),
grdLambda
,
...
...
@@ -623,85 +679,10 @@ namespace AMDiS {
return
result
;
}
// template<>
// void interpolGrd(DOFVector<double> *v,
// WorldVector<DOFVector<double>*> *grad,
// double factor, bool add)
// {
// int i, j, k;
// int dow = Global::getGeo(WORLD);
// TEST_EXIT(grad)("no gradient\n");
// for(i = 0; i < dow; i++) {
// TEST_EXIT((*grad)[i])("missing (*grad)[%d]\n", i);
// }
// if(!add) {
// for(i = 0; i < dow; i++) {
// (*grad)[i]->set(0.0);
// }
// }
// DimVec<double> *coords = NULL;
// const FiniteElemSpace *feSpace = (*grad)[0]->getFESpace();
// const FiniteElemSpace *vFESpace = v->getFESpace();
// if(feSpace == vFESpace) {
// WARNING("same FE-spaces\n");
// }
// const BasisFunction *basFcts = feSpace->getBasisFcts();
// const BasisFunction *vBasFcts = vFESpace->getBasisFcts();
// int numBasFcts = basFcts->getNumber();
// int vNumBasFcts = vBasFcts->getNumber();
// if(feSpace->getMesh() == vFESpace->getMesh()) {
// DegreeOfFreedom *localIndices = GET_MEMORY(DegreeOfFreedom, numBasFcts);
// double *vLocalCoeffs = GET_MEMORY(double, vNumBasFcts);
// Mesh *mesh = feSpace->getMesh();
// TraverseStack stack;
// ElInfo *elInfo = stack.traverseFirst(mesh, -1,
// Mesh::CALL_LEAF_EL |
// Mesh::FILL_COORDS |
// Mesh::FILL_GRD_LAMBDA);
// while(elInfo) {
// const DimVec<WorldVector<double> > &grdLambda = elInfo->getGrdLambda();
// Element *el = elInfo->getElement();
// basFcts->getLocalIndices(el, feSpace->getAdmin(), localIndices);
// v->getLocalVector(el, vLocalCoeffs);
// for(i = 0; i < numBasFcts; i++) {
// coords = basFcts->getCoords(i);
// for(j = 0; j < vNumBasFcts; j++) {
// WorldVector<double> g;
// vBasFcts->evalGrdUh(*coords, grdLambda, vLocalCoeffs, &g);
// for(k = 0; k < dow; k++) {
// (*((*grad)[k]))[localIndices[i]] += g[k] * factor;
// }
// }
// }
// elInfo = stack.traverseNext(elInfo);
// }
// FREE_MEMORY(localIndices, DegreeOfFreedom, numBasFcts);
// FREE_MEMORY(vLocalCoeffs, double, vNumBasFcts);
// } else {
// ERROR_EXIT("not yet for dual traverse\n");
// }
// }
DOFVectorDOF
::
DOFVectorDOF
()
:
DOFVector
<
DegreeOfFreedom
>
()
{};
void
DOFVectorDOF
::
freeDOFContent
(
DegreeOfFreedom
dof
)
{
::
std
::
vector
<
DegreeOfFreedom
>::
iterator
it
;
::
std
::
vector
<
DegreeOfFreedom
>::
iterator
end
=
vec
.
end
();
...
...
@@ -711,6 +692,7 @@ namespace AMDiS {
}
};
WorldVector
<
DOFVector
<
double
>*>
*
transform
(
DOFVector
<
WorldVector
<
double
>
>
*
vec
,
WorldVector
<
DOFVector
<
double
>*>
*
res
)
{
...
...
@@ -741,26 +723,5 @@ namespace AMDiS {
return
r
;
}
#if 0
void transform2(DOFVector<WorldVector<double> > *vec,
::std::vector<DOFVector<double>*> *res)
{
FUNCNAME("transform2()");
TEST_EXIT(vec && res)("no vector\n");
int i, j, dow = Global::getGeo(WORLD);
int vecSize = vec->getSize();
for(i = 0; i < vecSize; i++) {
for(j = 0; j < dow; j++) {
(*((*res)[j]))[i] = (*vec)[i][j];
}
}
return r;
}
#endif
}
AMDiS/src/DOFVector.h
View file @
78f007ce
...
...
@@ -350,7 +350,9 @@ namespace AMDiS {
/** \brief
* Returns \ref coarsenOperation
*/
inline
CoarsenOperation
getCoarsenOperation
()
{
return
coarsenOperation
;
};
inline
CoarsenOperation
getCoarsenOperation
()
{
return
coarsenOperation
;
};
/** \brief
* Restriction after coarsening. Implemented for DOFVector<double>
...
...
@@ -360,7 +362,9 @@ namespace AMDiS {
/** \brief
* Returns \ref refineInter
*/
inline
bool
refineInterpol
()
{
return
refineInter
;
};
inline
bool
refineInterpol
()
{
return
refineInter
;
};
/** \brief
* Interpolation after refinement.
...
...
@@ -371,7 +375,9 @@ namespace AMDiS {
* Returns \ref vec
*/
// ::std::vector<T>& getVector() const {return (::std::vector<T>&) vec;} ;
::
std
::
vector
<
T
>&
getVector
()
{
return
vec
;}
;
::
std
::
vector
<
T
>&
getVector
()
{
return
vec
;
};
// /** \brief
// * Returns \ref feSpace
...
...
@@ -593,83 +599,12 @@ namespace AMDiS {
* Used by interpol while mesh traversal
*/
static
int
interpolFct
(
ElInfo
*
elinfo
);
/** \brief
* Generalized matrix-vector multiplication
*/
//virtual void gemv(MatrixTranspose transpose, T alpha,
// const DOFMatrix &a, const DOFVector<T>& x,
// T beta);
/** \brief
* Matrix-vector multiplication
*/
//virtual void mv(MatrixTranspose transpose,
// const DOFMatrix&a, const DOFVector<T>&x);
/** \brief
* Prints \ref vec to stdout
*/
void
print
()
const
;
// ElementVector *assemble(T factor, ElInfo *elInfo,
// const BoundaryType *bound,
// Operator *op = NULL);
// /** \brief
// * Adds element contribution to the vector
// */
// void addElementVector(T sign,
// const ElementVector &elVec,
// const BoundaryType *bound,
// bool add = true);
// inline void addOperator(Operator* op,
// double *factor = NULL,
// double *estFactor = NULL)
// {
// operators.push_back(op);
// operatorFactor.push_back(factor);
// operatorEstFactor.push_back(estFactor);
// };
// inline ::std::vector<double*>::iterator getOperatorFactorBegin() {
// return operatorFactor.begin();
// };
// inline ::std::vector<double*>::iterator getOperatorFactorEnd() {
// return operatorFactor.end();
// };
// inline ::std::vector<double*>::iterator getOperatorEstFactorBegin() {
// return operatorEstFactor.begin();
// };
// inline ::std::vector<double*>::iterator getOperatorEstFactorEnd() {
// return operatorEstFactor.end();
// };
// inline ::std::vector<Operator*>::iterator getOperatorsBegin() {
// return operators.begin();
// };
// inline ::std::vector<Operator*>::iterator getOperatorsEnd() {
// return operators.end();
// };
// Flag getAssembleFlag();
// /** \brief
// * Evaluates \f[ u_h(x(\lambda)) = \sum_{i=0}^{m-1} vec[ind[i]] *
// * \varphi^i(\lambda) \f] where \f$ \varphi^i \f$ is the i-th basis function,
// * \f$ x(\lambda) \f$ are the world coordinates of lambda and
// * \f$ m \f$ is the number of basis functions
// */
// T evalUh(const DimVec<double>& lambda, DegreeOfFreedom* ind);
/** \brief
* Computes the coefficients of the interpolant of the function fct and
* stores these in the DOFVector
...
...
@@ -678,18 +613,9 @@ namespace AMDiS {
void
interpol
(
DOFVector
<
T
>
*
v
,
double
factor
);
// inline ::std::vector<Operator*>& getOperators() { return operators; };
// inline ::std::vector<double*>& getOperatorFactor() { return operatorFactor; };
// inline ::std::vector<double*>& getOperatorEstFactor() {
// return operatorEstFactor;
// };
// ===== Serializable implementation =====
void
serialize
(
::
std
::
ostream
&
out
)
{
void
serialize
(
::
std
::
ostream
&
out
)
{
unsigned
int
size
=
vec
.
size
();
out
.
write
(
reinterpret_cast
<
const
char
*>
(
&
size
),
sizeof
(
unsigned
int
));
out
.
write
(
reinterpret_cast
<
const
char
*>
(
&
(
vec
[
0
])),
size
*
sizeof
(
T
));
...
...
@@ -703,49 +629,12 @@ namespace AMDiS {
};
DOFVector
<
WorldVector
<
T
>
>
*
getGradient
(
DOFVector
<
WorldVector
<
T
>
>*
)
const
;
// {
// FUNCNAME("DOFVector<T>::getGradient()");
// ERROR_EXIT("only specialized for DOFVector<double>\n");
// return NULL;
// };
WorldVector
<
DOFVector
<
T
>*>
*
getGradient
(
WorldVector
<
DOFVector
<
T
>*>
*
grad
)
const
;
DOFVector
<
WorldVector
<
T
>
>*
getRecoveryGradient
(
DOFVector
<
WorldVector
<
T
>
>*
)
const
;
// {
// FUNCNAME("DOFVector<T>::getRecoveryGradient()");
// ERROR_EXIT("only specialized for DOFVector<double>\n");
// return NULL;
// };
//const T *getLocalVector(const Element *el, T* localVec);
// const T *getVecAtQPs(const ElInfo *elInfo,
// const Quadrature *quad,
// const FastQuadrature *quadFast,
// T *vecAtQPs) const;
// const WorldVector<T> *getGrdAtQPs(const ElInfo *elInfo,
// const Quadrature *quad,
// const FastQuadrature *quadFast,
// WorldVector<T> *grdAtQPs) const;
// {
// FUNCNAME("DOFVector<T>::getGrdAtQPs()");
// ERROR_EXIT("only specialized for DOFVector<double>\n");
// return NULL;
// };
// const WorldMatrix<T> *getD2AtQPs(const ElInfo *elInfo,
// const Quadrature *quad,
// const FastQuadrature *quadFast,
// WorldMatrix<T> *d2AtQPs) const;
// {
// FUNCNAME("DOFVector<T>::getD2AtQPs()");
// ERROR_EXIT("only specialized for DOFVector<double>\n");
// return NULL;
// };
getRecoveryGradient
(
DOFVector
<
WorldVector
<
T
>
>*
)
const
;
protected:
...
...
@@ -1015,18 +904,8 @@ namespace AMDiS {
return
vec
->
getUsedSize
();
};
//template<typename T>
//void interpolGrd(DOFVector<T> *v,
// WorldVector<DOFVector<T>*> *grad,
// double factor, bool add = false);
WorldVector
<
DOFVector
<
double
>*>
*
transform
(
DOFVector
<
WorldVector
<
double
>
>
*
vec
,
WorldVector
<
DOFVector
<
double
>*>
*
result
);
#if 0
void transform2(DOFVector<WorldVector<double> > *vec,
::std::vector<DOFVector<double>*> *result);
#endif
}
#include "DOFVector.hh"
...
...
AMDiS/src/DOFVector.hh
View file @
78f007ce
...
...
@@ -647,37 +647,33 @@ namespace AMDiS {
template
<
typename
T
>
void
DOFVector
<
T
>::
interpol
(
AbstractFunction
<
T
,
WorldVector
<
double
>
>
*
fct
)
{
FUNCNAME
(
"interpol"
);
FUNCNAME
(
"
DOFVector<T>::
interpol
()
"
);
TEST_EXIT
(
interFct
=
fct
)(
"no function to interpolate
\n
"
);
if
(
!
this
->
getFESpace
())
{
MSG
(
"no dof admin in vec %s, skipping interpolation
\n
"
,
this
->
getName
().
c_str
());
return
;
}
if
(
!
this
->
getFESpace
())
{
MSG
(
"no dof admin in vec %s, skipping interpolation
\n
"
,
this
->
getName
().
c_str
());
return
;
}
if
(
!
(
this
->
getFESpace
()
->
getAdmin
()))
{
MSG
(
"no dof admin in feSpace %s, skipping interpolation
\n
"
,
this
->
getFESpace
()
->
getName
().
c_str
());
return
;
}
if
(
!
(
this
->
getFESpace
()
->
getAdmin
()))
{
MSG
(
"no dof admin in feSpace %s, skipping interpolation
\n
"
,
this
->
getFESpace
()
->
getName
().
c_str
());
return
;
}
if
(
!
(
this
->
getFESpace
()
->
getBasisFcts
()))
{
MSG
(
"no basis functions in admin of vec %s, skipping interpolation
\n
"
,
this
->
getName
().
c_str
());
return
;
}
if
(
!
(
this
->
getFESpace
()
->
getBasisFcts
()))
{
MSG
(
"no basis functions in admin of vec %s, skipping interpolation
\n
"
,
this
->
getName
().
c_str
());
return
;
}
if
(
!
(
fct
))
{
MSG
(
"function that should be interpolated only pointer to NULL, "
);
Msg
::
print
(
"skipping interpolation
\n
"
);
return
;
}
if
(
!
(
fct
))
{
MSG
(
"function that should be interpolated only pointer to NULL, "
);
Msg
::
print
(
"skipping interpolation
\n
"
);
return
;
}
traverseVector
=
this
;