96 slipBoundaryCondition->side = side;
97 slipBoundaryCondition->side->addIndices(
grids, level, slipBoundaryCondition);
99 slipBoundaryCondition->fillSlipNormalLists();
102 VF_LOG_INFO(
"Set Slip BC on level {} with {}", level, slipBoundaryCondition->indices.size());
142 stressBoundaryCondition->side->addIndices(
grids, level, stressBoundaryCondition);
144 stressBoundaryCondition->fillLists();
146 boundaryConditions[level]->stressBoundaryConditions.push_back(stressBoundaryCondition);
148 VF_LOG_INFO(
"Set Stress BC on level {} with {}", level, stressBoundaryCondition->indices.size());
166 real roughnessLength,
real roughnessLengthTemperature,
real surfaceHeatFlux,
real surfaceTemperature,
real heatingRate,
182 surfaceLayerBoundaryCondition->side = side;
183 surfaceLayerBoundaryCondition->side->addIndices(
grids, level, surfaceLayerBoundaryCondition);
185 surfaceLayerBoundaryCondition->fillLists();
187 boundaryConditions[level]->surfaceLayerBoundaryConditions.push_back(surfaceLayerBoundaryCondition);
189 VF_LOG_INFO(
"Set SurfaceLayer BC on level {} with {}", level, surfaceLayerBoundaryCondition->indices.size());
205 velocityBoundaryCondition->side = side;
206 velocityBoundaryCondition->side->addIndices(
grids, level, velocityBoundaryCondition);
208 velocityBoundaryCondition->fillVelocityLists();
212 boundaryConditions[level]->velocityBoundaryConditions.push_back(velocityBoundaryCondition);
214 VF_LOG_INFO(
"Set Velocity BC on level {} with {}", level, velocityBoundaryCondition->indices.size());
246 pressureBoundaryCondition->side = side;
247 pressureBoundaryCondition->side->addIndices(
grids, level, pressureBoundaryCondition);
249 boundaryConditions[level]->pressureBoundaryConditions.push_back(pressureBoundaryCondition);
251 VF_LOG_INFO(
"Set Pressure BC on level {} with {}", level, pressureBoundaryCondition->indices.size());
262 boundaryCondition->side = side;
263 boundaryCondition->side->addIndices(
grids, level, boundaryCondition);
267 VF_LOG_INFO(
"Set NoFlux Advection-Diffusion BC on level {} with {}", level, boundaryCondition->indices.size());
279 boundaryCondition->side = side;
280 boundaryCondition->side->addIndices(
grids, level, boundaryCondition);
281 boundaryCondition->fillBoundaryValueLists();
285 VF_LOG_INFO(
"Set Flux Advection-Diffusion BC on level {} with {}", level, boundaryCondition->indices.size());
296 boundaryCondition->side = side;
297 boundaryCondition->side->addIndices(
grids, level, boundaryCondition);
298 boundaryCondition->fillBoundaryValueLists();
300 boundaryConditions[level]->adDirichletBoundaryConditions.push_back(boundaryCondition);
302 VF_LOG_INFO(
"Set Dirichlet Advection-Diffusion BC on level {} with {}", level, boundaryCondition->indices.size());
313 boundaryCondition->side = side;
314 boundaryCondition->side->addIndices(
grids, level, boundaryCondition);
315 boundaryCondition->fillBoundaryValueLists();
319 VF_LOG_INFO(
"Set Neumann Advection-Diffusion BC on level {} with {}", level, boundaryCondition->indices.size());
325 for(
uint level = 0; level < this->
grids.size(); level++ )
333 return std::rint(
shift/delta) * delta;
339 for(
uint level = 0; level < this->
grids.size(); level++ )
340 grids[level]->setPeriodicBoundaryShiftsOnXinY(
shift);
346 for(
uint level = 0; level < this->
grids.size(); level++ )
347 grids[level]->setPeriodicBoundaryShiftsOnXinZ(
shift);
353 for(
uint level = 0; level < this->
grids.size(); level++ )
354 grids[level]->setPeriodicBoundaryShiftsOnYinX(
shift);
360 for(
uint level = 0; level < this->
grids.size(); level++ )
361 grids[level]->setPeriodicBoundaryShiftsOnYinZ(
shift);
367 for(
uint level = 0; level < this->
grids.size(); level++ )
368 grids[level]->setPeriodicBoundaryShiftsOnZinX(
shift);
374 for(
uint level = 0; level < this->
grids.size(); level++ )
375 grids[level]->setPeriodicBoundaryShiftsOnZinY(
shift);
388 noSlipBoundaryCondition->side = side;
389 noSlipBoundaryCondition->side->addIndices(
grids, level, noSlipBoundaryCondition);
391 noSlipBoundaryCondition->fillVelocityLists();
394 boundaryConditions[level]->velocityBoundaryConditions.push_back(noSlipBoundaryCondition);
419 VF_LOG_INFO(
"Mapping precursor file levels to the corresponding grid levels");
427 throw std::runtime_error(
"In setPrecursorBoundaryCondition: fileLevelToGridLevelMap does not match with the number of levels");
428 VF_LOG_INFO(
"Using user defined file to grid level mapping");
438 precursorBoundaryCondition->side = side;
439 precursorBoundaryCondition->side->addIndices(
grids, level, precursorBoundaryCondition);
441 boundaryConditions[level]->precursorBoundaryConditions.push_back(precursorBoundaryCondition);
443 VF_LOG_INFO(
"Set Precursor BC on level {} with {}", level, precursorBoundaryCondition->indices.size());
449 for (
uint level = 0; level < this->
grids.size(); level++)
465 for (
const auto& grid :
grids)
476 std::vector<int>&
gridZ, std::vector<int>&
distX, std::vector<int>&
distY,
477 std::vector<int>&
distZ)
479 for (
const auto &grid :
grids)
481 gridX.push_back(
int(grid->getNumberOfNodesX()));
482 gridY.push_back(
int(grid->getNumberOfNodesY()));
483 gridZ.push_back(
int(grid->getNumberOfNodesZ()));
485 distX.push_back(
int(grid->getStartX()));
486 distY.push_back(
int(grid->getStartY()));
487 distZ.push_back(
int(grid->getStartZ()));
499 return this->
grids[level]->getNumberOfNodesCF();
504 return this->
grids[level]->getNumberOfNodesFC();
516 uint offset = this->
grids[level]->getFC_offset()[
i];
518 xOffFC[
i] = - this->
grids[level]->getDirection()[ 3*offset + 0 ];
519 yOffFC[
i] = - this->
grids[level]->getDirection()[ 3*offset + 1 ];
520 zOffFC[
i] = - this->
grids[level]->getDirection()[ 3*offset + 2 ];
528 uint offset = this->
grids[level]->getCF_offset()[
i];
530 xOffCF[
i] = - this->
grids[level]->getDirection()[ 3*offset + 0 ];
531 yOffCF[
i] = - this->
grids[level]->getDirection()[ 3*offset + 1 ];
532 zOffCF[
i] = - this->
grids[level]->getDirection()[ 3*offset + 2 ];
538 return this->
grids[level]->getNumberOfSendNodes(direction);
543 return this->
grids[level]->getNumberOfReceiveNodes(direction);
551 sendIndices[
i] = grid->getSparseIndex( grid->getSendIndex(direction,
i) ) + 1;
560 receiveIndices[
i] = grid->getSparseIndex( grid->getReceiveIndex(direction,
i) ) + 1;
566 return grids[level]->getSparseSize();
571 return this->
grids[level];
576 if (level >= (
int)
grids.size())
578 std::cout <<
"wrong level input... return to caller\n";
585 nx =
grids[level]->getNumberOfNodesX();
586 ny =
grids[level]->getNumberOfNodesY();
587 nz =
grids[level]->getNumberOfNodesZ();
592 uint *
geo,
const int level)
const
600 grids[level]->getFluidNodeIndices(fluidNodeIndices);
605 grids[level]->getFluidNodeIndicesBorder(fluidNodeIndices);
610 return grids[level]->getNumberOfFluidNodes();
615 return grids[level]->getNumberOfFluidNodesBorder();
621 for (
const auto& boundaryCondition :
boundaryConditions[level]->slipBoundaryConditions)
622 size +=
uint(boundaryCondition->indices.size());
629 for (
const auto& boundaryCondition :
boundaryConditions[level]->slipBoundaryConditions)
631 for (
uint index = 0; index < boundaryCondition->indices.size(); index++)
646 for (
const auto& boundaryCondition :
boundaryConditions[level]->slipBoundaryConditions)
648 for (
uint index = 0; index < boundaryCondition->indices.size(); index++)
650 for (
int dir = 0; dir <=
grids[level]->getEndDirection(); dir++)
660 for (
const auto& boundaryCondition :
boundaryConditions[level]->stressBoundaryConditions)
661 size +=
uint(boundaryCondition->indices.size());
670 for (
const auto& boundaryCondition :
boundaryConditions[level]->stressBoundaryConditions)
672 for (
uint index = 0; index < boundaryCondition->indices.size(); index++)
675 samplingIndices[
allIndicesCounter] =
static_cast<uint>(
grids[level]->getSparseIndex(boundaryCondition->getSamplingIndex(index)) + 1);
692 for (
const auto& boundaryCondition :
boundaryConditions[level]->stressBoundaryConditions)
694 for (
uint index = 0; index < boundaryCondition->indices.size(); index++)
696 for (
int dir = 0; dir <=
grids[level]->getEndDirection(); dir++)
705 for (
auto& boundaryCondition :
boundaryConditions[level]->surfaceLayerBoundaryConditions)
706 size +=
uint(boundaryCondition->indices.size());
717 for (
const auto& boundaryCondition :
boundaryConditions[level]->surfaceLayerBoundaryConditions)
719 for (
uint index = 0; index < boundaryCondition->indices.size(); index++)
728 samplingIndices[
allIndicesCounter] =
grids[level]->getSparseIndex(boundaryCondition->getSamplingIndex(index)) + 1;
744 for (
const auto& boundaryCondition :
boundaryConditions[level]->surfaceLayerBoundaryConditions)
746 for (
uint index = 0; index < boundaryCondition->indices.size(); index++)
748 for (
int dir = 0; dir <=
grids[level]->getEndDirection(); dir++)
760 for (
const auto& boundaryCondition :
boundaryConditions[level]->velocityBoundaryConditions)
761 size +=
uint(boundaryCondition->indices.size());
768 for (
const auto& boundaryCondition :
boundaryConditions[level]->velocityBoundaryConditions)
770 for (
uint i = 0;
i < (
uint)boundaryCondition->indices.size();
i++)
785 for (
const auto& boundaryCondition :
boundaryConditions[level]->velocityBoundaryConditions)
787 for (
uint index = 0; index < boundaryCondition->indices.size(); index++ )
789 for (
int dir = 0; dir <=
grids[level]->getEndDirection(); dir++)
799 for (
const auto& boundaryCondition :
boundaryConditions[level]->pressureBoundaryConditions)
800 size +=
uint(boundaryCondition->indices.size());
807 for (
const auto& boundaryCondition :
boundaryConditions[level]->pressureBoundaryConditions)
809 for (std::size_t
i = 0;
i < boundaryCondition->indices.size();
i++)
824 for (
const auto& boundaryCondition :
boundaryConditions[level]->pressureBoundaryConditions)
826 for (
uint index = 0; index < boundaryCondition->indices.size(); index++ )
828 for (
int dir = 0; dir <=
grids[level]->getEndDirection(); dir++)
850 for (std::size_t index = 0; index < boundaryCondition->indices.size(); index++) {
851 indices[index] =
grids[level]->getSparseIndex(boundaryCondition->indices[index]) + 1;
853 neighborIndices[index] =
grids[level]->getSparseIndex(boundaryCondition->neighborIndices[index]) + 1;
855 density[index] = boundaryCondition->rho;
863 for (
uint index = 0; index < boundaryCondition->indices.size(); index++) {
864 for (
int dir = 0; dir <=
grids[level]->getEndDirection(); dir++) {
865 qs[dir][index] = boundaryCondition->qs[index][dir];
878 for (
auto& boundaryCondition :
boundaryConditions[level]->precursorBoundaryConditions)
879 size +=
uint(boundaryCondition->indices.size());
886 int& numberOfPrecursorNodes,
size_t& numberOfQuantities,
uint& timeStepsBetweenReads,
887 real& velocityX,
real& velocityY,
real& velocityZ,
int level)
const
894 for (
auto& boundaryCondition :
boundaryConditions[level]->precursorBoundaryConditions)
899 throw std::runtime_error(
"All precursor boundary conditions must have the same timeStepsBetweenReads value");
900 auto BCreader = boundaryCondition->getReader();
904 std::vector<real>
y,
z;
906 for(
uint i = 0;
i<boundaryCondition->indices.size();
i++)
916 BCreader->getWeights(weights0PP, weights0PM, weights0MP, weights0MM);
920 throw std::runtime_error(
"All precursor files must have the same quantities.");
922 velocityX = boundaryCondition->getVelocityX();
923 velocityY = boundaryCondition->getVelocityY();
924 velocityZ = boundaryCondition->getVelocityZ();
929 throw std::runtime_error(
"timeStepsBetweenReads of precursor needs to be larger than 0.");
933 throw std::runtime_error(
"Number of quantities in precursor needs to be larger than 0.");
940 for (
auto& boundaryCondition :
boundaryConditions[level]->precursorBoundaryConditions)
942 for (
uint index = 0; index < boundaryCondition->indices.size(); index++ )
944 for (
int dir = 0; dir <=
grids[level]->getEndDirection(); dir++)
955 size +=
uint(boundaryCondition->indices.size());
962 for (
auto& boundaryCondition :
boundaryConditions[level]->adNoFluxBoundaryConditions) {
963 for (
uint i = 0;
i < boundaryCondition->indices.size();
i++) {
973 for (
auto& boundaryCondition :
boundaryConditions[level]->adNoFluxBoundaryConditions) {
974 for (
uint index = 0; index < boundaryCondition->indices.size(); index++) {
975 for (
int dir = 0; dir <=
grids[level]->getEndDirection(); dir++)
986 size +=
uint(boundaryCondition->indices.size());
995 for (
uint i = 0;
i < boundaryCondition->indices.size();
i++) {
1009 for (
auto& boundaryCondition :
boundaryConditions[level]->adFluxBoundaryConditions) {
1010 for (
uint index = 0; index < boundaryCondition->indices.size(); index++) {
1011 for (
int dir = 0; dir <=
grids[level]->getEndDirection(); dir++)
1021 for (
auto& boundaryCondition :
boundaryConditions[level]->adDirichletBoundaryConditions)
1022 size +=
uint(boundaryCondition->indices.size());
1029 for (
auto& boundaryCondition :
boundaryConditions[level]->adDirichletBoundaryConditions) {
1030 for (
uint i = 0;
i < boundaryCondition->indices.size();
i++) {
1044 for (
auto& boundaryCondition :
boundaryConditions[level]->adDirichletBoundaryConditions) {
1045 for (
uint index = 0; index < boundaryCondition->indices.size(); index++) {
1046 for (
int dir = 0; dir <=
grids[level]->getEndDirection(); dir++)
1056 for (
auto& boundaryCondition :
boundaryConditions[level]->adNeumannBoundaryConditions)
1057 size +=
uint(boundaryCondition->indices.size());
1064 for (
auto& boundaryCondition :
boundaryConditions[level]->adNeumannBoundaryConditions) {
1065 for (
uint i = 0;
i < boundaryCondition->indices.size();
i++) {
1079 for (
auto& boundaryCondition :
boundaryConditions[level]->adNeumannBoundaryConditions) {
1080 for (
uint index = 0; index < boundaryCondition->indices.size(); index++) {
1081 for (
int dir = 0; dir <=
grids[level]->getEndDirection(); dir++)
1094 boundaryCondition->side = side;
1095 boundaryCondition->side->addIndices(
grids, level, boundaryCondition);
1099 VF_LOG_INFO(
"Set Outflow Advection-Diffusion BC on level {} with {}", level, boundaryCondition->indices.size());
1117 for (std::size_t index = 0; index < boundaryCondition->indices.size(); index++) {
1118 indices[index] =
grids[level]->getSparseIndex(boundaryCondition->indices[index]) + 1;
1119 neighborIndices[index] =
grids[level]->getSparseIndex(boundaryCondition->neighborIndices[index]) + 1;
1126 for (
uint index = 0; index < boundaryCondition->indices.size(); index++) {
1127 for (
int dir = 0; dir <=
grids[level]->getEndDirection(); dir++)
1128 qs[dir][index] = boundaryCondition->qs[index][dir];
1170 for (std::size_t
i = 0;
i <
boundaryConditions[level]->geometryBoundaryCondition->indices.size();
i++)
1172 for (
int dir = 0; dir <=
grids[level]->getEndDirection(); dir++)
1187 if (bc->isSide(side))
1191 if( bc->isSide(side) )
1195 if (bc->isSide(side))
1200 if (bc && bc->isSide(side))
1222 grids[level]->addFluidNodeIndicesMacroVars(fluidNodeIndicesMacroVars);
1227 grids[level]->addFluidNodeIndicesApplyBodyForce(fluidNodeIndicesApplyBodyForce);
1232 grids[level]->addFluidNodeIndicesAllFeatures(fluidNodeIndicesAllFeatures);
1238 grids[level]->addAllFluidNodeIndicesToAllFeatures();
1244 grids[level]->sortFluidNodeIndicesMacroVars();
1249 grids[level]->sortFluidNodeIndicesApplyBodyForce();
1254 grids[level]->sortFluidNodeIndicesAllFeatures();
1259 return grids[level]->getNumberOfFluidNodeIndicesMacroVars();
1264 grids[level]->getFluidNodeIndicesMacroVars(fluidNodeIndicesMacroVars);
1269 return grids[level]->getNumberOfFluidNodeIndicesApplyBodyForce();
1274 grids[level]->getFluidNodeIndicesApplyBodyForce(fluidNodeIndicesApplyBodyForce);
1279 return grids[level]->getNumberOfFluidNodeIndicesAllFeatures();
1284 grids[level]->getFluidNodeIndicesAllFeatures(fluidNodeIndicesAllFeatures);
#define VF_LOG_TRACE(...)
static SPtr< ADDirichletBoundaryCondition > make(real BCvalue, real vx, real vy, real vz)
static SPtr< ADFluxBoundaryCondition > make(real normalX, real normalY, real normalZ, real gradient)
static SPtr< ADNeumannBoundaryCondition > make(real BCvalue, real vx, real vy, real vz)
static SPtr< ADNoFluxBoundaryCondition > make()
static SPtr< ADOutflowBoundaryCondition > make()
void getADOutflowQs(real *qs[27], uint level, uint indexInBoundaryConditionVector) const override
uint getPressureSize(int level) const override
uint getNumberOfGridLevels() const override
bool hasGeometryValues() const override
void sortFluidNodeIndicesApplyBodyForce(uint level) override
void setADOutflowBoundaryCondition(SideType sideType)
uint getSlipSize(int level) const override
void setADDirichletBoundaryCondition(SideType sideType, real value, real vx, real vy, real vz)
void getPrecursorValues(uint *neighbor0PP, uint *neighbor0PM, uint *neighbor0MP, uint *neighbor0MM, real *weights0PP, real *weights0PM, real *weights0MP, real *weights0MM, int *indices, std::vector< SPtr< TransientBCInputFileReader > > &reader, int &numberOfPrecursorNodes, size_t &numberOfQuantities, uint &timeStepsBetweenReads, real &velocityX, real &velocityY, real &velocityZ, int level) const override
uint getSurfaceLayerSize(int level) const override
virtual void setPressureBoundaryCondition(SideType sideType, real rho)
void setSlipGeometryBoundaryCondition(real normalX, real normalY, real normalZ)
size_t getPressureBoundaryConditionDirection(uint level, uint indexInBoundaryConditionVector) const override
void setADFluxBoundaryCondition(SideType sideType, real normalX, real normalY, real normalZ, real gradient, real deltaX)
virtual void setNoSlipBoundaryCondition(SideType sideType)
void setADNeumannBoundaryCondition(SideType sideType, real gradient, real vx, real vy, real vz, real dx)
virtual void setPeriodicBoundaryCondition(bool periodic_X, bool periodic_Y, bool periodic_Z)
void getSlipValues(real *normalX, real *normalY, real *normalZ, int *indices, int level) const override
uint getADNeumannSize(int level) const override
void getADDirichletValues(real *values, real *vx, real *vy, real *vz, int *indices, int level) const override
void getPressureValues(real *rho, int *indices, int *neighborIndices, int level) const override
void getVelocityValues(real *vx, real *vy, real *vz, int *indices, int level) const override
uint getNumberOfSendIndices(int direction, uint level) override
void getFluidNodeIndices(uint *fluidNodeIndices, const int level) const override
void getADFluxValues(real *normalX, real *normalY, real *normalZ, real *gradient, int *indices, int level) const override
void getADFluxQs(real *qs[27], int level) const override
void addAllFluidNodeIndicesToAllFeatures(uint level) override
void getVelocityQs(real *qs[27], int level) const override
uint getNumberOfFluidNodesApplyBodyForce(unsigned int level) const override
void setPeriodicShiftOnXBoundaryInYDirection(real shift)
void getGeometryIndices(int *indices, int level) const override
uint getNumberOfNodesFC(int level) override
void getADDirichletQs(real *qs[27], int level) const override
void getFluidNodeIndicesApplyBodyForce(uint *fluidNodeIndicesApplyBodyForce, const int level) const override
uint getNumberOfFluidNodesMacroVars(unsigned int level) const override
void setPeriodicShiftOnYBoundaryInXDirection(real shift)
void getSurfaceLayerQs(real *qs[27], int level) const override
virtual void setCommunicationProcess(int direction, uint process)
void setADNoFluxBoundaryCondition(SideType sideType)
void sortFluidNodeIndicesAllFeatures(uint level) override
void getADNeumannQs(real *qs[27], int level) const override
void addFluidNodeIndicesAllFeatures(const std::vector< uint > &fluidNodeIndicesAllFeatures, uint level) override
void getFluidNodeIndicesBorder(uint *fluidNodeIndices, const int level) const override
void getNodeValues(real *xCoords, real *yCoords, real *zCoords, uint *neighborX, uint *neighborY, uint *neighborZ, uint *neighborNegative, uint *geo, const int level) const override
uint getNumberOfReceiveIndices(int direction, uint level) override
void getOffsetCF(real *xOffFc, real *yOffFc, real *zOffFc, int level) override
void setPeriodicShiftOnZBoundaryInYDirection(real shift)
void getSurfaceLayerValues(real *normalX, real *normalY, real *normalZ, int *indices, real *samplingDistances, uint *samplingIndices, real *vonKarmanConstants, real *roughnessLengths, real *roughnessLengthsTemperature, real *surfaceHeatFluxes, real *surfaceTemperatures, real *heatingRates, int level) const override
virtual void setVelocityBoundaryCondition(SideType sideType, real vx, real vy, real vz, std::optional< std::function< void(real x, real y, real z, real &vx, real &vy, real &vz)> > velocityProfile=std::nullopt)
SPtr< Grid > getGrid(uint level) override
SPtr< grid_generator::BoundaryCondition > getBoundaryCondition(SideType side, uint level) const override
virtual void setStressBoundaryCondition(SideType sideType, real normalX, real normalY, real normalZ, uint samplingOffset, real vonKarmanConstant, real roughnessLength, real deltaX, std::shared_ptr< GbSpatialData3D< real > > roughnessMap=nullptr)
Set stress boundary condition using iMEM.
void setPeriodicShiftOnZBoundaryInXDirection(real shift)
size_t getSizeOfADOutflowBoundaryCondition(uint level, uint indexInBoundaryConditionVector) const override
void getADOutflowValues(int *indices, int *neighborIndices, uint level, uint indexInBoundaryConditionVector) const override
void getReceiveIndices(uint *sendIndices, int direction, int level) override
void getDimensions(int &nx, int &ny, int &nz, const int level) const override
uint getADNoFluxSize(int level) const override
void setEnableFixRefinementIntoTheWall(bool enableFixRefinementIntoTheWall)
size_t getNumberOfPressureBoundaryConditions(uint level) const override
~LevelGridBuilder() override
void getSlipQs(real *qs[27], int level) const override
uint getPrecursorSize(int level) const override
void getPressureQs(real *qs[27], int level) const override
void setNoSlipGeometryBoundaryCondition()
uint getNumberOfFluidNodesBorder(unsigned int level) const override
void setVelocityGeometryBoundaryCondition(real vx, real vy, real vz)
uint getNumberOfNodes(unsigned int level) const override
void getFluidNodeIndicesAllFeatures(uint *fluidNodeIndicesAllFeatures, const int level) const override
uint getStressSize(int level) const override
uint getADFluxSize(int level) const override
uint getGeometrySize(int level) const override
virtual void setPrecursorBoundaryCondition(SideType sideType, SPtr< FileCollection > fileCollection, int timeStepsBetweenReads, bool cycleFiles, real velocityX=vf::basics::constant::c0o1, real velocityY=vf::basics::constant::c0o1, real velocityZ=vf::basics::constant::c0o1, std::vector< uint > fileLevelToGridLevelMap={})
void getGridInterfaceIndices(uint *iCellCfc, uint *iCellCff, uint *iCellFcc, uint *iCellFcf, int level) const override
uint getVelocitySize(int level) const override
uint getNumberOfFluidNodes(unsigned int level) const override
std::vector< std::shared_ptr< Grid > > grids
void getADNeumannValues(real *gradients, real *vx, real *vy, real *vz, int *indices, int level) const override
std::vector< SPtr< BoundaryConditions > > boundaryConditions
void getSendIndices(uint *sendIndices, int direction, int level) override
void setPeriodicShiftOnYBoundaryInZDirection(real shift)
void getPrecursorQs(real *qs[27], int level) const override
uint getNumberOfFluidNodesAllFeatures(unsigned int level) const override
size_t getSizeOfPressureBoundaryCondition(uint level, uint indexInBoundaryConditionVector) const override
void getGeometryValues(real *vx, real *vy, real *vz, int level) const override
void getGridInformations(std::vector< int > &gridX, std::vector< int > &gridY, std::vector< int > &gridZ, std::vector< int > &distX, std::vector< int > &distY, std::vector< int > &distZ) override
uint getCommunicationProcess(int direction) override
void checkLevel(int level)
void getADNoFluxValues(int *indices, int level) const override
void writeArrows(std::string fileName) const override
std::array< uint, 6 > communicationProcesses
size_t getNumberOfADOutflowBoundaryConditions(uint level) const override
void getStressValues(real *normalX, real *normalY, real *normalZ, int *indices, uint *samplingIndices, real *samplingDistances, real *vonKarmanConstants, real *roughnessLengths, int level) const override
uint getADDirichletSize(int level) const override
void findFluidNodes(bool splitDomain) override
SPtr< GeometryBoundaryCondition > getGeometryBoundaryCondition(uint level) const override
void getADNoFluxQs(real *qs[27], int level) const override
virtual void setSlipBoundaryCondition(SideType sideType, real normalX, real normalY, real normalZ)
static std::shared_ptr< LevelGridBuilder > makeShared()
void getStressQs(real *qs[27], int level) const override
size_t getADOutflowBoundaryConditionDirection(uint level, uint indexInBoundaryConditionVector) const override
void addFluidNodeIndicesApplyBodyForce(const std::vector< uint > &fluidNodeIndicesApplyBodyForce, uint level) override
uint getNumberOfNodesCF(int level) override
void setSurfaceLayerBoundaryCondition(SideType sideType, real normalX, real normalY, real normalZ, uint samplingOffset, real vonKarmanConstant, real roughnessLength, real roughnessLengthTemperature, real surfaceHeatFlux, real surfaceTemperature, real heatingRate, real deltaX, real deltaT, std::shared_ptr< GbSpatialData3D< real > > roughnessMap=nullptr)
Set surface layer boundary condition using iMEM.
void getGeometryQs(real *qs[27], int level) const override
void getOffsetFC(real *xOffCf, real *yOffCf, real *zOffCf, int level) override
void addFluidNodeIndicesMacroVars(const std::vector< uint > &fluidNodeIndicesMacroVars, uint level) override
void getFluidNodeIndicesMacroVars(uint *fluidNodeIndicesMacroVars, const int level) const override
void setPeriodicShiftOnXBoundaryInZDirection(real shift)
void sortFluidNodeIndicesMacroVars(uint level) override
static SPtr< PrecursorBoundaryCondition > make(SPtr< TransientBCInputFileReader > reader, int timeStepsBetweenReads, real velocityX, real velocityY, real velocityZ)
static SPtr< PressureBoundaryCondition > make(real rho)
static void writeArrows(std::string fileName, SPtr< GeometryBoundaryCondition > geometryBoundaryCondition, SPtr< Grid > grid)
static SPtr< Side > make(SideType sideType)
static SPtr< SlipBoundaryCondition > make(real normalX, real normalY, real normalZ)
static SPtr< StressBoundaryCondition > make(real normalX, real normalY, real normalZ, uint samplingOffset, real vonKarmanConstant, real roughnessLength, std::shared_ptr< GbSpatialData3D< real > > roughnessMap)
static SPtr< SurfaceLayerBoundaryCondition > make(real normalX, real normalY, real normalZ, uint samplingOffset, real vonKarmanConstant, real roughnessLength, real roughnessLengthTemperature, real surfaceHeatFlux, real surfaceTemperature, real heatingRate, std::shared_ptr< GbSpatialData3D< real > > roughnessMap)
static SPtr< VelocityBoundaryCondition > make(real vx, real vy, real vz)
std::shared_ptr< T > SPtr
SPtr< TransientBCInputFileReader > createReaderForCollection(SPtr< FileCollection > fileCollection, uint readLevel, bool cycleFiles)
real adjustShift(real shift, real delta, real length)