Skip to content
fly_gen.F90 9.67 KiB
Newer Older
Fabio Roberto Vitello's avatar
Fabio Roberto Vitello committed

!-------------------------------------------------------------------------------
! 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
	INTEGER :: i_sh
!
!
!-------------------------------------------------------------------------------
! 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):: 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,dp
	


        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


!-------------------------------------------------------------------------------
! 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


        LOGICAL, SAVE	:: usequad,dt_var,POW2
	

	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
	REAL(KIND=8),SAVE  :: ctot_GS_nt,ctot_TW
	INTEGER(KIND=8),SAVE  :: max_time



        INTEGER(KIND=4), SAVE :: max_pr,max_pr_bal

        INTEGER(KIND=4), SAVE, DIMENSION(nb_loc) :: pe_ex_pr
 	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
	REAL(KIND=4), SAVE   :: hubble
!-------------------------------------------------------------------------------
!   Force computation: arrays definitions
!-------------------------------------------------------------------------------
	REAL(KIND=8),SAVE,  DIMENSION (maxnterm):: drdotdr,dx,dy,dz
	REAL(KIND=8),SAVE,  DIMENSION (maxnterm):: drdotdr_gr,dx_gr,dy_gr,dz_gr

	REAL(KIND=8),SAVE,  DIMENSION (maxnterm)::pmass,pmass_gr
	REAL(KIND=8),SAVE,  DIMENSION (ndim)::pos_comm
	REAL(KIND=8),SAVE,  DIMENSION (2*ndim-1,maxnterm) ::pquad,pquad_gr

	INTEGER(KIND=4),SAVE,  DIMENSION (maxnterm):: iterms,iterms_gr
	INTEGER(KIND=4),SAVE 	:: group_access

!-------------------------------------------------------------------------------
!   RAM-CACHE arrays definitions: allocated in null.F routines
!   we have an occupacy of 116 bytes for each ram-cache line
!   code requires  about 230 Mbyte for 1 million of local bodies (1 PE)
!   (i.e about 242 byte for each body)
!   line_ch will start with the available free memory :
!   (MEM_PE*1024*1024 - 242*nbodsmax/N_PES)/116
!-------------------------------------------------------------------------------


        INTEGER,SAVE :: linee_ch,linech_tree=0,linech_dyn=0
	INTEGER,SAVE :: linech_group=nc_loc

        INTEGER :: ind_ch,checkstat

        INTEGER(KIND=4),SAVE, DIMENSION (:), ALLOCATABLE:: indexp_ch,indexm_ch
        INTEGER(KIND=4),SAVE, DIMENSION (:), ALLOCATABLE:: indexs_ch
        INTEGER(KIND=4),SAVE, DIMENSION (:,:), ALLOCATABLE:: subp_ch
        REAL(KIND=8),SAVE, DIMENSION (:), ALLOCATABLE:: mass_ch
        REAL(KIND=8),SAVE, DIMENSION (:,:), ALLOCATABLE:: pos_ch
        REAL(KIND=8),SAVE, DIMENSION (:,:), ALLOCATABLE:: quad_ch

	CHARACTER(LEN=40),SAVE :: ch_str

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

#ifdef STA
	
	INTEGER, PARAMETER:: NUM_TP=100
	
	INTEGER(KIND=8),SAVE, DIMENSION(NUM_TP) :: c_miss,c_found,c_fill,c_get
	INTEGER(KIND=8),SAVE :: max_max, min_min, avg_il, avg_group_il
	INTEGER(KIND=8),SAVE :: avg_group_ncl, avg_ncl
	INTEGER(KIND=8),SAVE :: ilist_group_cnt, ilist_cnt
	INTEGER(KIND=8),SAVE ::   c_miss_t, c_found_t, c_fill_t, c_get_t
	INTEGER(KIND=8),SAVE ::   c_miss_0, c_found_0, c_fill_0, c_get_0
	INTEGER(KIND=8),SAVE ::   c1_loc,c1_alt
	INTEGER(KIND=8),SAVE ::   avg_group_cl, avg_group_bd,avg_cl, avg_bd
        INTEGER(KIND=4),SAVE , DIMENSION(10) :: CRITICAL_SECT
	

#endif

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


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

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

	 integer :: ierr,ierror

	 integer, SAVE :: win_pos
	 integer, SAVE :: win_vel
	 integer, SAVE :: win_cg_loc
	 
	 integer,SAVE :: win_mass_cell
	 integer,SAVE :: win_pos_cell
	 integer,SAVE :: win_acc
	 integer,SAVE :: win_quad
	 integer,SAVE :: win_subp
	 integer,SAVE :: win_mark_bod_gr
	 integer,SAVE :: win_mark_gr_cell
	 integer,SAVE :: win_grouping
	 integer,SAVE :: win_pe_ex_pr
	 integer,SAVE :: win_nb_res_loc
	 integer,SAVE :: win_free_body_pub

	 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