0. 目錄
1. 老駱提醒
- 請先確認,您已經閱讀 VDOC_00_Introduction 中的聲明。
- 本文例題修改自 LS-OPT Support ,版權屬於該網站。
- 本文篇幅較長,但如果能融會貫通,相信您已經可以依樣畫葫蘆,連接你想要的程式至
VisualDOC
。
- 如果對不熟或沒接觸過
LS-DYNA
的朋友,閱讀本文可能會有些吃力。
- 如果對接觸過
LS-DYNA
但對LS-OPT
不熟悉的朋友,可以跳過相關內容。利用LS-OPT
求解的用意是,在於提供一個可與VisualDOC
比較的參考答案,並不在具體上比較兩者優劣。目前老駱暫時沒有寫LS-OPT
介紹的計畫,但如果您有興趣想了解,可以透過 camel@caeml.ai 聯絡老駱。如果有一定人數來信的話,老駱可以規劃一個LS-OPT
的系列教學文。老駱認為LS-OPT
的原理相當類似於VisualDOC
裡RSA
+ DOE
的概念。
- 在
Windows
環境下,使用LS-OPT version 6.0.0
時,如果在Setup
內,新增一變數,並手動輸入變數名超過兩個字元,程式會當掉。老駱已經有回報原廠,相信未來版次會修復。
2. 問題描述
本文例題修改自 Linear response surface with strategy Sequential with Domain Reduction (SRSM) ,是 Crashworthiness Optimization 內的一個子題。進入Download
,可以下載crash_srsm.zip
檔案。
因為原來的題目內牽涉到HIC
的計算,雖然在VisualDOC
裡面也可以實現,但本文旨在分享如何結合VisualDOC
和LS-DYNA
進行計算,所以老駱稍微將題目修改如下:
Minimize Objective Function
:
Mass
Subject to the Constraint
:
Intrusion<485mm
Design Variables (Side Constraints)
:
1.0mm<tbumper<5.0mm1.0mm<thood<5.0mm1.0mm<tfront<5.0mm1.0mm<tunder<5.0mm
Initial Conditions
:
tbumper=tupper=tfront=tunder=3mm
3. 前置作業
3.1 LS-DYNA K檔修改
- 打開
main.k
,修改*PARAMETER
。定義Part2
~Part5
的厚度變數及一個設定dt
的時間變數。
*PARAMETER
可以設定的變數,總共有R(實數)
、I(整數)
、 C(字串)
3
種。
- 剪下
car5.k
內的*include ../../rigid2
,貼到main.k
內。這個修改只是老駱
個人的習慣,將barrier
與car
兩者分離開來。最後main.k
檔應該看起來像:
*KEYWORD
*PARAMETER
rtbumper,3.0
rthood,3.0
rtfront,3.0
rtunder,3.0
rdt,5e-2
*INCLUDE
../../car5.k
*INCLUDE
../../rigid2
*END
- 打開
car5.k
,刪除*DATABASE_RWFORC
及*DATABASE_BINARY_RUNRSF
這兩項不需要的輸出。
- 對於這個問題僅需要
t = 5e-2
秒時的資訊,所以可以修改car5.k
最上方幾行。
*CONTROL_TERMINATION
&dt
*DATABASE_NODOUT
&dt
*DATABASE_BINARY_D3PLOT
&dt
*DATABASE_GLSTAT_MASS_PROPERTIES
&dt
*DATABASE_SSSTAT_MASS_PROPERTIES
&dt
*DATABASE_EXTENT_SSSTAT
9999
*SET_PART_LIST
9999
2,3,4,5
$
$ DEFINITION OF MATERIAL 1
$
- 指定適當的厚度變數至各
*SECTION_SHELL
。
*SECTION_SHELL
2,2,0.,0.,0.,0.,0
&tbumper,&tbumper,&tbumper,&tbumper,0.
*SECTION_SHELL
3,2,0.,0.,0.,0.,0
&thood,&thood,&thood,&thood,0.
*SECTION_SHELL
4,2,0.,0.,0.,0.,0
&tfront,&tfront,&tfront,&tfront,0.
*SECTION_SHELL
5,2,0.,0.,0.,0.,0
&tunder,&tunder,&tunder,&tunder,0.
至此,上述修改已經可以用於LS-OPT
分析。但main.k
內car5.k
及rigid2
被INCLUDE
的路徑是../../car5.k
及../../rigid2
。這樣的設定方便LS-OPT
分析,但不太利於使用VisualDOC
,所以我們可以複製一份main.k
、car5.k
及rigid2
至一新資料夾,然候將main.k
中car5.k
的INCLUDE
路徑改為car5.k
及將rigid2
的INCLUDE
路徑改為rigid2
,作為後續VisualDOC
分析使用。
用於VisualDOC
分析的main.k
檔應該會像:
*KEYWORD
*PARAMETER
rtbumper,3.0
rthood,3.0
rtfront,3.0
rtunder,3.0
rdt,5e-2
*INCLUDE
car5.k
*INCLUDE
rigid2
*END
4. LS-OPT
- 打開
srsm.lsopt
,Metamodel-based
維持Optimization
,Strategy for Metamodel-based Optimization
維持Sequential woth Domain Reduction(SRSM)
。
- 點選
Setup
block
將tbumper
、thood
、tfront
、tunder
的Type
設為Continous
、Starting
設為3
、Minumum
設為1
、Maximum
設為5
。
- 將
dt
的Type
設為Constant
,維持Starting
為0.05
。
- 點選
Sampling crash
block
。Metamodel
選用Radial Basis Function Network
,Pointselection
選用Space Filling
,Number of Simulation Points
維持8
。
- 點選
Crash
block
下的Setup
,在Command
中輸入呼叫LS-DYNA
的指令。此外,可以考慮輸入d=nodump
減少輸出。
- 點選
Crash
block
下reponses
下刪除MaxAccel
、HIC
兩項。
- 點選
Optimization
block
,將Objectives
改為Mass
。點選Constraint
,選擇Intrusions
,設定Upper Bound
為485
。
()內為LS-DYNA 運行次數
Unit: ton & mm |
tbumper |
thood |
tfront |
tunder |
mass |
disp |
LS-OPT(49) |
4.83 |
1.00 |
1.00 |
4.53 |
0.871 |
483.216 |
5. VisualDOC操作細節
先進行1
次Baserun
,看看LS-DYNA
是否能夠成功求解。求解成功後的ssstat
及nodout
檔,將用來進行後續VisualDOC
的設定。
()內為LS-DYNA 運行次數
Unit: ton & mm |
tbumper |
thood |
tfront |
tunder |
mass |
disp |
LS-OPT(49) |
4.83 |
1.00 |
1.00 |
4.53 |
0.871 |
483.216 |
Baserun(1) |
3.00 |
3.00 |
3.00 |
3.00 |
0.865 |
504.997 |
5.1 Optimization
5.1.1 Work Flow
使用Quick Start
->Direct Optimization
->User Defined Program
,快速搭建此問題的Work Flow
。
5.1.2 Component Editor內層
點選C欄
Component Editor
Optimization
下的第一個File I/O
component
。
按下下方Add an input file
,於File Path
中選擇Main.k
,VisualDOC
會自動生成main.k.tmpl
。
*.tmpl
檔可以視為一種範本,VisualDOC
將會記住這個檔案的pattern
,在之後與LS-DYNA
進行coupling
時,可以自動替換正確的變數值給LS-DYNA
求解(每次求解可以視為建立1
個DOE
點位),也可以讀入LS-DYNA
的結果進入VisualDOC
進行後續Optimization
或RSA
等計算。進行*.tmpl
檔設定的時候,特別要注意的是選用Format Specification
時要使用Free Format
或是Fixed Format
。老駱一般喜歡用Fixed Format
,但要特別注意數格子的時候,記得考慮變數本身的正負號也會佔一格。有時候,也會意外多含入跟隨其後數字的正負號。所以設定完之後,要記得在求解過程中觀察各個變數有沒有出現不合理的變化,通常問題都出現在最佳化求解的時候,讀入或寫出的變數有問題。
於右方Template File
中點選*PARAMETER
(第2
行),按下下方Add new search action
。
點選rtbumper
(第3
行),按下下方Add new search action
。
點選rtbumper
逗號後的3.0
,按下下方Add new modify action
。
查閱 LS-DYNAKEYWORD USER’S MANUAL VOLUME I 可以知道*PARAMETER
這張卡每行有8
個欄位,每個欄位可佔10
格。所以可以將Format Specification
設為Fixed Format
,並將Fixed Length
設為10
,確保變數的每一個位數都能被VisualDOC
找到。
依照上述邏輯,依序對rtbumper
、rthood
、rtfront
及rtunder
完成類似的設定。
此外,也可以選擇raw array
的方法,一次選取多個值,完成設定。事實上這也是Advanced Examples Manual 5.2 Coupling VisualDOC with LS-DYNA
中建議的操作方式。但這麼一來,在左方的欄位將難以區分各變數,各變數名將變成t[0]
、t[1]
。當然,也可以在component editor外層
中重新對各變數命名。一般來說,這種設定方法適用於變數很多的情況。對於變數較少的問題,老駱習慣在這邊一個一個設定,這樣一來在component editor外層
也能夠不重新命名,就能從變數名識別各變數。
第一個File I/O
設定完後,應該會像:
點選C欄
Component Editor
Optimization
下的第二個File I/O
component
。
按下下方Add an outout file
,於File Path
中選擇ssstat
,VisualDOC
會自動生成ssstat.tmpl
。
於右方Template File
中點選total mass of subsystem
(第28
行),按下下方Add new search action
。
於右方Template File
中點選total mass of subsystem =
後的8.65123510E-01
,按下下方Add new extract action
。
將Format Specification
設為Fixed Format
,將Strarting Column
設為35
,Fixed Length
設為16
,重新命名變數名為mass
。
按下下方Add an outout file
,於File Path
中選擇nodout
,VisualDOC
會自動生成nodout.tmpl
。
於右方Template File
中點選n o d a l__p r i n t__o u t
,並按下2
次Find Next
,此時應該能找到位於第29
列的正確資訊。(注意__
是代表2
個空格,這是LS-DYNA
nodout
輸出的格式)。按下下方Add new search action
。
於右方Template File
中點選x-disp
(第32
行),按下下方Add new extract action
。重新命名變數名為disp_167_x
。
有時候,*.tmpl
內可能有多列都符合搜尋結果,此時就要靠Find Prev
和Find Next
來正確指定變數的位置。
點選Format Specification
為Fixed Format
,並將Start Column
設為11
及Fixed Length
設為12
。
對node 432
進行類似的操作,並重新命名變數名為disp_432_x
新增一個變數,命名為disp
,將其Input/Output
設定為Output
,並將其Adv, Attribute
設為Synthetic
(Synthetic
可以想成這個變數須要經由其它變數的運算後才能產生)。對disp_x
欄按右鍵,選擇Edit dependence equation
後,於上方Input
輸入disp_167_x,disp_432_x
,並於下方編輯區輸入disp_x = disp_167_x - disp_432_x
。
第二個File I/O
設定完後,應該會像:
點選Executable
component
,於Local Analysis Program Definition
中的File Path
選擇求解器的位置,老駱自己是習慣使用環境變數,您也可以直接用路徑來選擇求解器。另外可以在Program Arguments
裡輸入求解的選項,老駱這邊設定想求解的檔案名為main.k
,用4
個cpu
求解,並且不須要產生dump
file
。
5.1.3 Data Linker
點選C欄
中的Data Linker
,使用Automatically add data to the selected model
來自動連接。
接下來點選C欄
中的component editor外層
的Optimization
component
,變數已經新增好了。
5.1.4 Component Editor外層
進行下列設定:
- 設定
rtbumper
、rthood
、rtfront
及rtunder
的Lower Bound
為1
及Upper Bound
為5
- 勾選
f
為Objective
、不勾選其為Constraint
,並確定其Goal
維持預設的Minimize
- 刪除
disp_167_x
及disp_432_x
- 勾選
disp_x
為Constraint
,並設定其Upper Bound
為485
5.1.5 Simulation Monitors
點選C欄
Simulation Monitors
,按下右方Add a generic monitor
,輸入6
,來創造一個觀看6
個變數的表格,分別觀察rtbumper
、rthood
、rtfront
、rtunder
、mass
及disp_x
。
接著新增BestObjetive
及WrostConstraint
這兩個monitor
。
手動完成連接後,應該會像:
5.1.6 Post Processing
這是老駱試了幾次之後,比較好的答案,另存一task
,命名為Opt good
。
這是老駱試了幾次之後,比較差的答案,另存一task
,命名為Opt bad
。
()內為LS-DYNA 運行次數
Unit: ton & mm |
tbumper |
thood |
tfront |
tunder |
mass |
disp |
LS-OPT(49) |
4.83 |
1.00 |
1.00 |
4.53 |
0.871 |
483.216 |
Baserun(1) |
3.00 |
3.00 |
3.00 |
3.00 |
0.865 |
504.997 |
Opt good(207) |
4.56 |
1.00 |
1.30 |
4.17 |
0.833 |
486.276 |
Opt bad(93) |
4.18 |
3.27 |
3.70 |
4.01 |
1.091 |
486.144 |
LS-DYNA
由於考慮其計算效率,所以每次計算的結果,即使是用同一台電腦及同樣的CPU
數,跑同樣的問題,也會有微小的差異。在一般的顯性問題中,這樣的誤差是可以接受的。但在跑最佳化問題時,會容易在最佳解附近振盪,花費許多計算資源在等結果收斂,甚至有時候收斂的答案離最佳解還有一段不小的距離。簡單講,直接與LS-DYNA
進行Optimization
的話,每次跑可能都不同的答案,有時答案很好,有時卻會很差(例如Opt good
與Opt bad
)。所以老駱一般不建議直接進行Optimization
,而是用DOE
搭配Optimization
或RSA
來求解,才是比較實務的作法。
5.2 DOE
開啟Opt good
task
,另存一task
,命名為DOE with responses Composite
。將2
個File I/O
及1
個Executable
component
置入DOE
component
中,並刪除Optimization
component
,最後完成work flow
連接。步驟與 VDOC_02_DOE 類似。
點選DOE
component
進行下列設定:
- 設定
rtbumper
、rthood
、rtfront
及rtunder
的Lower Bound
為1
及Upper Bound
為5
,並設定為Variable
。
- 勾選
mass
及disp_x
為Response
。
- 刪除
disp_167_x
及disp_432_x
。
DOE Action
選擇Create DOE points with responses
。
Designs
選擇Composites
,共產生25
個點位。
- 勾選
Reuse approximation from first invocation when run as subflow
。
5.3 Optimization Using DOE
開啟DOE with responses Composite
task
,另存一task
,命名為Opt Using DOE
。 將DOE
component
置入Optimization
component
中並完成work flow
連接。
點選DOE
component
後可以使用User Defined
的功能,讀入DOE with responses Composite
task
產生的25
個點位,並將DOE Action
改為Create DOE with approximations
。
其餘Data Linker
、Optimization
component
及Simulation Monitors
設定與 5.1 Optimization 類似。
()內為LS-DYNA 運行次數
Unit: ton & mm |
tbumper |
thood |
tfront |
tunder |
mass |
disp |
LS-OPT(49) |
4.83 |
1.00 |
1.00 |
4.53 |
0.871 |
483.216 |
Baserun(1) |
3.00 |
3.00 |
3.00 |
3.00 |
0.865 |
504.997 |
Opt good(207) |
4.56 |
1.00 |
1.30 |
4.17 |
0.833 |
486.276 |
Opt bad(93) |
4.18 |
3.27 |
3.70 |
4.01 |
1.091 |
486.144 |
Opt Using DOE(25) |
4.07 |
1.00 |
1.64 |
5.00 |
0.899 |
486.404 |
5.4 RSA Using DOE
開啟Opt good
task
,另存一task
,命名為RSA Using DOE
。將2
個File I/O
及1
個Executable
component
置入RSA
component
中,並刪除Optimization
component
,最後完成work flow
連接。
點選RSA
component
後可以使用User Defined
的功能,讀入DOE with responses Composite
task
作為Starting Strategy
。
其餘Data Linker
、RSA
component
及Simulation Monitors
設定與 5.1 Optimization 類似。
()內為LS-DYNA 運行次數
Unit: ton & mm |
tbumper |
thood |
tfront |
tunder |
mass |
disp |
LS-OPT(49) |
4.83 |
1.00 |
1.00 |
4.53 |
0.871 |
483.216 |
Baserun(1) |
3.00 |
3.00 |
3.00 |
3.00 |
0.865 |
504.997 |
Opt good(207) |
4.56 |
1.00 |
1.30 |
4.17 |
0.833 |
486.276 |
Opt bad(93) |
4.18 |
3.27 |
3.70 |
4.01 |
1.091 |
486.144 |
Opt Using DOE(25) |
4.07 |
1.00 |
1.64 |
5.00 |
0.899 |
486.404 |
RSA Using DOE(52) |
4.39 |
1.00 |
1.30 |
4.53 |
0.858 |
484.591 |
6. 結語
- 直接使用
Optimization
來coupleLS-DYNA
,須要耗費較多的計算資源,且不保證每次都能得到滿意的答案。
- 使用
Optimization
+DOE
來coupleLS-DYNA
,僅須要在DOE
時呼叫LS-DYNA
。一旦得到了問題的近似函數,後續的Optimization
計算速度非常快,且求得的近似解也有一定的品質,是一個經濟實惠的選擇。
- 使用
RSA
+DOE
來coupleLS-DYNA
,除了DOE
時,做RSA
也要呼叫LS-DYNA
,但總呼叫次數52
次也差不多等於LS-OPT
的49
次。比較LS-OPT
與RSA Using DOE
後,可以發現兩者的答案也相去不遠。
- 使用
RSA
+DOE
來coupleLS-DYNA
,應該是一可得最佳解的穩定策略。但此策略的後期,因為須確保收斂,可能會多次呼叫LS-DYNA
。也就是說,可能會增加很多求解時間,卻無法帶來相對應的最佳解提升。
- 老駱認為,在適當挑選
DOE
點位的前提下,使用Optimization
+DOE
來coupleLS-DYNA
,應該是一個不錯的策略。如果覺得所求的近似解不是很滿意,可逐步加入DOE
點位,來提升準確度。這樣的操作方式應該會比使用RSA
+DOE
來得更有效益一些。當然如果使用Optimization
+DOE
來coupleLS-DYNA
求解,過程中可能須要反覆調試,略嫌有些麻煩。至於最終採用什麼策略來解題,得取決於問題的難度、求解所需的精度與使用者所擁有的計算資源及時間來綜合考量。
7. 聯絡老駱
如果您或貴單位:
- 有導入
VR&D
產品的意願,但是有報價、採購及發票等問題。
- 有教育訓練或顧問需求。
- 有些建言指教。
- 想交個朋友。
歡迎透過 camel@caeml.ai 聯絡老駱。
0. 目錄
1. 老駱提醒
VisualDOC
。LS-DYNA
的朋友,閱讀本文可能會有些吃力。LS-DYNA
但對LS-OPT
不熟悉的朋友,可以跳過相關內容。利用LS-OPT
求解的用意是,在於提供一個可與VisualDOC
比較的參考答案,並不在具體上比較兩者優劣。目前老駱暫時沒有寫LS-OPT
介紹的計畫,但如果您有興趣想了解,可以透過 camel@caeml.ai 聯絡老駱。如果有一定人數來信的話,老駱可以規劃一個LS-OPT
的系列教學文。老駱認為LS-OPT
的原理相當類似於VisualDOC
裡RSA
+DOE
的概念。Windows
環境下,使用LS-OPT version 6.0.0
時,如果在Setup
內,新增一變數,並手動輸入變數名超過兩個字元,程式會當掉。老駱已經有回報原廠,相信未來版次會修復。2. 問題描述
本文例題修改自 Linear response surface with strategy Sequential with Domain Reduction (SRSM) ,是 Crashworthiness Optimization 內的一個子題。進入
Download
,可以下載crash_srsm.zip
檔案。因為原來的題目內牽涉到
HIC
的計算,雖然在VisualDOC
裡面也可以實現,但本文旨在分享如何結合VisualDOC
和LS-DYNA
進行計算,所以老駱稍微將題目修改如下:Minimize Objective Function
:Subject to the Constraint
:Design Variables (Side Constraints)
:Initial Conditions
:Mass
計算方式為Part 2
+Part 3
+Part 4
+Part 5
。Intrusion
計算方式為nodes 167
的x
位移剪去node
432
的x
位移。在這裡,node
432
僅是作為一參考點,因為該點是模型內較無變形的地方。tbumper
:Part 2
的厚度。tupper
:Part 3
的厚度。tfront
:Part 4
的厚度。tunder
:Part 5
的厚度。3. 前置作業
3.1 LS-DYNA K檔修改
main.k
,修改*PARAMETER
。定義Part2
~Part5
的厚度變數及一個設定dt
的時間變數。*PARAMETER
可以設定的變數,總共有R(實數)
、I(整數)
、C(字串)
3
種。car5.k
內的*include ../../rigid2
,貼到main.k
內。這個修改只是老駱
個人的習慣,將barrier
與car
兩者分離開來。最後main.k
檔應該看起來像:car5.k
,刪除*DATABASE_RWFORC
及*DATABASE_BINARY_RUNRSF
這兩項不需要的輸出。t = 5e-2
秒時的資訊,所以可以修改car5.k
最上方幾行。*SECTION_SHELL
。至此,上述修改已經可以用於
LS-OPT
分析。但main.k
內car5.k
及rigid2
被INCLUDE
的路徑是../../car5.k
及../../rigid2
。這樣的設定方便LS-OPT
分析,但不太利於使用VisualDOC
,所以我們可以複製一份main.k
、car5.k
及rigid2
至一新資料夾,然候將main.k
中car5.k
的INCLUDE
路徑改為car5.k
及將rigid2
的INCLUDE
路徑改為rigid2
,作為後續VisualDOC
分析使用。用於
VisualDOC
分析的main.k
檔應該會像:4. LS-OPT
srsm.lsopt
,Metamodel-based
維持Optimization
,Strategy for Metamodel-based Optimization
維持Sequential woth Domain Reduction(SRSM)
。Setup
block
將tbumper
、thood
、tfront
、tunder
的Type
設為Continous
、Starting
設為3
、Minumum
設為1
、Maximum
設為5
。dt
的Type
設為Constant
,維持Starting
為0.05
。Sampling crash
block
。Metamodel
選用Radial Basis Function Network
,Pointselection
選用Space Filling
,Number of Simulation Points
維持8
。Crash
block
下的Setup
,在Command
中輸入呼叫LS-DYNA
的指令。此外,可以考慮輸入d=nodump
減少輸出。Crash
block
下reponses
下刪除MaxAccel
、HIC
兩項。Optimization
block
,將Objectives
改為Mass
。點選Constraint
,選擇Intrusions
,設定Upper Bound
為485
。LS-DYNA
運行次數Unit: ton & mm
tbumper
thood
tfront
tunder
mass
disp
LS-OPT(49)
5. VisualDOC操作細節
先進行
1
次Baserun
,看看LS-DYNA
是否能夠成功求解。求解成功後的ssstat
及nodout
檔,將用來進行後續VisualDOC
的設定。LS-DYNA
運行次數Unit: ton & mm
tbumper
thood
tfront
tunder
mass
disp
LS-OPT(49)
Baserun(1)
5.1 Optimization
5.1.1 Work Flow
使用
Quick Start
->Direct Optimization
->User Defined Program
,快速搭建此問題的Work Flow
。5.1.2 Component Editor內層
點選
C欄
Component Editor
Optimization
下的第一個File I/O
component
。按下下方
Add an input file
,於File Path
中選擇Main.k
,VisualDOC
會自動生成main.k.tmpl
。*.tmpl
檔可以視為一種範本,VisualDOC
將會記住這個檔案的pattern
,在之後與LS-DYNA
進行coupling
時,可以自動替換正確的變數值給LS-DYNA
求解(每次求解可以視為建立1
個DOE
點位),也可以讀入LS-DYNA
的結果進入VisualDOC
進行後續Optimization
或RSA
等計算。進行*.tmpl
檔設定的時候,特別要注意的是選用Format Specification
時要使用Free Format
或是Fixed Format
。老駱一般喜歡用Fixed Format
,但要特別注意數格子的時候,記得考慮變數本身的正負號也會佔一格。有時候,也會意外多含入跟隨其後數字的正負號。所以設定完之後,要記得在求解過程中觀察各個變數有沒有出現不合理的變化,通常問題都出現在最佳化求解的時候,讀入或寫出的變數有問題。於右方
Template File
中點選*PARAMETER
(第2
行),按下下方Add new search action
。點選
rtbumper
(第3
行),按下下方Add new search action
。點選
rtbumper
逗號後的3.0
,按下下方Add new modify action
。查閱 LS-DYNAKEYWORD USER’S MANUAL VOLUME I 可以知道
*PARAMETER
這張卡每行有8
個欄位,每個欄位可佔10
格。所以可以將Format Specification
設為Fixed Format
,並將Fixed Length
設為10
,確保變數的每一個位數都能被VisualDOC
找到。依照上述邏輯,依序對
rtbumper
、rthood
、rtfront
及rtunder
完成類似的設定。此外,也可以選擇
raw array
的方法,一次選取多個值,完成設定。事實上這也是Advanced Examples Manual 5.2 Coupling VisualDOC with LS-DYNA
中建議的操作方式。但這麼一來,在左方的欄位將難以區分各變數,各變數名將變成t[0]
、t[1]
。當然,也可以在component editor外層
中重新對各變數命名。一般來說,這種設定方法適用於變數很多的情況。對於變數較少的問題,老駱習慣在這邊一個一個設定,這樣一來在component editor外層
也能夠不重新命名,就能從變數名識別各變數。第一個
File I/O
設定完後,應該會像:點選
C欄
Component Editor
Optimization
下的第二個File I/O
component
。按下下方
Add an outout file
,於File Path
中選擇ssstat
,VisualDOC
會自動生成ssstat.tmpl
。於右方
Template File
中點選total mass of subsystem
(第28
行),按下下方Add new search action
。於右方
Template File
中點選total mass of subsystem =
後的8.65123510E-01
,按下下方Add new extract action
。將
Format Specification
設為Fixed Format
,將Strarting Column
設為35
,Fixed Length
設為16
,重新命名變數名為mass
。按下下方
Add an outout file
,於File Path
中選擇nodout
,VisualDOC
會自動生成nodout.tmpl
。於右方
Template File
中點選n o d a l__p r i n t__o u t
,並按下2
次Find Next
,此時應該能找到位於第29
列的正確資訊。(注意__
是代表2
個空格,這是LS-DYNA
nodout
輸出的格式)。按下下方Add new search action
。於右方
Template File
中點選x-disp
(第32
行),按下下方Add new extract action
。重新命名變數名為disp_167_x
。有時候,
*.tmpl
內可能有多列都符合搜尋結果,此時就要靠Find Prev
和Find Next
來正確指定變數的位置。點選
Format Specification
為Fixed Format
,並將Start Column
設為11
及Fixed Length
設為12
。對
node 432
進行類似的操作,並重新命名變數名為disp_432_x
新增一個變數,命名為
disp
,將其Input/Output
設定為Output
,並將其Adv, Attribute
設為Synthetic
(Synthetic
可以想成這個變數須要經由其它變數的運算後才能產生)。對disp_x
欄按右鍵,選擇Edit dependence equation
後,於上方Input
輸入disp_167_x,disp_432_x
,並於下方編輯區輸入disp_x = disp_167_x - disp_432_x
。第二個
File I/O
設定完後,應該會像:點選
Executable
component
,於Local Analysis Program Definition
中的File Path
選擇求解器的位置,老駱自己是習慣使用環境變數,您也可以直接用路徑來選擇求解器。另外可以在Program Arguments
裡輸入求解的選項,老駱這邊設定想求解的檔案名為main.k
,用4
個cpu
求解,並且不須要產生dump
file
。5.1.3 Data Linker
點選
C欄
中的Data Linker
,使用Automatically add data to the selected model
來自動連接。接下來點選
C欄
中的component editor外層
的Optimization
component
,變數已經新增好了。5.1.4 Component Editor外層
進行下列設定:
rtbumper
、rthood
、rtfront
及rtunder
的Lower Bound
為1
及Upper Bound
為5
f
為Objective
、不勾選其為Constraint
,並確定其Goal
維持預設的Minimize
disp_167_x
及disp_432_x
disp_x
為Constraint
,並設定其Upper Bound
為485
5.1.5 Simulation Monitors
點選
C欄
Simulation Monitors
,按下右方Add a generic monitor
,輸入6
,來創造一個觀看6
個變數的表格,分別觀察rtbumper
、rthood
、rtfront
、rtunder
、mass
及disp_x
。接著新增
BestObjetive
及WrostConstraint
這兩個monitor
。手動完成連接後,應該會像:
5.1.6 Post Processing
這是老駱試了幾次之後,比較好的答案,另存一
task
,命名為Opt good
。這是老駱試了幾次之後,比較差的答案,另存一
task
,命名為Opt bad
。LS-DYNA
運行次數Unit: ton & mm
tbumper
thood
tfront
tunder
mass
disp
LS-OPT(49)
Baserun(1)
Opt good(207)
Opt bad(93)
LS-DYNA
由於考慮其計算效率,所以每次計算的結果,即使是用同一台電腦及同樣的CPU
數,跑同樣的問題,也會有微小的差異。在一般的顯性問題中,這樣的誤差是可以接受的。但在跑最佳化問題時,會容易在最佳解附近振盪,花費許多計算資源在等結果收斂,甚至有時候收斂的答案離最佳解還有一段不小的距離。簡單講,直接與LS-DYNA
進行Optimization
的話,每次跑可能都不同的答案,有時答案很好,有時卻會很差(例如Opt good
與Opt bad
)。所以老駱一般不建議直接進行Optimization
,而是用DOE
搭配Optimization
或RSA
來求解,才是比較實務的作法。5.2 DOE
開啟
Opt good
task
,另存一task
,命名為DOE with responses Composite
。將2
個File I/O
及1
個Executable
component
置入DOE
component
中,並刪除Optimization
component
,最後完成work flow
連接。步驟與 VDOC_02_DOE 類似。點選
DOE
component
進行下列設定:rtbumper
、rthood
、rtfront
及rtunder
的Lower Bound
為1
及Upper Bound
為5
,並設定為Variable
。mass
及disp_x
為Response
。disp_167_x
及disp_432_x
。DOE Action
選擇Create DOE points with responses
。Designs
選擇Composites
,共產生25
個點位。Reuse approximation from first invocation when run as subflow
。5.3 Optimization Using DOE
開啟
DOE with responses Composite
task
,另存一task
,命名為Opt Using DOE
。 將DOE
component
置入Optimization
component
中並完成work flow
連接。點選
DOE
component
後可以使用User Defined
的功能,讀入DOE with responses Composite
task
產生的25
個點位,並將DOE Action
改為Create DOE with approximations
。其餘
Data Linker
、Optimization
component
及Simulation Monitors
設定與 5.1 Optimization 類似。LS-DYNA
運行次數Unit: ton & mm
tbumper
thood
tfront
tunder
mass
disp
LS-OPT(49)
Baserun(1)
Opt good(207)
Opt bad(93)
Opt Using DOE(25)
5.4 RSA Using DOE
開啟
Opt good
task
,另存一task
,命名為RSA Using DOE
。將2
個File I/O
及1
個Executable
component
置入RSA
component
中,並刪除Optimization
component
,最後完成work flow
連接。點選
RSA
component
後可以使用User Defined
的功能,讀入DOE with responses Composite
task
作為Starting Strategy
。其餘
Data Linker
、RSA
component
及Simulation Monitors
設定與 5.1 Optimization 類似。LS-DYNA
運行次數Unit: ton & mm
tbumper
thood
tfront
tunder
mass
disp
LS-OPT(49)
Baserun(1)
Opt good(207)
Opt bad(93)
Opt Using DOE(25)
RSA Using DOE(52)
6. 結語
Optimization
來coupleLS-DYNA
,須要耗費較多的計算資源,且不保證每次都能得到滿意的答案。Optimization
+DOE
來coupleLS-DYNA
,僅須要在DOE
時呼叫LS-DYNA
。一旦得到了問題的近似函數,後續的Optimization
計算速度非常快,且求得的近似解也有一定的品質,是一個經濟實惠的選擇。RSA
+DOE
來coupleLS-DYNA
,除了DOE
時,做RSA
也要呼叫LS-DYNA
,但總呼叫次數52
次也差不多等於LS-OPT
的49
次。比較LS-OPT
與RSA Using DOE
後,可以發現兩者的答案也相去不遠。RSA
+DOE
來coupleLS-DYNA
,應該是一可得最佳解的穩定策略。但此策略的後期,因為須確保收斂,可能會多次呼叫LS-DYNA
。也就是說,可能會增加很多求解時間,卻無法帶來相對應的最佳解提升。DOE
點位的前提下,使用Optimization
+DOE
來coupleLS-DYNA
,應該是一個不錯的策略。如果覺得所求的近似解不是很滿意,可逐步加入DOE
點位,來提升準確度。這樣的操作方式應該會比使用RSA
+DOE
來得更有效益一些。當然如果使用Optimization
+DOE
來coupleLS-DYNA
求解,過程中可能須要反覆調試,略嫌有些麻煩。至於最終採用什麼策略來解題,得取決於問題的難度、求解所需的精度與使用者所擁有的計算資源及時間來綜合考量。7. 聯絡老駱
如果您或貴單位:
VR&D
產品的意願,但是有報價、採購及發票等問題。歡迎透過 camel@caeml.ai 聯絡老駱。