subroutine hc4mh1i(c,             &,9
       ids,ide,                   &
       ims,ime,                   &
       its,ite)
! Horizontal cyclic `4mh' 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 haes1i(c, 1,                 &
       ids,ide,                   &
       ims,ime,                   &
       its,ite)

call sa1a1i(c,b4m,                &
       ids,ide,                   &
       ims,ime,                   &
       its,ite)

call ra1a1i(c,p,l4m1,fl4ms,       &
       ids,ide,                   &
       ims,ime,                   &
       its,ite)

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

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

call ra1b1i(c,p,l4m1,fl4ms,       &
       ids,ide,                   &
       ims,ime,                   &
       its,ite)

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

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

end subroutine hc4mh1i 


subroutine hc4mh2i(c,             &,9
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)
! Horizontal cyclic `4mh' 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 haes2i(c, 1,                 &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

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

call ra1a2i(c,p,l4m1,fl4ms,       &
       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,  l4m1,             &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

call ra1b2i(c,p,l4m1,fl4ms,       &
       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,  l4m1,             &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

end subroutine hc4mh2i


subroutine hc4mh2j(c,             &,9
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)
! Horizontal cyclic `4mh' 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(ids:ide, 1):: p

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

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

call ra1a2j(c,p,l4m1,fl4ms,       &
       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,  l4m1,             &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

call ra1b2j(c,p,l4m1,fl4ms,       &
       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,  l4m1,             &
       ids,ide, jds,jde,          &
       ims,ime, jms,jme,          &
       its,ite, jts,jte)

end subroutine hc4mh2j


subroutine hc4mh3i(c,             &,9
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)
! Horizontal cyclic `4mh' 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 haes3i(c, 1,                 &
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)      

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

call ra1a3i(c,p,l4m1,fl4ms,       &
       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,  l4m1,             &
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)   

call ra1b3i(c,p,l4m1,fl4ms,       &
       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,  l4m1,             &
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)       

end subroutine hc4mh3i


subroutine hc4mh3j(c,             &,9
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)
! Horizontal cyclic `4mh' 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 haes3j(c, 1,                 &
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)      

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

call ra1a3j(c,p,l4m1,fl4ms,       &
       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,  l4m1,             &
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)   

call ra1b3j(c,p,l4m1,fl4ms,       &
       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,  l4m1,             &
       ids,ide, jds,jde, kds,kde, &
       ims,ime, jms,jme, kms,kme, &
       its,ite, jts,jte, kts,kte)       

end subroutine hc4mh3j