如何解决获取scipy的resolve_ivp函数以执行中间任务
我正在解决流体与结构的相互作用问题,需要修改solve_ivp,以便在每个时间步骤之后执行中间任务。该算法应如下所示:
for t in time:
for i in maxiter:
1 - Solve one time step of the fluid nonlinear equation keeping the solid fixed (RK45).
2 - Solve a nonlinear equation for the solid (Radau or user defined).
3 - Update the fluid geometry
if converge:
break
面临的挑战是如何耦合两个集成器实例。使用solve_ivp时,我无法控制时间步长,算法选择时间步长来提高稳定性。我可以接受这一点,因为流体的时间尺度比固体的时间尺度快得多。因此1中的时间步将固定2中的时间。我看到的两个选项是:
选项1:
- 实例化流体积分器对象并将其运行一个小的固定增量T(积分器将执行子步骤,可能不会很多)。
- 存储流体力信息。
- 实例化具有相同增量T的固体积分器对象,并使用先前计算的流体力求解。
- 检查收敛性,然后回到1)。
选项2):
- 实例化一个流体积分器对象,将最终时间设置为模拟的总时间。
- 在每个(自动)积分步骤之后,从INSIDE的solve_ivp函数中调用用户定义的固态积分器(需要修改solve_ivp。
- 检查Solve_ivp内部的收敛性,如果为False,则在相同的时间步执行新的积分,但要更新几何形状(可能不容易)。
选项1的缺点是我需要实例化并丢弃大量的积分器对象(可能超过1000万个)。尽管选项2)的缺点是我需要将resolve_ivp修改为:a)执行中间任务(该函数本身不允许执行中间任务,仅允许存储事件信息),并且b)与相同的增量重新集成如果收敛为False,则为T(可能吗?)。
我想知道是否有人看到这种集成循环的更好方法?预先谢谢你。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。