修改 flash_Flash程序使用(二)
上一章节中讲了Flash的发展和程序安装,并且我们以Sedov激波为例运行了Flash程序。在这一章节中我们将讲解Flash中一个模拟case的组成部分。 模拟
上一章节中讲了Flash的发展和程序安装,并且我们以Sedov激波为例运行了Flash程序。在这一章节中我们将讲解Flash中一个模拟case的组成部分。
模拟案例-以LaserSlab为例 Flash中提供了丰富的模拟案例。俗话说例子是最好的老师。学习写一个新case肯定需要从读懂已经有的case开始。Flash中所有的case存放在Flash文件夹中的source/Simulation/SimulationMain中,感兴趣的同学解压后可以到该路径下查看。大部分文件夹中都是一个完整的case。由于国内利用Flash做研究的学者大部分都是激光等离子体领域的人,所以在这里我们通过Flash中的LaserSlab这个case来进行讲解。在这个case中基本涉及到了我们上一节所提到的大部分的模块。相信大家可以通过理解这个case一通百通,从而可以写出自己所想要的case。
文件组成 进入LaserSlab文件夹后,看到一大堆文件,心头不由一紧。这也是我第一次看到时的想法。不要担心,我们可以化繁就简,这里面很多文件都是不同情况下的输入文件,就是你所看到的后缀名为.par的文件。组成一个case的基本文件大部分情况下只有6个,分别为Config, Simulation_init.F90, Simulation_data.F90, Simulation_initBlock.F90, Makefile以及flash.par。接下来我们将详细讲解每一个文件中的内容以及其作用。
Config文件 Config文件的主要作用在于确定要用的模块以及定义模拟中会用到的主要参数。如下图所示为LaserSlab案例下Config文件中的内容。以关键字REQUIRE开头的是模拟中需要用到的模块。USERSETUPVARS是指在setup这步时输入的可选参数,如果利用到三温模块(具体什么是三温后续会进行讲解),那么会调用其他的一些热传导以及扩散的模块。DATAFILES是指在模拟中会用到的一些数据文件。这里需要用到He气以及Al的状态方程和不透明度的表,这些表文件必须和case放在同一个文件夹中,否则无法成功复制到组件好的运行程序文件夹中。以D开头的为注释。PARAMETER是在模拟中会用到的一些模拟参数。在模拟中用做输入,或者会在不同文件中用到的数据,都需要在这里定义,否则会出错。在定义参数时需要指定参数名,参数类型,以及数据初始值。
Simulation_data.F90 在Config中注册的参量需要在Simulation_data.F90中指定数据类型从而传入并储存。
Simulation_init.F90 init顾名思义是进行初始化的。在这个case中我们需要从将从flash.par中读入的数据赋值给相应的参数并将其储存在程序中。函数RuntimeParameters_get()就是用来从flash.par中读取相应参数。
Simulation_initBlock.F90 在这些文件中最重要的就是这个文件。通过改变文件中的相应参数,可以决定靶的初始形状,初始位置等等。因此对这个文件需要进行详细的讲解。
首先利用Grid的那两个函数将block的信息以及坐标的具体值得到,并将相应的坐标信息赋予xcent,ycent,zcent。sim_killdivb的那个判断语句是进行确保磁场散度为0的操作,这里先可以不用管这个。
接下来利用三个循环将不同位置处的参量进行具体的定义。NDIM是在setup时定义的维度,species这个参量是用来区分是否为我们设定的不同粒子的信息。由于Flash不能解真空态,所以必须布上一些低密度的背景气体;在这个case中是利用He气作为背景气体的。确定好不同位置处的密度,温度等信息。利用Grid_putPointData这个函数将具体的信息赋值给程序计算。
将所有的参量定义完成之后,就可以将之前用到的数组等的内存释放。这里需要注意的是画红线处的NDIM==2需要改成为NDIM>=2;在不做三维的有磁场的情况时,这个case一般是对的。如果一旦做三维且有磁场的case,如果不做修正,相当于这里始终不会进入facez的那一步,所以会很快发现模拟盒子中磁场变得很小。
基本上Simulation_initBlock.F90中的部分就都讲解的差不多了,接下来我们说flash.par文件。
Flash.par flash.par就是Flash程序中的输入部分,在LaserSlab这个case中我们使用example.par这个文件。读者可以修改里面的具体参数改变你的输入值。在这里具体讲解一下激光注入部分吧,其他部分都很好理解。
打开激光能量沉积的开关,规定使用的最高光线数目,注意后面的所有激光的光线数目的总和不能超过这个值。Laser pulse为激光的脉冲波形;beam为具体的激光参数。lens为激光注入的位置,注意该位置要在模拟box之外。target为激光想要对准的盒子内的位置。接下来是激光的焦斑半径的大小。激光脉冲的参数,之前定义的以及激光的波长,波长的单位是微米。接着是截面分布类型以及高斯形焦斑的分布。剩下的基本不需要修改了,但在二维的直角坐标中截面以及gridType只能用1维的。
需要说明的是在这里打开了激光3Din2D的算法,所以只能用柱坐标。柱坐标中的y就是z,所以注意这里激光注入的时候box中的y的部分为z的部分。
Makefile Makefile在这里是Simulation部分的,不是标准的make文件。在setup时会生成标准的gnu/make文件。在这里一般只需要写Simulation_data.o就可以,其他部分都在顶层的SimulationMain中有写。如果用到了其他的程序文件,在这里也需要写明。
好了,基本上我们就把LaserSlab这个case讲解完了,后面我们会运行这个case,并讲解一下初步的后处理方法。希望可以帮到大家。