      SUBROUTINE EulerRichardson(pos,vel,t,GM,dt,kick_flag,xsave,ysave)
      IMPLICIT NONE
      REAL*8 accel(2), diffx, diffy, impulse, on, posmid(2), v, v2,
     +       velmid(2), pos(*), vel(*), t, GM, dt, xsave, ysave
      REAL x, y
      INTEGER IR_, i, Itmp1_
      CHARACTER*80 kick_flag
      CALL GWmouse(IR_, Itmp1_, x, y)
      if(IR_ .NE. 0 .OR. Itmp1_ .NE. 0) THEN
         xsave = x                          ! マウスがクリックされた位置を記録
         ysave = y
         kick_flag = 'on'
      END IF
      IF((kick_flag .EQ. 'on')) THEN
         diffx = abs(pos(1) - xsave)
         diffy = abs(pos(2) - ysave)
*        マウスがクリックされた位置に衛星が達するまで待つ
         IF((diffx .LT. 0.02D0) .AND. (diffy .LT. 0.02D0)) THEN
            v2 = vel(1)*vel(1) + vel(2)*vel(2)
            v = sqrt(v2)
            impulse = 0.1D0*v               ! 衝撃力/質量 の大きさ
            vel(2) = vel(2) + impulse       ! 鉛直方向にキック
            kick_flag = 'off'
         END IF
      END IF
*     各時間区間の初めで加速度を計算
      CALL acceleration(pos,accel,GM)
      DO i = 1, 2
         velmid(i) = vel(i) + 0.5D0*accel(i)*dt
         posmid(i) = pos(i) + 0.5D0*vel(i)*dt
      END DO
*     各時間区間の中央で加速度を計算
      CALL acceleration(posmid,accel,GM)
*     各時間区間の終わりで位置と速度を計算
      DO i = 1, 2
         vel(i) = vel(i) + accel(i)*dt
         pos(i) = pos(i) + velmid(i)*dt
      END DO
      t = t + dt
      END
