Fluent Scheme 脚本收集

本文介绍了一组 FlowLab 脚本,用于实现菜单项添加、迭代过程中的数值输出、字符串处理、自动保存等功能,并提供了读取报告文件、导出边界条件信息等实用功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 添加菜单项 (Text Mode)

 

(define ti-flab-iterate
  (lambda ()
    (display "Hello World!")
  )
)

(define flowlab-menu
  (make-menu
   "flowlab"
   ("iterate" #t ti-flab-iterate  "Iterate.")
  )
)

(define add-menu
  (lambda (name menu test value help)
    (ti-menu-insert-item!
     menu
     (make-menu-item name test value help)
    )
   #t
  )
)

(add-menu "flowlab/" main-menu #t flowlab-menu "")


 


 

addmenu

 

 


 

 

2 输出当前的迭代次数和参数

 

 

(define (export-niters fname parameter)

  (let

    (

      (niter (%iterate 0))

      (out-port (open-file fname "w"))

     )

    (if (not out-port)

      (cx-error-dialog "unable to open output file for exporting niters")

     )

    (format out-port "$~a = ~a~%" parameter niter) 

    (flush-output-port out-port)

  )

)

 

 

 


 

3 字符串处理

 

;takes any string as argument 'str', breaks it on the basis of blank-space or
;newline character into multiple strings. These multiple strings are returned
;as a list.

(define (tokenizer str)
  (let
    (
      (l (string->list str))
   (result '())
   (delimitters (list #/space #/newline #/) #/())
   (started? #f)
   (temp '())
    )
    (for-each
      (lambda (c)
        (if started?
       (if (not (memv c delimitters))
         (set! temp (append temp (list c)))
         (begin
        (set! result (append result (list (list->string temp))))
        (set! temp '())
        (set! started? #f)
            )
          )
       (if (not (memv c delimitters))
         (begin
        (set! temp (append temp (list c)))
        (set! started? #t)
            )
          )
        )
      )
      l
    )
    (if started?
   (set! result
        (append result (list (list->string temp)))
      )
    )
    result
  )
)

 


 

4 自动保存,记录输出信息的迭代脚本

 

;;
;; iterate.scm
;;
(define casename "coal_inj_00")
(define iternum  500)
;
(define hy-start-transcript
  (lambda (filename)
    (if (file-exists? filename)
      (remove-file filename)
      #t
    )
    (ti-start-transcript filename #t)
    #t
  )
)

;;
(define (hy-stop-transcript)
  (if transcript-open?
    (stop-transcript #t)
    #t
  )
  #t
)

;;
(define (log-exec-proc exec-proc trn-file)
  (begin
    (hy-start-transcript trn-file)
    (exec-proc)
    (newline)
    (hy-stop-transcript)
  )
)

;;
(define my-iterate
  (lambda (num)
    (if (number? num)
      (begin
        (read-case-data casename)
        (iterate num)
        (write-case-data (format #f "~a-i~a" casename num))
        #t
      )
      #f
    )
  )
)

;;
(log-exec-proc (lambda () (my-iterate iternum)) (string-append casename ".trn"))

 

 

 

5 读取 report 文件中的数值


;;

;;

;;
(define (hy-read-rp-file filename)
  (let ((p (open-input-file (format #f "~a" filename))))
    (do
      ((x (read p) (read p)))
      (
        (or (number? x) (eof-object? x))
        (close-input-port p)
        (if (number? x) x #f)
      )
    )
  )
)

 


6 读取数据到 list 中

 

(define hy-read-data-to-list
  (lambda (fname)
    (let ((p (open-input-file (format #f "~a" fname))))
      (let f ((x (read p)) (l '()))
        (if (or (eof? p) (eof-object? x))
          (begin
            (close-input-port p)
            l
          )
          (begin
            (display x)
            (newline)
            (if (number? x)
                (set! l (append l (list x)))
            )
            (f (read p) l)
          )
        )
      )
    )
  )
)

 

 


 

7 导出 bc 信息

 

(define (hy-export-bc-names)
  (for-each
    (lambda (name)
      (display
        (format #f "{~a, /"~a/", /"~a/"},/n"
          (zone-name->id name)
          name
          (zone-type (get-zone name))
        )
      )
    )
    (inquire-zone-names)
  )
)

 

 

 


 

8 显示 list 内容

 

;;;
(define hy-display-list
  (lambda (l)
    (do ((i  0 (+ i 1)))
      ((>= i (length l)))
      (display (format #f "~a --- ~a/n" i (list-ref l i)))
    )
  )
)

 

 


 

9 非稳态计算时自动保存脚本

 

 

;; Scheme file to autosave files at a particular time interval, 

;;(modify by LiuGuoqing ,[email=cauffman@163.com]cauffman@163.com[/email])

;;original: FLUENT Online Technical Support "Solution 656 :Autosave at specified time intervals "


;; Usage:

;; To use the scheme file to save files at a given time interval,

;; 0. Read case and data files, then read autosave.scm through File > Read > Scheme

;; 1. Open the Execute Commands panel in the GUI (Solve>Execute Commands)

;; 2. Increase the number of Defined Commands by

;; 3. Click ON next to the most recent command and select Time Step

;;    next to the drop down arrow under When

;; 4. Enter the following text in the field under Command: 

;; (autowrite "wcd" "autoname-" 0.2)


;; 5. Enter the compression status below. Change only the text between the quotation marks.

;;    For compressed files use ".gz"

;;    For uncompressed files use ""

(define g_zip "")

;;

;; The value of 0.2 should be replaced with the desired interval for the current case

;; The value of "wcd" should be replaced with

;;                                           "wd " for data files only

;;                                           "wcd " for case and data files

;; The value of "autoname-" should be replaced with the actual pathname+filename :

;; if it is written in current directory,pathname can be omitted.

;;default setting

(define g_filename "auto-")

(define g_wcom "wd")


(define (writefiles current-time)

  (let* ((time-string) (writecommand))

    (rpsetvar 'autowrite/last-file-time current-time)

    (set! writecommand (string-append g_wcom " " g_filename g_zip))

    (ti-menu-load-string writecommand)

  )

)


(define (autowrite wcom filename interval)

  (let* ( (current-time) (overlap) (last-write) (file-write-time) )

    (if (not (rp-var-object 'autowrite/last-file-time))

      (rp-var-define 'autowrite/last-file-time (rpgetvar 'flow-time) 'real #f)

    )

    (set! current-time (rpgetvar 'flow-time))

    (set! last-write (rpgetvar 'autowrite/last-file-time))

    (set! overlap (- last-write (* interval (truncate (/ last-write interval)))))

    (set! file-write-time (+ interval (- last-write overlap)))

    (if (> current-time file-write-time)

      (begin

        (cond

          ((truncate (/ last-write interval)<? 10) 

             (set! g_filename (string-append filename "000" (number->string (inexact->exact (truncate(/ last-write interval))))))

          )

          ((truncate (/ last-write interval)<? 100)

             (set! g_filename (string-append filename "00" (number->string (inexact->exact (truncate(/ last-write interval))))))

          )

          ((truncate (/ last-write interval)<? 1000)

             (set! g_filename (string-append filename "0" (number->string (inexact->exact (truncate(/ last-write interval))))))

          )

          (else

             (set! g_filename (string-append filename (number->string (inexact->exact (truncate(/ last-write interval))))))

          )

        )

        (set! g_wcom wcom)

        (writefiles current-time)

      )

    )

  )

)


转载自:http://blog.youkuaiyun.com/fox000002/article/details/4510730


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值