【读splishsplash源代码】一步步调试2--SimulatorBase::timeStep()

上回我们从main函数开始,讲了GUI外壳。现在到了Simulator文件夹下的SimulatorBase.cpp文件的timeStep()函数。

上回链接:【读splishsplash源代码】一步步调试概览1–GUI外壳

本文将继续讲解一步步的调试流程

SimulatorBase::timeStep()

part 1: 进入SimulatorBase::timeStep()函数

该文件位于
\Simulator\SimulatorBase.cpp
的第842行开始
在这里插入图片描述
stopAt获取模拟停止时间,如果没有设定就为-1.0,表示不停止。

pauseAt同理,-1.0表示不停止。

假如PAUSE为true,直接返回。
这里要注意,默认是自动开始的时候pause的,所以我们要提前传入一个参数:–no-initial-pause,方法见附录

part 2: //Simulation code

继续走到注释//Simulation code处
表示这里才是关键。
在这里插入图片描述
传入一个sim指针,是当前模拟的一大堆参数。

传入一个bool值判断是否是2D模拟。假如是,下面有个if(sim2D),强行令z轴的速度位置为0。

传入numSteps即每渲染一帧需要模拟多少个时间步。

我们看到sim2D为false,numSteps为4
在这里插入图片描述
而sim指针所指向的是这一大堆东西。内涵非常丰富:包括核函数的信息、时间步的信息、非压力力的方法、邻域的信息、流体本身的信息等等。
在这里插入图片描述

part 3: for循环

接下来进入一个for循环。这个循环是在每个渲染帧之内的循环。这个循环是关键
在这里插入图片描述

START_TIMING开始计时。
其中Simulation::getCurrent()->getTimeStep()->step()应是重点中的中的。我们跳入。

跳入之后为:

TimeStepDFSPH::step()
位于
\SPlisHSPlasH\DFSPH\TimeStepDFSPH.cpp

在这里插入图片描述
本文结束,请听下回分解。

附录:为VS debug程序传入参数的方法

右键工程文件->属性
在这里插入图片描述
调试->命令参数。输入–no-initial-pause,其他参数见官方文档。
在这里插入图片描述

代码流回顾

至此我们的调用顺序为:

  1. main()中调用base->run()
  2. SimulatorBase::run()中调用runSimulation()
  3. SimulatorBase::runSimulation()中调用m_gui->run()
  4. Simulator_GUI_imgui::run()中调用MiniGL::mainLoop()
  5. MiniGL::mainLoop()中调用idlefunc()
  6. SimulatorBase::timeStep()中调用Simulation::getCurrent()->getTimeStep()->step()

下期链接
【读splishsplash源代码】一步步调试3-- TimeStepDFSPH::step()

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值