subroutine hc8dh1i(c,             &,13
       ids,ide,                   &
       ims,ime,                   &
       its,ite)
! Horizontal cyclic `8dh' 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,b8qi,               &
       ids,ide,                   &
       ims,ime,                   &
       its,ite)

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

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

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

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

call ra2a1i(c,p,l8q1,l8q2,fl8qs,  &
       ids,ide,                   &
       ims,ime,                   &
       its,ite)

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

call rf2a1i(c,  l8q1,l8q2,        &
       ids,ide,                   &
       ims,ime,                   &
       its,ite)

call ra2b1i(c,p,l8q1,l8q2,fl8qs,  &
       ids,ide,                   &
       ims,ime,                   &
       its,ite)

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

call rf2b1i(c,  l8q1,l8q2,        &
       ids,ide,                   &
       ims,ime,                   &
       its,ite)

end subroutine hc8dh1i


subroutine hc8dh2i(c,             &,13
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)
! Horizontal cyclic `8dh' 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,b8qi,               &
       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,k8q1,               &
       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,k8q1,               &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

call ra2a2i(c,p,l8q1,l8q2,fl8qs,  &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

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

call rf2a2i(c,  l8q1,l8q2,        &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

call ra2b2i(c,p,l8q1,l8q2,fl8qs,  &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

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

call rf2b2i(c,  l8q1,l8q2,        &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

end subroutine hc8dh2i


subroutine hc8dh2j(c,             &,13
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)
! Horizontal cyclic `8dh' 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,b8qi,               &
       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,k8q1,               &
       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,k8q1,               &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

call ra2a2j(c,p,l8q1,l8q2,fl8qs,  &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

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

call rf2a2j(c,  l8q1,l8q2,        &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

call ra2b2j(c,p,l8q1,l8q2,fl8qs,  &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

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

call rf2b2j(c,  l8q1,l8q2,        &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

end subroutine hc8dh2j


subroutine hc8dh3i(c,             &,13
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)
! Horizontal cyclic `8dh' 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,b8qi,               &
       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,k8q1,               &
       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,k8q1,               &
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)      

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

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

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

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

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

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

end subroutine hc8dh3i


subroutine hc8dh3j(c,             &,13
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)
! Horizontal cyclic `8dh' 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,b8qi,               &
       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,k8q1,               &
       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,k8q1,               &
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)      

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

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

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

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

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

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

end subroutine hc8dh3j