def METHOD_NAME(excitation, c=Constant(1.), record=False, annotate=False, objective=None):
    """ The forward problem """
    # Define function space
    U = FunctionSpace(mesh, "Lagrange", 1)
    # Set up initial values
    u0 = Function(U, name = "u0", annotate = annotate)
    u1 = Function(U, name = "u1", annotate = annotate)
    # Define test and trial functions
    v = TestFunction(U)
    u = TrialFunction(U)
    # Define variational formulation
    udot = (u - 2.*u1 + u0)
    uold = (0.25*u + 0.5*u1 +0.25*u0)
    F = (udot*v+k*k*c*c*uold.dx(0)*v.dx(0))*dx - u*v*ds(0) + excitation*v*ds(0)
    a = lhs(F)
    L = rhs(F)
    # Prepare solution
    u = Function(U, name = "u", annotate = annotate)
    # The actual timestepping
    if record: rec = [u1(1.),]
    i = 1
    t = 0.0        # Initial time
    T = 3.e-1      # Final time
    times = [t,]
    if objective is not None:
        objective(u1, times[-1])
    while t < T - .5*float(k):
        excitation.t = t + float(k)
        solve(a == L, u, annotate = annotate)
        u0.assign(u1, annotate = annotate)
        u1.assign(u, annotate = annotate)
        t = i*float(k)
        times.append(t)
        if record:
            rec.append(u1(1.0))
        i += 1
        if objective is not None:
            objective(u1, times[-1])
    if record:
        np.savetxt("recorded.txt", rec)
    return u1, times