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 "processorGAMGInterfaceField.H"
00027 #include <OpenFOAM/addToRunTimeSelectionTable.H>
00028 #include <OpenFOAM/lduMatrix.H>
00029
00030
00031
00032 namespace Foam
00033 {
00034 defineTypeNameAndDebug(processorGAMGInterfaceField, 0);
00035 addToRunTimeSelectionTable
00036 (
00037 GAMGInterfaceField,
00038 processorGAMGInterfaceField,
00039 lduInterface
00040 );
00041 }
00042
00043
00044
00045
00046 Foam::processorGAMGInterfaceField::processorGAMGInterfaceField
00047 (
00048 const GAMGInterface& GAMGCp,
00049 const lduInterfaceField& fineInterface
00050 )
00051 :
00052 GAMGInterfaceField(GAMGCp, fineInterface),
00053 procInterface_(refCast<const processorGAMGInterface>(GAMGCp)),
00054 doTransform_(false),
00055 rank_(0)
00056 {
00057 const processorLduInterfaceField& p =
00058 refCast<const processorLduInterfaceField>(fineInterface);
00059
00060 doTransform_ = p.doTransform();
00061 rank_ = p.rank();
00062 }
00063
00064
00065
00066
00067 Foam::processorGAMGInterfaceField::~processorGAMGInterfaceField()
00068 {}
00069
00070
00071
00072
00073 void Foam::processorGAMGInterfaceField::initInterfaceMatrixUpdate
00074 (
00075 const scalarField& psiInternal,
00076 scalarField&,
00077 const lduMatrix&,
00078 const scalarField&,
00079 const direction,
00080 const Pstream::commsTypes commsType
00081 ) const
00082 {
00083 procInterface_.compressedSend
00084 (
00085 commsType,
00086 procInterface_.interfaceInternalField(psiInternal)()
00087 );
00088 }
00089
00090
00091 void Foam::processorGAMGInterfaceField::updateInterfaceMatrix
00092 (
00093 const scalarField&,
00094 scalarField& result,
00095 const lduMatrix&,
00096 const scalarField& coeffs,
00097 const direction cmpt,
00098 const Pstream::commsTypes commsType
00099 ) const
00100 {
00101 scalarField pnf
00102 (
00103 procInterface_.compressedReceive<scalar>(commsType, coeffs.size())
00104 );
00105 transformCoupleField(pnf, cmpt);
00106
00107 const unallocLabelList& faceCells = procInterface_.faceCells();
00108
00109 forAll(faceCells, elemI)
00110 {
00111 result[faceCells[elemI]] -= coeffs[elemI]*pnf[elemI];
00112 }
00113 }
00114
00115
00116