diff --git a/apps/benchmarks/MaterialTransport/one_way_coupling/3D_Validations/3D_Validations.cpp b/apps/benchmarks/MaterialTransport/one_way_coupling/3D_Validations/3D_Validations.cpp index e784d166d41a33e2d63dde5aad7f763421d709e4..30bcad8f599c190062784f651464b62f060a5e12 100644 --- a/apps/benchmarks/MaterialTransport/one_way_coupling/3D_Validations/3D_Validations.cpp +++ b/apps/benchmarks/MaterialTransport/one_way_coupling/3D_Validations/3D_Validations.cpp @@ -161,7 +161,7 @@ int main(int argc, char** argv) const real_t dt_SI = real_c((dx_SI * dx_SI * kappa_L) / (kappa_SI)); const real_t omegaConcentration = lbm::collision_model::omegaFromViscosity(kappa_L); - Vector3< uint_t > domainSize(uint_c((xSize_SI / dx_SI)), uint_c((ySize_SI / dx_SI)), uint_c((zSize_SI/1))); + Vector3< uint_t > domainSize(uint_c((xSize_SI / dx_SI)), uint_c((ySize_SI / dx_SI)), uint_c((zSize_SI/dx_SI))); const uint_t timeSteps = uint_c(std::ceil(tSI / dt_SI)); const uint_t tinitial = uint_c(0); const real_t sigma_0 = real_t(10); @@ -322,7 +322,7 @@ int main(int argc, char** argv) // map boundaries into the fluid field simulation lbm::BC_Fluid_Density density_fluid_bc(blocks, pdfFieldFluidCPUGPUID, real_t(1.0)); lbm::BC_Fluid_NoSlip noSlip_fluid_bc(blocks, pdfFieldFluidCPUGPUID); - lbm::BC_Fluid_UBB ubb_fluid_bc(blocks, pdfFieldFluidCPUGPUID, uInflow_LBM, real_t(0)); + lbm::BC_Fluid_UBB ubb_fluid_bc(blocks, pdfFieldFluidCPUGPUID, uInflow_LBM, real_t(0),real_t(0)); lbm::BC_Fluid_Neumann neumann_fluid_bc(blocks, pdfFieldFluidCPUGPUID); lbm::BC_Concentration_Density density_concentration_bc_west(blocks, pdfFieldConcentrationCPUGPUID, real_t(0)); lbm::BC_Concentration_Density density_concentration_bc_south(blocks, pdfFieldConcentrationCPUGPUID, real_t(1)); @@ -345,12 +345,15 @@ int main(int argc, char** argv) #else - initConcentrationFieldGaussian(blocks, densityConcentrationFieldCPUGPUID, simulationDomain, domainSize, sigma_0, - sigma_D, Uinitialize, x_0); + initConcentrationFieldSinusoidal(blocks, + densityConcentrationFieldCPUGPUID,simulationDomain, + domainSize,sigma_0,sigma_D, + Uinitialize,x_0,dx_SI,dt_SI); // initConcentrationField(blocks,densityConcentrationFieldCPUGPUID,simulationDomain,domainSize); - - initFluidField(blocks, velFieldFluidCPUGPUID, Uinitialize); + WALBERLA_LOG_INFO_ON_ROOT("reached hereeee"); + initFluidField(blocks, velFieldFluidCPUGPUID, Uinitialize,domainSize); + WALBERLA_LOG_INFO_ON_ROOT("reached hereeee 22"); #endif @@ -516,18 +519,19 @@ int main(int argc, char** argv) WcTimingPool timeloopTiming; // TODO: maybe add warmup phase - real_t advection_time = domainSize[0]/Uinitialize[0]; - analyticalSolGaussian(blocks, analyticalConcentrationFieldID, simulationDomain, domainSize, sigma_0, diffusivity, - Uinitialize, x_0, 0,1); + + analyticalSolSinusoidal(blocks, + analyticalConcentrationFieldID,simulationDomain, + domainSize, sigma_0,diffusivity, + Uinitialize,x_0,0,dx_SI,dt_SI); for (uint_t timeStep = 1; timeStep <= timeSteps; ++timeStep) { if (useCommunicationHiding) { commTimeloop.singleStep(timeloopTiming); } timeloop.singleStep(timeloopTiming); - - uint_t advection_period = uint_c(timeStep/advection_time); - WALBERLA_LOG_INFO("advection period is " << timeStep << " " << advection_period); - analyticalSolGaussian(blocks, analyticalConcentrationFieldID, simulationDomain, domainSize, sigma_0, diffusivity, - Uinitialize, x_0, timeStep,advection_period); + analyticalSolSinusoidal(blocks, + analyticalConcentrationFieldID,simulationDomain, + domainSize, sigma_0,diffusivity, + Uinitialize,x_0,timeStep,dx_SI,dt_SI); std::vector< real_t > norms = computeErrorL2(blocks, densityConcentrationFieldCPUGPUID, analyticalConcentrationFieldID, ErrorFieldID, simulationDomain); WALBERLA_LOG_INFO_ON_ROOT("Infinity norm is " << norms[0] << "\n L1 norm is " << norms[1] << "\n L2 norm is " diff --git a/apps/benchmarks/MaterialTransport/one_way_coupling/3D_Validations/CMakeLists.txt b/apps/benchmarks/MaterialTransport/one_way_coupling/3D_Validations/CMakeLists.txt index 1c5bb8aa4674af265990956ee8d2b6a082c7bd80..eb1db7410958fd0eea3c528bfa4cf9d1a9a270ea 100644 --- a/apps/benchmarks/MaterialTransport/one_way_coupling/3D_Validations/CMakeLists.txt +++ b/apps/benchmarks/MaterialTransport/one_way_coupling/3D_Validations/CMakeLists.txt @@ -33,8 +33,8 @@ if (WALBERLA_BUILD_WITH_CODEGEN) GeneralInfoHeader.h ) - waLBerla_add_executable(NAME 3d_gaussian_paper FILES 3D_Validations.cpp ../../utilities/InitializerFunctions.cpp + waLBerla_add_executable(NAME MTW_1way_3Dvalidations FILES 3D_Validations.cpp ../../utilities/InitializerFunctions.cpp DEPENDS blockforest core field geometry gpu lbm lbm_mesapd_coupling mesa_pd sqlite vtk Validations_3D_${config}) - target_compile_definitions(3d_gaussian_paper PRIVATE Weighting=2) + target_compile_definitions(MTW_1way_3Dvalidations PRIVATE Weighting=2) endif () endif () diff --git a/apps/benchmarks/MaterialTransport/one_way_coupling/3D_Validations/Validations_3D.py b/apps/benchmarks/MaterialTransport/one_way_coupling/3D_Validations/Validations_3D.py index 021c768f8aa664adc7f5c4cd4e4b726489cad579..412f624118b2c9a9291c58490a992a0604480515 100644 --- a/apps/benchmarks/MaterialTransport/one_way_coupling/3D_Validations/Validations_3D.py +++ b/apps/benchmarks/MaterialTransport/one_way_coupling/3D_Validations/Validations_3D.py @@ -4,7 +4,7 @@ import pystencils as ps from sympy.core.add import Add from sympy.codegen.ast import Assignment import sys -from lbmpy.session import * +#from lbmpy.session import * from lbmpy import LBMConfig, LBMOptimisation, LBStencil, Method, Stencil, ForceModel from lbmpy.partially_saturated_cells import PSMConfig @@ -41,13 +41,13 @@ const bool infoCsePdfs = {cse_pdfs}; with CodeGeneration() as ctx: data_type = "float64" if ctx.double_accuracy else "float32" - stencil_fluid = LBStencil(Stencil.D2Q9) - stencil_concentration = LBStencil(Stencil.D2Q9) + stencil_fluid = LBStencil(Stencil.D3Q19) + stencil_concentration = LBStencil(Stencil.D3Q19) omega = sp.Symbol("omega") # for now same for both the sweeps omega_c = sp.Symbol("omega_c") init_density_fluid = sp.Symbol("init_density_fluid") init_density_concentration = sp.Symbol("init_density_concentration") - init_velocity_fluid = sp.symbols("init_velocity_fluid_:2") + init_velocity_fluid = sp.symbols("init_velocity_fluid_:3") #init_velocity_concentration = sp.symbols("init_velocity_concentration_:3") pdfs_inter_fluid = sp.symbols("pdfs_inter_fluid:" + str(stencil_fluid.Q)) pdfs_inter_concentration = sp.symbols("pdfs_inter_concentration:" + str(stencil_concentration.Q)) @@ -66,13 +66,13 @@ with CodeGeneration() as ctx: # Fluid PDFs and fields pdfs_fluid, pdfs_fluid_tmp, velocity_field, density_field = ps.fields( - f"pdfs_fluid({stencil_fluid.Q}), pdfs_fluid_tmp({stencil_fluid.Q}), velocity_field({stencil_fluid.D}), density_field({1}): {data_type}[2D]", + f"pdfs_fluid({stencil_fluid.Q}), pdfs_fluid_tmp({stencil_fluid.Q}), velocity_field({stencil_fluid.D}), density_field({1}): {data_type}[3D]", layout=layout, ) # Concentration PDFs and fields pdfs_concentration, pdfs_concentration_tmp, concentration_field = ps.fields( - f"pdfs_concentration({stencil_concentration.Q}), pdfs_concentration_tmp({stencil_concentration.Q}), concentration_field({1}): {data_type}[2D]", + f"pdfs_concentration({stencil_concentration.Q}), pdfs_concentration_tmp({stencil_concentration.Q}), concentration_field({1}): {data_type}[3D]", layout=layout, ) @@ -80,7 +80,7 @@ with CodeGeneration() as ctx: if config_tokens[1]== "1": concentration_output = None - force_on_fluid = sp.symbols("F_:2") + force_on_fluid = sp.symbols("F_:3") print("One-way fluid-concentration coupling set") elif config_tokens[1] == "2": @@ -122,7 +122,7 @@ with CodeGeneration() as ctx: kernel_type="stream_pull_collide", ) lamda=sp.Rational(1,6) - omegacTRT = relaxation_rate_from_magic_number(omega_c, magic_number=lamda) + #omegacTRT = relaxation_rate_from_magic_number(omega_c, magic_number=lamda) # Concentration LBM config lbm_concentration_config = LBMConfig( stencil=stencil_concentration, @@ -227,7 +227,7 @@ with CodeGeneration() as ctx: target=target, ) - bc_velocity_fluid = sp.symbols("bc_velocity_fluid_:2") + bc_velocity_fluid = sp.symbols("bc_velocity_fluid_:3") generate_boundary( ctx, "BC_Fluid_UBB", @@ -281,7 +281,7 @@ with CodeGeneration() as ctx: target=target, ) - bc_velocity_concentration = sp.symbols("bc_velocity_concentration_:2") ## is it needed ? + bc_velocity_concentration = sp.symbols("bc_velocity_concentration_:3") ## is it needed ? generate_boundary( ctx, "BC_Concentration_UBB", diff --git a/apps/benchmarks/MaterialTransport/one_way_coupling/3D_Validations/parameter_files/3d_gaussian.prm b/apps/benchmarks/MaterialTransport/one_way_coupling/3D_Validations/parameter_files/3d_gaussian.prm index 8578df8f18351cf4efc1197db9ef13ef28fa7f64..3630fbe03f5d333d0d45fe8acad8cdf5c49e5e63 100644 --- a/apps/benchmarks/MaterialTransport/one_way_coupling/3D_Validations/parameter_files/3d_gaussian.prm +++ b/apps/benchmarks/MaterialTransport/one_way_coupling/3D_Validations/parameter_files/3d_gaussian.prm @@ -1,13 +1,13 @@ Simulation{ - simName 3D_resolution; // 3D_validation or 3D_resolution + simName 3D_validation; // 3D_validation or 3D_resolution } NumericalSetup { - xSize 256; // SI and LBM length are one and the same => dx_SI = dx_LB always - ySize 256; - zSize 1; + xSize 2; // SI and LBM length are one and the same => dx_SI = dx_LB always + ySize 2; + zSize 2; numXBlocks 1; numYBlocks 1; @@ -24,10 +24,10 @@ NumericalSetup frameWidth <1, 1, 1>; // width of the outer region if splitting the LBM/PSM into inner and outer (only used if useCommunicationHiding is true) - dx_SI 1; + dx_SI 0.02; // fluid quantities - uInflowL 0.8; // LBM velocity of fluid + uInflowL 1e-8; // LBM velocity of fluid kappa_SI 4; // diffusivity SI kappa_L 0.00000166; // diffusivity lbm } diff --git a/apps/benchmarks/MaterialTransport/utilities/InitializerFunctions.cpp b/apps/benchmarks/MaterialTransport/utilities/InitializerFunctions.cpp index a77c5c0159049bb9ada2c0254d264fcae288d528..c210a8d42f011ab0ae4854aef1caf4d71f035e45 100644 --- a/apps/benchmarks/MaterialTransport/utilities/InitializerFunctions.cpp +++ b/apps/benchmarks/MaterialTransport/utilities/InitializerFunctions.cpp @@ -108,7 +108,7 @@ void initConcentrationFieldSinusoidal(const shared_ptr< StructuredBlockStorage > blocks->transformBlockLocalToGlobalCell(globalCell, block, *cellIt); Vector3< real_t > pos = blocks->getCellCenter(globalCell, level); - ConcentrationField->get(*cellIt) = std::sin(pi*pos[0]*dx)*std::sin(pi*pos[1]*dx)*std::sin(pi*pos[2]*dx) +1; + ConcentrationField->get(*cellIt) = std::sin(pi*pos[0]*dx)*std::sin(pi*pos[1]*dx)*std::sin(pi*pos[2]*dx) +1 ; ConcentrationField->get(*cellIt) = std::max(ConcentrationField->get(*cellIt), 1e-15); } } @@ -187,7 +187,7 @@ void initFluidFieldPoiseuille(const shared_ptr< StructuredBlockStorage >& blocks void analyticalSolGaussian(const shared_ptr< StructuredBlockStorage >& blocks, BlockDataID& AnalyticalConcentrationFieldID, const math::AABB& domainAABB, Vector3< uint_t > domainSize, const real_t sigma_0, const real_t diffusivity, - const Vector3< real_t > uInflow, const Vector3< real_t > x_0, const real_t time) + const Vector3< real_t > uInflow, const Vector3< real_t > x_0, const real_t time,uint_t advection_period) { real_t sigma_D2 = (2 * diffusivity * time);