function [ ...
  u, dudt, dudx, dudxx, dudy, dudyy, us, ...
  v, dvdt, dvdx, dvdxx, dvdy, dvdyy, vs, ...
  p, dpdt, dpdx, dpdxx, dpdy, dpdyy, ps ] = all_gms ( nu, rho, n, x, y, t )

%*****************************************************************************80
%
%% all_gms() evaluates the variables of the GMS flow.
%
%  Discussion:
%
%    The flow has been modified by a sign change that makes it slightly
%    more plausible.
%
%  Licensing:
%
%    This code is distributed under the MIT license.
%
%  Modified:
%
%    24 August 2020
%
%  Author:
%
%    John Burkardt
%
%  Input:
%
%    real NU, the kinematic viscosity.
%
%    real RHO, the fluid density.
%
%    integer N, the number of nodes.
%
%    real X(N), Y(N), the coordinates of nodes.
%
%    real T, the current time.
%
%  Output:
%
%    real U(N), DUDT(N), DUDX(N), DUDXX(N), DUDY(N), DUDYY(N), US(N),
%    the horizontal velocity values.
%
%    real V(N), DVDT(N), DVDX(N), DVDXX(N), DVDY(N), DVDYY(N), VS(N),
%    the vertical velocity values.
%
%    real P(N), DPDT(N), DPDX(N), DPDXX(N), DPDY(N), DPDYY(N), PS(N),
%    the pressure values.
%
  i = ceil ( x );
  j = ceil ( y );
  s = ( -1.0 ) .^ ( i + j );
  u =             pi   * s .* sin ( t ) .* ( sin (       pi * x ) ).^2  .* sin ( 2.0 * pi * y );
  dudt =          pi   * s .* cos ( t ) .* ( sin (       pi * x ) ).^2  .* sin ( 2.0 * pi * y );
  dudx =          pi^2 * s .* sin ( t ) .*   sin ( 2.0 * pi * x )       .* sin ( 2.0 * pi * y );
  dudxx =   2.0 * pi^3 * s .* sin ( t ) .*   cos ( 2.0 * pi * x )       .* sin ( 2.0 * pi * y );
  dudy =    2.0 * pi^2 * s .* sin ( t ) .* ( sin (       pi * x ) ).^2  .* cos ( 2.0 * pi * y );
  dudyy = - 4.0 * pi^3 * s .* sin ( t ) .* ( sin (       pi * x ) ).^2  .* sin ( 2.0 * pi * y );

  v =           - pi   * s .* sin ( t ) .* sin ( 2.0 * pi * x ) .* ( sin (       pi * y ) ).^2;
  dvdt =        - pi   * s .* cos ( t ) .* sin ( 2.0 * pi * x ) .* ( sin (       pi * y ) ).^2;
  dvdx =  - 2.0 * pi^2 * s .* sin ( t ) .* cos ( 2.0 * pi * x ) .* ( sin (       pi * y ) ).^2;
  dvdxx =   4.0 * pi^3 * s .* sin ( t ) .* sin ( 2.0 * pi * x ) .* ( sin (       pi * y ) ).^2;
  dvdy =        - pi^2 * s .* sin ( t ) .* sin ( 2.0 * pi * x ) .*   sin ( 2.0 * pi * y );
  dvdyy = - 2.0 * pi^3 * s .* sin ( t ) .* sin ( 2.0 * pi * x ) .*   cos ( 2.0 * pi * y );

  p =              rho * s .* sin ( t ) .* cos ( pi * x ) .* sin ( pi * y );
  dpdt =           rho * s .* cos ( t ) .* cos ( pi * x ) .* sin ( pi * y );
  dpdx =  - pi   * rho * s .* sin ( t ) .* sin ( pi * x ) .* sin ( pi * y );
  dpdxx = - pi^2 * rho * s .* sin ( t ) .* cos ( pi * x ) .* sin ( pi * y );
  dpdy =    pi   * rho * s .* sin ( t ) .* cos ( pi * x ) .* cos ( pi * y );
  dpdyy = - pi^2 * rho * s .* sin ( t ) .* cos ( pi * x ) .* sin ( pi * y );

  us = dudt + u .* dudx + v .* dudy + dpdx / rho - nu * ( dudxx + dudyy );
  vs = dvdt + u .* dvdx + v .* dvdy + dpdy / rho - nu * ( dvdxx + dvdyy );
  ps = dudx + dvdy;

  return
end
