File: /nfs/home/0/users/jenkins/mfix.git/model/des/des_functions.f

1     
2     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
3     !
4     !  Function: DES_GETINDEXFROMPOS
5     !  Purpose: Knowing the current particle x, y, or z position determine
6     !  the associated i, j or k index by searching a specific region defined
7     !  by a lower and upper limit on the index that is known to contain
8     !  the particles position
9     !
10     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11     
12           INTEGER FUNCTION DES_GETINDEXFROMPOS(LIM1,LIM2,PART_POS,&
13              GRID_POS,AXIS,AXIS_INDEX)
14     
15     !-----------------------------------------------
16     ! Modules
17     !-----------------------------------------------
18           USE compar
19           USE funits
20           IMPLICIT NONE
21     !-----------------------------------------------
22     ! Dummy arguments
23     !-----------------------------------------------
24     ! given i, j, or k index values defining the upper and lower limits of
25     ! the region in space known to contain the particle
26           INTEGER, INTENT (IN) :: LIM1, LIM2
27     ! given current x, y, or z position of the particle
28           DOUBLE PRECISION, INTENT (IN) :: PART_POS
29     ! given position for the cell faces on the fluid grid in the x, y or z
30     ! direction
31           DOUBLE PRECISION, DIMENSION(:), INTENT (IN) :: GRID_POS
32     ! given axis (x, y, or z) and associated index (i, j, or k)
33           CHARACTER(LEN=1), INTENT (IN) :: AXIS, AXIS_INDEX
34     !-----------------------------------------------
35     ! Local Variables
36     !-----------------------------------------------
37     ! index & loop counter
38           INTEGER IND
39     !-----------------------------------------------
40     
41     ! error condition
42           IND = -1
43     
44           IF (LIM1 <= LIM2) THEN
45              DO IND = LIM1, LIM2
46                 IF (PART_POS >= GRID_POS(IND-1) .AND. &
47                     PART_POS <  GRID_POS(IND)) EXIT
48              ENDDO
49           ELSEIF (LIM1 > LIM2) THEN
50              DO IND = LIM1, LIM2, -1
51                 IF (PART_POS >= GRID_POS(IND-1) .AND. &
52                     PART_POS <  GRID_POS(IND)) EXIT
53              ENDDO
54           ENDIF
55     
56           IF (IND == -1) THEN
57              WRITE (UNIT_LOG, 1001) AXIS_INDEX, AXIS, PART_POS, &
58                 AXIS_INDEX, LIM1, AXIS_INDEX, LIM2
59              WRITE (*,1001) AXIS_INDEX, AXIS, PART_POS, &
60                 AXIS_INDEX, LIM1, AXIS_INDEX, LIM2
61     !         CALL MFIX_EXIT(myPE)
62           ENDIF
63     
64           DES_GETINDEXFROMPOS = IND
65     
66           RETURN
67     
68      1001 FORMAT(/1X,70('*')//,' From: DES_GETINDEXFROMPOS',/,' Message: ',&
69              'Could not identify the ', A, ' index associated with the ',&
70              'particles ',/10X,A, '-position= ',ES15.5,' between the ',&
71              'limits ',A,'=',I5,/10X,' and ',A,'=',I5,'.',/1X,70('*')/)
72     
73           END FUNCTION DES_GETINDEXFROMPOS
74     
75     
76     
77     
78