210 if( wallModelParameters.
rhoMethod != 0 ) {
211 sLattice.template defineDynamics<typename ForcedVanDriestExternalRhoWMHRRdynamics<T,DESCRIPTOR>::template wrap_collision<collision::StoreAndTrackAverageVelocity>>(std::move(bulkIndicator));
213 sLattice.template defineDynamics<typename ForcedVanDriestWMHRRdynamics<T,DESCRIPTOR>::template wrap_collision<collision::StoreAndTrackAverageVelocity>>(std::move(bulkIndicator));
217 if( wallModelParameters.
rhoMethod != 0 ) {
218 sLattice.template defineDynamics<typename ForcedExternalRhoWMHRRdynamics<T,DESCRIPTOR>::template wrap_collision<collision::StoreAndTrackAverageVelocity>>(std::move(bulkIndicator));
220 sLattice.template defineDynamics<typename ForcedWMHRRdynamics<T,DESCRIPTOR>::template wrap_collision<collision::StoreAndTrackAverageVelocity>>(std::move(bulkIndicator));
226 if( wallModelParameters.
rhoMethod != 0 ) {
227 sLattice.template defineDynamics<typename VanDriestExternalRhoWMHRRdynamics<T,DESCRIPTOR>::template wrap_collision<collision::StoreAndTrackAverageVelocity>>(std::move(bulkIndicator));
229 sLattice.template defineDynamics<typename VanDriestWMHRRdynamics<T,DESCRIPTOR>::template wrap_collision<collision::StoreAndTrackAverageVelocity>>(std::move(bulkIndicator));
233 if( wallModelParameters.
rhoMethod != 0 ) {
234 sLattice.template defineDynamics<typename ExternalRhoWMHRRdynamics<T,DESCRIPTOR>::template wrap_collision<collision::StoreAndTrackAverageVelocity>>(std::move(bulkIndicator));
236 sLattice.template defineDynamics<typename WMHRRdynamics<T,DESCRIPTOR>::template wrap_collision<collision::StoreAndTrackAverageVelocity>>(std::move(bulkIndicator));
244 if( wallModelParameters.
rhoMethod != 0 ) {
245 sLattice.template defineDynamics<ForcedVanDriestExternalRhoWMHRRdynamics>(std::move(bulkIndicator));
247 sLattice.template defineDynamics<ForcedVanDriestWMHRRdynamics>(std::move(bulkIndicator));
251 if( wallModelParameters.
rhoMethod != 0 ) {
252 sLattice.template defineDynamics<ForcedExternalRhoWMHRRdynamics>(std::move(bulkIndicator));
254 sLattice.template defineDynamics<ForcedWMHRRdynamics>(std::move(bulkIndicator));
260 if( wallModelParameters.
rhoMethod != 0 ) {
261 sLattice.template defineDynamics<VanDriestExternalRhoWMHRRdynamics>(std::move(bulkIndicator));
263 sLattice.template defineDynamics<VanDriestWMHRRdynamics>(std::move(bulkIndicator));
267 if( wallModelParameters.
rhoMethod != 0 ) {
268 sLattice.template defineDynamics<ExternalRhoWMHRRdynamics>(std::move(bulkIndicator));
270 sLattice.template defineDynamics<WMHRRdynamics>(std::move(bulkIndicator));
279 std::vector<T> zeroStrainVec;
280 if(DESCRIPTOR::d == 2) {
281 zeroStrainVec = {T(0), T(0), T(0)};
283 zeroStrainVec = {T(0), T(0), T(0), T(0), T(0), T(0)};
286 sLattice.template defineField<descriptors::TENSOR>(std::move(bulkIndicator), zeroStrain);
287 sLattice.template defineField<descriptors::OMEGA>(std::move(bulkIndicator), one);
288 sLattice.template defineField<descriptors::WMPOROSITY>(std::move(bulkIndicator), one);
289 sLattice.template defineField<descriptors::U_TAU>(std::move(bulkIndicator), zero);
290 sLattice.template defineField<collision::HYBRID>(std::move(bulkIndicator), one);
291 if( wallModelParameters.
rhoMethod != 0) {
292 sLattice.template defineField<collision::HYBRID_RHO>(std::move(bulkIndicator), one);
293 sLattice.template defineField<descriptors::DENSITY>(std::move(bulkIndicator), one);
295 sLattice.template defineField<descriptors::Y1>(std::move(bulkIndicator), zeroVector);
296 sLattice.template defineField<descriptors::WMVELOCITY>(std::move(bulkIndicator), zeroVector);
298 sLattice.template defineField<descriptors::VISCOSITY>(std::move(bulkIndicator), zero);
301 sLattice.template defineField<descriptors::VELOCITY>(std::move(bulkIndicator), zeroVector);
305 communicator.template requestField<descriptors::WMVELOCITY>();
306 communicator.template requestField<descriptors::POPULATION>();
307 communicator.requestOverlap(sLattice.
getOverlap());
308 communicator.exchangeRequests();
342 sLattice.template defineField<descriptors::OMEGA>(std::move(boundaryIndicator), one);
343 sLattice.template defineField<descriptors::WMPOROSITY>(std::move(boundaryIndicator), zero);
344 sLattice.template defineField<descriptors::U_TAU>(std::move(boundaryIndicator), zero);
345 sLattice.template defineField<collision::HYBRID>(std::move(boundaryIndicator), one);
346 if( wallModelParameters.
rhoMethod != 0) {
347 sLattice.template defineField<collision::HYBRID_RHO>(std::move(boundaryIndicator), one);
348 sLattice.template defineField<descriptors::DENSITY>(std::move(boundaryIndicator), one);
350 sLattice.template defineField<descriptors::Y1>(std::move(boundaryIndicator), zeroVector);
351 sLattice.template defineField<descriptors::WMVELOCITY>(std::move(boundaryIndicator), zeroVector);
353 sLattice.template defineField<descriptors::VISCOSITY>(std::move(bulkIndicator), zero);
356 sLattice.template defineField<descriptors::VELOCITY>(std::move(bulkIndicator), zeroVector);
360 for (
int iC=0; iC < load.size(); ++iC) {
362 (bulkIndicator->getBlockIndicatorF(iC)).getBlockGeometry(),
363 boundaryIndicator->getBlockIndicatorF(iC),
364 bulkIndicator->getBlockIndicatorF(iC),
366 indicatorAnalyticalBoundary);
370 sLattice.template setParameter<descriptors::SAMPLING_DISTANCE>( wallModelParameters.
samplingCellDistance );
403 const T deltaR = blockGeometry.
getDeltaR();
409 for(
int k=1; k < kMax; k++){
412 if (boundaryIndicator(solidLatticeR)) {
413 for (
int iPop=1; iPop < DESCRIPTOR::q; ++iPop) {
416 if (blockGeometry.
isInside(boundaryLatticeR)) {
418 blockGeometry.
getPhysR(boundaryPhysR,boundaryLatticeR);
420 if (bulkIndicator(boundaryLatticeR)) {
421 if (indicatorAnalyticalBoundary) {
426 indicatorAnalyticalBoundary->distance(y1, boundaryPhysR, normal, blockGeometry.
getIcGlob());
428 for (
int iD = 0; iD < DESCRIPTOR::d; iD++ ) {
431 indicatorAnalyticalBoundary->distance(y1, boundaryPhysR, normal, blockGeometry.
getIcGlob());
437 block.get(boundaryLatticeR).template setField<descriptors::Y1>(-y1*normal);
440 for(
int jPop = 0; jPop < DESCRIPTOR::q; jPop++){
442 if(boundaryIndicator(boundaryLatticeR2)){
443 for (
int iD = 0; iD < DESCRIPTOR::d; iD++ ) {
449 if(normalNorm != T(0)) {
450 for (
int iD = 0; iD < DESCRIPTOR::d; iD++ ) {
451 normal[iD] /= normalNorm;
454 for (
int iD = 0; iD < DESCRIPTOR::d; iD++ ) {
460 for (
int iD = 0; iD < DESCRIPTOR::d; iD++ ) {
461 normal[iD] /= normalNorm;
463 if(normal[0] != T(0) && normal[0] > T(0)) {
464 normal[0] /= normal[0];
466 else if(normal[0] != T(0) && normal[0] < T(0)) {
467 normal[0] /= normal[0];
470 if(normal[1] != T(0) && normal[1] > T(0)) {
471 normal[1] /= normal[1];
473 else if(normal[1] != T(0) && normal[1] < T(0)) {
474 normal[1] /= normal[1];
477 if ( DESCRIPTOR::d == 3) {
478 if(normal[2] != T(0) && normal[2] > T(0)) {
479 normal[2] /= normal[2];
481 else if(normal[2] != T(0) && normal[2] < T(0)) {
482 normal[2] /= normal[2];
486 if(normalNorm != T(0)) {
487 auto field = block.get(boundaryLatticeR).template getField<descriptors::Y1>();
490 block.get(boundaryLatticeR).template setField<descriptors::Y1>(-y1*normal);
495 block.get(boundaryLatticeR).template setField<descriptors::TENSOR>(pi);
688 if( wallModelParameters.
rhoMethod == 0 ) {
693 else if( wallModelParameters.
rhoMethod == 1 ) {
704 else if( wallModelParameters.
fNeqMethod == 1 ) {
705 if( wallModelParameters.
rhoMethod == 0 ) {
710 else if( wallModelParameters.
rhoMethod == 1 ) {
722 if( wallModelParameters.
rhoMethod == 0 ) {
727 else if( wallModelParameters.
rhoMethod == 1 ) {
798 const T deltaR = blockGeometry.
getDeltaR();
802 if (boundaryIndicator(solidLatticeR)) {
803 for (
int iPop=1; iPop < DESCRIPTOR::q; ++iPop) {
806 if (blockGeometry.
isInside(boundaryLatticeR)) {
808 blockGeometry.
getPhysR(boundaryPhysR,boundaryLatticeR);
810 if (bulkIndicator(boundaryLatticeR)) {
811 if (indicatorAnalyticalBoundary) {
816 indicatorAnalyticalBoundary->distance(y1, boundaryPhysR, normal, blockGeometry.
getIcGlob());
818 for (
int iD = 0; iD < DESCRIPTOR::d; iD++ ) {
821 indicatorAnalyticalBoundary->distance(y1, boundaryPhysR, normal, blockGeometry.
getIcGlob());
827 block.get(boundaryLatticeR).template setField<descriptors::Y1>(-y1*normal);
void setWallDistance(SuperLattice< T, DESCRIPTOR > &sLattice, FunctorPtr< SuperIndicatorF< T, DESCRIPTOR::d > > &&boundaryIndicator, FunctorPtr< SuperIndicatorF< T, DESCRIPTOR::d > > &&bulkIndicator, IndicatorF< T, DESCRIPTOR::d > *indicatorAnalyticalBoundary)
void setTurbulentWallModel(SuperLattice< T, DESCRIPTOR > &sLattice, FunctorPtr< SuperIndicatorF< T, DESCRIPTOR::d > > &&boundaryIndicator, FunctorPtr< SuperIndicatorF< T, DESCRIPTOR::d > > &&bulkIndicator, WallModelParameters< T > &wallModelParameters, IndicatorF< T, DESCRIPTOR::d > *indicatorAnalyticalBoundary=nullptr)
Communication after propagation.