void TestQgsTessellator::testBasic() { QgsPolygon polygon; polygon.fromWkt( "POLYGON((1 1, 2 1, 3 2, 1 2, 1 1))" ); QgsPolygon polygonZ; polygonZ.fromWkt( "POLYGONZ((1 1 0, 2 1 0, 3 2 0, 1 2 0, 1 1 0))" ); QList<TriangleCoords> tc; tc << TriangleCoords( QVector3D( 1, 2, 0 ), QVector3D( 2, 1, 0 ), QVector3D( 3, 2, 0 ) ); tc << TriangleCoords( QVector3D( 1, 2, 0 ), QVector3D( 1, 1, 0 ), QVector3D( 2, 1, 0 ) ); QVector3D up( 0, 0, 1 ); // surface normal pointing straight up QList<TriangleCoords> tcNormals; tcNormals << TriangleCoords( QVector3D( 1, 2, 0 ), QVector3D( 2, 1, 0 ), QVector3D( 3, 2, 0 ), up, up, up ); tcNormals << TriangleCoords( QVector3D( 1, 2, 0 ), QVector3D( 1, 1, 0 ), QVector3D( 2, 1, 0 ), up, up, up ); // without normals QgsTessellator t( 0, 0, false ); t.addPolygon( polygon, 0 ); QVERIFY( checkTriangleOutput( t.data(), false, tc ) ); QgsTessellator tZ( 0, 0, false ); tZ.addPolygon( polygonZ, 0 ); QVERIFY( checkTriangleOutput( tZ.data(), false, tc ) ); // with normals QgsTessellator tN( 0, 0, true ); tN.addPolygon( polygon, 0 ); QVERIFY( checkTriangleOutput( tN.data(), true, tcNormals ) ); QgsTessellator tNZ( 0, 0, true ); tNZ.addPolygon( polygonZ, 0 ); QVERIFY( checkTriangleOutput( tNZ.data(), true, tcNormals ) ); }
Foam::tmp<Foam::volScalarField> Foam::XiEqModels::basicSubGrid::XiEq() const { const fvMesh& mesh = Su_.mesh(); const volVectorField& U = mesh.lookupObject<volVectorField>("U"); const volScalarField& Nv = mesh.lookupObject<volScalarField>("Nv"); const volSymmTensorField& nsv = mesh.lookupObject<volSymmTensorField>("nsv"); volScalarField magU(mag(U)); volVectorField Uhat ( U/(mag(U) + dimensionedScalar("Usmall", U.dimensions(), 1e-4)) ); const scalarField Cw = pow(mesh.V(), 2.0/3.0); tmp<volScalarField> tN ( new volScalarField ( IOobject ( "tN", mesh.time().constant(), mesh, IOobject::NO_READ, IOobject::NO_WRITE ), mesh, dimensionedScalar("zero", Nv.dimensions(), 0.0), zeroGradientFvPatchVectorField::typeName ) ); volScalarField& N = tN(); N.internalField() = Nv.internalField()*Cw; tmp<volSymmTensorField> tns ( new volSymmTensorField ( IOobject ( "tns", U.mesh().time().timeName(), U.mesh(), IOobject::NO_READ, IOobject::NO_WRITE ), U.mesh(), dimensionedSymmTensor ( "zero", nsv.dimensions(), pTraits<symmTensor>::zero ), zeroGradientFvPatchSymmTensorField::typeName ) ); volSymmTensorField& ns = tns(); ns.internalField() = nsv.internalField()*Cw; volScalarField n(max(N - (Uhat & ns & Uhat), scalar(1e-4))); volScalarField b((Uhat & B_ & Uhat)/sqrt(n)); volScalarField up(sqrt((2.0/3.0)*turbulence_.k())); volScalarField XiSubEq ( scalar(1) + max(2.2*sqrt(b), min(0.34*magU/up*sqrt(b), scalar(1.6))) * min(n, scalar(1)) ); return (XiSubEq*XiEqModel_->XiEq()); }