      Program rc_curcuit
      Implicit NONE
c const:
      Real TIME_INIT,TIME_LAST
      Parameter (TIME_INIT=0.0, TIME_LAST=4.0)
      Real X_INIT
      Parameter (X_INIT=0.0)
      Real STEP
      Parameter (STEP = 0.1)
c local:
      Real time,x,x_next
c begin:
      Write(*,*) 'Solve Diff. Equation'
      x=X_INIT
      time = TIME_INIT

      Write(*,'(''Time : '',F4.1,4X,''Vol.: '',F7.5)') time,x
      Do While(time.lt.TIME_LAST)
         call calc_next_step(time,x,STEP,x_next)
         time=time+ STEP
         x=x_next
         Write(*,'(''Time : '',F4.1,4X,''Vol.: '',F7.5)') time,x
      End do

      end
      
      Real Function diff_eq(t,x)
      Implicit NONE
c input:
      Real t,x
c const:
      Real MAX_VOLTAGE
      Parameter (MAX_VOLTAGE=1.0)
c begin:
        diff_eq = MAX_VOLTAGE - x
      return
      End

      Subroutine calc_next_step(t,x,step,x_next)
      Implicit NONE
c input:
      Real t,x,step
c output:
      Real x_next
c function:
      Real diff_eq
      Real k1,k2,k3,k4
        k1 = step * diff_eq(t,x)
        k2 = step * diff_eq(t + 0.5*step,x + 0.5*k1 )
        k3 = step * diff_eq(t + 0.5*step,x + 0.5*k2 )
        k4 = step * diff_eq(t + step, x + k3 )

        x_next = x + (k1 + 2.*k2 + 2.*k3 + k4) /6.

      return
      end
