dune-grid 2.8.0
Loading...
Searching...
No Matches
periodicfacetrans.hh
Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2// vi: set et ts=4 sw=2 sts=2:
3#ifndef DUNE_DGF_PERIODICFACETRANSBLOCK_HH
4#define DUNE_DGF_PERIODICFACETRANSBLOCK_HH
5
6#include <iostream>
7#include <vector>
8
10
11
12namespace Dune
13{
14
15 namespace dgf
16 {
17
18 // PeriodicFaceTransformationBlock
19 // -------------------------------
20
22 : public BasicBlock
23 {
24 template< class T >
25 class Matrix;
26
28
29 private:
30 std::vector< AffineTransformation > transformations_;
31
32 // copy not implemented
34
35 public:
36 // initialize block and get dimension of world
37 PeriodicFaceTransformationBlock ( std::istream &in, int dimworld );
38
39 const AffineTransformation &transformation ( int i ) const
40 {
41 assert( i < numTransformations() );
42 return transformations_[ i ];
43 }
44
45 int numTransformations () const
46 {
47 return transformations_.size();
48 }
49
50 private:
51 void match ( char what );
52 };
53
54
55 // PeriodicFaceTransformationBlock::Matrix
56 // ---------------------------------------
57
58 template< class T >
60 {
61 int rows_;
62 int cols_;
63 std::vector< T > fields_;
64
65 public:
66 Matrix ( int rows, int cols )
67 : rows_( rows ),
68 cols_( cols ),
69 fields_( rows * cols )
70 {}
71
72 const T &operator() ( int i, int j ) const
73 {
74 return fields_[ i * cols_ + j ];
75 }
76
77 T &operator() ( int i, int j )
78 {
79 return fields_[ i * cols_ + j ];
80 }
81
82 int rows () const
83 {
84 return rows_;
85 }
86
87 int cols () const
88 {
89 return cols_;
90 }
91 };
92
93
94 // PeriodicFaceTransformationBlock::AffineTransformation
95 // -----------------------------------------------------
96
98 {
100 std::vector< double > shift;
101
102 explicit AffineTransformation ( int dimworld )
103 : matrix( dimworld, dimworld ),
104 shift( dimworld )
105 {}
106 };
107
108
109 inline std::ostream &
111 {
112 for( int i = 0; i < trafo.matrix.rows(); ++i )
113 {
114 out << (i > 0 ? ", " : "");
115 for( int j = 0; j < trafo.matrix.cols(); ++j )
116 out << (j > 0 ? " " : "") << trafo.matrix( i, j );
117 }
118 out << " +";
119 for( unsigned int i = 0; i < trafo.shift.size(); ++i )
120 out << " " << trafo.shift[ i ];
121 return out;
122 }
123
124 } // end namespace dgf
125
126} // end namespace Dune
127
128#endif
Include standard header files.
Definition: agrid.hh:58
std::ostream & operator<<(std::ostream &out, const IntervalBlock::Interval &interval)
Definition: interval.hh:121
Definition: basic.hh:29
Definition: periodicfacetrans.hh:23
int numTransformations() const
Definition: periodicfacetrans.hh:45
const AffineTransformation & transformation(int i) const
Definition: periodicfacetrans.hh:39
Definition: periodicfacetrans.hh:60
int rows() const
Definition: periodicfacetrans.hh:82
const T & operator()(int i, int j) const
Definition: periodicfacetrans.hh:72
int cols() const
Definition: periodicfacetrans.hh:87
Matrix(int rows, int cols)
Definition: periodicfacetrans.hh:66
Matrix< double > matrix
Definition: periodicfacetrans.hh:99
std::vector< double > shift
Definition: periodicfacetrans.hh:100
AffineTransformation(int dimworld)
Definition: periodicfacetrans.hh:102