*CREATE,FRACT,MAC/NOPRNSEL,ALL选择全部节点*GET,N,NODE,,NUM,MAX 获得当前最大节点数! CURRENT MAXIMUM NODE NUMBERCMSEL,S,CRACKTIP ! SELECT THE TIP NODESESLN ! ANY ELEMENTS ATTACHED*GET,ELMAX,ELEM,,NUM,MAX ! CURRENT MAXIMUM ELEMENT NUMBER*DO,IEL,1,ELMAX ! LOOP ON MAX ELEMENTELMI=IEL*IF,ELMI,LE,0,EXIT ! NO MORE SELECTED*GET,ELTYPE,ELEM,ELMI,ATTR,TYPE ! GET ELEMENT TYPE*IF,ELTYPE,NE,ARG1,CYCLE ! CHECK FOR SELECTED ELEMENTN3 = NELEM(ELMI,3) ! GET NODE 3 (K)*IF,NSEL(N3),LE,0,CYCLE ! IT MUST BE SELECTEDN7 = NELEM(ELMI,7) ! GET NODE 7 (L)*IF,NSEL(N7),LE,0,CYCLE ! IT MUST ALSO BE SELECTEDN1 = NELEM(ELMI,1) ! GET NODE 1 (I)N2 = NELEM(ELMI,2) ! GET NODE 2 (J)N5 = NELEM(ELMI,5) ! GET NODE 5 (M)N6 = NELEM(ELMI,6) ! GET NODE 6 (N)X3 = 0.75*NX(N3) ! WEIGHTED POSITION OF N3Y3 = 0.75*NY(N3)Z3 = 0.75*NZ(N3)X = 0.25*NX(N2) + X3 ! QUARTER POINT LOCATION ( NODE (R) )Y = 0.25*NY(N2) + Y3Z = 0.25*NZ(N2) + Z3N = N + 1 ! NEXT NODEN10 = NN,N10,X,Y,Z ! MIDSIDE NODE LOCATIONX = 0.25*NX(N1) + X3Y = 0.25*NY(N1) + Y3Z = 0.25*NZ(N1) + Z3N = N + 1N12= NN,N12,X,Y,ZX7 = 0.75*NX(N7)Y7 = 0.75*NY(N7)Z7 = 0.75*NZ(N7)X = 0.25*NX(N6) + X7Y = 0.25*NY(N6) + Y7Z = 0.25*NZ(N6) + Z7N = N + 1N14 = NN,N14,X,Y,ZX = 0.25*NX(N5) + X7Y = 0.25*NY(N5) + Y7Z = 0.25*NZ(N5) + Z7N = N + 1N16 = NN,N16,X,Y,ZN4=N3N8=N7NSEL,ALLTYPE,3EN,ELMI,N1,N2,N3,N4,N5,N6,N7,N8 ! REDEFINE THE ELEMENTEMORE,0,N10,0,N12,0,N14,0,N16EMORE,*ENDDOCMSEL,U,CRACKTIP ! UNSELECT THE TIP NODES NUMMRG,NODE ! MERGE MIDSIDE NODESNSEL,ALL ! SELECT ALL ELEMENTSESEL,ALL ! SELECT ALL ELEMENTS/GOPR*END/PREP7SMRT,OFFANTYPE,STATIC ! STATIC ANALYSISET,1,SOLID45ET,2,SOLID45 ! ELEMENTS AROUND THE CRACK TIPET,3,SOLID95 ! CRACK TIP ELEMENTS CREATED USING MACRO FRACT MP,EX,1,3E7MP,NUXY,1,.3CSYS,1 ! CYLINDRICAL COORDINATE SYSTEMN,1NGEN,9,20,1N,11,.8N,171,.8,180FILL,11,171,7,31,20CSYS,0 ! CARTESIAN COORDINATE SYSTEMFILL,1,11,9,2,1,9,20,3N,15,4N,75,4,5FILL,15,75,2,35,20N,155,-1,5FILL,75,155,3,95,20N,172,-1FILL,155,172,5,177,-1,,,.15FILL,11,15,3,,,7,20,3NGEN,2,200,1,177,,,,.25E,2,22,1,1,202,222,201,201EGEN,8,20,-1E,2,3,23,22,202,203,223,222EGEN,8,20,-1EGEN,9,1,-8EGEN,5,1,73,78E,171,151,173,172,371,351,373,372E,151,131,174,173,351,331,374,373E,131,132,175,174,331,332,375,374EGEN,3,1,-1E,134,135,155,177,334,335,355,377TYPE,2EMODIF,1 ! MODIFY ELEMENTS 1 TO 8 FROM TYPE,1 TO TYPE,2 *REPEAT,8,1NUMMRG,NODE ! MERGE COINCIDENT NODESNSEL,S,LOC,X,0NSEL,R,LOC,Y,0CM,CRACKTIP,NODE/NERR,0 ! TEMPORARILY NO WARNINGS OR ERRORS PRINTOUT! (IN ORDER TO AVOID WARNING MESSAGES DUE TO! MIDSIDE NODES LOCATION)FRACT,2 ! CONVERSION MACRO, TYPE 2 IS SOLID45! ELEMENTS AROUND THE CRACK TIP/NERR,DEFA ! TURN ON THE WARNINGS OR ERRORS PRINTOUT/OUTPUTOUTPR,,ALLOUTPR,VENG,ALL ! STORE STRAIN ENERGY FOR J-INTEGRAL EVALUATION NSEL,S,LOC,X,-1DSYM,SYMM,X ! SYMMETRIC B.C.'S AT X = -1NSEL,S,LOC,X,0,4NSEL,R,LOC,Y,0DSYM,SYMM,Y ! SYMMETRIC B.C.'S AT Y = 0 EXCEPT CRACK NODES NSEL,ALLD,ALL,UZ ! Z CONSTRAINTS FOR PLANE STRAIN PROBLEM NSEL,S,LOC,Y,5SF,ALL,PRES,-.5641895NSEL,ALLESEL,ALLFINISH/OUTPUT,SCRATCH/SOLUSOLVEFINISH/OUTPUT/POST1ETABLE,SENE,SENE ! RETRIEVE STRAIN ENERGY PER ELEMENTETABLE,VOLU,VOLU ! RETRIEVE VOLUME PER ELEMENTC*** IN POST1 DETERMINE KI (STRESS INTENSITY FACTOR) USING KCALC !**PATH,KI1,3,,48 ! DEFINE PATH WITH NAME = "KI1"PPATH,1,1 ! DEFINE PATH POINTS BY NODEPPATH,2,406PPATH,3,162KCALC,,,1 ! COMPUTE KI FOR A HALF-MODEL WITH SYMM. B.C.*GET,KI1,KCALC,,K,1 ! GET KI AS PARAMETER KI1!****************************************************************************** **!************************** J-INTEGRAL USER FILE ***************************** !****************************************************************************** *! ****NOTE:- IN GENERAL USAGE, THE USER FILE WOULD BE AVAILABLE IN THE! LOCAL DIRECTORY RATHER THAN BEING CREATED IN THE INPUT!****************************************************************************** **CREATE,JIN1STINFC ! DATA BLOCK NAMESEXP,W,SENE,VOLU,1,-1 ! CALCULATE STRAIN ENERGY DENSITYPATH,JINT,4,50,48 ! DEFINE PATH WITH NAME = "JINT"PPATH,1,ARG1 ! DEFINE PATH POINTS BY NODEPPATH,2,ARG2PPATH,3,ARG3PPATH,4,ARG4PDEF,W,ETAB,W ! PUT STRAIN ENERGY DENSITY ON THE PATHPCALC,INTG,J,W,YG ! INTEGRATE ENERGY W.R.T. GLOBAL Y*GET,JA,PATH,,LAST,J ! GET FINAL VALUE OF INTEGRAL FOR 1ST TERM OF J PDEF,CLEAR ! CLEAR OLD PATH VARIABLESPVECT,NORM,NX,NY,NZ ! DEFINE THE PATH UNIT NORMAL VECTORPDEF,INTR,SX,SX ! PUT STRESS SX ON THE PATHPDEF,INTR,SY,SY ! PUT STRESS SY ON THE PATHPDEF,INTR,SXY,SXY ! PUT STRESS SXY ON THE PATHPCALC,MULT,TX,SX,NX ! CALCULATE TRACTION TXPCALC,MULT,C1,SXY,NY ! TX = SX*NX + SXY*NYPCALC,ADD,TX,TX,C1PCALC,MULT,TY,SXY,NX ! CALCULATE TRACTION TYPCALC,MULT,C1,SY,NY ! TY = SXY*NX + SY*NYPCALC,ADD,TY,TY,C1*GET,DX,PATH,,LAST,S ! DEFINE PATH SHIFT AS 1% OF PATH LENGTHDX=DX/100PCALC,ADD,XG,XG,,,,-DX/2 ! SHIFT PATH FROM X TO X-DX/2 (GLOBAL X DIR.)PDEF,INTR,UX1,UX ! DEFINE UX AT X-DXPDEF,INTR,UY1,UY ! DEFINE UY AT X-DXPCALC,ADD,XG,XG,,,,DX ! SHIFT PATH FROM X-DX/2 TO X+DX/2PDEF,INTR,UX2,UX ! DEFINE UX AT X+DXPDEF,INTR,UY2,UY ! DEFINE UY AT X+DXPCALC,ADD,XG,XG,,,,-DX/2 ! SHIFT PATH BACK TO ORIGINAL POSITIONC=(1/DX)PCALC,ADD,C1,UX2,UX1,C,-C ! CALCULATE DERIVATIVE DUX/DXPCALC,ADD,C2,UY2,UY1,C,-C ! CALCULATE DERIVATIVE DUY/DXPCALC,MULT,C1,TX,C1 ! DEFINE INTEGRANDPCALC,MULT,C2,TY,C2 ! = TX*DUX/DX + TY*DUY/DXPCALC,ADD,C1,C1,C2PCALC,INTG,J,C1,S ! FORM SECOND INTEGRAL (W.R.T. PATH LENGTH S)*GET,JB,PATH,,LAST,J ! GET FINAL VALUE OF INTEGRAL FOR 2ND TERM OF JJINT=2*(JA-JB) ! ADD BOTH TERMS AND DOUBLE FOR HALF MODELS PDEF,CLEAR ! CLEAR PATH VARIABLES*ENDC**************** IN POST1 DETERMINE KI FROM J-INTEGRAL !*********************** CON1=30E6/(1-(0.3*0.3)) ! J-TO-KI CONVERSION FACTOR*ULIB,JIN1 ! ASSIGN LOCAL FILE JIN1 AS USER FILE*USE,STINFC,4,45,125,164 ! USE DATA BLOCK STINFC AND GIVE PATH NODESKI2=SQRT(CON1*JINT) ! CALCULATE KI FROM J*STATUS,KI1 ! VIEW RESULTS*STATUS,KI2*DIM,LABEL,CHAR,2,2*DIM,VALUE,,2,3LABEL(1,1) = 'BY DISP ','BY J-'LABEL(1,2) = 'EXTRP ','INT'*VFILL,VALUE(1,1),DATA,1.0249,1.0249*VFILL,VALUE(1,2),DATA,KI1,KI2*VFILL,VALUE(1,3),DATA,ABS(KI1/1.0249),ABS(KI2/1.0249)SAVE,TABLE_1FINISH读取当前四节点单元有限元模型的总节点数,节点号列表,节点的坐标,总单元数,单元号列表,单元节点列表等*GET,NNOD,NODE,0,COUNT!得到所选择的节点总数*DIM,XY,ARRAY,NNOD,2*DIM,NODES,ARRAY,NNOD!定义2个数组*GET,ND,NODE,0,NUM,MIN!得到最小的节点编号*DO,I,1,NNOD,1NODES(I)=ND!将节点列表放到数组NODES中XY(I,1)=NX(ND)XY(I,2)=NY(ND)!取出节点的x,y坐标ND=NDNEXT(ND)!读出下一个节点编号*ENDDO*GET,NELM,ELEM,0,COUNT!得到所选择的单元总数*DIM,ELEMS,ARRAY,NELM*DIM,NDLST,ARRAY,NELM,4!定义2个数组*GET,EI,ELEM,0,NUM,MIN!得到最小的单元编号*DO,I,1,NELM,1ELEMS(I)=EL!将单元编号存入到数组ELEMS中*DO,J,1,4NDLST(I,J)=NELEM(EI,J)*ENDDO!读出单元的4个节点的编号EI=ELNEXT(EI)!读出下一个单元编号*ENDDO用ANSYS的APDL方式直接获得最大应力和最大应变的节点编号及其数值的有好多种方法:如下面的这种,先对节点的值进行SORT,在提取最大的值即可。