fixed writing out entries in advective bc
[OpenFOAM-1.6-ext.git] / src / OpenFOAM / interpolations / RBFInterpolation / RBFInterpolation.H
blob452b1070bbf23f4a324a222b2b30da7216749736
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright held by original author
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
9     This file is part of OpenFOAM.
11     OpenFOAM is free software; you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by the
13     Free Software Foundation; either version 2 of the License, or (at your
14     option) any later version.
16     OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19     for more details.
21     You should have received a copy of the GNU General Public License
22     along with OpenFOAM; if not, write to the Free Software Foundation,
23     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25 Class
26     RBFInterpolation
28 Description
29     Radial basis function interpolation class
31 Description
32     Interpolation class which uses Radial Basis Functions to interpolate the
33     fluid displacements for given boundary displacements.
35         The coefficient vectors, alpha and beta are determined by solving
36     the system:
38         | db | = | Mbb Pb | | alpha |
39         | 0  |   | Pb  0  | |  beta |
41         where db are the given boundary displacements,
42         Mbb the boundary RBF correlation matrix (NbxNb), containing RBF evaluations
43     at the boundary nodes, and Pb some linear polynomial matrix (Nbx4).
45         Those coefficients are calculated every timestep, with the current
46     boundary displacements db, with the inverse of Mbb. Using those
47     coefficients, the RBF is evaluated at all fluid points every
48     timestep.
50         The efficiency of this method is increased by:
51                 1) using control points which is a subset of the moving
52            boundary points. Those control points are selected by
53                    a coarsening function.
54                 2) The outer boundary points are neglected since a cutoff function
55            is used toward the outer boundaries.
57 Author
58     Frank Bos, TU Delft.  All rights reserved.
59     Dubravko Matijasevic, FSB Zagreb.
61 SourceFiles
62     RBFInterpolation.C
63     RBFInterpolationTemplates.C
65 \*---------------------------------------------------------------------------*/
67 #ifndef RBFInterpolation_H
68 #define RBFInterpolation_H
70 #include "dictionary.H"
71 #include "RBFFunction.H"
72 #include "point.H"
73 #include "Switch.H"
74 #include "simpleMatrix.H"
76 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
78 namespace Foam
81 /*---------------------------------------------------------------------------*\
82                         Class RBFInterpolation Declaration
83 \*---------------------------------------------------------------------------*/
85 class RBFInterpolation
87     // Private data
89         //- Dictionary
90         const dictionary& dict_;
92         //- Reference to control points
93         const vectorField& controlPoints_;
95         //- Rerefence to all points
96         const vectorField& allPoints_;
98         //- RBF function
99         autoPtr<RBFFunction> RBF_;
101         //- Interpolation matrix
102         mutable scalarSquareMatrix* BPtr_;
104         //- Focal point for cut-off radii
105         point focalPoint_;
107         //- Inner cut-off radius
108         scalar innerRadius_;
110         //- Outer cut-off radius
111         scalar outerRadius_;
113         //- Add polynomials to RBF matrix
114         Switch polynomials_;
117     // Private Member Functions
119         //- Disallow default bitwise assignment
120         void operator=(const RBFInterpolation&);
123         //- Return interpolation matrix
124         const scalarSquareMatrix& B() const;
126         //- Calculate interpolation matrix
127         void calcB() const;
129         //- Clear out
130         void clearOut();
133 public:
135     // Constructors
137         //- Construct from components
138         RBFInterpolation
139         (
140             const dictionary& dict,
141             const vectorField& controlPoints,
142             const vectorField& allPoints
143         );
145         //- Construct as copy
146         RBFInterpolation(const RBFInterpolation&);
149     // Destructor
151         ~RBFInterpolation();
154     // Member Functions
156         //- Interpolate
157         template<class Type>
158         tmp<Field<Type> > interpolate(const Field<Type>& ctrlField) const;
160         //- Move points
161         void movePoints();
165 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
167 } // End namespace Foam
169 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
171 #ifdef NoRepository
172 #   include "RBFInterpolationTemplates.C"
173 #endif
175 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
177 #endif
179 // ************************************************************************* //