c DAMAGE INITIATION AND EVOLUTION IN FIBER AND MATRIX SUBROUTINE USDFLD(FIELD,STATEV,PNEWDT,DIRECT,T,CELENT, 1 TIME,DTIME,CMNAME,ORNAME,NFIELD,NSTATV,NOEL,NPT,LAYER, 2 KSPT,KSTEP,KINC,NDI,NSHR,COORD,JMAC,JMATYP,MATLAYO, 3 LACCFLA) C INCLUDE 'ABA_PARAM.INC' INCLUDE 'ABA_TCS_PARAM.INC' C PARAMETER (MAXPARAMS=10,ZERO=0.0,ONE=1.D0) PARAMETER (SMALL=1E-8) CHARACTER*80 CMNAME,ORNAME CHARACTER*3 FLGRAY(15) DIMENSION FIELD(NFIELD),STATEV(NSTATV),DIRECT(3,3), 1 T(3,3),TIME(2) DIMENSION ARRAY(15),JARRAY(15),JMAC(*),JMATYP(*), 1 COORD(*) CHARACTER*80 PARAMETERTABLELABEL, CPARAMS(MAXPARAMS) DIMENSION IPARAMSDATATYPE(MAXPARAMS),IPARAMS(MAXPARAMS),RPARAMS(MAXPARAMS) SCALE=ONE IF(CMNAME(1:5).EQ.'FIBER')THEN NUMPARAMS = 0 JERROR = 0 XTF = ZERO XCF = ZERO SLF = ZERO ALPHA = ZERO GFT = ZERO GFC = ZERO ETAF= ZERO SDEGMAX = ONE PARAMETERTABLELABEL = "fiberdam_params" CALL GETPARAMETERTABLE(PARAMETERTABLELABEL,NUMPARAMS, 1 IPARAMSDATATYPE,IPARAMS,RPARAMS,CPARAMS,JERROR) IF(JERROR.EQ.0.AND.NUMPARAMS.EQ.8)THEN XTF = RPARAMS(1) XCF = RPARAMS(2) SLF = RPARAMS(3) ALPHA = RPARAMS(4) GFT = RPARAMS(5) GFC = RPARAMS(6) ETAF = RPARAMS(7) SDEGMAX = RPARAMS(8) END IF DAMAGET_OLD = STATEV(1) DAMAGEC_OLD = STATEV(2) DAMAGETV_OLD = STATEV(3) DAMAGECV_OLD = STATEV(4) CALL GETVRM('S',ARRAY,JARRAY,FLGRAY,JRCD,JMAC,JMATYP, * MATLAYO,LACCFLA) C C CHECK THE INITIATION CONDITION FOR FIBER C S11=ARRAY(1) S12=ARRAY(4) CALL GETVRM('EE',ARRAY,JARRAY,FLGRAY,JRCD,JMAC,JMATYP, * MATLAYO,LACCFLA) E11=ARRAY(1) E12=ARRAY(4) C C FIBER TENSION CRITERION C FACTOR = ZERO IF(S11.GE.0.D0)THEN DAMAGE = DAMAGET_OLD DAMAGEV = DAMAGETV_OLD IF(DAMAGETV_OLD.EQ.ONE)THEN SCALE=ONE/SDEGMAX ELSE SCALE=ONE/(ONE-DAMAGETV_OLD) END IF S11=S11*SCALE S12=S12*SCALE EF = S11*S11/XTF/XTF+S12*S12/SLF/SLF*ALPHA FACTOR=SQRT(EF) IF(E11.LT.ZERO)E11=ZERO DELTA_EQ = CELENT*SQRT(E11*E11+ALPHA*E12*E12) IF(FACTOR.GE.ONE.AND.DELTA_EQ.GT.ZERO)THEN SIGMA_EQ = (S11*E11+ALPHA*S12*E12)*CELENT/DELTA_EQ CALL GETDAMAGEVAR(DELTA_EQ,SIGMA_EQ,FACTOR,GFT, * DAMAGE) STATEV(1)=DAMAGE *APPLY DAMAGE STABILIZATION DAMAGEV = (ETAF*DAMAGETV_OLD+DTIME*DAMAGE)/(DTIME+ETAF) DAMAGEV = MIN(DAMAGEV,ONE) STATEV(3) = DAMAGEV FIELD(1) = STATEV(3) END IF ELSE C C FIBER COMPRESSION CRITERION C DAMAGE = DAMAGEC_OLD DAMAGEV = DAMAGECV_OLD IF(DAMAGECV_OLD.EQ.ONE)THEN SCALE=ONE/SDEGMAX ELSE SCALE=ONE/(ONE-DAMAGECV_OLD) END IF S11=S11*SCALE S12=S12*SCALE EF=S11*S11/XCF/XCF FACTOR=SQRT(EF) IF(E11.GE.ZERO)E11=ZERO DELTA_EQ = -CELENT*E11 IF(FACTOR.GE.ONE.AND.DELTA_EQ.GT.ZERO)THEN SIGMA_EQ = (S11*E11)*CELENT/DELTA_EQ CALL GETDAMAGEVAR(DELTA_EQ,SIGMA_EQ,FACTOR,GFC, * DAMAGE) STATEV(2)=DAMAGE *APPLY DAMAGE STABILIZATION DAMAGEV = (ETAF*DAMAGECV_OLD+DTIME*DAMAGE)/(DTIME+ETAF) DAMAGEV = MIN(DAMAGEV,ONE) STATEV(4)=DAMAGEV FIELD(1) = STATEV(4) END IF END IF ELSE IF(CMNAME(1:5).EQ.'EPOXY')THEN NUMPARAMS = 0 JERROR = 0 PARAMETERTABLELABEL = "matrixdam_params" CALL GETPARAMETERTABLE(PARAMETERTABLELABEL,NUMPARAMS, 1 IPARAMSDATATYPE,IPARAMS,RPARAMS,CPARAMS,JERROR) YTM=ZERO YCM=ZERO ZTM=ZERO ZCM=ZERO SL=ZERO ST=ZERO ETAM=ZERO XK3M=ZERO XK4M=ZERO XK2MT=ZERO XK2MC=ZERO GFT = ZERO GFC = ZERO SDEGMAX=ZERO IF(JERROR.EQ.0.AND.NUMPARAMS.EQ.10)THEN YTM = RPARAMS(1) YCM = RPARAMS(2) ZTM = RPARAMS(3) ZCM = RPARAMS(4) SL = RPARAMS(5) ST = RPARAMS(6) GFT = RPARAMS(7) GFC = RPARAMS(8) ETAM = RPARAMS(9) SDEGMAX=RPARAMS(10) END IF IF(ST.NE.ZERO)XK3M=1/2.0/ST/ST IF(SL.NE.ZERO)XK4M=1/SL/SL IF(YTM.NE.ZERO.AND.ZTM.NE.0)XK2MT=1/(YTM+ZTM)/(YTM+ZTM)*(1-XK3M*(YTM*YTM+ZTM*ZTM)) IF(YCM.NE.ZERO.AND.ZCM.NE.0)XK2MC=1/(YCM+ZCM)/(YCM+ZCM)*(1-XK3M*(YCM*YCM+ZCM*ZCM)) DAMAGET_OLD = STATEV(1) DAMAGEC_OLD = STATEV(2) DAMAGETV_OLD = STATEV(3) DAMAGECV_OLD = STATEV(4) CALL GETVRM('S',ARRAY,JARRAY,FLGRAY,JRCD,JMAC,JMATYP, * MATLAYO,LACCFLA) S11=ARRAY(1) S22=ARRAY(2) S33=ARRAY(3) S12=ARRAY(4) S13=0.0 S23=0.0 IF(NSHR.EQ.3)THEN S13=ARRAY(5) S23=ARRAY(6) END IF CALL GETVRM('EE',ARRAY,JARRAY,FLGRAY,JRCD,JMAC,JMATYP, * MATLAYO,LACCFLA) E11=ARRAY(1) E22=ARRAY(2) E33=ARRAY(3) E12=ARRAY(4) C C MATRIX TENSION CRITERION C IF(S22+S33.GE.-SMALL)THEN DAMAGE = DAMAGET_OLD DAMAGEV = DAMAGETV_OLD IF(DAMAGETV_OLD.EQ.ONE)THEN SCALE=ONE/SDEGMAX ELSE SCALE=ONE/(ONE-DAMAGETV_OLD) END IF S22=S22*SCALE S33=S33*SCALE S12=S12*SCALE S13=S13*SCALE S23=S23*SCALE C STRESS INVARIANTS FOR TRANSVERSELY ISOTROPIC ELASTICITY XI2=S22+S33 XI3=S22*S22+S33*S33+2*S23*S23 XI4=S12*S12+S13*S13 EF=XK2MT*XI2*XI2+XK3M*XI3+XK4M*XI4 FACTOR=SQRT(EF) IF(E22.LT.ZERO)E22=ZERO IF(E33.LT.ZERO)E33=ZERO DELTA_EQ = CELENT*SQRT(E22*E22+E33*E33+E12*E12+E13*E13) IF(FACTOR.GE.ONE.AND.DELTA_EQ.GT.ZERO)THEN SIGMA_EQ = (S22*E22+S33*E33+S12*E12+S13*E13)*CELENT/DELTA_EQ CALL GETDAMAGEVAR(DELTA_EQ,SIGMA_EQ,FACTOR,GFT, * DAMAGE) *APPLY DAMAGE STABILIZATION DAMAGEV = (ETAM*DAMAGETV_OLD+DTIME*DAMAGE)/(DTIME+ETAM) DAMAGEV = MIN(DAMAGEV,ONE) STATEV(1)=DAMAGE STATEV(3)=DAMAGEV FIELD(1) = STATEV(3) END IF C C MATRIX COMPRESSION CRITERION C ELSE DAMAGE = DAMAGEC_OLD DAMAGEV = DAMAGECV_OLD IF(DAMAGECV_OLD.EQ.ONE)THEN SCALE=ONE/SDEGMAX ELSE SCALE=ONE/(ONE-DAMAGECV_OLD) END IF S22=S22*SCALE S33=S33*SCALE S12=S12*SCALE S13=S13*SCALE S23=S23*SCALE C STRESS INVARIANTS FOR TRANSVERSELY ISOTROPIC ELASTICITY XI2=S22+S33 XI3=S22*S22+S33*S33+2*S23*S23 XI4=S12*S12+S13*S13 EF=XK2MC*XI2*XI2+XK3M*XI3+XK4M*XI4 FACTOR=SQRT(EF) IF(E22.GT.ZERO)E22=ZERO IF(E33.GT.ZERO)E33=ZERO DELTA_EQ = CELENT*SQRT(E22*E22+E33*E33+E12*E12+E13*E13) IF(FACTOR.GE.ONE.AND.DELTA_EQ.GT.ZERO)THEN SIGMA_EQ = (S22*E22+S33*E33+S12*E12+S13*E13)*CELENT/DELTA_EQ CALL GETDAMAGEVAR(DELTA_EQ,SIGMA_EQ,FACTOR,GFC, * DAMAGE) *APPLY DAMAGE STABILIZATION DAMAGEV = (ETAM*DAMAGECV_OLD+DTIME*DAMAGE)/(DTIME+ETAM) DAMAGEV = MIN(DAMAGEV,ONE) STATEV(2)=DAMAGE STATEV(4)=DAMAGEV FIELD(1) = STATEV(4) END IF END IF END IF RETURN END C SUBROUTINE GETDAMAGEVAR(DELTA_EQ,SIGMA_EQ,FACTOR,GF, * DAMAGE) INCLUDE 'ABA_PARAM.INC' PARAMETER (MAXPARAMS=10,ZERO=0.0,ONE=1.D0,TWO=2.D0) PARAMETER (DELTAFINALCOEFF=0.5) DELTA0_EQ = DELTA_EQ/FACTOR SIGMA0_EQ = SIGMA_EQ/FACTOR DELTA_FINAL = TWO*GF/SIGMA0_EQ IF(DELTA_FINAL.LT.DELTA0_EQ)THEN DELTA_FINAL=DELTA0_EQ+DELTAFINALCOEFF*TWO*GF/SIGMA0_EQ END IF DAMAGEVAR = DELTA_FINAL*(DELTA_EQ-DELTA0_EQ)/DELTA_EQ/(DELTA_FINAL-DELTA0_EQ) IF(DAMAGEVAR.GT.DAMAGE)THEN DAMAGE = MIN(DAMAGEVAR,ONE) END IF RETURN END