Gmsh與Nastran

Gmsh只能劃分網(wǎng)格,并不能直接作為有限元軟件的前處理器。Gmsh無法直接設(shè)置求解參數(shù),單元屬性,邊界條件,材料類型等。但是可以在Gmsh的基礎(chǔ)做進(jìn)一步開發(fā),完成以上設(shè)置。

Gmsh導(dǎo)出的網(wǎng)格與幾何關(guān)聯(lián),單元的Property編號(hào)可以與“幾何tag”或“Group tag”一致。通過“Physical Group”將幾何編入不同的組,獲取特定幾何上的單元,節(jié)點(diǎn)編號(hào),從而實(shí)現(xiàn)求解設(shè)置。本文通過修改Gmsh導(dǎo)出的“BDF”文件,實(shí)現(xiàn)Nastran靜力學(xué)求解。

1.BDF文件的結(jié)構(gòu)

可供Nastran計(jì)算的BDF文件由5部分組成,前2部分可選,后3部分必須有。其簡(jiǎn)單介紹:

  • Statement:控制程序的計(jì)算參數(shù),如內(nèi)存設(shè)置,數(shù)值方法等。

  • File Management:控制文件,執(zhí)行“restart”

  • Executive Control:設(shè)置求解類型,設(shè)置最長(zhǎng)允許時(shí)間

  • Case Control:定義子步,載荷步,選取載荷,約束,輸出結(jié)果

  • Bulk Data:定義具體的單元,節(jié)點(diǎn),載荷,材料信息。

Gmsh與Nastran的圖1

2.Gmsh劃分網(wǎng)格并導(dǎo)出BDF文件

將Gmsh導(dǎo)出為特定的文件,使用“option”控制,支持很多格式,“31”標(biāo)定BDF。

Gmsh與Nastran的圖2

將下圖所示的幾何劃分為四邊形網(wǎng)格,固定Line 201,Line 205 施加載荷。兩個(gè)面使用不同的材料。

Gmsh與Nastran的圖3

Gmsh的代碼如下,注意以下設(shè)置:
  • gmsh::model::addPhysicalGroup()

  • gmsh::option::setNumber("Mesh.SaveAll", 0);

  • gmsh::option::setNumber("Mesh.SaveElementTagType", 2);軟件默認(rèn)單元導(dǎo)出后的“Property 編號(hào)”采用幾何編號(hào),此處改為使用Physical Group的編號(hào)。

  • gmsh::model::mesh::getNodesForPhysicalGroup()

  • gmsh::model::removePhysicalGroups(),通過這個(gè)命令實(shí)現(xiàn)僅導(dǎo)出2維單元。

int main(int argc, char **argv){  gmsh::initialize(argc, argv);
 gmsh::model::add("bdf-Nastran");  double lc = 1.0;  gmsh::model::occ::addPoint(0, 0, 0,lc, 100);  gmsh::model::occ::addPoint(20, 0, 0, lc,101);  gmsh::model::occ::addPoint(20, 10, 0,lc, 102);  gmsh::model::occ::addPoint(0, 10, 0, lc,103);  gmsh::model::occ::addPoint(0, 0, 20, lc, 104);  gmsh::model::occ::addPoint(0, 10, 20, lc, 105);
 gmsh::model::occ::addLine(100, 101, 200);  gmsh::model::occ::addLine(101, 102, 201);//此線段固定  gmsh::model::occ::addLine(102, 103, 202);  gmsh::model::occ::addLine(103, 100, 203);  gmsh::model::occ::addLine(103, 105, 204);  gmsh::model::occ::addLine(105, 104, 205);//此線段加載荷  gmsh::model::occ::addLine(104, 100, 206);
 gmsh::model::occ::addCurveLoop({200,201,202,203}, 300);  gmsh::model::occ::addCurveLoop({ -203,204,205,206 }, 301);
 gmsh::model::occ::addPlaneSurface({300}, 400);  gmsh::model::occ::addPlaneSurface({ 301 }, 401);
 gmsh::model::occ::synchronize();
 gmsh::model::addPhysicalGroup(1, { 201 }, 500, "Fixed Nodes");  gmsh::model::addPhysicalGroup(1, { 205 }, 501, "Load Nodes");  gmsh::model::addPhysicalGroup(2, { 400 }, 502, "Aluminum");  gmsh::model::addPhysicalGroup(2, { 401 }, 503, "Steel");
 gmsh::option::setNumber("Mesh.SaveAll", 0);//僅輸出與Group相連的單元,  gmsh::option::setNumber("Mesh.BdfFieldFormat", 1);//0: free, 1: small, 2: large  gmsh::option::setNumber("Mesh.Format", 31);//導(dǎo)出為bdf  gmsh::option::setNumber("Mesh.SaveElementTagType", 2);//1: elementary, 2: physical, 3: partition。Default value: 1  gmsh::option::setNumber("Mesh.Lines", 1);
 gmsh::option::setNumber("Mesh.Algorithm", 11);  gmsh::model::mesh::generate(2);
 std::vector<size_t> fixNodes,loadNodes;  std::vector<double> fixCoors,loadCoors;  gmsh::model::mesh::getNodesForPhysicalGroup(1, 500, fixNodes, fixCoors);//獲得fix Nodes 的編號(hào)  gmsh::model::mesh::getNodesForPhysicalGroup(1, 501, loadNodes, loadCoors);//獲得load Nodes 的編號(hào)
 //將節(jié)點(diǎn)編號(hào)輸出到“Nodes.txt”  std::fstream file;  file.open("Nodes.txt", std::ios::app);  file << "Fixed Nodes:\n";  for (int i = 0; i < fixNodes.size(); i++)  file << fixNodes[i] << " ";
 file << "\nLoad Nodes:\n";  for (int i = 0; i < loadNodes.size(); i++)  file << loadNodes[i] << " ";    gmsh::model::removePhysicalGroups({ {1,500},{1,501} });//將Curve的Group刪除,僅導(dǎo)出QUAD單元。
 gmsh::write("bdf-Nastran.bdf");  std::set<std::string> args(argv, argv + argc);  if (!args.count("-nopopup")) gmsh::fltk::run();
 gmsh::finalize();  return 0;}

Nodes.txt文件中的節(jié)點(diǎn)信息:

Fixed Nodes:2 3 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 Load Nodes:5 6 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204

BDF文件太長(zhǎng),此處僅展示與Group設(shè)置相關(guān)部分,

//兩個(gè)面上單元,被編號(hào)為502,503CQUAD4  1054    502     1192    54      72      1193    CQUAD4  1055    502     1193    72      53      1194    CQUAD4  1056    502     1194    53      3       85      CQUAD4  1057    503     4       118     1195    151     CQUAD4  1058    503     151     1195    1196    162     CQUAD4  1059    503     162     1196    1197    140     CQUAD4  1060    503     140     1197    1198    163

3.添加材料、邊界條件、求解

在Gmsh導(dǎo)出的“bdf-Nastran.bdf”加入材料、Property信息:

$ AluminumMAT1,1,72395.,,0.33$ SteelMAT1,2,193060.,,0.3PSHELL,502,1,1.0,1,,1PSHELL,503,2,1.0,2,,2

加入載荷,邊界:

SPCADD,500,1LOAD,501,1.0,1.0,1
$Fixed Nodes:SPC1,1,123456,2 3SPC1,1,123456,53,THRU,72
FORCE,1,5,0,10.,1.,0.,0.FORCE,1,6,0,10.,1.,0.,0.FORCE,1,184,0,10.,1.,0.,0.FORCE,1,185,0,10.,1.,0.,0.FORCE,1,186,0,10.,1.,0.,0.FORCE,1,187,0,10.,1.,0.,0.FORCE,1,188,0,10.,1.,0.,0.FORCE,1,189,0,10.,1.,0.,0.FORCE,1,190,0,10.,1.,0.,0.FORCE,1,191,0,10.,1.,0.,0.FORCE,1,192,0,10.,1.,0.,0.FORCE,1,193,0,10.,1.,0.,0.FORCE,1,194,0,10.,1.,0.,0.FORCE,1,195,0,10.,1.,0.,0.FORCE,1,196,0,10.,1.,0.,0.FORCE,1,197,0,10.,1.,0.,0.FORCE,1,198,0,10.,1.,0.,0.FORCE,1,199,0,10.,1.,0.,0.FORCE,1,200,0,10.,1.,0.,0.FORCE,1,201,0,10.,1.,0.,0.FORCE,1,202,0,10.,1.,0.,0.FORCE,1,203,0,10.,1.,0.,0.FORCE,1,204,0,10.,1.,0.,0.

加入求解控制,載荷步選取

SOL 101CENDTITLE =BDF FROM Gmsh
SUBCASE 1   SUBTITLE=Default   SPC = 500   LOAD = 501   DISPLACEMENT(SORT1,REAL)=ALL   SPCFORCES(SORT1,REAL)=ALL   STRAIN(SORT1,REAL,VONMISES,STRCUR,BILIN)=ALL   STRESS(SORT1,REAL,VONMISES,BILIN)=ALL$ Direct Text Input for this SubcaseBEGIN BULK

Nastran求解結(jié)果:

Gmsh與Nastran的圖4

參考:

  • Gmsh 文檔

  • Nastran Quick Reference Guide


文章來源:有限元仿真技術(shù)交流平臺(tái)

登錄后免費(fèi)查看全文
立即登錄
App下載
技術(shù)鄰APP
工程師必備
  • 項(xiàng)目客服
  • 培訓(xùn)客服
  • 平臺(tái)客服

TOP

4
1
1