void Foam::processorGAMGInterfaceField::updateInterfaceMatrix ( solveScalarField& result, const bool add, const solveScalarField&, const scalarField& coeffs, const direction cmpt, const Pstream::commsTypes commsType ) const { if (updatedMatrix()) { return; } if ( commsType == Pstream::commsTypes::nonBlocking && !Pstream::floatTransfer ) { // Fast path. if ( outstandingRecvRequest_ >= 0 && outstandingRecvRequest_ < Pstream::nRequests() ) { UPstream::waitRequest(outstandingRecvRequest_); } // Recv finished so assume sending finished as well. outstandingSendRequest_ = -1; outstandingRecvRequest_ = -1; // Consume straight from scalarReceiveBuf_ // Transform according to the transformation tensor transformCoupleField(scalarReceiveBuf_, cmpt); // Multiply the field by coefficients and add into the result addToInternalField(result, !add, coeffs, scalarReceiveBuf_); } else { solveScalarField pnf ( procInterface_.compressedReceive<solveScalar> ( commsType, coeffs.size() ) ); transformCoupleField(pnf, cmpt); addToInternalField(result, !add, coeffs, pnf); } const_cast<processorGAMGInterfaceField&>(*this).updatedMatrix() = true; }
void ProcessorPointPatchField <PatchField, Mesh, PointPatch, ProcessorPointPatch, MatrixType, Type>:: addFieldTempl ( const Pstream::commsTypes commsType, Field<Type2>& pField ) const { // Get the neighbour side values tmp<Field<Type2> > tpNeighbour = receivePointField<Type2>(commsType); addToInternalField(pField, tpNeighbour()); }