Fluent Addon 程序解析

来源:互联网 发布:重新注册淘宝账号 编辑:程序博客网 时间:2024/06/06 00:41

Fluent 自带了几个 Addon 程序,通过命令可以加载。

 

/define/models> addon-modules
FLUENT Addon Modules:
 0. none
 1. MHD Model
 2. Fiber Model
 3. PEM Fuel Cell Model
 4. SOFC Fuel Cell Model
 5. Population Balance Model
Enter Module Number: [0]

 

那么怎么才能自己来编写 Addon 程序呢,先卖个关子,看看目前成果。

 

加载 Addon Module,显示了一行文字并换行,载入UDF文件。

 

 

Addon Module 的构成包括 UDF 和 Scheme 文件,其中 UDF 文件是必须的,Scheme 文件不是必须的。

但自带模块的 Scheme 文件都是经过编译的 FASL 文件。

经过努力,居然读懂了文件中数字对应的代码,不禁有些自得。

有机会的话,写一个完整的 Addon Module。


看看 scheme 代码和 FASL 代码的对应关系


首先是 scheme 代码,用于定义新 rp-var。


(define make-new-rpvar
  (lambda (name default type)
    (if (not (rp-var-object name))
      (rp-var-define name default type #f)
    )
    (prf-update-all-rpvars)
  )
)


翻译成 FASL 代码:(这里省略了文件开始部分)


123
137
1124
1138
139
1310
01125
1126
11311
138
0011312
138
139
1310
120
011313
0000

----------------------------------------------------------------------------------------------------------------------

其实,fluent 加载 UDF 时也会自动加载 FASL 文件,如果存在的话。所以 UDF 的目录结构就是问题的关键了。


----------------------------------------------------------------------------------------------------------------------


FASL 文件中,如果是 if 分支,必须同时实现条件为真和假时的代码,不然程序就会挂掉。


最近知道了 FLUENT 编译 fasl 代码的命令: (sf "/path/to/filename_without_ext")


给一个对比的例子:


原始代码

(define (hy-append-to-file fn s)  (let ((port (open-file fn "a")))    (format port "~a\n" s)    (close-output-port port)  ))(define factorial  (lambda (n)    (let fact ((i n))      (if (= i 0)        1        (* i (fact (- i 1)))      )    )  ))


sf 之后的代码:


(define lambda *unbound* begin set! if %= %* %- #f)(hy-append-to-file fn s port format close-output-port open-file factorial n fact i)12013011211131132011121113301123113413317"~a\n"13201135133000113613117"a"0000120 (define137 factorial1121 (lambda1138 (n011121 ) (let1139 ((fact))01123 (begin1124 (set!139 fact1121 1131001125112613101400141112713101139112813101410000001139138000129000




原创粉丝点击