Skip to content
GitLab
Menu
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
bc23a38c
Commit
bc23a38c
authored
Oct 09, 2012
by
Thomas Witkowski
Browse files
Changed augmented coarse grid problem to its transpose.
parent
01656427
Changes
2
Hide whitespace changes
Inline
Side-by-side
AMDiS/src/parallel/PetscSolverFeti.cc
View file @
bc23a38c
...
...
@@ -683,13 +683,13 @@ namespace AMDiS {
nOverallEdges
*=
feSpaces
.
size
();
MatCreateAIJ
(
mpiCommGlobal
,
lagrangeMap
.
getRankDofs
(),
nRankEdges
,
lagrangeMap
.
getOverallDofs
(),
nOverallEdges
,
nRankEdges
,
lagrangeMap
.
getRankDofs
(),
nOverallEdges
,
lagrangeMap
.
getOverallDofs
(),
1
,
PETSC_NULL
,
1
,
PETSC_NULL
,
&
mat_augmented_lagrange
);
MatSetOption
(
mat_augmented_lagrange
,
MAT_NEW_NONZERO_ALLOCATION_ERR
,
PETSC_FALSE
);
int
col
Counter
=
rStartEdges
;
int
row
Counter
=
rStartEdges
;
for
(
InteriorBoundary
::
iterator
it
(
intBound
.
getOwn
());
!
it
.
end
();
++
it
)
{
if
(
it
->
rankObj
.
subObj
==
EDGE
)
{
for
(
int
i
=
0
;
i
<
feSpaces
.
size
();
i
++
)
{
...
...
@@ -703,12 +703,12 @@ namespace AMDiS {
TEST_EXIT_DBG
(
isPrimal
(
feSpaces
[
i
],
**
it
)
==
false
)
(
"Should not be primal!
\n
"
);
int
row
=
lagrangeMap
.
getMatIndex
(
i
,
**
it
);
int
col
=
lagrangeMap
.
getMatIndex
(
i
,
**
it
);
double
value
=
1.0
;
MatSetValue
(
mat_augmented_lagrange
,
row
,
col
Counter
,
value
,
INSERT_VALUES
);
MatSetValue
(
mat_augmented_lagrange
,
rowCounter
,
col
,
value
,
INSERT_VALUES
);
}
col
Counter
++
;
row
Counter
++
;
}
}
}
...
...
@@ -1928,10 +1928,14 @@ namespace AMDiS {
MatMult
(
mat_lagrange
,
tmp_b0
,
tmp_lagrange
);
}
else
{
Vec
tmp_mu
;
MatGetVecs
(
mat_augmented_lagrange
,
&
tmp_mu
,
PETSC_NULL
);
MatGetVecs
(
mat_augmented_lagrange
,
PETSC_NULL
,
&
tmp_mu
);
MatMult
(
mat_augmented_lagrange
,
vecRhsLagrange
,
tmp_mu
);
VecScale
(
tmp_mu
,
-
1.0
);
Vec
vec_array
[
2
]
=
{
tmp_primal0
,
tmp_mu
};
Vec
vec_nest
;
VecCreateNest
(
PETSC_COMM_WORLD
,
2
,
PETSC_NULL
,
vec_array
,
&
vec_nest
);
VecCreateNest
(
PETSC_COMM_WORLD
,
2
,
PETSC_NULL
,
vec_array
,
&
vec_nest
);
KSPSolve
(
ksp_schur_primal
,
vec_nest
,
vec_nest
);
...
...
@@ -1943,7 +1947,7 @@ namespace AMDiS {
// 2 Step
Vec
tmp_lagrange1
;
VecDuplicate
(
tmp_lagrange
,
&
tmp_lagrange1
);
MatMult
(
mat_augmented_lagrange
,
tmp_mu
,
tmp_lagrange1
);
MatMult
Transpose
(
mat_augmented_lagrange
,
tmp_mu
,
tmp_lagrange1
);
MatMultTranspose
(
mat_lagrange
,
tmp_lagrange1
,
tmp_b0
);
subdomain
->
solveGlobal
(
tmp_b0
,
tmp_b0
);
MatMult
(
mat_lagrange
,
tmp_b0
,
tmp_lagrange1
);
...
...
@@ -1955,7 +1959,7 @@ namespace AMDiS {
VecDestroy
(
&
vec_nest
);
}
VecAXP
B
Y
(
vecRhsLagrange
,
-
1.0
,
1.0
,
tmp_lagrange
);
VecAXPY
(
vecRhsLagrange
,
-
1.0
,
tmp_lagrange
);
}
else
{
TEST_EXIT
(
augmentedLagrange
)(
"Not yet implemented!
\n
"
);
...
...
AMDiS/src/parallel/PetscSolverFetiOperators.cc
View file @
bc23a38c
...
...
@@ -51,8 +51,8 @@ namespace AMDiS {
MatMult
(
data
->
subSolver
->
getMatInteriorCoarse
(),
x_primal
,
data
->
tmp_vec_b0
);
data
->
subSolver
->
solveGlobal
(
data
->
tmp_vec_b0
,
data
->
tmp_vec_b0
);
// inv(K_BB)
J^T Q
x_mu
MatMult
(
*
(
data
->
mat_augmented_lagrange
),
x_mu
,
data
->
tmp_vec_lagrange
);
// inv(K_BB)
trans(J) trans(Q)
x_mu
MatMult
Transpose
(
*
(
data
->
mat_augmented_lagrange
),
x_mu
,
data
->
tmp_vec_lagrange
);
MatMultTranspose
(
*
(
data
->
mat_lagrange
),
data
->
tmp_vec_lagrange
,
data
->
tmp_vec_b1
);
data
->
subSolver
->
solveGlobal
(
data
->
tmp_vec_b1
,
data
->
tmp_vec_b1
);
...
...
@@ -62,16 +62,16 @@ namespace AMDiS {
MatMult
(
data
->
subSolver
->
getMatCoarse
(),
x_primal
,
y_primal
);
VecAXPY
(
y_primal
,
-
1.0
,
data
->
tmp_vec_primal
);
// y_Pi += (-K_PiB inv(K_BB) J^T Q) x_mu
// y_Pi += (-K_PiB inv(K_BB) J^T Q
^T
) x_mu
MatMult
(
data
->
subSolver
->
getMatCoarseInterior
(),
data
->
tmp_vec_b1
,
data
->
tmp_vec_primal
);
VecAXPY
(
y_primal
,
-
1.0
,
data
->
tmp_vec_primal
);
// y_mu = (-Q
^T
J inv(K_BB) K_BPi) x_Pi + (-Q
^T
J inv(K_BB) J^T Q) x_mu
// = -Q
^T
J (inv(K_BB) K_BPi x_Pi + inv(K_BB) J^T Q x_mu)
// y_mu = (-Q J inv(K_BB) K_BPi) x_Pi + (-Q J inv(K_BB) J^T Q) x_mu
// = -Q J (inv(K_BB) K_BPi x_Pi + inv(K_BB) J^T Q x_mu)
VecAXPY
(
data
->
tmp_vec_b0
,
1.0
,
data
->
tmp_vec_b1
);
MatMult
(
*
(
data
->
mat_lagrange
),
data
->
tmp_vec_b0
,
data
->
tmp_vec_lagrange
);
MatMult
Transpose
(
*
(
data
->
mat_augmented_lagrange
),
data
->
tmp_vec_lagrange
,
y_mu
);
MatMult
(
*
(
data
->
mat_augmented_lagrange
),
data
->
tmp_vec_lagrange
,
y_mu
);
VecScale
(
y_mu
,
-
1.0
);
return
0
;
...
...
@@ -135,7 +135,7 @@ namespace AMDiS {
FetiData
*
data
=
static_cast
<
FetiData
*>
(
ctx
);
Vec
vec_mu0
,
vec_mu1
;
MatGetVecs
(
*
(
data
->
mat_augmented_lagrange
),
&
vec_mu0
,
PETSC_NULL
);
MatGetVecs
(
*
(
data
->
mat_augmented_lagrange
),
PETSC_NULL
,
&
vec_mu0
);
VecDuplicate
(
vec_mu0
,
&
vec_mu1
);
MatMultTranspose
(
*
(
data
->
mat_lagrange
),
x
,
data
->
tmp_vec_b0
);
...
...
@@ -143,7 +143,7 @@ namespace AMDiS {
MatMult
(
data
->
subSolver
->
getMatCoarseInterior
(),
data
->
tmp_vec_b0
,
data
->
tmp_vec_primal0
);
MatMult
(
*
(
data
->
mat_lagrange
),
data
->
tmp_vec_b0
,
data
->
tmp_vec_lagrange
);
MatMult
Transpose
(
*
(
data
->
mat_augmented_lagrange
),
data
->
tmp_vec_lagrange
,
vec_mu0
);
MatMult
(
*
(
data
->
mat_augmented_lagrange
),
data
->
tmp_vec_lagrange
,
vec_mu0
);
Vec
vec_array0
[
2
]
=
{
data
->
tmp_vec_primal0
,
vec_mu0
};
Vec
vec_array1
[
2
]
=
{
data
->
tmp_vec_primal1
,
vec_mu1
};
...
...
@@ -163,7 +163,7 @@ namespace AMDiS {
VecAXPY
(
y
,
1.0
,
data
->
tmp_vec_lagrange
);
// Step 3
MatMult
(
*
(
data
->
mat_augmented_lagrange
),
vec_mu1
,
data
->
tmp_vec_lagrange
);
MatMult
Transpose
(
*
(
data
->
mat_augmented_lagrange
),
vec_mu1
,
data
->
tmp_vec_lagrange
);
MatMultTranspose
(
*
(
data
->
mat_lagrange
),
data
->
tmp_vec_lagrange
,
data
->
tmp_vec_b0
);
data
->
subSolver
->
solveGlobal
(
data
->
tmp_vec_b0
,
data
->
tmp_vec_b0
);
MatMult
(
*
(
data
->
mat_lagrange
),
data
->
tmp_vec_b0
,
data
->
tmp_vec_lagrange
);
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment