- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hey all. In the following code, there appears to be an issue passing the variable O from the main subroutine to the various failure subroutines. Code follows:
- R
[plain] SUBROUTINE ABQMAIN C======================================================================= C OUTPUT DATA FROM SHOCK ANALYSIS ON PLATE C======================================================================= INCLUDE 'aba_param.inc' INCLUDE 'shock_out.inc' DIMENSION ARRAY(513),JRRAY(NPRECD,513),LRUNIT(2,1) EQUIVALENCE (ARRAY(1),JRRAY(1,1)) C======================================================================= C File initialization C======================================================================= WRITE(6,*) ' Enter the name of the results file (w/o .fil):' READ(5,'(A)', IOSTAT = J) FNAME WRITE(6,'(A)') FNAME WRITE(6,*) ' Composite plate (1) or NAB plate (2)' READ(5,*) MATL IF(MATL.EQ.1) THEN WRITE(6,*) 'COMPOSITE' WRITE(6,*) 'XT,XC,YT,YC,SL,ST?' READ(5,*) XT,XC,YT,YC,SL,ST PRINT *, XT,XC,YT,YC,SL,ST ELSE IF(MATL.EQ.2) THEN WRITE(6,*) 'NAB' END IF WRITE(6,*) ' Enter the necessary output coordinates: ' READ(5,*) ROOT,QTR,CTR,TIP,BCNR,TCNR WRITE(6,*) ROOT,QTR,CTR,TIP,BCNR,TCNR print *, 'Read-in successful.' NELEM = 0 NNODE = 0 NRU=1 LRUNIT(1,1)=8 LRUNIT(2,1)=2 LOUTF=0 CALL INITPF(FNAME,NRU,LRUNIT,LOUTF) JUNIT=8 CALL DBRNU(JUNIT) OHASH(:,:)=0 OCHAN(:,:)=0 OCRSO(:,:)=0 OCRSN(:,:)=0 OPUCK(:,:)=0 OKROL(:,:)=0 OLACR(:,:)=0 C======================================================================= C Initialize the output files C======================================================================= OPEN(UNIT=15,FILE='stress.plt',STATUS='UNKNOWN') WRITE(15,*) 'VARIABLES="X","Y","t","S11 (MPa)", *"S22 (MPa)","S12 (MPa)"' IF(MATL.EQ.1) THEN OPEN(UNIT=101,FILE='Hashin.plt',STATUS='UNKNOWN') WRITE(101,*) 'VARIABLES="X","Y","t","FIBER","MATRIX"' OPEN(UNIT=102,FILE='Chang.plt',STATUS='UNKNOWN') WRITE(102,*) 'VARIABLES="X","Y","t","FIBER","MATRIX"' OPEN(UNIT=103,FILE='ChristensenOld.plt',STATUS='UNKNOWN') WRITE(103,*) 'VARIABLES="X","Y","t","FIBER","MATRIX"' OPEN(UNIT=104,FILE='ChristensenNew.plt',STATUS='UNKNOWN') WRITE(104,*) 'VARIABLES="X","Y","t","FIBER","MATRIX"' OPEN(UNIT=105,FILE='Puck.plt',STATUS='UNKNOWN') WRITE(105,*) 'VARIABLES="X","Y","t","FIBER","MATRIX"' OPEN(UNIT=106,FILE='Kroll.plt',STATUS='UNKNOWN') WRITE(106,*) 'VARIABLES="X","Y","t","FIBER","MATRIX"' OPEN(UNIT=107,FILE='LaCR03.plt',STATUS='UNKNOWN') WRITE(107,*) 'VARIABLES="X","Y","t","FIBER","MATRIX"' ELSE IF(MATL.EQ.2) THEN OPEN(UNIT=101,FILE='PEEQ.plt',STATUS='UNKNOWN') WRITE(101,*) 'VARIABLES="X","Y","t","PEEQ"' END IF OPEN(UNIT=16,FILE='reactions.plt',STATUS='UNKNOWN') WRITE(16,*) 'VARIABLES="X","Y","t","RF1 (N)","RF2 (N)","RF3 (N)"' OPEN(UNIT=17,FILE='pressures.plt',STATUS='UNKNOWN') WRITE(17,*) 'VARIABLES="X","Y","Z","P(MPA)"' OPEN(UNIT=18,FILE='displacements.plt',STATUS='UNKNOWN') WRITE(18,*) 'VARIABLES="X","Y","Z"' OPEN(UNIT=112,FILE='root.plt',STATUS='UNKNOWN') WRITE(112,*) 'VARIABLES="t","P(MPa)", *"U3(m)","U(m)","V3(m/s)", *"V(m/s)","A3(m/s2)","A(m/s2)"' OPEN(UNIT=113,FILE='qtr_pt.plt',STATUS='UNKNOWN') WRITE(113,*) 'VARIABLES="t","P(MPa)", *"U3(m)","U(m)","V3(m/s)", *"V(m/s)","A3(m/s2)","A(m/s2)"' OPEN(UNIT=114,FILE='mid_pt.plt',STATUS='UNKNOWN') WRITE(114,*) 'VARIABLES="t","P(MPa)", *"U3(m)","U(m)","V3(m/s)", *"V(m/s)","A3(m/s2)","A(m/s2)"' OPEN(UNIT=115,FILE='tip.plt',STATUS='UNKNOWN') WRITE(115,*) 'VARIABLES="t","P(MPa)", *"U3(m)","U(m)","V3(m/s)", *"V(m/s)","A3(m/s2)","A(m/s2)"' OPEN(UNIT=116,FILE='twist.plt',STATUS='UNKNOWN') WRITE(116,*) 'VARIABLES="TIME","Phi"' print *, 'Outut initialization successful.' C======================================================================= C Loop on all records in results file C======================================================================= CALL DBFILE(0,ARRAY,JRCD) DO WHILE (JRCD.EQ.0) KEY = JRRAY(1,2) C======================================================================= C READ RECORDS RELATING TO THE OVERALL MODEL - PRINTED ONE TIME C======================================================================= C Read Element Definitions C======================================================================= IF(KEY.EQ.1900) THEN IF(JRRAY(1,3).GT.2000000) THEN NELEM=NELEM+1 IELEM(NELEM)=JRRAY(1,3)-2000000 IREFE(IELEM(NELEM))=NELEM END IF C======================================================================= C Read Nodal Coordinates C======================================================================= ELSE IF(KEY.EQ.1901) THEN NNODE=NNODE+1 C print *, 'Node ',NNODE IF(JRRAY(1,3).GT.2000000) THEN INODE(NNODE)=JRRAY(1,3)-2000000 IREFS(INODE(NNODE))=NNODE ELSE INODE(NNODE)=JRRAY(1,3) IREFF(INODE(NNODE))=NNODE END IF COORD(1,NNODE)=ARRAY(4) COORD(2,NNODE)=ARRAY(5) COORD(3,NNODE)=ARRAY(6) C======================================================================= C READ RECORDS FOR EACH *STEP - PRINTED AT EACH TIME INCREMENT C======================================================================= C Read the current step (NSTEP), increment number (NINC1), C total time (TTIME), and step time (STIME) C======================================================================= ELSE IF(KEY.EQ.2000) THEN C print *, 'Continuing...' NSTEP=JRRAY(1,8) NINC1=JRRAY(1,9) TTIME=ARRAY(3)*1000 STIME=ARRAY(4)*1000 PRINT *, NSTEP,NINC1,TTIME,STIME WRITE(15,*) 'ZONE T = "',TTIME,'",I=48,J=10,K=1, *DATAPACKING=POINT' IF(MATL.EQ.1) THEN WRITE(101,*) 'ZONE T = "',TTIME,'",I=48,J=10,K=1, *DATAPACKING=POINT' ELSE IF(MATL.EQ.2) THEN WRITE(101,*) 'ZONE T = "',TTIME,'",I=48,J=10,K=1, *DATAPACKING=POINT' END IF WRITE(16,*) 'ZONE T = "',TTIME,'",I=49,J=11,K=1, *DATAPACKING=POINT' WRITE(17,*) 'ZONE T = "',TTIME,'",I=49,J=49,K=2, *DATAPACKING=POINT' WRITE(18,*) 'ZONE T = "',TTIME,'",I=49,J=49,K=2, *DATAPACKING=POINT' C======================================================================= C Read the element and integration point numbers, JELNUM AND INTPT, C and LOCATE, the location of INTPT (0--at int.pt., 1--at centroid, C 2--at nodes, 4--nodal average) and the number of direct (NDI) and C shear (NSHR) components in the analysis C======================================================================= ELSE IF(KEY.EQ.1) THEN C print *, 'Reading integration points.' JELNUM=JRRAY(1,2)-2000000 INTPT=JRRAY(1,5) LOCATE=JRRAY(1,6) NDI=JRRAY(1,8) NSHR=JRRAY(1,9) C======================================================================= C Read the direct and shear stresses and write to file C======================================================================= ELSE IF(KEY.EQ.11) THEN C print *, 'Reading stresses. INTPT =',INTPT I11D=IREFS(JELNUM) DO IXX=1,NDI STR(IXX) = ARRAY(IXX+2) END DO DO IXX=NDI+1,NDI+NSHR STR(IXX) = ARRAY(IXX+2) END DO WRITE(15,'(7(1X,E14.6))')(COORD(J1+1,I11D),J1=1,2),TTIME * ,(STR(J1)/1000000,J1=1,3) C======================================================================= C Write the Hashin failure criteria C======================================================================= IF(MATL.EQ.1) THEN print *, 'Checking failure criteria.' C print *, 'Calling Hashin', OHASH(1,I11D), C 1 OHASH(2,I11D) C CALL HASHIN(STR,OHASH(:,I11D),HASH(:,I11D)) CALL CHANG(STR,OCHAN(:,I11D),CHAN(:,I11D)) C CALL CHRISTENOLD(STR,OCRSO(:,I11D),CRSO(:,I11D)) C CALL CHRISTENNEW(STR,OCRSN(:,I11D),CRSN(:,I11D)) C CALL PUCKSH(STR,OPUCK(:,I11D),PUCK(:,I11D)) C CALL KROLL(STR,OKROL(:,I11D),KROL(:,I11D)) C CALL LACR03(STR,OLACR(:,I11D),LACR(:,I11D)) C OHASH(:,I11D)=HASH(:,I11D) OCHAN(:,I11D)=CHAN(:,I11D) C OCRSO(:,I11D)=CRSO(:,I11D) C OCRSN(:,I11D)=CRSN(:,I11D) C OPUCK(:,I11D)=PUCK(:,I11D) C OKROL(:,I11D)=KROL(:,I11D) C OLACR(:,I11D)=LACR(:,I11D) WRITE(101,'(6(1X,E14.3))')(COORD(J1+1,I11D), * J1=1,2),TTIME,(HASH(J1,I11D),J1=1,2) print *, 'Hashin',(COORD(J1+1,I11D), J1=1,2),TTIME, 1 (HASH(J1,I11D),J1=1,2) END IF C======================================================================= C Read the equivalent plastic strain values and write to file C======================================================================= ELSE IF(KEY.EQ.73) THEN IF(MATL.EQ.2) THEN I73D=IREFS(JELNUM) PEEQ = ARRAY(3) WRITE(101,'(5(1X,E14.6))')(COORD(J1+1,I73D), * J1=1,2),TTIME,PEEQ END IF C======================================================================= C Read the nodal displacements and write to file C======================================================================= ELSE IF(KEY.EQ.101) THEN IN=JRRAY(1,3)-1000000 I101D=IREFS(IN) DO IXX=1,3 DIS(IXX)=ARRAY(3+IXX) END DO WRITE(18,'(3(1X,E14.6))') (COORD(J1,I101D)+10*DIS(J1), * J1=1,3) IF(JRRAY(1,3).EQ.ROOT) THEN U1R = DIS(1) U2R = DIS(2) U3R = DIS(3) UR = (DIS(1)**2+DIS(2)**2+DIS(3)**2)**0.5 ELSE IF(JRRAY(1,3).EQ.QTR) THEN U1Q = DIS(1) U2Q = DIS(2) U3Q = DIS(3) UQ = (DIS(1)**2+DIS(2)**2+DIS(3)**2)**0.5 ELSE IF(JRRAY(1,3).EQ.CTR) THEN U1C = DIS(1) U2C = DIS(2) U3C = DIS(3) UC = (DIS(1)**2+DIS(2)**2+DIS(3)**2)**0.5 ELSE IF(JRRAY(1,3).EQ.TIP) THEN U1T = DIS(1) U2T = DIS(2) U3T = DIS(3) UT = (DIS(1)**2+DIS(2)**2+DIS(3)**2)**0.5 ELSE IF(JRRAY(1,3).EQ.BCNR) THEN U3B = DIS(3) YBOT = COORD(2,I101D) ELSE IF(JRRAY(1,3).EQ.TCNR) THEN U3T = DIS(3) YTOP = COORD(2,I101D) YL = ABS(YTOP-YBOT) PHI = (ASIN((U3B-U3T)/YL))*(180/3.1415) WRITE(116,'(2(1X,E14.6))') TTIME,PHI END IF C======================================================================= C Read the nodal velocities and write to file C======================================================================== C ELSE IF(KEY.EQ.102) THEN C IN=JRRAY(1,3)-1000000 C I102D=IREFS(IN) C DO IXX=1,3 C VEL(IXX)=ARRAY(3+IXX) C END DO C IF(JRRAY(1,3).EQ.ROOT) THEN C V1R = VEH(1) C V2R = VEH(2) C V3R = VEL(3) C VR = (VEH(1)**2+VEH(2)**2+VEL(3)**2)**0.5 C ELSE IF(JRRAY(1,3).EQ.QTR) THEN C V1Q = VEH(1) C V2Q = VEH(2) C V3Q = VEL(3) C VQ = (VEH(1)**2+VEH(2)**2+VEL(3)**2)**0.5 C ELSE IF(JRRAY(1,3).EQ.CTR) THEN C V1C = VEH(1) C V2C = VEH(2) C V3C = VEL(3) C VC = (VEH(1)**2+VEH(2)**2+VEL(3)**2)**0.5 C ELSE IF(JRRAY(1,3).EQ.TIP) THEN C V1T = VEH(1) C V2T = VEH(2) C V3T = VEL(3) C VT = (VEH(1)**2+VEH(2)**2+VEL(3)**2)**0.5 C END IF C======================================================================= C Read the nodal accelerations and write to file C======================================================================= C ELSE IF(KEY.EQ.103) THEN C IN=JRRAY(1,3)-1000000 C I103D=IREFS(IN) C DO IXX=1,3 C ACC(IXX)=ARRAY(3+IXX) C END DO C IF(JRRAY(1,3).EQ.ROOT) THEN C A1R = ACH(1) C A2R = ACH(2) C A3R = ACH(3) C AR = (ACH(1)**2+ACH(2)**2+ACH(3)**2)**0.5 C ELSE IF(JRRAY(1,3).EQ.QTR) THEN C A1Q = ACH(1) C A2Q = ACH(2) C A3Q = ACH(3) C AQ = (ACH(1)**2+ACH(2)**2+ACH(3)**2)**0.5 C ELSE IF(JRRAY(1,3).EQ.CTR) THEN C A1C = ACH(1) C A2C = ACH(2) C A3C = ACH(3) C AC = (ACH(1)**2+ACH(2)**2+ACH(3)**2)**0.5 c ELSE IF(JRRAY(1,3).EQ.TIP) THEN C A1T = ACH(1) C A2T = ACH(2) C A3T = ACH(3) C AT = (ACH(1)**2+ACH(2)**2+ACH(3)**2)**0.5 C END IF C======================================================================= C Read the reaction forces at the root and write to file C======================================================================= ELSE IF(KEY.EQ.104) THEN IN=JRRAY(1,3)-1000000 I104D=IREFS(IN) DO IXX=1,6 RXN(IXX)=ARRAY(3+IXX) END DO WRITE(16,'(7(1X,E14.6))')(COORD(J1+1,I104D),J1=1,2),TTIME, * (RXN(J1),J1=1,3) C======================================================================= C Read the nodal fluid pressures at the interface and write to file C======================================================================= ELSE IF(KEY.EQ.108) THEN IN=JRRAY(1,3) I108D=IREFF(IN) PRS=ARRAY(4)/1000000 WRITE(17,'(5(1X,E14.6))') (COORD(J1,I108D),J1=1,3), * (PRS) IF((JRRAY(1,3)+1000000).EQ.ROOT) THEN PR = PRS WRITE(112,'(8(1X,E14.6))')TTIME,PR,U3R,UR,V3R,VR,A3R,AR ELSE IF(JRRAY(1,3)+1000000.EQ.QTR) THEN PQ = PRS WRITE(113,'(8(1X,E14.6))')TTIME,PQ,U3Q,UQ,V3Q,VQ,A3Q,AQ ELSE IF(JRRAY(1,3)+1000000.EQ.CTR) THEN PC = PRS WRITE(114,'(8(1X,E14.6))')TTIME,PC,U3C,UC,V3C,VC,A3C,AC ELSE IF(JRRAY(1,3)+1000000.EQ.TIP) THEN PT = PRS WRITE(115,'(8(1X,E14.6))')TTIME,PT,U3T,UT,V3T,VT,A3T,AT END IF END IF C======================================================================= C Loop back to the next data set C======================================================================= CALL DBFILE(0,ARRAY,JRCD) C print *,'Next time step.' END DO C======================================================================= C Close the output files C======================================================================= CLOSE(15) CLOSE(16) CLOSE(17) CLOSE(18) CLOSE(101) CLOSE(102) CLOSE(103) CLOSE(104) CLOSE(105) CLOSE(106) C======================================================================= C Finish C======================================================================= STOP END C======================================================================= C ADDITIONAL SUBROUTINES C======================================================================= C SUBROUTINE HASHIN(S,O,H) C C======================================================================= C Subroutine for calculating the Hashin failure criteria C C Fiber direction = 1 ; Transverse direction = 2 C C XT - Longitudinal tensile strength C XC - Longitudinal compressive strength C YT - Transverse tensile strength C YC - Transverse compressive strength C SL - Longitudinal shear strength C ST - Transverse shear strength C C H(1) = Tensile(+1)/Compressive(-1) Fiber Failure C H(2) = Tensile(+1)/Compressive(-1) Matrix Failure C======================================================================= INCLUDE 'aba_param.inc' INCLUDE 'shock_out.inc' C..Initialize the Hashin vector print *, 'Checking Hashin Criteria' C..Define the stresses S11 = S(1) S22 = S(2) S12 = S(3) C..Fiber tensile failure IF(S11.GE.0) THEN print *, 'Fibre tensile failure' IF(O(1).EQ.1.0) THEN print *, '1' H(1)=1.0 print *, '2' ELSE print *, '3' H(1)=((S11/XT)**2)+((S12/SL)**2) print *, '4' IF(H(1).GE.1.0) THEN print *, '5' H(1)=1.0 print *, '6' END IF print *, '7' END IF C..Fiber compressive failure ELSE print *, 'Fibre compressive failure' IF(O(1).EQ.-1.0) THEN H(1)=-1.0 ELSE H(1)=(S11/XC)**2 IF(H(1).LE.-1.0) THEN H(1)=-1.0 END IF END IF END IF C..Matrix tensile failure IF(S22.GE.0) THEN print *, 'Matrix tensile failure' IF(O(2).EQ.1.0) THEN H(2)=1.0 ELSE H(2)=((S22/YT)**2)+((S12/SL)**2) IF(H(2).GE.1.0) THEN H(2)=1.0 END IF END IF C..Matrix compressive failure ELSE print *, 'Matrix compressive failure' IF(O(2).EQ.-1.0) THEN H(2)=-1.0 ELSE H(2)=((S22/(2*ST))**2)+((((YC/(2*ST))**2)-1)*(S22/YC))+ * ((S12/SL)**2) IF(H(2).LE.-1.0) THEN H(2)=-1.0 END IF END IF END IF print *, 'Hashin: Next criteria' C RETURN END C======================================================================= C SUBROUTINE CHANG(S,O,H) C C======================================================================= C Subroutine for calculating the Chang failure criteria C C Fiber direction = 1 ; Transverse direction = 2 C C XT - Longitudinal tensile strength C XC - Longitudinal compressive strength C YT - Transverse tensile strength C YC - Transverse compressive strength C SL - Longitudinal shear strength C ST - Transverse shear strength C C Note: H is used because C would lead to a comment. C H(1) = Tensile(+1)/Compressive(-1) Fiber Failure C H(2) = Tensile(+1)/Compressive(-1) Matrix Failure C H(3) = Delamination C C A - Alpha: Linearity constant. C======================================================================= INCLUDE 'aba_param.inc' INCLUDE 'shock_out.inc' C..Initialize the Chang vector C..Define the stresses S11 = S(1) S22 = S(2) S12 = S(3) C..Fiber tensile failure IF(S11.GE.0) THEN IF(O(1).EQ.1.0) THEN H(1)=1.0 ELSE H(1)=((S11/XT)**2)+(((S12**2/G12)+(.75*A*S12**4))/ * ((ST**2/G12)+(.75*A*ST))) IF(H(1).GE.1.0) THEN H(1)=1.0 END IF END IF C..Fiber compressive failure ELSE IF(O(1).EQ.-1.0) THEN H(1)=-1.0 ELSE H(1)=((S11/XC)**2)+(((S12**2/G12)+(.75*A*S12**4))/ * ((ST**2/G12)+(.75*A*ST))) IF(H(1).LE.-1.0) THEN H(1)=-1.0 END IF END IF END IF C..Matrix tensile failure IF(S22.GE.0) THEN IF(O(2).EQ.1.0) THEN S(2)=1.0 ELSE H(2)=((S22/YT)**2)+(((S12**2/G12)+(.75*A*S12**4))/ * ((ST**2/G12)+(.75*A*ST))) IF(H(2).GE.1.0) THEN H(2)=1.0 END IF END IF C..Matrix compressive failure ELSE IF(O(2).EQ.-1.0) THEN H(2)=-1.0 ELSE H(2)=((S22/YT)**2)+(((S12**2/G12)+(.75*A*S12**4))/ * ((ST**2/G12)+(.75*A*ST))) IF(H(2).LE.-1.0) THEN H(2)=-1.0 END IF END IF END IF C RETURN END C======================================================================= C SUBROUTINE CHRISTENOLD(S,O,H) C C======================================================================= C Subroutine for calculating the Christensen '87 failure criteria C C Fiber direction = 1 ; Transverse direction = 2 C C XT - Longitudinal tensile strength C XC - Longitudinal compressive strength C YT - Transverse tensile strength C YC - Transverse compressive strength C SL - Longitudinal shear strength C ST - Transverse shear strength C C Note: H is used because C would lead to a comment. C H(1) = Tensile(+1)/Compressive(-1) Fiber Failure C H(2) = Tensile(+1)/Compressive(-1) Matrix Failure C H(3) = Delamination C======================================================================= INCLUDE 'aba_param.inc' INCLUDE 'shock_out.inc' C..Initialize the Chang vector C..Define the stresses S11 = S(1) S22 = S(2) S12 = S(3) C..Fiber tensile failure IF(S11.GE.0) THEN IF(O(1).EQ.1.0) THEN H(1)=1.0 ELSE H(1)=((S22/XT)**2)+((S12/SL)**2) IF(H(1).GE.1.0) THEN H(1)=1.0 END IF END IF C..Fiber compressive failure ELSE IF(O(1).EQ.-1.0) THEN H(1)=-1.0 ELSE H(1)=((S22/XC)**2)+((S12/SL)**2) IF(H(1).LE.-1.0) THEN H(1)=-1.0 END IF END IF END IF C..Matrix tensile failure IF(S22.GE.0) THEN IF(O(2).EQ.1.0) THEN H(2)=1.0 ELSE H(2)=((S22/YT)**2)+((S12/SL)**2) IF(H(2).GE.1.0) THEN H(2)=1.0 END IF END IF C..Matrix compressive failure ELSE IF(O(2).EQ.-1.0) THEN H(2)=-1.0 ELSE H(2)=((S22/(2*ST))**2)+((((YC/(2*ST))**2)-1)*(S22/YC))+ * ((S12/SL)**2) IF(H(2).LE.-1.0) THEN H(2)=-1.0 END IF END IF END IF C RETURN END C======================================================================= C SUBROUTINE CHRISTENNEW(S,O,H) C C======================================================================= C Subroutine for calculating the Chang failure criteria C C Fiber direction = 1 ; Transverse direction = 2 C C XT - Longitudinal tensile strength C XC - Longitudinal compressive strength C YT - Transverse tensile strength C YC - Transverse compressive strength C SL - Longitudinal shear strength C ST - Transverse shear strength C C Note: H is used because C would lead to a comment. C H(1) = Tensile(+1)/Compressive(-1) Fiber Failure C H(2) = Tensile(+1)/Compressive(-1) Matrix Failure C H(3) = Delamination C======================================================================= INCLUDE 'aba_param.inc' INCLUDE 'shock_out.inc' C..Initialize the Christensen New vector C..Define the stresses S11 = S(1) S22 = S(2) S12 = S(3) C..Fiber tensile failure IF(S11.GE.0) THEN IF(O(1).EQ.1.0) THEN H(1)=1.0 ELSE H(1)=((S22/XT)**2)+((S12/SL)**2) IF(H(1).GE.1.0) THEN H(1)=1.0 END IF END IF C..Fiber compressive failure ELSE IF(O(1).EQ.-1.0) THEN H(1)=-1.0 ELSE H(1)=((S22/XC)**2)+((S12/SL)**2) IF(H(1).LE.-1.0) THEN H(1)=-1.0 END IF END IF END IF C..Matrix tensile failure IF(S22.GE.0) THEN IF(O(2).EQ.1.0) THEN H(2)=1.0 ELSE H(2)=((S22/YT)**2)+((S12/SL)**2) IF(H(2).GE.1.0) THEN H(2)=1.0 END IF END IF C..Matrix compressive failure ELSE IF(O(2).EQ.-1.0) THEN H(2)=-1.0 ELSE H(2)=((S22/(2*ST))**2)+((((YC/(2*ST))**2)-1)*(S22/YC))+ * ((S12/SL)**2) IF(H(2).LE.-1.0) THEN H(2)=-1.0 END IF END IF END IF C RETURN END C======================================================================= C SUBROUTINE PUCKSH(S,O,H) C C======================================================================= C Subroutine for calculating the Puck-Shurmann failure criteria C C Fiber direction = 1 ; Transverse direction = 2 C C XT - Longitudinal tensile strength C XC - Longitudinal compressive strength C YT - Transverse tensile strength C YC - Transverse compressive strength C SL - Longitudinal shear strength C ST - Transverse shear strength C C H(1) = Tensile(+1)/Compressive(-1) Fiber Failure C H(2) = Tensile(+1)/Compressive(-1) Matrix Failure C H(3) = Delamination C======================================================================= INCLUDE 'aba_param.inc' INCLUDE 'shock_out.inc' C..Initialize the Puck vector C..Define the stresses S11 = S(1) S22 = S(2) S12 = S(3) C..Fiber tensile failure IF(S11.GE.0) THEN IF(O(1).EQ.1.0) THEN H(1)=1.0 ELSE H(1)=((S22/XT)**2)+((S12/SL)**2) IF(H(1).GE.1.0) THEN H(1)=1.0 END IF END IF C..Fiber compressive failure ELSE IF(O(1).EQ.-1.0) THEN H(1)=-1.0 ELSE H(1)=((S22/XC)**2)+((S12/SL)**2) IF(H(1).LE.-1.0) THEN H(1)=-1.0 END IF END IF END IF C..Matrix tensile failure IF(S22.GE.0) THEN IF(O(2).EQ.1.0) THEN H(2)=1.0 ELSE H(2)=((S22/YT)**2)+((S12/SL)**2) IF(H(2).GE.1.0) THEN H(2)=1.0 END IF END IF C..Matrix compressive failure ELSE IF(O(2).EQ.-1.0) THEN H(2)=-1.0 ELSE H(2)=((S22/(2*ST))**2)+((((YC/(2*ST))**2)-1)*(S22/YC))+ * ((S12/SL)**2) IF(H(2).LE.-1.0) THEN H(2)=-1.0 END IF END IF END IF RETURN END C======================================================================= C SUBROUTINE KROLL(S,O,H) C C======================================================================= C Subroutine for calculating the Kroll failure criteria C C Fiber direction = 1 ; Transverse direction = 2 C C XT - Longitudinal tensile strength C XC - Longitudinal compressive strength C YT - Transverse tensile strength C YC - Transverse compressive strength C SL - Longitudinal shear strength C ST - Transverse shear strength C C H(1) = Tensile(+1)/Compressive(-1) Fiber Failure C H(2) = Tensile(+1)/Compressive(-1) Matrix Failure C H(3) = Delamination C======================================================================= INCLUDE 'aba_param.inc' INCLUDE 'shock_out.inc' C..Initialize the Chang vector C..Define the stresses S11 = S(1) S22 = S(2) S12 = S(3) C..Fiber tensile failure IF(S11.GE.0) THEN IF(O(1).EQ.1.0) THEN H(1)=1.0 ELSE H(1)=((S22/XT)**2)+((S12/SL)**2) IF(H(1).GE.1.0) THEN H(1)=1.0 END IF END IF C..Fiber compressive failure ELSE IF(O(1).EQ.-1.0) THEN H(1)=-1.0 ELSE H(1)=((S22/XC)**2)+((S12/SL)**2) IF(H(1).LE.-1.0) THEN H(1)=-1.0 END IF END IF END IF C..Matrix tensile failure IF(S22.GE.0) THEN IF(O(2).EQ.1.0) THEN H(2)=1.0 ELSE H(2)=((S22/YT)**2)+((S12/SL)**2) IF(H(2).GE.1.0) THEN H(2)=1.0 END IF END IF C..Matrix compressive failure ELSE IF(O(2).EQ.-1.0) THEN H(2)=-1.0 ELSE H(2)=((S22/(2*ST))**2)+((((YC/(2*ST))**2)-1)*(S22/YC))+ * ((S12/SL)**2) IF(H(2).LE.-1.0) THEN H(2)=-1.0 END IF END IF END IF RETURN END C======================================================================= C SUBROUTINE LACR03(S,O,H) C C======================================================================= C Subroutine for calculating the Chang failure criteria C C Fiber direction = 1 ; Transverse direction = 2 C C XT - Longitudinal tensile strength C XC - Longitudinal compressive strength C YT - Transverse tensile strength C YC - Transverse compressive strength C SL - Longitudinal shear strength C ST - Transverse shear strength C C EPxx - Strain in the xx dirrection C EPxT/L - Transverse or longitudinal strain along the x direction. C C M - Mixture constant (percent fibre) C A - Alpha - Fracture Plane Angle (Assume 52 deg, bu 40, 45, 0 ok) C A0 - Max Fracture Plane Angle (For Carbon Fibre: 53 deg) C C H(1) = Tensile(+1)/Compressive(-2)/Kinking(-1) Fiber Failure C H(2) = Tensile(+1)/Compressive(-1) Matrix Failure C LK = Kinking failure test. C======================================================================= INCLUDE 'aba_param.inc' INCLUDE 'shock_out.inc' C..Initialize the LaCR03 vector C..Define the stresses S11 = S(1) S22 = S(2) S12 = S(3) C..Specify Constants: A=3.1415926*52/180 A0=3.1316926*53/180 M=0.6 C..Fiber tensile failure IF(S11.GE.0) THEN IF(O(1).EQ.1.0) THEN H(1)=1.0 ELSE C H(1)=(EP11/EP1T) IF(H(1).GE.1.0) THEN H(1)=1.0 END IF END IF C..Fiber compressive failure ELSE IF(O(1).EQ.-1.0) THEN H(1)=-1.0 ELSE LK=.5*(((ABS(S12)+(SL*COS(2*A0))*S22)/SL)+ABS((ABS(S12)+ * (SL*COS(2*A0))*S22)/SL)) IF(LK.LE.-1.0) THEN H(1)=-1.0 END IF H(1)=(1-M)*(S22/YT)+M*(S22/YT)**2+(S12/SL)**2 IF(H(1).LE.-1.0) THEN H(1)=-2.0 END IF END IF END IF C..Matrix tensile failure IF(S22.GE.0) THEN IF(O(2).EQ.1.0) THEN H(2)=1.0 ELSE H(2)=(1-M)*(S22/YT)+M*(S22/YT)**2+(S12/SL)**2 IF(H(2).GE.1.0) THEN H(2)=1.0 END IF END IF C..Matrix compressive failure ELSE IF(O(2).EQ.-1.0) THEN H(2)=-1.0 ELSE H(2)=(.5*(-S22*SIN(A)*COS(A)+ABS(-S22*SIN(A)*COS(A)))/ST)** * 2+(.5*(-S12*COS(A)+ABS(-S12*COS(A)))/SL)**2 IF(H(2).LE.-1.0) THEN H(2)=-1.0 END IF END IF END IF C RETURN END [/plain]And then the include is:
[plain]C=================================================================== C NNMAX=max. node number in the model C NNTOT=max. no. of nodes in the model C C NEMAX=max. element number in the model C NETOT=max. no. of elments in the model C NNELEMAX=max. no. nodes per element C C MSECPT=max. no. of section points per element C C NMODEMAX=max. no. of output modes C C NCOMPMAX=max. no. of composite sections in the model C NLAYERMAX=max. no. of layer in each composite section C C NTMAX=max. no. of time steps C NHARMAX=max. no. of harmonics C C NSETMAX=max. no. of output requests per step C=================================================================== PARAMETER(NNMAX=2000000,NEMAX=2000000) PARAMETER(NNTOT=2000000,NETOT=2000000, NNELEMAX=8) PARAMETER(MSECPT=16) PARAMETER(NCOMPMAX=10,NLAYERMAX=2) PARAMETER(NTMAX=251,NHARMAX=30) PARAMETER(NMODEMAX=NTMAX*5,NSDVMAX=10) PARAMETER(NSETMAX=300) CHARACTER*80 FNAME, DUM COMMON/IALLELE/ NELEM,IREFE(NEMAX),IELEM(NETOT), 1 NDI,NSHR,NTYPE,INTPT,JELNUM,LOCATE COMMON/IALLNODE/ NNODE,IREFF(NNMAX),IREFS(NNMAX),INODE(NNTOT) COMMON/RALLNODE/ COORD(3,NNTOT) COMMON/IALLMODEL/NSTEP,NINC1,ISTEP COMMON/IPASS2/ NNDSET,NODEMAX,IELMAX,IN, 1 INODENUM,I101D,I102D,I103D,I104D,I108D COMMON/RALLMODEL/TTIME,STIME,TSET COMMON/RMAT/ XT,XC,YT,YC,SL,ST,MATL,IFAIL COMMON/RPTS/ ROOT,QTR,CTR,TIP,BCNR,TCNR DIMENSION S(3),H(2) DATA ZERO,ONE,TWO,HALF,PI,HALFPI,TWOPI,HUNTPI,RAD/0.0,1.0,2.0, 1 0.5,3.1415927,1.5707963,6.2831853,15.9154943,1.7453293E-02/ COMMON/DYN1/ ACC(3),VEL(3),DIS(3),RXN(6) COMMON/FAIL/ HASH(2,NNMAX),OHASH(2,NNMAX), 1 CHAN(2,NNMAX),OCHAN(2,NNMAX), 2 CRSO(2,NNMAX),OCRSO(2,NNMAX), 3 CRSN(2,NNMAX),OCRSN(2,NNMAX), 4 PUCK(2,NNMAX),OPUCK(2,NNMAX), 5 KROL(2,NNMAX),OKROL(2,NNMAX), 6 LACR(2,NNMAX),OLACR(2,NNMAX), 7 FAIL(2,NNMAX), 8 PF(NNMAX),PB(NNMAX), 9 DCTR(NNMAX),VCTR(NNMAX),STR(6),LE(3) COMMON/RALLMODEL2/PRS,PEEQ,QTR1,CTR1 1 U1R,U2R,U3R,UR,U1Q,U2Q,U3Q,UQ, 2 U1C,U2C,U3C,UC,U1T,U2T,U3T,UT, 3 V1R,V2R,V3R,VR,V1Q,V2Q,V3Q,VQ, 4 V1C,V2C,V3C,VC,V1T,V2T,V3T,VT, 5 A1R,A2R,A3R,AR,A1Q,A2Q,A3Q,AQ, 6 A1C,A2C,A3C,AC,A1T,A2T,A3T,AT, 7 PR,PQ,PC,PT,PHI [/plain]Thanks in advance.
- R
Link Copied
2 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Well ... first, there are two include files in the original source, so there's not enough here to compile.
It also would make it much easier on us if you could point out which are the "failure" routines, and maybe give a clue as to exactly what doesn't work.
Sometimes I can polish up my crystal ball, but it seems to be in need of an oil change or something ...
thanks -
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Is this routineto be used withthe ABAQUS software?
All variables use default types which I would avoid in newly written code where possible. The trend these days is to ensure that arguments match up by type and the default compiler settings expect this to be the case. The arguments have not been dimensioned in the subroutines. You might get this to work by turning off argument checking in compiler diagnostics.
Does the same problem occur witheach failure criteria as only one is activated (uncommented)?
All variables use default types which I would avoid in newly written code where possible. The trend these days is to ensure that arguments match up by type and the default compiler settings expect this to be the case. The arguments have not been dimensioned in the subroutines. You might get this to work by turning off argument checking in compiler diagnostics.
Does the same problem occur witheach failure criteria as only one is activated (uncommented)?

Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page