SUBROUTINE FRIC(LM,TAU,DDTDDG,DDTDDP,DSLIP,SED,SFD, 1 DDTDDT,PNEWDT,STATEV,DGAM,TAULM,PRESS,DPRESS,DDPDDH, 2 SLIP,KSTEP,KINC,TIME,DTIME,NOEL,CINAME,SLNAME, 3 MSNAME,NPT,NODE,NPATCH,COORDS,RCOORD,DROT,TEMP, 4 PREDEF,NFDIR,MCRD,NPRED,NSTATV,CHRLNGTH,PROPS,NPROPS) C INCLUDE 'ABA_PARAM.INC' C CHARACTER*80 CINAME,SLNAME,MSNAME DIMENSION TAU(NFDIR),DDTDDG(NFDIR,NFDIR),DDTDDP(NFDIR), 1 DSLIP(NFDIR),DDTDDT(NFDIR,2),STATEV(*), 2 DGAM(NFDIR),TAULM(NFDIR),SLIP(NFDIR), 3 COORDS(MCRD),RCOORD(MCRD),DROT(2,2),TEMP(2), 4 PREDEF(2,*),TIME(2),PROPS(NPROPS) C PARAMETER(ZERO=0.0D0,PRECIS=1.D-14,XKS=1.D6,RAUMTEMP = 20) REAL WERTE DATA WERTE/105, 110, 115, 120, 125, 130, 135, 140, 145, 150, 0.65, 0.6, 0.55, 0.5, 0.45, 0.4, &0.35, 0.3, 0.25, 0.2/ DIMENSION WERTE(2, 10) C C IMPLEMENTATION OF COULOMB C FRICTION USING PENALTY METHOD C C VARIABLES USED: C XMU = COEFFICIENT OF FRICTION C GCRIT = CRITICAL ELASTIC SLIP C STIFF = ARTIFICIAL STIFFNESS C GAMMA = TOTAL SLIP C STATEV(1) = ELASTIC SLIP C TAUCRIT = CRITICAL FRICTIONAL STRESS C C C C IF (LM .EQ. 2) THEN C C GAP IS OPENED AT START C OF THE CURRENT INCREMENT C IF (XMU .LE. PRECIS) RETURN END IF C LM = 0 C C ABGLEICH VON OBERFLAECHENTEMPERATUR TEMP(2) MIT TABELLARISCH HINTERLEGTEN WERTEN C IF (TEMP(2) .EQ. RAUMTEMP) THEN XMU = 0.7 RETURN ELSE DO LV1 = 1,10 IF (TEMP(2) .EQ. WERTE(LV1,1)) THEN XMU = WERTE(LV1,2) RETURN ENDIF ENDDO RETURN ENDIF GCRIT = 5*CHRLNGTH C C CHECK IF PRESSURE IS NON-POSITIVE C IF (PRESS .LE. ZERO) THEN STATEV(1) = ZERO GAMMA = DGAM(1) IF (XMU .LE. PRECIS) THEN DDTDDG(1,1) = ZERO DDTDDP(1) = XMU*GAMMA/GCRIT ELSE DDTDDG(1,1) = XKS DDTDDP(1) = ZERO END IF TAU(1) = ZERO DSLIP(1) = ZERO RETURN ELSE C C COMPUTE FOR CRITICAL STRESS C AND ARTIFICIAL STIFFNESS C TAUCRIT = XMU*PRESS STIFF = TAUCRIT/GCRIT ENDIF C C COMPUTE FOR THE TOTAL SLIP C AND FRICTIONAL SHEAR STRESS C GAMMA = STATEV(1) + DGAM(1) TAU(1) = STIFF*GAMMA C C CHECK IF THE FRICTIONAL STRESS C EXCEEDS THE CRITICAL STRESS C IF (ABS(TAU(1)) .LT. TAUCRIT) THEN C C BEHAVIOR REMAINS ELASTIC C STATEV(1) = GAMMA DDTDDG(1,1) = STIFF DDTDDP(1) = XMU*GAMMA/GCRIT DSLIP(1) = ZERO ELSE C C BEHAVIOR IS PLASTIC C TAU(1) = SIGN(TAUCRIT,GAMMA) STATEV(1) = TAU(1)/STIFF DDTDDG(1,1) = ZERO DDTDDP(1) = SIGN(XMU,GAMMA) DSLIP(1) = GAMMA - STATEV(1) ENDIF RETURN END