HI Wenxuan, Then what if the step size is 1e-6?
Ruochun On Thursday, October 24, 2024 at 11:45:52 PM UTC+8 [email protected] wrote: > Hi, Ruochun > > After changing the time step to 5e-6, although the particle velocity > after collision is not greater than the velocity before collision, the > rebound height of the particles after collision can almost reach the > initial position, and the CoR between the particles and the wall is only > 0.3. What is the reason for this? > > Best regards, > Wenxuan > > 在2024年10月24日星期四 UTC+8 14:08:27<Ruochun Zhang> 写道: > >> Hi Wenxuan, >> >> This is typical when the step size is not sufficient to fully resolve the >> contact process. You can try a series of different time step sizes (1e-4, >> 1e-5, 1e-6, 1e-7, to give an example) to see how your selection affects the >> fidelity of the bounce curve and how it converges. >> >> Thank you, >> Ruochun >> >> On Thursday, October 24, 2024 at 11:18:29 AM UTC+8 [email protected] >> wrote: >> >>> Hi, Ruochun >>> >>> I conducted a simple simulation of a single ball falling, but the >>> calculated results were not quite as expected. The speed of particles after >>> collision with the wall is greater than the speed before collision, this >>> phenomenon contradicts the theory of collision energy loss. >>> [image: Screenshot from 2024-10-24 11-16-03.png] >>> The code is as follows: >>> >>> #include <core/ApiVersion.h> >>> #include <core/utils/ThreadManager.h> >>> #include <DEM/API.h> >>> #include <DEM/HostSideHelpers.hpp> >>> #include <DEM/utils/Samplers.hpp> >>> >>> #include <cstdio> >>> #include <chrono> >>> #include <filesystem> >>> #include <random> >>> >>> using namespace deme; >>> using namespace std::filesystem; >>> >>> >>> int main() >>> { >>> // 1: 设置输出信息级别 >>> DEMSolver DEMSim; >>> DEMSim.UseFrictionalHertzianModel(); >>> DEMSim.SetVerbosity(STEP_METRIC); >>> DEMSim.SetOutputFormat(OUTPUT_FORMAT::CSV); >>> DEMSim.SetNoForceRecord(); >>> >>> // 2: 定义颗粒材料物性参数和壁面材料物性参数 >>> auto mat_type_walls = DEMSim.LoadMaterial({{"E", 1e8}, {"nu", 0.3}, { >>> "CoR", 0.3}, {"mu", 1}}); >>> auto mat_type_particles = DEMSim.LoadMaterial({{"E", 1e9}, {"nu", 0.3}, >>> {"CoR", 0.7}, {"mu", 1}}); >>> >>> // 3: 设置材料之间接触参数 >>> DEMSim.SetMaterialPropertyPair("CoR", mat_type_walls, mat_type_particles, >>> 0.3); >>> >>> // 4: 添加颗粒模板 >>> float density = 2500; >>> float radius = 0.025; >>> float mass1 = density * 4. / 3. * PI * radius * radius * radius; >>> auto sphere_template1 = DEMSim.LoadSphereType(mass1, radius, >>> mat_type_particles); >>> >>> // 5. 导入几何体 >>> auto box_outer = DEMSim.AddWavefrontMeshObject("box.obj", mat_type_walls >>> ); >>> box_outer->Scale(0.001); >>> >>> // 6. 设置全局参数 >>> float settle_frame_time = 0.001; >>> float settle_batch_time = 1.0; >>> unsigned int currframe = 0; >>> path out_dir = current_path(); >>> out_dir += "/00_Factory1_Output"; >>> create_directory(out_dir); >>> DEMSim.InstructBoxDomainDimension({-1.2, 1.2}, {-1.2, 1.2}, {-1.2, 1.2 >>> }); >>> DEMSim.SetGravitationalAcceleration(make_float3(0, 0, -9.81)); >>> >>> // 7. 设置求解时间步长及初始化 >>> DEMSim.SetInitTimeStep(1e-4); >>> DEMSim.SetInitBinSize(2 * radius); >>> DEMSim.Initialize(); >>> >>> >>> // 8. 生成颗粒 >>> float3 particle_pos = make_float3(0, 0, 0); >>> std::vector<float3> particle_pos_total; >>> particle_pos_total.push_back(particle_pos); >>> auto particles = DEMSim.AddClumps(sphere_template1, particle_pos_total); >>> particles->SetVel(make_float3(0, 0, 0)); >>> DEMSim.UpdateClumps(); >>> std::cout << "Current number of clumps: " << DEMSim.GetNumClumps() << >>> std::endl; >>> >>> // 9. 迭代计算 >>> for (float t = 0; t < settle_batch_time; t += settle_frame_time) >>> { >>> std::cout << "Frame: " << currframe << std::endl; >>> char filename[200], meshfilename[200]; >>> sprintf(meshfilename, "%s/DEMdemo_mesh_%04d.vtk", out_dir.c_str(), >>> currframe); >>> sprintf(filename, "%s/DEMdemo_output_%04d.csv", out_dir.c_str(), >>> currframe++); >>> DEMSim.WriteSphereFile(std::string(filename)); >>> DEMSim.WriteMeshFile(std::string(meshfilename)); >>> DEMSim.DoDynamicsThenSync(settle_frame_time); >>> } >>> >>> // 打印计算结束标志 >>> std::cout << "Calculation complete!" << std::endl; >>> return 0; >>> } >>> >> -- You received this message because you are subscribed to the Google Groups "ProjectChrono" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion visit https://groups.google.com/d/msgid/projectchrono/10fcbaff-7444-4405-92d1-c989d078a092n%40googlegroups.com.
