anchor.diff:     R = matmul(Rz, matmul(Ry, Rx))
   end function st_rotmat
   !-------------------------------------------------------------------------------
  +
  +!===============================================================================
  +function tolower(a) result(b)
  +!===============================================================================
  +!  Convert the uppercase characters in a string to lowercase
  +   implicit none
  +   character(len=*), intent(in) :: a
  +   character(len=len(a)) :: b
  +   integer, parameter :: capA = iachar('A'), capZ = iachar('Z')
  +   integer :: i, ia
  +   b = a
  +   do i = 1, len_trim(a)
  +      ia = iachar(a(i:i))
  +      if (ia >= capA .and. ia <= capZ) &
  +         b(i:i) = achar(iachar(a(i:i)) + 32)
  +   enddo
  +end function tolower
  +!-------------------------------------------------------------------------------
   end module sphere_tesselate
   !-------------------------------------------------------------------------------
  
positive.code:       endif
     enddo
  end subroutine st_dump_triangles
  !-------------------------------------------------------------------------------
  
  !===============================================================================
  
negative.code:    st_dump_triangles, &
     st_icosahedron, &
     st_iterate_level, &
     st_new, &
     st_norm_p, &
     st_rotate
  
  