 MODULE hfodd_sizes

      IMPLICIT NONE

      !
      !   Principal parameters to be changed depending on the type of calculation
      !
      INTEGER, PARAMETER :: NDMAIN=16   ! Maximum number of HO shells
      INTEGER, PARAMETER :: NDBASE=969  ! Maximum number of HO basis states
      INTEGER, PARAMETER :: NDSTAT=1550 ! Maximum number of HF states without spin
      INTEGER, PARAMETER :: NDXHRM=34, NDYHRM=34, NDZHRM=34 ! Maximum numbers of Gauss-Hermite nodes
      INTEGER, PARAMETER :: NDAKNO=1   ! Maximum numbers of alpha nodes in the Euler AMP angles
      INTEGER, PARAMETER :: NDBKNO=100 ! Maximum numbers of  beta nodes in the Euler AMP angles
      INTEGER, PARAMETER :: NDPROI=100 ! Maximum doubled    spin in AMP
      INTEGER, PARAMETER :: NDATKN=1   ! Maximum numbers of alpha nodes in the Euler ISP angles
      INTEGER, PARAMETER :: NDBTKN=1   ! Maximum numbers of  beta nodes in the Euler ISP angles
      INTEGER, PARAMETER :: NDPROT=1   ! Maximum doubled isospin in ISP
      !
      !   Linear Algebra
      INTEGER, PARAMETER :: I_CRAY=0,IPARAL=0,IPARAT=0
      !
      !   General
      INTEGER, PARAMETER :: NDKART=3
      INTEGER, PARAMETER :: NDPARI=1, NDSIMP=1, NDSIGN=1, NDREVE=1
      INTEGER, PARAMETER :: NDISOS=1, NDSPIN=1, NDRHFB=1
      INTEGER, PARAMETER :: NDPAHO=5
      INTEGER, PARAMETER :: ND04=2, ND08=4, ND12=6, ND16=8, ND32=16, ND64=32, NDMAX=2*ND64
      INTEGER, PARAMETER :: NDENES=43
      !
      !   HO basis: number of states, integration mesh
      INTEGER, PARAMETER :: NDXMAX=NDMAIN, NDYMAX=NDMAIN, NDZMAX=NDMAIN
      INTEGER, PARAMETER :: NDOSCI=NDMAIN, ND0MAX=2*NDOSCI, ND1MAX=NDOSCI+2
      INTEGER, PARAMETER :: ND2MAX=2*NDOSCI+2, NDBTOT=(NDOSCI+1)**3
      INTEGER, PARAMETER :: NDINTE=2*NDOSCI+3, NDINT1=NDOSCI+1, NDINT2=NDOSCI+2
      INTEGER, PARAMETER :: NDPERP=NDMAIN
      INTEGER, PARAMETER :: NDTRAN=((NDMAIN+1)*(NDMAIN+2)*(NDMAIN+3))/6
      INTEGER, PARAMETER :: NDBASD=4*NDBASE
      INTEGER, PARAMETER :: NDBASP=NDBASE/2+MAX(20,NDBASE/12)
      INTEGER, PARAMETER :: NDDATA=2*NDSTAT*(NDISOS+1)
      INTEGER, PARAMETER :: NDHALF=2, NDREIM=2
      INTEGER, PARAMETER :: NDGAUS=MAX(NDXHRM,NDYHRM,NDZHRM)
      !
      !   Densities
      INTEGER, PARAMETER :: NDALLD=4+8*NDKART+2*NDKART*NDKART, NDALLP=1
      ! INTEGER, PARAMETER :: NDALLP=4+NDKART+NDKART*NDKART
      INTEGER, PARAMETER :: NDTYDE=2
      !
      !   Various: multipoles, Coulomb, iterations, binomial coefficients,
      !            functional
      INTEGER, PARAMETER :: NDMULT=9, NDLAMB=9, NDFACT=2*NDLAMB, NDCONS=10
      INTEGER, PARAMETER :: NDMULR=4, NDMULM=(NDMULR+1)**2
      INTEGER, PARAMETER :: NDDERI=2, NDSCAL=1
      INTEGER, PARAMETER :: NDCOUL=80, NDPOLS=25, NDNETA=NDCOUL
      INTEGER, PARAMETER :: ND_COU=20, NDCOTY=7
      INTEGER, PARAMETER :: NDYUKA=6, NDYUTY=2
      INTEGER, PARAMETER :: NDGOGA=2, NDFORC=4, NDREGA=4
      INTEGER, PARAMETER :: NDITER=5000, NDTERM=15
      INTEGER, PARAMETER :: NDSHIF=100, NDSMTH=20
      INTEGER, PARAMETER :: NDBINO=2*NDOSCI
      INTEGER, PARAMETER :: NDFACR=MAX(2*NDOSCI+7,NDGAUS)
      INTEGER, PARAMETER :: NDCOUP=24, NDCOUT=30, NDVIOL=32
      INTEGER, PARAMETER :: NDJMAX=70, NDJMXD=2*NDJMAX
      INTEGER, PARAMETER :: NFIRST=1, NLAST=40000
      INTEGER, PARAMETER :: NDSUBR=100, NDCOLU=4
      INTEGER, PARAMETER :: MV25=150
      INTEGER, PARAMETER :: NDNUCL=1
      INTEGER, PARAMETER :: NDSEAR=10
      INTEGER, PARAMETER :: ND_PRO=140, ND_NEU=250
      !
      !    Projection
      INTEGER, PARAMETER :: NDASAV=(1-IPARAL)*NDAKNO+IPARAL
      ! INTEGER, PARAMETER :: NDPROI=20, NDPROT=20, NDPROD=(NDPROI+1)*(NDPROT+1)
      INTEGER, PARAMETER :: NDPROD=101
      INTEGER, PARAMETER :: NDPROK=(NDPROI/2+1)**2
      INTEGER, PARAMETER :: NDPROM=((NDPROI+1)*(NDPROI+2)*(NDPROI+3))/6
      ! INTEGER, PARAMETER :: NDPROM=2550
      INTEGER, PARAMETER :: NUMCOL=70
      INTEGER, PARAMETER :: NDASAT=(1-IPARAT)*NDATKN+IPARAT
      INTEGER, PARAMETER :: NDISOM=((NDPROT+1)*(NDPROT+2)*(NDPROT+3))/6
      ! INTEGER, PARAMETER :: NDISOM=4
      !=========================================================================
      ! INTEGER, PARAMETER NDREDU BELOW IS EQUAL TO THE MINIMUM NECESSARY VALUE
      !=========================================================================
      ! INTEGER, PARAMETER
      !*          (NDREDU=NDPROK*(NDMULR+1)*NDPROK)
      !=========================================================================
      ! INTEGER, PARAMETER NDREDU BELOW IS EQUAL TO THE MINIMUM SUFFICIENT VALUE
      ! WHICH HAS BEEN OBTAINED BY FITTING THE  VALUES  CALCULATED  FOR
      ! NDMULR=4 WITH A 3RD-ORDER POLYNOMIAL, SEE THE ANALYSIS  IN  THE
      ! FILE HF222K.XLS OF 10/02/06
      !=========================================================================
      INTEGER, PARAMETER :: NDREDU=5*((((NDPROI+2)*NDPROI-5)*NDPROI+32))/2
      !=========================================================================
      !
      INTEGER, PARAMETER :: NDCONF=1,NDKERN=20,NDRZUT=20,ND_EXC=20
      INTEGER, PARAMETER :: NDISOK=(NDPROT+1)**2
      INTEGER, PARAMETER :: NDALIB=13
      INTEGER, PARAMETER :: NDORDE=6
      !
      !=========================================================================
      ! LINES BELOW MUST BE ADDED TO VERSION 5 TO OBTAIN VERSION 7
      !=========================================================================
      !
      INTEGER, PARAMETER :: NDMODU=20
      INTEGER, PARAMETER :: NDSEPA=NDREGA
      INTEGER, PARAMETER :: NDSEGA=10
      INTEGER, PARAMETER :: NDBLOC=2
      INTEGER, PARAMETER :: NDGAUG=21
      INTEGER, PARAMETER :: NDERRO=1000
      INTEGER, PARAMETER :: NDNUME=10
      INTEGER, PARAMETER :: NDANGU=NDBKNO+NDBTKN
      INTEGER, PARAMETER :: NDWIGN=MAX(NDPROI,NDPROT)
      INTEGER, PARAMETER :: NDPROW=NDPROM+NDISOM
      !
      !=========================================================================
      ! END OF LINES THAT MUST BE ADDED TO VERSION 5 TO OBTAIN VERSION 7
      !=========================================================================
      !
      !=========================================================================
      ! LINES BELOW MUST BE ADDED TO VERSION 7 TO OBTAIN VERSION 8
      !=========================================================================
      !
      INTEGER, PARAMETER :: ISWTWC=0
      INTEGER, PARAMETER :: NDTWCE=ISWTWC*2 +(1-ISWTWC)
      INTEGER, PARAMETER :: NDTWBL=ISWTWC*3 +(1-ISWTWC)
      INTEGER, PARAMETER :: NDTWHE=ISWTWC*16+(1-ISWTWC)
      !
      !=========================================================================
      ! LINES BELOW MUST BE ADDED TO VERSION 8 TO OBTAIN VERSION 9
      !=========================================================================
      !
      INTEGER, PARAMETER :: NDTWDD=ISWTWC*22+(1-ISWTWC)
      !
      !=========================================================================
      ! END OF LINES THAT MUST BE ADDED TO VERSION 8 TO OBTAIN VERSION 9
      !=========================================================================
      !
      CONTAINS
      !
      SUBROUTINE Set_version_hfodd_sizes
      !
      CHARACTER NAMMOD*16
      INTEGER   MODUVE,MODSET
      !
      COMMON /VERMOD/ NAMMOD(NDMODU),MODUVE(NDMODU),MODSET(NDMODU)
      !
      IF (NDMODU.NE.20) STOP 'CHANGE DIMENSIONS IN COMMON "VERMOD" IN Set_version_hfodd_sizes'
      !
      NAMMOD(1) = 'hfodd_sizes     '
      MODUVE(1) = 9
      MODSET(1) = 1
      !
      END SUBROUTINE Set_version_hfodd_sizes
      !
END MODULE hfodd_sizes
