diff --git a/apps/showcases/COVO/COVO.cpp b/apps/showcases/COVO/COVO.cpp index a6606b42393d476f2e5e1ef871dbba92e9bc5a71..4dfd73b107b6ddf6906a5335cffe3d4d410810b0 100644 --- a/apps/showcases/COVO/COVO.cpp +++ b/apps/showcases/COVO/COVO.cpp @@ -49,8 +49,8 @@ class CovoInit { public: - CovoInit( real_t circulation, real_t radius, Vector3<real_t> center, real_t lattice_velocity ) : - circulation_( circulation ), radius_(radius), center_(center), lattice_velocity_(lattice_velocity){} + CovoInit( real_t circulation, real_t radius, Vector3<real_t> center, real_t lattice_velocity, real_t ss_lattice ) : + circulation_( circulation ), radius_(radius), center_(center), lattice_velocity_(lattice_velocity), ss_lattice_(ss_lattice){} void operator()(const shared_ptr< StructuredBlockForest >& SbF, BlockDataID densityFieldID, BlockDataID velFieldID ) const; @@ -60,6 +60,7 @@ class CovoInit const real_t radius_; const Vector3<real_t> center_; const real_t lattice_velocity_; + const real_t ss_lattice_; }; // class ShearProfile void CovoInit::operator()(const shared_ptr< StructuredBlockForest >& SbF, BlockDataID densityFieldID, BlockDataID velFieldID ) const @@ -74,7 +75,6 @@ void CovoInit::operator()(const shared_ptr< StructuredBlockForest >& SbF, BlockD real_t beta = 2 * (radius_ * radius_); real_t circ2 = circulation_ * circulation_; - real_t ss_lattice = 1 / sqrt(3.0); real_t delta_x = (globalCell[0] - center_[0]) * (globalCell[0] - center_[0]); real_t delta_y = (globalCell[1] - center_[1]) * (globalCell[1] - center_[1]); real_t var = exp((- delta_x - delta_y) / beta); @@ -82,12 +82,12 @@ void CovoInit::operator()(const shared_ptr< StructuredBlockForest >& SbF, BlockD real_t d_psi_x = circulation_ * (2 * radius_ * (globalCell[1] - center_[1]) * var) / beta; real_t d_psi_y = circulation_ * (2 * radius_ * (globalCell[0] - center_[0]) * var) / beta; - real_t rho_loc = exp( -(circ2 / 2 * ss_lattice) * var * beta); + real_t rho_loc = exp( -(circ2 / 2 * ss_lattice_) * var * beta); velField->get(x, y, z, 0) = d_psi_x + lattice_velocity_; velField->get(x, y, z, 1) = -d_psi_y; - densityField->get(x, y, z) = rho_loc; + densityField->get(x, y, z) = 1.0 * rho_loc; // lattice density is 1.0 ) // clang-format on } @@ -106,13 +106,38 @@ int main(int argc, char** argv) // read parameters auto parameters = walberlaEnv.config()->getOneBlock("Parameters"); - // const real_t omega = parameters.getParameter< real_t >("omega", real_c(1.4)); - // const real_t u_max = parameters.getParameter< real_t >("u_max", real_t(0.05)); - const uint_t timesteps = parameters.getParameter< uint_t >("timesteps", uint_c(10)); - const real_t circulation = parameters.getParameter< real_t >("circulation", 1.0); - const real_t radius = parameters.getParameter< real_t >("radius", 1.0); - const real_t lattice_velocity = parameters.getParameter< real_t >("lattice_velocity", 1.0); - const Vector3<real_t> center = parameters.getParameter<Vector3<real_t>>("center"); + const real_t ReferenceLength = parameters.getParameter< real_t >("ReferenceLength", real_t(0.1)); + const real_t ConvectionVelocity = parameters.getParameter< real_t >("ConvectionVelocity", real_t(170.0)); + const real_t Radius = parameters.getParameter< real_t >("Radius", real_t(0.005)); + // const real_t Density = parameters.getParameter< real_t >("Density", real_t(1.16)); + const real_t Circulation = parameters.getParameter< real_t >("Circulation", real_t(34.728)); + const real_t S_speed = parameters.getParameter< real_t >("S_speed", real_t(347.1)); + const real_t Time = parameters.getParameter< real_t >("Time", real_t(0.01)); + + const real_t ReynoldsNumber = parameters.getParameter< real_t >("ReynoldsNumber", real_t(1082000.0)); + // const real_t LatticeDensity = parameters.getParameter< real_t >("LatticeDensity", real_t(1)); + const real_t LatticeVelocity = parameters.getParameter< real_t >("LatticeVelocity", real_t(0.05)); + const real_t LatticeLength = parameters.getParameter< real_t >("LatticeLength", real_t(400)); + + + // real_t Cd = Density / LatticeDensity; + real_t Cl = ReferenceLength / LatticeLength; + real_t Cu = ConvectionVelocity / LatticeVelocity; + real_t Ct = Cl / Cu; + + real_t LatticeCirculation = Circulation / Cl * Ct; + real_t LatticeRadius = Radius / Cl; + + real_t SSLattice = S_speed / Cu; + + real_t KinematicVicosity = (LatticeLength * LatticeVelocity) / ReynoldsNumber; + real_t omega = 2.0 / (6.0 * KinematicVicosity + 1); + + uint_t timesteps = uint_t(Time / Ct); + WALBERLA_LOG_INFO_ON_ROOT("Simulating with " << timesteps << " timesteps"); + + Vector3<real_t> center(LatticeLength / 2, LatticeLength / 2, 0); + const double remainingTimeLoggerFrequency = parameters.getParameter< double >("remainingTimeLoggerFrequency", 3.0); // in seconds @@ -120,10 +145,10 @@ int main(int argc, char** argv) // create fields BlockDataID pdfFieldID = blocks->addStructuredBlockData< PdfField_T >(pdfFieldAdder, "PDFs"); BlockDataID velFieldID = field::addToStorage< VelocityField_T >(blocks, "velocity", real_t(0), field::fzyx); - BlockDataID densityFieldID = field::addToStorage< ScalarField_T >(blocks, "density", real_t(1.16), field::fzyx); + BlockDataID densityFieldID = field::addToStorage< ScalarField_T >(blocks, "density", real_t(1), field::fzyx); - CovoInit InitData(circulation, radius, center, lattice_velocity); + CovoInit InitData(LatticeCirculation, LatticeRadius, center, LatticeVelocity, SSLattice); InitData(blocks, densityFieldID, velFieldID); pystencils::COVO_MacroSetter setterSweep(densityFieldID, pdfFieldID, velFieldID); @@ -137,7 +162,7 @@ int main(int argc, char** argv) blockforest::communication::UniformBufferedScheme< Stencil_T > communication(blocks); communication.addPackInfo(make_shared< PackInfo_T >(pdfFieldID)); - pystencils::COVO_Sweep UpdateSweep(densityFieldID, pdfFieldID, velFieldID); + pystencils::COVO_Sweep UpdateSweep(densityFieldID, pdfFieldID, velFieldID, omega); // add LBM sweep and communication to time loop timeloop.add() << BeforeFunction(communication, "communication") << Sweep(UpdateSweep, "LB stream & collide"); diff --git a/apps/showcases/COVO/COVO.prm b/apps/showcases/COVO/COVO.prm index 2ee1d7507f1363032cb1e308000368d50c0b45c0..9f9648deb8f5910b1e47403082308a6beac598e3 100644 --- a/apps/showcases/COVO/COVO.prm +++ b/apps/showcases/COVO/COVO.prm @@ -8,7 +8,7 @@ Parameters Density 1.16; // Kg / m^3 Circulation 34.728; // m^2 / s S_speed 347.1; // m / s - Time 0.01; // s + Time 0.001; // s ReynoldsNumber 1082000.0; @@ -23,6 +23,6 @@ Parameters DomainSetup { blocks < 1, 1, 1 >; - cellsPerBlock < LatticeLength, LatticeLength, 1 >; + cellsPerBlock < 400, 400, 1 >; periodic < 1, 1, 0 >; } \ No newline at end of file