FreeFOAM The Cross-Platform CFD Toolkit
Hosted by SourceForge:
Get FreeFOAM at SourceForge.net.
            Fast, secure and Free Open Source software downloads

findRefCell.C

Go to the documentation of this file.
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 <finiteVolume/findRefCell.H>
00027 
00028 // * * * * * * * * * * * * * * * Global Functions  * * * * * * * * * * * * * //
00029 
00030 void Foam::setRefCell
00031 (
00032     const volScalarField& field,
00033     const volScalarField& fieldRef,
00034     const dictionary& dict,
00035     label& refCelli,
00036     scalar& refValue,
00037     const bool forceReference
00038 )
00039 {
00040     if (fieldRef.needReference() || forceReference)
00041     {
00042         word refCellName = field.name() + "RefCell";
00043         word refPointName = field.name() + "RefPoint";
00044 
00045         word refValueName = field.name() + "RefValue";
00046 
00047         if (dict.found(refCellName))
00048         {
00049             if (Pstream::master())
00050             {
00051                 refCelli = readLabel(dict.lookup(refCellName));
00052 
00053                 if (refCelli < 0 || refCelli >= field.mesh().nCells())
00054                 {
00055                     FatalIOErrorIn
00056                     (
00057                         "void Foam::setRefCell\n"
00058                          "(\n"
00059                          "    const volScalarField&,\n"
00060                          "    const volScalarField&,\n"
00061                          "    const dictionary&,\n"
00062                          "    label& scalar&,\n"
00063                          "    bool\n"
00064                          ")",
00065                         dict
00066                     )   << "Illegal master cellID " << refCelli
00067                         << ". Should be 0.." << field.mesh().nCells()
00068                         << exit(FatalIOError);
00069                 }
00070             }
00071             else
00072             {
00073                 refCelli = -1;
00074             }
00075         }
00076         else if (dict.found(refPointName))
00077         {
00078             point refPointi(dict.lookup(refPointName));
00079             refCelli = field.mesh().findCell(refPointi);
00080             label hasRef = (refCelli >= 0 ? 1 : 0);
00081             label sumHasRef = returnReduce<label>(hasRef, sumOp<label>());
00082             if (sumHasRef != 1)
00083             {
00084                 FatalIOErrorIn
00085                 (
00086                     "void Foam::setRefCell\n"
00087                      "(\n"
00088                      "    const volScalarField&,\n"
00089                      "    const volScalarField&,\n"
00090                      "    const dictionary&,\n"
00091                      "    label& scalar&,\n"
00092                      "    bool\n"
00093                      ")",
00094                     dict
00095                 )   << "Unable to set reference cell for field " << field.name()
00096                     << nl << "    Reference point " << refPointName
00097                     << " " << refPointi
00098                     << " found on " << sumHasRef << " domains (should be one)"
00099                     << nl << exit(FatalIOError);
00100             }
00101         }
00102         else
00103         {
00104             FatalIOErrorIn
00105             (
00106                 "void Foam::setRefCell\n"
00107                  "(\n"
00108                  "    const volScalarField&,\n"
00109                  "    const volScalarField&,\n"
00110                  "    const dictionary&,\n"
00111                  "    label& scalar&,\n"
00112                  "    bool\n"
00113                  ")",
00114                 dict
00115             )   << "Unable to set reference cell for field " << field.name()
00116                 << nl
00117                 << "    Please supply either " << refCellName
00118                 << " or " << refPointName << nl << exit(FatalIOError);
00119         }
00120 
00121         refValue = readScalar(dict.lookup(refValueName));
00122     }
00123 }
00124 
00125 
00126 void Foam::setRefCell
00127 (
00128     const volScalarField& field,
00129     const dictionary& dict,
00130     label& refCelli,
00131     scalar& refValue,
00132     const bool forceReference
00133 )
00134 {
00135     setRefCell(field, field, dict, refCelli, refValue, forceReference);
00136 }
00137 
00138 
00139 Foam::scalar Foam::getRefCellValue
00140 (
00141     const volScalarField& field,
00142     const label refCelli
00143 )
00144 {
00145     scalar refCellValue = (refCelli >= 0 ? field[refCelli] : 0.0);
00146     return returnReduce(refCellValue, sumOp<scalar>());
00147 }
00148 
00149 
00150 // ************************ vim: set sw=4 sts=4 et: ************************ //
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines