Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
dumux-repositories
dumux
Commits
870f528e
Commit
870f528e
authored
Apr 06, 2018
by
Kilian Weishaupt
Browse files
[test][co2][implicit] Use NewtonSolver
parent
dbfa6b00
Changes
1
Hide whitespace changes
Inline
Side-by-side
test/porousmediumflow/co2/implicit/test_co2_fv.cc
View file @
870f528e
...
...
@@ -38,8 +38,7 @@
#include
<dumux/common/defaultusagemessage.hh>
#include
<dumux/linear/amgbackend.hh>
#include
<dumux/nonlinear/newtonmethod.hh>
#include
<dumux/porousmediumflow/compositional/privarswitchnewtoncontroller.hh>
#include
<dumux/nonlinear/privarswitchnewtonsolver.hh>
#include
<dumux/assembly/fvassembler.hh>
#include
<dumux/assembly/diffmethod.hh>
...
...
@@ -103,7 +102,6 @@ int main(int argc, char** argv) try
// get some time loop parameters
using
Scalar
=
typename
GET_PROP_TYPE
(
TypeTag
,
Scalar
);
const
auto
tEnd
=
getParam
<
Scalar
>
(
"TimeLoop.TEnd"
);
const
auto
maxDivisions
=
getParam
<
int
>
(
"TimeLoop.MaxTimeStepDivisions"
);
const
auto
maxDt
=
getParam
<
Scalar
>
(
"TimeLoop.MaxTimeStepSize"
);
auto
dt
=
getParam
<
Scalar
>
(
"TimeLoop.DtInitial"
);
...
...
@@ -132,10 +130,9 @@ int main(int argc, char** argv) try
auto
linearSolver
=
std
::
make_shared
<
LinearSolver
>
(
leafGridView
,
fvGridGeometry
->
dofMapper
());
// the non-linear solver
using
NewtonController
=
PriVarSwitchNewtonController
<
TypeTag
>
;
using
NewtonMethod
=
Dumux
::
NewtonMethod
<
NewtonController
,
Assembler
,
LinearSolver
>
;
auto
newtonController
=
std
::
make_shared
<
NewtonController
>
(
timeLoop
);
NewtonMethod
nonLinearSolver
(
newtonController
,
assembler
,
linearSolver
);
using
NewtonSolver
=
PriVarSwitchNewtonSolver
<
Assembler
,
LinearSolver
,
typename
GET_PROP_TYPE
(
TypeTag
,
PrimaryVariableSwitch
)
>
;
NewtonSolver
nonLinearSolver
(
assembler
,
linearSolver
);
// time loop
timeLoop
->
start
();
do
...
...
@@ -143,24 +140,8 @@ int main(int argc, char** argv) try
// set previous solution for storage evaluations
assembler
->
setPreviousSolution
(
xOld
);
// try solving the non-linear system
for
(
int
i
=
0
;
i
<
maxDivisions
;
++
i
)
{
// linearize & solve
auto
converged
=
nonLinearSolver
.
solve
(
x
);
if
(
converged
)
break
;
if
(
!
converged
&&
i
==
maxDivisions
-
1
)
DUNE_THROW
(
Dune
::
MathError
,
"Newton solver didn't converge after "
<<
maxDivisions
<<
" time-step divisions. dt="
<<
timeLoop
->
timeStepSize
()
<<
".
\n
The solutions of the current and the previous time steps "
<<
"have been saved to restart files."
);
}
// solve the non-linear system with time step control
nonLinearSolver
.
solve
(
x
,
*
timeLoop
);
// make the new solution the old solution
xOld
=
x
;
...
...
@@ -172,8 +153,8 @@ int main(int argc, char** argv) try
// report statistics of this time step
timeLoop
->
reportTimeStep
();
// set new dt as suggested by newton
contr
ol
l
er
timeLoop
->
setTimeStepSize
(
n
ewtonContr
ol
l
er
->
suggestTimeStepSize
(
timeLoop
->
timeStepSize
()));
// set new dt as suggested by
the
newton
s
ol
v
er
timeLoop
->
setTimeStepSize
(
n
onLinearS
ol
v
er
.
suggestTimeStepSize
(
timeLoop
->
timeStepSize
()));
// write vtk output
vtkWriter
.
write
(
timeLoop
->
time
());
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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