PROGRAM Shooting_Method
IMPLICIT NONE
REAL, PARAMETER :: h = 0.05 !step size
INTEGER, PARAMETER :: n = (10/h) !number of steps
REAL, DIMENSION(3,4) :: K=0 !Runge_Kutta coefficients (K1, K2, ...)
REAL, DIMENSION (0:n) :: g1, g2, g3
REAL :: P, P1, P2 !assumed value for g3 initial
REAL, PARAMETER:: B = 0.5, e = 0.1 !beta and epsilon
INTEGER :: i, m !counter
P = 0
P1 = 0.9
P2 = 0.9
g1(0) = 0
g2(0) = 0
i = 0
!shooting below the target
DO
g3(0) = P1
K(1,1) = h*g2(i)
K(2,1) = h*g3(i)
K(3,1) = h*(-g1(i)*g3(i) + B*((ABS(g2(i))**2.) - 1.0))
K(1,2) = h*(g2(i) + K(2,1)/2.)
K(2,2) = h*(g3(i) + K(3,1)/2.)
K(3,2) = h*(-(g1(i)+K(1,1)/2.)*(g3(i)+K(3,1)/2.) + B*((ABS(g2(i)+K(2,1)/2.)**2.) - 1.0))
K(1,3) = h*(g2(i) + K(2,2)/2.)
K(2,3) = h*(g3(i) + K(3,2)/2.)
K(3,3) = h*(-(g1(i)+K(1,2)/2.)*(g3(i)+K(3,2)/2.) + B*((ABS(g2(i)+K(2,2)/2.)**2.) - 1.0))
K(1,4) = h*(g2(i) + K(2,3))
K(2,4) = h*(g3(i) + K(3,3))
K(3,4) = h*(-(g1(i)+K(1,3))*(g3(i)+K(3,3)) + B*((ABS(g2(i)+K(2,3))**2.) - 1.0))
g1(i+1) = g1(i) + (1/6.0)*(K(1,1) + 2.*K(1,2) + 2.*K(1,3) + K(1,4))
g2(i+1) = g2(i) + (1/6.0)*(K(2,1) + 2.*K(2,2) + 2.*K(2,3) + K(2,4))
g3(i+1) = g3(i) + (1/6.0)*(K(3,1) + 2.*K(3,2) + 2.*K(3,3) + K(3,4))
IF (i == n) THEN
print*, 'below',g2(n), 'P1=', P1
IF ( g2(n) < 1 .and. g2(n) > 0.9 ) THEN
print*, 'final below',g2(n)
read*, m
EXIT
ELSE
P1 = P1 + 0.001
i = -1
END IF
END IF
i = i + 1
END DO
continued...