Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
iwr
amdis
Commits
28431695
Commit
28431695
authored
Aug 11, 2010
by
Thomas Witkowski
Browse files
Fixed some bugs with dual mesh. Some more code refactoring.
parent
f213d5b9
Changes
14
Hide whitespace changes
Inline
Side-by-side
AMDiS/src/Assembler.cc
View file @
28431695
...
...
@@ -80,6 +80,7 @@ namespace AMDiS {
const
ElInfo
*
colElInfo
,
const
ElInfo
*
smallElInfo
,
const
ElInfo
*
largeElInfo
,
bool
rowColFeSpaceEqual
,
ElementMatrix
&
userMat
,
double
factor
)
{
...
...
@@ -93,9 +94,9 @@ namespace AMDiS {
if
((
el
!=
lastMatEl
&&
el
!=
lastVecEl
)
||
!
operat
->
isOptimized
())
{
if
(
smallElInfo
==
colElInfo
)
initElement
(
smallElInfo
);
initElement
(
smallElInfo
);
else
initElement
(
smallElInfo
,
largeElInfo
);
initElement
(
smallElInfo
,
largeElInfo
);
}
if
(
el
!=
lastMatEl
||
!
operat
->
isOptimized
())
{
...
...
@@ -118,65 +119,70 @@ namespace AMDiS {
ElementMatrix
&
m
=
smallElInfo
->
getSubElemGradCoordsMat
(
rowFeSpace
->
getBasisFcts
()
->
getDegree
());
if
(
smallElInfo
==
colElInfo
)
tmpMat
=
m
*
mat
;
else
tmpMat
=
mat
*
trans
(
m
);
mat
=
tmpMat
;
if
(
!
rowColFeSpaceEqual
)
{
if
(
smallElInfo
==
colElInfo
)
tmpMat
=
m
*
mat
;
else
tmpMat
=
mat
*
trans
(
m
);
mat
=
tmpMat
;
}
}
if
(
firstOrderAssemblerGrdPsi
)
{
firstOrderAssemblerGrdPsi
->
calculateElementMatrix
(
smallElInfo
,
mat
);
if
(
largeElInfo
==
rowElInfo
)
{
ElementMatrix
&
m
=
smallElInfo
->
getSubElemGradCoordsMat
(
rowFeSpace
->
getBasisFcts
()
->
getDegree
());
tmpMat
=
m
*
mat
;
}
else
{
ElementMatrix
&
m
=
smallElInfo
->
getSubElemCoordsMat
(
rowFeSpace
->
getBasisFcts
()
->
getDegree
());
if
(
!
rowColFeSpaceEqual
)
{
if
(
largeElInfo
==
rowElInfo
)
{
ElementMatrix
&
m
=
smallElInfo
->
getSubElemGradCoordsMat
(
rowFeSpace
->
getBasisFcts
()
->
getDegree
());
tmpMat
=
m
*
mat
;
}
else
{
ElementMatrix
&
m
=
smallElInfo
->
getSubElemCoordsMat
(
rowFeSpace
->
getBasisFcts
()
->
getDegree
());
tmpMat
=
mat
*
trans
(
m
);
}
tmpM
at
=
mat
*
trans
(
m
)
;
m
at
=
tmpMat
;
}
mat
=
tmpMat
;
}
if
(
firstOrderAssemblerGrdPhi
)
{
firstOrderAssemblerGrdPhi
->
calculateElementMatrix
(
smallElInfo
,
mat
);
if
(
largeElInfo
==
colElInfo
)
{
ElementMatrix
&
m
=
smallElInfo
->
getSubElemGradCoordsMat
(
rowFeSpace
->
getBasisFcts
()
->
getDegree
());
tmpMat
=
mat
*
trans
(
m
);
}
else
{
ElementMatrix
&
m
=
smallElInfo
->
getSubElemCoordsMat
(
rowFeSpace
->
getBasisFcts
()
->
getDegree
());
if
(
!
rowColFeSpaceEqual
)
{
if
(
largeElInfo
==
colElInfo
)
{
ElementMatrix
&
m
=
smallElInfo
->
getSubElemGradCoordsMat
(
rowFeSpace
->
getBasisFcts
()
->
getDegree
());
tmpMat
=
mat
*
trans
(
m
);
}
else
{
ElementMatrix
&
m
=
smallElInfo
->
getSubElemCoordsMat
(
rowFeSpace
->
getBasisFcts
()
->
getDegree
());
tmpMat
=
m
*
mat
;
}
tmpM
at
=
m
*
m
at
;
m
at
=
tmpM
at
;
}
mat
=
tmpMat
;
}
if
(
zeroOrderAssembler
)
{
zeroOrderAssembler
->
calculateElementMatrix
(
smallElInfo
,
mat
);
ElementMatrix
&
m
=
smallElInfo
->
getSubElemCoordsMat
(
rowFeSpace
->
getBasisFcts
()
->
getDegree
());
if
(
smallElInfo
==
colElInfo
)
tmpMat
=
m
*
mat
;
else
tmpMat
=
mat
;
// else
// tmpMat = mat * trans(m);
mat
=
tmpMat
;
if
(
!
rowColFeSpaceEqual
)
{
ElementMatrix
&
m
=
smallElInfo
->
getSubElemCoordsMat
(
rowFeSpace
->
getBasisFcts
()
->
getDegree
());
if
(
smallElInfo
==
colElInfo
)
tmpMat
=
m
*
mat
;
else
tmpMat
=
mat
*
trans
(
m
);
mat
=
tmpMat
;
}
}
if
(
rememberElMat
&&
&
userMat
!=
&
elementMatrix
)
...
...
@@ -342,7 +348,7 @@ namespace AMDiS {
if
(
mainEl
!=
lastMatEl
)
{
set_to_zero
(
elementMatrix
);
calculateElementMatrix
(
mainElInfo
,
auxElInfo
,
smallElInfo
,
largeElInfo
,
elementMatrix
);
false
,
elementMatrix
);
}
for
(
int
i
=
0
;
i
<
nBasFcts
;
i
++
)
{
...
...
AMDiS/src/Assembler.h
View file @
28431695
...
...
@@ -69,6 +69,7 @@ namespace AMDiS {
const
ElInfo
*
colElInfo
,
const
ElInfo
*
smallElInfo
,
const
ElInfo
*
largeElInfo
,
bool
rowColFeSpaceEqual
,
ElementMatrix
&
userMat
,
double
factor
=
1.0
);
...
...
AMDiS/src/DOFMatrix.cc
View file @
28431695
...
...
@@ -286,13 +286,16 @@ namespace AMDiS {
if
(
op
)
{
op
->
getElementMatrix
(
rowElInfo
,
colElInfo
,
smallElInfo
,
largeElInfo
,
elementMatrix
);
false
,
elementMatrix
);
}
else
{
std
::
vector
<
Operator
*>::
iterator
it
=
operators
.
begin
();
std
::
vector
<
double
*>::
iterator
factorIt
=
operatorFactor
.
begin
();
for
(;
it
!=
operators
.
end
();
++
it
,
++
factorIt
)
(
*
it
)
->
getElementMatrix
(
rowElInfo
,
colElInfo
,
smallElInfo
,
largeElInfo
,
(
*
it
)
->
getElementMatrix
(
rowElInfo
,
colElInfo
,
smallElInfo
,
largeElInfo
,
false
,
elementMatrix
,
*
factorIt
?
**
factorIt
:
1.0
);
}
...
...
@@ -328,8 +331,11 @@ namespace AMDiS {
it
!=
operators
.
end
();
++
it
,
++
factorIt
)
{
if
((
*
it
)
->
getNeedDualTraverse
())
{
(
*
it
)
->
getElementMatrix
(
mainElInfo
,
auxElInfo
,
smallElInfo
,
largeElInfo
,
(
*
it
)
->
getElementMatrix
(
mainElInfo
,
auxElInfo
,
smallElInfo
,
largeElInfo
,
rowFeSpace
==
colFeSpace
,
elementMatrix
,
*
factorIt
?
**
factorIt
:
1.0
);
}
...
...
AMDiS/src/DOFVector.cc
View file @
28431695
...
...
@@ -776,7 +776,8 @@ namespace AMDiS {
double
val
=
0.0
;
for
(
int
k
=
0
;
k
<
nBasFcts
;
k
++
)
val
+=
m
[
j
][
k
]
*
(
*
(
basFcts
->
getPhi
(
k
)))(
quad
->
getLambda
(
i
));
vecAtQPs
[
i
]
+=
val
;
vecAtQPs
[
i
]
+=
localVec
[
j
]
*
val
;
}
}
}
...
...
AMDiS/src/ElInfo2d.cc
View file @
28431695
...
...
@@ -108,19 +108,11 @@ namespace AMDiS {
ElInfo2d
::
ElInfo2d
(
Mesh
*
aMesh
)
:
ElInfo
(
aMesh
)
{
e1
=
new
WorldVector
<
double
>
;
e2
=
new
WorldVector
<
double
>
;
normal
=
new
WorldVector
<
double
>
;
}
{}
ElInfo2d
::~
ElInfo2d
()
{
delete
e1
;
delete
e2
;
delete
normal
;
}
{}
void
ElInfo2d
::
fillMacroInfo
(
const
MacroElement
*
mel
)
...
...
@@ -585,7 +577,7 @@ namespace AMDiS {
}
}
double
ElInfo2d
::
calcGrdLambda
(
DimVec
<
WorldVector
<
double
>
>&
grd
_lam
)
double
ElInfo2d
::
calcGrdLambda
(
DimVec
<
WorldVector
<
double
>
>&
grd
)
{
FUNCNAME
(
"ElInfo2d::calcGrdLambda()"
);
...
...
@@ -595,31 +587,30 @@ namespace AMDiS {
int
dim
=
mesh
->
getDim
();
for
(
int
i
=
0
;
i
<
dimOfWorld
;
i
++
)
{
(
*
e1
)
[
i
]
=
coord
[
1
][
i
]
-
coord
[
0
][
i
];
(
*
e2
)
[
i
]
=
coord
[
2
][
i
]
-
coord
[
0
][
i
];
e1
[
i
]
=
coord
[
1
][
i
]
-
coord
[
0
][
i
];
e2
[
i
]
=
coord
[
2
][
i
]
-
coord
[
0
][
i
];
}
if
(
dimOfWorld
==
2
)
{
double
sdet
=
(
*
e1
)
[
0
]
*
(
*
e2
)
[
1
]
-
(
*
e1
)
[
1
]
*
(
*
e2
)
[
0
];
double
sdet
=
e1
[
0
]
*
e2
[
1
]
-
e1
[
1
]
*
e2
[
0
];
adet
=
abs
(
sdet
);
if
(
adet
<
1.0E-25
)
{
MSG
(
"abs(det) = %f
\n
"
,
adet
);
for
(
int
i
=
0
;
i
<=
dim
;
i
++
)
for
(
int
j
=
0
;
j
<
dimOfWorld
;
j
++
)
grd_lam
[
i
][
j
]
=
0.0
;
grd
[
i
].
set
(
0.0
);
}
else
{
double
det1
=
1.0
/
sdet
;
grd
_lam
[
1
][
0
]
=
(
*
e2
)
[
1
]
*
det1
;
// a11: (a_ij) = A^{-T}
grd
_lam
[
1
][
1
]
=
-
(
*
e2
)
[
0
]
*
det1
;
// a21
grd
_lam
[
2
][
0
]
=
-
(
*
e1
)
[
1
]
*
det1
;
// a12
grd
_lam
[
2
][
1
]
=
(
*
e1
)
[
0
]
*
det1
;
// a22
grd
_lam
[
0
][
0
]
=
-
grd
_lam
[
1
][
0
]
-
grd
_lam
[
2
][
0
];
grd
_lam
[
0
][
1
]
=
-
grd
_lam
[
1
][
1
]
-
grd
_lam
[
2
][
1
];
grd
[
1
][
0
]
=
e2
[
1
]
*
det1
;
// a11: (a_ij) = A^{-T}
grd
[
1
][
1
]
=
-
e2
[
0
]
*
det1
;
// a21
grd
[
2
][
0
]
=
-
e1
[
1
]
*
det1
;
// a12
grd
[
2
][
1
]
=
e1
[
0
]
*
det1
;
// a22
grd
[
0
][
0
]
=
-
grd
[
1
][
0
]
-
grd
[
2
][
0
];
grd
[
0
][
1
]
=
-
grd
[
1
][
1
]
-
grd
[
2
][
1
];
}
}
else
{
vectorProduct
(
*
e1
,
*
e2
,
*
normal
);
vectorProduct
(
e1
,
e2
,
normal
);
adet
=
norm
(
normal
);
...
...
@@ -627,21 +618,21 @@ namespace AMDiS {
MSG
(
"abs(det) = %lf
\n
"
,
adet
);
for
(
int
i
=
0
;
i
<=
dim
;
i
++
)
for
(
int
j
=
0
;
j
<
dimOfWorld
;
j
++
)
grd
_lam
[
i
][
j
]
=
0.0
;
grd
[
i
][
j
]
=
0.0
;
}
else
{
vectorProduct
(
*
e2
,
*
normal
,
grd
_lam
[
1
]);
vectorProduct
(
*
normal
,
*
e1
,
grd
_lam
[
2
]);
vectorProduct
(
e2
,
normal
,
grd
[
1
]);
vectorProduct
(
normal
,
e1
,
grd
[
2
]);
double
adet2
=
1.0
/
(
adet
*
adet
);
for
(
int
i
=
0
;
i
<
dimOfWorld
;
i
++
)
{
grd
_lam
[
1
][
i
]
*=
adet2
;
grd
_lam
[
2
][
i
]
*=
adet2
;
grd
[
1
][
i
]
*=
adet2
;
grd
[
2
][
i
]
*=
adet2
;
}
grd
_lam
[
0
][
0
]
=
-
grd
_lam
[
1
][
0
]
-
grd
_lam
[
2
][
0
];
grd
_lam
[
0
][
1
]
=
-
grd
_lam
[
1
][
1
]
-
grd
_lam
[
2
][
1
];
grd
_lam
[
0
][
2
]
=
-
grd
_lam
[
1
][
2
]
-
grd
_lam
[
2
][
2
];
grd
[
0
][
0
]
=
-
grd
[
1
][
0
]
-
grd
[
2
][
0
];
grd
[
0
][
1
]
=
-
grd
[
1
][
1
]
-
grd
[
2
][
1
];
grd
[
0
][
2
]
=
-
grd
[
1
][
2
]
-
grd
[
2
][
2
];
}
}
...
...
@@ -710,7 +701,7 @@ namespace AMDiS {
normal
[
0
]
=
coord
[
i1
][
1
]
-
coord
[
i0
][
1
];
normal
[
1
]
=
coord
[
i0
][
0
]
-
coord
[
i1
][
0
];
}
else
{
// dow == 3
WorldVector
<
double
>
e0
,
e1
,
e2
,
elementNormal
;
WorldVector
<
double
>
e0
,
elementNormal
;
e0
=
coord
[
i1
];
e0
-=
coord
[
i0
];
...
...
AMDiS/src/ElInfo2d.h
View file @
28431695
...
...
@@ -64,7 +64,7 @@ namespace AMDiS {
protected:
/// Temp vectors for function \ref calcGrdLambda.
WorldVector
<
double
>
*
e1
,
*
e2
,
*
normal
;
WorldVector
<
double
>
e1
,
e2
,
normal
;
static
double
mat_d1_left_val
[
3
][
3
];
static
mtl
::
dense2D
<
double
>
mat_d1_left
;
...
...
AMDiS/src/FirstOrderTerm.cc
View file @
28431695
...
...
@@ -44,17 +44,17 @@ namespace AMDiS {
void
VecAtQP_FOT
::
getLb
(
const
ElInfo
*
elInfo
,
int
nPoints
,
VectorOfFixVecs
<
DimVec
<
double
>
>&
Lb
)
const
{
const
DimVec
<
WorldVector
<
double
>
>
&
Lambda
=
elInfo
->
getGrdLambda
();
const
DimVec
<
WorldVector
<
double
>
>
&
grd
Lambda
=
elInfo
->
getGrdLambda
();
if
(
bOne
>
-
1
)
{
for
(
int
iq
=
0
;
iq
<
nPoints
;
iq
++
)
lb_one
(
Lambda
,
Lb
[
iq
],
(
*
f
)(
vecAtQPs
[
iq
]));
lb_one
(
grd
Lambda
,
Lb
[
iq
],
(
*
f
)(
vecAtQPs
[
iq
]));
}
else
if
(
b
)
{
for
(
int
iq
=
0
;
iq
<
nPoints
;
iq
++
)
lb
(
Lambda
,
*
b
,
Lb
[
iq
],
(
*
f
)(
vecAtQPs
[
iq
]));
lb
(
grd
Lambda
,
*
b
,
Lb
[
iq
],
(
*
f
)(
vecAtQPs
[
iq
]));
}
else
{
for
(
int
iq
=
0
;
iq
<
nPoints
;
iq
++
)
l1
(
Lambda
,
Lb
[
iq
],
(
*
f
)(
vecAtQPs
[
iq
]));
l1
(
grd
Lambda
,
Lb
[
iq
],
(
*
f
)(
vecAtQPs
[
iq
]));
}
}
...
...
@@ -92,9 +92,9 @@ namespace AMDiS {
void
CoordsAtQP_FOT
::
getLb
(
const
ElInfo
*
elInfo
,
int
nPoints
,
VectorOfFixVecs
<
DimVec
<
double
>
>&
Lb
)
const
{
const
DimVec
<
WorldVector
<
double
>
>
&
Lambda
=
elInfo
->
getGrdLambda
();
const
DimVec
<
WorldVector
<
double
>
>
&
grd
Lambda
=
elInfo
->
getGrdLambda
();
for
(
int
iq
=
0
;
iq
<
nPoints
;
iq
++
)
l1
(
Lambda
,
Lb
[
iq
],
(
*
g
)(
coordsAtQPs
[
iq
]));
l1
(
grd
Lambda
,
Lb
[
iq
],
(
*
g
)(
coordsAtQPs
[
iq
]));
}
void
CoordsAtQP_FOT
::
eval
(
int
nPoints
,
...
...
@@ -130,9 +130,9 @@ namespace AMDiS {
void
VecCoordsAtQP_FOT
::
getLb
(
const
ElInfo
*
elInfo
,
int
nPoints
,
VectorOfFixVecs
<
DimVec
<
double
>
>&
Lb
)
const
{
const
DimVec
<
WorldVector
<
double
>
>
&
Lambda
=
elInfo
->
getGrdLambda
();
const
DimVec
<
WorldVector
<
double
>
>
&
grd
Lambda
=
elInfo
->
getGrdLambda
();
for
(
int
iq
=
0
;
iq
<
nPoints
;
iq
++
)
lb
(
Lambda
,
*
b
,
Lb
[
iq
],
(
*
g
)(
coordsAtQPs
[
iq
]));
lb
(
grd
Lambda
,
*
b
,
Lb
[
iq
],
(
*
g
)(
coordsAtQPs
[
iq
]));
}
void
VecCoordsAtQP_FOT
::
eval
(
int
nPoints
,
...
...
@@ -178,13 +178,13 @@ namespace AMDiS {
void
VectorGradient_FOT
::
getLb
(
const
ElInfo
*
elInfo
,
int
nPoints
,
VectorOfFixVecs
<
DimVec
<
double
>
>&
Lb
)
const
{
const
DimVec
<
WorldVector
<
double
>
>
&
Lambda
=
elInfo
->
getGrdLambda
();
const
DimVec
<
WorldVector
<
double
>
>
&
grd
Lambda
=
elInfo
->
getGrdLambda
();
if
(
f
)
{
for
(
int
iq
=
0
;
iq
<
nPoints
;
iq
++
)
lb
(
Lambda
,
(
*
f
)(
gradAtQPs
[
iq
]),
Lb
[
iq
],
1.0
);
lb
(
grd
Lambda
,
(
*
f
)(
gradAtQPs
[
iq
]),
Lb
[
iq
],
1.0
);
}
else
{
for
(
int
iq
=
0
;
iq
<
nPoints
;
iq
++
)
lb
(
Lambda
,
gradAtQPs
[
iq
],
Lb
[
iq
],
1.0
);
lb
(
grd
Lambda
,
gradAtQPs
[
iq
],
Lb
[
iq
],
1.0
);
}
}
...
...
@@ -230,9 +230,9 @@ namespace AMDiS {
void
VectorFct_FOT
::
getLb
(
const
ElInfo
*
elInfo
,
int
nPoints
,
VectorOfFixVecs
<
DimVec
<
double
>
>&
Lb
)
const
{
const
DimVec
<
WorldVector
<
double
>
>
&
Lambda
=
elInfo
->
getGrdLambda
();
const
DimVec
<
WorldVector
<
double
>
>
&
grd
Lambda
=
elInfo
->
getGrdLambda
();
for
(
int
iq
=
0
;
iq
<
nPoints
;
iq
++
)
lb
(
Lambda
,
(
*
vecFct
)(
vecAtQPs
[
iq
]),
Lb
[
iq
],
1.0
);
lb
(
grd
Lambda
,
(
*
vecFct
)(
vecAtQPs
[
iq
]),
Lb
[
iq
],
1.0
);
}
void
VectorFct_FOT
::
eval
(
int
nPoints
,
...
...
@@ -264,9 +264,9 @@ namespace AMDiS {
void
VecFctAtQP_FOT
::
getLb
(
const
ElInfo
*
elInfo
,
int
nPoints
,
VectorOfFixVecs
<
DimVec
<
double
>
>&
Lb
)
const
{
const
DimVec
<
WorldVector
<
double
>
>
&
Lambda
=
elInfo
->
getGrdLambda
();
const
DimVec
<
WorldVector
<
double
>
>
&
grd
Lambda
=
elInfo
->
getGrdLambda
();
for
(
int
iq
=
0
;
iq
<
nPoints
;
iq
++
)
lb
(
Lambda
,
(
*
g
)(
coordsAtQPs
[
iq
]),
Lb
[
iq
],
1.0
);
lb
(
grd
Lambda
,
(
*
g
)(
coordsAtQPs
[
iq
]),
Lb
[
iq
],
1.0
);
}
void
VecFctAtQP_FOT
::
eval
(
int
nPoints
,
...
...
@@ -322,9 +322,9 @@ namespace AMDiS {
void
VecGrad_FOT
::
getLb
(
const
ElInfo
*
elInfo
,
int
nPoints
,
VectorOfFixVecs
<
DimVec
<
double
>
>&
Lb
)
const
{
const
DimVec
<
WorldVector
<
double
>
>
&
Lambda
=
elInfo
->
getGrdLambda
();
const
DimVec
<
WorldVector
<
double
>
>
&
grd
Lambda
=
elInfo
->
getGrdLambda
();
for
(
int
iq
=
0
;
iq
<
nPoints
;
iq
++
)
lb
(
Lambda
,
(
*
vecFct
)(
vecAtQPs
[
iq
],
gradAtQPs
[
iq
]),
Lb
[
iq
],
1.0
);
lb
(
grd
Lambda
,
(
*
vecFct
)(
vecAtQPs
[
iq
],
gradAtQPs
[
iq
]),
Lb
[
iq
],
1.0
);
}
void
VecGrad_FOT
::
eval
(
int
nPoints
,
...
...
@@ -356,9 +356,9 @@ namespace AMDiS {
void
FctGrad2_FOT
::
getLb
(
const
ElInfo
*
elInfo
,
int
nPoints
,
VectorOfFixVecs
<
DimVec
<
double
>
>&
Lb
)
const
{
const
DimVec
<
WorldVector
<
double
>
>
&
Lambda
=
elInfo
->
getGrdLambda
();
const
DimVec
<
WorldVector
<
double
>
>
&
grd
Lambda
=
elInfo
->
getGrdLambda
();
for
(
int
iq
=
0
;
iq
<
nPoints
;
iq
++
)
lb
(
Lambda
,
(
*
vecFct
)(
grad1AtQPs
[
iq
],
grad2AtQPs
[
iq
]),
Lb
[
iq
],
1.0
);
lb
(
grd
Lambda
,
(
*
vecFct
)(
grad1AtQPs
[
iq
],
grad2AtQPs
[
iq
]),
Lb
[
iq
],
1.0
);
}
void
FctGrad2_FOT
::
eval
(
int
nPoints
,
...
...
@@ -402,12 +402,12 @@ namespace AMDiS {
}
void
Vec2AndGradAtQP_FOT
::
getLb
(
const
ElInfo
*
elInfo
,
int
nPoints
,
VectorOfFixVecs
<
DimVec
<
double
>
>&
Lb
)
const
{
const
DimVec
<
WorldVector
<
double
>
>
&
Lambda
=
elInfo
->
getGrdLambda
();
const
DimVec
<
WorldVector
<
double
>
>
&
grd
Lambda
=
elInfo
->
getGrdLambda
();
for
(
int
iq
=
0
;
iq
<
nPoints
;
iq
++
)
{
if
(
b
)
lb
(
Lambda
,
*
b
,
Lb
[
iq
],
(
*
f
)(
vec1AtQPs
[
iq
],
vec2AtQPs
[
iq
],
gradAtQPs1
[
iq
]));
lb
(
grd
Lambda
,
*
b
,
Lb
[
iq
],
(
*
f
)(
vec1AtQPs
[
iq
],
vec2AtQPs
[
iq
],
gradAtQPs1
[
iq
]));
else
l1
(
Lambda
,
Lb
[
iq
],
(
*
f
)(
vec1AtQPs
[
iq
],
vec2AtQPs
[
iq
],
gradAtQPs1
[
iq
]));
l1
(
grd
Lambda
,
Lb
[
iq
],
(
*
f
)(
vec1AtQPs
[
iq
],
vec2AtQPs
[
iq
],
gradAtQPs1
[
iq
]));
}
}
...
...
@@ -448,12 +448,12 @@ namespace AMDiS {
void
FctVecAtQP_FOT
::
getLb
(
const
ElInfo
*
elInfo
,
int
nPoints
,
VectorOfFixVecs
<
DimVec
<
double
>
>&
Lb
)
const
{
const
DimVec
<
WorldVector
<
double
>
>
&
Lambda
=
elInfo
->
getGrdLambda
();
const
DimVec
<
WorldVector
<
double
>
>
&
grd
Lambda
=
elInfo
->
getGrdLambda
();
for
(
int
iq
=
0
;
iq
<
nPoints
;
iq
++
)
{
if
(
b
)
lb
(
Lambda
,
*
b
,
Lb
[
iq
],
(
*
f
)(
coordsAtQPs
[
iq
],
vecAtQPs
[
iq
]));
lb
(
grd
Lambda
,
*
b
,
Lb
[
iq
],
(
*
f
)(
coordsAtQPs
[
iq
],
vecAtQPs
[
iq
]));
else
l1
(
Lambda
,
Lb
[
iq
],
(
*
f
)(
coordsAtQPs
[
iq
],
vecAtQPs
[
iq
]));
l1
(
grd
Lambda
,
Lb
[
iq
],
(
*
f
)(
coordsAtQPs
[
iq
],
vecAtQPs
[
iq
]));
}
}
...
...
@@ -509,17 +509,17 @@ namespace AMDiS {
void
Vec2AtQP_FOT
::
getLb
(
const
ElInfo
*
elInfo
,
int
nPoints
,
VectorOfFixVecs
<
DimVec
<
double
>
>&
Lb
)
const
{
const
DimVec
<
WorldVector
<
double
>
>
&
Lambda
=
elInfo
->
getGrdLambda
();
const
DimVec
<
WorldVector
<
double
>
>
&
grd
Lambda
=
elInfo
->
getGrdLambda
();
if
(
bOne
>
-
1
)
{
for
(
int
iq
=
0
;
iq
<
nPoints
;
iq
++
)
lb_one
(
Lambda
,
Lb
[
iq
],
(
*
f
)(
vec1AtQPs
[
iq
],
vec2AtQPs
[
iq
]));
lb_one
(
grd
Lambda
,
Lb
[
iq
],
(
*
f
)(
vec1AtQPs
[
iq
],
vec2AtQPs
[
iq
]));
}
else
if
(
b
)
{
for
(
int
iq
=
0
;
iq
<
nPoints
;
iq
++
)
lb
(
Lambda
,
*
b
,
Lb
[
iq
],
(
*
f
)(
vec1AtQPs
[
iq
],
vec2AtQPs
[
iq
]));
lb
(
grd
Lambda
,
*
b
,
Lb
[
iq
],
(
*
f
)(
vec1AtQPs
[
iq
],
vec2AtQPs
[
iq
]));
}
else
{
for
(
int
iq
=
0
;
iq
<
nPoints
;
iq
++
)
l1
(
Lambda
,
Lb
[
iq
],
(
*
f
)(
vec1AtQPs
[
iq
],
vec2AtQPs
[
iq
]));
l1
(
grd
Lambda
,
Lb
[
iq
],
(
*
f
)(
vec1AtQPs
[
iq
],
vec2AtQPs
[
iq
]));
}
}
...
...
@@ -584,16 +584,16 @@ namespace AMDiS {
void
Vec3FctAtQP_FOT
::
getLb
(
const
ElInfo
*
elInfo
,
int
nPoints
,
VectorOfFixVecs
<
DimVec
<
double
>
>&
Lb
)
const
{
const
DimVec
<
WorldVector
<
double
>
>
&
Lambda
=
elInfo
->
getGrdLambda
();
const
DimVec
<
WorldVector
<
double
>
>
&
grd
Lambda
=
elInfo
->
getGrdLambda
();
if
(
bOne
>
-
1
)
{
for
(
int
iq
=
0
;
iq
<
nPoints
;
iq
++
)
lb_one
(
Lambda
,
Lb
[
iq
],
(
*
f
)(
vec1AtQPs
[
iq
],
vec2AtQPs
[
iq
],
vec3AtQPs
[
iq
]));
lb_one
(
grd
Lambda
,
Lb
[
iq
],
(
*
f
)(
vec1AtQPs
[
iq
],
vec2AtQPs
[
iq
],
vec3AtQPs
[
iq
]));
}
else
{
for
(
int
iq
=
0
;
iq
<
nPoints
;
iq
++
)
{
if
(
b
)
lb
(
Lambda
,
*
b
,
Lb
[
iq
],
(
*
f
)(
vec1AtQPs
[
iq
],
vec2AtQPs
[
iq
],
vec3AtQPs
[
iq
]));
lb
(
grd
Lambda
,
*
b
,
Lb
[
iq
],
(
*
f
)(
vec1AtQPs
[
iq
],
vec2AtQPs
[
iq
],
vec3AtQPs
[
iq
]));
else
l1
(
Lambda
,
Lb
[
iq
],
(
*
f
)(
vec1AtQPs
[
iq
],
vec2AtQPs
[
iq
],
vec3AtQPs
[
iq
]));
l1
(
grd
Lambda
,
Lb
[
iq
],
(
*
f
)(
vec1AtQPs
[
iq
],
vec2AtQPs
[
iq
],
vec3AtQPs
[
iq
]));
}
}
}
...
...
@@ -663,7 +663,7 @@ namespace AMDiS {
std
::
vector
<
double
>
vecsArg
(
nVecs
);
std
::
vector
<
WorldVector
<
double
>
>
gradsArg
(
nGrads
);
const
DimVec
<
WorldVector
<
double
>
>
&
Lambda
=
elInfo
->
getGrdLambda
();
const
DimVec
<
WorldVector
<
double
>
>
&
grd
Lambda
=
elInfo
->
getGrdLambda
();
for
(
int
iq
=
0
;
iq
<
nPoints
;
iq
++
)
{
for
(
int
i
=
0
;
i
<
nVecs
;
i
++
)
...
...
@@ -671,7 +671,7 @@ namespace AMDiS {
for
(
int
i
=
0
;
i
<
nGrads
;
i
++
)
gradsArg
[
i
]
=
gradsAtQPs_
[
i
][
iq
];
lb
(
Lambda
,
(
*
f_
)(
coordsAtQPs_
[
iq
],
vecsArg
,
gradsArg
),
lb
(
grd
Lambda
,
(
*
f_
)(
coordsAtQPs_
[
iq
],
vecsArg
,
gradsArg
),
result
[
iq
],
1.0
);
}
}
...
...
@@ -765,14 +765,15 @@ namespace AMDiS {
std
::
vector
<
double
>
vecsArg
(
nVecs
);
std
::
vector
<
WorldVector
<
double
>
>
gradsArg
(
nGrads
);
const
DimVec
<
WorldVector
<
double
>
>
&
Lambda
=
elInfo
->
getGrdLambda
();
const
DimVec
<
WorldVector
<
double
>
>
&
grd
Lambda
=
elInfo
->
getGrdLambda
();
for
(
int
iq
=
0
;
iq
<
nPoints
;
iq
++
)
{
for
(
int
i
=
0
;
i
<
nVecs
;
i
++
)
vecsArg
[
i
]
=
vecsAtQPs
[
i
][
iq
];
for
(
int
i
=
0
;
i
<
nGrads
;
i
++
)
gradsArg
[
i
]
=
gradsAtQPs_
[
i
][
iq
];
lb
(
Lambda
,
(
*
f_
)(
coordsAtQPs_
[
iq
],
elementNormal_
,
vecsArg
,
gradsArg
),
result
[
iq
],
1.0
);
lb
(
grdLambda
,
(
*
f_
)(
coordsAtQPs_
[
iq
],
elementNormal_
,
vecsArg
,
gradsArg
),
result
[
iq
],
1.0
);
}
}
...
...
AMDiS/src/FirstOrderTerm.h
View file @
28431695
...
...
@@ -144,10 +144,10 @@ namespace AMDiS {
int
nPoints
,
VectorOfFixVecs
<
DimVec
<
double
>
>&
Lb
)
const
{
const
DimVec
<
WorldVector
<
double
>
>
&
Lambda
=
elInfo
->
getGrdLambda
();
const
DimVec
<
WorldVector
<
double
>
>
&
grd
Lambda
=
elInfo
->
getGrdLambda
();
for
(
int
iq
=
0
;
iq
<
nPoints
;
iq
++
)
l1
(
Lambda
,
Lb
[
iq
],
1.0
);
l1
(
grd
Lambda
,
Lb
[
iq
],
1.0
);
}
};
...
...
@@ -177,10 +177,10 @@ namespace AMDiS {
/// Implements FirstOrderTerm::getLb().
inline
void
getLb
(
const
ElInfo
*
elInfo
,
int
nPoints
,
VectorOfFixVecs
<
DimVec
<
double
>
>&
Lb
)
const
{
const
DimVec
<
WorldVector
<
double
>
>
&
Lambda
=
elInfo
->
getGrdLambda
();
const
DimVec
<
WorldVector
<
double
>
>
&
grd
Lambda
=
elInfo
->
getGrdLambda
();
for
(
int
iq
=
0
;
iq
<
nPoints
;
iq
++
)
l1
(
Lambda
,
Lb
[
iq
],
(
*
factor
));
l1
(
grd
Lambda
,
Lb
[
iq
],
(
*
factor
));
}
private:
...
...
@@ -214,14 +214,14 @@ namespace AMDiS {
int
nPoints
,
VectorOfFixVecs
<
DimVec
<
double
>
>&
Lb
)
const
{
const
DimVec
<
WorldVector
<
double
>
>
&
Lambda
=
elInfo
->
getGrdLambda
();
const
DimVec
<
WorldVector
<
double
>
>
&
grd
Lambda
=
elInfo
->
getGrdLambda
();
if
(
bOne
>
-
1
)
{
for
(
int
iq
=
0
;
iq
<
nPoints
;
iq
++
)
lb_one
(
Lambda
,
Lb
[
iq
],
1.0
);
lb_one
(
grd
Lambda
,
Lb
[
iq
],
1.0
);
}
else
{
for
(
int
iq
=
0
;
iq
<
nPoints
;
iq
++
)
lb
(
Lambda
,
*
b
,
Lb
[
iq
],
1.0
);
lb
(
grd
Lambda
,
*
b
,
Lb
[
iq
],
1.0
);
}
}
...
...
AMDiS/src/Operator.cc
View file @
28431695
...
...
@@ -115,6 +115,7 @@ namespace AMDiS {
void
Operator
::
getElementMatrix
(
const
ElInfo
*
rowElInfo
,
const
ElInfo
*
colElInfo
,
const
ElInfo
*
smallElInfo
,
const
ElInfo
*
largeElInfo
,
bool
rowColFeSpaceEqual
,
ElementMatrix
&
userMat
,
double
factor
)
{
...
...
@@ -125,6 +126,7 @@ namespace AMDiS {
assembler
[
myRank
]
->
calculateElementMatrix
(
rowElInfo
,
colElInfo
,
smallElInfo
,
largeElInfo
,
rowColFeSpaceEqual
,
userMat
,
factor
);
}
...
...