Foam::tmp<Foam::pointField> Foam::displacementComponentLaplacianFvMotionSolver::curPoints() const { volPointInterpolation::New(fvMesh_).interpolate ( cellDisplacement_, pointDisplacement_ ); if (pointLocation_.valid()) { if (debug) { Info<< "displacementComponentLaplacianFvMotionSolver : applying " << " boundary conditions on " << pointLocation_().name() << " to new point location." << endl; } // Apply pointLocation_ b.c. to mesh points. pointLocation_().primitiveFieldRef() = fvMesh_.points(); pointLocation_().primitiveFieldRef().replace ( cmpt_, points0_ + pointDisplacement_.primitiveField() ); pointLocation_().correctBoundaryConditions(); // Implement frozen points if (frozenPointsZone_ != -1) { const pointZone& pz = fvMesh_.pointZones()[frozenPointsZone_]; forAll(pz, i) { label pointi = pz[i]; pointLocation_()[pointi][cmpt_] = points0_[pointi]; } } twoDCorrectPoints(pointLocation_().primitiveFieldRef()); return tmp<pointField>(pointLocation_().primitiveField()); }
Foam::tmp<Foam::pointField> Foam::solidDisplacementFvMotionSolver::curPoints() const { volPointInterpolation::New(fvMesh_).interpolate ( cellDisplacement_, pointDisplacement_ ); if (pointLocation_.valid()) { if (debug) { Info<< "solidDisplacementFvMotionSolver : applying " << " boundary conditions on " << pointLocation_().name() << " to new point location." << endl; } pointLocation_().internalField() = points0() + pointDisplacement_.internalField(); pointLocation_().correctBoundaryConditions(); // Implement frozen points if (frozenPointsZone_ != -1) { const pointZone& pz = fvMesh_.pointZones()[frozenPointsZone_]; forAll(pz, i) { pointLocation_()[pz[i]] = points0()[pz[i]]; } } twoDCorrectPoints(pointLocation_().internalField()); return tmp<pointField>(pointLocation_().internalField()); } else {
Foam::displacementLaplacianFvMotionSolver::displacementLaplacianFvMotionSolver ( const polyMesh& mesh, const IOdictionary& dict ) : displacementMotionSolver(mesh, dict, typeName), fvMotionSolver(mesh), cellDisplacement_ ( IOobject ( "cellDisplacement", mesh.time().timeName(), mesh, IOobject::READ_IF_PRESENT, IOobject::AUTO_WRITE ), fvMesh_, dimensionedVector ( "cellDisplacement", pointDisplacement_.dimensions(), Zero ), cellMotionBoundaryTypes<vector>(pointDisplacement_.boundaryField()) ), pointLocation_(nullptr), diffusivityPtr_ ( motionDiffusivity::New(fvMesh_, coeffDict().lookup("diffusivity")) ), frozenPointsZone_ ( coeffDict().found("frozenPointsZone") ? fvMesh_.pointZones().findZoneID(coeffDict().lookup("frozenPointsZone")) : -1 ) { IOobject io ( "pointLocation", fvMesh_.time().timeName(), fvMesh_, IOobject::MUST_READ, IOobject::AUTO_WRITE ); if (debug) { Info<< "displacementLaplacianFvMotionSolver:" << nl << " diffusivity : " << diffusivityPtr_().type() << nl << " frozenPoints zone : " << frozenPointsZone_ << endl; } if (io.typeHeaderOk<pointVectorField>(true)) { pointLocation_.reset ( new pointVectorField ( io, pointMesh::New(fvMesh_) ) ); if (debug) { Info<< "displacementLaplacianFvMotionSolver :" << " Read pointVectorField " << io.name() << " to be used for boundary conditions on points." << nl << "Boundary conditions:" << pointLocation_().boundaryField().types() << endl; } } }
Foam::solidDisplacementFvMotionSolver::solidDisplacementFvMotionSolver ( const polyMesh& mesh, Istream& is ) : displacementFvMotionSolver(mesh, is), pointDisplacement_ ( IOobject ( "pointDisplacement", fvMesh_.time().timeName(), fvMesh_, IOobject::NO_READ, IOobject::AUTO_WRITE ), pointMesh::New(fvMesh_), dimensionedVector ( "pointDisplacement", dimLength, vector::zero ) ), cellDisplacement_ ( IOobject ( "cellDisplacement", mesh.time().timeName(), mesh, IOobject::READ_IF_PRESENT, IOobject::AUTO_WRITE ), fvMesh_, dimensionedVector ( "cellDisplacement", dimLength, vector::zero ) //, // cellMotionBoundaryTypes<vector>(pointDisplacement_.boundaryField()) ), pointLocation_(NULL), // diffusivityPtr_ // ( // motionDiffusivity::New(*this, lookup("diffusivity")) // ), frozenPointsZone_ ( found("frozenPointsZone") ? fvMesh_.pointZones().findZoneID(lookup("frozenPointsZone")) : -1 ) { IOobject io ( "pointLocation", fvMesh_.time().timeName(), fvMesh_, IOobject::MUST_READ, IOobject::AUTO_WRITE ); if (debug) { Info<< "solidDisplacementFvMotionSolver:" << nl // << " diffusivity : " << diffusivityPtr_().type() << nl << " frozenPoints zone : " << frozenPointsZone_ << endl; } if (io.headerOk()) { pointLocation_.reset ( new pointVectorField ( io, pointMesh::New(fvMesh_) ) ); if (debug) { Info<< "solidDisplacementFvMotionSolver :" << " Read pointVectorField " << io.name() << " to be used for boundary conditions on points." << nl << "Boundary conditions:" << pointLocation_().boundaryField().types() << endl; } } }
Foam::displacementComponentLaplacianFvMotionSolver:: displacementComponentLaplacianFvMotionSolver ( const polyMesh& mesh, const IOdictionary& dict ) : componentDisplacementMotionSolver(mesh, dict, type()), fvMotionSolverCore(mesh), cellDisplacement_ ( IOobject ( "cellDisplacement" + cmptName_, mesh.time().timeName(), mesh, IOobject::READ_IF_PRESENT, IOobject::AUTO_WRITE ), fvMesh_, dimensionedScalar ( "cellDisplacement", pointDisplacement_.dimensions(), 0 ), cellMotionBoundaryTypes<scalar>(pointDisplacement_.boundaryField()) ), pointLocation_(NULL), diffusivityPtr_ ( motionDiffusivity::New(fvMesh_, coeffDict().lookup("diffusivity")) ), frozenPointsZone_ ( coeffDict().found("frozenPointsZone") ? fvMesh_.pointZones().findZoneID(coeffDict().lookup("frozenPointsZone")) : -1 ) { Switch applyPointLocation ( coeffDict().lookupOrDefault ( "applyPointLocation", true ) ); if (applyPointLocation) { pointLocation_.reset ( new pointVectorField ( IOobject ( "pointLocation", fvMesh_.time().timeName(), fvMesh_, IOobject::MUST_READ, IOobject::AUTO_WRITE ), pointMesh::New(fvMesh_) ) ); //if (debug) { Info<< "displacementComponentLaplacianFvMotionSolver :" << " Read pointVectorField " << pointLocation_().name() << " to be used for boundary conditions on points." << nl << "Boundary conditions:" << pointLocation_().boundaryField().types() << endl; } } }
Foam::tmp<Foam::pointgpuField> Foam::displacementComponentLaplacianFvMotionSolver::curPoints() const { volPointInterpolation::New(fvMesh_).interpolate ( cellDisplacement_, pointDisplacement_ ); if (pointLocation_.valid()) { if (debug) { Info<< "displacementComponentLaplacianFvMotionSolver : applying " << " boundary conditions on " << pointLocation_().name() << " to new point location." << endl; } // Apply pointLocation_ b.c. to mesh points. pointLocation_().internalField() = fvMesh_.getPoints(); pointLocation_().internalField().replace ( cmpt_, points0_ + pointDisplacement_.internalField() ); pointLocation_().correctBoundaryConditions(); // Implement frozen points if (frozenPointsZone_ != -1) { const pointZone& pz = fvMesh_.pointZones()[frozenPointsZone_]; const labelgpuList& zonePoints = pz.getList(); thrust::transform ( thrust::make_permutation_iterator ( pointLocation_().getField().begin(), zonePoints.begin() ), thrust::make_permutation_iterator ( pointLocation_().getField().begin(), zonePoints.end() ), thrust::make_permutation_iterator ( points0_.begin(), zonePoints.begin() ), thrust::make_permutation_iterator ( pointLocation_().getField().begin(), zonePoints.begin() ), replaceComponentFunctor<point,scalar>(cmpt_) ); } twoDCorrectPoints(pointLocation_().internalField()); return tmp<pointgpuField>(pointLocation_().internalField()); } else { tmp<pointgpuField> tcurPoints(new pointgpuField(fvMesh_.getPoints())); tcurPoints().replace ( cmpt_, points0_ + pointDisplacement_.internalField() ); // Implement frozen points if (frozenPointsZone_ != -1) { const pointZone& pz = fvMesh_.pointZones()[frozenPointsZone_]; const labelgpuList& zonePoints = pz.getList(); thrust::transform ( thrust::make_permutation_iterator ( tcurPoints().begin(), zonePoints.begin() ), thrust::make_permutation_iterator ( tcurPoints().begin(), zonePoints.end() ), thrust::make_permutation_iterator ( points0_.begin(), zonePoints.begin() ), thrust::make_permutation_iterator ( tcurPoints().begin(), zonePoints.begin() ), replaceComponentFunctor<point,scalar>(cmpt_) ); } twoDCorrectPoints(tcurPoints()); return tcurPoints; } }
Foam::displacementLaplacianFvMotionSolver::displacementLaplacianFvMotionSolver ( const polyMesh& mesh, Istream& msData ) : fvMotionSolver(mesh), points0_ ( pointIOField ( IOobject ( "points", time().constant(), polyMesh::meshSubDir, mesh, IOobject::MUST_READ, IOobject::NO_WRITE, false ) ) ), pointDisplacement_ ( IOobject ( "pointDisplacement", fvMesh_.time().timeName(), fvMesh_, IOobject::MUST_READ, IOobject::AUTO_WRITE ), pointMesh_ ), cellDisplacement_ ( IOobject ( "cellDisplacement", mesh.time().timeName(), mesh, IOobject::READ_IF_PRESENT, IOobject::AUTO_WRITE ), fvMesh_, dimensionedVector ( "cellDisplacement", pointDisplacement_.dimensions(), vector::zero ), cellMotionBoundaryTypes<vector>(pointDisplacement_.boundaryField()) ), pointLocation_(NULL), diffusivityPtr_ ( motionDiffusivity::New(*this, lookup("diffusivity")) ), frozenPointsZone_ ( found("frozenPointsZone") ? fvMesh_.pointZones().findZoneID(lookup("frozenPointsZone")) : -1 ) { IOobject io ( "pointLocation", fvMesh_.time().timeName(), fvMesh_, IOobject::MUST_READ, IOobject::AUTO_WRITE ); if (debug) { Info<< "displacementLaplacianFvMotionSolver:" << nl << " diffusivity : " << diffusivityPtr_().type() << nl << " frozenPoints zone : " << frozenPointsZone_ << endl; } if (io.headerOk()) { pointLocation_.reset ( new pointVectorField ( io, pointMesh_ ) ); if (debug) { Info<< "displacementLaplacianFvMotionSolver :" << " Read pointVectorField " << io.name() << " to be used for boundary conditions on points." << nl << "Boundary conditions:" << pointLocation_().boundaryField().types() << endl; } } }