function [ x, y, z, w ] = rule07 ( )

%*****************************************************************************80
%
%% rule07() returns the pyramid quadrature rule of precision 7.
%
%  Discussion:
%
%    We suppose we are given a pyramid P with vertices
%      (-1,-1,0), (-1,+1,0), (+1,+1,0), (+1,-1,0), (0,0,1).
%    We call a rule with n points, returning coordinates
%    x, y, z, and weights w.  Then the integral I of f(x,y,z) over
%    P is approximated by Q as follows:
%
%    Q = volume(P) * sum ( 1 <= i <= n ) w(i) * f(x(i),y(i),z(i)) 
%
%  Licensing:
%
%    This code is distributed under the MIT license.
%
%  Modified:
%
%    25 April 2023
%
%  Author:
%
%    John Burkardt
%
%  Reference:
%
%    Freddie Witherden, Peter Vincent,
%    On the identification of symmetric quadrature rules for finite element methods,
%    Computers and Mathematics with Applications,
%    Volume 69, pages 1232-1241, 2015.
%
%  Output:
%
%    x(n), y(n), z(n): the coordinates of quadrature points.
%
%    w(n): the quadrature weights, which sum to 1.
%
  x = [ ...
          0.0000000000000000, ...
          0.0000000000000000, ...
          0.0000000000000000, ...
          0.8640987597877147, ...
          0.0000000000000000, ...
         -0.8640987597877147, ...
          0.0000000000000000, ...
          0.6172133998483676, ...
          0.0000000000000000, ...
         -0.6172133998483676, ...
          0.0000000000000000, ...
          0.3541523808681161, ...
          0.3541523808681161, ...
         -0.3541523808681161, ...
         -0.3541523808681161, ...
          0.8027258501000878, ...
          0.8027258501000878, ...
         -0.8027258501000878, ...
         -0.8027258501000878, ...
          0.2541353468618572, ...
          0.2541353468618572, ...
         -0.2541353468618572, ...
         -0.2541353468618572, ...
          0.6143051077207853, ...
          0.6143051077207853, ...
         -0.6143051077207853, ...
         -0.6143051077207853, ...
          0.5248326982543755, ...
          0.5248326982543755, ...
         -0.5248326982543755, ...
         -0.5248326982543755 ];

  y = [ ...
          0.0000000000000000, ...
          0.0000000000000000, ...
          0.0000000000000000, ...
          0.0000000000000000, ...
          0.8640987597877147, ...
          0.0000000000000000, ...
         -0.8640987597877147, ...
          0.0000000000000000, ...
          0.6172133998483676, ...
          0.0000000000000000, ...
         -0.6172133998483676, ...
          0.3541523808681161, ...
         -0.3541523808681161, ...
          0.3541523808681161, ...
         -0.3541523808681161, ...
          0.8027258501000878, ...
         -0.8027258501000878, ...
          0.8027258501000878, ...
         -0.8027258501000878, ...
          0.2541353468618572, ...
         -0.2541353468618572, ...
          0.2541353468618572, ...
         -0.2541353468618572, ...
          0.6143051077207853, ...
         -0.6143051077207853, ...
          0.6143051077207853, ...
         -0.6143051077207853, ...
          0.5248326982543755, ...
         -0.5248326982543755, ...
          0.5248326982543755, ...
         -0.5248326982543755 ];

  z = [ ...
          0.0000454802082028, ...
          0.3935828767576542, ...
          0.8386827828168515, ...
          0.0666666666666667, ...
          0.0666666666666667, ...
          0.0666666666666667, ...
          0.0666666666666667, ...
          0.3333333333333334, ...
          0.3333333333333334, ...
          0.3333333333333334, ...
          0.3333333333333334, ...
          0.1292864095395495, ...
          0.1292864095395495, ...
          0.1292864095395495, ...
          0.1292864095395495, ...
          0.0801385301797781, ...
          0.0801385301797781, ...
          0.0801385301797781, ...
          0.0801385301797781, ...
          0.6055199301105999, ...
          0.6055199301105999, ...
          0.6055199301105999, ...
          0.6055199301105999, ...
          0.0000000000897583, ...
          0.0000000000897583, ...
          0.0000000000897583, ...
          0.0000000000897583, ...
          0.2905430754945976, ...
          0.2905430754945976, ...
          0.2905430754945976, ...
          0.2905430754945976 ];

  w = [ ...
          0.0250005770341970, ...
          0.1005301826998931, ...
          0.0157071744270173, ...
          0.0266917592930029, ...
          0.0266917592930029, ...
          0.0266917592930029, ...
          0.0266917592930029, ...
          0.0287109375000000, ...
          0.0287109375000000, ...
          0.0287109375000000, ...
          0.0287109375000000, ...
          0.0659601871499773, ...
          0.0659601871499773, ...
          0.0659601871499773, ...
          0.0659601871499773, ...
          0.0147861379562357, ...
          0.0147861379562357, ...
          0.0147861379562357, ...
          0.0147861379562357, ...
          0.0295191096942239, ...
          0.0295191096942239, ...
          0.0295191096942239, ...
          0.0295191096942239, ...
          0.0133038449696241, ...
          0.0133038449696241, ...
          0.0133038449696241, ...
          0.0133038449696241, ...
          0.0357185398966593, ...
          0.0357185398966593, ...
          0.0357185398966593, ...
          0.0357185398966593 ];

  return
end
