# 2. APDL Input Scripts

### **Principal Angle Script - run after solution,**

! - - -  
/POST1  
SET,1

! defining all my nodes into a subset, total nodes  
ALLSEL,ALL  
NSEL,S,,,ALL  
CM,totalnodes,node

! defining total number of nodes  
\*GET,totalnodes\_count,NODE,0,COUNT

! List nodes into table  
\*DIM,LIST,ARRAY,totalnodes\_count,1  
\*VGET, LIST(1), NODE, , NLIST

! define table of stress for each node  
PRNSOL,S  
\*DIM,TABLES,ARRAY,totalnodes\_count,4  
\*DO,I,1,totalnodes\_count  
 \*GET,TABLES(I,1),NODE,LIST(I),S,X  
 \*GET,TABLES(I,2),NODE,LIST(I),S,Y  
 \*GET,TABLES(I,3),NODE,LIST(I),S,XY  
 \*AFUN,DEG  
 r = TABLES(I,3)  
 q = 0.5\*(TABLES(I,1)-TABLES(I,2))  
 \*IF,q,EQ,0,THEN  
 q = 0.001  
 \*ENDIF  
 angle = 0.5\*ATAN2(r,q)  
 TABLES(I,4) = ABS(angle)  
\*ENDDO  
! use \*VEDIT,TABLES to see table of stresses

! PLOTTING

/POST1

/contour,,10, 2,10,88 ! NCONT=10, VMIN=2, VMAX=90 (uniform spacing)  
/dscale,,off   
SET,LAST  
/GRAPHICS,FULL

\*DO,I,1,totalnodes\_count  
 DNSOL,LIST(I),U,X,TABLES(I,4)  
\*ENDDO

RAPPND,1,1

PLNSOL, U,X, 2,88  
! - - -

### **StrainSpace\_AllPlane\_Validity\_Bidirectional\_Fibre - run after solution,**  


! - - STRESS STATE LEGEND - -  
! PRINCIPAL EVERYWHERE  
! XY - YELLOW  
! YZ - GREEN  
! XZ - TEAL  
! MULTIPLE - RED  
! - - - - - - - - - - - - - -

/POST1  
SET,1

! defining all my nodes into a subset, total nodes  
ALLSEL,ALL  
NSEL,S,,,ALL  
CM,totalnodes,node

! defining total number of nodes  
\*GET,totalnodes\_count,NODE,0,COUNT

! List nodes into table  
\*DIM,LIST,ARRAY,totalnodes\_count,1  
\*VGET, LIST(1), NODE, , NLIST

! define table of stress for each node  
PRNSOL,S  
\*DIM,TABLES,ARRAY,totalnodes\_count,6  
\*DO,I,1,totalnodes\_count  
 \*GET,TABLES(I,1),NODE,LIST(I),EPTO,X  
 \*GET,TABLES(I,2),NODE,LIST(I),EPTO,Y  
 \*GET,TABLES(I,3),NODE,LIST(I),EPTO,Z  
 \*GET,TABLES(I,4),NODE,LIST(I),EPTO,XY  
 \*GET,TABLES(I,5),NODE,LIST(I),EPTO,YZ  
 \*GET,TABLES(I,6),NODE,LIST(I),EPTO,XZ  
\*ENDDO

! list of angles  
\*DIM,TABLEA,ARRAY,totalnodes\_count,3

! xy angle  
\*DO,I,1,totalnodes\_count  
 \*AFUN,DEG  
 r = TABLES(I,4)/2  
 q = 0.5\*(TABLES(I,1)-TABLES(I,2))  
 \*IF,q,EQ,0,THEN  
 q = 0.001  
 \*ENDIF  
 angle = 0.5\*ATAN2(r,q)  
 TABLEA(I,1) = ABS(angle)  
\*ENDDO

! yz angle  
\*DO,I,1,totalnodes\_count  
 \*AFUN,DEG  
 r = TABLES(I,5)/2  
 q = 0.5\*(TABLES(I,2)-TABLES(I,3))  
 \*IF,q,EQ,0,THEN  
 q = 0.001  
 \*ENDIF  
 angle = 0.5\*ATAN2(r,q)  
 TABLEA(I,2) = ABS(angle)  
\*ENDDO

! xz angle  
\*DO,I,1,totalnodes\_count  
 \*AFUN,DEG  
 r = TABLES(I,6)/2  
 q = 0.5\*(TABLES(I,1)-TABLES(I,3))  
 \*IF,q,EQ,0,THEN  
 q = 0.001  
 \*ENDIF  
 angle = 0.5\*ATAN2(r,q)  
 TABLEA(I,3) = ABS(angle)  
\*ENDDO

! index  
\*DIM,INDEX,ARRAY,totalnodes\_count,1  
\*DO,I,1,totalnodes\_count  
 COUNT\_IND = 0  
 INDEX(I,1) = 0  
 \*IF,TABLEA(I,1),GT,2,AND,TABLEA(I,1),LT,88,THEN ! XY - YELLOW  
 INDEX(I,1) = 0.8  
 COUNT\_IND = COUNT\_IND + 1  
 \*ENDIF  
 \*IF,TABLEA(I,2),GT,2,AND,TABLEA(I,2),LT,88,THEN ! YZ - GREEN  
 INDEX(I,1) = 0.55  
 COUNT\_IND = COUNT\_IND + 1  
 \*ENDIF  
 \*IF,TABLEA(I,3),GT,2,AND,TABLEA(I,3),LT,88,THEN !XZ - TEAL  
 INDEX(I,1) = 0.30  
 COUNT\_IND = COUNT\_IND + 1  
 \*ENDIF  
 \*IF,COUNT\_IND,GT,2,THEN ! MULTIPLE - RED  
 INDEX(I,1) = 1  
 \*ENDIF  
\*ENDDO

! use \*VEDIT,TABLES to see table of stresses

! PLOTTING

/POST1

/contour,,10, 0,1,1 ! NCONT=10, VMIN=2, VMAX=90 (uniform spacing)  
/dscale,,off   
SET,LAST  
/GRAPHICS,FULL

\*DO,I,1,totalnodes\_count  
 DNSOL,LIST(I),U,X,INDEX(I,1)  
\*ENDDO

RAPPND,1,1

PLNSOL, U,X, 0,1

/GLINE,1,-1

/REPLOT  
! - - -

### **StrainSpace\_AllPlane\_Validity\_Unidirectional\_Fibre - run after solution,** 

  
  
! - - -

/POST1  
SET,1

! defining all my nodes into a subset, total nodes  
ALLSEL,ALL  
NSEL,S,,,ALL  
CM,totalnodes,node

! defining total number of nodes  
\*GET,totalnodes\_count,NODE,0,COUNT

! List nodes into table  
\*DIM,LIST,ARRAY,totalnodes\_count,1  
\*VGET, LIST(1), NODE, , NLIST

! define table of stress for each node  
PRNSOL,S  
\*DIM,TABLES,ARRAY,totalnodes\_count,6  
\*DO,I,1,totalnodes\_count  
 \*GET,TABLES(I,1),NODE,LIST(I),EPTO,X  
 \*GET,TABLES(I,2),NODE,LIST(I),EPTO,Y  
 \*GET,TABLES(I,3),NODE,LIST(I),EPTO,Z  
 \*GET,TABLES(I,4),NODE,LIST(I),EPTO,XY  
 \*GET,TABLES(I,5),NODE,LIST(I),EPTO,YZ  
 \*GET,TABLES(I,6),NODE,LIST(I),EPTO,XZ  
\*ENDDO

! list of angles  
\*DIM,TABLEA,ARRAY,totalnodes\_count,3

! xy angle  
\*DO,I,1,totalnodes\_count  
 \*AFUN,DEG  
 r = TABLES(I,4)/2  
 q = 0.5\*(TABLES(I,1)-TABLES(I,2))  
 \*IF,q,EQ,0,THEN  
 q = 0.001  
 \*ENDIF  
 angle = 0.5\*ATAN2(r,q)  
 TABLEA(I,1) = ABS(angle)  
\*ENDDO

! yz angle  
\*DO,I,1,totalnodes\_count  
 \*AFUN,DEG  
 r = TABLES(I,5)/2  
 q = 0.5\*(TABLES(I,2)-TABLES(I,3))  
 \*IF,q,EQ,0,THEN  
 q = 0.001  
 \*ENDIF  
 angle = 0.5\*ATAN2(r,q)  
 TABLEA(I,2) = ABS(angle)  
\*ENDDO

! xz angle  
\*DO,I,1,totalnodes\_count  
 \*AFUN,DEG  
 r = TABLES(I,6)/2  
 q = 0.5\*(TABLES(I,1)-TABLES(I,3))  
 \*IF,q,EQ,0,THEN  
 q = 0.001  
 \*ENDIF  
 angle = 0.5\*ATAN2(r,q)  
 TABLEA(I,3) = ABS(angle)  
\*ENDDO

! index  
\*DIM,INDEX,ARRAY,totalnodes\_count,1  
\*DO,I,1,totalnodes\_count  
 COUNT\_IND = 0  
 INDEX(I,1) = 0  
 \*IF,TABLEA(I,1),GT,2,THEN ! XY  
 INDEX(I,1) = 0.8  
 COUNT\_IND = COUNT\_IND + 1  
 \*ENDIF  
 \*IF,TABLEA(I,2),GT,2,THEN ! YZ  
 INDEX(I,1) = 0.55  
 COUNT\_IND = COUNT\_IND + 1  
 \*ENDIF  
 \*IF,TABLEA(I,3),GT,2,THEN !XZ  
 INDEX(I,1) = 0.30  
 COUNT\_IND = COUNT\_IND + 1  
 \*ENDIF  
 \*IF,COUNT\_IND,GT,2,THEN  
 INDEX(I,1) = 1  
 \*ENDIF  
\*ENDDO

! use \*VEDIT,TABLES to see table of stresses

! PLOTTING

/POST1

/contour,,10, 0,1,1 ! NCONT=10, VMIN=2, VMAX=90 (uniform spacing)  
/dscale,,off   
SET,LAST  
/GRAPHICS,FULL

\*DO,I,1,totalnodes\_count  
 DNSOL,LIST(I),U,X,INDEX(I,1)  
\*ENDDO

RAPPND,1,1

PLNSOL, U,X, 0,1

/GLINE,1,-1

/REPLOT

### **U\_Star\_Load\_Path\_Analysis- run after ajusting "\*\*\*" indicated lines,** 

  
/CLE  
\*DEL,ALL  
! Analyses input starts here  
/NOPR ! Suppress printing of UNDO process   
FINISH ! Make sure we are at BEGIN level   
/PREP7 ! Enter the preprocessor

/OUTPUT,debug,txt ! send all messages to debug.txt (optional)

file\_name = 'FILENAUM' ! Change the filename\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
NODES\_PER\_ELEMENT = 20  
DOF\_PER\_NODE = 2 ! 2 - 2D problem ; 3 - 3D problem  
!read in the file. the file should contain nodal entity setsl

CDREAD,DB,'C:\\Users\\bragg\\OneDrive\\Desktop\\Load\_Path\\RedoOfCode\\Load\_Path-main\\g23plate\_fixed',cdb ! \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
EPLOT

!-----------COOKING------------  
! SELECT BC  
NSEL,U,,,ALL  
NSEL,S,D,U,0  
CM,fixnodes,NODE  
! SELECT FORCES  
NSEL,U,,,ALL  
NSEL,S,F,F,-1000 ! SAY WHAT MAGNITUDE OF LOAD YOU ARE INPUTTING\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
CM,LOADNODES,NODE

!--------------------- GET FREENODES &amp; TOTALNODES ---------------------  
ALLSELL,ALL  
nsel,all  
nsel,u,,,fixnodes   
nsel,u,,,loadnodes   
CM,freenodes,node   
nsel,all   
cm,totalnodes,node  
!---------------------- Solve the problem ----------------------  
/SOLU ! Enter the solution  
SOLVE

!--------------------- COUNT THE NODES ---------------------  
NSEL,S,,,fixnodes  
\*GET,fixnodes\_count,NODE,0,COUNT  
NSEL,S,,,loadnodes  
\*GET,loadnodes\_count,NODE,0,COUNT  
NSEL,S,,,freenodes  
\*GET,freenodes\_count,NODE,0,COUNT  
NSEL,S,,,totalnodes   
\*GET,totalnodes\_count,NODE,0,COUNT

!--------------------- GET THE NODE NUMBERS ---------------------

NSEL,S,,,loadnodes   
\*VGET, loadnodes\_no, NODE, 0, nlist  
NSEL,S,,,fixnodes   
\*VGET, fixnodes\_no, NODE, 0, nlist  
NSEL,S,,,freenodes  
\*VGET, freenodes\_no, NODE, 0, nlist

ALLSEL  
NSEL,S,,,freenodes ! select freenodes  
\*GET,min\_node\_no,NODE,0,NUM,MIN ! Get and assign the least node number of freenodes in the varable "min\_node\_no"  
   
\*DIM,loaded\_nodes\_lc,ARRAY,2,freenodes\_count

!--------------- Apply original boundary conditions ----------------

/PREP7 ! Enter the preprocessor  
ALLSEL  
D,fixnodes,ALL,0 ! All dofs of the fix nodes to zero (Change according to the problem)  
F,loadnodes,Fy,-1000 ! Apply force (Change according to the problem)\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*

  
!---------------------- Calculate the strain Energy ----------------------  
/POST1  
SET,  
/POST26  
ENERSOL,2,SENE,,STRAINENERGY

FILE,'%file\_name%','rst','.'  
/UI,COLL,1   
NUMVAR,200   
SOLU,191,NCMIT   
STORE,MERGE   
FILLDATA,191,,,,1,1   
REALVAR,191,191

\*GET,U\_VALUE,VARI,2, REAL,1 ! Store the Strain energy value

!---------------------- Calculate the load node displacement ----------------------

\*DIM, LOADNODE\_DISP,ARRAY,DOF\_PER\_NODE,loadnodes\_count

\*IF,DOF\_PER\_NODE,EQ,2,THEN  
 \*DO, I, 1,loadnodes\_count  
 \*GET,LOADNODE\_DISP(1,I),NODE,loadnodes\_no(I),U,X  
 \*GET,LOADNODE\_DISP(2,I),NODE,loadnodes\_no(I),U,Y   
 \*ENDDO  
\*ELSEIF,DOF\_PER\_NODE,EQ,3,THEN  
 \*DO, I, 1,loadnodes\_count  
 \*GET,LOADNODE\_DISP(1,I),NODE,loadnodes\_no(I),U,X  
 \*GET,LOADNODE\_DISP(2,I),NODE,loadnodes\_no(I),U,Y  
 \*GET,LOADNODE\_DISP(3,I),NODE,loadnodes\_no(I),U,Z  
 \*ENDDO  
\*ENDIF

  
!---------------------- Do the looping ----------------------

/PREP7 ! Enter the processorer

\*DO,I,1,freenodes\_count  
 DDELE,ALL  
 FDELE,ALL  
 ALLSEL  
 !Apply Normal boundary Condition  
 D,fixnodes,ALL,0 ! All dofs of the fix nodes to zero   
 \*IF,DOF\_PER\_NODE,EQ,2,THEN  
 \*DO,J,1,loadnodes\_count   
 D,loadnodes\_no(J),UX,LOADNODE\_DISP(1,J)! assigning enforced X-Displacement at the load nodes   
 D,loadnodes\_no(J),UY,LOADNODE\_DISP(2,J)! assigning enforced Y-displacement at the load nodes   
 \*ENDDO  
 \*ELSEIF,DOF\_PER\_NODE,EQ,3,THEN  
 \*DO,J,1,loadnodes\_count   
 D,loadnodes\_no(J),UX,LOADNODE\_DISP(1,J)! assigning enforced X-Displacement at the load nodes   
 D,loadnodes\_no(J),UY,LOADNODE\_DISP(2,J)! assigning enforced Y-displacement at the load nodes   
 D,loadnodes\_no(J),UZ,LOADNODE\_DISP(3,J)! assigning enforced Z-displacement at the load nodes   
 \*ENDDO  
 \*ENDIF  
 NSEL,S,,,freenodes   
 loaded\_nodes\_lc(1,I)=min\_node\_no   
 min\_node\_no=NDNEXT(min\_node\_no) ! min\_node\_no(i)= min\_node\_no(i+1)  
 D,loaded\_nodes\_lc(1,I),ALL,ALL  
 ALLSEL  
 LSWRITE,I ! Write loadstep  
 DDELE,ALL ! delete all constrained dofs  
\*ENDDO  
DDELE,ALL

!-------------------- SOLVE ALL THE SETS -------------------------  
\*GET,TBEFORE,ACTIVE,,TIME,CPU  
/SOLU  
ALLSEL  
LSSOLVE,1,freenodes\_count  
\*GET,TAFTER,ACTIVE,,TIME,CPU  
SOLUTION\_TIME = (TAFTER-TBEFORE) ! record the computational CPU time

  
!-------------------- CALCULATE STRAIN ENERGY FOR ALL SET -----------------------

/POST26  
! output needs to be redirected to get the list of energies over all load steps  
/OUTPUT,energy\_list,txt  
ENERSOL,3,SENE,,U\_PRIME  
!PRVAR,3  
/OUTPUT ! send the output back again to usual file

  
!---------------------- ASSIGN U\* VALUES TO THE NODES ----------------------

FILE,'%file\_name%','rst','.'  
/UI,COLL,1   
NUMVAR,200   
SOLU,191,NCMIT   
STORE,MERGE   
FILLDATA,191,,,,1,1   
REALVAR,191,191

\*DO,J,1,freenodes\_count ! RECORDING U' PRIME VALUES FOR THE FREENODE  
 \*GET,loaded\_nodes\_lc(2,J),VARI,3, REAL,J  
\*ENDDO

\*DIM,U\_STAR,ARRAY,1,freenodes\_count

  
\*DO,K,1,freenodes\_count  
 U\_STAR(1,K)= 1 - (U\_VALUE/loaded\_nodes\_lc(2,K)) ! ORIGINAL RATIO  
\*ENDDO

!---------------------- PLOTTING ----------------------

/POST1  
SET,LAST  
/GRAPHICS,FULL

\*DO,I,1,freenodes\_count  
DNSOL,freenodes\_no(I),U,X,U\_STAR(1,I)  
\*ENDDO

\*DO,I,1,loadnodes\_count  
DNSOL,loadnodes\_no(I),U,X,1  
\*ENDDO

\*DO,I,1,fixnodes\_count  
DNSOL,fixnodes\_no(I),U,X,0  
\*ENDDO  
RAPPND,freenodes\_count+1,freenodes\_count+1

PLNSOL, U,X, 0,1.0

!----------------------------- DATA PROCESSING --------------------

  
ALLSEL  
\*GET,ELEM\_NO\_MIN,ELEM,0,NUM,MIN  
\*GET,ELEM\_NO\_MAX,ELEM,0,NUM,MAX  
\*GET,ELEM\_COUNT,ELEM,0,COUNT

  
ALLSEL  
\*GET,ELEM\_NO\_MIN,ELEM,0,NUM,MIN  
\*GET,ELEM\_NO\_MAX,ELEM,0,NUM,MAX  
\*GET,ELEM\_COUNT,ELEM,0,COUNT  
   
\*DIM,ELEMENT\_TABLE,ARRAY,ELEM\_COUNT,1+NODES\_PER\_ELEMENT ! 20 NODES  
\*DO,I,ELEM\_NO\_MIN,ELEM\_NO\_MAX  
 \*SET,ELEMENT\_TABLE(I,1),I  
 \*DO,J,1,NODES\_PER\_ELEMENT   
 \*SET,ELEMENT\_TABLE(I,J+1),NELEM(I,J)  
 \*ENDDO  
\*ENDDO

  
\*DIM,TABLE\_RES,ARRAY,totalnodes\_count,5  
\*IF,DOF\_PER\_NODE,EQ,2,THEN  
 \*DO,I,1,totalnodes\_count  
 \*SET,TABLE\_RES(I,1),I ! Node Number  
 \*GET,TABLE\_RES(I,2),NODE,I,LOC,X ! X- coordinate  
 \*GET,TABLE\_RES(I,3),NODE,I,LOC,Y ! Y- coordinate  
 \*SET,TABLE\_RES(I,4),0 ! Z- coordinate   
 \*ENDDO  
\*ELSEIF,DOF\_PER\_NODE,EQ,3,THEN  
 \*DO,I,1,totalnodes\_count  
 \*SET,TABLE\_RES(I,1),I ! Node Number  
 \*GET,TABLE\_RES(I,2),NODE,I,LOC,X ! X- coordinate  
 \*GET,TABLE\_RES(I,3),NODE,I,LOC,Y ! Y- coordinate  
 \*GET,TABLE\_RES(I,4),NODE,I,LOC,Z ! Z- coordinate   
 \*ENDDO  
\*ENDIF

  
\*DO,J,1,freenodes\_count  
 \*SET,TABLE\_RES(freenodes\_no(J),5),U\_STAR(1,J)  
\*ENDDO  
   
\*DO,J,1,loadnodes\_count  
 \*SET,TABLE\_RES(loadnodes\_no(J),5),1  
\*ENDDO  
   
\*DO,J,1,fixnodes\_count  
 \*SET,TABLE\_RES(fixnodes\_no(J),5),0  
\*ENDDO

  
!-------------------- EXPORTING DATA ---------------------  
\*cfopen,element\_type.txt  
! list element types  
\*GET,net,ETYP,1,NUM,COUNT  
\*DO,i,1,net  
 \*GET,ETname,ETYP,i,ATTR,ENAM  
\*VWRITE,'ET ',i,' ',ETname  
(A3, F4.0, A1, F4.0)  
\*ENDDO  
\*cfclose

\*MWRITE,ELEMENT\_TABLE,element\_table,txt  
(F10.0,F10.0,F10.0,F10.0,F10.0,F10.0,F10.0,F10.0,F10.0,F10.0,F10.0,F10.0,F10.0,F10.0,F10.0,F10.0,F10.0,F10.0,F10.0,F10.0,F10.0)

\*MWRITE,TABLE\_RES,result\_table,txt  
(F10.0,F10.6,F10.6,F10.6,F10.6)  
!6 digit precision. if you want more precision, increase'x' in F10.x

  
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

! format output for nodes, elements and stress listings  
/PAGE, 1E9,, 1E9,, ! disable headers  
/FORMAT, , ,14,5, , ! fix floating point format  
/HEADER, off, off, off, off, on, off ! disable summaries

!/POST26  
!/OUTPUT,NLIST,txt  
!NLIST,,,,COORD ! print nodes w. coordinates  
!/OUTPUT

!/OUTPUT,ELIST,txt  
!ELIST ! print element connectivity table  
!/OUTPUT

  
!/POST1  
!/OUTPUT,DISP,txt  
!PRNSOL,U ! print all displacements  
!/OUTPUT