1. 程式人生 > 實用技巧 >tecplot錄製巨集(Macro)用以批量匯入資料

tecplot錄製巨集(Macro)用以批量匯入資料

今天要用Tecplot做後處理。需要匯入幾十個甚至上百個資料檔案,並且每匯入一個數據檔案,就要重新命名,以便區分。這樣的工作量手動一個一個地操作顯然不太現實,我想能不能讓其自動地完成這些重複地操作。這個問題讓我想到了以前用的幾款軟體都有巨集Marco這個命令,即可以把操作過程錄製成巨集,然後執行這個巨集命令,就可以把剛才錄製的命令完整地重新操作一遍,比如三維設計軟體CATIA,網格畫分軟體Pointwise。更加簡便靈活的地方是可以對巨集進行編輯,比如修改某個尺寸,修改某個名字,甚至複製某段命令,讓其重複執行。

Tecplot當然也有這樣的操作。於是我就按照這個思路嘗試錄製巨集。

首先新建一個巨集開始錄製。選單欄選擇Scripting>>Record Macro,新建巨集。然後會出現一個小對話方塊,暫時不管它。

接著,匯入一個數據檔案,並在Data中對此檔案(就是Zone)重新命名。然後在剛才的小對話方塊中選擇Stop Recording,結束錄製。用檔案編輯器開啟儲存的巨集命令檔案,比如UltraEdit,對其進行編輯。

 1 #!MC 1410
 2 $!ReadDataSet  '"D:\data\611\results_grid_1_tecplot.dat" '
 3   ReadDataOption = Append
 4   ResetStyle = No
 5   VarLoadMode = ByName
 6   AssignStrandIDs = Yes
 7   VarNameList = '
"x" "y" "u" "v" "w" "rho" "p" "Z Vorticity"' 8 $!RenameDataSetZone 9 Zone = 28 10 Name = '611'

以上即是儲存的巨集命令檔案。如果要重複操作的檔案數量不多,比如10個,那麼就可以直接在UltraEdit中複製貼上命令,修改對應的檔案路徑與檔名即可。這裡僅需要修改對應的第二行的檔案路徑,第九行的Zone程式碼,和第十行的Name。但是如果檔案數量非常多,手動複製修改仍然非常繁瑣。對於這種簡單重複的操作,當然可以寫一小段程式碼幫助實現了。最近一直在用Fortran寫程式碼,於是我就寫了段Fortran實現自動複製與編輯。程式碼如下:

 1 program main
 2 implicit none
 3 
 4   integer j
 5   integer, parameter :: n_data = 670
 6   character(len=3) :: cTemp
 7 
 8   open(10, file="tecplot_load_data.mcr", status="replace")
 9 
10   do j = 611, n_data
11 
12     write(cTemp, "(i3)") j
13     write(10,*) "#!MC 1410"
14     write(10,*)  "$!ReadDataSet  " // "'""D:\data\" &
15 &//  trim(adjustl(cTemp)) // "\results_grid_1_tecplot.dat"" '"
16     write(10,*) "  ReadDataOption = Append"
17     write(10,*) "  ResetStyle = No"
18     write(10,*) "  VarLoadMode = ByName"
19     write(10,*) "  AssignStrandIDs = Yes"
20     write(10,*) "  VarNameList = '""x"" ""y"" ""u"" ""v"" ""w"" ""rho"" ""p"" ""Z Vorticity""'"
21     write(10,*) "$!RenameDataSetZone"
22     write(10,"(""   Zone = "" i3)") j-583
23     write(10,*) "  Name = " // "'" // trim(adjustl(cTemp)) // "'"
24 
25   end do
26 
27 end

程式碼需要注意的地方是引號的問題,單引號,雙引號套用要注意。我會單獨開一篇博文講一下單雙引號的問題。

修改完之後儲存,然後在Tecplot裡邊執行這個巨集Macro檔案即可,這個巨集命令會自動迴圈載入資料檔案並修改檔案(Zone)的名字。很方便。