<p><b>lowrie@lanl.gov</b> 2013-05-02 16:15:52 -0600 (Thu, 02 May 2013)</p><p><br>
Added mpas_ocn_cdg_basis:  This does mesh setup for CDG.  At this point, it<br>
defines and quadrature, basis, and inverse mass-matrix for each cell.<br>
<br>
Added mpas_ocn_cdg_advection:  This will be CDG's module for overall<br>
initialization and for computing tendencies.<br>
<br>
Added calls from core into the above.<br>
</p><hr noshade><pre><font color="gray">Index: branches/mpas_cdg_advection
===================================================================
--- branches/mpas_cdg_advection        2013-04-25 15:35:28 UTC (rev 2788)
+++ branches/mpas_cdg_advection        2013-05-02 22:15:52 UTC (rev 2789)

Property changes on: branches/mpas_cdg_advection
___________________________________________________________________
Modified: svn:mergeinfo
## -37,4 +37,4 ##
 /branches/time_manager:924-962
 /branches/xml_registry:2610-2662
 /branches/zoltan_cleaning:2753-2760
-/trunk/mpas:2390-2782
+/trunk/mpas:2390-2788
\ No newline at end of property
Modified: branches/mpas_cdg_advection/src/core_ocean/Makefile
===================================================================
--- branches/mpas_cdg_advection/src/core_ocean/Makefile        2013-04-25 15:35:28 UTC (rev 2788)
+++ branches/mpas_cdg_advection/src/core_ocean/Makefile        2013-05-02 22:15:52 UTC (rev 2789)
@@ -34,6 +34,8 @@
        mpas_ocn_tracer_advection_std_vadv4.o \
        mpas_ocn_tracer_advection_mono.o \
        mpas_ocn_tracer_advection_helpers.o \
+       mpas_ocn_cdg_advection.o \
+       mpas_ocn_cdg_basis.o \
        mpas_ocn_time_integration.o \
        mpas_ocn_time_integration_rk4.o \
        mpas_ocn_time_integration_split.o \
@@ -116,6 +118,10 @@
 
 mpas_ocn_tracer_advection_helpers.o:
 
+mpas_ocn_cdg_advection.o: mpas_ocn_cdg_basis.o
+
+mpas_ocn_cdg_basis.o: mpas_ocn_advection.o
+
 mpas_ocn_restoring.o:
 
 mpas_ocn_vmix.o: mpas_ocn_vmix_coefs_const.o mpas_ocn_vmix_coefs_rich.o mpas_ocn_vmix_coefs_tanh.o
@@ -163,7 +169,8 @@
                       mpas_ocn_tracer_advection_std_vadv3.o \
                       mpas_ocn_tracer_advection_std_vadv4.o \
                       mpas_ocn_tracer_advection_mono.o \
-                      mpas_ocn_tracer_advection_helpers.o \
+                      mpas_ocn_cdg_advection.o \
+                      mpas_ocn_cdg_basis.o \
                       mpas_ocn_tendency.o \
                       mpas_ocn_diagnostics.o \
                       mpas_ocn_time_integration.o \

Modified: branches/mpas_cdg_advection/src/core_ocean/Registry.xml
===================================================================
--- branches/mpas_cdg_advection/src/core_ocean/Registry.xml        2013-04-25 15:35:28 UTC (rev 2788)
+++ branches/mpas_cdg_advection/src/core_ocean/Registry.xml        2013-05-02 22:15:52 UTC (rev 2789)
@@ -46,7 +46,7 @@
                 &lt;dim name=&quot;nVertBasis&quot; units=&quot;unitless&quot;
                      description=&quot;The number of basis functions in the vertical direction, in each cell, used for tracer advection.&quot;
                 /&gt;
-                &lt;dim name=&quot;nHorzBasis&quot; units=&quot;unitless&quot;
+                &lt;dim name=&quot;nHorizBasis&quot; units=&quot;unitless&quot;
                      description=&quot;The number of basis functions in the horizontal direction, in each cell, used for tracer advection.&quot;
                 /&gt;
         &lt;/dims&gt;
@@ -367,6 +367,10 @@
                 /&gt;
         &lt;/nml_record&gt;
         &lt;nml_record name=&quot;advection&quot;&gt;
+                &lt;nml_option name=&quot;config_horiz_tracer_adv&quot; type=&quot;character&quot; default_value=&quot;'stencil'&quot; units=&quot;unitless&quot;
+                            description=&quot;Tracer advection method in the horizontal direction&quot;
+                            possible_values=&quot;'stencil' and 'cdg'&quot;
+                /&gt;
                 &lt;nml_option name=&quot;config_vert_tracer_adv&quot; type=&quot;character&quot; default_value=&quot;'stencil'&quot; units=&quot;unitless&quot;
                             description=&quot;Method for interpolating tracer values from layer centers to layer edges&quot;
                             possible_values=&quot;'spline' and 'stencil'&quot;
@@ -576,7 +580,7 @@
                              description=&quot;A tracer with value 1.0 to test conservation.  {\color{red} REMOVE THIS VARIABLE}&quot;
                         /&gt;
                 &lt;/var_array&gt;
-                &lt;var_array name=&quot;tracerMoms&quot; type=&quot;real&quot; dimensions=&quot;nVertBasis nHorzBasis nVertLevels nCells Time&quot;&gt;
+                &lt;var_array name=&quot;tracerMoms&quot; type=&quot;real&quot; dimensions=&quot;nVertBasis nHorizBasis nVertLevels nCells Time&quot;&gt;
                         &lt;var name=&quot;temperatureMoms&quot; array_group=&quot;dynamicsMoms&quot; streams=&quot;iro&quot; units=&quot;degrees Celsius&quot;
                              description=&quot;potential temperature moments&quot;
                         /&gt;
@@ -584,7 +588,7 @@
                              description=&quot;salinity moments&quot;
                         /&gt;
                         &lt;var name=&quot;tracer1Moms&quot; array_group=&quot;testingMoms&quot; streams=&quot;iro&quot; units=&quot;unitless&quot;
-                             description=&quot;Moments of test tracer.  {\color{red} REMOVE IF tracer1 IS REMOVED&quot;
+                             description=&quot;Moments of test tracer.  {\color{red} REMOVE IF tracer1 IS REMOVED}&quot;
                         /&gt;
                 &lt;/var_array&gt;
                 &lt;var name=&quot;xtime&quot; type=&quot;text&quot; dimensions=&quot;Time&quot; streams=&quot;ro&quot; units=&quot;unitless&quot;
@@ -1048,6 +1052,12 @@
                 &lt;var name=&quot;seaSurfacePressure&quot; type=&quot;real&quot; dimensions=&quot;nCells Time&quot; streams=&quot;ir&quot; units=&quot;Pa&quot;
                      description=&quot;Pressure defined at the sea surface.&quot;
                 /&gt;
+                &lt;var name=&quot;horizInvMassMatrix&quot; type=&quot;real&quot; dimensions=&quot;nHorizBasis nHorizBasis nCells&quot; units=&quot;unitless&quot;
+                     description=&quot;The inverse of the mass matrix for the horizontal basis.&quot;
+                /&gt;
+                &lt;var name=&quot;horizBasisOffset&quot; type=&quot;real&quot; dimensions=&quot;nHorizBasis nCells&quot; units=&quot;unitless&quot;
+                     description=&quot;The horizontal basis offset so that the leading basis coefficient is the cell average.&quot;
+                /&gt;
         &lt;/var_struct&gt;
         &lt;var_struct name=&quot;tend&quot; time_levs=&quot;1&quot;&gt;
                 &lt;var_array name=&quot;tracers&quot; type=&quot;real&quot; dimensions=&quot;nVertLevels nCells Time&quot;&gt;
@@ -1061,7 +1071,7 @@
                              description=&quot;time tendency of an arbitary tracer&quot;
                         /&gt;
                 &lt;/var_array&gt;
-                &lt;var_array name=&quot;tracerMoms&quot; type=&quot;real&quot; dimensions=&quot;nVertBasis nHorzBasis nVertLevels nCells Time&quot;&gt;
+                &lt;var_array name=&quot;tracerMoms&quot; type=&quot;real&quot; dimensions=&quot;nVertBasis nHorizBasis nVertLevels nCells Time&quot;&gt;
                         &lt;var name=&quot;tend_temperatureMoms&quot; array_group=&quot;dynamicsMoms&quot; units=&quot;K s^{-1}&quot; name_in_code=&quot;temperatureMoms&quot;
                              description=&quot;time tendency of potential temperature moments&quot;
                         /&gt;

Added: branches/mpas_cdg_advection/src/core_ocean/mpas_ocn_cdg_advection.F
===================================================================
--- branches/mpas_cdg_advection/src/core_ocean/mpas_ocn_cdg_advection.F                                (rev 0)
+++ branches/mpas_cdg_advection/src/core_ocean/mpas_ocn_cdg_advection.F        2013-05-02 22:15:52 UTC (rev 2789)
@@ -0,0 +1,91 @@
+!|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+!
+!  mpas_ocn_cdg
+!
+!&gt; \brief MPAS CDG tracer advection driver
+!&gt; \author Rob Lowrie
+!&gt; \date   05/02/13
+!&gt; \version SVN:$Id:$
+!&gt; \details
+!&gt;  This module contains driver routine for CDG tracer advection tendencys
+!&gt;  as well as the routines for setting up its mesh data and 
+!&gt;  initialization
+!
+!-----------------------------------------------------------------------
+
+module mpas_ocn_cdg_advection
+
+  use mpas_kind_types
+  use mpas_grid_types
+  use mpas_configure
+  
+  use mpas_ocn_cdg_basis
+  
+  implicit none
+  private
+  save
+  
+  public :: mpas_ocn_cdg_advection_init
+  
+  logical :: cdgHorizTracerAdvOn
+  
+contains
+
+!|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+!
+!  routine mpas_ocn_cdg_advection_tend
+!
+!&gt; \brief MPAS ocean cdg tracer advection tendency
+!&gt; \author Rob Lowrie
+!&gt; \date   05/02/13
+!&gt; \version SVN:$Id:$
+!&gt; \details
+!&gt;  This routine is the driver routine for computing the tendency for
+!&gt;  the cdg advection of tracers.
+!
+!-----------------------------------------------------------------------
+  subroutine mpas_ocn_cdg_advection_tend(tracerMoms, normalThicknessFlux, w, &amp;
+       &amp; layerThickness, verticalCellSize, dt, grid, tend_layerThickness, tend)!{{{
+    
+    real (kind=RKIND), dimension(:,:,:,:), intent(inout) :: tend !&lt; Input/Output: tracer tendency
+    real (kind=RKIND), dimension(:,:,:,:), intent(in) :: tracerMoms !&lt; Input/Output: tracer moment values
+    real (kind=RKIND), dimension(:,:), intent(in) :: normalThicknessFlux !&lt; Input: Thickness weighted horizontal velocity
+    real (kind=RKIND), dimension(:,:), intent(in) :: w  !&lt; Input: Vertical velocity
+    real (kind=RKIND), dimension(:,:), intent(in) :: layerThickness  !&lt; Input: Thickness field
+    real (kind=RKIND), dimension(:,:), intent(in) :: verticalCellSize !&lt; Input: Distance between vertical interfaces of a cell
+    real (kind=RKIND), intent(in) :: dt !&lt; Input: Time step
+    type (mesh_type), intent(in) :: grid !&lt; Input: grid information
+    real (kind=RKIND), dimension(:,:), intent(in) :: tend_layerThickness !&lt; Input: Thickness tendency information
+    
+    if(.not. cdgHorizTracerAdvOn) return
+  end subroutine mpas_ocn_cdg_advection_tend!}}}
+
+!|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+!
+!  routine mpas_ocn_cdg_init
+!
+!&gt; \brief MPAS ocean tracer advection tendency
+!&gt; \author Rob Lowrie
+!&gt; \date   05/02/13
+!&gt; \version SVN:$Id:$
+!&gt; \details
+!&gt;  This routine is the driver routine for initialization of 
+!&gt;  the cdg tracer advection routines.
+!
+!-----------------------------------------------------------------------
+  subroutine mpas_ocn_cdg_advection_init(err)!{{{
+
+    integer, intent(inout) :: err !&lt; Input/Output: Error flag
+    
+    integer :: err_tmp
+    
+    err = 0
+    
+    cdgHorizTracerAdvOn = .false.
+    
+    if( (.not. config_disable_tr_adv) .and. &amp;
+         (trim(config_horiz_tracer_adv) == 'cdg') ) cdgHorizTracerAdvOn = .true. 
+    
+  end subroutine mpas_ocn_cdg_advection_init !}}}
+  
+end module mpas_ocn_cdg_advection

Added: branches/mpas_cdg_advection/src/core_ocean/mpas_ocn_cdg_basis.F
===================================================================
--- branches/mpas_cdg_advection/src/core_ocean/mpas_ocn_cdg_basis.F                                (rev 0)
+++ branches/mpas_cdg_advection/src/core_ocean/mpas_ocn_cdg_basis.F        2013-05-02 22:15:52 UTC (rev 2789)
@@ -0,0 +1,2888 @@
+!|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+!
+!  ocn_cdg_basis
+!
+!&gt; \brief MPAS ocean tracer advection driver
+!&gt; \author Rob Lowrie
+!&gt; \date   05/01/2013
+!&gt; \version SVN:$Id:$
+!&gt; \details
+!&gt;  This module computes information related to the basis for the 
+!&gt;  characteristic discontinuous galerkin (CDG) method.  Routines in this
+!&gt;  module may be used both by the core simulator and grid initialization
+!&gt; (basin) codes.
+!
+!-----------------------------------------------------------------------
+
+module mpas_ocn_cdg_basis
+
+  use mpas_kind_types, only : RKIND
+
+  implicit none
+  private
+  save
+
+  ! The polynomial order of the basis.
+  ! We assume a tensor-product basis.
+  integer :: order
+
+  ! Number of gauss points to integrate over any triangle
+  integer :: nTriGauss
+
+  ! Gauss point on a triangle
+  type tri_gauss_pt
+     real (kind=RKIND), dimension(3) :: bc ! barycentric coordinate
+     real (kind=RKIND) :: weight
+  end type tri_gauss_pt
+
+  ! Quadrature points over a triangle (length nTriGauss)
+  type (tri_gauss_pt), dimension(:), allocatable :: gaussTri
+
+  ! Gauss point on a cell, projected to plane
+  type cell_gauss_pt
+     real (kind=RKIND), dimension(2) :: coord
+     real (kind=RKIND) :: weight
+  end type cell_gauss_pt
+
+  public :: mpas_ocn_cdg_basis_init
+
+contains
+
+  !|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+  !
+  !  routine mpas_ocn_cdg_basis_init
+  !
+  !&gt; \brief Initialize the basis for CDG.
+  !&gt; \author Rob Lowrie
+  !&gt; \date   05/01/2013
+  !&gt; \version SVN:$Id:$
+  !&gt; \details
+  !&gt;  This routine initializes basis info for CDG.
+  !
+  !-----------------------------------------------------------------------
+  subroutine mpas_ocn_cdg_basis_init(grid, err)!{{{
+
+    use mpas_grid_types, only : mesh_type
+    use ocn_advection  , only : ocn_migs
+
+    implicit none
+
+    type (mesh_type) :: grid !&lt; Input: Grid information
+    integer, intent(out) :: err
+
+    ! Pointers for arrays in grid
+    real (kind=RKIND), dimension(:,:,:), pointer :: horizInvMassMatrix
+    real (kind=RKIND), dimension(:,:), pointer :: horizBasisOffset
+    real (kind=RKIND), dimension(:), pointer :: xCell, yCell, zCell
+    real (kind=RKIND), dimension(:), pointer :: xVertex, yVertex, zVertex
+    integer, dimension(:,:), pointer :: verticesOnCell, cellsOnEdge
+    integer, dimension(:), pointer :: nEdgesOnCell
+
+    ! Local variables
+    type (cell_gauss_pt), dimension(:), allocatable :: gaussPts ! a cell's gauss points
+    real (kind=RKIND), dimension(:,:), allocatable :: basisAtGauss ! basis at gauss points
+    real (kind=RKIND), dimension(grid%maxEdges + 1) :: xvp, yvp
+    real (kind=RKIND), dimension(grid%nHorizBasis) :: offset
+    real (kind=RKIND), dimension(grid%nHorizBasis,grid%nHorizBasis) :: matrix
+    real (kind=RKIND), dimension(2,3) :: cTri
+    real (kind=RKIND) :: areaTri, areaCell, xcp, ycp
+    real (kind=RKIND) :: tmp
+    integer :: iCell, iVert, nCells, nVert, maxCellGauss, nCellGauss, nHorizBasis
+    integer :: ig, igt, iTri, i, j, nTri
+    integer, dimension(grid%nHorizBasis) :: indx ! work array for ocn_migs
+
+    horizInvMassMatrix =&gt; grid%horizInvMassMatrix%array
+    horizBasisOffset   =&gt; grid%horizBasisOffset%array
+    cellsOnEdge        =&gt; grid%cellsOnEdge%array
+    verticesOnCell     =&gt; grid%verticesOnCell%array
+    nEdgesOnCell       =&gt; grid%nEdgesOnCell%array
+    xCell              =&gt; grid%xCell%array
+    yCell              =&gt; grid%yCell%array
+    zCell              =&gt; grid%zCell%array
+    xVertex            =&gt; grid%xVertex%array
+    yVertex            =&gt; grid%yVertex%array
+    zVertex            =&gt; grid%zVertex%array
+
+    nCells = grid%nCells
+    nHorizBasis = grid%nHorizBasis
+    err = 0
+
+    ! Determine the polynomial order assuming a tensor-product basis
+    i = nint(sqrt(real(nHorizBasis)))
+    if ( i * i .ne. nHorizBasis ) then
+       write(*,*) 'nHorizBasis=', nHorizBasis, ' is not the square of an integer!'
+       err = 1
+       return
+    end if
+    order = i - 1
+
+    write(*,*) 'CDG: polynomial order = ', order
+
+    ! Initialize the triangle integration
+    call init_tri_integration(err)
+
+    ! Loop over the cells and compute the basis offset and mass matrix inverse.
+    maxCellGauss = nTriGauss * grid%maxEdges
+    allocate(gaussPts(maxCellGauss))
+    allocate(basisAtGauss(nHorizBasis, maxCellGauss))
+
+    do iCell = 1, nCells
+
+       ! Compute the cell's gauss points from the triangles that make it up.
+       nTri = nEdgesOnCell(iCell)
+       nCellGauss = nTri * nTriGauss
+       nVert = nTri + 1
+       ! assume in the plane
+       xcp = xCell(iCell)
+       ycp = yCell(iCell)
+       do i = 1, nVert-1
+          iVert = verticesOnCell(i, iCell)
+          xvp(i) = xVertex(iVert)
+          yvp(i) = yVertex(iVert)
+       end do
+       ! project onto the plane
+       !         normal = localVerticalUnitVectors(:,iCell))
+       !         call project_to_plane(xCell(iCell), yCell(iCell), zCell(iCell), &amp;
+       !           &amp;   xcp, ycp, normal)
+       !         do i = 1, nVert-1
+       !            iVert = verticesOnCell(i, iCell)
+       !            call project_to_plane(xVertex(iVert), yVertex(iVert), zVertex(iVert), &amp;
+       !               &amp;  xvp(iVert), yvp(iVert), normal)
+       !         end do
+
+       ! wrap around vertices
+       xvp(nVert) = xvp(1)
+       yvp(nVert) = yvp(1)
+
+       ig = 0 ! gaussPts index
+       areaCell = 0.0
+       do iTri = 1, nTri ! loop over triangles that make up the cell
+          cTri(1,1) = 0.0_RKIND ! origin at xcp, ycp
+          cTri(2,1) = 0.0_RKIND
+          cTri(1,2) = xvp(iTri)   - xcp
+          cTri(2,2) = yvp(iTri)   - ycp
+          cTri(1,3) = xvp(iTri+1) - xcp
+          cTri(2,3) = yvp(iTri+1) - ycp
+          ! compute area of triangle...
+          areaTri = 0.5_RKIND * abs(cTri(2,3) * cTri(1,2) - cTri(1,3) * cTri(2,2))
+          areaCell = areaCell + areaTri
+          do igt = 1, nTriGauss
+             ig = ig + 1
+             gaussPts(ig)%weight = gaussTri(igt)%weight * areaTri
+             do i = 1, 2
+                gaussPts(ig)%coord(i) = 0.0_RKIND
+                do j = 1, 3
+                   gaussPts(ig)%coord(i) = gaussPts(ig)%coord(i) +&amp;
+                        &amp; gaussTri(igt)%bc(1) * cTri(i,j)
+                end do ! j
+             end do ! i
+          end do ! igt
+       end do ! iTri
+
+       ! At least on the plane, areaCell should match that stored by grid:
+       ! write(*,*) 'CDG: Area check: ', iCell, areaCell, grid%areaCell%array(iCell)
+
+       do ig = 1, nCellGauss
+          gaussPts(ig)%weight = gaussPts(ig)%weight / areaCell
+       end do
+
+       ! Evaluate the basis at the gauss points.  The offset is zero
+       ! at this point, so this is not the final basis, but that before
+       ! applying the offset.
+       offset = 0.0_RKIND
+       do ig = 1, nCellGauss
+          call eval_basis(gaussPts(ig)%coord(1), gaussPts(ig)%coord(2),&amp;
+               &amp; offset, basisAtGauss(:,ig))
+       end do
+
+       ! Determine the basis offset for this cell.  The first offset is zero,
+       ! so we start the loop at 2.
+       do i = 2, nHorizBasis
+          do ig = 1, nCellGauss
+             offset(i) = offset(i) + gaussPts(ig)%weight * basisAtGauss(i,ig)
+          end do
+       end do
+       horizBasisOffset(:,iCell) = offset
+
+       ! Re-evaluate the basis at the gauss points, using the proper offset
+       do ig = 1, nCellGauss
+          call eval_basis(gaussPts(ig)%coord(1), gaussPts(ig)%coord(2),&amp;
+               &amp; offset, basisAtGauss(:,ig))
+       end do
+
+       ! Compute the mass matrix.
+       matrix = 0.0_RKIND
+       do i = 1, nHorizBasis
+          do j = 1, nHorizBasis
+             do ig = 1, nCellGauss
+                matrix(i,j) = matrix(i,j) + gaussPts(ig)%weight *&amp;
+                     &amp; basisAtGauss(i,ig) * basisAtGauss(j,ig)
+             end do
+          end do
+       end do
+
+       ! Invert the mass matrix
+       call ocn_migs(matrix, nHorizBasis, horizInvMassMatrix(:,:,iCell), indx)
+       !write(*,*) 'CDG mass matrix check:', iCell, matmul(matrix,&amp;
+       !     &amp; horizInvMassMatrix(:,:,iCell))
+       
+    end do ! iCell
+
+    deallocate(gaussPts)
+    deallocate(basisAtgauss)
+
+  end subroutine mpas_ocn_cdg_basis_init!}}}
+
+  !|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+  !
+  !  routine eval_basis
+  !
+  !&gt; \brief Evaluates the basis at a given coordinate
+  !&gt; \author Rob Lowrie
+  !&gt; \date   05/01/2013
+  !&gt; \version SVN:$Id:$
+  !&gt; \details
+  !&gt;  This routine evaluates the basis functions at a given coordinate.
+  !&gt;  The basis is tensor-product polynomials, with a supplied offset so that
+  !&gt;  its integration over a cell is zero except for the first (constant) 
+  !&gt;  basis function.
+  !
+  !-----------------------------------------------------------------------
+  subroutine eval_basis(x, y, offset, basis)!{{{
+    ! coorindate at which to evaluate basis, RELATIVE TO CELL CENTROID
+    real (RKIND), intent(in) :: x, y
+    ! offset (length nHorizBasis).  Parameter b_{z,j} in memo.
+    real (RKIND), dimension(:), intent(in) :: offset
+    ! basis computed (length nHorizBasis)
+    real (RKIND), dimension(:), intent(out) :: basis
+
+    ! Local variables
+    integer :: ib, i, j
+    real (RKIND) :: xExp, yExp ! x^n, y^n
+
+    ib = 0 ! basis index
+    yExp = 1.0_RKIND
+    do j = 0, order
+       xExp = 1.0_RKIND
+       do i = 0, order
+          ib = ib + 1
+          basis(ib) = xExp * yExp - offset(ib)
+          xExp = xExp * x
+       end do
+       yExp = yExp * y
+    end do
+
+  end subroutine eval_basis!}}}
+
+  !|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+  ! PRIVATE IMPLEMENTATION ROUTINES ARE BELOW
+  !|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+
+  !|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+  !
+  !  routine init_tri_integration
+  !
+  !&gt; \brief Initialize the triangle integration
+  !&gt; \author Rob Lowrie
+  !&gt; \date   05/01/2013
+  !&gt; \version SVN:$Id:$
+  !&gt; \details
+  !&gt;  This routine initializes integration over triangles
+  !
+  !-----------------------------------------------------------------------
+  subroutine init_tri_integration(err)!{{{
+
+    integer, intent(out) :: err
+
+    real (RKIND), dimension(:), allocatable :: quad_w, quad_x, quad_y
+    real (RKIND) :: sumwt
+    integer :: ig
+    integer :: triOrder
+
+    err = 0
+
+    ! Given order, set the polynomial order we want to integrate exactly on
+    ! the triangle.  We have a tensor-product basis, which contains the
+    ! polynomial x^order * y^order.  CDG has quadratics in the basis, which
+    ! means we need 4*order to do the integration exactly, not accounting for
+    ! any metric terms on the sphere.
+    triOrder = -1 ! auto compute.  We may want to make this an input option
+    if ( triOrder .lt. 0 ) then
+       triOrder = 4 * order
+    endif
+
+    ! Determine Gauss points for integration on triangles
+
+    select case ( triOrder )
+    case (0:1)
+       nTriGauss = 1
+       ! Below generated from triangle_quadrature/n.F90
+    case (2)
+       nTriGauss = 3
+    case (3:4)
+       nTriGauss = 6
+    case (5)
+       nTriGauss = 10
+    case (6)
+       nTriGauss = 11
+    case (7)
+       nTriGauss = 15
+    case (8)
+       nTriGauss = 16
+    case (9)
+       nTriGauss = 19
+    case (10)
+       nTriGauss = 24
+    case (11)
+       nTriGauss = 27
+    case (12)
+       nTriGauss = 32
+    case (13)
+       nTriGauss = 36
+    case (14)
+       nTriGauss = 42
+    case (15)
+       nTriGauss = 46
+    case (16)
+       nTriGauss = 55
+    case (17:18)
+       nTriGauss = 66
+    case (19:20)
+       nTriGauss = 78
+    case (21)
+       nTriGauss = 91
+    case (22:23)
+       nTriGauss = 105
+    case (24:25)
+       nTriGauss = 120
+       ! end of triangle_quadrature/n.F90
+    case default
+       write(*,*) 'Basis not supported: triOrder =', triOrder
+       err = 1
+       return
+    end select
+
+    ! Set the temporary arrays for the points and corresponding weights
+
+    allocate(quad_w(nTriGauss))
+    allocate(quad_x(nTriGauss))
+    allocate(quad_y(nTriGauss))
+
+    select case ( triOrder )
+    case (0:1)
+       quad_w = (/ 1.0_RKIND /)
+       quad_x = (/ 3.33333333333333333d-01 /)
+       quad_y = (/ 3.33333333333333333d-01 /)
+       ! Below generated from triangle_quadrature/points.F90
+    case (2)
+       quad_w = (/ &amp;
+            3.33333333333333259d-01, &amp;
+            3.33333333333333315d-01, &amp;
+            3.33333333333333481d-01 /)
+       quad_x = (/ &amp;
+            1.66666666666666685d-01, &amp;
+            6.66666666666666741d-01, &amp;
+            1.66666666666666685d-01 /)
+       quad_y = (/ &amp;
+            6.66666666666666741d-01, &amp;
+            1.66666666666666685d-01, &amp;
+            1.66666666666666685d-01 /)
+    case (3:4)
+       quad_w = (/ &amp;
+            1.09951743655321843d-01, &amp;
+            1.09951743655321857d-01, &amp;
+            1.09951743655321885d-01, &amp;
+            2.23381589678011389d-01, &amp;
+            2.23381589678011527d-01, &amp;
+            2.23381589678011527d-01 /)
+       quad_x = (/ &amp;
+            9.15762135097704655d-02, &amp;
+            8.16847572980458514d-01, &amp;
+            9.15762135097710761d-02, &amp;
+            1.08103018168070275d-01, &amp;
+            4.45948490915965612d-01, &amp;
+            4.45948490915964113d-01 /)
+       quad_y = (/ &amp;
+            8.16847572980458514d-01, &amp;
+            9.15762135097710761d-02, &amp;
+            9.15762135097704655d-02, &amp;
+            4.45948490915964113d-01, &amp;
+            1.08103018168070275d-01, &amp;
+            4.45948490915965612d-01 /)
+    case (5)
+       quad_w = (/ &amp;
+            1.31356049751916795d-02, &amp;
+            1.31358306034076201d-02, &amp;
+            1.37081973800151392d-02, &amp;
+            1.17419193291163376d-01, &amp;
+            1.17420611913379477d-01, &amp;
+            1.24012589655715613d-01, &amp;
+            1.24015246126072495d-01, &amp;
+            1.25930230276426303d-01, &amp;
+            1.25933026682913923d-01, &amp;
+            2.25289469095714456d-01 /)
+       quad_x = (/ &amp;
+            0.00000000000000000d+00, &amp;
+            1.00000000000000000d+00, &amp;
+            0.00000000000000000d+00, &amp;
+            2.67327353118498978d-01, &amp;
+            6.72817552946136210d-01, &amp;
+            6.49236350054349654d-02, &amp;
+            6.71649853904175198d-01, &amp;
+            6.54032456800035522d-02, &amp;
+            2.69376706913982855d-01, &amp;
+            3.38673850389605513d-01 /)
+       quad_y = (/ &amp;
+            1.00000000000000000d+00, &amp;
+            0.00000000000000000d+00, &amp;
+            0.00000000000000000d+00, &amp;
+            6.72819921871012694d-01, &amp;
+            2.67328859948191944d-01, &amp;
+            6.71653011149382917d-01, &amp;
+            6.49251690028951334d-02, &amp;
+            2.69378936645285116d-01, &amp;
+            6.54054874919145490d-02, &amp;
+            3.38679989302702156d-01 /)
+    case (6)
+       quad_w = (/ &amp;
+            3.80680718529555623d-02, &amp;
+            3.83793553077528410d-02, &amp;
+            4.62004567445618367d-02, &amp;
+            5.34675894441989999d-02, &amp;
+            8.37558269657456833d-02, &amp;
+            1.01644833025517037d-01, &amp;
+            1.01861524461366940d-01, &amp;
+            1.11421831660001677d-01, &amp;
+            1.12009450262946106d-01, &amp;
+            1.24787571437558295d-01, &amp;
+            1.88403488837394911d-01 /)
+       quad_x = (/ &amp;
+            5.72549866774768601d-02, &amp;
+            8.95362640024579104d-01, &amp;
+            6.84475748456514044d-01, &amp;
+            6.87462559150295305d-02, &amp;
+            6.15676205575839575d-01, &amp;
+            6.27946141197789465d-01, &amp;
+            6.29091383418635686d-02, &amp;
+            6.83782119205099126d-02, &amp;
+            2.87529458374392255d-01, &amp;
+            3.28783556413134614d-01, &amp;
+            3.12290405013644801d-01 /)
+       quad_y = (/ &amp;
+            8.95498146789879490d-01, &amp;
+            6.18282212503219533d-02, &amp;
+            2.33437384976827311d-02, &amp;
+            6.00302757472630025d-02, &amp;
+            3.33461808341377175d-01, &amp;
+            1.59189185992151483d-01, &amp;
+            6.55295093705452469d-01, &amp;
+            3.09117685428267230d-01, &amp;
+            6.36426509179620181d-01, &amp;
+            7.70240056424634223d-02, &amp;
+            3.52344786445899505d-01 /)
+    case (7)
+       quad_w = (/ &amp;
+            5.12790870460473960d-03, &amp;
+            5.12790870460473960d-03, &amp;
+            5.12790870460473960d-03, &amp;
+            5.58023523323444987d-02, &amp;
+            5.58023523323445195d-02, &amp;
+            5.58023523323445819d-02, &amp;
+            5.58023523323446027d-02, &amp;
+            5.58023523323446166d-02, &amp;
+            5.58023523323446582d-02, &amp;
+            8.39887797667335373d-02, &amp;
+            8.39887797667336067d-02, &amp;
+            8.39887797667336206d-02, &amp;
+            1.32611940197305850d-01, &amp;
+            1.32611940197305905d-01, &amp;
+            1.32611940197305933d-01 /)
+       quad_x = (/ &amp;
+            1.00000000000000000d+00, &amp;
+            0.00000000000000000d+00, &amp;
+            0.00000000000000000d+00, &amp;
+            1.73896050734549223d-01, &amp;
+            7.83965665101213904d-01, &amp;
+            4.21382841642368722d-02, &amp;
+            1.73896050734549223d-01, &amp;
+            7.83965665101213904d-01, &amp;
+            4.21382841642368722d-02, &amp;
+            4.74388086175152879d-01, &amp;
+            5.12238276496914668d-02, &amp;
+            4.74388086175155654d-01, &amp;
+            2.38561530018069179d-01, &amp;
+            5.22876939963858534d-01, &amp;
+            2.38561530018072343d-01 /)
+       quad_y = (/ &amp;
+            0.00000000000000000d+00, &amp;
+            1.00000000000000000d+00, &amp;
+            0.00000000000000000d+00, &amp;
+            7.83965665101213904d-01, &amp;
+            4.21382841642368722d-02, &amp;
+            1.73896050734549223d-01, &amp;
+            4.21382841642368722d-02, &amp;
+            1.73896050734549223d-01, &amp;
+            7.83965665101213904d-01, &amp;
+            4.74388086175155654d-01, &amp;
+            4.74388086175152879d-01, &amp;
+            5.12238276496914668d-02, &amp;
+            5.22876939963858534d-01, &amp;
+            2.38561530018072343d-01, &amp;
+            2.38561530018069179d-01 /)
+    case (8)
+       quad_w = (/ &amp;
+            2.72303141744348991d-02, &amp;
+            2.72303141744349199d-02, &amp;
+            2.72303141744349199d-02, &amp;
+            2.72303141744349789d-02, &amp;
+            2.72303141744349789d-02, &amp;
+            2.72303141744349997d-02, &amp;
+            3.24584976231980793d-02, &amp;
+            3.24584976231980793d-02, &amp;
+            3.24584976231981001d-02, &amp;
+            9.50916342672845638d-02, &amp;
+            9.50916342672846193d-02, &amp;
+            9.50916342672846193d-02, &amp;
+            1.03217370534718286d-01, &amp;
+            1.03217370534718314d-01, &amp;
+            1.03217370534718314d-01, &amp;
+            1.44315607677787283d-01 /)
+       quad_x = (/ &amp;
+            7.28492392955404355d-01, &amp;
+            8.39477740995753056d-03, &amp;
+            2.63112829634638112d-01, &amp;
+            8.39477740995753056d-03, &amp;
+            7.28492392955404355d-01, &amp;
+            2.63112829634638112d-01, &amp;
+            5.05472283170310122d-02, &amp;
+            5.05472283170309566d-02, &amp;
+            8.98905543365938087d-01, &amp;
+            4.59292588292723236d-01, &amp;
+            8.14148234145536387d-02, &amp;
+            4.59292588292723125d-01, &amp;
+            1.70569307751760324d-01, &amp;
+            1.70569307751760046d-01, &amp;
+            6.58861384496479685d-01, &amp;
+            3.33333333333333370d-01 /)
+       quad_y = (/ &amp;
+            8.39477740995753056d-03, &amp;
+            2.63112829634638112d-01, &amp;
+            7.28492392955404355d-01, &amp;
+            7.28492392955404355d-01, &amp;
+            2.63112829634638112d-01, &amp;
+            8.39477740995753056d-03, &amp;
+            5.05472283170309566d-02, &amp;
+            8.98905543365938087d-01, &amp;
+            5.05472283170310122d-02, &amp;
+            8.14148234145536387d-02, &amp;
+            4.59292588292723125d-01, &amp;
+            4.59292588292723236d-01, &amp;
+            6.58861384496479685d-01, &amp;
+            1.70569307751760324d-01, &amp;
+            1.70569307751760046d-01, &amp;
+            3.33333333333333370d-01 /)
+    case (9)
+       quad_w = (/ &amp;
+            1.58676858667487208d-02, &amp;
+            2.19524732703951786d-02, &amp;
+            2.40354401213296598d-02, &amp;
+            2.58522468388647786d-02, &amp;
+            2.71951393759608216d-02, &amp;
+            3.02097786027936584d-02, &amp;
+            3.70093240446550606d-02, &amp;
+            4.11482921825866571d-02, &amp;
+            4.26331605467379776d-02, &amp;
+            4.71413336863812371d-02, &amp;
+            5.45129844125978591d-02, &amp;
+            6.26632599630084636d-02, &amp;
+            6.31379657675310846d-02, &amp;
+            7.14623133641135444d-02, &amp;
+            7.51048615652924606d-02, &amp;
+            7.98259878444318866d-02, &amp;
+            8.16607475819435963d-02, &amp;
+            9.37481686311500140d-02, &amp;
+            1.04838836333477403d-01 /)
+       quad_x = (/ &amp;
+            2.26739052759332704d-01, &amp;
+            4.77345862087794129d-02, &amp;
+            2.26577168977105115d-02, &amp;
+            9.10074385862343016d-01, &amp;
+            4.41452661673673585d-02, &amp;
+            4.79944340675050984d-01, &amp;
+            7.42657808541620557d-01, &amp;
+            7.43369623518591927d-01, &amp;
+            2.79454959355581213d-02, &amp;
+            3.71861932583309532d-02, &amp;
+            2.22639561442096401d-01, &amp;
+            1.16082059855864395d-01, &amp;
+            4.73822270420208358d-01, &amp;
+            4.77758170054016440d-01, &amp;
+            6.46387881792721997d-01, &amp;
+            2.85357695207302253d-01, &amp;
+            2.04236860041029755d-01, &amp;
+            1.59370884213907937d-01, &amp;
+            3.95698265017060125d-01 /)
+       quad_y = (/ &amp;
+            0.00000000000000000d+00, &amp;
+            9.16183156802148568d-01, &amp;
+            7.97193825386026345d-01, &amp;
+            4.44666861644595901d-02, &amp;
+            4.81588383854628099d-02, &amp;
+            5.01294615157430568d-01, &amp;
+            3.03405081749971196d-02, &amp;
+            2.22245578824042445d-01, &amp;
+            5.25527023486726308d-01, &amp;
+            2.39263537482135413d-01, &amp;
+            7.29063709376736702d-01, &amp;
+            6.62507673462198188d-01, &amp;
+            4.60334709656892230d-02, &amp;
+            4.01038691325781238d-01, &amp;
+            1.65342747538830548d-01, &amp;
+            4.92973630851354261d-01, &amp;
+            1.19056565447230756d-01, &amp;
+            3.66261159763432431d-01, &amp;
+            2.27511600022304139d-01 /)
+    case (10)
+       quad_w = (/ &amp;
+            1.06666912759125800d-02, &amp;
+            1.10669467822470807d-02, &amp;
+            1.19003048142356203d-02, &amp;
+            1.33990807858568005d-02, &amp;
+            1.46083292231216806d-02, &amp;
+            1.48466236466805006d-02, &amp;
+            1.51562619175656995d-02, &amp;
+            1.52030940260127201d-02, &amp;
+            1.76558445929621798d-02, &amp;
+            1.95594122175219015d-02, &amp;
+            3.14147023606688378d-02, &amp;
+            3.23026020234572775d-02, &amp;
+            4.29623293920793209d-02, &amp;
+            5.25366591024116411d-02, &amp;
+            5.27303814088390180d-02, &amp;
+            5.49156043938543587d-02, &amp;
+            5.79741405986992225d-02, &amp;
+            6.17422458661954221d-02, &amp;
+            6.26879253009135773d-02, &amp;
+            6.61861344752598668d-02, &amp;
+            7.40796473367798941d-02, &amp;
+            8.44144425597100762d-02, &amp;
+            8.67240386276647568d-02, &amp;
+            9.52665572713499026d-02 /)
+       quad_x = (/ &amp;
+            3.81025708546434009d-03, &amp;
+            8.38653495001090432d-01, &amp;
+            0.00000000000000000d+00, &amp;
+            7.77575184294291066d-01, &amp;
+            4.77683817720224169d-02, &amp;
+            1.09391420571199292d-02, &amp;
+            4.63743838674305409d-01, &amp;
+            9.30498469002630890d-01, &amp;
+            3.90997455504232816d-02, &amp;
+            4.87984378053974988d-01, &amp;
+            1.93059032242519357d-01, &amp;
+            2.23763587742758507d-01, &amp;
+            3.60362667879077225d-02, &amp;
+            7.67776801700239542d-01, &amp;
+            1.09549598555854666d-01, &amp;
+            6.42033653186626641d-01, &amp;
+            1.09994390556304500d-01, &amp;
+            3.39472903118005542d-01, &amp;
+            8.41985221155437391d-02, &amp;
+            5.79663251054863493d-01, &amp;
+            3.64197444303392626d-01, &amp;
+            2.75863340893159670d-01, &amp;
+            2.07761165754848265d-01, &amp;
+            4.81232890624642473d-01 /)
+       quad_y = (/ &amp;
+            8.68543869430765447d-01, &amp;
+            1.61346504998909568d-01, &amp;
+            3.93667744707220102d-01, &amp;
+            0.00000000000000000d+00, &amp;
+            9.28994869857879046d-01, &amp;
+            1.76907306255590313d-01, &amp;
+            0.00000000000000000d+00, &amp;
+            2.95535928468228515d-02, &amp;
+            3.53196562525861027d-02, &amp;
+            5.03658250759439707d-01, &amp;
+            3.05734040930993288d-02, &amp;
+            7.47265917288688186d-01, &amp;
+            6.34918323792006523d-01, &amp;
+            1.06146429902899964d-01, &amp;
+            7.53294027762542395d-01, &amp;
+            2.95304455358511020d-01, &amp;
+            1.69299274889664619d-01, &amp;
+            9.53792084877216895d-02, &amp;
+            3.87296579139603525d-01, &amp;
+            8.04918946561055670d-02, &amp;
+            5.24336825589244326d-01, &amp;
+            2.64815316514967702d-01, &amp;
+            5.05505073735290855d-01, &amp;
+            2.75423850244129798d-01 /)
+    case (11)
+       quad_w = (/ &amp;
+            1.12750712157103396d-02, &amp;
+            1.31059348520882607d-02, &amp;
+            1.33743092864626999d-02, &amp;
+            1.45481086805620795d-02, &amp;
+            1.83588843901363388d-02, &amp;
+            2.13778080979136614d-02, &amp;
+            2.31123803536210405d-02, &amp;
+            2.36420595657646816d-02, &amp;
+            2.40703005006082001d-02, &amp;
+            2.67227871747326394d-02, &amp;
+            2.67566361632531405d-02, &amp;
+            2.75959001501798785d-02, &amp;
+            2.87217773675270786d-02, &amp;
+            2.94345581064335213d-02, &amp;
+            3.25968731449079799d-02, &amp;
+            4.25977048981152767d-02, &amp;
+            4.55382591201502970d-02, &amp;
+            4.91909949083745371d-02, &amp;
+            5.20605353381210223d-02, &amp;
+            5.41214764752547609d-02, &amp;
+            5.49719980088436769d-02, &amp;
+            5.49910127174223218d-02, &amp;
+            5.66458851226994617d-02, &amp;
+            5.86117684074098019d-02, &amp;
+            6.21931501112548621d-02, &amp;
+            6.61424458849612651d-02, &amp;
+            6.82413799574910218d-02 /)
+       quad_x = (/ &amp;
+            3.78021638913369207d-01, &amp;
+            3.28998222921862982d-02, &amp;
+            9.35514342858970949d-01, &amp;
+            3.42227718413591897d-02, &amp;
+            1.43545320109309000d-02, &amp;
+            2.21205351961617502d-02, &amp;
+            8.15629696932682169d-01, &amp;
+            2.77195229186185700d-02, &amp;
+            1.74005716730322557d-01, &amp;
+            3.89139811133193569d-01, &amp;
+            8.03648340539038775d-01, &amp;
+            1.64292867157134648d-01, &amp;
+            6.17588731712771510d-01, &amp;
+            2.62971997137641487d-02, &amp;
+            5.98954396299342107d-01, &amp;
+            8.17214048553817629d-02, &amp;
+            1.30354530319426898d-01, &amp;
+            7.10278681077615826d-01, &amp;
+            1.41181197309527995d-01, &amp;
+            5.31419601540799591d-01, &amp;
+            3.49929143342886495d-01, &amp;
+            3.19097378146818711d-01, &amp;
+            1.24544059105441030d-01, &amp;
+            4.11324991789046579d-01, &amp;
+            5.36342281120847142d-01, &amp;
+            2.27899558843475014d-01, &amp;
+            2.91338594369423609d-01 /)
+       quad_y = (/ &amp;
+            6.19484315331351953d-01, &amp;
+            9.36148935146756234d-01, &amp;
+            3.32685606226784114d-02, &amp;
+            3.29164038789997379d-02, &amp;
+            3.96597316695864954d-01, &amp;
+            1.68929709822902285d-01, &amp;
+            2.68071506267725801d-02, &amp;
+            8.16262337159688101d-01, &amp;
+            2.52527046383044795d-02, &amp;
+            2.25926510513065892d-02, &amp;
+            1.66556144920605720d-01, &amp;
+            8.04549747476155375d-01, &amp;
+            2.56601868330524306d-02, &amp;
+            6.19248732321101225d-01, &amp;
+            3.72727698616290959d-01, &amp;
+            3.27198781575528952d-01, &amp;
+            1.36670835343905062d-01, &amp;
+            1.38280002042923178d-01, &amp;
+            7.00992679496452276d-01, &amp;
+            1.24171485868014853d-01, &amp;
+            5.69384861953279975d-01, &amp;
+            1.16989764133234420d-01, &amp;
+            5.13531434334472348d-01, &amp;
+            2.66771680715777448d-01, &amp;
+            3.20819579094829943d-01, &amp;
+            2.87903102248196485d-01, &amp;
+            4.64945647736939915d-01 /)
+    case (12)
+       quad_w = (/ &amp;
+            4.88804981466004016d-03, &amp;
+            6.67590002736736035d-03, &amp;
+            6.84553465434368028d-03, &amp;
+            7.11975143608071983d-03, &amp;
+            7.71449237362486009d-03, &amp;
+            9.65470874243633953d-03, &amp;
+            1.05093267356025002d-02, &amp;
+            1.06808436576282806d-02, &amp;
+            1.84836858112307593d-02, &amp;
+            1.85454804216065201d-02, &amp;
+            2.06200041196821192d-02, &amp;
+            2.16850854170115188d-02, &amp;
+            2.24907461991582409d-02, &amp;
+            2.49040732015076809d-02, &amp;
+            2.50991734276851015d-02, &amp;
+            2.79437343198798392d-02, &amp;
+            2.81455586052133215d-02, &amp;
+            2.81696544597299786d-02, &amp;
+            3.05291724120725395d-02, &amp;
+            3.05752776040389383d-02, &amp;
+            3.95736057929719429d-02, &amp;
+            4.12818873954625618d-02, &amp;
+            4.59378421657917202d-02, &amp;
+            4.74995753253071376d-02, &amp;
+            4.81488050369073203d-02, &amp;
+            5.09649248767876789d-02, &amp;
+            5.33520830488209974d-02, &amp;
+            5.41468726131675987d-02, &amp;
+            5.94378339511353812d-02, &amp;
+            5.99897073271060607d-02, &amp;
+            6.31645464226566339d-02, &amp;
+            7.52220626033243550d-02 /)
+       quad_x = (/ &amp;
+            9.27348974483949817d-01, &amp;
+            2.35517332495787102d-02, &amp;
+            0.00000000000000000d+00, &amp;
+            9.45475073220970907d-01, &amp;
+            1.54064601626856090d-01, &amp;
+            0.00000000000000000d+00, &amp;
+            2.71109713562557898d-02, &amp;
+            1.46044961672175677d-01, &amp;
+            2.11522233831219486d-02, &amp;
+            1.45665147883469702d-02, &amp;
+            7.88601719223131603d-01, &amp;
+            7.49189739790679488d-01, &amp;
+            7.18714961015891052d-02, &amp;
+            3.32129083947645065d-01, &amp;
+            3.61181591189672080d-01, &amp;
+            2.43458133948799726d-01, &amp;
+            5.81689214740147453d-01, &amp;
+            5.44446676271925223d-01, &amp;
+            8.26003314017559997d-01, &amp;
+            1.16386499067277327d-01, &amp;
+            2.03768481077729768d-01, &amp;
+            6.44132203822605498d-02, &amp;
+            9.54285858105846096d-02, &amp;
+            2.44982965093490157d-01, &amp;
+            7.05667243440368241d-02, &amp;
+            6.19381257362555782d-01, &amp;
+            6.27682615680314027d-01, &amp;
+            4.22605657433460014d-01, &amp;
+            2.10785259391403912d-01, &amp;
+            4.08963804491244753d-01, &amp;
+            2.13777432530059597d-01, &amp;
+            4.09786577770025306d-01 /)
+       quad_y = (/ &amp;
+            0.00000000000000000d+00, &amp;
+            9.55269193570060349d-01, &amp;
+            8.58158884215330819d-01, &amp;
+            4.30105601064054710d-02, &amp;
+            8.45935398373143910d-01, &amp;
+            6.27315319232411794d-01, &amp;
+            2.97541174968417588d-02, &amp;
+            9.22969090596493028d-03, &amp;
+            1.55570668968979531d-01, &amp;
+            3.63846604460775103d-01, &amp;
+            1.89206330617159357d-01, &amp;
+            2.30881487661157604d-02, &amp;
+            8.54314749475804325d-01, &amp;
+            2.45062866369900011d-02, &amp;
+            6.16009296172674969d-01, &amp;
+            9.34480876044409547d-02, &amp;
+            3.93165103196048082d-01, &amp;
+            2.57162836236938808d-02, &amp;
+            7.99553848413813162d-02, &amp;
+            8.96027058005874344d-02, &amp;
+            7.17881858980523258d-01, &amp;
+            7.10081259568365208d-01, &amp;
+            2.60770682565628964d-01, &amp;
+            2.11179399098049336d-01, &amp;
+            4.97320633777965981d-01, &amp;
+            1.25122995058103870d-01, &amp;
+            2.50155003353392136d-01, &amp;
+            1.29532969004336196d-01, &amp;
+            3.79860210934019560d-01, &amp;
+            4.66317874623230710d-01, &amp;
+            5.58025289531202562d-01, &amp;
+            3.01417093209093045d-01 /)
+    case (13)
+       quad_w = (/ &amp;
+            8.31204993785496053d-03, &amp;
+            8.34058498887724035d-03, &amp;
+            8.34152845332839996d-03, &amp;
+            8.78404350412755920d-03, &amp;
+            9.22373309224491962d-03, &amp;
+            9.89712050938650056d-03, &amp;
+            1.01770197927353000d-02, &amp;
+            1.03426431970078392d-02, &amp;
+            1.04135683043238593d-02, &amp;
+            1.58909889139358003d-02, &amp;
+            1.60236017620360195d-02, &amp;
+            1.60303840572833187d-02, &amp;
+            2.15382979591389988d-02, &amp;
+            2.19236707669535000d-02, &amp;
+            2.19604836366382415d-02, &amp;
+            2.39975961845289611d-02, &amp;
+            2.41903130366630387d-02, &amp;
+            2.42433711687316013d-02, &amp;
+            2.78482244012103614d-02, &amp;
+            2.80513182178046584d-02, &amp;
+            2.82595061846425202d-02, &amp;
+            3.44644945334799599d-02, &amp;
+            3.58606668044420401d-02, &amp;
+            3.63726960488106391d-02, &amp;
+            3.94403668368527374d-02, &amp;
+            4.05057172756182193d-02, &amp;
+            4.12862649527337769d-02, &amp;
+            4.21022283665232824d-02, &amp;
+            4.21792766652497805d-02, &amp;
+            4.25984934243965399d-02, &amp;
+            4.51422664026227410d-02, &amp;
+            4.57141571742269229d-02, &amp;
+            4.58139532704597008d-02, &amp;
+            5.12786687447959605d-02, &amp;
+            5.16579830706710430d-02, &amp;
+            5.17927183596631202d-02 /)
+       quad_x = (/ &amp;
+            2.42935351590267100d-02, &amp;
+            2.65193427721589492d-02, &amp;
+            9.49212602355105739d-01, &amp;
+            3.37757637490365996d-03, &amp;
+            4.75767229810115766d-01, &amp;
+            5.19078319347068495d-01, &amp;
+            8.61683974532053032d-01, &amp;
+            1.24920975992555916d-01, &amp;
+            1.38565453861054198d-02, &amp;
+            2.11887064221684684d-02, &amp;
+            8.43229678721884035d-01, &amp;
+            1.35423179786499870d-01, &amp;
+            3.08885351067940739d-01, &amp;
+            6.68505759516907161d-01, &amp;
+            2.26545012557147207d-02, &amp;
+            2.80851540877202210d-01, &amp;
+            6.92244674905059476d-01, &amp;
+            2.68617447119433583d-02, &amp;
+            1.14177848547016014d-01, &amp;
+            7.97480792206127442d-01, &amp;
+            8.92807293894241627d-02, &amp;
+            1.05248789245504459d-01, &amp;
+            6.66302228073984537d-01, &amp;
+            2.30780373754695289d-01, &amp;
+            1.70505915754030513d-01, &amp;
+            5.08659397304250915d-01, &amp;
+            3.14182386228083088d-01, &amp;
+            4.61746081786401363d-01, &amp;
+            6.93087496081059018d-02, &amp;
+            4.65195525926824394d-01, &amp;
+            2.57862585789260357d-01, &amp;
+            6.11262776677921948d-01, &amp;
+            1.30518213593350751d-01, &amp;
+            4.28143799182810703d-01, &amp;
+            3.35699578373006347d-01, &amp;
+            2.30542429883616284d-01 /)
+       quad_y = (/ &amp;
+            9.49305929384640312d-01, &amp;
+            2.42695130640411295d-02, &amp;
+            2.65067966437248503d-02, &amp;
+            4.76731641236307790d-01, &amp;
+            5.19892182910193901d-01, &amp;
+            5.59127062020520031d-03, &amp;
+            1.33996048618183500d-02, &amp;
+            8.61305432133413928d-01, &amp;
+            1.24773371735846794d-01, &amp;
+            8.43843835122264574d-01, &amp;
+            1.35456364583036504d-01, &amp;
+            2.13482820656206197d-02, &amp;
+            2.21919663013605585d-02, &amp;
+            3.08901287938942726d-01, &amp;
+            6.69170994332099367d-01, &amp;
+            6.92471815510624422d-01, &amp;
+            2.68723345025945713d-02, &amp;
+            2.81009397322190768d-01, &amp;
+            7.97358141358579964d-01, &amp;
+            8.79806508790881292d-02, &amp;
+            1.14502056112751771d-01, &amp;
+            6.68690411992204470d-01, &amp;
+            2.27505163183202741d-01, &amp;
+            1.05457256122132637d-01, &amp;
+            5.17406439865777279d-01, &amp;
+            3.17052385520932234d-01, &amp;
+            1.81070636165903853d-01, &amp;
+            4.67859453980405904d-01, &amp;
+            4.62285604208454104d-01, &amp;
+            7.24357805668980337d-02, &amp;
+            6.13139503917716322d-01, &amp;
+            1.30036083460938590d-01, &amp;
+            2.58171382888363943d-01, &amp;
+            2.36200596981673450d-01, &amp;
+            4.31102630858834157d-01, &amp;
+            3.45601394937580519d-01 /)
+    case (14)
+       quad_w = (/ &amp;
+            2.58532291213269981d-03, &amp;
+            2.72358733961171979d-03, &amp;
+            2.91053336896823995d-03, &amp;
+            2.99949002543486000d-03, &amp;
+            3.65111768984150006d-03, &amp;
+            4.78146099026195964d-03, &amp;
+            8.18967022241464011d-03, &amp;
+            8.94667966687832071d-03, &amp;
+            1.06618575142547797d-02, &amp;
+            1.13495529545197000d-02, &amp;
+            1.16450958814012205d-02, &amp;
+            1.23892760708696394d-02, &amp;
+            1.50786793012294192d-02, &amp;
+            1.52820688103863997d-02, &amp;
+            1.59139200634128217d-02, &amp;
+            1.61905249130345590d-02, &amp;
+            1.64391067388863013d-02, &amp;
+            1.65210070258079190d-02, &amp;
+            1.65638553472261599d-02, &amp;
+            1.68312417444228812d-02, &amp;
+            1.74942959691643807d-02, &amp;
+            1.80256485933052192d-02, &amp;
+            1.85982678397202186d-02, &amp;
+            1.91637946857251794d-02, &amp;
+            2.82703910988527200d-02, &amp;
+            2.96261928714435206d-02, &amp;
+            2.98022743065983996d-02, &amp;
+            3.04418362353624586d-02, &amp;
+            3.05306172516803392d-02, &amp;
+            3.15873284647706989d-02, &amp;
+            3.78778495661073605d-02, &amp;
+            3.86089005646860217d-02, &amp;
+            3.92148741432769773d-02, &amp;
+            3.93347267346390167d-02, &amp;
+            3.98422467120363791d-02, &amp;
+            4.03613584262034614d-02, &amp;
+            4.58482682957811818d-02, &amp;
+            4.65822847625969177d-02, &amp;
+            4.71524044504945811d-02, &amp;
+            5.28411397903694388d-02, &amp;
+            5.35404465078544792d-02, &amp;
+            5.36008041483352973d-02 /)
+       quad_x = (/ &amp;
+            6.83661431823622823d-02, &amp;
+            9.48452679155304179d-01, &amp;
+            3.24869430080276800d-02, &amp;
+            9.64519125621478013d-01, &amp;
+            6.44450016214281971d-03, &amp;
+            1.40177241580495306d-02, &amp;
+            8.48224663120086153d-01, &amp;
+            1.47938922001164042d-01, &amp;
+            1.45634424107118892d-02, &amp;
+            8.35032641798012398d-01, &amp;
+            1.66302716714501864d-01, &amp;
+            1.84294991319565692d-02, &amp;
+            6.77795471690667561d-01, &amp;
+            8.79738660390500637d-01, &amp;
+            3.13563356594169784d-01, &amp;
+            3.10545251065468264d-01, &amp;
+            6.85267125915758113d-01, &amp;
+            1.77022018653748003d-02, &amp;
+            6.97597449811758197d-02, &amp;
+            7.35133444294119864d-02, &amp;
+            1.96135603653245193d-02, &amp;
+            4.90082841866286034d-01, &amp;
+            5.01791848569859700d-01, &amp;
+            1.94142905362427697d-02, &amp;
+            7.35808704083035447d-01, &amp;
+            7.32830214307628292d-01, &amp;
+            1.99769305125348073d-01, &amp;
+            8.49390326555096165d-02, &amp;
+            1.93231026495571445d-01, &amp;
+            9.73536052028850518d-02, &amp;
+            5.46429613824985339d-01, &amp;
+            3.56605425758443895d-01, &amp;
+            5.63404076598475134d-01, &amp;
+            3.75246841614128690d-01, &amp;
+            9.64570763301108025d-02, &amp;
+            1.00725941211059156d-01, &amp;
+            5.74090353056998737d-01, &amp;
+            2.15063595412763708d-01, &amp;
+            2.32577609020466924d-01, &amp;
+            3.85620329746803936d-01, &amp;
+            4.02344358838165772d-01, &amp;
+            2.31976554705557392d-01 /)
+       quad_y = (/ &amp;
+            9.31633856817637662d-01, &amp;
+            2.70650465578974996d-03, &amp;
+            4.80371709946098013d-03, &amp;
+            2.88288775892559489d-02, &amp;
+            4.65065864423152009d-02, &amp;
+            9.59425178842459037d-01, &amp;
+            1.41898415240953424d-01, &amp;
+            1.10109055824293405d-02, &amp;
+            8.52255283913801231d-01, &amp;
+            1.79446154865686713d-02, &amp;
+            8.14622313889163063d-01, &amp;
+            1.51904860075043280d-01, &amp;
+            3.05873481782098500d-01, &amp;
+            6.40120148503546815d-02, &amp;
+            1.70782194263576804d-02, &amp;
+            6.70353984638063616d-01, &amp;
+            1.88893159635656893d-02, &amp;
+            6.85168128337461768d-01, &amp;
+            5.87880059912103126d-02, &amp;
+            8.63390445474911838d-01, &amp;
+            3.06638194154397581d-01, &amp;
+            4.91070032320226724d-01, &amp;
+            1.91075301536324793d-02, &amp;
+            4.93426122726118743d-01, &amp;
+            1.90234565864102700d-01, &amp;
+            9.35203179909489535d-02, &amp;
+            7.80119372011159329d-02, &amp;
+            7.23144604413316738d-01, &amp;
+            7.09282819995150748d-01, &amp;
+            1.80036882071104520d-01, &amp;
+            3.61631062344339060d-01, &amp;
+            5.45361841034838313d-01, &amp;
+            9.80020781972977817d-02, &amp;
+            9.43868603610630852d-02, &amp;
+            5.38190504933536040d-01, &amp;
+            3.47159063315569283d-01, &amp;
+            2.24484534655858270d-01, &amp;
+            5.55373756243410344d-01, &amp;
+            2.06374065376290383d-01, &amp;
+            3.90020944791959701d-01, &amp;
+            2.26309716148690054d-01, &amp;
+            3.74034817624965932d-01 /)
+    case (15)
+       quad_w = (/ &amp;
+            2.96288746800606011d-03, &amp;
+            3.25761337595727998d-03, &amp;
+            3.57844371499827993d-03, &amp;
+            3.77725996817330004d-03, &amp;
+            4.51223062430301976d-03, &amp;
+            5.07549560768603969d-03, &amp;
+            5.35147864537850043d-03, &amp;
+            6.71901825484128024d-03, &amp;
+            8.69330845996152055d-03, &amp;
+            8.81434492822080057d-03, &amp;
+            9.51688608648709918d-03, &amp;
+            9.79238974095184012d-03, &amp;
+            1.02571227598007800d-02, &amp;
+            1.11510143961826395d-02, &amp;
+            1.25834403165001399d-02, &amp;
+            1.40431593071573997d-02, &amp;
+            1.47908641033508599d-02, &amp;
+            1.52346915119334798d-02, &amp;
+            1.55941112489628199d-02, &amp;
+            1.62004706687320817d-02, &amp;
+            1.69022294183182216d-02, &amp;
+            1.75542207172526415d-02, &amp;
+            1.79208490026111812d-02, &amp;
+            1.88383366674746595d-02, &amp;
+            1.90623481302629599d-02, &amp;
+            2.14841593481220200d-02, &amp;
+            2.42981294544147401d-02, &amp;
+            2.48075171843756791d-02, &amp;
+            2.73046432096114983d-02, &amp;
+            2.79887456269402000d-02, &amp;
+            2.89194004641828394d-02, &amp;
+            2.92020035809715389d-02, &amp;
+            3.03808373339658593d-02, &amp;
+            3.12448348184414595d-02, &amp;
+            3.30864725742033017d-02, &amp;
+            3.32969438413868793d-02, &amp;
+            3.35781461200902187d-02, &amp;
+            3.39150094791902390d-02, &amp;
+            3.75774453943188008d-02, &amp;
+            4.18418301359409217d-02, &amp;
+            4.32315781800457766d-02, &amp;
+            4.34883575540267187d-02, &amp;
+            4.37612294302206425d-02, &amp;
+            4.45257415020349975d-02, &amp;
+            4.48417697305130772d-02, &amp;
+            4.90409899134976388d-02 /)
+       quad_x = (/ &amp;
+            8.37946395459970850d-02, &amp;
+            9.01478158811809926d-01, &amp;
+            1.04561072770065433d-01, &amp;
+            1.73942832543570009d-04, &amp;
+            1.59796065230249883d-02, &amp;
+            1.98940171982418500d-02, &amp;
+            9.59324304195993460d-01, &amp;
+            5.97627296602304181d-01, &amp;
+            3.42030448607804960d-01, &amp;
+            8.04380581327452000d-03, &amp;
+            1.58522867474325015d-02, &amp;
+            1.72469170937462613d-02, &amp;
+            1.21132757996041396d-02, &amp;
+            8.71186528556314732d-01, &amp;
+            5.44927680860191166d-01, &amp;
+            7.26381207829353670d-01, &amp;
+            4.08120927972562553d-01, &amp;
+            1.93099285515906938d-01, &amp;
+            8.03422916193143322d-02, &amp;
+            7.50900927217459158d-01, &amp;
+            2.36113152797073678d-01, &amp;
+            3.58976249720810991d-02, &amp;
+            9.64348058030512489d-02, &amp;
+            8.49791941814125540d-01, &amp;
+            2.61981727215685987d-02, &amp;
+            5.04916935914980214d-02, &amp;
+            3.98378915089694807d-01, &amp;
+            7.73687330750770230d-02, &amp;
+            1.17531142664141552d-01, &amp;
+            5.59607432700834684d-01, &amp;
+            7.35914743731264087d-01, &amp;
+            9.23956399124361560d-02, &amp;
+            2.44439652626187054d-01, &amp;
+            5.77252533125843903d-01, &amp;
+            2.04817863251146204d-01, &amp;
+            1.05868989463582364d-01, &amp;
+            3.67870806980410470d-01, &amp;
+            6.75691158210532494d-01, &amp;
+            1.55442146756860411d-01, &amp;
+            4.00092747079610900d-01, &amp;
+            5.53346041347065443d-01, &amp;
+            2.34384730692284327d-01, &amp;
+            4.79911970548837663d-01, &amp;
+            2.07823181207833607d-01, &amp;
+            2.99509934536411448d-01, &amp;
+            3.66754238658024700d-01 /)
+       quad_y = (/ &amp;
+            6.39691104078129969d-04, &amp;
+            9.85218411881900735d-02, &amp;
+            8.93979454703826670d-01, &amp;
+            2.86357906054735212d-01, &amp;
+            2.17081925910976893d-02, &amp;
+            9.60491002308218267d-01, &amp;
+            1.90044178066394696d-02, &amp;
+            3.97780496488271351d-01, &amp;
+            8.18889193163003029d-03, &amp;
+            5.61428628112026984d-01, &amp;
+            1.10250652376474190d-01, &amp;
+            8.81779306349742331d-01, &amp;
+            7.48926060708106633d-01, &amp;
+            1.81256634136576812d-02, &amp;
+            1.23580156834332006d-02, &amp;
+            1.63050875241800806d-02, &amp;
+            5.76053685262027271d-01, &amp;
+            2.31815217381602413d-02, &amp;
+            5.54276471839187934d-02, &amp;
+            2.28156516544899046d-01, &amp;
+            7.42585879757445388d-01, &amp;
+            2.19158823716196827d-01, &amp;
+            8.50766519087862161d-01, &amp;
+            9.58134959084023796d-02, &amp;
+            4.02020893490386166d-01, &amp;
+            6.17880108806219130d-01, &amp;
+            5.18057337891383932d-02, &amp;
+            7.54341981858906885d-01, &amp;
+            1.44120952611509923d-01, &amp;
+            3.86247087260110089d-01, &amp;
+            8.88253201361793865d-02, &amp;
+            4.70458600688052064d-01, &amp;
+            9.34364167217834884d-02, &amp;
+            7.45841510639449479d-02, &amp;
+            6.85466046951634489d-01, &amp;
+            2.98501545931259771d-01, &amp;
+            5.45222065577261161d-01, &amp;
+            2.16580567007144953d-01, &amp;
+            5.87827329241340069d-01, &amp;
+            1.50816834187706139d-01, &amp;
+            1.91244333732916660d-01, &amp;
+            2.24302941649699494d-01, &amp;
+            3.53515460591223130d-01, &amp;
+            3.93987520790585521d-01, &amp;
+            4.82723634014307124d-01, &amp;
+            2.98556001128206294d-01 /)
+    case (16)
+       quad_w = (/ &amp;
+            3.10129992555699982d-04, &amp;
+            3.15758735586419976d-04, &amp;
+            3.54330077943580007d-04, &amp;
+            2.75818580840408003d-03, &amp;
+            3.13462038278900000d-03, &amp;
+            3.92657044130086032d-03, &amp;
+            4.72757419322407998d-03, &amp;
+            4.89122556355451980d-03, &amp;
+            4.99308217447227976d-03, &amp;
+            6.87769094080725989d-03, &amp;
+            7.04895890200419976d-03, &amp;
+            7.48234321685798016d-03, &amp;
+            7.80487518059953984d-03, &amp;
+            7.88418466740824046d-03, &amp;
+            8.78972731913576014d-03, &amp;
+            1.02056920135014002d-02, &amp;
+            1.04781439307989992d-02, &amp;
+            1.05356706498901994d-02, &amp;
+            1.08823380101014996d-02, &amp;
+            1.11144204349303000d-02, &amp;
+            1.12093346841032407d-02, &amp;
+            1.15061308496575802d-02, &amp;
+            1.18406951249887208d-02, &amp;
+            1.28732321683952995d-02, &amp;
+            1.28978400804024007d-02, &amp;
+            1.29036163804996402d-02, &amp;
+            1.30171616029339608d-02, &amp;
+            1.32884070804558593d-02, &amp;
+            1.32892380915438802d-02, &amp;
+            1.33766164618897808d-02, &amp;
+            1.87893903320437011d-02, &amp;
+            1.91532947097645193d-02, &amp;
+            1.92424847512652000d-02, &amp;
+            1.94809912926217597d-02, &amp;
+            1.97302055773748396d-02, &amp;
+            2.06182389048902605d-02, &amp;
+            2.56436219241691389d-02, &amp;
+            2.58202820967319384d-02, &amp;
+            2.59115021134554216d-02, &amp;
+            2.64263994090506993d-02, &amp;
+            2.69252786513633803d-02, &amp;
+            2.70947664659638605d-02, &amp;
+            2.92368573222217612d-02, &amp;
+            2.96431584181643011d-02, &amp;
+            2.97179138374325802d-02, &amp;
+            3.15900127931489430d-02, &amp;
+            3.16463422576662226d-02, &amp;
+            3.20353680885783823d-02, &amp;
+            4.06020297959152204d-02, &amp;
+            4.07218756765176382d-02, &amp;
+            4.07339600620690231d-02, &amp;
+            4.07525274042244007d-02, &amp;
+            4.07582332469478628d-02, &amp;
+            4.08465529811564212d-02, &amp;
+            4.61609167265263423d-02 /)
+       quad_x = (/ &amp;
+            1.00000000000000000d+00, &amp;
+            0.00000000000000000d+00, &amp;
+            0.00000000000000000d+00, &amp;
+            9.39886358357719276d-01, &amp;
+            5.43806683058354889d-02, &amp;
+            9.39400491638759001d-03, &amp;
+            1.64345086362402415d-02, &amp;
+            9.46948726986245770d-01, &amp;
+            4.26604005767651229d-02, &amp;
+            1.22269495438720507d-02, &amp;
+            8.67369652104666766d-01, &amp;
+            8.45674402138907211d-01, &amp;
+            1.39575963210261389d-01, &amp;
+            1.31782174323082757d-01, &amp;
+            1.57955126300247696d-02, &amp;
+            7.36546288443630681d-01, &amp;
+            1.39688430330388597d-02, &amp;
+            2.54789518603902976d-01, &amp;
+            7.31638652255490296d-01, &amp;
+            1.57253728950845183d-02, &amp;
+            2.66230284364682546d-01, &amp;
+            8.67350406521407713d-01, &amp;
+            7.41493666956612452d-02, &amp;
+            1.59285948360032813d-02, &amp;
+            1.56061028067777108d-02, &amp;
+            5.91009481748388521d-01, &amp;
+            4.03477149688871939d-01, &amp;
+            5.69474562852597677d-01, &amp;
+            6.78493700650300013d-02, &amp;
+            4.26596859027159325d-01, &amp;
+            6.70982507889702484d-02, &amp;
+            7.52831023147951583d-01, &amp;
+            7.75372778355688408d-01, &amp;
+            1.68907315778736578d-01, &amp;
+            1.68733583291941713d-01, &amp;
+            8.21244708436323911d-02, &amp;
+            6.28870536334479757d-01, &amp;
+            8.11413015265751714d-02, &amp;
+            2.96911206508048142d-01, &amp;
+            7.67542314170573392d-02, &amp;
+            6.22302233384477210d-01, &amp;
+            3.10378628805096313d-01, &amp;
+            8.19218215186585663d-02, &amp;
+            4.71702266501346890d-01, &amp;
+            4.54660341525047418d-01, &amp;
+            1.70109133923693867d-01, &amp;
+            6.40600432948674303d-01, &amp;
+            1.91226758371659922d-01, &amp;
+            1.88531576707023696d-01, &amp;
+            4.77292995769074468d-01, &amp;
+            3.12697462175977159d-01, &amp;
+            4.96122594594562594d-01, &amp;
+            1.92880531286706070d-01, &amp;
+            3.36004145381649577d-01, &amp;
+            3.33728055084797415d-01 /)
+       quad_y = (/ &amp;
+            0.00000000000000000d+00, &amp;
+            1.00000000000000000d+00, &amp;
+            0.00000000000000000d+00, &amp;
+            4.98487446341012042d-03, &amp;
+            9.38640561861667555d-01, &amp;
+            5.26424462697347370d-02, &amp;
+            9.46903551735083227d-01, &amp;
+            3.63373677166939912d-02, &amp;
+            1.51224541799410694d-02, &amp;
+            8.69377351066431325d-01, &amp;
+            1.20491728577429680d-01, &amp;
+            1.57763967870001610d-02, &amp;
+            8.44812087037470905d-01, &amp;
+            1.35009605584021607d-02, &amp;
+            1.45527493853598811d-01, &amp;
+            1.55697540908227797d-02, &amp;
+            7.37983689445019464d-01, &amp;
+            7.29761568977055242d-01, &amp;
+            2.54307668331505199d-01, &amp;
+            2.69623979579060258d-01, &amp;
+            1.44783956308012808d-02, &amp;
+            5.91679410400481887d-02, &amp;
+            8.63478257506086866d-01, &amp;
+            4.19123895523818624d-01, &amp;
+            5.80922292114576244d-01, &amp;
+            1.59251452650940907d-02, &amp;
+            5.80670036810391976d-01, &amp;
+            4.14949514630200300d-01, &amp;
+            7.61218678591376041d-02, &amp;
+            1.57509692311544290d-02, &amp;
+            7.74189831242120929d-01, &amp;
+            8.19119495639243356d-02, &amp;
+            1.57712845729173379d-01, &amp;
+            7.50394309974224516d-01, &amp;
+            7.08311507267818663d-02, &amp;
+            1.76299662677107616d-01, &amp;
+            8.07744953316562597d-02, &amp;
+            3.05437358977577567d-01, &amp;
+            6.22748598887092997d-01, &amp;
+            6.24724714954566607d-01, &amp;
+            3.01148582116563701d-01, &amp;
+            7.79098365079445854d-02, &amp;
+            4.60363303835087556d-01, &amp;
+            8.21554006796718639d-02, &amp;
+            4.63756503388964403d-01, &amp;
+            6.42227780818819927d-01, &amp;
+            1.89829353725560590d-01, &amp;
+            1.73995568534257572d-01, &amp;
+            4.79891407040575813d-01, &amp;
+            3.34835659811930419d-01, &amp;
+            4.95797219725874039d-01, &amp;
+            1.92755366890443480d-01, &amp;
+            3.16101580726075748d-01, &amp;
+            1.89489280128982307d-01, &amp;
+            3.34357102181145227d-01 /)
+    case (17:18)
+       quad_w = (/ &amp;
+            1.25828784932253989d-03, &amp;
+            1.26367260036103993d-03, &amp;
+            1.66346476665913995d-03, &amp;
+            4.07517460626974012d-03, &amp;
+            4.30677628708084001d-03, &amp;
+            4.38933730896538029d-03, &amp;
+            4.85497927808381958d-03, &amp;
+            5.12331059574348043d-03, &amp;
+            5.41988441703717978d-03, &amp;
+            6.46926950879221987d-03, &amp;
+            6.81699117914767987d-03, &amp;
+            6.92386640733278023d-03, &amp;
+            6.97107700524255986d-03, &amp;
+            7.20606999837981963d-03, &amp;
+            7.68517277670134006d-03, &amp;
+            8.12449011262820001d-03, &amp;
+            8.48591521400725995d-03, &amp;
+            8.50442662106641947d-03, &amp;
+            8.54767603373272032d-03, &amp;
+            8.69444272795500024d-03, &amp;
+            8.72719812193602056d-03, &amp;
+            8.92033786433182006d-03, &amp;
+            8.92234319396821920d-03, &amp;
+            8.95231687761770083d-03, &amp;
+            9.06298781003516025d-03, &amp;
+            9.23924194410133924d-03, &amp;
+            9.28967821855593984d-03, &amp;
+            1.01608575888272393d-02, &amp;
+            1.06885830904582795d-02, &amp;
+            1.15958427049140597d-02, &amp;
+            1.37213355429553797d-02, &amp;
+            1.45150961170186395d-02, &amp;
+            1.47261369252714401d-02, &amp;
+            1.49718125814545001d-02, &amp;
+            1.53513474059395992d-02, &amp;
+            1.62631682931355416d-02, &amp;
+            1.63942104253053389d-02, &amp;
+            1.65617337595997186d-02, &amp;
+            1.73083763437286813d-02, &amp;
+            1.73540686988064193d-02, &amp;
+            1.73686024701926803d-02, &amp;
+            1.74264381227100390d-02, &amp;
+            1.74300780592983595d-02, &amp;
+            1.77735784987442004d-02, &amp;
+            1.80091498191349009d-02, &amp;
+            1.81463142921402011d-02, &amp;
+            1.90948851041601586d-02, &amp;
+            1.96126400058951184d-02, &amp;
+            2.41355062943753411d-02, &amp;
+            2.44956060783119607d-02, &amp;
+            2.48610416936089589d-02, &amp;
+            2.53532868492889613d-02, &amp;
+            2.54885997021488397d-02, &amp;
+            2.60680031833598787d-02, &amp;
+            2.61730437462350009d-02, &amp;
+            2.62220341775865583d-02, &amp;
+            2.63729822411298588d-02, &amp;
+            2.64724531863816184d-02, &amp;
+            2.71197797250411002d-02, &amp;
+            2.71735101709651809d-02, &amp;
+            2.73550274319431588d-02, &amp;
+            2.78644172956342799d-02, &amp;
+            2.88867132116555000d-02, &amp;
+            2.92696890811339205d-02, &amp;
+            3.04519625339797796d-02, &amp;
+            3.18636982224744791d-02 /)
+       quad_x = (/ &amp;
+            1.16731059668411796d-02, &amp;
+            9.81003085838795030d-01, &amp;
+            1.06966317091697297d-02, &amp;
+            9.38247698355050508d-01, &amp;
+            1.26627518417214407d-02, &amp;
+            5.98109409983802534d-02, &amp;
+            1.37363297926721400d-02, &amp;
+            9.22952795940544801d-01, &amp;
+            6.33107354992694660d-02, &amp;
+            1.17265100334602006d-02, &amp;
+            1.55472058732347207d-01, &amp;
+            8.34329388898215729d-01, &amp;
+            8.50163803195675971d-01, &amp;
+            1.28816350521975802d-02, &amp;
+            1.51080160895877835d-01, &amp;
+            1.01917879216583702d-02, &amp;
+            2.81337239930328109d-01, &amp;
+            7.12437462850093350d-01, &amp;
+            2.76302525086336681d-01, &amp;
+            1.09658368560617801d-02, &amp;
+            4.28911051788391673d-01, &amp;
+            4.21542055511473501d-01, &amp;
+            5.71125859044436135d-01, &amp;
+            5.82686827051093426d-01, &amp;
+            1.30567806713247098d-02, &amp;
+            1.30760400963918499d-02, &amp;
+            7.26343706240677456d-01, &amp;
+            6.87230068637373903d-02, &amp;
+            8.65230210152946100d-01, &amp;
+            6.48599071037367358d-02, &amp;
+            1.48349494336205812d-01, &amp;
+            6.24359898395938084d-02, &amp;
+            7.87136901173506986d-01, &amp;
+            5.19104921609530590d-02, &amp;
+            1.54312992744382316d-01, &amp;
+            2.61784274560294072d-01, &amp;
+            7.66725787281279936d-01, &amp;
+            2.58210367662730089d-01, &amp;
+            6.79065925147426253d-02, &amp;
+            5.29357827480419707d-01, &amp;
+            6.66036150484159983d-02, &amp;
+            5.85675461899431982d-02, &amp;
+            6.44535360410834479d-02, &amp;
+            6.74813842915136908d-01, &amp;
+            3.91460231036870887d-01, &amp;
+            6.48770149230714077d-01, &amp;
+            3.94649822040803844d-01, &amp;
+            5.39013715193333520d-01, &amp;
+            1.62789508278474992d-01, &amp;
+            6.81243632264064480d-01, &amp;
+            1.54283287802019775d-01, &amp;
+            2.52272775044450781d-01, &amp;
+            2.54798153240704317d-01, &amp;
+            1.48558054919435356d-01, &amp;
+            2.93023960643618242d-01, &amp;
+            2.80899127230990420d-01, &amp;
+            4.82098959297082186d-01, &amp;
+            5.64187824544361338d-01, &amp;
+            1.30769964434390151d-01, &amp;
+            1.47969222194755778d-01, &amp;
+            5.63868422294591665d-01, &amp;
+            4.36115742879046642d-01, &amp;
+            3.60326393528547007d-01, &amp;
+            4.22418833467424815d-01, &amp;
+            3.71900183305238774d-01, &amp;
+            2.41364500692847261d-01 /)
+       quad_y = (/ &amp;
+            9.81256595128901288d-01, &amp;
+            7.14625048632161041d-03, &amp;
+            1.15153933375966005d-02, &amp;
+            4.95570591340642186d-02, &amp;
+            9.37012362061503179d-01, &amp;
+            1.21364578921848206d-02, &amp;
+            6.12783625596967571d-02, &amp;
+            1.41128270602420801d-02, &amp;
+            9.22019729172743441d-01, &amp;
+            1.50052047522903464d-01, &amp;
+            8.32514712158924919d-01, &amp;
+            1.25228158758835494d-02, &amp;
+            1.37199750873578441d-01, &amp;
+            8.47762706347920059d-01, &amp;
+            1.36526924039374609d-02, &amp;
+            5.77043861834485750d-01, &amp;
+            7.06685375962319839d-01, &amp;
+            1.24569780989902696d-02, &amp;
+            1.21741311385642498d-02, &amp;
+            4.19430671246628528d-01, &amp;
+            5.59961606746891660d-01, &amp;
+            1.16475994784657200d-02, &amp;
+            1.18218313988511792d-02, &amp;
+            4.05788958117718312d-01, &amp;
+            2.72502375086791648d-01, &amp;
+            7.22471252323347302d-01, &amp;
+            2.60298401925064371d-01, &amp;
+            6.31417277209627148d-02, &amp;
+            7.20611837337678529d-02, &amp;
+            8.59043354390994329d-01, &amp;
+            7.88878835223967068d-01, &amp;
+            1.49393549935427472d-01, &amp;
+            6.56382042756594730d-02, &amp;
+            5.25563569560524302d-01, &amp;
+            7.16383926917005809d-02, &amp;
+            6.21479485288150627d-02, &amp;
+            1.65821155483132643d-01, &amp;
+            6.80011976613901892d-01, &amp;
+            7.57151543778180169d-01, &amp;
+            4.12150384110720580d-01, &amp;
+            2.61251308788649994d-01, &amp;
+            3.90223611453497599d-01, &amp;
+            6.37362655976095538d-01, &amp;
+            6.37583342061291414d-02, &amp;
+            5.50323809056311064d-01, &amp;
+            2.83672836026294839d-01, &amp;
+            6.05175522553708725d-02, &amp;
+            6.11990176936422214d-02, &amp;
+            6.86132214103482352d-01, &amp;
+            1.56796834589909340d-01, &amp;
+            1.66751262401984013d-01, &amp;
+            2.50480393339484964d-01, &amp;
+            4.99409064904319133d-01, &amp;
+            5.75602309608737706d-01, &amp;
+            5.65689735416185280d-01, &amp;
+            1.43792157424779465d-01, &amp;
+            2.51855753586503806d-01, &amp;
+            1.46296674315259168d-01, &amp;
+            4.48957758611677471d-01, &amp;
+            3.00117438682916959d-01, &amp;
+            2.81377208929750933d-01, &amp;
+            4.25205344642047345d-01, &amp;
+            2.59919000488863738d-01, &amp;
+            1.45323844330268626d-01, &amp;
+            3.78012270356701041d-01, &amp;
+            3.84756328493973232d-01 /)
+    case (19:20)
+       quad_w = (/ &amp;
+            1.08722726992977999d-03, &amp;
+            1.44935676325559995d-03, &amp;
+            1.54230146682705991d-03, &amp;
+            1.72008165517976009d-03, &amp;
+            2.09492360058822005d-03, &amp;
+            2.23690257489617995d-03, &amp;
+            2.35272104070958013d-03, &amp;
+            2.44339678751581994d-03, &amp;
+            2.59638216844711991d-03, &amp;
+            3.70365294903995989d-03, &amp;
+            3.98777051504608029d-03, &amp;
+            4.17752614548014007d-03, &amp;
+            4.80833304318689994d-03, &amp;
+            4.81591289252192040d-03, &amp;
+            4.92887303791608028d-03, &amp;
+            5.13289401506848014d-03, &amp;
+            5.15940515555464007d-03, &amp;
+            5.31455008152369960d-03, &amp;
+            5.34406534476750041d-03, &amp;
+            5.34845105051530000d-03, &amp;
+            5.45132308568118014d-03, &amp;
+            5.49498917872548020d-03, &amp;
+            5.67115276145073975d-03, &amp;
+            6.02678214649138028d-03, &amp;
+            6.98095969102997989d-03, &amp;
+            7.05739957682046011d-03, &amp;
+            7.09651735229185985d-03, &amp;
+            7.21063381341638041d-03, &amp;
+            7.23521734274557970d-03, &amp;
+            7.24748849360319983d-03, &amp;
+            7.26933878470369978d-03, &amp;
+            7.29820954628004025d-03, &amp;
+            7.36572892331428027d-03, &amp;
+            8.37319816520754046d-03, &amp;
+            8.44777502287689941d-03, &amp;
+            8.47113314420815978d-03, &amp;
+            8.65350860477459918d-03, &amp;
+            8.72622732463467984d-03, &amp;
+            8.86086110796695942d-03, &amp;
+            1.41412012011636595d-02, &amp;
+            1.42498356244060605d-02, &amp;
+            1.42502823269356604d-02, &amp;
+            1.50323611738848797d-02, &amp;
+            1.51015638541135803d-02, &amp;
+            1.51993568038467398d-02, &amp;
+            1.52834398037001995d-02, &amp;
+            1.53033706501145804d-02, &amp;
+            1.54665034100300997d-02, &amp;
+            1.54886910417405006d-02, &amp;
+            1.56573125272329791d-02, &amp;
+            1.56786746695878609d-02, &amp;
+            1.57160234643329184d-02, &amp;
+            1.57591071946760614d-02, &amp;
+            1.62124068992750212d-02, &amp;
+            1.73756076192992416d-02, &amp;
+            1.75196727463411799d-02, &amp;
+            1.75358710155162599d-02, &amp;
+            1.76064607667077815d-02, &amp;
+            1.76307752490745401d-02, &amp;
+            1.83201610171351385d-02, &amp;
+            1.83866553835153011d-02, &amp;
+            1.85837831468425412d-02, &amp;
+            1.86685785803144197d-02, &amp;
+            2.01986673293933598d-02, &amp;
+            2.06790020318835185d-02, &amp;
+            2.10978895935028006d-02, &amp;
+            2.47725502018572193d-02, &amp;
+            2.50209630570558984d-02, &amp;
+            2.52897293557298002d-02, &amp;
+            2.60018605093969811d-02, &amp;
+            2.60766783942761211d-02, &amp;
+            2.62449576178955188d-02, &amp;
+            2.99579881257897203d-02, &amp;
+            2.99804998713142194d-02, &amp;
+            2.99957636064380612d-02, &amp;
+            3.17066591724676772d-02, &amp;
+            3.17655930554186366d-02, &amp;
+            3.18603302836002814d-02 /)
+       quad_x = (/ &amp;
+            8.94113371120363980d-03, &amp;
+            9.79262262980673648d-01, &amp;
+            1.05475382111878107d-02, &amp;
+            2.37770619471223011d-03, &amp;
+            6.30425115794659985d-02, &amp;
+            9.30842249672999666d-01, &amp;
+            6.29076555490273859d-02, &amp;
+            9.31596224638064907d-01, &amp;
+            6.19516894145516039d-03, &amp;
+            2.87125819236681012d-02, &amp;
+            9.29384447830523208d-01, &amp;
+            3.75457566621280603d-02, &amp;
+            8.68957390638342049d-03, &amp;
+            1.54759705396467939d-01, &amp;
+            8.33102529418492388d-01, &amp;
+            8.37423107352609497d-01, &amp;
+            1.55936250523378839d-01, &amp;
+            9.85996420952356054d-03, &amp;
+            4.05587373328916256d-01, &amp;
+            5.96472789861823505d-01, &amp;
+            8.07478004157674914d-03, &amp;
+            7.50739777207109962d-03, &amp;
+            3.93676451923729909d-01, &amp;
+            5.84653072621221792d-01, &amp;
+            4.87080411211963826d-01, &amp;
+            2.68351281178451695d-01, &amp;
+            7.22395628874798801d-01, &amp;
+            2.71682674235722121d-01, &amp;
+            1.12580842045893505d-02, &amp;
+            1.15034734369740006d-02, &amp;
+            7.14052590056380332d-01, &amp;
+            4.90287105311154492d-01, &amp;
+            2.01423425209307193d-02, &amp;
+            3.61107464858549873d-02, &amp;
+            8.60799881985085724d-01, &amp;
+            1.00589152600130460d-01, &amp;
+            9.18740717058415535d-02, &amp;
+            8.60488829619102891d-01, &amp;
+            4.39842178673255924d-02, &amp;
+            2.01101760673543128d-01, &amp;
+            7.44999372626327871d-01, &amp;
+            5.32186641309832023d-02, &amp;
+            7.45398464740051780d-01, &amp;
+            1.95728993287601793d-01, &amp;
+            1.09253205798754194d-01, &amp;
+            5.67625702000514876d-02, &amp;
+            4.83837933474811077d-02, &amp;
+            1.08061280976013308d-01, &amp;
+            6.18560590099050067d-01, &amp;
+            7.72129601349656247d-01, &amp;
+            6.11573480113271728d-01, &amp;
+            3.38132610337584238d-01, &amp;
+            1.17308412825429031d-01, &amp;
+            2.67455126059614634d-01, &amp;
+            6.54210016002568895d-01, &amp;
+            5.38297481157758370d-02, &amp;
+            1.84884032411677113d-01, &amp;
+            3.37626710474433378d-01, &amp;
+            6.06710203449947083d-01, &amp;
+            4.61261408549563656d-01, &amp;
+            1.52546536567125635d-01, &amp;
+            7.00582543543075142d-02, &amp;
+            4.70420137903180935d-01, &amp;
+            1.21646169374593327d-01, &amp;
+            6.37140405270211652d-01, &amp;
+            2.37990451511871204d-01, &amp;
+            1.48392985717714643d-01, &amp;
+            3.59806957154963247d-01, &amp;
+            4.94144105509513487d-01, &amp;
+            1.44063068798082117d-01, &amp;
+            5.01976444000354682d-01, &amp;
+            3.55542383429826137d-01, &amp;
+            2.44343954077132719d-01, &amp;
+            2.43706498934189664d-01, &amp;
+            5.12220080732082472d-01, &amp;
+            2.52603831517775324d-01, &amp;
+            3.75989565285065386d-01, &amp;
+            3.72907798714410488d-01 /)
+       quad_y = (/ &amp;
+            8.69832937019853966d-03, &amp;
+            1.02644133743650702d-02, &amp;
+            9.78551420251511095d-01, &amp;
+            6.36551098603617138d-02, &amp;
+            4.15063475086314016d-03, &amp;
+            4.80534822625456031d-03, &amp;
+            9.31679006948122335d-01, &amp;
+            6.26264881801359419d-02, &amp;
+            9.29358705856406453d-01, &amp;
+            3.10202122997162988d-02, &amp;
+            3.42152968218528697d-02, &amp;
+            9.25786888466930469d-01, &amp;
+            1.58497125150992235d-01, &amp;
+            8.36360665768828615d-01, &amp;
+            8.92572448244761084d-03, &amp;
+            1.52916730407839152d-01, &amp;
+            9.49662400580287072d-03, &amp;
+            8.34221149359550496d-01, &amp;
+            7.43893020079128015d-03, &amp;
+            3.95633080931071524d-01, &amp;
+            4.03131942590268022d-01, &amp;
+            5.85160959468056907d-01, &amp;
+            5.97489659289879849d-01, &amp;
+            8.72504649681920923d-03, &amp;
+            2.02129229911940413d-02, &amp;
+            7.20234008866821984d-01, &amp;
+            2.66239936645618958d-01, &amp;
+            1.12882698808235999d-02, &amp;
+            7.16969596332510228d-01, &amp;
+            2.74006711016568261d-01, &amp;
+            1.13511560497062108d-02, &amp;
+            4.93649184146833508d-01, &amp;
+            4.83257345960139917d-01, &amp;
+            9.35679501582013518d-02, &amp;
+            3.97379067075391834d-02, &amp;
+            8.58634341935179624d-01, &amp;
+            3.95513001973376577d-02, &amp;
+            9.66224057079246856d-02, &amp;
+            8.56188634910676760d-01, &amp;
+            7.44911583562622548d-01, &amp;
+            5.36865638165804279d-02, &amp;
+            1.96375427593505181d-01, &amp;
+            1.98206580555000511d-01, &amp;
+            5.55713833156085690d-02, &amp;
+            6.10003618241303003d-01, &amp;
+            7.40912189495919415d-01, &amp;
+            6.07513566097797830d-01, &amp;
+            1.12208151043701021d-01, &amp;
+            2.69875370303497397d-01, &amp;
+            1.11411739533299192d-01, &amp;
+            3.38936767793063476d-01, &amp;
+            4.94693938787457710d-02, &amp;
+            7.69645130979518255d-01, &amp;
+            1.11571880815407254d-01, &amp;
+            1.90654831469991515d-01, &amp;
+            3.35861682684911789d-01, &amp;
+            1.55183152385137302d-01, &amp;
+            6.08140259629445290d-01, &amp;
+            5.42632795598211870d-02, &amp;
+            6.88176670721653561d-02, &amp;
+            6.51024084574884698d-01, &amp;
+            4.66190439274159873d-01, &amp;
+            4.63482645535314208d-01, &amp;
+            2.38149487551568284d-01, &amp;
+            1.23839938451336729d-01, &amp;
+            6.37021645232637601d-01, &amp;
+            4.89418857778014416d-01, &amp;
+            1.45288086625323942d-01, &amp;
+            3.61021638381811005d-01, &amp;
+            3.51350834188705718d-01, &amp;
+            1.43549166329305977d-01, &amp;
+            5.01649159950184220d-01, &amp;
+            2.40605212910410038d-01, &amp;
+            5.10901727705534436d-01, &amp;
+            2.45273797354288225d-01, &amp;
+            3.70031955509369515d-01, &amp;
+            2.50540661163054956d-01, &amp;
+            3.75375027754919599d-01 /)
+    case (21)
+       quad_w = (/ &amp;
+            3.35221821934460023d-04, &amp;
+            3.35221821934460023d-04, &amp;
+            3.35221821934460023d-04, &amp;
+            2.27363040370204012d-03, &amp;
+            2.27363040370206007d-03, &amp;
+            2.27363040370206007d-03, &amp;
+            2.27363040370208002d-03, &amp;
+            2.27363040370208002d-03, &amp;
+            2.27363040370208002d-03, &amp;
+            2.60387926598267981d-03, &amp;
+            2.60387926598274009d-03, &amp;
+            2.60387926598274009d-03, &amp;
+            2.60387926598274009d-03, &amp;
+            2.60387926598274009d-03, &amp;
+            2.60387926598276004d-03, &amp;
+            3.27177164433308009d-03, &amp;
+            3.27177164433315988d-03, &amp;
+            3.27177164433329996d-03, &amp;
+            4.63689207664366027d-03, &amp;
+            4.63689207664368021d-03, &amp;
+            4.63689207664370016d-03, &amp;
+            4.63689207664370016d-03, &amp;
+            4.63689207664372011d-03, &amp;
+            4.63689207664374006d-03, &amp;
+            4.79688913117362007d-03, &amp;
+            4.79688913117365997d-03, &amp;
+            4.79688913117369987d-03, &amp;
+            4.79688913117369987d-03, &amp;
+            4.79688913117369987d-03, &amp;
+            4.79688913117373977d-03, &amp;
+            5.71239045834757986d-03, &amp;
+            5.71239045834759981d-03, &amp;
+            5.71239045834759981d-03, &amp;
+            5.71239045834759981d-03, &amp;
+            5.71239045834763971d-03, &amp;
+            5.71239045834763971d-03, &amp;
+            5.86084820867674005d-03, &amp;
+            5.86084820867674005d-03, &amp;
+            5.86084820867676000d-03, &amp;
+            5.86084820867676000d-03, &amp;
+            5.86084820867677995d-03, &amp;
+            5.86084820867679990d-03, &amp;
+            9.40985776160507999d-03, &amp;
+            9.40985776160510080d-03, &amp;
+            9.40985776160510080d-03, &amp;
+            9.40985776160514070d-03, &amp;
+            9.40985776160514070d-03, &amp;
+            9.40985776160515978d-03, &amp;
+            1.17630490135273002d-02, &amp;
+            1.17630490135273592d-02, &amp;
+            1.17630490135273800d-02, &amp;
+            1.17785733075366408d-02, &amp;
+            1.17785733075366997d-02, &amp;
+            1.17785733075366997d-02, &amp;
+            1.34123103715187396d-02, &amp;
+            1.34123103715187396d-02, &amp;
+            1.34123103715187604d-02, &amp;
+            1.34123103715187604d-02, &amp;
+            1.34123103715187795d-02, &amp;
+            1.34123103715187795d-02, &amp;
+            1.57144888389381190d-02, &amp;
+            1.57144888389381399d-02, &amp;
+            1.57144888389381399d-02, &amp;
+            1.57144888389381399d-02, &amp;
+            1.57144888389381399d-02, &amp;
+            1.57144888389381815d-02, &amp;
+            1.68598096079408608d-02, &amp;
+            1.68598096079408608d-02, &amp;
+            1.68598096079408608d-02, &amp;
+            1.68598096079408989d-02, &amp;
+            1.68598096079408989d-02, &amp;
+            1.68598096079408989d-02, &amp;
+            2.13872647106677985d-02, &amp;
+            2.13872647106678193d-02, &amp;
+            2.13872647106678193d-02, &amp;
+            2.13872647106678609d-02, &amp;
+            2.13872647106678609d-02, &amp;
+            2.13872647106678609d-02, &amp;
+            2.20569466368441408d-02, &amp;
+            2.20569466368442206d-02, &amp;
+            2.20569466368442588d-02, &amp;
+            2.30734797342076192d-02, &amp;
+            2.30734797342076192d-02, &amp;
+            2.30734797342076192d-02, &amp;
+            2.30734797342076609d-02, &amp;
+            2.30734797342076609d-02, &amp;
+            2.30734797342076817d-02, &amp;
+            2.34576234312233803d-02, &amp;
+            2.34576234312233803d-02, &amp;
+            2.34576234312234393d-02, &amp;
+            2.75599990173726606d-02 /)
+       quad_x = (/ &amp;
+            3.55243919219789010d-03, &amp;
+            3.55243919219789010d-03, &amp;
+            9.92895121615604337d-01, &amp;
+            9.55354827372982607d-01, &amp;
+            9.55354827372982607d-01, &amp;
+            8.78989290927927915d-03, &amp;
+            3.58552797177380533d-02, &amp;
+            8.78989290927927915d-03, &amp;
+            3.58552797177380533d-02, &amp;
+            8.86526487904741201d-01, &amp;
+            5.24053759351133987d-03, &amp;
+            8.86526487904741201d-01, &amp;
+            5.24053759351133987d-03, &amp;
+            1.08232974501747403d-01, &amp;
+            1.08232974501747403d-01, &amp;
+            4.66397432150169600d-02, &amp;
+            4.66397432150169600d-02, &amp;
+            9.06720513569966080d-01, &amp;
+            2.07572045694570162d-01, &amp;
+            2.07572045694570162d-01, &amp;
+            7.84152030177045267d-01, &amp;
+            8.27592412838468010d-03, &amp;
+            8.27592412838468010d-03, &amp;
+            7.84152030177045267d-01, &amp;
+            8.82704356257391520d-01, &amp;
+            8.58119489724735729d-02, &amp;
+            3.14836947701349623d-02, &amp;
+            8.82704356257391520d-01, &amp;
+            8.58119489724735729d-02, &amp;
+            3.14836947701349623d-02, &amp;
+            6.68877823382559633d-01, &amp;
+            6.68877823382559633d-01, &amp;
+            9.51507606247941999d-03, &amp;
+            9.51507606247941999d-03, &amp;
+            3.21607100554960890d-01, &amp;
+            3.21607100554960890d-01, &amp;
+            9.98597856805455084d-03, &amp;
+            4.37999954311338036d-01, &amp;
+            9.98597856805455084d-03, &amp;
+            4.37999954311338036d-01, &amp;
+            5.52014067120607410d-01, &amp;
+            5.52014067120607410d-01, &amp;
+            4.05093994118645995d-02, &amp;
+            4.05093994118645995d-02, &amp;
+            7.97493107214769736d-01, &amp;
+            1.61997493373365664d-01, &amp;
+            1.61997493373365664d-01, &amp;
+            7.97493107214769736d-01, &amp;
+            3.86421555195494315d-01, &amp;
+            2.27156889609011370d-01, &amp;
+            3.86421555195494315d-01, &amp;
+            8.09012937932871878d-01, &amp;
+            9.54935310335640608d-02, &amp;
+            9.54935310335640608d-02, &amp;
+            2.74542523871806554d-01, &amp;
+            6.77473428056059035d-01, &amp;
+            4.79840480721343624d-02, &amp;
+            4.79840480721343624d-02, &amp;
+            6.77473428056059035d-01, &amp;
+            2.74542523871806554d-01, &amp;
+            4.05347244666731221d-01, &amp;
+            5.16677930988929113d-02, &amp;
+            4.05347244666731221d-01, &amp;
+            5.16677930988929113d-02, &amp;
+            5.42984962234375867d-01, &amp;
+            5.42984962234375867d-01, &amp;
+            1.87773861553947652d-01, &amp;
+            1.87773861553947652d-01, &amp;
+            7.05411311687214049d-01, &amp;
+            1.06814826758838299d-01, &amp;
+            1.06814826758838299d-01, &amp;
+            7.05411311687214049d-01, &amp;
+            1.19505971200895011d-01, &amp;
+            1.19505971200895011d-01, &amp;
+            3.05712299064280657d-01, &amp;
+            5.74781729734824332d-01, &amp;
+            3.05712299064280657d-01, &amp;
+            5.74781729734824332d-01, &amp;
+            5.98124574336294956d-01, &amp;
+            2.00937712831852522d-01, &amp;
+            2.00937712831852522d-01, &amp;
+            2.16077520000510781d-01, &amp;
+            2.16077520000510781d-01, &amp;
+            3.12136025667340666d-01, &amp;
+            4.71786454332148553d-01, &amp;
+            3.12136025667340666d-01, &amp;
+            4.71786454332148553d-01, &amp;
+            4.37657990384874573d-01, &amp;
+            4.37657990384874629d-01, &amp;
+            1.24684019230250798d-01, &amp;
+            3.33333333333333370d-01 /)
+       quad_y = (/ &amp;
+            3.55243919219789010d-03, &amp;
+            9.92895121615604337d-01, &amp;
+            3.55243919219789010d-03, &amp;
+            3.58552797177380533d-02, &amp;
+            8.78989290927927915d-03, &amp;
+            3.58552797177380533d-02, &amp;
+            8.78989290927927915d-03, &amp;
+            9.55354827372982607d-01, &amp;
+            9.55354827372982607d-01, &amp;
+            1.08232974501747403d-01, &amp;
+            1.08232974501747403d-01, &amp;
+            5.24053759351133987d-03, &amp;
+            8.86526487904741201d-01, &amp;
+            8.86526487904741201d-01, &amp;
+            5.24053759351133987d-03, &amp;
+            9.06720513569966080d-01, &amp;
+            4.66397432150169600d-02, &amp;
+            4.66397432150169600d-02, &amp;
+            7.84152030177045267d-01, &amp;
+            8.27592412838468010d-03, &amp;
+            2.07572045694570162d-01, &amp;
+            2.07572045694570162d-01, &amp;
+            7.84152030177045267d-01, &amp;
+            8.27592412838468010d-03, &amp;
+            3.14836947701349623d-02, &amp;
+            3.14836947701349623d-02, &amp;
+            8.58119489724735729d-02, &amp;
+            8.58119489724735729d-02, &amp;
+            8.82704356257391520d-01, &amp;
+            8.82704356257391520d-01, &amp;
+            9.51507606247941999d-03, &amp;
+            3.21607100554960890d-01, &amp;
+            6.68877823382559633d-01, &amp;
+            3.21607100554960890d-01, &amp;
+            6.68877823382559633d-01, &amp;
+            9.51507606247941999d-03, &amp;
+            5.52014067120607410d-01, &amp;
+            9.98597856805455084d-03, &amp;
+            4.37999954311338036d-01, &amp;
+            5.52014067120607410d-01, &amp;
+            4.37999954311338036d-01, &amp;
+            9.98597856805455084d-03, &amp;
+            7.97493107214769736d-01, &amp;
+            1.61997493373365664d-01, &amp;
+            4.05093994118645995d-02, &amp;
+            7.97493107214769736d-01, &amp;
+            4.05093994118645995d-02, &amp;
+            1.61997493373365664d-01, &amp;
+            3.86421555195494315d-01, &amp;
+            3.86421555195494315d-01, &amp;
+            2.27156889609011370d-01, &amp;
+            9.54935310335640608d-02, &amp;
+            9.54935310335640608d-02, &amp;
+            8.09012937932871878d-01, &amp;
+            4.79840480721343624d-02, &amp;
+            2.74542523871806554d-01, &amp;
+            2.74542523871806554d-01, &amp;
+            6.77473428056059035d-01, &amp;
+            4.79840480721343624d-02, &amp;
+            6.77473428056059035d-01, &amp;
+            5.16677930988929113d-02, &amp;
+            4.05347244666731221d-01, &amp;
+            5.42984962234375867d-01, &amp;
+            5.42984962234375867d-01, &amp;
+            4.05347244666731221d-01, &amp;
+            5.16677930988929113d-02, &amp;
+            7.05411311687214049d-01, &amp;
+            1.06814826758838299d-01, &amp;
+            1.06814826758838299d-01, &amp;
+            1.87773861553947652d-01, &amp;
+            7.05411311687214049d-01, &amp;
+            1.87773861553947652d-01, &amp;
+            3.05712299064280657d-01, &amp;
+            5.74781729734824332d-01, &amp;
+            5.74781729734824332d-01, &amp;
+            3.05712299064280657d-01, &amp;
+            1.19505971200895011d-01, &amp;
+            1.19505971200895011d-01, &amp;
+            2.00937712831852522d-01, &amp;
+            5.98124574336294956d-01, &amp;
+            2.00937712831852522d-01, &amp;
+            3.12136025667340666d-01, &amp;
+            4.71786454332148553d-01, &amp;
+            2.16077520000510781d-01, &amp;
+            2.16077520000510781d-01, &amp;
+            4.71786454332148553d-01, &amp;
+            3.12136025667340666d-01, &amp;
+            1.24684019230250798d-01, &amp;
+            4.37657990384874573d-01, &amp;
+            4.37657990384874629d-01, &amp;
+            3.33333333333333370d-01 /)
+    case (22:23)
+       quad_w = (/ &amp;
+            3.21914913042279987d-04, &amp;
+            3.21920653816200027d-04, &amp;
+            5.06736785512200026d-04, &amp;
+            5.06737628800200002d-04, &amp;
+            9.83996496743379939d-04, &amp;
+            1.67336568919439991d-03, &amp;
+            1.67336696041466004d-03, &amp;
+            2.14366616876598016d-03, &amp;
+            2.14367299427493984d-03, &amp;
+            2.15019006860338010d-03, &amp;
+            2.15019245491083989d-03, &amp;
+            2.84673146025493998d-03, &amp;
+            2.84673200667936001d-03, &amp;
+            3.08219340075451985d-03, &amp;
+            3.08223782090761992d-03, &amp;
+            3.10072567954041995d-03, &amp;
+            3.10072659758636000d-03, &amp;
+            3.48181651469780000d-03, &amp;
+            3.48181659209355994d-03, &amp;
+            3.75331288601519998d-03, &amp;
+            3.75331322825490010d-03, &amp;
+            3.95373841694608014d-03, &amp;
+            3.95373862424540021d-03, &amp;
+            4.01766723113114021d-03, &amp;
+            4.39817205367853958d-03, &amp;
+            4.39817240562432026d-03, &amp;
+            4.56520978577614010d-03, &amp;
+            4.56521068056574015d-03, &amp;
+            4.64108743752649974d-03, &amp;
+            4.64109078311279993d-03, &amp;
+            4.72499030887606024d-03, &amp;
+            4.73137342419651958d-03, &amp;
+            4.73137426471858039d-03, &amp;
+            4.77778861424345974d-03, &amp;
+            4.77778964215294037d-03, &amp;
+            4.80694212439825973d-03, &amp;
+            4.80694234129467983d-03, &amp;
+            4.99957621060607982d-03, &amp;
+            4.99957759252283966d-03, &amp;
+            5.01506596383030027d-03, &amp;
+            5.01506733177848035d-03, &amp;
+            6.24683380927378018d-03, &amp;
+            6.24683630622807975d-03, &amp;
+            7.00986545686627972d-03, &amp;
+            7.16681084481449963d-03, &amp;
+            7.16681360626740017d-03, &amp;
+            7.68020713700482034d-03, &amp;
+            7.68020917124476003d-03, &amp;
+            9.22619128070660023d-03, &amp;
+            9.22619315728247930d-03, &amp;
+            9.79169917866620082d-03, &amp;
+            9.79170099968459939d-03, &amp;
+            9.88163756710641952d-03, &amp;
+            9.88163833383524058d-03, &amp;
+            9.94031955096452008d-03, &amp;
+            9.94032428882471973d-03, &amp;
+            1.03590919242149797d-02, &amp;
+            1.03590967446461797d-02, &amp;
+            1.04471535719773603d-02, &amp;
+            1.04471625977761804d-02, &amp;
+            1.07432286942350207d-02, &amp;
+            1.07432293003467596d-02, &amp;
+            1.11109066517914995d-02, &amp;
+            1.11109080101381603d-02, &amp;
+            1.11672652727683192d-02, &amp;
+            1.11672689369559392d-02, &amp;
+            1.12379462472983003d-02, &amp;
+            1.12379490219807407d-02, &amp;
+            1.14850697922616995d-02, &amp;
+            1.14851697218862001d-02, &amp;
+            1.16399188051158793d-02, &amp;
+            1.16399213752905809d-02, &amp;
+            1.34741599823702592d-02, &amp;
+            1.34741653553573804d-02, &amp;
+            1.40219379005194593d-02, &amp;
+            1.40219382303430600d-02, &amp;
+            1.43763135085955996d-02, &amp;
+            1.43763193635647202d-02, &amp;
+            1.49490414531406601d-02, &amp;
+            1.49490461379263792d-02, &amp;
+            1.54502179258058803d-02, &amp;
+            1.54502192977828603d-02, &amp;
+            1.57015508544009995d-02, &amp;
+            1.57015536977638988d-02, &amp;
+            1.59595776511896985d-02, &amp;
+            1.59595834189088411d-02, &amp;
+            1.60714962031034414d-02, &amp;
+            1.65197800693984397d-02, &amp;
+            1.65197815914437593d-02, &amp;
+            1.78084547794283808d-02, &amp;
+            1.78084638027055410d-02, &amp;
+            1.82870594999016596d-02, &amp;
+            1.82870757602077612d-02, &amp;
+            1.82988823495202589d-02, &amp;
+            1.82989026944587185d-02, &amp;
+            1.84972840056952595d-02, &amp;
+            1.84972887529267389d-02, &amp;
+            1.87026811893742408d-02, &amp;
+            1.87775129158745391d-02, &amp;
+            1.87775156264799008d-02, &amp;
+            1.94443846743227386d-02, &amp;
+            1.94443854170873384d-02, &amp;
+            1.96352821774124983d-02, &amp;
+            1.96352901258726210d-02, &amp;
+            1.99383439915741603d-02 /)
+       quad_x = (/ &amp;
+            8.78093038360555980d-03, &amp;
+            9.90367531422026826d-01, &amp;
+            2.70292764500295983d-03, &amp;
+            3.35909214523610888d-02, &amp;
+            9.16750686060796918d-03, &amp;
+            9.67556818255849160d-01, &amp;
+            8.47372006880480963d-03, &amp;
+            7.87819487923347057d-03, &amp;
+            6.76785477700058147d-02, &amp;
+            9.47026695504650684d-01, &amp;
+            4.42974755679502730d-02, &amp;
+            9.14424321488198411d-01, &amp;
+            8.17354244589036001d-03, &amp;
+            2.49745229274137115d-01, &amp;
+            3.83323264605536784d-01, &amp;
+            8.87685035355703866d-01, &amp;
+            1.03532922829686791d-01, &amp;
+            7.72559236181480022d-03, &amp;
+            1.40319242510664965d-01, &amp;
+            8.10459100965161827d-01, &amp;
+            1.80964300371733111d-01, &amp;
+            8.33076794868376158d-01, &amp;
+            8.30109071261870071d-03, &amp;
+            3.48407706147464413d-02, &amp;
+            2.74028767960784569d-01, &amp;
+            7.17398222477815373d-01, &amp;
+            2.39497685823448492d-01, &amp;
+            8.18591858449640997d-03, &amp;
+            6.88361520745162016d-03, &amp;
+            4.84374148569940710d-01, &amp;
+            4.96076777274075842d-01, &amp;
+            6.11293677624544007d-01, &amp;
+            3.80432398034451058d-01, &amp;
+            7.30389071352437580d-01, &amp;
+            8.39871686392957076d-03, &amp;
+            6.12852567561232742d-01, &amp;
+            7.54759610367827967d-03, &amp;
+            7.95253165133092028d-03, &amp;
+            3.55977487045975038d-01, &amp;
+            9.11023697796607856d-01, &amp;
+            4.37233605166327324d-02, &amp;
+            3.88480061835098089d-02, &amp;
+            9.67032117936383329d-02, &amp;
+            8.73226911312057208d-02, &amp;
+            4.21445202084212989d-02, &amp;
+            8.48561797496110382d-01, &amp;
+            8.47792133386370939d-01, &amp;
+            1.06743588939807288d-01, &amp;
+            1.83396652199130483d-01, &amp;
+            4.16340541166750275d-02, &amp;
+            7.61163225156012091d-01, &amp;
+            1.94159925414425727d-01, &amp;
+            7.57937874717254378d-01, &amp;
+            4.39826512394949631d-02, &amp;
+            3.69760535918266034d-02, &amp;
+            5.36318713434217220d-01, &amp;
+            1.00125694892085559d-01, &amp;
+            7.91226669352416367d-01, &amp;
+            3.79866714177089504d-02, &amp;
+            4.15741402896506851d-01, &amp;
+            6.50710649146256426d-01, &amp;
+            4.20141133438471370d-02, &amp;
+            4.25548444253718780d-02, &amp;
+            2.92062710724048213d-01, &amp;
+            5.38972953818024569d-01, &amp;
+            4.19303182848852096d-01, &amp;
+            6.54947200970023902d-01, &amp;
+            3.00735279091707497d-01, &amp;
+            3.75240077158539465d-01, &amp;
+            3.45398028278609159d-01, &amp;
+            9.94532168761183000d-02, &amp;
+            1.59830935958545917d-01, &amp;
+            1.79732666166710520d-01, &amp;
+            7.12458446194300654d-01, &amp;
+            1.06606567863572976d-01, &amp;
+            7.00170190409594828d-01, &amp;
+            9.93303629800890153d-02, &amp;
+            6.06564805252144401d-01, &amp;
+            1.02322354270435678d-01, &amp;
+            2.53338232493848958d-01, &amp;
+            6.16622671521697030d-01, &amp;
+            2.76950069310860636d-01, &amp;
+            9.04184571873113963d-02, &amp;
+            4.98152276724809107d-01, &amp;
+            9.28231860168092782d-02, &amp;
+            3.73841869922935222d-01, &amp;
+            2.52167884040675250d-01, &amp;
+            5.08750021870751357d-01, &amp;
+            3.90557911673062308d-01, &amp;
+            1.70614146909638775d-01, &amp;
+            5.26673776131228677d-01, &amp;
+            3.48758152762927764d-01, &amp;
+            2.58805359601742890d-01, &amp;
+            1.69661455805253159d-01, &amp;
+            3.01352180687450177d-01, &amp;
+            2.58020240975885939d-01, &amp;
+            4.58474086019785010d-01, &amp;
+            1.84889868349759512d-01, &amp;
+            6.13074033846508271d-01, &amp;
+            1.92161175099372916d-01, &amp;
+            4.18054116059880854d-01, &amp;
+            1.65061264203595126d-01, &amp;
+            5.15920573962520668d-01, &amp;
+            2.98271893574988567d-01, &amp;
+            4.09889460233984648d-01 /)
+       quad_y = (/ &amp;
+            9.90367643677167120d-01, &amp;
+            8.78092162322047058d-03, &amp;
+            3.35914404438575273d-02, &amp;
+            2.70289467099126988d-03, &amp;
+            9.16763530514502940d-03, &amp;
+            8.47371766561199995d-03, &amp;
+            9.67556943534521152d-01, &amp;
+            6.76784943862445698d-02, &amp;
+            7.87816592908031042d-03, &amp;
+            4.42974541187345430d-02, &amp;
+            9.47026667648668719d-01, &amp;
+            8.17354551315085942d-03, &amp;
+            9.14424423403092379d-01, &amp;
+            3.83323243471991093d-01, &amp;
+            2.49745126800546113d-01, &amp;
+            1.03532880944576855d-01, &amp;
+            8.87684993183961102d-01, &amp;
+            1.40319099197374453d-01, &amp;
+            7.72559346238366022d-03, &amp;
+            1.80964252392639635d-01, &amp;
+            8.10459051533411579d-01, &amp;
+            8.30109396770633938d-03, &amp;
+            8.33076854539201328d-01, &amp;
+            3.48406969481753828d-02, &amp;
+            7.17398184794842408d-01, &amp;
+            2.74028730438646229d-01, &amp;
+            8.18591822619202034d-03, &amp;
+            2.39497556667727540d-01, &amp;
+            4.84374089268737262d-01, &amp;
+            6.88362329487846036d-03, &amp;
+            4.96076752950697974d-01, &amp;
+            3.80432369123854808d-01, &amp;
+            6.11293646653270017d-01, &amp;
+            8.39871797008884084d-03, &amp;
+            7.30389089540720238d-01, &amp;
+            7.54759796947069000d-03, &amp;
+            6.12852548458174939d-01, &amp;
+            3.55977382672125198d-01, &amp;
+            7.95253585022510055d-03, &amp;
+            4.37233665344515798d-02, &amp;
+            9.11023680744558972d-01, &amp;
+            9.67030908282074386d-02, &amp;
+            3.88479942385929200d-02, &amp;
+            8.73226620391185926d-02, &amp;
+            8.48561778910813080d-01, &amp;
+            4.21445420914702829d-02, &amp;
+            1.06743594247185269d-01, &amp;
+            8.47792132814563337d-01, &amp;
+            4.16340521608478675d-02, &amp;
+            1.83396519692989479d-01, &amp;
+            1.94159920285151555d-01, &amp;
+            7.61163215393801496d-01, &amp;
+            4.39826608586339970d-02, &amp;
+            7.57937824230781043d-01, &amp;
+            5.36318607643598400d-01, &amp;
+            3.69760780935054975d-02, &amp;
+            7.91226709354494906d-01, &amp;
+            1.00125755467333100d-01, &amp;
+            4.15741312855823941d-01, &amp;
+            3.79867061534658323d-02, &amp;
+            4.20141226713043325d-02, &amp;
+            6.50710564508435008d-01, &amp;
+            2.92062602348401423d-01, &amp;
+            4.25548546752924084d-02, &amp;
+            4.19303146900489976d-01, &amp;
+            5.38972909361025154d-01, &amp;
+            3.00735263616239701d-01, &amp;
+            6.54947181273066725d-01, &amp;
+            3.45398013075241428d-01, &amp;
+            3.75240069567300216d-01, &amp;
+            1.59830869518720109d-01, &amp;
+            9.94531960132419290d-02, &amp;
+            7.12458543092416963d-01, &amp;
+            1.79732772223984316d-01, &amp;
+            7.00170178417459432d-01, &amp;
+            1.06606585567699585d-01, &amp;
+            6.06564798479617973d-01, &amp;
+            9.93303896768503169d-02, &amp;
+            2.53338157952792686d-01, &amp;
+            1.02322382618892649d-01, &amp;
+            2.76950206057529957d-01, &amp;
+            6.16622790062366977d-01, &amp;
+            4.98152263700127329d-01, &amp;
+            9.04185045149401567d-02, &amp;
+            3.73841851690813132d-01, &amp;
+            9.28232584789973614d-02, &amp;
+            2.52168092569659996d-01, &amp;
+            3.90558054432983304d-01, &amp;
+            5.08750143766104501d-01, &amp;
+            5.26673803955408082d-01, &amp;
+            1.70614225753683513d-01, &amp;
+            2.58805508488577751d-01, &amp;
+            3.48758349170294024d-01, &amp;
+            3.01352218396399474d-01, &amp;
+            1.69661596321855956d-01, &amp;
+            4.58474177447826814d-01, &amp;
+            2.58020381901081897d-01, &amp;
+            1.84889870455059613d-01, &amp;
+            1.92161199406938266d-01, &amp;
+            6.13074039838859774d-01, &amp;
+            1.65061333641644048d-01, &amp;
+            4.18054119924382017d-01, &amp;
+            2.98271900522947497d-01, &amp;
+            5.15920553436243434d-01, &amp;
+            4.09889431779198565d-01 /)
+    case (24:25)
+       quad_w = (/ &amp;
+            7.43670892954319956d-04, &amp;
+            7.44451763103859973d-04, &amp;
+            7.50297218993039986d-04, &amp;
+            7.52960415636219995d-04, &amp;
+            7.65943435753619977d-04, &amp;
+            1.15163172435564010d-03, &amp;
+            1.18245335208132002d-03, &amp;
+            1.43755718053226005d-03, &amp;
+            1.49312443676078007d-03, &amp;
+            1.51920813685515999d-03, &amp;
+            1.60462298441487990d-03, &amp;
+            1.85147992173021999d-03, &amp;
+            1.87035930174590001d-03, &amp;
+            1.92262716115364002d-03, &amp;
+            1.93353893342309993d-03, &amp;
+            1.95962775887662021d-03, &amp;
+            1.97866413439409979d-03, &amp;
+            2.20161258618361980d-03, &amp;
+            2.29535540867427997d-03, &amp;
+            2.35118347173011999d-03, &amp;
+            2.50074219087720014d-03, &amp;
+            2.61939150778230014d-03, &amp;
+            2.72110520462309985d-03, &amp;
+            2.84656244562424016d-03, &amp;
+            2.95537114945152021d-03, &amp;
+            2.98439838434789995d-03, &amp;
+            3.36310951436008011d-03, &amp;
+            3.41539243122436021d-03, &amp;
+            3.47656295559937989d-03, &amp;
+            3.62301353211776003d-03, &amp;
+            3.63640948064797992d-03, &amp;
+            3.65044654233049985d-03, &amp;
+            3.68023333877967986d-03, &amp;
+            3.70599616275625989d-03, &amp;
+            3.74461071680203981d-03, &amp;
+            3.93020336298469976d-03, &amp;
+            3.93108632115671958d-03, &amp;
+            4.02531805328903980d-03, &amp;
+            4.07214302363652011d-03, &amp;
+            4.07394020759454037d-03, &amp;
+            4.62220733060147992d-03, &amp;
+            4.73373175827346022d-03, &amp;
+            4.85661050683392024d-03, &amp;
+            4.98767905754681981d-03, &amp;
+            5.16839018367025969d-03, &amp;
+            5.61316385828362040d-03, &amp;
+            5.71545593722568024d-03, &amp;
+            5.77752837433553965d-03, &amp;
+            6.77879284784616010d-03, &amp;
+            6.79924814498279999d-03, &amp;
+            6.88774069183087975d-03, &amp;
+            6.89805079711337983d-03, &amp;
+            6.92044199518869994d-03, &amp;
+            7.03170099884206038d-03, &amp;
+            7.04957255044669998d-03, &amp;
+            7.10020559953911980d-03, &amp;
+            7.22592122586496015d-03, &amp;
+            7.51229898194261982d-03, &amp;
+            7.64089020609134018d-03, &amp;
+            7.77753620844764005d-03, &amp;
+            8.22854430002250073d-03, &amp;
+            8.26378797863173975d-03, &amp;
+            8.34237772252609949d-03, &amp;
+            8.37046564926246031d-03, &amp;
+            8.43373316802603981d-03, &amp;
+            8.44411150824657918d-03, &amp;
+            8.60435563454070053d-03, &amp;
+            8.73405341320888061d-03, &amp;
+            8.83319498072144063d-03, &amp;
+            9.14838107374077968d-03, &amp;
+            9.17884262293281947d-03, &amp;
+            9.31962847605543980d-03, &amp;
+            9.48905302949309970d-03, &amp;
+            9.59239612891125970d-03, &amp;
+            9.70402210222029958d-03, &amp;
+            9.73600360963523988d-03, &amp;
+            1.00427540247369808d-02, &amp;
+            1.00836954666032805d-02, &amp;
+            1.10871081380620202d-02, &amp;
+            1.14851220254186207d-02, &amp;
+            1.16732558699485407d-02, &amp;
+            1.17441567669104800d-02, &amp;
+            1.20341049508800191d-02, &amp;
+            1.20455396476602007d-02, &amp;
+            1.22838524740655607d-02, &amp;
+            1.23268157859727796d-02, &amp;
+            1.23378265025979195d-02, &amp;
+            1.24852301355002394d-02, &amp;
+            1.25013272040772200d-02, &amp;
+            1.25245434713042395d-02, &amp;
+            1.25468125062743203d-02, &amp;
+            1.25741038113154398d-02, &amp;
+            1.27505145223701395d-02, &amp;
+            1.28272255989636593d-02, &amp;
+            1.28987375314841002d-02, &amp;
+            1.35003876996597997d-02, &amp;
+            1.37215768421761197d-02, &amp;
+            1.38536200743844401d-02, &amp;
+            1.39142207681951600d-02, &amp;
+            1.43603690552458994d-02, &amp;
+            1.44413417478117794d-02, &amp;
+            1.46651364879327208d-02, &amp;
+            1.59451439778369002d-02, &amp;
+            1.59541830142902186d-02, &amp;
+            1.60469480164712186d-02, &amp;
+            1.60809304389865210d-02, &amp;
+            1.61212063766777193d-02, &amp;
+            1.63536223210394814d-02, &amp;
+            1.64973158347286215d-02, &amp;
+            1.65914048012731803d-02, &amp;
+            1.67428581325522394d-02, &amp;
+            1.67734236396014612d-02, &amp;
+            1.68524521493869997d-02, &amp;
+            1.70180731383503016d-02, &amp;
+            1.71232617661549805d-02, &amp;
+            1.72764408625340794d-02, &amp;
+            1.78391437851441598d-02, &amp;
+            1.82328112507953617d-02, &amp;
+            1.82586354353244384d-02, &amp;
+            1.85962405508796197d-02 /)
+       quad_x = (/ &amp;
+            8.28815950328004938d-03, &amp;
+            4.61842203024054765d-01, &amp;
+            7.10664412391336965d-03, &amp;
+            9.84761314169917745d-01, &amp;
+            5.37444786904926808d-01, &amp;
+            0.00000000000000000d+00, &amp;
+            4.91413192936130228d-01, &amp;
+            7.03459370203696026d-03, &amp;
+            9.56473471422835564d-01, &amp;
+            3.70198792044878489d-02, &amp;
+            1.02412454274705189d-01, &amp;
+            5.92806581150854384d-01, &amp;
+            5.09484223714778972d-03, &amp;
+            8.15620236892555979d-03, &amp;
+            4.24936107568290589d-02, &amp;
+            9.49554350084383270d-01, &amp;
+            8.93278747123906980d-01, &amp;
+            6.93176129272642973d-03, &amp;
+            9.03583903066475735d-01, &amp;
+            9.05665738208676352d-02, &amp;
+            8.39293327870077946d-03, &amp;
+            6.26124568607112408d-01, &amp;
+            6.28015929789050003d-03, &amp;
+            8.27253925736684104d-01, &amp;
+            6.20058753533764013d-03, &amp;
+            1.67690031118501726d-01, &amp;
+            7.19935306956690391d-01, &amp;
+            2.74974009023730925d-01, &amp;
+            7.92575820045371068d-03, &amp;
+            6.99812207516747973d-03, &amp;
+            8.12524877326333606d-01, &amp;
+            7.35369699704218997d-03, &amp;
+            7.28366593541118323d-01, &amp;
+            1.80064230456451035d-01, &amp;
+            2.65810246776185144d-01, &amp;
+            7.08923645195702959d-03, &amp;
+            3.77405430204306891d-01, &amp;
+            3.69649608667712015d-02, &amp;
+            9.20319410980497077d-01, &amp;
+            4.25477806431242625d-02, &amp;
+            6.19127839498291199d-01, &amp;
+            3.76269720917770667d-01, &amp;
+            9.56111149690226370d-02, &amp;
+            3.02473410377330811d-02, &amp;
+            8.73990569175389420d-01, &amp;
+            8.60413373495810152d-01, &amp;
+            3.47307852352397028d-02, &amp;
+            1.04360660834319385d-01, &amp;
+            7.79762282475355173d-01, &amp;
+            1.85865164256198701d-02, &amp;
+            3.24585286618060409d-02, &amp;
+            8.37129390115691763d-01, &amp;
+            8.36602075314568649d-02, &amp;
+            7.84070242500545245d-02, &amp;
+            4.92923864845806192d-01, &amp;
+            1.87063758407254310d-01, &amp;
+            4.89263696702498696d-01, &amp;
+            4.01982618371926129d-02, &amp;
+            7.89425927886499235d-01, &amp;
+            1.68626045642933931d-01, &amp;
+            3.75090191317426158d-01, &amp;
+            3.56362876879865523d-02, &amp;
+            5.88754816480373977d-01, &amp;
+            3.73308082181673107d-02, &amp;
+            2.82076999337394940d-01, &amp;
+            6.81927760331980215d-01, &amp;
+            3.74938324381669033d-02, &amp;
+            6.98407920412670635d-01, &amp;
+            2.65439089407868700d-01, &amp;
+            1.42984844080003226d-01, &amp;
+            7.62355400764653357d-01, &amp;
+            9.34222022748718572d-02, &amp;
+            5.75900447992342857d-01, &amp;
+            3.82242733252499911d-01, &amp;
+            4.11414081674605914d-02, &amp;
+            8.02462538378700407d-02, &amp;
+            7.62522981940988220d-01, &amp;
+            1.52494144513054986d-01, &amp;
+            6.22159195833245082d-02, &amp;
+            1.10953903607602600d-01, &amp;
+            4.57562721205710232d-01, &amp;
+            4.32286513637363146d-01, &amp;
+            5.86500285024072143d-01, &amp;
+            8.69359250817775542d-02, &amp;
+            9.29594906936040410d-02, &amp;
+            6.66193214145371027d-01, &amp;
+            4.78030636222659733d-01, &amp;
+            4.37221529457706370d-01, &amp;
+            6.77922450466911242d-01, &amp;
+            2.42343125566004292d-01, &amp;
+            2.28892542030513069d-01, &amp;
+            3.31506504995850992d-01, &amp;
+            3.42420052660664720d-01, &amp;
+            8.62630046474943124d-02, &amp;
+            5.11318894663489898d-01, &amp;
+            1.53897784100072987d-01, &amp;
+            6.77995134847152903d-01, &amp;
+            1.66460046941081741d-01, &amp;
+            9.50910318887998596d-02, &amp;
+            3.43604813671159415d-01, &amp;
+            5.56041702536563265d-01, &amp;
+            1.45240402951300585d-01, &amp;
+            1.61968515623819309d-01, &amp;
+            5.80016484426166490d-01, &amp;
+            2.45020122328838130d-01, &amp;
+            2.55762189179427057d-01, &amp;
+            2.20523998551106881d-01, &amp;
+            4.94018311128501864d-01, &amp;
+            2.53157068979829813d-01, &amp;
+            5.84689111635684711d-01, &amp;
+            1.66033360227846316d-01, &amp;
+            2.50542629246108650d-01, &amp;
+            3.51933680218187273d-01, &amp;
+            3.50266883541865415d-01, &amp;
+            4.40089248551159162d-01, &amp;
+            4.68085547154615866d-01, &amp;
+            1.77023776394716170d-01, &amp;
+            3.90092077950073890d-01, &amp;
+            2.80584777412016484d-01, &amp;
+            3.36152334744000192d-01 /)
+       quad_y = (/ &amp;
+            9.84820276886916091d-01, &amp;
+            5.38157796975945235d-01, &amp;
+            8.08423613900626989d-03, &amp;
+            7.00157551338365016d-03, &amp;
+            4.62555213095073137d-01, &amp;
+            4.88767688014024815d-01, &amp;
+            0.00000000000000000d+00, &amp;
+            9.57415805369697726d-01, &amp;
+            3.64655449485041805d-02, &amp;
+            7.09085771655653969d-03, &amp;
+            8.93612559493705216d-01, &amp;
+            4.94517055997579016d-03, &amp;
+            9.96676659188639458d-02, &amp;
+            4.15561148783828369d-02, &amp;
+            9.49486526035188683d-01, &amp;
+            8.17945072920133950d-03, &amp;
+            5.32243262623255040d-03, &amp;
+            9.06540102043310259d-01, &amp;
+            8.94771171076897964d-02, &amp;
+            7.05253420051083022d-03, &amp;
+            6.66317993111130491d-01, &amp;
+            9.21975831529043069d-03, &amp;
+            8.33520746052696104d-01, &amp;
+            1.66513493933034384d-01, &amp;
+            7.42469325522889689d-01, &amp;
+            6.57177435282118964d-03, &amp;
+            6.43545349617857983d-03, &amp;
+            7.18529612071872048d-01, &amp;
+            1.76641137471415688d-01, &amp;
+            2.70476725400406126d-01, &amp;
+            8.22995332101711038d-03, &amp;
+            5.93416787545265834d-01, &amp;
+            2.64881755375200645d-01, &amp;
+            8.11584897668176097d-01, &amp;
+            6.85535254287162037d-03, &amp;
+            3.75763265974370375d-01, &amp;
+            6.14857353375739768d-01, &amp;
+            9.21079230289327588d-01, &amp;
+            4.26025082113655196d-02, &amp;
+            3.72689941794178067d-02, &amp;
+            3.72405571380860945d-01, &amp;
+            8.14364220110925033d-03, &amp;
+            8.77109837260123815d-01, &amp;
+            9.43858903393270943d-02, &amp;
+            3.13198990882952999d-02, &amp;
+            1.04901978204618551d-01, &amp;
+            8.60985646288627726d-01, &amp;
+            3.57152881004367331d-02, &amp;
+            1.87231819926514054d-01, &amp;
+            4.83439767879356108d-01, &amp;
+            7.78347491604169606d-01, &amp;
+            8.04060570156132082d-02, &amp;
+            8.42141481705134476d-01, &amp;
+            8.49927089144855707d-02, &amp;
+            4.89285591471007586d-01, &amp;
+            3.45210858281013722d-02, &amp;
+            1.90774755076876211d-02, &amp;
+            1.69114318710903100d-01, &amp;
+            4.12206731483510391d-02, &amp;
+            7.89486064058543491d-01, &amp;
+            5.89531827201264402d-01, &amp;
+            3.68125621769859079d-01, &amp;
+            3.59968962541015181d-02, &amp;
+            6.79070467353278029d-01, &amp;
+            3.73639992361438078d-02, &amp;
+            2.80333034572528672d-01, &amp;
+            2.63401618001443627d-01, &amp;
+            3.64154673321903724d-02, &amp;
+            6.98071743619319895d-01, &amp;
+            7.61225461845348228d-01, &amp;
+            9.43741220275126635d-02, &amp;
+            1.47979983683170668d-01, &amp;
+            3.82132964169788814d-01, &amp;
+            4.26716362301207131d-02, &amp;
+            5.71808287443183128d-01, &amp;
+            7.70220438204239133d-01, &amp;
+            1.55942057736171147d-01, &amp;
+            8.42965421322242059d-02, &amp;
+            4.53818131887343823d-01, &amp;
+            4.58601407117093463d-01, &amp;
+            4.79531356021004884d-01, &amp;
+            1.23059123747237098d-01, &amp;
+            8.34119779793473515d-02, &amp;
+            6.75567701335075710d-01, &amp;
+            2.32650089272655736d-01, &amp;
+            2.44829400740551262d-01, &amp;
+            6.61749044835232558d-02, &amp;
+            4.44214558524446468d-01, &amp;
+            9.29096534576585587d-02, &amp;
+            8.89793655129165195d-02, &amp;
+            6.78005308167173304d-01, &amp;
+            5.84738155974062090d-01, &amp;
+            5.13924572273639857d-01, &amp;
+            3.34097624923400338d-01, &amp;
+            1.38015472055397104d-01, &amp;
+            6.78806261956241275d-01, &amp;
+            1.66335892526874418d-01, &amp;
+            1.58221450484881232d-01, &amp;
+            5.66659033254315991d-01, &amp;
+            9.78960873456889424d-02, &amp;
+            3.46891782094665757d-01, &amp;
+            3.59953449105225420d-01, &amp;
+            5.81013137333040497d-01, &amp;
+            2.56067464067227468d-01, &amp;
+            5.88146955210166911d-01, &amp;
+            1.65224406504666743d-01, &amp;
+            3.49650746610599639d-01, &amp;
+            2.54944844845291452d-01, &amp;
+            2.54336911501686025d-01, &amp;
+            1.66660391647925621d-01, &amp;
+            2.52324019170540481d-01, &amp;
+            4.95900762752831348d-01, &amp;
+            1.80538036780013122d-01, &amp;
+            4.35858232988101280d-01, &amp;
+            2.12057610494094939d-01, &amp;
+            3.55268157077367253d-01, &amp;
+            4.67035292226627319d-01, &amp;
+            3.32315281930007145d-01, &amp;
+            3.89804117668031302d-01, &amp;
+            2.77850004435602926d-01 /)
+       ! end of triangle_quadrature/points.F90
+    case default
+       err = 1
+       write(*,*) 'Basis not supported: triOrder =', triOrder
+       return
+    end select
+
+    ! Load quadrature rules into gaussTri.  Normalize weights, just in case.
+
+    allocate(gaussTri(nTriGauss))
+
+    sumwt = 0.0_RKIND
+    do ig = 1, nTriGauss
+       sumwt = sumwt + quad_w(ig)
+    end do
+    sumwt = (1.0_RKIND - sumwt) / nTriGauss
+    do ig = 1, nTriGauss
+       gaussTri(ig)%weight = quad_w(ig) + sumwt
+       gaussTri(ig)%bc(1)  = quad_x(ig)
+       gaussTri(ig)%bc(2)  = quad_y(ig)
+       gaussTri(ig)%bc(3)  = 1.0_RKIND - quad_x(ig) - quad_y(ig)
+    end do
+
+    deallocate(quad_w)
+    deallocate(quad_x)
+    deallocate(quad_y)
+
+  end subroutine init_tri_integration!}}}
+
+end module mpas_ocn_cdg_basis

Modified: branches/mpas_cdg_advection/src/core_ocean/mpas_ocn_mpas_core.F
===================================================================
--- branches/mpas_cdg_advection/src/core_ocean/mpas_ocn_mpas_core.F        2013-04-25 15:35:28 UTC (rev 2788)
+++ branches/mpas_cdg_advection/src/core_ocean/mpas_ocn_mpas_core.F        2013-05-02 22:15:52 UTC (rev 2789)
@@ -51,6 +51,7 @@
 
       use mpas_grid_types
       use mpas_ocn_tracer_advection
+      use mpas_ocn_cdg_advection, only : mpas_ocn_cdg_advection_init
 
       implicit none
 
@@ -102,6 +103,9 @@
       call mpas_ocn_tracer_advection_init(err_tmp)
       err = ior(err,err_tmp)
 
+      call mpas_ocn_cdg_advection_init(err_tmp)
+      err = ior(err,err_tmp)
+
       call ocn_monthly_forcing_init(err_tmp)
       err = ior(err, err_tmp)
 
@@ -245,6 +249,7 @@
       use mpas_rbf_interpolation
       use mpas_vector_reconstruction
       use mpas_ocn_tracer_advection
+      use mpas_ocn_cdg_basis, only : mpas_ocn_cdg_basis_init
       use ocn_advection
    
       implicit none
@@ -261,6 +266,9 @@
       call mpas_ocn_tracer_advection_coefficients(mesh, err1)
       err = ior(err, err1)
 
+      call mpas_ocn_cdg_basis_init(mesh, err1)
+      err = ior(err, err1)
+
       call ocn_time_average_init(block % state % time_levs(1) % state)
    
       call mpas_timer_start(&quot;diagnostic solve&quot;, .false., initDiagSolveTimer)

</font>
</pre>