Loading [MathJax]/extensions/tex2jax.js
ug4
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
energy_convergence_check.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2014-2015: G-CSC, Goethe University Frankfurt
3 * Author: Martin Rupp
4 *
5 * This file is part of UG4.
6 *
7 * UG4 is free software: you can redistribute it and/or modify it under the
8 * terms of the GNU Lesser General Public License version 3 (as published by the
9 * Free Software Foundation) with the following additional attribution
10 * requirements (according to LGPL/GPL v3 §7):
11 *
12 * (1) The following notice must be displayed in the Appropriate Legal Notices
13 * of covered and combined works: "Based on UG4 (www.ug4.org/license)".
14 *
15 * (2) The following notice must be displayed at a prominent place in the
16 * terminal output of covered works: "Based on UG4 (www.ug4.org/license)".
17 *
18 * (3) The following bibliography is recommended for citation and must be
19 * preserved in all covered files:
20 * "Reiter, S., Vogel, A., Heppner, I., Rupp, M., and Wittum, G. A massively
21 * parallel geometric multigrid solver on hierarchically distributed grids.
22 * Computing and visualization in science 16, 4 (2013), 151-164"
23 * "Vogel, A., Reiter, S., Rupp, M., Nägel, A., and Wittum, G. UG4 -- a novel
24 * flexible software system for simulating pde based models on high performance
25 * computers. Computing and visualization in science 16, 4 (2013), 165-179"
26 *
27 * This program is distributed in the hope that it will be useful,
28 * but WITHOUT ANY WARRANTY; without even the implied warranty of
29 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
30 * GNU Lesser General Public License for more details.
31 */
32
33#ifndef __H__LIB_ALGEBRA__OPERATOR__ENERGY_CONVERGENCE_CHECK__
34#define __H__LIB_ALGEBRA__OPERATOR__ENERGY_CONVERGENCE_CHECK__
35
36#include "convergence_check.h"
37
38namespace ug{
39
40
41template <typename TVector>
42class EnergyConvCheck : public StdConvCheck<TVector>
43{
45 public:
47 EnergyConvCheck(int maxSteps, number minDefect, number relReduction) : base_type(maxSteps, minDefect, relReduction) {}
48 EnergyConvCheck(int maxSteps, number minDefect, number relReduction, bool verbose)
49 : base_type(maxSteps, minDefect, relReduction, verbose) {}
50 EnergyConvCheck(int maxSteps, number minDefect, number relReduction, bool verbose,bool suppressUnsuccessful)
51 : base_type(maxSteps, minDefect, relReduction, verbose, suppressUnsuccessful) {}
52
54 {
56 // use std assignment (implicit member-wise is fine here)
57 *newInst = *this;
58 return newInst;
59 }
60
61 void start(const TVector& d)
62 {
63 base_type::start_defect(energy_norm(d));
64 }
65 void update(const TVector& d)
66 {
67 base_type::update_defect(energy_norm(d));
68 }
69
70 double energy_norm(const TVector &d)
71 {
72 if(tmp.valid() == false || tmp->size() != d.size())
73 {
74 tmp = d.clone_without_values();
75 tmp2 = d.clone_without_values();
76 }
77 TVector &t = *tmp;
78 TVector &t2 = *tmp2;
79 t = d;
80#ifdef UG_PARALLEL
81 t.change_storage_type(PST_CONSISTENT);
82#endif
83 m_op->apply(t2, t);
84 return sqrt(VecProd(t, t2));
85 }
86
87 virtual std::string config_string() const
88 {
89 std::stringstream ss;
90 ss << "EnergyConvCheck( max steps = " << base_type::m_maxSteps << ", min defect = " << base_type::m_minDefect <<
91 ", relative reduction = " << base_type::m_relReduction << ")";
92 return ss.str();
93 }
94
99
100private:
103
104};
105
106
107}
108
109#endif /* __H__LIB_ALGEBRA__OPERATOR__ENERGY_CONVERGENCE_CHECK__ */
location verbose
Definition checkpoint_util.lua:128
Definition smart_pointer.h:108
bool valid() const
returns true if the pointer is valid, false if not.
Definition smart_pointer.h:206
Definition energy_convergence_check.h:43
virtual SmartPtr< IConvergenceCheck< TVector > > clone()
clone the object
Definition energy_convergence_check.h:53
EnergyConvCheck(int maxSteps, number minDefect, number relReduction, bool verbose)
Definition energy_convergence_check.h:48
EnergyConvCheck(int maxSteps, number minDefect, number relReduction)
Definition energy_convergence_check.h:47
double energy_norm(const TVector &d)
Definition energy_convergence_check.h:70
StdConvCheck< TVector > base_type
Definition energy_convergence_check.h:44
virtual std::string config_string() const
returns information about configuration parameters
Definition energy_convergence_check.h:87
void update(const TVector &d)
computes the defect and sets it a the next defect value
Definition energy_convergence_check.h:65
void set_linear_operator(SmartPtr< ILinearOperator< TVector > > op)
Definition energy_convergence_check.h:95
SmartPtr< TVector > tmp
Definition energy_convergence_check.h:101
EnergyConvCheck()
Definition energy_convergence_check.h:46
EnergyConvCheck(int maxSteps, number minDefect, number relReduction, bool verbose, bool suppressUnsuccessful)
Definition energy_convergence_check.h:50
SmartPtr< ILinearOperator< TVector > > m_op
Definition energy_convergence_check.h:102
void start(const TVector &d)
computes the start defect and set it
Definition energy_convergence_check.h:61
SmartPtr< TVector > tmp2
Definition energy_convergence_check.h:101
describes a linear mapping X->Y
Definition linear_operator.h:80
Definition convergence_check.h:179
@ PST_CONSISTENT
Definition parallel_storage_type.h:68
double number
Definition types.h:124
the ug namespace
double VecProd(const double &a, const double &b)
returns scal<a, b>
Definition operations_vec.h:84