⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 be2die.for

📁 两维弹性边界元程序
💻 FOR
📖 第 1 页 / 共 5 页
字号:
	 else
	  WD=DSQRT((-UNod(1,NNSlv,NESlv)-UNod(1,NN,NE))**2
	1	+(-UNod(2,NNSlv,NESlv)-UNod(2,NN,NE))**2
	1	+(UNod(3,NNSlv,NESlv)-UNod(3,NN,NE))**2)
	 endif	 
	endif
100	If(WD.gt.WDmgNod(NN,NE)) WDmgNod(NN,NE)=WD
*=========================================================
	return
	end
*************************************************************
*************************************************************
*************************************************************
	Subroutine AdvCrkTip(NLoad,NE,
	1	NCmp,NECap,NtotEle,XEle,NodEle,OEle,NthBdEle,NthGrpEle,
     1	JCrkN0C1Tip2Ele,NthSlvMstEle,XNod,ShpTNod,
	1	NtotCfKCap,NtotCfK,NthCfk,CfUP,
     1	WDmgNod,UNod,PNod,UHomoNod,PHomoNod,
     1	OCrkAdv,ACrkAdv)
	Implicit Real*8 (A-H,O-Z)
	Implicit Integer (I-N)
	Dimension XEle(2,2,NECap),NodEle(NECap),OEle(NECap)
	Dimension NthBdEle(NECap),NthGrpEle(NECap)
	Dimension JCrkN0C1Tip2Ele(NECap),NthSlvMstEle(NECap)
	Dimension XNod(2,3,NECap),ShpTNod(0:3,3,NECap)
	Dimension NthCfK(NECap,3,NECap,3,0:1)
	Dimension CfUP(NCmp,NCmp*2,0:NtotCfKCap)
	Dimension WDmgNod(3,NECap),UNod(NCmp,3,NECap),PNod(NCmp,3,NECap)
	Dimension UHomoNod(NCmp,3,NECap),PHomoNod(NCmp,3,NECap)
*=========================================================
!new tip element
	X11=XEle(1,2,NE)
	Y11=XEle(2,2,NE)
	X12=X11+ACrkAdv*DCOS(OCrkAdv)
	Y12=Y11+ACrkAdv*DSIN(OCrkAdv)
	Do 277 ME=1,NtotEle
	 If(NE.eq.ME) goto 277
	 If(NthBdEle(ME).ne.NthBdEle(NE)) goto 277
	 X21=XEle(1,1,ME)
	 Y21=XEle(2,1,ME)
       X22=XEle(1,2,ME)
       Y22=XEle(2,2,ME)
	 call Intersect
     1	(X11,Y11,X12,Y12,X21,Y21,X22,Y22,INTERSEC,IENDOF2)
	 If(INTERSEC.ne.0) then
	  IEINTERS=ME
	  goto 279
	 endif
277	continue
279	X1Stt=XEle(1,2,NE)
	X2Stt=XEle(2,2,NE)
	If(INTERSEC.eq.0) then
	 X1End=X1Stt+ACrkAdv*DCOS(OCrkAdv)
	 X2End=X2Stt+ACrkAdv*DSIN(OCrkAdv)
	 JBnd0Crk1Tip2=2
	else
	 X1End=XEle(1,IENDOF2,IEINTERS)
	 X2End=XEle(2,IENDOF2,IEINTERS)
	 JBnd0Crk1Tip2=1
	endif
	NthBd=NthBdEle(NE)
	NDiv=1
	NodE=3
	Gradient=1.d0
	NthGrp=NthGrpEle(NE)
	Call SegElemMst(NtotEle,NthBd,
	1	JBnd0Crk1Tip2,X1Stt,X2Stt,X1End,X2End,NDiv,NodE,
     1	Gradient,NthGrp,
	2	NECap,XEle,NodEle,OEle,NthBdEle,NthGrpEle,
     2	JCrkN0C1Tip2Ele,NthSlvMstEle,XNod,ShpTNod)
	Do I=1,3
	 WDmgNod(I,NtotEle)=
	1	UserInitWDmg(I,NtotEle,NthGrpEle(NE),XNod(1,I,NtotEle))
	enddo
	Call HomoFldsEle(NLoad,
     1	NCmp,NodEle(NtotEle),OEle(NtotEle),NthBdEle(NtotEle),
     1	XNod(1,1,NtotEle),
     2		UHomoNod(1,1,NtotEle),PHomoNod(1,1,NtotEle))	!output
!revision of old tip element
	X1Stt=XEle(1,1,NE)
	X2Stt=XEle(2,1,NE)
	X1End=XEle(1,2,NE)
	X2End=XEle(2,2,NE)
	JBnd0Crk1Tip2=1
	NthBd=NthBdEle(NE)
	NDiv=1
	NodE=3
	Gradient=1.d0
	NthGrp=NthGrpEle(NE)
	NE_1=NE-1
	Call SegElemMst(NE_1,NthBd,
	1	JBnd0Crk1Tip2,X1Stt,X2Stt,X1End,X2End,NDiv,NodE,
     1	Gradient,NthGrp,
	2	NECap,XEle,NodEle,OEle,NthBdEle,NthGrpEle,
     2	JCrkN0C1Tip2Ele,NthSlvMstEle,XNod,ShpTNod)
!update influence coefficient
	Do 310 NES=1,NtotEle
	Do 310 NNS=1,NodEle(NES)
	Do 310 NEF=1,NtotEle
	Do 310 NNF=1,NodEle(NEF)
	 If(NthBdEle(NES).ne.NthBdEle(NEF)) goto 310
	 If(NES.ne.NE.and.NES.ne.NtotEle.
	1	and.NEF.ne.NE.and.NEF.ne.NtotEle) goto 310
				JDeriv=0
				If(JCrkN0C1Tip2Ele(NES).gt.0) JDeriv=1
	 If(NthCfK(NES,NNS,NEF,NNF,0).ne.0) then
	  NthCfKRec=NthCfK(NES,NNS,NEF,NNF,0)
	 else
	  NthCfKRec=NtotCfK+1
	 endif
	 Call CfIntInf(
	1	NCmp,NthBdEle(NES),XNod(1,NNS,NES),OEle(NES),
	3	XEle(1,1,NEF),OEle(NEF),ShpTNod(0,NNF,NEF),
	5	JDeriv,CfUP(1,1,NthCfKRec))
	 If(NthCfK(NES,NNS,NEF,NNF,0).ne.0) then
	 else
	  NtotCfK=NtotCfK+1	  
	  NthCfK(NES,NNS,NEF,NNF,0)=NtotCfK
	  If(JDeriv.eq.1) NtotCfK=NtotCfK+1
	  If(JDeriv.eq.1) NthCfK(NES,NNS,NEF,NNF,1)=NtotCfK
	 endif
310	continue
*==============================================================
	return
	end
*******************SUBROUTINE INTERSECT*********************
	SUBROUTINE INTERSECT(X11,Y11,X12,Y12,X21,Y21,X22,Y22,
     1		INTERSEC,IENDOF2)
	IMPLICIT DOUBLE PRECISION (A-G,O-Z)
	R11=(X21-X11)*(Y12-Y11)-(X12-X11)*(Y21-Y11)
	R12=(X22-X11)*(Y12-Y11)-(X12-X11)*(Y22-Y11)
	R21=(X11-X21)*(Y22-Y21)-(X22-X21)*(Y11-Y21)
	R22=(X12-X21)*(Y22-Y21)-(X22-X21)*(Y12-Y21)
	IF(R11*R12.LT.0.d0.AND.R21*R22.LT.0.d0) THEN
	 INTERSEC=1
	 R121=DSQRT((X21-X12)**2+(Y21-Y12)**2)
	 R122=DSQRT((X22-X12)**2+(Y22-Y12)**2)
	 IF(R122.GE.R121) THEN
	  IENDOF2=2
	 ELSE
	  IENDOF2=1
	 ENDIF
	 RETURN
	ELSE
	 INTERSEC=0
	 IENDOF2=100
	ENDIF
*=========================================================
	return
	end
******************************************************************
	Subroutine IsoOCrkAdv(
	1	Mode1or2,SIF1,SIF2,OEle,SIF1Eff,SIF2Eff,OCrkAdv)
	Implicit Real*8 (A-H,O-Z)
	Implicit Integer (I-N)
!---------maximum principal stress criterion---------------
	If(Mode1or2.eq.1) then
	 If(DABS(SIF2).lt.1.d-10) then
	  OCrkAdv=OEle
	 else
	  OCrkAdv=OEle
	1	+2.d0*DATAN((DSQRT(SIF1**2+8.d0*SIF2**2)-SIF1)/SIF2/4.d0)
	 endif
	 SIF1Eff=SIF1*DCOS((OCrkAdv-OEle)/2.d0)**3+3.d0*SIF2
	1	*DCOS((OCrkAdv-OEle)/2.d0)**2*DSIN((OCrkAdv-OEle)/2.d0)
	 SIF2Eff=0.d0
!---------maximum shear stress criterion---------------
	elseif(Mode1or2.eq.2) then
	 Call MSS_KField(SIF1,SIF2,SIF1Eff,SIF2Eff,AngleK2,LSuccess)
	 OCrkAdv=OEle+AngleK2
	endif
*==============================================================
	return
	end
C******************SUBROUTINE MSS_KFIELD*****************
	SUBROUTINE MSS_KFIELD(SIF1,SIF2,SIF1EFF,SIF2EFF,ANGLEK2,LSUCCESS)
	Implicit Real*8 (A-H,O-Y)
	Implicit Complex*16 (Z)
	Implicit Integer (I-N)
	DIMENSION A(4),ZX(3),XR(3),XI(3)
	PI=4.d0*DATAN(1.d0)
	TINY=1.0d-10
!==========================================================
	IF(SIF1.LE.TINY.AND.DABS(SIF2).LE.TINY) THEN
	 SIF2EFF=SIF2
	 SIF1EFF=SIF1
	 ANGLEK2=0.d0
	 RETURN
	ELSEIF(SIF1.LE.TINY) THEN
	 SIF2EFF=SIF2
	 SIF1EFF=SIF1
	 ANGLEK2=0.d0
	 RETURN
	ELSEIF(DABS(SIF2).LE.TINY) THEN	
	 AHALF=DATAN(DSQRT(2.d0)/2.d0)
	 IF(SIF2.LT.0.d0) AHALF=-DATAN(DSQRT(2.d0)/2.d0)
	 SIF2EFF=SIF1*(DSIN(AHALF)+DSIN(3.d0*AHALF))/4.d0+
     1		SIF2*(DCOS(AHALF)+3.d0*DCOS(3.d0*AHALF))/4.d0
	 SIF1EFF=SIF1/4.d0*(3.d0*DCOS(AHALF)+DCOS(3.d0*AHALF))
     1		-SIF2*0.75d0*(DSIN(AHALF)+DSIN(3.d0*AHALF))
	 ANGLEK2=AHALF*2.d0
	 RETURN
	ENDIF
!===========================================================
	A(1)=SIF2*2.d0
	A(2)=-SIF1*2.d0
	A(3)=-SIF2*7.d0
	A(4)=SIF1
	CALL DZPLRC(3,A,ZX) !SRRT(A,XR,XI,N,M,L,B)
	XR=ZX
	XI=ZX*(0.d0,1.d0)
!===========================================================
	LSUCCESS=0
	DO K=1,3
	IF(XI(K)+1.0.EQ.1.0) THEN
	 AHALF=DATAN(XR(K))
	 DERIV2=-SIF1/16.d0*(DSIN(AHALF)+9.d0*DSIN(3.d0*AHALF))
     1		-SIF2/16.d0*(DCOS(AHALF)+27.d0*DCOS(3.d0*AHALF))
	 IF(DERIV2.LT.0.d0) THEN
	  SIF2EFF=SIF1*(DSIN(AHALF)+DSIN(3.d0*AHALF))/4.d0+
     1		SIF2*(DCOS(AHALF)+3.0*DCOS(3.d0*AHALF))/4.d0
	  SIF1EFF=SIF1/4.d0*(3.d0*DCOS(AHALF)+DCOS(3.d0*AHALF))
     1		-SIF2*0.75d0*(DSIN(AHALF)+DSIN(3.d0*AHALF))
	  ANGLEK2=AHALF*2.d0
	  LSUCCESS=LSUCCESS+1
	 ENDIF
	ENDIF 
	ENDDO
*=========================================================
	RETURN
	END
*********************************************************
	Subroutine IsoCrkTipSifT(
	1	NETip,SIF1,SIF2,TSs,
     1	NLoad,NECap,NtotEle,XEle,NodEle,OEle,NthBdEle,NthGrpEle,
     1	JCrkN0C1Tip2Ele,NthSlvMstEle,XNod,ShpTNod,
	1	UNod,PNod,UHomoNod,PHomoNod)
	Implicit Real*8 (A-H,O-Z)
	Implicit Integer (I-N)
	Dimension XEle(2,2,NECap),NodEle(NECap),OEle(NECap)
	Dimension NthBdEle(NECap),NthGrpEle(NECap)
	Dimension JCrkN0C1Tip2Ele(NECap),NthSlvMstEle(NECap)
	Dimension XNod(2,3,NECap),ShpTNod(0:3,3,NECap)
	Dimension UNod(2,3,NECap),PNod(2,3,NECap)
	Dimension UHomoNod(2,3,NECap),PHomoNod(2,3,NECap)
!local
	Dimension UPnt(2),SsPnt(2,2)
*================================================================
	PI=4.d0*DATAN(1.d0)
*================================================================
	NthBdTip=NthBdEle(NETip)
	Call UserElasConst(ES0,PR0,NthBdTip)
*================================================================
!SIFs
	DSE=DSQRT((XEle(1,2,NETip)-XEle(1,1,NETip))**2
	1	+(XEle(2,2,NETip)-XEle(2,1,NETip))**2)
	Do 30 IC=1,2
	U1=UNod(IC,3,NETip)
	U2=UNod(IC,2,NETip)
	U3=UNod(IC,1,NETip)
	CALL WilliamsExp(DSE,U1,U2,U3,AE0,AE1,AE2,AESIF)
	If(IC.eq.1) SIF1=DSQRT(2.d0*PI)*ES0/(1.d0-PR0)/4.d0*AESIF
30	If(IC.eq.2) SIF2=DSQRT(2.d0*PI)*ES0/(1.d0-PR0)/4.d0*AESIF
*==============================================================
!T-stress
	Ratio=1.001d0
	X1Pnt=XEle(1,1,NETip)+Ratio*(XEle(1,2,NETip)-XEle(1,1,NETip))
	X2Pnt=XEle(2,1,NETip)+Ratio*(XEle(2,2,NETip)-XEle(2,1,NETip))
	JAcqSsY1N0=1
	Call InterDisplStress(
	1	X1Pnt,X2Pnt,NthBdTip,UPnt,JAcqSsY1N0,SsPnt,
	1	NLoad,NECap,NtotEle,XEle,NodEle,OEle,NthBdEle,NthGrpEle,
     1	JCrkN0C1Tip2Ele,NthSlvMstEle,XNod,ShpTNod,
	1	UNod,PNod,UHomoNod,PHomoNod)
	TSs=SsPnt(1,1)-SsPnt(2,2)
*==============================================================
	return
	end
*********************WILLIAMSEXP********************
	SUBROUTINE WilliamsExp(RR,U1,U2,U3,AE0,AE1,AE2,AESIF)
	IMPLICIT DOUBLE PRECISION (A-H,O-Z)
	DIMENSION A(3,3),X(3),B(3)
	DIMENSION R(3)
	R(1)=RR/6.d0
	R(2)=RR/2.d0
	R(3)=RR/6.d0*5.d0
	DO I=1,3
	 A(I,1)=R(I)**0.5d0
	 A(I,2)=R(I)**1.5d0
	 A(I,3)=R(I)**2.5d0
	ENDDO
	B(1)=U1
	B(2)=U2
	B(3)=U3
	N=3
	CALL DLSLRG(N,A,N,B,1,X)
	AE0=X(1)
	AE1=X(2)
	AE2=X(3)
	AESIF=X(1)
	RETURN
	END
*********************************************************
*********************************************************
*********************************************************
*********************************************************
	Subroutine EPostProcess(NLoad,
	1	NCmp,NECap,NtotEle,XEle,NodEle,OEle,NthBdEle,NthGrpEle,
     1	JCrkN0C1Tip2Ele,NthSlvMstEle,XNod,ShpTNod,
	1	NtotCfKCap,NthCfk,CfUP,
	1	JBCU1P2,UNod,PNod,UHomoNod,PHomoNod)
     	Implicit Real*8 (A-H,O-Z)
	Implicit Integer (I-N)
!master
	Dimension XEle(2,2,NECap),NodEle(NECap),OEle(NECap)
	Dimension NthBdEle(NECap),NthGrpEle(NECap)
	Dimension JCrkN0C1Tip2Ele(NECap),NthSlvMstEle(NECap)
	Dimension XNod(2,3,NECap),ShpTNod(0:3,3,NECap)
	Dimension NthCfK(NECap,3,NECap,3,0:1)
	Dimension CfUP(NCmp,NCmp*2,0:NtotCfKCap)
	Dimension JBCU1P2(NCmp,3,NECap)
	Dimension UNod(NCmp,3,NECap),PNod(NCmp,3,NECap)
	Dimension UHomoNod(NCmp,3,NECap),PHomoNod(NCmp,3,NECap)
!local
	Allocatable UNd(:,:,:),UCrkPair1(:,:,:),UCrkPair2(:,:,:)
	Allocate(UNd(NCmp,3,NECap))
	Allocate(UCrkPair1(NCmp,3,NECap),UCrkPair2(NCmp,3,NECap))
*********************************************************
	PI=4.d0*DATAN(1.d0)
*********************************************************
!crack faces
	Do 6400 NE=1,NtotEle
	NthBdNE=NthBdEle(NE)
	Do 6400 NN=1,NodEle(NE)
	If(JCrkN0C1Tip2Ele(NE).gt.0) then
	 Do 6300 IC=1,NCmp
	  UNd(IC,NN,NE)=UHomoNod(IC,NN,NE)
	  Do 6200 ME=1,NtotEle
	   If(NthBdEle(ME).ne.NthBdNE) goto 6200
	   Do 6100 MN=1,NodEle(ME)
	   NthK=NthCfK(NE,NN,ME,MN,0)
	   Do 6100 JC=1,NCmp
	   If(JCrkN0C1Tip2Ele(ME).eq.0) then
	    CfUSF=CfUP(IC,JC,NthK)
	    CfPSF=CfUP(IC,JC+NCmp,NthK)
	    UNd(IC,NN,NE)=UNd(IC,NN,NE)
	1	+CfUSF*(PNod(JC,MN,ME)-PHomoNod(JC,MN,ME))
	1	-CfPSF*(UNod(JC,MN,ME)-UHomoNod(JC,MN,ME))
	   else
	    CfPSF=CfUP(IC,JC+NCmp,NthK)
	    UNd(IC,NN,NE)=UNd(IC,NN,NE)+CfPSF*UNod(JC,MN,ME)
	   endif
6100	   continue
	   UCrkPair1(IC,NN,NE)=(UNd(IC,NN,NE)*2+UNod(IC,NN,NE))/2
	   UCrkPair2(IC,NN,NE)=(UNd(IC,NN,NE)*2-UNod(IC,NN,NE))/2
6200	  continue
6300	 continue
	endif
6400	continue
*********************************************************
!Save!Save!Save!Save!Save!Save!Save!Save!Save!Save!Save!Save!Save
*================================================================
!deformed
	Open(51,file='ZDefmd.txt',status='unknown')
	Do 110 NE=1,NtotEle
	VNorm1=DCOS(OEle(NE)-Pi/2.d0)
	VNorm2=DSIN(OEle(NE)-Pi/2.d0)
	Do 110 NN=

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -