#include "cppdefs.h"
#if defined NBQ && !defined NBQ_IJK
      module module_nh

      implicit none

# ifdef NBQ_IMPIJK
#  include "dmumps_struc.h"
      TYPE (DMUMPS_STRUC) mumps_par
      integer 		   :: mumps_comm
# endif

! debut module ne pas toucher a cette ligne

!.....nombre moyen de termes par ligne pour les matrices : 3D!
      integer, parameter  :: ntcont_nh=14,ntmom_nh=6,ntw_nh=5  

!.....taille du vecteur q ==> lignes de cont:
!     frontieres necessaires pour l utilisation parallele.
      integer  :: nmq_nh

!.....taille du vecteur v ==> lignes de mom:
      integer  :: nmv_nh

!.....taille max de la matrice cont:
      integer  :: nmcont_nh

!.....taille max de la matrice mom:
      integer  :: nmmom_nh

!.....taille max de la matrice prod:
      integer  :: nmw_nh

!**********************************************************************
!.....Flags et dimensions "integer"
!**********************************************************************

       integer ::
         nnz_nh         (10)                                          &
        ,nzeq_nh                                                      &
        ,nzcont_nh                                                    &
        ,nzcontz_nh                                                   &
        ,nzmom_nh                                                     &   
        ,neqcont_nh                                                   &  
        ,neqmom_nh      (0:3)                                         &
        ,neqq_nh        (0:7)                                         &
        ,nequ_nh        (0:7)                                         &
        ,neqv_nh        (0:7)                                         &
        ,neqw_nh        (0:7)       
        
      integer, dimension(:), allocatable     ::                       &
         momi_nh                                                      &  
        ,momj_nh  

      integer,dimension(:),allocatable ::                             &        
         conti_nh                                                     &   
        ,cont_nnz_nh                                                  & 
        ,contj_nh                                                     & 
        ,contz_nnz_nh                                                  & 
        ,contzi_nh                                                    &   
        ,contzj_nh   


!**********************************************************************
!.....Variables Real
!**********************************************************************
!      real ::      &
!       period_exp  &
!      ,for_a_exp   &
!      ,dg_exp      &
!      ,hmax_exp    &
!      ,amp_exp

!**********************************************************************
!.....Tableaux "integer"
!**********************************************************************
      integer, dimension(:), allocatable     ::                       &
         l2iq_nh        &  
        ,l2jq_nh        &  
        ,l2kq_nh        &  
        ,l2imom_nh      &  
        ,l2jmom_nh      &  
        ,l2kmom_nh      

      integer, dimension(:,:,:), allocatable    ::                    &
         ijk2lq_nh     &
        ,mijk2lq_nh

      integer, dimension(:,:,:,:), allocatable  ::                    &
         ijk2lmom_nh    &  
        ,mijk2lmom_nh

!**********************************************************************
!.....Tableaux: double precision
!**********************************************************************                                            
        
      double precision, dimension(:), allocatable      ::             &
         contv_nh       &  
        ,contzv_nh      &  
        ,momv_nh        &  
        ,momvg_nh      

!      double precision, dimension(:,:), allocatable    ::             &
!         coriolis_nh_t                                                
   
      double precision, dimension(:,:,:), allocatable   ::            &
         coefa_u        &  
        ,coefb_u        &  
        ,coefa_v        &  
        ,coefb_v
      double precision, dimension(:,:,:), allocatable   ::            &
         gdepth_u       &  
        ,gdepth_v    

!      double precision                                                &
!         time_omp_nh    (100)                                        


! fin module ne pas toucher a cette ligne
         
         contains!----------------------------------------------------
!CXA         subroutine alloc_module_nh(imax,jmax,kmax,nbdom_world)
         subroutine alloc_module_nh()
         implicit none

# include "param_F90.h"
# include "def_bounds.h"

         integer :: imax,jmax,nbdom_world

      imax=LOCALLM
      jmax=LOCALMM

# ifdef MPI
         nbdom_world=NNODES
# else
         nbdom_world=1
# endif

         nmq_nh=(imax+4)*(jmax+4)*(N+1)
         nmv_nh=(imax+4)*(jmax+4)*N                &
               +(imax+4)*(jmax+4)*N                &
               +(imax+4)*(jmax+4)*(N+1)

         nmw_nh    = nmv_nh*ntw_nh
         nmcont_nh = nmq_nh*ntcont_nh
         nmmom_nh  = nmv_nh*ntmom_nh

! Variables communes SNH / SNBQ
         allocate(conti_nh        (nmq_nh)                   )  
         allocate(contzi_nh        (nmq_nh)                   )  
         allocate(cont_nnz_nh     (nmq_nh)                   )  
         allocate(contz_nnz_nh     (nmq_nh)                   )  
         allocate(contj_nh        (nmcont_nh)                )  
         allocate(contzj_nh       (nmcont_nh)                )    
         allocate(momi_nh         (nmv_nh)                   )  
         allocate(momj_nh         (nmmom_nh)                 ) 
         allocate(momv_nh         (nmmom_nh)                 )  
         allocate(momvg_nh        (nmmom_nh)                 )  
         allocate(contv_nh        (0:nmcont_nh)              ) 
         allocate(contzv_nh       (0:nmcont_nh)              ) 

         allocate(l2iq_nh         (nmq_nh)                   ) 
         allocate(l2jq_nh         (nmq_nh)                   ) 
         allocate(l2kq_nh         (nmq_nh)                   )  
         allocate(l2imom_nh       (nmv_nh)                   )  
         allocate(l2jmom_nh       (nmv_nh)                   )  
         allocate(l2kmom_nh       (nmv_nh)                   ) 

         allocate(ijk2lq_nh       (GLOBAL_2D_ARRAY,0:N+1)    )
         allocate(mijk2lq_nh      (GLOBAL_2D_ARRAY,0:N+1)    )


         allocate(ijk2lmom_nh     (GLOBAL_2D_ARRAY,0:N+1,3)  )   
         allocate(mijk2lmom_nh    (GLOBAL_2D_ARRAY,0:N+1,3)  )

!         allocate(coriolis_nh_t   (GLOBAL_2D_ARRAY)          )

         allocate(coefa_u         (GLOBAL_2D_ARRAY,0:N+1)    )  
         allocate(coefb_u         (GLOBAL_2D_ARRAY,0:N+1)    ) 
         allocate(coefa_v         (GLOBAL_2D_ARRAY,0:N+1)    )  
         allocate(coefb_v         (GLOBAL_2D_ARRAY,0:N+1)    ) 
         allocate(gdepth_u        (GLOBAL_2D_ARRAY,0:N+1)    ) 
         allocate(gdepth_v        (GLOBAL_2D_ARRAY,0:N+1)    ) 

         end subroutine alloc_module_nh

        end module module_nh  
#else
        module module_nh
        end module
#endif
