00001 /*---------------------------------------------------------------------------*\ 00002 ========= | 00003 \\ / F ield | OpenFOAM: The Open Source CFD Toolbox 00004 \\ / O peration | 00005 \\ / A nd | Copyright (C) 1991-2010 OpenCFD Ltd. 00006 \\/ M anipulation | 00007 ------------------------------------------------------------------------------- 00008 License 00009 This file is part of OpenFOAM. 00010 00011 OpenFOAM is free software: you can redistribute it and/or modify it 00012 under the terms of the GNU General Public License as published by 00013 the Free Software Foundation, either version 3 of the License, or 00014 (at your option) any later version. 00015 00016 OpenFOAM is distributed in the hope that it will be useful, but WITHOUT 00017 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 00018 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 00019 for more details. 00020 00021 You should have received a copy of the GNU General Public License 00022 along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. 00023 00024 \*---------------------------------------------------------------------------*/ 00025 00026 #include "fanFvPatchFields.H" 00027 #include <OpenFOAM/addToRunTimeSelectionTable.H> 00028 #include <finiteVolume/volFields.H> 00029 #include <finiteVolume/surfaceFields.H> 00030 00031 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // 00032 00033 namespace Foam 00034 { 00035 makePatchTypeField(fvPatchScalarField, fanFvPatchScalarField); 00036 } 00037 00038 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // 00039 00040 //- Specialisation of the jump-condition for the pressure 00041 template<> 00042 void Foam::fanFvPatchField<Foam::scalar>::updateCoeffs() 00043 { 00044 if (updated()) 00045 { 00046 return; 00047 } 00048 00049 jump_ = f_[0]; 00050 00051 if (f_.size() > 1) 00052 { 00053 const surfaceScalarField& phi = 00054 db().lookupObject<surfaceScalarField>("phi"); 00055 00056 const fvsPatchField<scalar>& phip = 00057 patch().patchField<surfaceScalarField, scalar>(phi); 00058 00059 scalarField Un = max 00060 ( 00061 scalarField::subField(phip, size()/2) 00062 /scalarField::subField(patch().magSf(), size()/2), 00063 scalar(0) 00064 ); 00065 00066 if (phi.dimensions() == dimDensity*dimVelocity*dimArea) 00067 { 00068 Un /= 00069 scalarField::subField 00070 ( 00071 patch().lookupPatchField<volScalarField, scalar>("rho"), 00072 size()/2 00073 ); 00074 } 00075 00076 for(label i=1; i<f_.size(); i++) 00077 { 00078 jump_ += f_[i]*pow(Un, i); 00079 } 00080 00081 jump_ = max(jump_, scalar(0)); 00082 } 00083 00084 jumpCyclicFvPatchField<scalar>::updateCoeffs(); 00085 } 00086 00087 00088 // ************************ vim: set sw=4 sts=4 et: ************************ //