找回密码
 注册
查看: 1448|回复: 0

[原创]细剖duns的parameters文件,优化你的内存使用

[复制链接]
发表于 2004-7-23 18:09:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
Duns的用户都知道:使用duns时需要配置一个文件—parameters文件。该文件内容如下
c
c *** Grid Related parameters
c
      parameter(nblk=20,mblk=40,numb=20,nsrf=15)
      parameter(nbig=50000,nbig2=100000,nsmall=10000,nsmall2=1000)
      parameter(nsmall3=2000,nsmall4=2000,nsmall5=1,nbcgen=1)
      parameter(ibig=400,ibig2=300)
c
c *** Species/turbulence related parameters
c
      parameter(nsm=1,nrm=1,nelm=1,nmodm=3)
      parameter(ntrbm=0,ninflw=5+ntrbm+nsm)
      parameter(nrjbig=nbig*(nsm+2)*(nsm+2))
parameter(npbig=5)
从上面可以看出来,之所以这个文件名为parameters,是因为其内容为若干个parameter参数语句组成的。在使用duns时,这个文件名不要该动,因为duns的几乎所有fortran文件中都用include ‘parameters’把该文件包含进去了,如果你不使用这个名字,需要对每个文件中的这个语句进行对应的修改。Parameters文件中的这些parameters参数语句用来定义fortran代码中数组的维数,从而决定了内存的分配。也许是fortran不像c那样很容易实现内存动态分配(本人不太了解fortran,只能看懂fortran代码罢了),所以采用这种方式来分配内存,从而尽可能节约内存。因此,我们感觉可以把这些参数的值设置的很大,虽然会浪费内存但是还是能够让duns跑起来。是的,确实如此。如果每个参数的值我们自己动手设置确实是一件很麻烦的事情,特别是在所计算的问题的网格分块很多时。其实这些参数可以不必要自己计算。
执行dunssource pregrid 2d(3d for 3d computation)
会在$DUNSPATH27/$DUSNARCH目录下生成一个新的目录—pregrid-2d(pregrid-3d for 3d compuation),进入该目录,执行make即可获得一个可执行体—pregrid.e
如果你的网格数据文件,网格拓扑文件和脚本文件—script2文件已经准备好了,那么执行pregrid.e(必须在上述三个数据文件所在目录下运行)即可获得一个优化的parameters文件。
通常该parameters不需要改动半点即可使用。
虽然我们可以通过上述方式轻松获得优化的parameters文件,但是如果我们想看懂duns源代码。正确理解这些参数的含义是非常重要的。下面我将一一说明各个参数的含义,以及一些相关的知识。
◎边界单元(ghost cell)
duns中的控制体积是网格线所围成的单元,即所谓的内节点法(或者单元中心法,cell centered scheme)(如图1)。边界单元就是如图1中红色实心圈标记的单元
◎内边界单元(interior ghost cell)
如图1中绿色实心圈标记的单元就是内边界单元
◎solution block
◎物理网格块(physical block)
◎插值单元 duns可以采用搭接网格(overset grid),因此相互搭接的地方的控制体积处的流场的值都需要从对方插值获得。此外,每一个物理网格块的四个顶点处的变量值也是需要插值获得的。这些需要插值的控制体积称之为插值单元


nmx(nbck) 第nbck块物理网格在i坐标方向维数(网格点数)
nmy(nbck) 第nbck块物理网格在j坐标方向维数(网格点数)
nmz(nbck) 第nbck块物理网格在k坐标方向维数(网格点数)
mimx(nbck) 第nbck块物理网格在i坐标方向控制单元数目(包括边界单元)
mjmx(nbck) 第nbck块物理网格在j坐标方向控制单元数目(包括边界单元)
mkmx(nbck) 第nbck块物理网格在k坐标方向控制单元数目(包括边界单元)
mimx(nbck),mjmx(nbck),mkmx(nbck)和nmx(nbck),nmy(nbck),nmz(nbck)之间有如下关系
mimx(nbck)=nmx(nbck)+1
mjmx(nbck)=nmy(nbck)+1
mkmx(nbck)=nmz(nbck)+1
iimx(ibck)    第ibck块solution block在扫描方向(i坐标方向)的控制单元数目(不包括内部边界单元)
jjmx(ibck)    第ibck块solution block在j坐标方向的控制单元数目(包括边界单元)
kkmx(ibck)   第ibck块solution block在k坐标方向的控制单元数目(包括边界单元)
注意 对于一个solution block,只有在扫描方向上才有内部边界单元,而在非扫描方向不可能有内部边界单元。图1中的带箭头线条所贯穿的坐标方向即为扫描方向(sweep direction)
nblock为物理网格块数目
iblock  solution block 的数目
nsurf   物理边界的数目
nmx    物理网格中所有控制单元(包括边界单元)之和
所以有
nmx=mimx(1)*mjmx(1)*mkmx(1)+…+ mimx(nblock)*mjmx(nblock)*mkmx(nblock)
有了上面的一些基本东西,我们可以很好地解释parameters文件中各个参数了
在设置parameters文件中各参数时必须满足下面的要求
nblk.ge.nblock
mblk.ge.iblock
nsrf.ge.nsurf
nbig.ge.nmx
nsmall .ge. max(mimx(nbck)*mjmx(nbck)*mkmx(nbck))
nsmall3 .ge.插值单元数目,如果没有使用搭接网格,插值单元数目为物理网格块数目*4
即 nsmall3.ge. nblock*4
nbig2 .ge. iimx(1)*jjmx(1)*kkmx(1)+…+ imx(iblock)*jjmx(iblock)*kkmx(iblock)
一般说来,nbig2的量级和nbig*2(nbig*3 for 3d)差不多,略微比nbig*2(nbig*3 for 3d)少一点。因为nbig2所计算的单元不包括内边界点。
nsmall2 .ge. 所有内边界单元数目之和
nsmall3 .ge. 所有插值单元数目之和
nsmall4 .ge  所有边界单元数目之和(不包括内边界单元)
nsmall5 用于并行计算,如果非并行计算设置为1即可
nbcgen 通常设置为1。只有当同一物理边界处的边界条件不一样时,需要利用文件来已知该物理边界处每一个边界单元的边界条件时需要利用到,此时其值不能小于该物理边界处的边界单元数目
nsm .ge. 化学反应所涉及的组分数目
nrm .ge. 所有化学反应的数目之和
nelm .ge. 所有化学元素数目之和(在实际应用中发现,不管有多少种不同化学元素,这个值即使设置为1也可以)
nmodm .ge. 计算中所涉及的所有化学反应模型(用于自适应化学反应模型)
ntrm .ge. 涡粘系数湍流模型的方程数目。目前duns只有q-oemga两方成湍流模型,因为如果在计算中使用了湍流模型,必须不能小于2;如果没有使用湍流模型,当然可以设置为0。
ninflw 流场计算中控制方程的个数,这个值不需要用户设置
ibig .ge. max(iimx(ibck))             ibck=1,..,iblock
ibig2 .ge. max(iimx(ibck),jjmx(ibck),kkmx(ibck))  ibck=1,..,iblock
后面剩余的几个参数在实际应用我没有接触到,所以也就不知道了,还望知情者告知。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表