! programa para dibujar las curvas de velocidad cero ! en el plano (X-Y) en el problema restringido de ! los tres cuerpos ! ! como el programa utiliza la conocida tecnica cientifica ! de la "fuerza bruta", es necesario ingresar los valores ! limite para las coordenadas X e Y que fijan los rangos ! de coordenadas para encontrar las curvas. Es suficiente ! ingresar el modulo de ese valor. ! ! la salida se hace en un archivo HILL.OUT donde se guardan ! las coordenadas donde se produce un cambio de signo en ! 2U-C ! ! rgh - septiembre 2008 ! ! program hill implicit none real::dx=0.0005,dy=0.0005 real ::x,y,r1,r2,mu,c,u real ::x1,x2,li,ddx,ddy integer::ifg write(*,'(a)',advance='no')'ingrese C:' read(*,*)c write(*,'(a)',advance='no')'ingrese mu:' read(*,*)mu write(*,'(a)',advance='no')'ingrese limite coord.:' read(*,*)li ! posicion de los cuerpos masivos ! x1=-mu x2=1.-mu ddx=dy ddy=dy ifg=1 open(7,file='hill.out') ! inicia busqueda ! x=li do y=li do r1=sqrt((x-x1)**2+y**2) r2=sqrt((x-x2)**2+y**2) u=x**2+y**2+2.*(1.-mu)/r1+2.*mu/r2-c ! busca un cambio de positivo a negativo ! if((ifg == 1).and.(u < 0.))then if(dy > 0.00001)then y=y+dy dy=dy/2. else ! encuentra el valor y lo guarda ! write(7,*)x,y,u ! sigue la busqueda, vuelve al incremento ! original, y baja el flag para indicar ! que ahora busca un cambio de negativo a ! positivo ! dy=ddy ifg=0 endif ! busca un cambio de negativo a positivo ! else if((ifg == 0).and.(u > 0.))then if(dy > 0.00001)then y=y+dy dy=dy/2. else ! encuentra el valor y lo guarda ! write(7,*)x,y,u ! sigue la busqueda, vuelve al incremento ! original, y sube el flag para indicar ! que ahora busca un cambio de positivo a ! negativo ! dy=ddy ifg=1 endif endif y=y-dy if(y < -li)exit enddo x=x-dx if(x < -li)exit enddo close(7) end program hill