Chia sẻ Sử dụng ngôn ngữ lập trình trên nền phần mềm ANSYS công nghiệp để phân tích kết cấu

Discussion in 'CAE & CÁC PHẦN MỀM MÔ PHỎNG' started by Lethuy_hvkt, Nov 4, 2016.

  1. umy

    umy Well-Known Member

    Joined:
    Sep 27, 2016
    Messages:
    633
    Likes Received:
    822
    Last edited: Nov 26, 2018
    ngôn ngữ lập trình trên nền phần mềm: ANSYS APDL ???
    Sai topic > Hawk Rigde Systems for SOLIDWORKS !!
     
    Persious likes this.
  2. Persious

    Persious Active Member Staff Member

    Joined:
    Jul 28, 2017
    Messages:
    105
    Likes Received:
    123
    Cháu thấy cũng hay nên không để ý ạ, để cháu xóa bác Umy ạ! :p
     
  3. umy

    umy Well-Known Member

    Joined:
    Sep 27, 2016
    Messages:
    633
    Likes Received:
    822
    Last edited: Feb 4, 2019
    Bài tập 01 Ansys APDL cho SV tự học
    https://sites.ualberta.ca/~wmoussa/AnsysTutorial/AT/APDL/APDL.html

    This tutorial will cover the preprocessing stage of constructing a truss geometry. Variables including length, height and number of divisions of the truss will be requested and the APDL code will construct the geometry.

    [​IMG]

    Preprocessing: Use of APDL
    Shown below is the APDL code used to construct the truss shown above, using a length of 200 m, a height of 10 m and 20 divisions. The following discussion will attempt to explain the commands used in the code. It is assumed the user has been exposed to basic coding and can follow the logic.

    finish
    /clear
    /prep7
    *ask,LENGTH,How long is the truss,100
    *ask,HEIGHT,How tall is the truss,20
    *ask,DIVISION,How many cross supports even number,2
    DELTA_L = (LENGTH/(DIVISION/2))/2
    NUM_K = DIVISION + 1
    COUNT = -1
    X_COORD = 0
    *do,i,1,NUM_K,1
    COUNT = COUNT + 1
    OSCILATE = (-1)**COUNT
    X_COORD = X_COORD + DELTA_L
    *if,OSCILATE,GT,0,THEN
    k,i,X_COORD,0
    *else
    k,i,X_COORD,HEIGHT
    *endif
    *enddo
    KEYP = 0
    *do,j,1,DIVISION,1
    KEYP = KEYP + 1
    L,KEYP,(KEYP+1)
    *if,KEYP,LE,(DIVISION-1),THEN
    L,KEYP,(KEYP+2)
    *endif
    *enddo
    et,1,link1
    r,1,100
    mp,ex,1,200000
    mp,prxy,1,0.3
    esize,,1
    lmesh,all
    ________________________________________________
    TL lưu giử
    https://sites.ualberta.ca/~wmoussa/AnsysTutorial/CL/CAT/APDL/print.pdf

    ________________________________________
    Tạo mô hình trong /prep7 với APDL
    https://de.scribd.com/document/61608095/ANSYS-Examples-by-APDL-Hani-Aziz-Ameen
     
    Persious likes this.
  4. umy

    umy Well-Known Member

    Joined:
    Sep 27, 2016
    Messages:
    633
    Likes Received:
    822
    Bài tập 02 Ansys APDL cho KS tự học
    https://pyansys.readthedocs.io/ansys_examples.html

    Torsional Load on a Bar using SURF154 Elements
    This ANSYS APDL script builds a bar and applies torque to it using SURF154 elements. This is a static analysis example.

    Script Initialization
    Beginning of ANSYS script:

    !----------------------------------------
    ! Input torque applied (moment)
    ! Input radius, height, element size...
    !----------------------------------------
    TORQUE = 100
    RADIUS = 2
    H_TIP = 2
    HEIGHT = 20
    ELEMSIZE = 1
    PI = acos(-1)
    FORCE = 100/RADIUS
    PRESSURE = FORCE/(H_TIP*2*PI*RADIUS)

    Corresponding pyansys script including the initialization of pyansys:

    import numpy as np
    import os
    import pyansys

    # start ANSYS in the current working directory with default jobname "file"
    ansys = pyansys.ANSYS(run_location=os.getcwd(), interactive_plotting=True)

    # define cylinder and mesh parameters
    torque = 100
    radius = 2
    h_tip = 2
    height = 20
    elemsize = 0.5
    pi = np.arccos(-1)
    force = 100/radius
    pressure = force/(h_tip*2*np.pi*radius)

    Model Creation
    APDL Script:

    !----------------------------------------
    ! Define higher-order SOLID186
    ! Define surface effect elements SURF154
    ! which is used to apply torque
    ! as a tangential pressure
    !----------------------------------------
    /prep7
    et, 1, 186
    et, 2, 154
    r,1,
    r,2,

    !----------------------------------------
    ! Aluminum properties (or something)
    !----------------------------------------
    mp,ex,1,10e6
    mp,nuxy,1,.3
    mp,dens,1,.1/386.1
    mp,dens,2,0

    !----------------------------------------
    ! Simple cylinder
    !----------------------------------------
    *do, ICOUNT, 1, 4
    cylind,RADIUS,,HEIGHTH_TIP,HEIGHT,90*(ICOUNT-1),90*ICOUNT
    *enddo

    nummrg,kp
    lsel,s,loc,x,0

    lsel,r,loc,y,0
    lsel,r,loc,z,0,HEIGHT-H_TIP
    lesize,all,ELEMSIZE*2
    mshape,0
    mshkey,1
    esize,ELEMSIZE
    allsel,all
    VSWEEP, ALL
    csys,1
    asel,s,loc,z,HEIGHT-H_TIP+0.0001,HEIGHT0.0001
    asel,r,loc,x,RADIUS
    local,11,1
    csys,0
    aatt,2,2,2,11
    amesh,all
    finish

    Corresponding pyansys script:

    # Define higher-order SOLID186
    # Define surface effect elements SURF154 to apply torque
    # as a tangential pressure
    ansys.Prep7()
    ansys.Et(1, 186)
    ansys.Et(2, 154)
    ansys.R(1)
    ansys.R(2)

    # Aluminum properties (or something)
    ansys.Mp('ex', 1, 10e6)
    ansys.Mp('nuxy', 1, 0.3)
    ansys.Mp('dens', 1, 0.1/386.1)
    ansys.Mp('dens', 2, 0)

    # Simple cylinder
    for i in range(4):
    ansys.Cylind(radius, '', '', height, 90*(i-1), 90*i)

    ansys.Nummrg('kp')

    # non-interactive volume plot (optional)
    ansys.Show()
    ansys.Menu('grph')
    ansys.View(1, 1, 1, 1)
    ansys.Vplot()
    ansys.Wait(1)

    # mesh cylinder
    ansys.Lsel('s', 'loc', 'x', 0)
    ansys.Lsel('r', 'loc', 'y', 0)
    ansys.Lsel('r', 'loc', 'z', 0, height - h_tip)
    ansys.Lesize('all', elemsize*2)
    ansys.Mshape(0)
    ansys.Mshkey(1)
    ansys.Esize(elemsize)
    ansys.Allsel('all')
    ansys.Vsweep('ALL')
    ansys.Csys(1)
    ansys.Asel('s', 'loc', 'z', '', height - h_tip + 0.0001)
    ansys.Asel('r', 'loc', 'x', radius)
    ansys.Local(11, 1)
    ansys.Csys(0)
    ansys.Aatt(2, 2, 2, 11)
    ansys.Amesh('all')
    ansys.Finish()

    # plot elements and wait one second (optional)
    ansys.Eplot()
    ansys.Wait(1)

    [​IMG]
    Element plot from pyansys using matplotlib

    Solution
    APDL script:

    /solu
    antype,static,new
    eqslv,pcg,1e-8

    !----------------------------------------
    ! Apply tangential pressure
    !----------------------------------------
    esel,s,type,,2
    sfe,all,2,pres,,PRESSURE

    !----------------------------------------
    ! Constrain bottom of cylinder/rod
    !----------------------------------------
    asel,s,loc,z,0
    nsla,s,1
    d,all,all
    allsel,all
    /psf,pres,,2
    /pbc,u,1
    /title, Simple torsional example
    solve
    finish
    /post1
    set,last
    fsum
    esel,u,type,,2
    SAVE

    Corresponding pyansys script:

    # new solution
    ansys.Slashsolu() # Using Slash instead of / due to duplicate SOLU command
    # ansys('/solu') # could also use this line
    ansys.Antype('static', 'new')
    ansys.Eqslv('pcg', 1e-8)

    # Apply tangential pressure
    ansys.Esel('s', 'type', '', 2)
    ansys.Sfe('all', 2, 'pres', '', pressure)

    # Constrain bottom of cylinder/rod
    ansys.Asel('s', 'loc', 'z', 0)
    ansys.Nsla('s', 1)

    ansys.D('all', 'all')
    ansys.Allsel()
    ansys.Psf('pres', '', 2)
    ansys.Pbc('u', 1)
    ansys.Solve()
    ansys.Exit() # Finishes, saves, and exits

    Access and plot the results within python using pyansys:

    # open the result file using the path used in ANSYS
    resultfile = os.path.join(ansys.path, 'file.rst')
    result = pyansys.ResultReader(resultfile)

    # access element results as arrays
    nnum, stress = result.NodalStress(0)
    element_stress, elemnum, enode = result.ElementStress(0)
    nodenum, stress = result.NodalStress(0)

    # plot interactively
    result.PlotNodalResult(0, colormap='bwr')
    result.PlotNodalStress(0, 'Sx', colormap='bwr')
    result.PlotPrincipalNodalStress(0, 'SEQV', colormap='bwr')

    # plot and save non-interactively
    cpos = [(20.992831318277517, 9.78629316586435, 31.905115108541928),
    (0.35955395443745797, -1.4198191001571547, 10.346158032932495),
    (-0.10547549888485548, 0.9200673323892437, -0.377294345312956)]

    result.PlotNodalResult(0, interactive=False, cpos=cpos,
    screenshot=os.path.join(path, 'cylinder_disp.png'))

    result.PlotNodalStress(0, 'Sx', colormap='bwr', interactive=False, cpos=cpos,
    screenshot=os.path.join(path, 'cylinder_sx.png'))

    result.PlotPrincipalNodalStress(0, 'SEQV', colormap='bwr', interactive=False, cpos=cpos,
    screenshot=os.path.join(path, 'cylinder_vonmises.png'))

    [​IMG]
    Non-interactive Screenshot of Displacement from pyansys

    [​IMG]
    Non-interactive Screenshot of X Stress from pyansys

    [​IMG]
    Non-interactive Screenshot of von Mises Stress from pyansys
     
    Persious likes this.
  5. umy

    umy Well-Known Member

    Joined:
    Sep 27, 2016
    Messages:
    633
    Likes Received:
    822
    Last edited: Feb 4, 2019
    Bài học 03 Ansys APDL cho KS có nghề rồi, hiểu được để áp dụng thực hành

    3.1 - ANSYS Mechanical-APDL Harmonic Analysis Example and Comparison to ANSYS Mechanical results
    http://engr.bd.psu.edu/ansysug/ANSYS M-APDL Harmonic Analysis Example and Comparison to WB.pdf

    >> TL mới 2017 tính động: modal và harmonic Analysis; so sánh kết quả của các phương pháp tính của Ansys.

    Xem kỷ phần /solu và /Post26. ở trang 23 sau cuối.
    >> (KS-Cơ khí và KS-XD) Áp dụng tính Giãm chấn cho Xe tải quân sự, Máy rung động, Cầu bộ hành ...

    3.2 - Writing Text files with *VWRITE

    http://www.padtinc.com/blog/the-focus/writing-text-files-with-vwrite
    >> cách lập trình viết codes tợ như Fortran, tạo Marcros ...
     
    Persious likes this.
  6. umy

    umy Well-Known Member

    Joined:
    Sep 27, 2016
    Messages:
    633
    Likes Received:
    822
    Trích VUDSE:
    https://www.facebook.com/groups/vudse/
    Tien Cao:
    Việc hiển thị trong Ansys APDLkhác nhau giữa Power Graphics và Full Graphics. Khác nhau như thế nào thì bạn đọc slide sau là dễ hiểu nhất (có cả minh họa):
    https://caeai.com/sites/default/files/pg_summ.pdf(
    (ANSYS PostProcessing: Full Graphics vs. PowerGraphics)
    Bạn coi slide 6 và 7 ("If average nodal solution is requested, data is NOT averaged across material and geometric discontinuities by default"). Vậy lý do stress ko liên tục là do "geometry discontinuities".
    Nếu muốn khác phục, bạn có thể dùng Full Graphics hoặc thêm dòng sau AVRES,,FULL.

    Ngoài ra, ở slide cuối, bạn sẽ thấy tóm tắt khi nào nên dùng 2 chế độ hiển thị trên.
    Lý do chính: extrapolate stress rồi average tại node (đây là 1 vấn đề không đơn giản).
    Tham khảo thêm: https://www.sharcnet.ca/.../ds_Unaveraged_Results.html

    Đáp ngắn: (quà tết kỷ Hợi ;))
    Mô hình với Solid elements, khi dùng Power Graphics (nội suy các nút bao quanh mô hinh) đưa kết quả hình ảnh nhanh, có phần lớn hơn đôi chút . Vẫn chấp nhận được !

    .Full Graphics (được nội suy tất cả các nút) có kết quả tương đối chính xác hơn. Nếu mô hình quá lớn (trên khoãng 200.000 Nút) thì đưa Hình ảnh kết quả chậm chạp lắm.
     
    ginb likes this.

Share This Page

Users Viewing Thread (Users: 0, Guests: 0)

Loading...