function result = torus_5s2 ( func, r1, r2 )

%*****************************************************************************80
%
%% torus_5s2() approximates an integral inside a torus in 3D.
%
%  Integration region:
%
%    Points (X,Y,Z) such that:
%
%      ( SQRT ( X**2 + Y**2 ) - R1 )**2 + Z**2 <= R2**2.
%
%  Discussion:
%
%    A 24 point, 5-th degree formula is used, Stroud number TOR3-S2:5-1.
%
%  Licensing:
%
%    This code is distributed under the MIT license. 
%
%  Modified:
%
%    23 May 2004
%
%  Author:
%
%    John Burkardt
%
%  Reference:
%
%    Arthur H Stroud,
%    Approximate Calculation of Multiple Integrals,
%    Prentice Hall, 1971.
%
%  Input:
%
%    external FUNC, the name of the user supplied
%    function of three variables which is to be integrated,
%    of the form:
%      function value = func ( x, y, z )
%
%    real R1, R2, the two radii that define the torus.
%
%  Output:
%
%    real RESULT, the approximate integral of the function.
%
  w = 1.0 / 24.0;

  quad = 0.0;

  u1 = sqrt ( r1 * r1 + 0.5 * r2 * r2 );
  u2 = sqrt ( r1 * r1 + sqrt ( 2.0 ) * r1 * r2 + r2 * r2 );
  u3 = sqrt ( r1 * r1 - sqrt ( 2.0 ) * r1 * r2 + r2 * r2 );

  for i = 1 : 6

    angle = pi * i / 3.0;
    cs = cos ( angle );
    sn = sin ( angle );

    x = u1 * cs;
    y = u1 * sn;
    z = r2 / sqrt ( 2.0 );
    quad = quad + w * feval ( func, x, y, z );

    x = u1 * cs;
    y = u1 * sn;
    z = -r2 / sqrt ( 2.0 );
    quad = quad + w * feval ( func, x, y, z );

    x = u2 * cs;
    y = u2 * sn;
    z = 0.0;
    quad = quad + w * feval ( func, x, y, z );

    x = u3 * cs;
    y = u3 * sn;
    z = 0.0;
    quad = quad + w * feval ( func, x, y, z );

  end

  volume = torus_volume_3d ( r1, r2 );
  result = quad * volume;

  return
end
