void omegaWallFunctionFvPatchScalarField::createAveragingWeights() { if (initialised_) { return; } const volScalarField& omega = static_cast<const volScalarField&>(this->dimensionedInternalField()); const volScalarField::GeometricBoundaryField& bf = omega.boundaryField(); const fvMesh& mesh = omega.mesh(); volScalarField weights ( IOobject ( "weights", mesh.time().timeName(), mesh, IOobject::NO_READ, IOobject::NO_WRITE, false // do not register ), mesh, dimensionedScalar("zero", dimless, 0.0) ); DynamicList<label> omegaPatches(bf.size()); forAll(bf, patchi) { if (isA<omegaWallFunctionFvPatchScalarField>(bf[patchi])) { omegaPatches.append(patchi); const labelUList& faceCells = bf[patchi].patch().faceCells(); forAll(faceCells, i) { label cellI = faceCells[i]; weights[cellI]++; } } }
void omegaWallFunctionFvPatchScalarField::createAveragingWeights() { const volScalarField& omega = static_cast<const volScalarField&>(this->dimensionedInternalField()); const volScalarField::GeometricBoundaryField& bf = omega.boundaryField(); const fvMesh& mesh = omega.mesh(); if (initialised_ && !mesh.changing()) { return; } volScalarField weights ( IOobject ( "weights", mesh.time().timeName(), mesh, IOobject::NO_READ, IOobject::NO_WRITE, false // do not register ), mesh, dimensionedScalar("zero", dimless, 0.0) ); DynamicList<label> omegaPatches(bf.size()); forAll(bf, patchI) { if (isA<omegaWallFunctionFvPatchScalarField>(bf[patchI])) { omegaPatches.append(patchI); const labelgpuList& pcells = mesh.lduAddr().patchSortCells(patchI); const labelgpuList& losortStart = mesh.lduAddr().patchSortStartAddr(patchI); thrust::transform ( thrust::make_permutation_iterator ( weights.getField().begin(), pcells.begin() ), thrust::make_permutation_iterator ( weights.getField().begin(), pcells.end() ), thrust::make_transform_iterator ( thrust::make_zip_iterator(thrust::make_tuple ( losortStart.begin(), losortStart.begin()+1 )), omegaWallFunctionFvPatchScalarFieldCreateWeightsFunctor() ), thrust::make_permutation_iterator(weights.getField().begin(),pcells.begin()), addOperatorFunctor<scalar,label,scalar>() ); } } cornerWeights_.setSize(bf.size()); forAll(omegaPatches, i) { label patchI = omegaPatches[i]; const fvPatchScalarField& wf = weights.boundaryField()[patchI]; cornerWeights_[patchI] = 1.0/wf.patchInternalField(); }