diff --git a/src/fluid_solver.cpp b/src/fluid_solver.cpp
index 9fff1689482e54c2327177465fac681b488ab787..0ebae2115ef68154119cdd446806bc437dd275a5 100644
--- a/src/fluid_solver.cpp
+++ b/src/fluid_solver.cpp
@@ -211,6 +211,23 @@ void fluid_solver<R>::compute_velocity(C *vorticity) \
 } \
  \
 template<> \
+void fluid_solver<R>::add_forcing(\
+        C *field, R factor) \
+{ \
+    ptrdiff_t cindex; \
+    if (this->cd->myrank == this->cd->rank[this->fmode]) \
+    { \
+        cindex = ((this->fmode - this->cd->starts[0]) * this->cd->sizes[1])*this->cd->sizes[2]; \
+        field[cindex*3+2][1] -= this->famplitude*factor/2; \
+    } \
+    if (this->cd->myrank == this->cd->rank[this->cd->sizes[0] - this->fmode]) \
+    { \
+        cindex = ((this->cd->sizes[0] - this->fmode - this->cd->starts[0]) * this->cd->sizes[1])*this->cd->sizes[2]; \
+        field[cindex*3+2][1] += this->famplitude*factor/2; \
+    } \
+} \
+ \
+template<> \
 void fluid_solver<R>::omega_nonlin( \
         int src) \
 { \
@@ -251,8 +268,8 @@ void fluid_solver<R>::omega_nonlin( \
             this->cu[cindex*3+1][1] = tmpy1 / this->normalization_factor;\
             this->cu[cindex*3+2][1] = tmpz1 / this->normalization_factor;\
             ); \
+    this->add_forcing(this->cu, 1.0); \
     this->symmetrize(this->cu, 3); \
-    this->symmetrize(this->cv[src], 3); \
 } \
  \
 template<> \
diff --git a/src/fluid_solver.hpp b/src/fluid_solver.hpp
index f673f61e5898730e5ed12e9770c1452da8872f78..4c9740c2b6a1baec895cac1dd03b4751307a0e8e 100644
--- a/src/fluid_solver.hpp
+++ b/src/fluid_solver.hpp
@@ -60,7 +60,9 @@ class fluid_solver:public fluid_solver_base<rnumber>
         void *vr2c[3], *vc2r[3];
 
         /* physical parameters */
-        rnumber nu;
+        double nu;
+        int fmode;
+        double famplitude;
 
         /* methods */
         fluid_solver(
@@ -78,6 +80,7 @@ class fluid_solver:public fluid_solver_base<rnumber>
         void omega_nonlin(int src);
         void step(double dt);
         void impose_zero_modes(void);
+        void add_forcing(rnumber (*field)[2], rnumber factor);
 
         int read(char field, char representation);
         int write(char field, char representation);
diff --git a/test.py b/test.py
index 95e11e49d85bd47b9f63366e78482a3574c75204..48ad5e6ca68222c991a505612b69cbcc57b68469 100755
--- a/test.py
+++ b/test.py
@@ -74,6 +74,8 @@ class stat_test(code):
         self.parameters['niter_todo'] = 8
         self.parameters['dt'] = 0.01
         self.parameters['nu'] = 0.1
+        self.parameters['famplitude'] = 1.0
+        self.parameters['fmode'] = 1
         self.includes += '#include <cstring>\n'
         self.includes += '#include "fftw_tools.hpp"\n'
         self.variables += ('double t;\n' +
@@ -110,6 +112,8 @@ class stat_test(code):
                 char fname[512];
                 fs = new fluid_solver<float>(simname, nx, ny, nz);
                 fs->nu = nu;
+                fs->fmode = fmode;
+                fs->famplitude = famplitude;
                 fs->iteration = iter0;
                 if (myrank == fs->cd->io_myrank)
                     {
@@ -143,8 +147,8 @@ if __name__ == '__main__':
     parser = argparse.ArgumentParser()
     parser.add_argument('test_name', type = str)
     parser.add_argument('--run', dest = 'run', action = 'store_true')
-    parser.add_argument('--ncpu', dest = 'ncpu', default = 2)
-    parser.add_argument('--nsteps', dest = 'nsteps', default = 16)
+    parser.add_argument('--ncpu', type = int, dest = 'ncpu', default = 2)
+    parser.add_argument('--nsteps', type = int, dest = 'nsteps', default = 16)
     parser.add_argument('-n', type = int, dest = 'n', default = 32)
     opt = parser.parse_args()
 
@@ -164,8 +168,8 @@ if __name__ == '__main__':
         c.parameters['nx'] = opt.n
         c.parameters['ny'] = opt.n
         c.parameters['nz'] = opt.n
-        c.parameters['nu'] = 0.1
-        c.parameters['dt'] = 0.004
+        c.parameters['nu'] = 1.0
+        c.parameters['dt'] = 0.05
         c.parameters['niter_todo'] = opt.nsteps
         c.write_par(simname = 'test1')
         Kdata0.tofile("test1_cvorticity_i00000")
@@ -174,7 +178,7 @@ if __name__ == '__main__':
         c.parameters['niter_todo'] *= 2
         c.write_par(simname = 'test2')
         Kdata0.tofile("test2_cvorticity_i00000")
-        c.run(ncpu = opt.ncpu, simname = 'test2')
+        #c.run(ncpu = opt.ncpu, simname = 'test2')
         Rdata = np.fromfile(
                 'test1_rvorticity_i00000',
                 dtype = np.float32).reshape(opt.n, opt.n, opt.n, 3)
@@ -205,7 +209,7 @@ if __name__ == '__main__':
         axis.set_title('{0}'.format(np.average(Rdata0[..., 0]**2 +
                                                Rdata0[..., 1]**2 +
                                                Rdata0[..., 2]**2)*.5))
-        return None
+        return Rdata0
 
     fig = plt.figure(figsize=(12, 12))
     a = fig.add_subplot(221)
@@ -214,8 +218,14 @@ if __name__ == '__main__':
     a.set_axis_off()
     plot_vel_cut('test2_rvelocity_i00000', a)
     a = fig.add_subplot(223)
-    plot_vel_cut('test1_rvelocity_i{0:0>5x}'.format(stats1.shape[0]-1), a)
+    tmp = plot_vel_cut('test1_rvelocity_i{0:0>5x}'.format(stats1.shape[0]-1), a)
     a = fig.add_subplot(224)
     plot_vel_cut('test2_rvelocity_i{0:0>5x}'.format(stats2.shape[0]-1), a)
     fig.savefig('vel_cut.pdf', format = 'pdf')
 
+    fig = plt.figure()
+    a = fig.add_subplot(111)
+    a.plot(tmp[0, :, 0, 0])
+    a.plot(tmp[0, :, 0, 1])
+    a.plot(tmp[0, :, 0, 2])
+    fig.savefig('ux_vs_y.pdf', format = 'pdf')