summaryrefslogtreecommitdiff
path: root/class/putParticleInBox.f90
blob: d98a1163688c88b9c06b195dbf81cce6ef85a28e (plain)
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
   ! intakes coordinates and outputs index
   integer function indexfxn(px, py) result(idx)
     double precision, intent(in) :: px, py
     double precision :: boxSize,yCoord
      integer :: ix, iy

     !> Check if particle is in box
     if(abs(px).GT.L/2 .OR. abs(py).GT.L/2) then
         !> Particle is outside, don't track it
         idx=b*b ! This is the "recycle bin" for untracked particles.
     else
      ! the sector size      
      ! M = floor(L / rc)
      yCoord = - py
      ! coordinate + half length of boundary [-L/2,L/2] -> [0,L] 
      ! divided by effective particle size to give coordinate
      boxSize=L/real(b,8)
      ix = floor((px + L/2.0d0)/boxSize)
      iy = floor((yCoord + L/2.0d0)/boxSize)

      ! for particles on the boundary
      ix = min(max(ix, 0), b-1)
      iy = min(max(iy, 0), b-1)
      if (ix < 0 .or. ix >= b .or. iy < 0 .or. iy >= b) then
         print *, "ERROR: particle outside sector grid"
         print *, "px, py =", px, py
         stop
      end if

      ! call rey's function
      idx = TWOtoONE(ix,iy)
     end if
   end function indexfxn