      SUBROUTINE FM472(DLZ,DFZ,XC,YC,FTX1,VX,VY,OMEGAZ,OMEGAY,
     #UGUGRAD,DFX,DFY,DMZ,DFXX,DFYY,URAZVG,YMOMENT,P,N)
      IMPLICIT REAL*8 (A-H,O-Z)
C     #UGUGRAD,DFX,DFY,DMZ,DFXX,DFYY,URAZVG,P,N)
C     Выходные переменные
C     DLY - поперечная деформация в шине
C     DFX - продольная сила в шине
C     DFY - поперечная сила в шине
C     PLP - признак поворота -1 - влево, +1 - вправо
      REAL*8 P(1)
      INTEGER NOBR(20)
      INCLUDE 'UPR.INC'
      COMMON /PAR/GV(90000)
      COMMON /UGR/ KGR1,KGR2,T
      COMMON/C403/Z1(20),Z2(20),Z3(20),Z4(20),Z5(20)
      COMMON/SLEDK/USLED(20)
      COMMON/TKG1/DDZ(20),NDDZ(20),URAZVAL(20)
      COMMON/IVELO/KODVEL
      INCLUDE 'XXX.INC'
      DATA NOBR/20*0/,KRAT/3/
      COMMON/OMEG2/METS
      DATA NOBVSTOP/0/
      DATA TVSTOP/0.D0/
      IF(KODR.EQ.8) RETURN
      OMEGA=OMEGAZ
      UGOL=USLED(N)
      URAZV=-DASIN(URAZVAL(N))
      IF(MOD(N,2).EQ.1)URAZV=-URAZV !10/16/03 09:35am
      URAZVG=URAZV*57.295
      urazvg=ugol  !09/06/11 09:07am
      PLP=-DSIGN(1.D0,OMEGA)
      IF(NOBR(N).EQ.0)THEN
         DLYLST=0.0
         UGLAST=UGOL
         XCLAST=XC
         YCLAST=YC
         NOBR(N)=1
         TLAST=T
         TL=0
         Z1(N)=DLYLST
         Z2(N)=UGLAST
         Z3(N)=XCLAST
         Z4(N)=YCLAST
         Z5(N)=UGOL
         VSTOP=0.2
         PTIRE=300000.
         IF(KODVEL.EQ.1)THEN
           NKR=INT(P(11))
           IF(NKR.GT.0)GR(NKR)=-V/P(9)
         ENDIF
      ENDIF
      FF1=P(1)
      FF0=P(2)
      IF(FF0.LT.0.OR.FF0.GT.2.5)FF0=0.8
      IF(FF1.LT.0.OR.FF1.GT.2.5)FF1=FF0
      STIFY=P(3)
      DEMPY=P(4)
      STIFU=P(5)
      DEMPU=P(6)
      VK=DSQRT(VX*VX+VY*VY)
      DLYLST=Z1(N)
      UGLAST=Z2(N)
      XCLAST=Z3(N)
      YCLAST=Z4(N)
      UGOL0=Z5(N)
      IF(DLZ.LE.0.0.OR.DFZ.LE.0.0) GOTO 10
C     Шина в контакте
C     Остаточная деформация от предыдущей итерации DLY1
      DUGOL=UGOL-UGLAST
      COSDLT=DCOS(DUGOL)
      DLY1=DLYLST*COSDLT
C     Координаты точки О2 в текущей итерации - X2, Y2
      DK1=DTAN(UGOL)
      DK2=DTAN(UGOL+1.5708)
      X2=((YCLAST-DK1*XCLAST)-(YC-DK2*XC))/(DK2-DK1)
      Y2=DK1*X2+YCLAST-DK1*XCLAST
C     Вектор приращения деформации в глобальной системе координат
C     AX, AY
      AX=X2-XC
      AY=Y2-YC
C     Алгебраическое значение приращения поперечной деформации DLY2
      COS1=DCOS(UGOL)
      SIN1=DSIN(UGOL)
      DLY2=-AX*SIN1+AY*COS1
      DVY=VX*SIN1-VY*COS1
C     Полная поперечная деформация
      DLY=DLY1+DLY2
C     Определение угла увода шины
      UV=ATAN1(VX,VY)
      UGU=UGOL-UV
      IF(DABS(UGU).GE.3.141593)THEN
        UGU=6.283186-DABS(UGU)
        IF(UGOL.GT.UV)UGU=-UGU
      ENDIF
C     Определение поперечной силы
C      FTX=FTX1  !09/05/11 05:36pm
      RADK=P(9)
      SCRIPX=P(10)!1.*5*4*5
      VXAXE=VX
      VXAXE=VX*COS1+VY*SIN1
      VXWHEEL=-RADK*OMEGAY
      FTX=(VXAXE-VXWHEEL)*SCRIPX
C      FTX=(VXAXE-VXWHEEL)*SCRIPX*ABS(DFZ)
      PGUSENIC=0.
      IF(FTX.GT.999999.)THEN
        FTX=FTX-999999.
        PGUSENIC=1.
      ENDIF
      IF(VK.GT.VSTOP)THEN
        CALL TIREFY(DFZ,UGU,DFYMAX,P(8),P(2))
        DFR=P(7)*URAZV                 !11/24/00 06:19pm
        IF(N.EQ.2.OR.N.EQ.4.OR.N.EQ.6.OR.N.EQ.8.OR.N.EQ.10)DFR=-DFR   !11/24/00 06:19pm
        DFYMAX=DFYMAX+DFR              !11/24/00 06:19pm
        IF(DFYMAX.GT.DFZ*FF1)THEN
          DFYMAX1=DFZ*FF1 !11/27/00 11:21am
          DFYMAX=DFYMAX1
        ENDIF
      ELSE
        IF(T.GE.TVSTOP)THEN
          NOBVSTOP=NOBVSTOP+1
          PRINT *,'Расчет шины в режиме малой скорости T=',T,NOBVSTOP
          TVSTOP=T+0.2D0
        ENDIF
        IF(DFZ.GT.0.)THEN
          DFYMAX=DFZ*FF1
        ELSE
          DFYMAX=0.0
        ENDIF
      ENDIF
      RZF=DABS(DFZ)*FF1
      IF(RZF.LE.DABS(FTX))THEN
        DFYMAX=0.
        FX=RZF*DSIGN(1.D0,FTX)
      ELSE
        RYY=RZF*RZF-FTX*FTX
        IF(RYY.LE.0.0)THEN  ! NEVER REACH?????  09/05/11 05:33pm
          DFYMAX=0.0
          FX=0.0
          STOP ' FM472  RYY'
        ELSE
          DFYMAX=DFYMAX*DSQRT(RYY)/RZF ! WHY NOT DFYMAX=DSQRT(RYY)/RZF ??? 09/05/11 05:33PM
          FX=FTX
        ENDIF
      ENDIF
      YMOMENT=fx*radk
      DFY=DLY*STIFY
      DFY=DFY+DVY*DEMPY
      IF(DABS(DFY).LE.DFYMAX) GOTO 99
C     Поперечный юз
      DFY=DSIGN(DFYMAX,DFY)
      DLY=DFY/STIFY
 99   CONTINUE
      IF(PGUSENIC.NE.0)FX=0.0 ! КАТОК ГУСЕНИЦЫ ДАЕТ ТОЛЬКО БОКОВУЮ РЕАКЦИЮ
C     forces in wheel system
      DFXX=FX
      DFYY=DFY
C     dfy и dfx с обратными знаками, т.к. в правые части они добавляются с минусом
C     dfy в системе колеса вычисляется также с обратным знаком
      DFX=DFY*SIN1+FX*COS1 !09/23/94 02:48pm
      DFY=-DFY*COS1+FX*SIN1!09/23/94 02:48pm
      DFYY=-DFYY  !08/06/03 10:20am
C     определение стабилизирующего момента
      IF(VK.GT.VSTOP)THEN
        CALL TIREMZ(DFZ,UGU,DMZMAX,P(8),P(2))
        IF(DFYMAX1.GT.DFZ*FF1)DMZMAX=0.0
      ELSE
        IF(T.GE.TVSTOP)THEN
          NOBVSTOP=NOBVSTOP+1
          PRINT *,'Расчет шины в режиме малой скорости T=',T,NOBVSTOP
          TVSTOP=T+0.2D0
        ENDIF
        IF(DFZ.GT.0.)THEN
          RSPOT=DSQRT(DFZ/3.1416/PTIRE)
          DMZMAX=RSPOT*RSPOT*RSPOT*6.2832*PTIRE*FF1/3.
          IF(DABS(OMEGA).GT.0.01)THEN
            DMZ=DSIGN(DMZMAX,OMEGA)
          ELSE
            DMZ=DMZMAX*OMEGA/0.01
          ENDIF
          IF(STIFU.EQ.0)DMZ=0.0
          GOTO 100
        ELSE
          DMZMAX=0.0
        ENDIF
      ENDIF
      DMZ=UGU*STIFU
      IF(DABS(DMZ).GE.DMZMAX) DMZ=DSIGN(DMZMAX,DMZ)
C     dmz добавляется в правые части с минусом
      DMZ=DMZ+DEMPU*OMEGA
      GOTO 100
 10   CONTINUE
C     отрыв колеса
      DLY=0.0
      DFY=0.0
      DFX=0.0
      DMZ=0.0
 100  CONTINUE
      DMZ=-DMZ  !08/06/03 10:56am
      DLYLST=DLY
      UGLAST=UGOL
      XCLAST=XC
      YCLAST=YC
      Z1(N)=DLYLST
      Z2(N)=UGLAST
      Z3(N)=XCLAST
      Z4(N)=YCLAST
      UGUGRAD=UGU*57.296
      RETURN
      END
