7 integer::bitwise_test=0
8 logical::idle_nodes=.false.
9 logical::do_output=.true.
10 logical::output_done=.false.
12 logical::balance=.false.
13 logical::shrink=.false.
14 logical::orphan=.false.
15 logical::extra_dump=.false.
16 logical::extra_load_balance=.false.
17 logical::tight_nbor=.false.
19 integer::nstep_coarse=0
20 integer::nstep_coarse_old=0
23 integer::ngrid_current
25 integer(kind=8)::allocate_size=0
27 real(dp)::emag_tot=0.0d0
28 real(dp)::ekin_tot=0.0d0
29 real(dp)::eint_tot=0.0d0
30 real(dp)::epot_tot=0.0d0
31 real(dp)::epot_tot_old=0.0d0
32 real(dp)::epot_tot_int=0.0d0
34 real(dp)::aexp_old=1.0d0
35 real(dp)::rho_tot=0.0d0
38 real(kind=8)::t8=0.0d0
40 logical::local_debug=.false.
41 real(kind=8)::dr_debug(3),r_debug(3)
42 logical::dbg_grid(nvector)
43 integer::dbg_ind(nvector)
46 integer::ncpu,ncpu_dump,ndomain,myid,overload=1,ncore
47 integer,
allocatable,
dimension(:) :: isub_domain, cpu_domain
48 integer,
allocatable,
dimension(:,:) :: map_domain
52 real(dp),
allocatable,
dimension(:)::aexp_frw,hexp_frw,tau_frw,t_frw
55 integer ::nlevelmax_part
56 real(dp) ::aexp_ini=10.
57 real(dp),
dimension(1:MAXLEVEL)::dfact=1.0d0,astart
58 real(dp),
dimension(1:MAXLEVEL)::vfact,dtlev
59 real(dp),
dimension(1:MAXLEVEL)::xoff1,xoff2,xoff3,dxini
60 integer ,
dimension(1:MAXLEVEL)::n1,n2,n3
64 real(dp),
dimension(1:MAXLEVEL)::dtold,dtnew
65 real(dp),
dimension(1:MAXLEVEL)::rho_max
66 integer ,
dimension(1:MAXLEVEL)::nsubcycle=2
69 integer,
allocatable,
dimension(:,:)::headl
70 integer,
allocatable,
dimension(:,:)::taill
71 integer,
allocatable,
dimension(:,:)::numbl
72 integer,
allocatable,
dimension(:,:)::numbtot
75 integer,
allocatable,
dimension(:,:)::headb
76 integer,
allocatable,
dimension(:,:)::tailb
77 integer,
allocatable,
dimension(:,:)::numbb
80 integer::headf,tailf,numbf,used_mem,used_mem_tot
83 real(dp),
allocatable,
dimension(:,:)::xg
84 integer ,
allocatable,
dimension(:,:)::nbor
85 integer ,
allocatable,
dimension(:) ::father
86 integer ,
allocatable,
dimension(:) ::next
87 integer ,
allocatable,
dimension(:) ::prev
88 integer ,
allocatable,
dimension(:) ::son
89 integer ,
target,
allocatable,
dimension(:) ::flag1
90 integer ,
target,
allocatable,
dimension(:) ::flag2
93 integer ,
allocatable,
dimension(:) ::cpu_map
94 integer ,
allocatable,
dimension(:) ::cpu_map2
97 real(qdp),
allocatable,
dimension(:)::hilbert_key
98 real(qdp),
allocatable,
dimension(:)::bound_key,bound_key2
99 real(qdp) ::order_all_min,order_all_max
102 real(dp),
allocatable,
dimension(:) ::bisec_wall
103 integer ,
allocatable,
dimension(:,:) ::bisec_next
106 integer,
allocatable,
dimension(:) ::bisec_indx
107 real(dp),
allocatable,
dimension(:,:) ::bisec_cpubox_min
108 real(dp),
allocatable,
dimension(:,:) ::bisec_cpubox_max
109 real(dp),
allocatable,
dimension(:,:) ::bisec_cpubox_min2
110 real(dp),
allocatable,
dimension(:,:) ::bisec_cpubox_max2
112 integer,
allocatable,
dimension(:) ::bisec_cpu_load
113 integer,
allocatable,
dimension(:,:) ::bisec_hist
114 integer,
allocatable,
dimension(:) ::bisec_hist_bounds
115 integer,
allocatable,
dimension(:) ::new_hist_bounds
116 integer,
allocatable,
dimension(:) ::bisec_ind_cell
117 integer,
allocatable,
dimension(:) ::cell_level
120 integer(kind=8)::bisec_nres
126 integer ,
dimension(:) ,
pointer::igrid => null()
127 integer ,
dimension(:,:),
pointer::f
128 real(kind=8),
dimension(:,:),
pointer::u
129 integer ,
dimension(:,:),
pointer::fp
130 real(kind=8),
dimension(:,:),
pointer::up
132 real(kind=8),
dimension(:,:),
pointer::u_radiation
140 type(
communicator),
allocatable,
dimension(:,:)::reception
143 CHARACTER(LEN=20)::type_hydro =
'hydro' 144 CHARACTER(LEN=20)::type_accel =
'accel' 145 CHARACTER(LEN=20)::type_flag =
'flag' 149 real(dp)::units_density=1.0
150 real(dp)::units_time=1.0
151 real(dp)::units_length=1.0
152 real(dp)::units_velocity=0.0
155 integer n_refine_d, n_refine_p, n_refine_u, n_refine_c, n_refine_s, n_refine_o, &
156 n_refine_m, n_refine_l, n_refine_q, n_refine_b
157 integer n_gfloor_u, n_gfloor_b
163 logical :: double_precision_run = .false.
166 logical :: double_precision_run = .false.
168 logical :: double_precision_run = .true.
172 logical :: quad_precision_run = .true.
174 logical :: quad_precision_run = .false.
176 logical :: big_endian, double_precision, quad_precision
181 module procedure load_float_scalar, load_float_1d
185 subroutine print_id (id)
191 if (myid==1 .and. id .ne.
' ')
then 198 subroutine load_float_scalar(ilun,x,n)
200 integer,
intent(in) :: ilun, n
204 if (io_restart%double_precision)
then 211 end subroutine load_float_scalar
213 subroutine load_float_1d(ilun,x,n)
215 integer,
intent(in) :: ilun, n
216 real(dp),
dimension(:) :: x
217 real(kind=8),
dimension(:),
allocatable :: x_dp
218 real(kind=4),
dimension(:),
allocatable :: x_sp
219 if (io_restart%double_precision .eqv. io_restart%double_precision_run)
then 222 if (io_restart%double_precision)
then 234 end subroutine load_float_1d
236 end module amr_commons
243 logical :: inuse=.false.
247 integer,
dimension(:),
allocatable :: g2l
248 integer,
dimension(:),
allocatable :: l2g
249 integer,
dimension(:),
allocatable :: nemission
257 end module reduce_comm_m
259 module openmp_support
262 integer :: omp_nthreads, omp_mythread,mpi_omp_threads
263 logical :: omp_master
265 character(len=80),
save:: id=
'amr_commons.f90 $Id: 0082ecb9f612def63f2fb80a39ec9d2d3b71bcf6 $' 268 #if defined (_OPENMP) 269 subroutine set_openmp_stacksize
270 #ifdef __INTEL_COMPILER 271 use hydro_parameters
, only : nvar
272 use omp_lib
, only : kmp_set_stacksize_s, kmp_get_stacksize_s, kmp_size_t_kind
275 #ifdef __INTEL_COMPILER 276 integer(kind=kmp_size_t_kind) :: omp_stacksize, new_omp_stacksize
278 omp_stacksize = kmp_get_stacksize_s()
279 new_omp_stacksize = (4*1024**2 * nvar) / 8
280 if (dp==kind(1.0e0_8)) new_omp_stacksize = new_omp_stacksize * 2
282 if (new_omp_stacksize > omp_stacksize)
then 283 call kmp_set_stacksize_s(new_omp_stacksize)
284 if (myid==1)
write(*,*)
'WARNING! OpenMP stacksize has been reset to ', new_omp_stacksize/1024**2,
'MB to avoid segfault' 287 end subroutine set_openmp_stacksize
290 subroutine init_openmp
291 #if defined (_OPENMP) 292 use omp_lib
, only : omp_get_thread_num, omp_get_num_threads
295 #if defined (_OPENMP) 297 call set_openmp_stacksize
301 omp_nthreads = omp_get_num_threads()
303 omp_mythread = omp_get_thread_num()
308 omp_master = omp_mythread .eq. 0
310 mpi_omp_threads = (ncpu-1)/omp_nthreads+1
311 ncore = ncpu*omp_nthreads
314 if (myid==1) print
'(1x,a,4i8)',
'init_openmp: ncpu, ncore, omp_nthreads, mpi_omp_threads =', &
315 ncpu, ncore, omp_nthreads, mpi_omp_threads
316 end subroutine init_openmp
317 end module openmp_support