Fluent Scheme 脚本收集

来源:互联网 发布:重生之网络娱乐无弹窗 编辑:程序博客网 时间:2024/05/21 18:45

 

 

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)

      )

    )

  )

)

 

 

 

原创粉丝点击