src/test/stokes.h

    Third-order Stokes wave

    These functions return the shape of a third-order Stokes wave with the wavenumber and steepness given by the parameters ak and k_.

    extern double k_, h_, g_, ak;
    
    double wave (double x, double y)
    {
      double a_ = ak/k_;
      double eta1 = a_*cos(k_*x);
      double alpa = 1./tanh(k_*h_);
      double eta2 = 1./4.*alpa*(3.*sq(alpa) - 1.)*sq(a_)*k_*cos(2.*k_*x);
      double eta3 = -3./8.*(cube(alpa)*alpa - 
    			3.*sq(alpa) + 3.)*cube(a_)*sq(k_)*cos(k_*x) + 
        3./64.*(8.*cube(alpa)*cube(alpa) + 
    	    (sq(alpa) - 1.)*(sq(alpa) - 1.))*cube(a_)*sq(k_)*cos(3.*k_*x);
      return eta1 + ak*eta2 + sq(ak)*eta3 - y;
    }
    
    double u_x (double x, double y)
    {
      double alpa = 1./tanh(k_*h_);
      double a_ = ak/k_;
      double sgma = sqrt(g_*k_*tanh(k_*h_)*
    		     (1. + k_*k_*a_*a_*(9./8.*(sq(alpa) - 1.)*
    					(sq(alpa) - 1.) + sq(alpa))));
      double A_ = a_*g_/sgma;
      return A_*cosh(k_*(y + h_))/cosh(k_*h_)*k_*cos(k_*x) +
        ak*3.*ak*A_/(8.*alpa)*(sq(alpa) - 1.)*(sq(alpa) - 1.)*
        cosh(2.0*k_*(y + h_))*2.*k_*cos(2.0*k_*x)/cosh(2.0*k_*h_) +
        ak*ak*1./64.*(sq(alpa) - 1.)*(sq(alpa) + 3.)*
        (9.*sq(alpa) - 13.)*
        cosh(3.*k_*(y + h_))/cosh(3.*k_*h_)*a_*a_*k_*k_*A_*3.*k_*cos(3.*k_*x);
    }
    
    double u_y (double x, double y)
    {
      double alpa = 1./tanh(k_*h_);
      double a_ = ak/k_;
      double sgma = sqrt(g_*k_*tanh(k_*h_)*
    		     (1. + k_*k_*a_*a_*(9./8.*(sq(alpa) - 1.)*
    					(sq(alpa) - 1.) + sq(alpa))));
      double A_ = a_*g_/sgma;
      return A_*k_*sinh(k_*(y + h_))/cosh(k_*h_)*sin(k_*x) +
        ak*3.*ak*A_/(8.*alpa)*(sq(alpa) - 1.)*(sq(alpa) - 1.)*
        2.*k_*sinh(2.0*k_*(y + h_))*sin(2.0*k_*x)/cosh(2.0*k_*h_) +
        ak*ak*1./64.*(sq(alpa) - 1.)*(sq(alpa) + 3.)*
        (9.*sq(alpa) - 13.)*
        3.*k_*sinh(3.*k_*(y + h_))/cosh(3.*k_*h_)*a_*a_*k_*k_*A_*sin(3.*k_*x);
    }