2-е столкновение на Фортране - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь закодировать коллизию в 2d, используя уравнение статья в Википедии .

, но каждый раз получаю неправильный результат.

module var
integer::t,i,ic
integer,parameter::ni=1000,nc=2
doubleprecision,parameter::lx=30.d0,ly=30.d0,pi=dacos(-1.d0)
doubleprecision,dimension(1:nc)::x,y,x0,y0,vx,vy,vx0,vy0,ax,ay,r,v,m,&
&teta
doubleprecision,parameter::tf=10.d0,h=tf/ni,e=1.d0,rmax=1.d0,vmax=10.d0,&
&mmax=1000.d0
doubleprecision::dx,dy,d,d2,rr,na,p1,p2,p3,p4,phi
end module

subroutine colli2
use var
do i=1,nc
   if(i/=ic)then
      dx=x(i)-x(ic)
      dy=y(i)-y(ic)
      d=dsqrt(dx**2.d0+dy**2.d0)
      d2=d**2.d0
      rr=r(ic)+r(i)
      if(d<=rr)then
      x(ic)=x0(i)-rr*dx/d
      y(ic)=y0(i)-rr*dy/d


      dx=x(ic)-x(i)
      dy=y(ic)-y(i)
      d=dsqrt(dx**2.d0+dy**2.d0)
      d2=d**2.d0


      p1=2.d0*m(i)/(m(ic)+m(i))
      p2=(vx0(ic)-vx0(i))*dx
      p3=(vy0(ic)-vy0(i))*dy
      p4=dx/d2

      vx(ic)=vx0(ic)-p1*(p2+p3)*p4

      print*,vx(1),vx(2)
      p4=dy/d2


      vy(ic)=vy0(ic)-p1*(p2+p3)*p4
      endif
   endif
enddo
end

это подпрограмма столкновения и модуль, который я использую для переменных. для начальных параметров я использовал равные массы. это анимация. фиолетовая сфера должна была остановиться

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...