33#ifndef __UG__LIB_DISC__ORDERING_STRATEGIES_ALGORITHMS_DIRECTIONAL_ORDERING__
34#define __UG__LIB_DISC__ORDERING_STRATEGIES_ALGORITHMS_DIRECTIONAL_ORDERING__
36#include <boost/graph/adjacency_list.hpp>
37#include <boost/graph/graph_traits.hpp>
38#include <boost/graph/properties.hpp>
40#include <boost/graph/cuthill_mckee_ordering.hpp>
60 const std::pair<number, size_t> &p2)
62 return p1.first<p2.first;
66template <
typename TAlgebra,
typename TDomain,
typename O_t>
70 typedef typename TAlgebra::matrix_type
M_t;
71 typedef typename TAlgebra::vector_type
V_t;
74 typedef typename std::pair<MathVector<TDomain::dim>,
size_t>
Position_t;
75 typedef typename std::pair<number, size_t>
Scalar_t;
103 for(
size_t i = 0; i <
m_vScalars.size(); ++i){
117 if((pGridF =
dynamic_cast<const GridFunc_t*
>(&V)) == 0){
118 UG_THROW(
name() <<
"::init: No DoFDistribution specified.");
123 n = dd->num_indices();
125 if(n != A->num_rows ()){
136 #ifdef UG_ENABLE_DEBUG_LOGS
142 UG_THROW(
name() <<
"::init: Cannot initialize smoother without a geometry. Specify the 2nd argument for init!");
146 UG_THROW(
name() <<
"::init: induced subgraph version not implemented yet!");
150 UG_THROW(
name() <<
"::init: induced subgraph version not implemented yet!");
167 virtual const char*
name()
const {
return "DirectionalOrdering";}
Definition smart_pointer.h:108
Definition directional_ordering.cpp:68
IOrderingAlgorithm< TAlgebra, O_t > baseclass
Definition directional_ordering.cpp:72
O_t & ordering()
Definition directional_ordering.cpp:159
void init(M_t *A, const V_t &V)
Definition directional_ordering.cpp:112
void init(M_t *A, const V_t &, const O_t &inv_map)
Definition directional_ordering.cpp:145
MathVector< TDomain::dim > small_vec_t
Definition directional_ordering.cpp:76
DirectionalOrdering(const DirectionalOrdering< TAlgebra, TDomain, O_t > &parent)
clone constructor
Definition directional_ordering.cpp:84
void init(M_t *A)
Definition directional_ordering.cpp:141
void set_direction(small_vec_t *dir)
Definition directional_ordering.cpp:163
std::vector< Scalar_t > m_vScalars
Definition directional_ordering.cpp:175
std::pair< number, size_t > Scalar_t
Definition directional_ordering.cpp:75
void compute()
Definition directional_ordering.cpp:92
DirectionalOrdering()
Definition directional_ordering.cpp:81
void check()
Definition directional_ordering.cpp:153
small_vec_t * m_dir
Definition directional_ordering.cpp:172
std::pair< MathVector< TDomain::dim >, size_t > Position_t
Definition directional_ordering.cpp:74
TAlgebra::matrix_type M_t
Definition directional_ordering.cpp:70
TAlgebra::vector_type V_t
Definition directional_ordering.cpp:71
O_t o
Definition directional_ordering.cpp:170
GridFunction< TDomain, TAlgebra > GridFunc_t
Definition directional_ordering.cpp:77
virtual const char * name() const
Definition directional_ordering.cpp:167
SmartPtr< IOrderingAlgorithm< TAlgebra, O_t > > clone()
Definition directional_ordering.cpp:87
std::vector< Position_t > m_vPositions
Definition directional_ordering.cpp:174
void init(M_t *A, const O_t &inv_map)
Definition directional_ordering.cpp:149
SmartPtr< UserData< MathVector< TDomain::dim >, TDomain::dim > > TSpUserData
Definition directional_ordering.cpp:79
represents numerical solutions on a grid using an algebraic vector
Definition grid_function.h:121
Definition IOrderingAlgorithm.h:52
a mathematical Vector with N entries.
Definition math_vector.h:97
#define UG_THROW(msg)
Definition error.h:57
#define UG_LOG(msg)
Definition log.h:367
bool CompareScalar(const std::pair< number, size_t > &p1, const std::pair< number, size_t > &p2)
Definition directional_ordering.cpp:59
void ExtractPositions(ConstSmartPtr< TDomain > domain, ConstSmartPtr< DoFDistribution > dd, std::vector< MathVector< TDomain::dim > > &vPos)
Definition dof_position_util.cpp:424
bool is_permutation(O_t &o)
Definition permutation_util.h:135
SmartPtr< T, FreePolicy > make_sp(T *inst)
returns a SmartPtr for the passed raw pointer
Definition smart_pointer.h:836