Skip to content
fly_h.F90_new 10.4 KiB
Newer Older
Fabio Roberto Vitello's avatar
Fabio Roberto Vitello committed
!=======================================================================
!
!
      MODULE fly_h 
!
!
!=======================================================================
!
!
!     Parameter declarations, allocation of array storage, common
!     block definitions.
!
!=======================================================================

#ifdef OMP	 
	 USE omp_lib
#endif

#ifdef PE2
       INTEGER, PARAMETER ::NP=2
#endif

#ifdef PE4
       INTEGER, PARAMETER ::NP=4
#endif

#ifdef PE8
       INTEGER, PARAMETER ::NP=8
#endif

#ifdef PE16
       INTEGER, PARAMETER ::NP=16
#endif

#ifdef PE32
       INTEGER, PARAMETER ::NP=32
#endif

#ifdef PE52
       INTEGER, PARAMETER ::NP=52
#endif

#ifdef PE56
       INTEGER, PARAMETER ::NP=56
#endif
!       INTEGER, PARAMETER ::NP=4



!-------------------------------------------------------------------------------
! SPECIFY THE NUMBER OF PEs
!-------------------------------------------------------------------------------

!	INTEGER, PARAMETER :: N_PES= 2
	INTEGER, PARAMETER :: N_PES= 4
!	INTEGER, PARAMETER :: N_PES= 8
!	INTEGER, PARAMETER :: N_PES= 10
!	INTEGER, PARAMETER :: N_PES= 16 
!	INTEGER, PARAMETER :: N_PES= 32 
!	INTEGER, PARAMETER :: N_PES= 48 
!	INTEGER, PARAMETER :: N_PES= 52 
!	INTEGER, PARAMETER :: N_PES= 56
!	INTEGER, PARAMETER :: N_PES= 100
!	INTEGER, PARAMETER :: N_PES= 180
!	INTEGER, PARAMETER :: N_PES= NP 


!-------------------------------------------------------------------------------
! SPECIFY THE AVAILABLE MEMORY (in Mbyte) FOR EACH PE
!-------------------------------------------------------------------------------
  	INTEGER, PARAMETER :: MEM_PE= 2048
  	INTEGER, PARAMETER :: MEM_SO= 250   !so occ.
  	INTEGER, PARAMETER :: MEM_FX= 5    !fix mem occ.

!-------------------------------------------------------------------------------
! SPECIFY the nbodsmax DIMENSION (MUST BE EQUAL   
!   to the number of bodies used (nbodies variable)  
!-------------------------------------------------------------------------------

!	 INTEGER(KIND=4), PARAMETER :: nbodsmax=314432000
!	 INTEGER(KIND=4), PARAMETER :: nbodsmax=262144000
!        INTEGER(KIND=4), PARAMETER :: nbodsmax=  2097152
!	 INTEGER(KIND=4), PARAMETER :: nbodsmax=  1024
!	 INTEGER(KIND=4), PARAMETER :: nbodsmax=  16777216
!	 INTEGER(KIND=4), PARAMETER :: nbodsmax=  32768
	 INTEGER(KIND=4), PARAMETER :: nbodsmax=  262144
!	 INTEGER(KIND=4), PARAMETER :: nbodsmax=  512
!	 INTEGER(KIND=4), PARAMETER :: nbodsmax=  32768000
!	INTEGER(KIND=4), PARAMETER :: nbodsmax=512000000
!	 INTEGER(KIND=4), PARAMETER :: nbodsmax=1000000000

!-------------------------------------------------------------------------------
! SPECIFY THE DIMENSION: maxnterm (max length of IL)  and maxilf (max length of
! temporary storage to form IL)  (suggested value maxilf=maxnterm*64) 
!-------------------------------------------------------------------------------
 
 	INTEGER, PARAMETER :: maxnterm=  3000
 	INTEGER, PARAMETER :: maxilf= maxnterm * 64  !USER def.


!-------------------------------------------------------------------------------
! SPECIFY THE COMMUNICATION MPI PARAMETERS
!-------------------------------------------------------------------------------
!	INTEGER :: ind_pe

	INTEGER :: ind_loc,ind_pe_1,ind_loc_1,ind_pe_2,ind_loc_2
	
 	INTEGER, SAVE :: me,NPES,PE0=0, lpes
	INTEGER :: NLONG,PE_indx
!	INTEGER :: ind_pe,ind_loc,ind_pe_1,ind_loc_1,ind_pe_2,ind_loc_2
!
!
!-------------------------------------------------------------------------------
! SPECIFY THE ndim DIMENSION (FLY vers. 2.0 : MUST BE EQUAL to 3)
!------------------------------------------------------------------------------
	
	INTEGER(KIND=4), PARAMETER :: ndim=3,nsubcell=2**ndim
	
!-------------------------------------------------------------------------------
! SPECIFY THE MAXIMUM LEVEL OF  THE TREE DIMENSION
!-------------------------------------------------------------------------------

        INTEGER, PARAMETER :: nmax_level=100   !maximum number of tree levels

!-------------------------------------------------------------------------------
! SPECIFY THE ncells DIMENSION (SET EQUAL to nbodsmax parameter)
!-------------------------------------------------------------------------------

	 INTEGER(KIND=4), PARAMETER :: 	ncells=nbodsmax !ncells = max number of internal cells of the tree

!------------------------------------------------------------------------------
! DOMAIN SUBDIVISION
!------------------------------------------------------------------------------

        INTEGER, PARAMETER :: nb_loc=nbodsmax/N_PES+1  ! max number of memory residing local bodies
        INTEGER, PARAMETER :: nc_loc=ncells/N_PES+1    ! number of memory residing tree cells

!-------------------------------------------------------------------------------
! OTHER PARAMETER DEFINITIONS
!-------------------------------------------------------------------------------


	INTEGER(KIND=4), PARAMETER :: ninterp=32766    ! interpolation parameter
        INTEGER, PARAMETER :: nknots=49	    ! used for Ewald (period. bound. cond.)


!-------------------------------------------------------------------------------
! GLOBAL DEFINITIONS : REAL
!-------------------------------------------------------------------------------

        CHARACTER(LEN=40) , SAVE :: headline

        REAL(KIND=8), SAVE, DIMENSION (nb_loc):: mass
        REAL(KIND=8), SAVE, DIMENSION (ndim,nb_loc):: pos,vel
        REAL(KIND=8), SAVE, DIMENSION (nc_loc):: mass_cell
        REAL(KIND=8), SAVE, DIMENSION (ndim,nc_loc):: pos_cell

#ifdef SORT
        REAL(KIND=8), SAVE, DIMENSION (ndim,nb_loc):: pos_sort,vel_sort
        REAL(KIND=8), SAVE, DIMENSION (ndim,1):: acc
        REAL(KIND=8), SAVE, DIMENSION(1:2*ndim-1,1):: quad
#else
        REAL(KIND=8), SAVE, DIMENSION (ndim,nb_loc):: pos_rmt
        REAL(KIND=8), SAVE, DIMENSION (ndim,nb_loc):: acc_rmt
        REAL(KIND=8), SAVE, DIMENSION (ndim,nb_loc):: acc
        REAL(KIND=8), SAVE, DIMENSION(1:2*ndim-1,nc_loc):: quad
#endif

	REAL(KIND=8),SAVE :: tol,tol2inv,eps,rsize,tnow,tpos,dtime,dtime2
	REAL(KIND=8),SAVE :: tiny,one


	REAL(KIND=8),SAVE, DIMENSION(ndim) :: rmin
	


        REAL(KIND=8),SAVE :: znow
        REAL(KIND=8),SAVE :: alpha
        REAL(KIND=8),SAVE :: Omega_cdm,Omega_hdm,Omega_l,om_sum,f_ap
        REAL(KIND=8),SAVE :: one_o_alpha,three_o_alpha,alpha2
        REAL(KIND=8),SAVE, DIMENSION(0:1+ninterp):: phsmooth,acsmooth
        REAL(KIND=8) 	  :: ap,bp

        REAL(KIND=8),SAVE	:: mass_read
        REAL(KIND=8),SAVE, DIMENSION(0:nknots,0:nknots,0:nknots,ndim)::fc
        REAL(KIND=8),SAVE, DIMENSION(0:nknots,ndim):: rk

        REAL(KIND=8),SAVE, DIMENSION(nmax_level) :: size_level

        REAL(KIND=8),SAVE :: L2,Lbox,linv,acc_gx,acc_gy,acc_gz

	REAL(KIND=4), SAVE, DIMENSION (100):: z32_ou
	REAL(KIND=4), SAVE 		   :: z32_end
	INTEGER(KIND=4),SAVE	:: nr_z32


!-------------------------------------------------------------------------------
! GLOBAL DEFINITIONS : INTEGER
!-------------------------------------------------------------------------------

	INTEGER(KIND=4),SAVE :: root,nbodies,incells
	
	INTEGER(KIND=4),SAVE, DIMENSION(nsubcell,nc_loc)::subp
	
	
	
	INTEGER(KIND=4), SAVE	:: nsteps,tstep,l_end,lmax,tst_max
	INTEGER(KIND=4), SAVE	:: next_out,z32_last
	INTEGER(KIND=4), SAVE, DIMENSION (nb_loc):: mark_bod_gr
	INTEGER(KIND=4), SAVE, DIMENSION (nc_loc):: mark_gr_cell,grouping
	
	INTEGER(KIND=4), SAVE, DIMENSION (nmax_level,2):: cell_ss
	INTEGER(KIND=4), SAVE:: ncrit,nbodcrit,cg_loc

	
 	INTEGER(KIND=4), SAVE   :: halt_sim
	INTEGER, SAVE :: chk_file


        LOGICAL, SAVE	:: usequad,dt_var,POW2,rmt_acc
	

	INTEGER(KIND=4), DIMENSION (nb_loc) :: free_body_pub = 0

!-------------------------------------------------------------------------------
!   Definitions specific to input/output.
!-------------------------------------------------------------------------------
        INTEGER, PARAMETER:: uterm=6,upars=10,ubodsin=12,ubodsout=13
        INTEGER, PARAMETER:: ubodsasc=14, uewgrid=15, uewtab=16
        INTEGER, PARAMETER:: upar1=20
        INTEGER, PARAMETER:: upar3=23, ubin32=32,upar35=35,ufnames=26
        INTEGER(KIND=4), SAVE, DIMENSION(262144) :: ql_pos = 0
	INTEGER(KIND=4), SAVE :: n_ql = 0

	CHARACTER(LEN=1),SAVE :: inasc,ouasc


        CHARACTER(LEN=256),SAVE :: parsfile,ibodfile
        CHARACTER(LEN=256),SAVE :: par1file,fpar35,f32,f32_ql,ql_tab
	CHARACTER(LEN=256),SAVE :: fewgrid, fewtab, fly_fnames

        LOGICAL, SAVE	:: wr_out32


!-------------------------------------------------------------------------------
!   Miscelaneous
!-------------------------------------------------------------------------------

        INTEGER,SAVE  :: idisp

	REAL(KIND=8),SAVE  :: ctota,ctotb,ctotc,ctot_acc_comp,ctot_acc_ex
	REAL(KIND=8),SAVE,  DIMENSION(3) ::ctot_tree
	REAL(KIND=8),SAVE,  DIMENSION(N_PES,N_PES) ::rmt_time
	REAL(KIND=8),SAVE  :: ctot_GS_nt,ctot_TW
	REAL(KIND=8),SAVE  :: ctot_GS_nt_rmt,ctot_TW_rmt
	INTEGER(KIND=4),SAVE  :: max_time




 	INTEGER(KIND=4), SAVE, DIMENSION(N_PES):: nb_res_loc

        REAL(KIND=8),SAVE :: pstat,gr_stat

        INTEGER(KIND=4),SAVE :: numbod_100, numbod_200,numbod_300, numbod
	REAL(KIND=4), SAVE   :: hubble
!-------------------------------------------------------------------------------
!   Force computation: arrays definitions
!-------------------------------------------------------------------------------

	INTEGER(KIND=4),SAVE 	:: group_access


!-------------------------------------------------------------------------------
!   Definitions specific STATISTICAL counting
!-------------------------------------------------------------------------------



!-------------------------------------------------------------------------------
!   Definitions specific Fly/Flash interface
!-------------------------------------------------------------------------------


        integer flashComm
	integer(kind=4), dimension(ndim) :: nZones

!-------------------------------------------------------------------------------
!   Definitions specific MPI2 
!-------------------------------------------------------------------------------

	 integer :: ierr,ierror


	 integer,parameter :: int4=4
	 integer,parameter :: int8=8
	 integer,parameter :: real4=4
	 integer,parameter :: real8=8
	 
	integer, SAVE :: win_iblk
	 
!-------------------------------------------------------------------------------
!   Definitions specific atomic update
!-------------------------------------------------------------------------------

	integer(KIND=4), save, dimension(0:(N_PES*N_PES)-1) :: iblk, iblk2
	integer(KIND=4), save, dimension(0:N_PES-1) :: iblk_local

      END MODULE fly_h