6 integer :: iigrid, igrid, jgrid, kgrid, isave, my_isafety
7 integer,
allocatable,
dimension(:,:) :: isafety
11 integer,
parameter :: nsafety = 1
14 integer :: igrid_active, userflag
16 if (.not.
allocated(isafety)) &
20 neighbor_active = .true.
28 do iigrid=1,igridstail; igrid=igrids(iigrid);
29 userflag = igrid_active(igrid)
30 if (userflag <= 0)
then
32 igrids_active(jgrid)=igrid
35 igrids_passive(kgrid)=igrid
37 isafety(igrid,
mype) = userflag
40 igridstail_active = jgrid
41 igridstail_passive = kgrid
44 if (userflag == -1)
return
50 call mpi_allgather(isafety(:,
mype),
max_blocks,mpi_integer,isafety,&
55 do iigrid=1,igridstail_passive; igrid=igrids_passive(iigrid);
56 if ( isafety(igrid,
mype) /= isave) cycle
60 isafety(igrid,
mype)=isafety(igrid,
mype)+1
65 call mpi_allgather(isafety(:,
mype),
max_blocks,mpi_integer,isafety,&
72 do iigrid=1,igridstail; igrid=igrids(iigrid);
73 if (isafety(igrid,
mype) <= nsafety)
then
75 igrids_active(jgrid)=igrid
78 igrids_passive(kgrid)=igrid
83 igridstail_active = jgrid
84 igridstail_passive = kgrid
90 if (isafety(igrid,ipe) == -1) cycle
93 if (isafety(igrid,ipe) > nsafety)
then
94 tree%node%active=.false.
96 tree%node%active=.true.
113 integer,
intent(in) :: igrid
114 integer :: my_neighbor_type, i^D, isafety_neighbor
119 if (i^d==0|.and.)
then
120 if (isafety(igrid,
mype) > nsafety) &
121 neighbor_active(i^d,igrid) = .false.
123 my_neighbor_type=neighbor_type(i^d,igrid)
125 select case (my_neighbor_type)
126 case (neighbor_boundary)
127 isafety_neighbor = nsafety+1
128 case (neighbor_coarse)
130 case (neighbor_sibling)
136 if (isafety_neighbor > nsafety) &
137 neighbor_active(i^d,igrid) = .false.
145 integer,
intent(in) :: igrid
146 integer :: my_neighbor_type, i^d
152 if (i^d==0|.and.) cycle
153 my_neighbor_type=neighbor_type(i^d,igrid)
155 select case (my_neighbor_type)
156 case (neighbor_coarse)
159 case (neighbor_sibling)
173 integer,
intent(in) :: i^d, igrid
174 integer :: ineighbor, ipe_neighbor
176 ineighbor=neighbor(1,i^d,igrid)
177 ipe_neighbor=neighbor(2,i^d,igrid)
185 integer,
intent(in) :: i^d, igrid
186 integer :: ineighbor, ipe_neighbor
188 ineighbor=neighbor(1,i^d,igrid)
189 ipe_neighbor=neighbor(2,i^d,igrid)
197 integer,
intent(in) :: i^d, igrid
198 integer :: ic^d, inc^d
199 integer :: ineighbor, ipe_neighbor
204 {
do ic^db=1+int((1-i^db)/2),2-int((1+i^db)/2)
207 ineighbor = neighbor_child(1,inc^d,igrid)
208 ipe_neighbor = neighbor_child(2,inc^d,igrid)
218 integer,
intent(in) :: i^d, igrid
219 integer :: ic^d, inc^d
220 integer :: ineighbor, ipe_neighbor
225 {
do ic^db=1+int((1-i^db)/2),2-int((1+i^db)/2)
228 ineighbor = neighbor_child(1,inc^d,igrid)
229 ipe_neighbor = neighbor_child(2,inc^d,igrid)
244 integer,
intent(in) :: igrid
245 integer :: ixo^
l, flag
247 ixo^
l=ixg^
ll^lsubnghostcells;
Module with basic grid data structures.
type(tree_node_ptr), dimension(:,:), allocatable, save igrid_to_node
Array to go from an [igrid, ipe] index to a node pointer.
This module contains definitions of global parameters and variables and some generic functions/subrou...
double precision global_time
The global simulation time.
integer icomm
The MPI communicator.
integer mype
The rank of the current MPI task.
integer ierrmpi
A global MPI error return code.
integer npe
The number of MPI tasks.
integer max_blocks
The maximum number of grid blocks in a processor.
Module with all the methods that users can customize in AMRVAC.
procedure(flag_grid), pointer usr_flag_grid
integer function min_isafety_neighbor(igrid)
integer function igrid_active(igrid)
integer function isafety_cf_min(iD, igrid)
subroutine set_neighbor_state(igrid)
integer function isafety_cf_max(iD, igrid)
integer function isafety_srl(iD, igrid)
integer function isafety_fc(iD, igrid)