0% found this document useful (0 votes)
118 views5 pages

BM & SF Command Snippet2

This document provides instructions for calculating bending moment diagrams along a body using ANSYS. It defines: 1) Creating a local coordinate system and named selection of elements along the body. 2) Running a macro that calculates bending moment, shear force, axial force, and torsional moment results at increments along the body based on the local coordinate system and material stress/strain results. 3) Outputting the calculated force and moment diagrams to graphs and a text file for analysis.

Uploaded by

w1r9x8m2an
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
118 views5 pages

BM & SF Command Snippet2

This document provides instructions for calculating bending moment diagrams along a body using ANSYS. It defines: 1) Creating a local coordinate system and named selection of elements along the body. 2) Running a macro that calculates bending moment, shear force, axial force, and torsional moment results at increments along the body based on the local coordinate system and material stress/strain results. 3) Outputting the calculated force and moment diagrams to graphs and a text file for analysis.

Uploaded by

w1r9x8m2an
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 5

!

=======================================
! USER INPUT
! =======================================
! - define a Named Selection called CM_Section_Forces scoped to the body of
interest
! - define a Local Coordinate System at the starting point, with it's local Z axis
in the direction
! that you want to create the bending moment diagram. Moment are calculated about
this origin, which moves along the body with each increment.

! ARG1 - coordinate system (number) at the starting point, with it's local Z axis
in the direction that you want to create the bending moment diagram
! ARG2 - distance, measured from the local coordinate system (in ARG1) over which
you want to calculate the bending moment
! ARG3 - number of increments to split the distance into to calculate results

! Note: a text file of results will automatically open when the calculation is
complete, but you'll need to close this to complete the update

! =======================================
! AUTHOR AND DATE
! =======================================
! Nick Stevens - Tor Engineering Ltd
! September 2016
! http://tor-eng.com
! Thanks to SimuTech Group, in particular this article:
http://www.simutechgroup.com/FEA/fea-tips-tricks-stress-linearization.html
! Stress resultants article: https://en.wikipedia.org/wiki/Stress_resultants

! =======================================
! INITIALISE MACRO
! =======================================
resume

!########################################################################
! If you've already solved the model, then any subsequently created coordinate
! systems or named selections won't be available, so instead you can create
! them here as a fudge to avoid resolving the model
!########################################################################
! create coordinate system - the number (12 in this case) is populated in ARG1
LOCAL, 12, 0, 675, 30, 80, , 90
! create named selection, which needs to be called CM_Section_Forces
esel,s,mat,,11,13
cm,CM_Section_Forces,elem
allsel
!########################################################################

/show,png
/GFILE,500 !image size
/CMAP,_TEMPCMAP_,CMP,,SAVE
/RGB,INDEX,100,100,100,0
/RGB,INDEX,0,0,0,15

increment=ARG2/(ARG3-1)
! dimension results arrays
*dim,asurf_Mx,table,ARG3
*dim,asurf_My,table,ARG3
*dim,asurf_Fz,table,ARG3
*dim,asurf_Vx,table,ARG3
*dim,asurf_Vy,table,ARG3
*dim,asurf_Tz,table,ARG3
*dim,asurf_Dist,table,ARG3

/post1
set,last

Local_CS=ARG1 !coordinate system


cmsel,s,CM_Section_Forces ! select elements of body/bodies of interest
nsle,s,active ! select nodes

WPCSYS,,Local_CS ! place working plane at origin of coord sys ARG1


/CPLANE,1 ! cutting plane is working plane
WPSTYL,,,,,,0,2,1 ! cartesian WP with triad shown

! =======================================
! START LOOP
! =======================================

*do,i,1,ARG3
! get origin and orientation of "Local_CS" coordinate system
*GET,x_orig,CDSY,Local_CS,LOC,X ! get the origin
*GET,y_orig,CDSY,Local_CS,LOC,Y
*GET,z_orig,CDSY,Local_CS,LOC,Z
*GET,THXY,CDSY,Local_CS,ANG,XY ! get the orientation
*GET,THYZ,CDSY,Local_CS,ANG,YZ
*GET,THZX,CDSY,Local_CS,ANG,ZX

! create surface
SUCR,mysurf,CPLANE,3
SUSEL,S,mysurf

! get info needed to rotate results in to local coordinate system


*get,thxy,CDSY,4,ANG,XY ! First rotation, about the Global Z axis, that put
working plane where it is
*get,thyz,CDSY,4,ANG,YZ ! Second rotation, about the new X axis, that put
working plane where it is
*get,thzx,CDSY,4,ANG,ZX ! Third rotation, about the newest Y axis, that put
working plane where it is
*get,origx,CDSY,4,LOC,X ! location of the origin of the working plane, in
Global Cartesian
*get,origy,CDSY,4,LOC,Y ! location of the origin of the working plane, in
Global Cartesian
*get,origz,CDSY,4,LOC,Z ! location of the origin of the working plane, in
Global Cartesian

! Form cosine and sin terms as used in a rotation matrix


*afun,deg
c1=cos(thxy) ! Cosine of THXY, first rotation about Global Z
s1=sin(thxy)
c2=cos(thyz) ! Cosine of THYZ, second rotation about the new X
s2=sin(thyz)
c3=cos(thzx) ! Cosine of THZX, third rotation about the newest Y
s3=sin(thzx)
*afun,rad ! return to default radians

! Form the 3x3 rotation matrix


R11=c3*c1-s3*s2*s1
R12=c3*s1+s3*s2*c1
R13=-s3*c2
R21=-c2*s1
R22=c2*c1
R23=s2
R31=s3*c1+c3*s2*s1
R32=s3*s1-c3*s2*c1
R33=c3*c2

SUCALC,MyZero,DA,ZERO,,,,0.0 ! a dummy surface result (of zeroes) that is used in


calculations later

SUCALC,GCXX,GCX,SUB,MyZero, , ,-origx
SUCALC,GCYY,GCY,SUB,MyZero, , ,-origy
SUCALC,GCZZ,GCZ,SUB,MyZero, , ,-origz

SUCALC,sr11,DA,ZERO,,,,r11 ! rotation matrix terms


SUCALC,sr12,DA,ZERO,,,,r12
SUCALC,sr13,DA,ZERO,,,,r13
SUCALC,sr21,DA,ZERO,,,,r21
SUCALC,sr22,DA,ZERO,,,,r22
SUCALC,sr23,DA,ZERO,,,,r23
SUCALC,sr31,DA,ZERO,,,,r31
SUCALC,sr32,DA,ZERO,,,,r32
SUCALC,sr33,DA,ZERO,,,,r33

! Form working plane coordinates


! First do X
SUCALC,WPX1,sr11,MULT,GCXX ! R11*X
SUCALC,WPX2,sr12,MULT,GCYY ! R12*Y
SUCALC,WPX3,sr13,MULT,GCZZ ! R13*Z
SUCALC,WPX,WPX1,ADD,WPX2
SUCALC,WPX,WPX,ADD,WPX3 ! Form X ON WORKING PLANE = R11*X+R12*Y+R13*Z

! Then do Y
SUCALC,WPY1,sr21,MULT,GCXX ! R21*X
SUCALC,WPY2,sr22,MULT,GCYY ! R22*Y
SUCALC,WPY3,sr23,MULT,GCZZ ! R23*Z
SUCALC,WPY,WPY1,ADD,WPY2
SUCALC,WPY,WPY,ADD,WPY3 ! Form Y ON WORKING PLANE = R21*X+R22*Y+R23*Z

! Then do Z (for checking - all points should be on the same plane)


SUCALC,WPZ1,sr31,MULT,GCXX ! R31*X
SUCALC,WPZ2,sr32,MULT,GCYY ! R32*Y
SUCALC,WPZ3,sr33,MULT,GCZZ ! R33*Z
SUCALC,WPZ,WPZ1,ADD,WPZ2
SUCALC,WPZ,WPZ,ADD,WPZ3 ! Form Z ON WORKING PLANE = R31*X+R32*Y+R33*Z

RSYS,ARG1 !results coordinate system using local CS

! Mapping onto the surface


SUMAP,szz,S,Z ! map SZ (axial) onto the surface
SUMAP,sxz,S,XZ ! map shear stress SXY
SUMAP,syz,S,YZ ! map shear stress SYZ

! Form products in anticipation of calculating stress resultants


sucalc,szz_y,szz,MULT,WPY
sucalc,szz_x,szz,MULT,WPX
sucalc,s_tors1,syz,MULT,WPX
sucalc,s_tors2,sxz,MULT,WPY
SUCALC,s_tors,s_tors1,SUB,s_tors2

! Form integrals. This produces stress resultants about the origin of the local
coordinate system
sueval,Mx,szz_y,INTG
sueval,My,szz_x,INTG
sueval,Fz,szz,INTG
sueval,Vx,sxz,INTG
sueval,Vy,syz,INTG
sueval,Tz,s_tors,INTG

! Finally map results to output arrays


asurf_Mx(i)=Mx
asurf_My(i)=-My !negative sign required for My - see Wikipedia on Stress
Resultants
asurf_Fz(i)=Fz
asurf_Vx(i)=Vx
asurf_Vy(i)=Vy
asurf_Tz(i)=Tz
asurf_Dist(i)=(i-1)*increment

! Offset the working plane and local coordinate system ready to go round the loop
again
WPOFFS,,,increment
CSWPLAN,ARG1,0

*enddo
! =======================================
! END LOOP
! =======================================

! =======================================
! WRITE AND OPEN RESULTS
! =======================================

*cfopen,Section_Results,txt ! creates file called


Section_Results.txt, which will be in Solver Files Directory
*vwrite,'Dist','Vx','Vy','Fz','Mx','My','Tz'
(7(2X,A16))
*vwrite,asurf_Dist(1),asurf_Vx(1),asurf_Vy(1),asurf_Fz(1),asurf_Mx(1),asurf_My(1),a
surf_Tz(1)
(7(2X,F16.2))
*cfclos

/title,Vx against Distance


/GCOLUMN, 1, Vx
/AXLAB, X, Distance
/AXLAB, Y, Shear Force Vx
*VPLOT, asurf_Dist, asurf_Vx
/title,Vy against Distance
/GCOLUMN, 1, Vy
/AXLAB, X, Distance
/AXLAB, Y, Shear Force Vy
*VPLOT, asurf_Dist, asurf_Vy

/title,Fz against Distance


/GCOLUMN, 1, Fz
/AXLAB, X, Distance
/AXLAB, Y, Axial Force Fz
*VPLOT, asurf_Dist, asurf_Fz

/title,Mx against Distance


/GCOLUMN, 1, Mx
/AXLAB, X, Distance
/AXLAB, Y, Moment Mx
*VPLOT, asurf_Dist, asurf_Mx

/title,My against Distance


/GCOLUMN, 1, My
/AXLAB, X, Distance
/AXLAB, Y, Moment My
*VPLOT, asurf_Dist, asurf_My

/title,Tz against Distance


/GCOLUMN, 1, Tz
/AXLAB, X, Distance
/AXLAB, Y, Torsion Moment Tz
*VPLOT, asurf_Dist, asurf_Tz

/VIEW,1,1,1,1
/TRIA,LBOT
/PSYMB,CS,1
/title,Orientation System and Surface
WPSTYL,,,,,,0,0,1 ! cartesian WP with triad shown
nplot
!supl,mysurf,WPZ,1

! opens the created results file in Notepad:


/sys,notepad Section_Results.txt

/CMAP,_TEMPCMAP_,CMP
/show,close
rsys,0
csys,0
allsel

You might also like