Skip to content

Commit

Permalink
Let the test test everything in on go after the change.
Browse files Browse the repository at this point in the history
  • Loading branch information
MFraters committed Feb 12, 2018
1 parent 90e8c3e commit e657541
Show file tree
Hide file tree
Showing 3 changed files with 113 additions and 8 deletions.
46 changes: 40 additions & 6 deletions tests/visco_plastic_derivatives.cc
Expand Up @@ -5,22 +5,24 @@
#include <aspect/material_model/visco_plastic.h>
#include <aspect/simulator_access.h>
#include <aspect/newton.h>
#include <aspect/parameters.h>

#include <deal.II/grid/tria.h>
#include <deal.II/base/exceptions.h>
#include <deal.II/base/std_cxx11/shared_ptr.h>
#include <deal.II/base/std_cxx11/bind.h>

#include <iostream>

template <int dim>
void f(const aspect::SimulatorAccess<dim> &simulator_access,
aspect::Assemblers::Manager<dim> &,
unsigned int parameter)
std::string averaging_parameter)
{
// Prepare NewtonHandler for test
const_cast<aspect::NewtonHandler<dim> &> (simulator_access.get_newton_handler()).set_newton_derivative_scaling_factor(1.0);

std::cout << std::endl << "Testing ViscoPlastic derivatives against analytical derivatives" << std::endl;
std::cout << std::endl << "Testing ViscoPlastic derivatives against analytical derivatives for averaging parameter " << averaging_parameter << std::endl;

using namespace aspect::MaterialModel;
MaterialModelInputs<dim> in_base(5,3);
Expand Down Expand Up @@ -134,6 +136,26 @@ void f(const aspect::SimulatorAccess<dim> &simulator_access,
MaterialModelOutputs<dim> out_dviscositydstrainrate_oneone(5,3);
MaterialModelOutputs<dim> out_dviscositydtemperature(5,3);

aspect::ParameterHandler prm;

const aspect::MaterialModel::ViscoPlastic<dim> const_material_model = dynamic_cast<const aspect::MaterialModel::ViscoPlastic<dim> &>(simulator_access.get_material_model());
aspect::MaterialModel::ViscoPlastic<dim> material_model = const_cast<aspect::MaterialModel::ViscoPlastic<dim> &>(const_material_model);

material_model.declare_parameters(prm);

prm.enter_subsection("Material model");
{
prm.enter_subsection ("Visco Plastic");
{
prm.set ("Viscosity averaging scheme", averaging_parameter);
prm.set ("Angles of internal friction", "30");
}
prm.leave_subsection();
}
prm.leave_subsection();

const_cast<aspect::MaterialModel::Interface<dim> &>(simulator_access.get_material_model()).parse_parameters(prm);

out_base.additional_outputs.push_back(std_cxx11::make_shared<MaterialModelDerivatives<dim> > (5));

simulator_access.get_material_model().evaluate(in_base, out_base);
Expand Down Expand Up @@ -241,25 +263,37 @@ void f(const aspect::SimulatorAccess<dim> &simulator_access,
}

template <>
void f(const aspect::SimulatorAccess<3> &simulator_access,
aspect::Assemblers::Manager<3> &)
void f(const aspect::SimulatorAccess<3> &,
aspect::Assemblers::Manager<3> &,
std::string )
{
AssertThrow(false,dealii::ExcInternalError());
}

template <int dim>
void signal_connector (aspect::SimulatorSignals<dim> &signals)
{
using namespace dealii;
std::cout << "* Connecting signals" << std::endl;
signals.set_assemblers.connect (std_cxx11::bind(&f<dim>,
std_cxx11::_1,
std_cxx11::_2,
1));
"harmonic"));

signals.set_assemblers.connect (std_cxx11::bind(&f<dim>,
std_cxx11::_1,
std_cxx11::_2,
"geometric"));

signals.set_assemblers.connect (std_cxx11::bind(&f<dim>,
std_cxx11::_1,
std_cxx11::_2,
"arithmetic"));

signals.set_assemblers.connect (std_cxx11::bind(&f<dim>,
std_cxx11::_1,
std_cxx11::_2,
2));
"maximum composition"));
}

ASPECT_REGISTER_SIGNALS_CONNECTOR(signal_connector<2>,
Expand Down
2 changes: 1 addition & 1 deletion tests/visco_plastic_derivatives.prm
Expand Up @@ -7,7 +7,7 @@ set Dimension = 2
set End time = 0
set Use years in output instead of seconds = true
set Nonlinear solver scheme = Newton Stokes
set Max nonlinear iterations = 1
set Max nonlinear iterations = 0
set Number of cheap Stokes solver steps = 0

# Model geometry (100x100 km, 10 km spacing)
Expand Down
73 changes: 72 additions & 1 deletion tests/visco_plastic_derivatives/screen-output
@@ -1,9 +1,80 @@
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------

Loading shared library <./libvisco_plastic_derivatives.so>

* Connecting signals

Testing ViscoPlastic derivatives against analytical derivatives
Testing ViscoPlastic derivatives against analytical derivatives for averaging parameter harmonic
pressure at point 0: Finite difference = 0. Analytical derivative = 0
pressure at point 1: Finite difference = 2.12594e+08. Analytical derivative = 2.12594e+08
pressure at point 2: Finite difference = 2.68615e+08. Analytical derivative = 2.68615e+08
pressure at point 3: Finite difference = 0. Analytical derivative = 0
pressure at point 4: Finite difference = 1.8585e+16. Analytical derivative = 1.8585e+16
zerozero at point 0: Finite difference = 0. Analytical derivative = 0
zerozero at point 1: Finite difference = 6.58655e+26. Analytical derivative = 6.58655e+26
zerozero at point 2: Finite difference = 1.23761e+27. Analytical derivative = 1.23761e+27
zerozero at point 3: Finite difference = 0. Analytical derivative = 0
zerozero at point 4: Finite difference = 4.13904e+35. Analytical derivative = 4.13904e+35
onezero at point 0: Finite difference = 0. Analytical derivative = 0
onezero at point 1: Finite difference = 3.5961e+28. Analytical derivative = 3.5961e+28
onezero at point 2: Finite difference = -2.2502e+28. Analytical derivative = -2.2502e+28
onezero at point 3: Finite difference = 0. Analytical derivative = 0
onezero at point 4: Finite difference = -4.13904e+35. Analytical derivative = -4.13904e+35
oneone at point 0: Finite difference = 0. Analytical derivative = 0
oneone at point 1: Finite difference = -6.58657e+26. Analytical derivative = -6.58657e+26
oneone at point 2: Finite difference = -1.23761e+27. Analytical derivative = -1.23761e+27
oneone at point 3: Finite difference = 0. Analytical derivative = 0
oneone at point 4: Finite difference = -4.13904e+35. Analytical derivative = -4.13904e+35
OK

Testing ViscoPlastic derivatives against analytical derivatives for averaging parameter geometric
pressure at point 0: Finite difference = 0. Analytical derivative = 0
pressure at point 1: Finite difference = 2.12594e+08. Analytical derivative = 2.12594e+08
pressure at point 2: Finite difference = 2.68615e+08. Analytical derivative = 2.68615e+08
pressure at point 3: Finite difference = 0. Analytical derivative = 0
pressure at point 4: Finite difference = 1.8585e+16. Analytical derivative = 1.8585e+16
zerozero at point 0: Finite difference = 0. Analytical derivative = 0
zerozero at point 1: Finite difference = 6.58587e+26. Analytical derivative = 6.58655e+26
zerozero at point 2: Finite difference = 1.23759e+27. Analytical derivative = 1.23761e+27
zerozero at point 3: Finite difference = 0. Analytical derivative = 0
zerozero at point 4: Finite difference = 4.13904e+35. Analytical derivative = 4.13904e+35
onezero at point 0: Finite difference = 0. Analytical derivative = 0
onezero at point 1: Finite difference = 3.5961e+28. Analytical derivative = 3.5961e+28
onezero at point 2: Finite difference = -2.2502e+28. Analytical derivative = -2.2502e+28
onezero at point 3: Finite difference = 0. Analytical derivative = 0
onezero at point 4: Finite difference = -4.13904e+35. Analytical derivative = -4.13904e+35
oneone at point 0: Finite difference = 0. Analytical derivative = 0
oneone at point 1: Finite difference = -6.58596e+26. Analytical derivative = -6.58657e+26
oneone at point 2: Finite difference = -1.23785e+27. Analytical derivative = -1.23761e+27
oneone at point 3: Finite difference = 0. Analytical derivative = 0
oneone at point 4: Finite difference = -4.13904e+35. Analytical derivative = -4.13904e+35
OK

Testing ViscoPlastic derivatives against analytical derivatives for averaging parameter arithmetic
pressure at point 0: Finite difference = 0. Analytical derivative = 0
pressure at point 1: Finite difference = 2.12594e+08. Analytical derivative = 2.12594e+08
pressure at point 2: Finite difference = 2.68615e+08. Analytical derivative = 2.68615e+08
pressure at point 3: Finite difference = 0. Analytical derivative = 0
pressure at point 4: Finite difference = 1.8585e+16. Analytical derivative = 1.8585e+16
zerozero at point 0: Finite difference = 0. Analytical derivative = 0
zerozero at point 1: Finite difference = 6.58655e+26. Analytical derivative = 6.58655e+26
zerozero at point 2: Finite difference = 1.23761e+27. Analytical derivative = 1.23761e+27
zerozero at point 3: Finite difference = 0. Analytical derivative = 0
zerozero at point 4: Finite difference = 4.13904e+35. Analytical derivative = 4.13904e+35
onezero at point 0: Finite difference = 0. Analytical derivative = 0
onezero at point 1: Finite difference = 3.5961e+28. Analytical derivative = 3.5961e+28
onezero at point 2: Finite difference = -2.2502e+28. Analytical derivative = -2.2502e+28
onezero at point 3: Finite difference = 0. Analytical derivative = 0
onezero at point 4: Finite difference = -4.13904e+35. Analytical derivative = -4.13904e+35
oneone at point 0: Finite difference = 0. Analytical derivative = 0
oneone at point 1: Finite difference = -6.58657e+26. Analytical derivative = -6.58657e+26
oneone at point 2: Finite difference = -1.23761e+27. Analytical derivative = -1.23761e+27
oneone at point 3: Finite difference = 0. Analytical derivative = 0
oneone at point 4: Finite difference = -4.13904e+35. Analytical derivative = -4.13904e+35
OK

Testing ViscoPlastic derivatives against analytical derivatives for averaging parameter maximum composition
pressure at point 0: Finite difference = 0. Analytical derivative = 0
pressure at point 1: Finite difference = 2.12594e+08. Analytical derivative = 2.12594e+08
pressure at point 2: Finite difference = 2.68615e+08. Analytical derivative = 2.68615e+08
Expand Down

0 comments on commit e657541

Please sign in to comment.