我想在Ansys Fluent中读取10个案例文件,每个案例文件中有10个要读取的数据文件。 Ansys Fluent使用Scheme编程语言。 我必须设法在这里(Evaluating a floating point variable in Scheme language)和这里的代码中找到个别问题的答案 (How to increase counter in a do-loop within Scheme language?),但在收集各个答案时,我意识到我需要一个新的代码用于通过do-loop读取数据文件的计数器。 以下是包含其他问题的解决方案的代码:
(do ((i 10 (+ i 1))
(j 5 (+ j 1)))
((>= i 20) 'my-return-value)
(ti-menu-load-string
(format #f "/file/read-case \"C:/DataProcessing/Case~a-time~a-sec/test/Case~a-time~a-sec.cas\"" i j i j))
(do ((datafilenum 5.100 (+ datafilenum 0.100)))
((>= datafilenum 6.000))
(ti-menu-load-string (format #f "/file/read-data \"C:/DataProcessing/Case~a-time~a-sec/test/Case~a-time~a-sec-~.3f.dat\"" i j i j datafilenum))
(ti-menu-load-string (format #f "/plot plot n \"C:/DataProcessing/Case~a-time~a-sec/test/water-vof/column-water-vof-at-~.3fs.txt\" y n n water vof y 0 1 0 16 ()" i j datafilenum))))
我想在这里实现的目标是: 阅读案例档案
Case10-time5-sec.cas
然后它读取10个数据文件并绘制答案
Case10-time5-sec-5.100.dat
Case10-time5-sec-5.200.dat
...
Case10-time5-sec-6.000.dat
下一个循环:
Case11-time6-sec.cas
阅读10个数据文件并绘制答案
Case11-time6-sec-6.100.dat
Case11-time6-sec-6.200.dat
...
Case11-time6-sec-7.000.dat
下一个循环...
那么,当datafilenum
更改时,如何将此代码中从5.100
开始的6.100
更改为7.100
,7.100
,j
等上部循环中的值,如j.100
,并将此值附加到导出的文本文件column-water-vof-at-~.3fs.txt
。当然,更改6.000
到7.000
,8.000
......,类似于j+1.000
?这让我非常困惑,因为我用了试验和错误来实现它!
答案 0 :(得分:1)
如何获得号码。如果j
为6并且您希望6.1
使用标准数学运算为其添加1/10
。
(define j 6)
(+ j 1/10)
; ==> 61/10 (aka 6.1 exact)
函数format
不是标准,因此存在许多竞争实现。在SRFI-48 Intermediate Format Strings中,您可以将61/10
显示为6.100
:
(format #f "~0,3F" (+ j 1/10))
; ==> "6.100"
所以把它们放在一起:
(do ((i 10 (+ i 1))
(j 5 (+ j 1)))
((>= i 20))
(ti-menu-load-string
(format #f "/file/read-case \"C:/DataProcessing/Case~a-time~a-sec/test/Case~a-time~a-sec.cas\"" i j i j))
(do ((datafilenum (+ j 1/10) (+ datafilenum 1/10)))
((>= datafilenum (+ j 1)))
(ti-menu-load-string (format #f "/file/read-data \"C:/DataProcessing/Case~a-time~a-sec/test/Case~a-time~a-sec-~0,3F.dat\"" i j i j datafilenum))
(ti-menu-load-string (format #f "/plot plot n \"C:/DataProcessing/Case~a-time~a-sec/test/water-vof/column-water-vof-at-~0,3Fs.txt\" y n n water vof y 0 1 0 16 ()" i j datafilenum))))
如果这不起作用,您需要编辑您正在使用的实现。例如。 Racket的format
不同,但它也支持SRFI-48,因此我使用(require srfi/48)
进行了测试。我更喜欢使用SRFI而不是实现版本,因为以后移植到不同的实现或修订版RNRS会更容易。
答案 1 :(得分:0)
Ansys Fluent没有明确的Scheme标准,也没有完整的数字塔。使用“ MIT方案3和4的混合物”。
当遍历浮点数时,由于任意精度而总是会出现问题,尤其是将这些数字放入字符串中时。 正如您已经提到的,Fluent不直接支持小数,这是精确的算术运算。
您最终将获得类似这样的结果
Case11-time6-sec-6.100.dat
Case11-time6-sec-6.200.dat
...
Case11-time6-sec-6.499987987.dat
...
Case11-time6-sec-7.000.dat
到目前为止,我想到的最好的解决方案是编写一个计算对的函数,这是Sheme中的本机快速结构,其中包含一个数字和一个基于舍入的相应字符串。
如果您仍然在这个话题上,我可以进一步详细说明这个答案。