作业1 [隐式积分器] 相关问题汇总 【不断更新】

最近收到不少同学关于作业1的问题,这里汇总回复一下:

首先简单回顾一下作业要求:

  • 本次作业中,⼤家可以选择⾃⼰最喜欢的模拟器,实现隐式时间积分(只要有线性系统求解就可以)。从性能(模拟同样时⻓的物理系统所需的运⾏时间)、准确度(如能量守恒)、数值稳定性等⻆度进⾏对⽐。
  • 可选模拟器:
    • implicit mass-spring/FEM, PCI-SPH, DF-SPH, MPS, Eulerian fluid (with pressure projection)…
  • 提交格式(论坛提交GitHub链接和⼀些关键图表)
    • README.md 中加⼊性能(如每帧计算时间)、准确度(机械能守恒)、稳定性的分析(允许的dt大小)等。
    • 建议在README.md中加入一些图片,这样更能吸引别的同学去研究你的代码仓库。
  • 评奖日期:7月11日

常见问题与回复

  • Q: 我选择的算法有线性系统求解,但并不是隐式时间积分器(如Eulerian fluid simulation里面的projection需要解Poisson equation),符合要求不?
    A: 完全可以,但是请实现两种线性系统求解方法(如Jacobi iteration, Conjugate gradients, Multigrid等)。
    需要注意的是,由于在课上讲到的Advection-projection求解器里面的advection是explicit而projection是implicit,少数文献也会把这样的算法叫做"semi-implicit"。但是这里的"semi-implicit"和"semi-implicit Euler"中的"semi-implicit"其实不是一回事。

  • Q: 我想实现Gauss-Seidel (GS),但是GS必须串行执行,而Taichi会自动并行…
    A: 一般大家会用red-black Gauss-Seidel方法进行GS的并行实现。

  • Q: 我对于advection scheme很感兴趣,可否加入一些关于advection scheme的讨论?
    A: 当然可以 :slight_smile:

  • Q: 可否基于别的同学的作业0
    A: 当然,但是请注明复制的代码的出处。

  • Q: 有没有详细介绍Explicit和Implicit时间积分的资料?
    A: 其实任何一本《数值分析》教材中应该都会提到“显格式”与“隐格式”。张老师的[知乎post] 中也有相关讨论。

  • Q: 我乐于挑战自我,想用张老师讲的FMM实现一个Poisson equation solver,可以不?
    A: 完全可以,不过请做好打持久战的准备…

  • Q: 文档需要写多长?
    A: 有两三个图表(建议使用matplotlib.pyplot绘制),和一百字左右的讨论即可。文档的目的是准确传达信息,并不是越长越好。一个很棒的作业提交案例:Homework 1: 多种显式/隐式方法求解弹簧质点系统

  • Q: 优秀作品还有奖品不?
    A: 是的,我们会选取实现准确、文档清晰的作者发放“Taichi编程语言纪念茶杯”一只。

  • Q: 我和小伙伴组队(2-3人)参与,如果获奖是否每人都有奖品?
    A: 是的,如果组队参与,那么每个成员都会收到一份奖品。在报告中,请简要注明每位同学的贡献。

如果有别的问题,欢迎在本帖提出! :slight_smile:

2 个赞

Not super clear about the algorithm, IIUC we may use some tricks like:

if 1:
  for i in range(N):

or use while loop instead:

i = 0
while i < N:
  ...
  i += 1

to make it not auto parallelized.