Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
!-------------------------------------------------------------------------------
! 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