subroutine hc6dh1i(c,             &,13
       ids,ide,                   &
       ims,ime,                   &
       its,ite)
! Horizontal cyclic `6dh' scheme, for 1-dimensional array, active index i
use cpt_consts
implicit none
integer, intent(IN   ) :: ids,ide
integer, intent(IN   ) :: ims,ime
integer, intent(IN   ) :: its,ite

real, dimension(ims:ime), &
         intent(INOUT) :: c

real, dimension(1):: p

call hase1i(c, 1,                 &
       ids,ide,                   &
       ims,ime,                   &
       its,ite)

call sd1b1i(c,b6qi,               &
       ids,ide,                   &
       ims,ime,                   &
       its,ite)

call hase1i(c, 1,                 &
       ids,ide,                   &
       ims,ime,                   &
       its,ite)

call ef1b1i(c,k6q1,               &
       ids,ide,                   &
       ims,ime,                   &
       its,ite)

call haes1i(c, 1,                 &
       ids,ide,                   &
       ims,ime,                   &
       its,ite)

call ef1a1i(c,k6q1,               &
       ids,ide,                   &
       ims,ime,                   &
       its,ite)

call ra1a1i(c,p,l6q1,fl6qs,       &
       ids,ide,                   &
       ims,ime,                   &
       its,ite)

call hasp1i(c,p,1,                &
       ids,ide,                   &
       ims,ime,                   &
       its,ite)

call rf1a1i(c,  l6q1,             &
       ids,ide,                   &
       ims,ime,                   &
       its,ite)

call ra1b1i(c,p,l6q1,fl6qs,       &
       ids,ide,                   &
       ims,ime,                   &
       its,ite)

call haep1i(c,p,1,                &
       ids,ide,                   &
       ims,ime,                   &
       its,ite)

call rf1b1i(c,  l6q1,             &
       ids,ide,                   &
       ims,ime,                   &
       its,ite)

end subroutine hc6dh1i


subroutine hc6dh2i(c,             &,13
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)
! Horizontal cyclic `6dh' scheme, for 2-dimensional array, active index i
use cpt_consts
implicit none
integer, intent(IN   ) :: ids,ide, jds,jde
integer, intent(IN   ) :: ims,ime, jms,jme
integer, intent(IN   ) :: its,ite, jts,jte

real, dimension(ims:ime, jms:jme), &
         intent(INOUT) :: c

real, dimension(1, jms:jme):: p

call hase2i(c, 1,                 &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

call sd1b2i(c,b6qi,               &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

call hase2i(c, 1,                 &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

call ef1b2i(c,k6q1,               &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

call haes2i(c, 1,                 &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

call ef1a2i(c,k6q1,               &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

call ra1a2i(c,p,l6q1,fl6qs,       &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

call hasp2i(c,p,1,                &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

call rf1a2i(c,  l6q1,             &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

call ra1b2i(c,p,l6q1,fl6qs,       &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

call haep2i(c,p,1,                &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

call rf1b2i(c,  l6q1,             &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

end subroutine hc6dh2i


subroutine hc6dh2j(c,             &,13
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)
! Horizontal cyclic `6dh' scheme, for 2-dimensional array, active index j
use cpt_consts
implicit none
integer, intent(IN   ) :: ids,ide, jds,jde
integer, intent(IN   ) :: ims,ime, jms,jme
integer, intent(IN   ) :: its,ite, jts,jte

real, dimension(ims:ime, jms:jme), &
         intent(INOUT) :: c

real, dimension(ims:ime, 1):: p

call hase2j(c, 1,                 &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

call sd1b2j(c,b6qi,               &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

call hase2j(c, 1,                 &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

call ef1b2j(c,k6q1,               &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

call haes2j(c, 1,                 &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

call ef1a2j(c,k6q1,               &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

call ra1a2j(c,p,l6q1,fl6qs,       &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

call hasp2j(c,p,1,                &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

call rf1a2j(c,  l6q1,             &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

call ra1b2j(c,p,l6q1,fl6qs,       &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

call haep2j(c,p,1,                &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

call rf1b2j(c,  l6q1,             &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

end subroutine hc6dh2j




subroutine hc6dh3i(c,             &,13
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)
! Horizontal cyclic `6dh' scheme, for 3-dimensional array, active index i
use cpt_consts
implicit none
integer, intent(IN   ) :: ids,ide, jds,jde, kds,kde 
integer, intent(IN   ) :: ims,ime, jms,jme, kms,kme
integer, intent(IN   ) :: its,ite, jts,jte, kts,kte

real, dimension(ims:ime, kms:kme, jms:jme), &
         intent(INOUT) :: c

real, dimension(1, kms:kme, jms:jme):: p

call hase3i(c, 1,                 &
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)      

call sd1b3i(c,b6qi,               &
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)     

call hase3i(c, 1,                 &
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)      

call ef1b3i(c,k6q1,               &
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)      

call haes3i(c, 1,                 &
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)      

call ef1a3i(c,k6q1,               &
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)      

call ra1a3i(c,p,l6q1,fl6qs,       &
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)  

call hasp3i(c,p,1,                &
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)  

call rf1a3i(c,  l6q1,             &
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)   

call ra1b3i(c,p,l6q1,fl6qs,       &
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)  

call haep3i(c,p,1,                &
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)      

call rf1b3i(c,  l6q1,             &
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)       

end subroutine hc6dh3i


subroutine hc6dh3j(c,             &,13
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)
! Horizontal cyclic `6dh' scheme, for 3-dimensional array, active index j
use cpt_consts
implicit none
integer, intent(IN   ) :: ids,ide, jds,jde, kds,kde 
integer, intent(IN   ) :: ims,ime, jms,jme, kms,kme
integer, intent(IN   ) :: its,ite, jts,jte, kts,kte

real, dimension(ims:ime, kms:kme, jms:jme), &
         intent(INOUT) :: c

real, dimension(ims:ime, kms:kme, 1):: p

call hase3j(c, 1,                 &
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)      

call sd1b3j(c,b6qi,               &
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)     

call hase3j(c, 1,                 &
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)      

call ef1b3j(c,k6q1,               &
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)      

call haes3j(c, 1,                 &
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)      

call ef1a3j(c,k6q1,               &
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)      

call ra1a3j(c,p,l6q1,fl6qs,       &
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)  

call hasp3j(c,p,1,                &
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)  

call rf1a3j(c,  l6q1,             &
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)   

call ra1b3j(c,p,l6q1,fl6qs,       &
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)  

call haep3j(c,p,1,                &
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)      

call rf1b3j(c,  l6q1,             &
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)       

end subroutine hc6dh3j