Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "GAMGSolver.H"
00027 #include <OpenFOAM/vector2D.H>
00028
00029
00030
00031 Foam::scalar Foam::GAMGSolver::scalingFactor
00032 (
00033 scalarField& field,
00034 const scalarField& source,
00035 const scalarField& Acf,
00036 const scalarField& D
00037 ) const
00038 {
00039 scalar scalingFactorNum = 0.0;
00040 scalar scalingFactorDenom = 0.0;
00041
00042 forAll(field, i)
00043 {
00044 scalingFactorNum += source[i]*field[i];
00045 scalingFactorDenom += Acf[i]*field[i];
00046
00047
00048
00049 field[i] += (source[i] - Acf[i])/D[i];
00050 }
00051
00052 vector2D scalingVector(scalingFactorNum, scalingFactorDenom);
00053 reduce(scalingVector, sumOp<vector2D>());
00054 return scalingVector.x()/stabilise(scalingVector.y(), VSMALL);
00055 }
00056
00057
00058 Foam::scalar Foam::GAMGSolver::scalingFactor
00059 (
00060 scalarField& Acf,
00061 const lduMatrix& A,
00062 scalarField& field,
00063 const FieldField<Field, scalar>& interfaceLevelBouCoeffs,
00064 const lduInterfaceFieldPtrsList& interfaceLevel,
00065 const scalarField& source,
00066 const direction cmpt
00067 ) const
00068 {
00069 A.Amul
00070 (
00071 Acf,
00072 field,
00073 interfaceLevelBouCoeffs,
00074 interfaceLevel,
00075 cmpt
00076 );
00077
00078 return scalingFactor
00079 (
00080 field,
00081 source,
00082 Acf,
00083 A.diag()
00084 );
00085 }
00086
00087
00088