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

fvMatrix.H

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 Class
00025     Foam::fvMatrix
00026 
00027 Description
00028     A special matrix type and solver, designed for finite volume
00029     solutions of scalar equations.
00030     Face addressing is used to make all matrix assembly
00031     and solution loops vectorise.
00032 
00033 SourceFiles
00034     fvMatrix.C
00035     fvMatrixSolve.C
00036     fvScalarMatrix.C
00037 
00038 \*---------------------------------------------------------------------------*/
00039 
00040 #ifndef fvMatrix_H
00041 #define fvMatrix_H
00042 
00043 #include <finiteVolume/volFields.H>
00044 #include <finiteVolume/surfaceFields.H>
00045 #include <OpenFOAM/lduMatrix.H>
00046 #include <OpenFOAM/tmp.H>
00047 #include <OpenFOAM/autoPtr.H>
00048 #include <OpenFOAM/dimensionedTypes.H>
00049 #include <OpenFOAM/zeroField.H>
00050 #include <OpenFOAM/className.H>
00051 
00052 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
00053 
00054 namespace Foam
00055 {
00056 
00057 // Forward declaration of friend functions and operators
00058 
00059 template<class Type>
00060 class fvMatrix;
00061 
00062 template<class Type>
00063 tmp<GeometricField<Type, fvPatchField, volMesh> > operator&
00064 (
00065     const fvMatrix<Type>&,
00066     const DimensionedField<Type, volMesh>&
00067 );
00068 
00069 template<class Type>
00070 tmp<GeometricField<Type, fvPatchField, volMesh> > operator&
00071 (
00072     const fvMatrix<Type>&,
00073     const tmp<DimensionedField<Type, volMesh> >&
00074 );
00075 
00076 template<class Type>
00077 tmp<GeometricField<Type, fvPatchField, volMesh> > operator&
00078 (
00079     const fvMatrix<Type>&,
00080     const tmp<GeometricField<Type, fvPatchField, volMesh> >&
00081 );
00082 
00083 template<class Type>
00084 tmp<GeometricField<Type, fvPatchField, volMesh> > operator&
00085 (
00086     const tmp<fvMatrix<Type> >&,
00087     const DimensionedField<Type, volMesh>&
00088 );
00089 
00090 template<class Type>
00091 tmp<GeometricField<Type, fvPatchField, volMesh> > operator&
00092 (
00093     const tmp<fvMatrix<Type> >&,
00094     const tmp<DimensionedField<Type, volMesh> >&
00095 );
00096 
00097 template<class Type>
00098 tmp<GeometricField<Type, fvPatchField, volMesh> > operator&
00099 (
00100     const tmp<fvMatrix<Type> >&,
00101     const tmp<GeometricField<Type, fvPatchField, volMesh> >&
00102 );
00103 
00104 template<class Type>
00105 Ostream& operator<<(Ostream&, const fvMatrix<Type>&);
00106 
00107 
00108 /*---------------------------------------------------------------------------*\
00109                            Class fvMatrix Declaration
00110 \*---------------------------------------------------------------------------*/
00111 
00112 template<class Type>
00113 class fvMatrix
00114 :
00115     public refCount,
00116     public lduMatrix
00117 {
00118     // Private data
00119 
00120         // Reference to GeometricField<Type, fvPatchField, volMesh>
00121         GeometricField<Type, fvPatchField, volMesh>& psi_;
00122 
00123         //- Dimension set
00124         dimensionSet dimensions_;
00125 
00126         //- Source term
00127         Field<Type> source_;
00128 
00129         //- Boundary scalar field containing pseudo-matrix coeffs
00130         //  for internal cells
00131         FieldField<Field, Type> internalCoeffs_;
00132 
00133         //- Boundary scalar field containing pseudo-matrix coeffs
00134         //  for boundary cells
00135         FieldField<Field, Type> boundaryCoeffs_;
00136 
00137 
00138         //- Face flux field for non-orthogonal correction
00139         mutable GeometricField<Type, fvsPatchField, surfaceMesh>
00140             *faceFluxCorrectionPtr_;
00141 
00142 
00143     // Private member functions
00144 
00145         //- Add patch contribution to internal field
00146         template<class Type2>
00147         void addToInternalField
00148         (
00149             const unallocLabelList& addr,
00150             const Field<Type2>& pf,
00151             Field<Type2>& intf
00152         ) const;
00153 
00154         template<class Type2>
00155         void addToInternalField
00156         (
00157             const unallocLabelList& addr,
00158             const tmp<Field<Type2> >& tpf,
00159             Field<Type2>& intf
00160         ) const;
00161 
00162         //- Subtract patch contribution from internal field
00163         template<class Type2>
00164         void subtractFromInternalField
00165         (
00166             const unallocLabelList& addr,
00167             const Field<Type2>& pf,
00168             Field<Type2>& intf
00169         ) const;
00170 
00171         template<class Type2>
00172         void subtractFromInternalField
00173         (
00174             const unallocLabelList& addr,
00175             const tmp<Field<Type2> >& tpf,
00176             Field<Type2>& intf
00177         ) const;
00178 
00179 
00180         // Matrix completion functionality
00181 
00182             void addBoundaryDiag
00183             (
00184                 scalarField& diag,
00185                 const direction cmpt
00186             ) const;
00187 
00188             void addCmptAvBoundaryDiag(scalarField& diag) const;
00189 
00190             void addBoundarySource
00191             (
00192                 Field<Type>& source,
00193                 const bool couples=true
00194             ) const;
00195 
00196 
00197 public:
00198 
00199     //- Solver class returned by the solver function
00200     //  used for systems in which it is useful to cache the solver for reuse
00201     //  e.g. if the solver is potentialy expensive to construct (AMG) and can
00202     //  be used several times (PISO)
00203     class fvSolver
00204     {
00205         fvMatrix<Type>& fvMat_;
00206 
00207         autoPtr<lduMatrix::solver> solver_;
00208 
00209     public:
00210 
00211         // Constructors
00212 
00213             fvSolver(fvMatrix<Type>& fvMat, autoPtr<lduMatrix::solver> sol)
00214             :
00215                 fvMat_(fvMat),
00216                 solver_(sol)
00217             {}
00218 
00219 
00220         // Member functions
00221 
00222             //- Solve returning the solution statistics.
00223             //  Use the given solver controls
00224             lduMatrix::solverPerformance solve(const dictionary&);
00225 
00226             //- Solve returning the solution statistics.
00227             //  Solver controls read from fvSolution
00228             lduMatrix::solverPerformance solve();
00229     };
00230 
00231 
00232     ClassName("fvMatrix");
00233 
00234 
00235     // Constructors
00236 
00237         //- Construct given a field to solve for
00238         fvMatrix
00239         (
00240             GeometricField<Type, fvPatchField, volMesh>&,
00241             const dimensionSet&
00242         );
00243 
00244         //- Construct as copy
00245         fvMatrix(const fvMatrix<Type>&);
00246 
00247         //- Construct as copy of tmp<fvMatrix<Type> > deleting argument
00248 #       ifdef ConstructFromTmp
00249         fvMatrix(const tmp<fvMatrix<Type> >&);
00250 #       endif
00251 
00252         //- Construct from Istream given field to solve for
00253         fvMatrix(GeometricField<Type, fvPatchField, volMesh>&, Istream&);
00254 
00255 
00256     // Destructor
00257 
00258         virtual ~fvMatrix();
00259 
00260 
00261     // Member functions
00262 
00263         // Access
00264 
00265             const GeometricField<Type, fvPatchField, volMesh>& psi() const
00266             {
00267                 return psi_;
00268             }
00269 
00270             GeometricField<Type, fvPatchField, volMesh>& psi()
00271             {
00272                 return psi_;
00273             }
00274 
00275             const dimensionSet& dimensions() const
00276             {
00277                 return dimensions_;
00278             }
00279 
00280             Field<Type>& source()
00281             {
00282                 return source_;
00283             }
00284 
00285             const Field<Type>& source() const
00286             {
00287                 return source_;
00288             }
00289 
00290             //- fvBoundary scalar field containing pseudo-matrix coeffs
00291             //  for internal cells
00292             FieldField<Field, Type>& internalCoeffs()
00293             {
00294                 return internalCoeffs_;
00295             }
00296 
00297             //- fvBoundary scalar field containing pseudo-matrix coeffs
00298             //  for boundary cells
00299             FieldField<Field, Type>& boundaryCoeffs()
00300             {
00301                 return boundaryCoeffs_;
00302             }
00303 
00304 
00305             //- Declare return type of the faceFluxCorrectionPtr() function
00306             typedef GeometricField<Type, fvsPatchField, surfaceMesh>
00307                 *surfaceTypeFieldPtr;
00308 
00309             //- Return pointer to face-flux non-orthogonal correction field
00310             surfaceTypeFieldPtr& faceFluxCorrectionPtr()
00311             {
00312                 return faceFluxCorrectionPtr_;
00313             }
00314 
00315 
00316         // Operations
00317 
00318             //- Set solution in given cells and eliminate corresponding
00319             //  equations from the matrix
00320             void setValues
00321             (
00322                 const labelList& cells,
00323                 const Field<Type>& values
00324             );
00325 
00326             //- Set reference level for solution
00327             void setReference
00328             (
00329                 const label celli,
00330                 const Type& value,
00331                 const bool forceReference = false
00332             );
00333 
00334             //- Set reference level for a component of the solution
00335             //  on a given patch face
00336             void setComponentReference
00337             (
00338                 const label patchi,
00339                 const label facei,
00340                 const direction cmpt,
00341                 const scalar value
00342             );
00343 
00344             //- Relax matrix (for steady-state solution).
00345             //  alpha = 1 : diagonally equal
00346             //  alpha < 1 : diagonally dominant
00347             //  alpha = 0 : do nothing
00348             void relax(const scalar alpha);
00349 
00350             //- Relax matrix (for steady-state solution).
00351             //  alpha is read from controlDict
00352             void relax();
00353 
00354             //- Manipulate based on a boundary field
00355             void boundaryManipulate
00356             (
00357                 typename GeometricField<Type, fvPatchField, volMesh>::
00358                     GeometricBoundaryField& values
00359             );
00360 
00361             //- Construct and return the solver
00362             //  Use the given solver controls
00363             autoPtr<fvSolver> solver(const dictionary&);
00364 
00365             //- Construct and return the solver
00366             //  Solver controls read from fvSolution
00367             autoPtr<fvSolver> solver();
00368 
00369             //- Solve returning the solution statistics.
00370             //  Use the given solver controls
00371             lduMatrix::solverPerformance solve(const dictionary&);
00372 
00373             //- Solve returning the solution statistics.
00374             //  Solver controls read from fvSolution
00375             lduMatrix::solverPerformance solve();
00376 
00377             //- Return the matrix residual
00378             tmp<Field<Type> > residual() const;
00379 
00380             //- Return the matrix scalar diagonal
00381             tmp<scalarField> D() const;
00382 
00383             //- Return the matrix Type diagonal
00384             tmp<Field<Type> > DD() const;
00385 
00386             //- Return the central coefficient
00387             tmp<volScalarField> A() const;
00388 
00389             //- Return the H operation source
00390             tmp<GeometricField<Type, fvPatchField, volMesh> > H() const;
00391 
00392             //- Return H(1)
00393             tmp<volScalarField> H1() const;
00394 
00395             //- Return the face-flux field from the matrix
00396             tmp<GeometricField<Type, fvsPatchField, surfaceMesh> >
00397                 flux() const;
00398 
00399 
00400     // Member operators
00401 
00402         void operator=(const fvMatrix<Type>&);
00403         void operator=(const tmp<fvMatrix<Type> >&);
00404 
00405         void negate();
00406 
00407         void operator+=(const fvMatrix<Type>&);
00408         void operator+=(const tmp<fvMatrix<Type> >&);
00409 
00410         void operator-=(const fvMatrix<Type>&);
00411         void operator-=(const tmp<fvMatrix<Type> >&);
00412 
00413         void operator+=
00414         (
00415             const DimensionedField<Type, volMesh>&
00416         );
00417         void operator+=
00418         (
00419             const tmp<DimensionedField<Type, volMesh> >&
00420         );
00421         void operator+=
00422         (
00423             const tmp<GeometricField<Type, fvPatchField, volMesh> >&
00424         );
00425 
00426         void operator-=
00427         (
00428             const DimensionedField<Type, volMesh>&
00429         );
00430         void operator-=
00431         (
00432             const tmp<DimensionedField<Type, volMesh> >&
00433         );
00434         void operator-=
00435         (
00436             const tmp<GeometricField<Type, fvPatchField, volMesh> >&
00437         );
00438 
00439         void operator+=(const dimensioned<Type>&);
00440         void operator-=(const dimensioned<Type>&);
00441 
00442         void operator+=(const zeroField&);
00443         void operator-=(const zeroField&);
00444 
00445         void operator*=(const DimensionedField<scalar, volMesh>&);
00446         void operator*=(const tmp<DimensionedField<scalar, volMesh> >&);
00447         void operator*=(const tmp<volScalarField>&);
00448 
00449         void operator*=(const dimensioned<scalar>&);
00450 
00451 
00452     // Friend operators
00453 
00454         friend tmp<GeometricField<Type, fvPatchField, volMesh> >
00455         operator& <Type>
00456         (
00457             const fvMatrix<Type>&,
00458             const DimensionedField<Type, volMesh>&
00459         );
00460 
00461         friend tmp<GeometricField<Type, fvPatchField, volMesh> >
00462         operator& <Type>
00463         (
00464             const fvMatrix<Type>&,
00465             const tmp<GeometricField<Type, fvPatchField, volMesh> >&
00466         );
00467 
00468         friend tmp<GeometricField<Type, fvPatchField, volMesh> >
00469         operator& <Type>
00470         (
00471             const tmp<fvMatrix<Type> >&,
00472             const DimensionedField<Type, volMesh>&
00473         );
00474 
00475         friend tmp<GeometricField<Type, fvPatchField, volMesh> >
00476         operator& <Type>
00477         (
00478             const tmp<fvMatrix<Type> >&,
00479             const tmp<GeometricField<Type, fvPatchField, volMesh> >&
00480         );
00481 
00482 
00483     // Ostream operator
00484 
00485         friend Ostream& operator<< <Type>
00486         (
00487             Ostream&,
00488             const fvMatrix<Type>&
00489         );
00490 };
00491 
00492 
00493 // * * * * * * * * * * * * * * * Global functions  * * * * * * * * * * * * * //
00494 
00495 template<class Type>
00496 void checkMethod
00497 (
00498     const fvMatrix<Type>&,
00499     const fvMatrix<Type>&,
00500     const char*
00501 );
00502 
00503 template<class Type>
00504 void checkMethod
00505 (
00506     const fvMatrix<Type>&,
00507     const DimensionedField<Type, volMesh>&,
00508     const char*
00509 );
00510 
00511 template<class Type>
00512 void checkMethod
00513 (
00514     const fvMatrix<Type>&,
00515     const dimensioned<Type>&,
00516     const char*
00517 );
00518 
00519 
00520 //- Solve returning the solution statistics given convergence tolerance
00521 //  Use the given solver controls
00522 template<class Type>
00523 lduMatrix::solverPerformance solve(fvMatrix<Type>&, const dictionary&);
00524 
00525 
00526 //- Solve returning the solution statistics given convergence tolerance,
00527 //  deleting temporary matrix after solution.
00528 //  Use the given solver controls
00529 template<class Type>
00530 lduMatrix::solverPerformance solve
00531 (
00532     const tmp<fvMatrix<Type> >&,
00533     const dictionary&
00534 );
00535 
00536 
00537 //- Solve returning the solution statistics given convergence tolerance
00538 //  Solver controls read fvSolution
00539 template<class Type>
00540 lduMatrix::solverPerformance solve(fvMatrix<Type>&);
00541 
00542 
00543 //- Solve returning the solution statistics given convergence tolerance,
00544 //  deleting temporary matrix after solution.
00545 //  Solver controls read fvSolution
00546 template<class Type>
00547 lduMatrix::solverPerformance solve(const tmp<fvMatrix<Type> >&);
00548 
00549 
00550 //- Return the correction form of the given matrix
00551 //  by subtracting the matrix multiplied by the current field
00552 template<class Type>
00553 tmp<fvMatrix<Type> > correction(const fvMatrix<Type>&);
00554 
00555 
00556 //- Return the correction form of the given temporary matrix
00557 //  by subtracting the matrix multiplied by the current field
00558 template<class Type>
00559 tmp<fvMatrix<Type> > correction(const tmp<fvMatrix<Type> >&);
00560 
00561 
00562 // * * * * * * * * * * * * * * * Global operators  * * * * * * * * * * * * * //
00563 
00564 template<class Type>
00565 tmp<fvMatrix<Type> > operator==
00566 (
00567     const fvMatrix<Type>&,
00568     const fvMatrix<Type>&
00569 );
00570 
00571 template<class Type>
00572 tmp<fvMatrix<Type> > operator==
00573 (
00574     const tmp<fvMatrix<Type> >&,
00575     const fvMatrix<Type>&
00576 );
00577 
00578 template<class Type>
00579 tmp<fvMatrix<Type> > operator==
00580 (
00581     const fvMatrix<Type>&,
00582     const tmp<fvMatrix<Type> >&
00583 );
00584 
00585 template<class Type>
00586 tmp<fvMatrix<Type> > operator==
00587 (
00588     const tmp<fvMatrix<Type> >&,
00589     const tmp<fvMatrix<Type> >&
00590 );
00591 
00592 
00593 template<class Type>
00594 tmp<fvMatrix<Type> > operator==
00595 (
00596     const fvMatrix<Type>&,
00597     const DimensionedField<Type, volMesh>&
00598 );
00599 
00600 template<class Type>
00601 tmp<fvMatrix<Type> > operator==
00602 (
00603     const fvMatrix<Type>&,
00604     const tmp<DimensionedField<Type, volMesh> >&
00605 );
00606 
00607 template<class Type>
00608 tmp<fvMatrix<Type> > operator==
00609 (
00610     const fvMatrix<Type>&,
00611     const tmp<GeometricField<Type, fvPatchField, volMesh> >&
00612 );
00613 
00614 template<class Type>
00615 tmp<fvMatrix<Type> > operator==
00616 (
00617     const tmp<fvMatrix<Type> >&,
00618     const DimensionedField<Type, volMesh>&
00619 );
00620 
00621 template<class Type>
00622 tmp<fvMatrix<Type> > operator==
00623 (
00624     const tmp<fvMatrix<Type> >&,
00625     const tmp<DimensionedField<Type, volMesh> >&
00626 );
00627 
00628 template<class Type>
00629 tmp<fvMatrix<Type> > operator==
00630 (
00631     const tmp<fvMatrix<Type> >&,
00632     const tmp<GeometricField<Type, fvPatchField, volMesh> >&
00633 );
00634 
00635 template<class Type>
00636 tmp<fvMatrix<Type> > operator==
00637 (
00638     const fvMatrix<Type>&,
00639     const dimensioned<Type>&
00640 );
00641 
00642 template<class Type>
00643 tmp<fvMatrix<Type> > operator==
00644 (
00645     const tmp<fvMatrix<Type> >&,
00646     const dimensioned<Type>&
00647 );
00648 
00649 
00650 template<class Type>
00651 tmp<fvMatrix<Type> > operator==
00652 (
00653     const fvMatrix<Type>&,
00654     const zeroField&
00655 );
00656 
00657 template<class Type>
00658 tmp<fvMatrix<Type> > operator==
00659 (
00660     const tmp<fvMatrix<Type> >&,
00661     const zeroField&
00662 );
00663 
00664 
00665 template<class Type>
00666 tmp<fvMatrix<Type> > operator-
00667 (
00668     const fvMatrix<Type>&
00669 );
00670 
00671 template<class Type>
00672 tmp<fvMatrix<Type> > operator-
00673 (
00674     const tmp<fvMatrix<Type> >&
00675 );
00676 
00677 
00678 template<class Type>
00679 tmp<fvMatrix<Type> > operator+
00680 (
00681     const fvMatrix<Type>&,
00682     const fvMatrix<Type>&
00683 );
00684 
00685 template<class Type>
00686 tmp<fvMatrix<Type> > operator+
00687 (
00688     const tmp<fvMatrix<Type> >&,
00689     const fvMatrix<Type>&
00690 );
00691 
00692 template<class Type>
00693 tmp<fvMatrix<Type> > operator+
00694 (
00695     const fvMatrix<Type>&,
00696     const tmp<fvMatrix<Type> >&
00697 );
00698 
00699 template<class Type>
00700 tmp<fvMatrix<Type> > operator+
00701 (
00702     const tmp<fvMatrix<Type> >&,
00703     const tmp<fvMatrix<Type> >&
00704 );
00705 
00706 
00707 template<class Type>
00708 tmp<fvMatrix<Type> > operator+
00709 (
00710     const fvMatrix<Type>&,
00711     const DimensionedField<Type, volMesh>&
00712 );
00713 
00714 template<class Type>
00715 tmp<fvMatrix<Type> > operator+
00716 (
00717     const fvMatrix<Type>&,
00718     const tmp<DimensionedField<Type, volMesh> >&
00719 );
00720 
00721 template<class Type>
00722 tmp<fvMatrix<Type> > operator+
00723 (
00724     const fvMatrix<Type>&,
00725     const tmp<GeometricField<Type, fvPatchField, volMesh> >&
00726 );
00727 
00728 template<class Type>
00729 tmp<fvMatrix<Type> > operator+
00730 (
00731     const tmp<fvMatrix<Type> >&,
00732     const DimensionedField<Type, volMesh>&
00733 );
00734 
00735 template<class Type>
00736 tmp<fvMatrix<Type> > operator+
00737 (
00738     const tmp<fvMatrix<Type> >&,
00739     const tmp<DimensionedField<Type, volMesh> >&
00740 );
00741 
00742 template<class Type>
00743 tmp<fvMatrix<Type> > operator+
00744 (
00745     const tmp<fvMatrix<Type> >&,
00746     const tmp<GeometricField<Type, fvPatchField, volMesh> >&
00747 );
00748 
00749 template<class Type>
00750 tmp<fvMatrix<Type> > operator+
00751 (
00752     const DimensionedField<Type, volMesh>&,
00753     const fvMatrix<Type>&
00754 );
00755 
00756 template<class Type>
00757 tmp<fvMatrix<Type> > operator+
00758 (
00759     const tmp<DimensionedField<Type, volMesh> >&,
00760     const fvMatrix<Type>&
00761 );
00762 
00763 template<class Type>
00764 tmp<fvMatrix<Type> > operator+
00765 (
00766     const tmp<GeometricField<Type, fvPatchField, volMesh> >&,
00767     const fvMatrix<Type>&
00768 );
00769 
00770 template<class Type>
00771 tmp<fvMatrix<Type> > operator+
00772 (
00773     const DimensionedField<Type, volMesh>&,
00774     const tmp<fvMatrix<Type> >&
00775 );
00776 
00777 template<class Type>
00778 tmp<fvMatrix<Type> > operator+
00779 (
00780     const tmp<DimensionedField<Type, volMesh> >&,
00781     const tmp<fvMatrix<Type> >&
00782 );
00783 
00784 template<class Type>
00785 tmp<fvMatrix<Type> > operator+
00786 (
00787     const tmp<GeometricField<Type, fvPatchField, volMesh> >&,
00788     const tmp<fvMatrix<Type> >&
00789 );
00790 
00791 
00792 template<class Type>
00793 tmp<fvMatrix<Type> > operator+
00794 (
00795     const fvMatrix<Type>&,
00796     const dimensioned<Type>&
00797 );
00798 
00799 template<class Type>
00800 tmp<fvMatrix<Type> > operator+
00801 (
00802     const tmp<fvMatrix<Type> >&,
00803     const dimensioned<Type>&
00804 );
00805 
00806 template<class Type>
00807 tmp<fvMatrix<Type> > operator+
00808 (
00809     const dimensioned<Type>&,
00810     const fvMatrix<Type>&
00811 );
00812 
00813 template<class Type>
00814 tmp<fvMatrix<Type> > operator+
00815 (
00816     const dimensioned<Type>&,
00817     const tmp<fvMatrix<Type> >&
00818 );
00819 
00820 
00821 template<class Type>
00822 tmp<fvMatrix<Type> > operator-
00823 (
00824     const fvMatrix<Type>&,
00825     const fvMatrix<Type>&
00826 );
00827 
00828 template<class Type>
00829 tmp<fvMatrix<Type> > operator-
00830 (
00831     const tmp<fvMatrix<Type> >&,
00832     const fvMatrix<Type>&
00833 );
00834 
00835 template<class Type>
00836 tmp<fvMatrix<Type> > operator-
00837 (
00838     const fvMatrix<Type>&,
00839     const tmp<fvMatrix<Type> >&
00840 );
00841 
00842 template<class Type>
00843 tmp<fvMatrix<Type> > operator-
00844 (
00845     const tmp<fvMatrix<Type> >&,
00846     const tmp<fvMatrix<Type> >&
00847 );
00848 
00849 
00850 template<class Type>
00851 tmp<fvMatrix<Type> > operator-
00852 (
00853     const fvMatrix<Type>&,
00854     const DimensionedField<Type, volMesh>&
00855 );
00856 
00857 template<class Type>
00858 tmp<fvMatrix<Type> > operator-
00859 (
00860     const fvMatrix<Type>&,
00861     const tmp<DimensionedField<Type, volMesh> >&
00862 );
00863 
00864 template<class Type>
00865 tmp<fvMatrix<Type> > operator-
00866 (
00867     const fvMatrix<Type>&,
00868     const tmp<GeometricField<Type, fvPatchField, volMesh> >&
00869 );
00870 
00871 template<class Type>
00872 tmp<fvMatrix<Type> > operator-
00873 (
00874     const tmp<fvMatrix<Type> >&,
00875     const DimensionedField<Type, volMesh>&
00876 );
00877 
00878 template<class Type>
00879 tmp<fvMatrix<Type> > operator-
00880 (
00881     const tmp<fvMatrix<Type> >&,
00882     const tmp<DimensionedField<Type, volMesh> >&
00883 );
00884 
00885 template<class Type>
00886 tmp<fvMatrix<Type> > operator-
00887 (
00888     const tmp<fvMatrix<Type> >&,
00889     const tmp<GeometricField<Type, fvPatchField, volMesh> >&
00890 );
00891 
00892 template<class Type>
00893 tmp<fvMatrix<Type> > operator-
00894 (
00895     const DimensionedField<Type, volMesh>&,
00896     const fvMatrix<Type>&
00897 );
00898 
00899 template<class Type>
00900 tmp<fvMatrix<Type> > operator-
00901 (
00902     const tmp<DimensionedField<Type, volMesh> >&,
00903     const fvMatrix<Type>&
00904 );
00905 
00906 template<class Type>
00907 tmp<fvMatrix<Type> > operator-
00908 (
00909     const tmp<GeometricField<Type, fvPatchField, volMesh> >&,
00910     const fvMatrix<Type>&
00911 );
00912 
00913 template<class Type>
00914 tmp<fvMatrix<Type> > operator-
00915 (
00916     const DimensionedField<Type, volMesh>&,
00917     const tmp<fvMatrix<Type> >&
00918 );
00919 
00920 template<class Type>
00921 tmp<fvMatrix<Type> > operator-
00922 (
00923     const tmp<DimensionedField<Type, volMesh> >&,
00924     const tmp<fvMatrix<Type> >&
00925 );
00926 
00927 template<class Type>
00928 tmp<fvMatrix<Type> > operator-
00929 (
00930     const tmp<GeometricField<Type, fvPatchField, volMesh> >&,
00931     const tmp<fvMatrix<Type> >&
00932 );
00933 
00934 
00935 template<class Type>
00936 tmp<fvMatrix<Type> > operator-
00937 (
00938     const fvMatrix<Type>&,
00939     const dimensioned<Type>&
00940 );
00941 
00942 template<class Type>
00943 tmp<fvMatrix<Type> > operator-
00944 (
00945     const tmp<fvMatrix<Type> >&,
00946     const dimensioned<Type>&
00947 );
00948 
00949 template<class Type>
00950 tmp<fvMatrix<Type> > operator-
00951 (
00952     const dimensioned<Type>&,
00953     const fvMatrix<Type>&
00954 );
00955 
00956 template<class Type>
00957 tmp<fvMatrix<Type> > operator-
00958 (
00959     const dimensioned<Type>&,
00960     const tmp<fvMatrix<Type> >&
00961 );
00962 
00963 
00964 template<class Type>
00965 tmp<fvMatrix<Type> > operator*
00966 (
00967     const DimensionedField<scalar, volMesh>&,
00968     const fvMatrix<Type>&
00969 );
00970 
00971 template<class Type>
00972 tmp<fvMatrix<Type> > operator*
00973 (
00974     const tmp<DimensionedField<scalar, volMesh> >&,
00975     const fvMatrix<Type>&
00976 );
00977 
00978 template<class Type>
00979 tmp<fvMatrix<Type> > operator*
00980 (
00981     const tmp<volScalarField>&,
00982     const fvMatrix<Type>&
00983 );
00984 
00985 template<class Type>
00986 tmp<fvMatrix<Type> > operator*
00987 (
00988     const DimensionedField<scalar, volMesh>&,
00989     const tmp<fvMatrix<Type> >&
00990 );
00991 
00992 template<class Type>
00993 tmp<fvMatrix<Type> > operator*
00994 (
00995     const tmp<DimensionedField<scalar, volMesh> >&,
00996     const tmp<fvMatrix<Type> >&
00997 );
00998 
00999 template<class Type>
01000 tmp<fvMatrix<Type> > operator*
01001 (
01002     const tmp<volScalarField>&,
01003     const tmp<fvMatrix<Type> >&
01004 );
01005 
01006 
01007 template<class Type>
01008 tmp<fvMatrix<Type> > operator*
01009 (
01010     const dimensioned<scalar>&,
01011     const fvMatrix<Type>&
01012 );
01013 
01014 template<class Type>
01015 tmp<fvMatrix<Type> > operator*
01016 (
01017     const dimensioned<scalar>&,
01018     const tmp<fvMatrix<Type> >&
01019 );
01020 
01021 
01022 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
01023 
01024 } // End namespace Foam
01025 
01026 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
01027 
01028 #ifdef NoRepository
01029 #   include <finiteVolume/fvMatrix.C>
01030 #endif
01031 
01032 // Specialisation for scalars
01033 #include <finiteVolume/fvScalarMatrix.H>
01034 
01035 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
01036 
01037 #endif
01038 
01039 // ************************ vim: set sw=4 sts=4 et: ************************ //
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines