## 2019-8-30 光滑粒子流体力学开源软件(Dual)sphysics使用中遇到的一些问题1
## 2019-8-30 光滑粒子流体力学开源软件(Dual)sphysics使用中遇到的一些问题1
2019-8-30 光滑粒子流体力学开源软件(Dual)sphysics使用中遇到的一些问题1
#写在前面
第一篇博客。本来我没有写博客的习惯的,开始写博客的目的很简单,怕以后忘记。不如趁着刚把一些问题解决之后马上记录下来。当然,如果有人看能帮到遇到同样问题的伙伴那就跟好了。学习过各类用于科学计算的开源软件(Openfoam之类)的小伙伴们都知道,此类软件有多么的麻烦,不仅仅是配置文件,甚至不同版本同样的选项配置起来都会有差别。解决起来很是头疼,guide能大致给你提供解决思路。但是老实说帮助有限,OF倒算好的,问题多架不住用的人多,大部分问题网上都能找到解决方法。这里因为科研方向,主要针对的是Dualsphysics和Sphysics。前者是可以在GPU上运行,后者不行。用一个团队的作品,但是功能上有巨大的差别,这里不提。懂得都懂,不懂得可以看guide。因为用的人少,遇到问题真的自己解决。曾经也试着在官网的forum中求助,大多石沉大海。
再简单介绍一下我自己,某东南沿海高校博士生在读,博1(马上博2了)。目前论文:0(哭,都给我哭。嘛不过我们学校第一年要上一整年的课,而且方向也近2个月才定下来)。计算机能力:极弱,还是短期大概2 3个月强化的结果。那么就开始吧,顺便这个系列能写多久我也不晓得。
另外,如果有小伙伴对相同的问题有更好的解决方法,也请联系我。
1.Sphysics的使用问题
这个软件结构很简单。具体可以参考https://blog.csdn.net/shewei1977/article/details/85480601。
简单的说就是首先编译生成Sphysicsgen2D/3D,运行(该软件用于工况配置和生成下一步主程序Sphysics2D/3D的makfile)然后,通过刚才生成的makefile生成主程序,第一步中生成的各种其他文件作为这个主程序的input文件,然后运行/输出结果。
很显然,上述步骤可以通过一个bat文件一步到位。该文件位于/run_directort/case中。很简单吧,但是,这一切都是你环境变量搭好的前提下。很遗憾,我试了一晚上依然没搭好环境。问了组里的别的师兄,都是说没遇到过(估计是前人解决了,后面的人都没在意)。
以上是用过单行执行bat文件的结果,有可能是缺库。但是百度了相关问题并没有解决。
一个很蠢的解决方案
相信很多和我一样的没什么计算机基础的小伙伴,最起码都知道ivf,vs什么的,也不喜欢用那些黑乎乎的cmd命令行。那么就想办法绕开nmake,用vs来编译。首先我们在vs中新建fortran项目并添加现有项sphysicsgen2D.f,release。得到exe文件,运行。输出配置参数得到一系列文件
其中makefile文件就是我们需要的,右键随便什么文本编辑器打开。
可以发现makefile的作用只是告诉编译器需要哪些源文件,那么我们手动将这些文件找出来,新建一个vs项目并将这些文件包括进去
生成。这样就得到了主程序。还记得在运行sphysicsgen2D中得到的一堆文件吗,将他们打包与新生成的sphysics2D.exe放入同一个文件夹,运行即可
2.Dualsphysics的restart问题
这是通过命令行的方式实现的,我们先看看help文件中是怎么写的
如果按着这么来-partbegin:begin[10] %xxxx%。那么恭喜你,前面算的部分他会重新算一遍。
再看看官方算例中是怎么写的。
set olddiroutdata=%diroutdata%
set dirout=%name%_restart_out
set diroutdata=%dirout%\data
rem “redirout” is created to store results of restart simulation
if exist %dirout% rd /s /q %dirout%
mkdir %dirout%
if not “%ERRORLEVEL%” == “0” goto fail
mkdir %diroutdata%
rem CODES are executed according the selected parameters of execution in this testcase
rem Executes GenCase4 to create initial files for simulation.
%gencase% %name%_Def %dirout%/%name% -save:all
if not “%ERRORLEVEL%” == “0” goto fail
rem Executes DualSPHysics to simulate the last 3 seconds.
%dualsphysicscpu% %dirout%/%name% %dirout% -dirdataout data -svres -partbegin:100 %olddiroutdata%
if not “%ERRORLEVEL%” == “0” goto fail
发现这跟help里的写法不一样啊kora(无能狂怒) 。总之,这才是正确的写法。但是有时候一些配置是无法从case_def通过gencase生成得到的(???不信? 下面我会举例子),也就是说必须手动更改最终的xml,这种情况下当然就不能在restart前重新生成case了。那很简单啊,注释掉就好了,你可以去试试,会报错:找不到part。解决方法是将restart那一行上面的都注释掉,保留3个set,手动新建相关文件夹,并将原来的%name%_out中%name%.xml和%name%.bi4文件拷到新的%name%_restart_out中才可运行。
3.Dualsphysics中两相流LiquidGas代码中Floating的配置
主要是float的初始速度
首先看看xmlguide
如果你这么配,恭喜你,算的都废了。实际float的速度全是0.单项流代码这么配没问题。
这个问题当时快把我逼成暴躁老哥了,去官网论坛,发邮件全都没人回。
直到,我看到了这么一段。
surprise,mother fxxker???????
没错,单项流叫linearvelini和angularvelini。两相流中叫velini和omegaini。。。??????why??????这才是两相流版本的正确配置方法。但是,不能在_def中配,我怀疑是gencase并不认识这个参数(linearvelini和angularvelini倒是认识)。因此只能生成xml之后手动添加。这就是我说的,有些配置不能通过gencase生成。。。。。
最后,这个或者这一系列文章主要是写给自己看的。当然有帮到别的小伙伴最好,写的不详细请见谅,我这里一些解决方法也并非最佳方案,比如环境变量的设置我就暂时搞不定,如果有会设置的麻烦请教我。