bool Foam::movingBodyTopoFvMesh::update() { // Store points to recreate mesh motion pointField oldPointsNew = allPoints(); pointField newPoints = allPoints(); autoPtr<mapPolyMesh> topoChangeMap = topoChanger_.changeMesh(); bool localMeshChanged = topoChangeMap->morphing(); bool globalMeshChanged = localMeshChanged; reduce(globalMeshChanged, orOp<bool>()); if (globalMeshChanged) { Pout<< "Topology change. Calculating motion point mask" << endl; motionMask_ = calcMotionMask(); } if (localMeshChanged) { // // Map old points onto the new mesh // pointField mappedOldPointsNew(allPoints().size()); // mappedOldPointsNew.map(oldPointsNew, topoChangeMap->pointMap()); // movePoints(mappedOldPointsNew); // resetMotion(); // setV0(); // Get new points from preMotion newPoints = topoChangeMap().preMotionPoints(); } // else // { // // No change, use old points // movePoints(oldPointsNew); // resetMotion(); // setV0(); // } // Calculate new points using a velocity transformation newPoints += motionMask_* transform(SBMFPtr_().velocity(), newPoints)*time().deltaT().value(); Info << "Executing mesh motion" << endl; movePoints(newPoints); return localMeshChanged; }
void solidBodyMotionDisplacementPointPatchVectorField::updateCoeffs() { if (this->updated()) { return; } // Determine current local points and offset fixedValuePointPatchVectorField::operator== ( transformPoints(SBMFPtr_().transformation(), localPoints0()) -localPoints0() ); fixedValuePointPatchVectorField::updateCoeffs(); }
solidBodyMotionDisplacementPointPatchVectorField:: solidBodyMotionDisplacementPointPatchVectorField ( const solidBodyMotionDisplacementPointPatchVectorField& ptf, const DimensionedField<vector, pointMesh>& iF ) : fixedValuePointPatchVectorField(ptf, iF), SBMFPtr_(ptf.SBMFPtr_().clone().ptr()) { // For safety re-evaluate fixedValuePointPatchVectorField::operator== ( transformPoints(SBMFPtr_().transformation(), localPoints0()) -localPoints0() ); }
solidBodyMotionDisplacementPointPatchVectorField:: solidBodyMotionDisplacementPointPatchVectorField ( const pointPatch& p, const DimensionedField<vector, pointMesh>& iF, const dictionary& dict ) : fixedValuePointPatchVectorField(p, iF, dict, false), SBMFPtr_(solidBodyMotionFunction::New(dict, this->db().time())) { if (!dict.found("value")) { // Determine current local points and offset fixedValuePointPatchVectorField::operator== ( transformPoints(SBMFPtr_().transformation(), localPoints0()) -localPoints0() ); } }