$treeview $search $mathjax
|
Palabos
Version 1.1
$projectbrief
|
$projectbrief
|
$searchbox |
00001 /* This file is part of the Palabos library. 00002 * 00003 * Copyright (C) 2011 FlowKit Sarl 00004 * Avenue de Chailly 23 00005 * 1012 Lausanne, Switzerland 00006 * E-mail contact: contact@flowkit.com 00007 * 00008 * The most recent release of Palabos can be downloaded at 00009 * <http://www.palabos.org/> 00010 * 00011 * The library Palabos is free software: you can redistribute it and/or 00012 * modify it under the terms of the GNU Affero General Public License as 00013 * published by the Free Software Foundation, either version 3 of the 00014 * License, or (at your option) any later version. 00015 * 00016 * The library is distributed in the hope that it will be useful, 00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00019 * GNU Affero General Public License for more details. 00020 * 00021 * You should have received a copy of the GNU Affero General Public License 00022 * along with this program. If not, see <http://www.gnu.org/licenses/>. 00023 */ 00024 00028 #ifndef FINITE_DIFFERENCE_WRAPPER_2D_H 00029 #define FINITE_DIFFERENCE_WRAPPER_2D_H 00030 00031 #include "core/globalDefs.h" 00032 #include "atomicBlock/blockLattice2D.h" 00033 #include "atomicBlock/dataField2D.h" 00034 #include "multiBlock/multiBlockLattice2D.h" 00035 #include "multiBlock/multiDataField2D.h" 00036 #include "dataProcessors/dataAnalysisFunctional2D.h" 00037 #include <memory> 00038 00039 00040 namespace plb { 00041 00042 template<typename T> 00043 void computeXderivative(MultiScalarField2D<T>& value, MultiScalarField2D<T>& derivative, Box2D const& domain); 00044 00045 template<typename T> 00046 std::auto_ptr<MultiScalarField2D<T> > computeXderivative(MultiScalarField2D<T>& value, Box2D const& domain); 00047 00048 template<typename T> 00049 std::auto_ptr<MultiScalarField2D<T> > computeXderivative(MultiScalarField2D<T>& value); 00050 00051 template<typename T> 00052 void computeYderivative(MultiScalarField2D<T>& value, MultiScalarField2D<T>& derivative, Box2D const& domain); 00053 00054 template<typename T> 00055 std::auto_ptr<MultiScalarField2D<T> > computeYderivative(MultiScalarField2D<T>& value, Box2D const& domain); 00056 00057 template<typename T> 00058 std::auto_ptr<MultiScalarField2D<T> > computeYderivative(MultiScalarField2D<T>& value); 00059 00060 template<typename T> 00061 void computeGradientNorm(MultiScalarField2D<T>& value, MultiScalarField2D<T>& derivative, Box2D const& domain); 00062 00063 template<typename T> 00064 std::auto_ptr<MultiScalarField2D<T> > computeGradientNorm(MultiScalarField2D<T>& value, Box2D const& domain); 00065 00066 template<typename T> 00067 std::auto_ptr<MultiScalarField2D<T> > computeGradientNorm(MultiScalarField2D<T>& value); 00068 00069 template<typename T> 00070 std::auto_ptr<MultiScalarField2D<T> > computePoissonRHS(MultiTensorField2D<T,2>& velocity, Box2D const& domain); 00071 00072 template<typename T> 00073 std::auto_ptr<MultiScalarField2D<T> > computePoissonRHS(MultiTensorField2D<T,2>& velocity); 00074 00075 00076 template<typename T> 00077 void poissonIterate(MultiScalarField2D<T>& oldPressure, MultiScalarField2D<T>& newPressure, 00078 MultiScalarField2D<T>& rhs, Box2D const& domain); 00079 00080 template<typename T> 00081 T computePoissonResidue(MultiScalarField2D<T>& pressure, MultiScalarField2D<T>& rhs, Box2D const& domain); 00082 00083 /* ************ Gauss-Seidel Solver *************** */ 00084 00085 template<typename T> 00086 void JacobiIteration( MultiScalarField2D<T>& u_h, MultiScalarField2D<T>& new_u_h, 00087 MultiScalarField2D<T>& rhs, Box2D const& domain ); 00088 00089 template<typename T> 00090 void GaussSeidelIteration( MultiScalarField2D<T>& u_h, MultiScalarField2D<T>& jacobi_u_h, 00091 MultiScalarField2D<T>& new_u_h, MultiScalarField2D<T>& rhs, Box2D const& domain ); 00092 00093 00094 template<typename T> 00095 void GaussSeidelSolver( MultiScalarField2D<T>& initialValue, 00096 MultiScalarField2D<T>& result, 00097 MultiScalarField2D<T>& rhs, Box2D const& domain, T tolerance=1e-5, plint maxIter=100000 ); 00098 00099 template<typename T> 00100 MultiScalarField2D<T>* computeGaussSeidelDefect(MultiScalarField2D<T>& u_h, MultiScalarField2D<T>& rhs, 00101 Box2D const& domain); 00102 00103 00104 /* ************ MultiGrid methods *************** */ 00105 template<typename T> 00106 MultiScalarField2D<T>* smooth( MultiScalarField2D<T>& initialValue, 00107 MultiScalarField2D<T>& rhs, Box2D const& domain, 00108 plint smoothIters); 00109 00110 template<typename T> 00111 MultiScalarField2D<T>* smoothAndInterpolate(MultiScalarField2D<T>& initialValue, 00112 MultiScalarField2D<T>& rhs, Box2D const& domain, 00113 plint smoothIters); 00114 00115 template<typename T> 00116 T smoothAndComputeError(MultiScalarField2D<T>& initialValue, MultiScalarField2D<T>& rhs, Box2D const& domain); 00117 00118 template<typename T> 00119 MultiScalarField2D<T>* smoothAndComputeCoarseDefect( MultiScalarField2D<T>& initialValue, 00120 MultiScalarField2D<T>& rhs, Box2D const& domain, plint smoothIters ); 00121 00122 00123 template<typename T> 00124 T multiGridVCycle( MultiScalarField2D<T>& initialValue, MultiScalarField2D<T>& newValue, 00125 MultiScalarField2D<T>& rhs, Box2D const& domain, plint depth=1 ); 00126 00127 template<typename T> 00128 std::vector<MultiScalarField2D<T>* > fullMultiGrid( MultiScalarField2D<T>& initialValue, MultiScalarField2D<T>& rhs, 00129 Box2D const& domain, plint gridLevels=2, plint ncycles=1); 00130 00131 template<typename T> 00132 std::vector<MultiScalarField2D<T>* > fullMultiGrid( MultiScalarField2D<T>& initialValue, MultiScalarField2D<T>& rhs, 00133 Box2D const& domain, plint gridLevels=2 ); 00134 00135 00136 00137 } // namespace plb 00138 00139 #endif // FINITE_DIFFERENCE_WRAPPER_2D_H
1.6.3
1.6.3