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

📄 libearingfilm.for

📁 边界远程序,加入油膜压力的接触问题求解的边界元程序
💻 FOR
📖 第 1 页 / 共 5 页
字号:
	DO 44 MM=1,8
	XQP=XQP+XK(MM)*FN(MM)
	YQP=YQP+YK(MM)*FN(MM)
44      ZQP=ZQP+ZK(MM)*FN(MM)
	XQP=XQP-XP
	YQP=YQP-YP
	ZQP=ZQP-ZP
	RQ2=XQP*XQP+YQP*YQP+ZQP*ZQP
	RQ1=SQRT(RQ2)
	RXX2=XQP*XQP/RQ2
	RYY2=YQP*YQP/RQ2
	RZZ2=ZQP*ZQP/RQ2
	RXY2=XQP*YQP/RQ2
	RYZ2=YQP*ZQP/RQ2
	RXZ2=XQP*ZQP/RQ2
	CALL JACOB(NODAL,XW,YW,XK,YK,ZK,0)
	FL1=CON(ID)*WX*WY*FJACOB*FJ(K)/RQ1
	FL2=PR1(ID)*FL1/RQ2
	FL3=FL2*(XQP*COSBX+YQP*COSBY+ZQP*COSBZ)
	FL4=-3.*FL3/PR1(ID)
	AXXT=-FL3+FL4*RXX2
	AYYT=-FL3+FL4*RYY2
	AZZT=-FL3+FL4*RZZ2
	AXYT=FL4*RXY2+FL2*(XQP*COSBY-YQP*COSBX)
	AXZT=FL4*RXZ2+FL2*(XQP*COSBZ-ZQP*COSBX)
	AYXT=FL4*RXY2+FL2*(YQP*COSBX-XQP*COSBY)
	AYZT=FL4*RYZ2+FL2*(YQP*COSBZ-ZQP*COSBY)
	AZXT=FL4*RXZ2+FL2*(ZQP*COSBX-XQP*COSBZ)
	AZYT=FL4*RYZ2+FL2*(ZQP*COSBY-YQP*COSBZ)
	BXXT=FL1*(PR4(ID)+RXX2)
	BYYT=FL1*(PR4(ID)+RYY2)
	BZZT=FL1*(PR4(ID)+RZZ2)
	BXYT=FL1*RXY2
	BXZT=FL1*RXZ2
	BYZT=FL1*RYZ2
	BYXT=BXYT
	BZXT=BXZT
	BZYT=BYZT
C
	DO 90 J=1,8
	IF(J.EQ.I) GOTO 80
	AXX(J)=AXX(J)+FN(J)*AXXT
	AXY(J)=AXY(J)+FN(J)*AXYT
	AXZ(J)=AXZ(J)+FN(J)*AXZT
	AYX(J)=AYX(J)+FN(J)*AYXT
	AYY(J)=AYY(J)+FN(J)*AYYT
	AYZ(J)=AYZ(J)+FN(J)*AYZT
	AZX(J)=AZX(J)+FN(J)*AZXT
	AZY(J)=AZY(J)+FN(J)*AZYT
	AZZ(J)=AZZ(J)+FN(J)*AZZT
80	BXX(J)=BXX(J)+FN(J)*BXXT
	BXY(J)=BXY(J)+FN(J)*BXYT
	BXZ(J)=BXZ(J)+FN(J)*BXZT
	BYX(J)=BYX(J)+FN(J)*BYXT
	BYY(J)=BYY(J)+FN(J)*BYYT
	BYZ(J)=BYZ(J)+FN(J)*BYZT
	BZX(J)=BZX(J)+FN(J)*BZXT
	BZY(J)=BZY(J)+FN(J)*BZYT
	BZZ(J)=BZZ(J)+FN(J)*BZZT
90      CONTINUE
170   RETURN
	END

	SUBROUTINE LOCALE(NUMBE,xn,yn,zn,msi,cosbex,cosbey,cosbez,
     #                  nord,mors,kodt)
	COMMON/S2/AXX(8),AXY(8),AXZ(8),AYX(8),AYY(8),AYZ(8),
     1            AZX(8),AZY(8),AZZ(8),BXX(8),BXY(8),BXZ(8),
     1            BYX(8),BYY(8),BYZ(8),BZX(8),BZY(8),BZZ(8)
	COMMON/S4/HJACOB,COSAX,COSAY,COSAZ
	COMMON/S6/FJACOB,COSBX,COSBY,COSBZ
	COMMON/S7/NODBS(2),NUMBS(2),NODPS(2),NODCS(2),NEDPS(2),NEDCS(2)
	dimension COSBEX(2,numbe,3),COSBEY(2,numbe,3),COSBEZ(2,numbe,3) 
 	dimension XN(2,msi/3),YN(2,msi/3),ZN(2,msi/3) 
	dimension nord(2,msi/3,8),mors(2,numbe),kodt(2,msi/3)
	DIMENSION NODAL(8)
	CALL INITL(1)

      DO 90 I=1,2
	DO 90 N=1,NUMBE
	XM=0.
 	YM=0.
	ZM=0.
	XH=0.
	YH=0.
	ZH=0.
 	DO 30 K=1,NUMBS(I)
	L=0
	DO 10 J=1,8
10      IF(NORD(I,K,J).EQ.MORS(I,N)) L=J
	IF(L.EQ.0.OR.KODT(I,K).EQ.1) GOTO 30
	DO 20 J=1,8
	NODAL(J)=NORD(I,K,J)
	IF(NORD(I,K,J).EQ.0) GOTO 15
	BXX(J)=XN(I,NORD(I,K,J))
	BYY(J)=YN(I,NORD(I,K,J))
	BZZ(J)=ZN(I,NORD(I,K,J))
	GOTO 20
15      BXX(J)=0.
	BYY(J)=0.
	BZZ(J)=0.
20      CONTINUE
	CALL JACOBC(NODAL,AXX(L),AYY(L),BXX,BYY,BZZ) 
35    XM=XM+COSBX
	YM=YM+COSBY
	ZM=ZM+COSBZ
	XH=XH+COSAX
	YH=YH+COSAY
	ZH=ZH+COSAZ
30      CONTINUE
	FJACOB=SQRT(XM*XM+YM*YM+ZM*ZM)
	COSBEX(I,N,3)=XM/FJACOB
	COSBEY(I,N,3)=YM/FJACOB
	COSBEZ(I,N,3)=ZM/FJACOB
	HJACOB=SQRT(XH*XH+YH*YH+ZH*ZH)
	COSBEX(I,N,1)=XH/HJACOB
	COSBEY(I,N,1)=YH/HJACOB
	COSBEZ(I,N,1)=ZH/HJACOB
	XM=COSBEY(I,N,3)*COSBEZ(I,N,1)-COSBEZ(I,N,3)*COSBEY(I,N,1)
	 YM=COSBEZ(I,N,3)*COSBEX(I,N,1)-COSBEX(I,N,3)*COSBEZ(I,N,1)
	 ZM=COSBEX(I,N,3)*COSBEY(I,N,1)-COSBEY(I,N,3)*COSBEX(I,N,1)
	FJACOB=SQRT(XM*XM+YM*YM+ZM*ZM)
	COSBEX(I,N,2)=XM/FJACOB
	 COSBEY(I,N,2)=YM/FJACOB
      COSBEZ(I,N,2)=ZM/FJACOB
90	CONTINUE
	 	RETURN
	END

	SUBROUTINE  JACOBC(NODAL,XW,YW,XK,YK,ZK)
	COMMON/S4/HJACOB,COSAX,COSAY,COSAZ
	COMMON/S6/FJACOB,COSBX,COSBY,COSBZ
	DIMENSION NODAL(8),DFXW(8),DFYW(8),XK(8),YK(8),ZK(8)
C
	DO 10 J=5,8
	DFXW(J)=0.
10      DFYW(J)=0.
	IF(NODAL(5).NE.0) DFXW(5)=-XW*(1.-YW)
	IF(NODAL(6).NE.0) DFYW(6)=-YW*(1.+XW)
	IF(NODAL(7).NE.0) DFXW(7)=-XW*(1.+YW)
	IF(NODAL(8).NE.0) DFYW(8)=-YW*(1.-XW)
	IF(NODAL(5).NE.0) DFYW(5)=-0.5*(1.-XW*XW)
	IF(NODAL(6).NE.0) DFXW(6)= 0.5*(1.-YW*YW)
	IF(NODAL(7).NE.0) DFYW(7)= 0.5*(1.-XW*XW)
	IF(NODAL(8).NE.0) DFXW(8)=-0.5*(1.-YW*YW)
	DFXW(1)=-0.25*(1.-YW)-0.5*(DFXW(5)+DFXW(8))
	DFXW(2)= 0.25*(1.-YW)-0.5*(DFXW(5)+DFXW(6))
	DFXW(3)= 0.25*(1.+YW)-0.5*(DFXW(6)+DFXW(7))
	DFXW(4)=-0.25*(1.+YW)-0.5*(DFXW(7)+DFXW(8))
	DFYW(1)=-0.25*(1.-XW)-0.5*(DFYW(5)+DFYW(8))
	DFYW(2)=-0.25*(1.+XW)-0.5*(DFYW(5)+DFYW(6))
	DFYW(3)= 0.25*(1.+XW)-0.5*(DFYW(6)+DFYW(7))
	DFYW(4)= 0.25*(1.-XW)-0.5*(DFYW(7)+DFYW(8))
	XD1=DFXW(1)*XK(1)+DFXW(2)*XK(2)+DFXW(3)*XK(3)+DFXW(4)*XK(4)
     1   +DFXW(5)*XK(5)+DFXW(6)*XK(6)+DFXW(7)*XK(7)+DFXW(8)*XK(8)
	YD1=DFXW(1)*YK(1)+DFXW(2)*YK(2)+DFXW(3)*YK(3)+DFXW(4)*YK(4)
     1   +DFXW(5)*YK(5)+DFXW(6)*YK(6)+DFXW(7)*YK(7)+DFXW(8)*YK(8)
	ZD1=DFXW(1)*ZK(1)+DFXW(2)*ZK(2)+DFXW(3)*ZK(3)+DFXW(4)*ZK(4)
     1   +DFXW(5)*ZK(5)+DFXW(6)*ZK(6)+DFXW(7)*ZK(7)+DFXW(8)*ZK(8)
	XD2=DFYW(1)*XK(1)+DFYW(2)*XK(2)+DFYW(3)*XK(3)+DFYW(4)*XK(4)
     1   +DFYW(5)*XK(5)+DFYW(6)*XK(6)+DFYW(7)*XK(7)+DFYW(8)*XK(8)
	YD2=DFYW(1)*YK(1)+DFYW(2)*YK(2)+DFYW(3)*YK(3)+DFYW(4)*YK(4)
     1   +DFYW(5)*YK(5)+DFYW(6)*YK(6)+DFYW(7)*YK(7)+DFYW(8)*YK(8)
	ZD2=DFYW(1)*ZK(1)+DFYW(2)*ZK(2)+DFYW(3)*ZK(3)+DFYW(4)*ZK(4)
     1   +DFYW(5)*ZK(5)+DFYW(6)*ZK(6)+DFYW(7)*ZK(7)+DFYW(8)*ZK(8)
	G1=YD1*ZD2-ZD1*YD2
	G2=ZD1*XD2-XD1*ZD2
	G3=XD1*YD2-YD1*XD2
	FJACOB=SQRT(G1*G1+G2*G2+G3*G3)
	COSBX=G1/FJACOB
	COSBY=G2/FJACOB
	COSBZ=G3/FJACOB
	H1=YD2*G3-ZD2*G2
	H2=ZD2*G1-XD2*G3
	H3=XD2*G2-YD2*G1
	HJACOB=SQRT(H1*H1+H2*H2+H3*H3)
	COSAX=H1/HJACOB
	COSAY=H2/HJACOB
	COSAZ=H3/HJACOB
	RETURN
	END										  

	SUBROUTINE CONTACT(ITERL,MULTI,numbe,U0,nttyp,nutyp,
     #	A,P,A1,P1,AC,PC,msi,nsi,ksi,xn,yn,zn,cosbex,cosbey,cosbez,
     #    kod,nord,kodt,kode,mors,morp,morc,merp,merc,mord,mort,node,
     #    MNB,FILM,TFORCE)
 	COMMON/S1/PI,PR(2),PR1(2),PR2(2),PR3(2),PR4(2),
     1              CON(2),DSMIN2(2),DSMAX2(2),E(2),G(2)
 	COMMON/S4/HJACOB,COSAX,COSAY,COSAZ
  	COMMON/S6/FJACOB,COSBX,COSBY,COSBZ
	COMMON/S7/NODBS(2),NUMBS(2),NODPS(2),NODCS(2),NEDPS(2),NEDCS(2)
	COMMON/S8/MS(2),MD(6),NS(2),ND(2)
	dimension COSBEX(2,numbe,3),COSBEY(2,numbe,3),COSBEZ(2,numbe,3)
     	dimension A(msi,nsi),P(msi),AC(2,3*numbe,ksi),PC(2,3*numbe)
	dimension A1(msi,nsi),p1(msi)
	COMMON/S30/BTX(2000,8),BTY(2000,8),BTZ(2000,8),
	1           RTX(2,2000,8),RTY(2,2000,8),RTZ(2,2000,8),
     1           RUX(2,2000,8),RUY(2,2000,8),RUZ(2,2000,8)
  	dimension Y(msi),TN(msi/3),UP(numbe),UN(2,numbe)
	dimension C(3*numbe,ksi),B(3*numbe),X(8*numbe)
	dimension NTTYP(2,msi/3),NUTYP(2,msi/3),FILM(9,19),TFORCE(9,19)
	DIMENSION  U0(numbe),psign(2,numbe),xt(3000)
	 DIMENSION XX(3000),pb(6*numbe),AF2(6*numbe,4*numbe)
	DIMENSION XX1(3000),Y1(msi),TN1(msi/3),xt1(3000)
	dimension XN(2,msi/3),YN(2,msi/3),ZN(2,msi/3) 
	dimension Nord(2,msi/3,8),KODT(2,msi/3),Kode(2,msi/3,8)
	dimension kod(2,msi/3)
	dimension Mors(2,numbe),Morp(2,numbe),Morc(2,numbe),Merp(2,numbe),
     #          Merc(2,numbe)
      dimension Mord(2,msi/3),Mort(2,msi/3),Node(2,msi/3,8)
	  DIMENSION MNB(2,3000)
	DOUBLE PRECISION film,TFORCE
!-----------------------------------------------------------------
!	WRITE(99,*) 'THE NUMBER OF CONTACT NODES IS   ',NUMBE
C
C       DEFINE THE LOCAL COORDINATE SYSTEMS AND COMPUTE NORMAL GAP U0
C       BETWEEN THE TWO CONTACT BOUNDARIES.
C
	CALL LOCAL3(NUMBE,xn,yn,zn,msi,cosbex,cosbey,cosbez,
     #         	nord,kodt,mors)
	WRITE(*,29)
	WRITE(11,29)
	do 300 LM=1,numbe
	up(LM)=U0(LM) 
 	WRITE(*,30) LM,MORS(1,LM),MORS(2,LM),UP(LM)
      WRITE(11,30) LM,MORS(1,LM),MORS(2,LM),UP(LM)
300	CONTINUE
        ITER=0
540     ITER=ITER+1
77	WRITE(*,31) ITER,NEDPS(2),NEDCS(2)
C	IF(ITER.GT.ITERL) GOTO 640
	MD(1)=3*NUMBE
	MD(2)=3*NODPS(2)
	MD(3)=3*NODCS(2)
	MD(4)=2*NODCS(2)
	MD(5)=3*NUMBE+NODCS(2)
	MD(6)=3*NUMBE-NODCS(2)
	REWIND 10
	DO 560 I=1,2
550   CALL ASSEM(I,NUMBE,MULTI,AC,PC,msi,ksi,C,B,kod,mors,mort,node,
     #                 nord,kode,kodt,UP)
c	WRITE(*,*)'  THE SUBROUTION OF ASSEM HAS BEEN FINISHED'
!	WRITE(88,*)'  THE SUBROUTION OF ASSEM HAS BEEN FINISHED'
 	CALL SOLVE1(MD(1),MD(5),MD(6),ksi,C,B,numbe)
 	DO 560 J=1,MD(1)
		K=(I-1)*MD(1)+J
		PB(K)=B(J)
		DO 560 N=1,MD(5)
		AF2(K,N)=C(J,N)
560   CONTINUE
c	WRITE(*,*) 'THE FIRST SAVING STAGE HAS BEEN FINISHED'
!	WRITE(88,*) 'THE FIRST SAVING STAGE HAS BEEN FINISHED'
 	CALL SOLVE(PB,numbe,AF2,ksi,C,B,X)
!
!      PRINT CONTACT COUPLES,BOUNDARY ELEMENT DISPLACEMENTS AND PRESSURE
!
600	WRITE(*,32) NEDCS(2),ITER
	DO 630 I=1,2
	WRITE(*,33) I
	DO 630 K=1,NUMBE
609   L=MORT(I,MORS(I,K))
	IF(KOD(I,MORS(I,K)).EQ.10) GOTO 610
	KZ=(I-1)*MD(6)+3*L
	KY=KZ-1
	KX=KZ-2
	UN(i,k)=X(KZ)
	PSIGN(I,K)=0.
	GOTO 620
610   KZ=2*MD(6)+L
	KY=(I-1)*MD(6)+MD(2)+2*L
	KX=KY-1
	LZ=6*NUMBE-NODCS(2)+L
	UN(i,k)=REAL(I-1)*UP(K)+REAL(3-2*I)*X(KZ)
	PSIGN(I,K)=2.*G(1)*X(LZ)
620   continue
	IF(I.EQ.1)THEN
	IUZ=3*K
		IUY=IUZ-1
		IUX=IUZ-2
		XX1(IUZ)=UN(i,k)
		XX1(IUY)=X(KY)
		XX1(IUX)=X(KX)
		Xt1(K)=X(LZ)
		KK=K+ND(1)/3
 		KUX=3*KK-2
		KUY=3*KK-1
		KUZ=3*KK
  		Y1(KUX)=XX1(IUX)
		Y1(KUY)=XX1(IUY)
		Y1(KUZ)=XX1(IUZ)
 		TN1(KK)=2.0*G(1)*X(LZ)
	 ENDIF
  	   IF(I.EQ.2)THEN
 		IUZ=3*K
		IUY=IUZ-1
		IUX=IUZ-2
		XX(IUZ)=UN(i,k)
		XX(IUY)=X(KY)
		XX(IUX)=X(KX)
		Xt(K)=X(LZ)
		KK=K+ND(2)/3
 		KUX=3*KK-2
		KUY=3*KK-1
		KUZ=3*KK
  		Y(KUX)=XX(IUX)
		Y(KUY)=XX(IUY)
		Y(KUZ)=XX(IUZ)
 		TN(KK)=2.0*G(2)*X(LZ)
 	  END IF
C	  write(112,34)MORS(I,K),X(KX),X(KY),UN(i,k),PSIGN(I,K)
630   WRITE(*,34) MORS(I,K),X(KX),X(KY),UN(i,k),PSIGN(I,K)!  	CALL GAP(NUMBE,U0,PSIGN,msi,kod,mors,UP) 
      call valid(numbe,X,msi,nord,kod,merc,merp,mors,morp,
     #	       kode,kodt,mort,morc,mord,up)

C	if(nedcs(2).ne.nedcs(1)) then 
C		goto 540
C	else 
		WRITE(11,31) ITER,NEDPS(2),NEDCS(2)
		WRITE(11,32) NEDCS(2),ITER
		WRITE(11,33) I
	    do i=1,2
	 
	    do k=1,numbe
			KZ=(I-1)*MD(6)+3*MORT(I,MORS(I,K))
			ky=kz-1
			kx=kz-2
			WRITE(11,34) MORS(I,K),X(KX),X(KY),UN(i,k),PSIGN(I,K)
	 		 
	    end do
	    end do
C	end if
C	K1=1
C	write(5,971)((j-1)*10,j=1,18)
C	DO 221 I=1,20 
C	write(5,972)k1,(UN(1,(K-1)*21+I),K=1,17)
C	K1=K1+10
C221	CONTINUE
C	K1=1
C	write(6,971)((j-1)*10,j=1,18)
C	DO 222 I=1,20 
C	write(6,972)k1,(PSIGN(1,(K-1)*21+I),K=1,17)
C	K1=K1+10
C222	CONTINUE
971	FORMAT(1X,21(I4,' '))972	FORMAT(1X,I4,' ',21(E12.6,' '))      CALL ASSEMM(1,NUMBE,MULTI,XX1,xt1,A1,P1,msi,nsi,node,nord,mors
	#,kodt)
     	CALL SOLVE5(G,A1,P1,msi,nsi,Y1,kod,MNB)
	CALL BSTRESS1(numbe,nttyp,nutyp,msi,Y1,TN1,xn,yn,zn,
     #	cosbex,cosbey,cosbez,nord,mord,kode,kodt)
	CALL ASSEMM(2,NUMBE,MULTI,XX,xt,A,P,msi,nsi,node,nord,mors,kodt)
  	CALL SOLVE4(G,A,P,msi,nsi,Y,kod,MNB)
	CALL BSTRESS(numbe,nttyp,nutyp,msi,Y,TN,xn,yn,zn,
     #	cosbex,cosbey,cosbez,nord,mord,kode,kodt,FILM,TFORCE)
!---------------------------------------------------------------------
29    FORMAT(//,47H ASSUMED PRE_CONTACT OR CONTACT ELEMENT INITIAL,
     1   6H DATA.,//,46H     CONTACT  COUPLE    ELEMENT(BODY_1)   ELEM,
     2   28HENT(BODY_2)   INITIAL GAP_UD,/)
30    FORMAT(3I20,F15.4)
31    FORMAT(1X,8H ITER = ,I5,/,9H NEDPS = ,I5,/,9H NEDCS = ,I5,/)
32    FORMAT(1X,33H SOLUTION OF THE CONTACT PROBLEM.,/,11H NUMBERS OF,
     1   19H CONTACT ELEMENTS =,I5,/,23H NUMBERS OF ITERATION =,I5,/)
33    FORMAT(/," DISPLACEMENT AND STRESS IN THE CONTACT AREA_BODY",
     1   1H(,I2,1H),//,"      NODAL          US1          US2        ",
     2   "UN          PSIGN",/)
34    FORMAT(I10,4E14.5)
640   RETURN
	END

      SUBROUTINE VALID(NUMBE,X,msi,nord,kod,merc,merp,mors,morp,
     #	             kode,kodt,mort,morc,mord,UP)
 	COMMON/S7/NODBS(2),NUMBS(2),NODPS(2),NODCS(2),NEDPS(2),NEDCS(2)
	dimension Nord(2,msi/3,8),KODT(2,msi/3),Kode(2,msi/3,8)
	dimension kod(2,msi/3)
	dimension Mors(2,numbe),Morp(2,numbe),Morc(2,numbe),Merp(2,numbe),
     #          Merc(2,numbe),Mort(2,msi/3),Mord(2,msi/3)
 	DIMENSION NODAL(8),XK(8),YK(8),ZK(8)
	dimension X(8*numbe),UP(numbe)
C
	NEDPS(1)=NEDPS(2)
	NEDCS(1)=NEDCS(2)
	NEDCS(2)=0
	DO 45 N=1,NEDCS(1)
	DO 15 J=1,8
	NODAL(J)=NORD(1,MERC(1,N),J)
	IF(NODAL(J).EQ.0) GOTO 10
	KZ=6*NUMBE-NODCS(2)+MORT(1,NODAL(J))
	XK(J)=X(KZ)
	GOTO 15
10      XK(J)=0.
15      CONTINUE
	YK(1)=XK(1)+XK(2)+XK(3)+XK(4)+XK(5)+XK(6)+XK(7)+XK(8)
	if(yk(1).LT.0.0) go to 30
	NEDPS(2)=NEDPS(2)+1
	DO 20 I=1,2
20      MERP(I,NEDPS(2))=MERC(I,N)
	GOTO 45
30      NEDCS(2)=NEDCS(2)+1
	DO 40 I=1,2
40      MERC(I,NEDCS(2))=MERC(I,N)
45    CONTINUE
	IF(NEDCS(2).NE.NEDCS(1)) GOTO 90
	IF(NEDPS(2).EQ.0) GOTO 90
	NEDPS(2)=0
	DO 80 N=1,NEDPS(1)
	DO 60 I=1,2
	DO 55 J=1,8
	NODAL(J)=NORD(I,MERP(I,N),J)

⌨️ 快捷键说明

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