program rk4sysmain !___________________________________________________________ ! This program solves the initial value problem for a system ! of first-order differential equations using the classical ! fourth-order Runge-Kutta method. !___________________________________________________________ ! Declare problem size: integer, parameter :: m=? ! Declare program variables: real :: mass,... integer :: n, ... real :: t0, ... real, dimension(m) :: y, ... character(len=20) :: datafile, ?????? namelist /??????????/ mass,... ???????? /run_data/ t0,...,y !...Open and enter parameters from file parameters.dat: open (unit=7, file='parameters.dat', status='old') read (7,nml=parameters) close(7) !...Echo parameters to terminal: write (*,nml=parameters) !...Name, open and enter run_data from data_file: write (*,*) ' Enter run_data file name:' read (*,10) ???????? 10 format (a) open (????=7, file=datafile, status='old') read (7,nml=...) close(7) !...Echo run_data to terminal: write (*,???=run_data) ! Name, open and head output file: write (*,*) ' Enter output file name:' read (*,10) output open (unit=8, file=??????, status='unknown') write (8,30) 30 format(' t y y'' ') !Q1 (adjust spacing if needed) !30 format(' t x ... !Q2 ! Initialise values for DO-loop (y initialised directly by input): t = ... h = ... ! Initialise minr2 for Q2 only: ! r2min = ... !Q2 t_loop: do j= 1, ? ! 4th order Runge-Kutta subroutine: call rk4 y = ???? t = ... ! Print solutions every nprint steps: if ( mod(j,nprint)==0 ) then ! r2 = ... !Q2 ! write (8,40) t, ..., r2 !Q2 write (8,40) t, ... 40 format (?????, ??????) endif ! The following code is for Question 2 only: !r2 = ... !Calculate the minimum of r2: !if (r2min > r2) then ! r2min= ... ! . !endif enddo t_loop ! The following ... is for Question 2 only: ! Output the minimum of r2: ! . ! . stop ???????? !----------------------------------------------- function f(t,y) result(f_result) real, intent(in):: t real, dimension(m), intent(in):: y real, dimension(m) :: f_result f_result(1) = ... ! . ! . ! . end ???????? ? !----------------------------------------------------------------- subroutine rk4 ! Purpose: To implement the classical fourth-order Runge-Kutta ! method for the system of M first-order differential equations ! y'=f(t,y) over one interval of width h. Thus subroutine rk4 ! approximates y(t+h) with yrk4, given y=y(t). k1 = h*f(t,y) k2 = h*f(t + h/2.,y + k1/2.) k3 = h*f(t + h/2.,y + k2/2.) k4 = h*f(t+h,y+k3) yrk4 = y + (k1 + 2.*k2 + 2.*k3 + k4)/6. return end subroutine rk4 !----------------------------------------------------------------- end ...