31
32
33
34
35
36
37
38
39
40
41
42
43
44#include "implicit_f.inc"
45
46
47
48
49#include "com04_c.inc"
50
51
52 INTEGER, INTENT(IN) :: LEADING_DIRECTION
53 INTEGER, INTENT(IN) :: N1,N2,N3
54
55
56 my_real,
DIMENSION(3,N1),
INTENT(IN) :: x1
57 my_real,
DIMENSION(3,N3),
INTENT(IN) :: x2
59 INTEGER, DIMENSION(N1), INTENT(IN) :: KEY1
60 INTEGER, DIMENSION(N2), INTENT(IN) :: KEY2
61 INTEGER, DIMENSION(N2), INTENT(IN) :: ID_X2
62 INTEGER, DIMENSION(N1),INTENT(INOUT) :: ID_LIST
63
64
65 INTEGER :: I,J,ID,info,JMIN
66 INTEGER :: LAST_POSITION
68 my_real :: delta,dx,dy,dz,dxl,dyl,dzl,dl
69 integer :: ijk
70
71 last_position = 1
72 jmin = 1
73 DO i = 1,n1
74 dx =abs(x2(1,id_x2(key2(last_position))) - x1(1,key1(i)))
75 dy =abs(x2(2,id_x2(key2(last_position))) - x1(2,key1(i)))
76 dz =abs(x2(3,id_x2(key2(last_position))) - x1(3,key1(i)))
77 leading_size = abs(x2(leading_direction,id_x2(key2(last_position))) - x1(leading_direction,key1(i)))
78 delta = sqrt(dx*dx+dy*dy+dz*dz)
79
80
81 IF (delta < eps) delta = huge(delta)
82
83
84 j = last_position + 1
85 jmin = last_position
86 id = key2(last_position)
87 dxl = leading_size
88 DO WHILE (j <= n2 .AND. (dxl <= delta .OR. delta < eps))
89 dxl =abs(x2(1,id_x2(key2(j))) - x1(1,key1(i)))
90 dyl =abs(x2(2,id_x2(key2(j))) - x1(2,key1(i)))
91 dzl =abs(x2(3,id_x2(key2(j))) - x1(3,key1(i)))
92 dl = sqrt(dxl*dxl+dyl*dyl+dzl*dzl)
93 IF (dl < delta .AND. dl > eps) THEN
94 delta = dl
96 jmin = j
97 ENDIF
98 j = j + 1
99 IF (j <= n2) dxl =abs(x2(leading_direction,id_x2(key2(j)))-x1(leading_direction,key1(i)))
100 ENDDO
101
102
103 j = last_position
104 dxl = leading_size
105 DO WHILE (j > 0 .AND. (dxl <= delta .OR. delta < eps))
106 dxl =abs(x2(1,id_x2(key2(j))) - x1(1,key1(i)))
107 dyl =abs(x2(2,id_x2(key2(j))) - x1(2,key1(i)))
108 dzl =abs(x2(3,id_x2(key2(j))) - x1(3,key1(i)))
109 dl = sqrt(dxl*dxl+dyl*dyl+dzl*dzl)
110 IF (dl < delta .AND. dl > eps) THEN
111 delta = dl
113 jmin = j
114 ENDIF
115 j = j - 1
116 IF (j > 0) dxl =abs
117 ENDDO
118 last_position = jmin
119 id_list(key1(i)) =
id
120 ENDDO
121
122 DO i = 1,n1
123 id_list(i) = id_x2(id_list(i))
124 ENDDO
125
126 RETURN
127