39
40
41
42
43
44
45
46
47 USE int8_mod
48
49
50
51#include "implicit_f.inc"
52
53
54
55#include "mvsiz_p.inc"
56
57
58
59 INTEGER, INTENT(INOUT) :: LFT
60 INTEGER, INTENT(INOUT) :: LLT
61 INTEGER, INTENT(INOUT) :: NFT
62 INTEGER, INTENT(IN) :: IRECT(4,*), LMSR(*), MSR(*), NSV(*), ILOC(*), NSEG(*)
63 INTEGER, INTENT(INOUT) :: IRTL(*)
64 my_real,
DIMENSION(MVSIZ),
INTENT(IN) :: xface
66
67 INTEGER TAB_RMAX_UID(4,*),(*)
68 INTEGER NBSECNDS,ITAB(*)
70
71
72
73 INTEGER I, IL, JL, L, JJJ, JJ, J1, J2, LL1, LL2, LL, LG, IG, JG, M, N
74 INTEGER KM1(4), KN1(4), LSEG, LSEG_OLD, LSEG_NEW, IFLAG
75 INTEGER FACE_GLOB_ID(4)
77 DATA km1/2,3,4,1/
78 DATA kn1/4,1,2,3/
79
80
81
82 INTEGER IS_SUP_FACE_ID
84
85
86
87
88
89
90 has_moved(1:nbsecnds) = 1
91 tab_rmax(1:nbsecnds) = zero
92 tab_rmax_uid(1:4,1:nbsecnds) = 0
93
94 DO i=lft,llt
95 il=i+nft
96 ig=nsv(il)
97 jl=iloc(il)
98 IF(jl <= 0) cycle
99 jg=msr(jl)
100 l=irtl(il)
101
102 IF(xface(i)==zero)THEN
104 ELSE
105 bmax=-ep30
106 lseg_old=l
107 lseg_new=0
108
109 IF(l<=0) GOTO 100
110
111
112
113 face_glob_id(1) = itab(msr(irect(1,l)))
114 face_glob_id(2) = itab(msr(irect(2,l)))
115 face_glob_id(3) = itab(msr(irect(3,l)))
116 face_glob_id(4) = itab(msr(irect(4,l)))
117
118 DO jjj=1,4
119 jj=jjj
120 IF(irect(jj,l)==jl) EXIT
121 ENDDO
122 j1=km1(jj)
123 j2=kn1(jj)
124 IF(jj==3.AND.irect(3,l)==irect(4,l)) j1=1
125 m=msr(irect(j1,l))
126 n=msr(irect(j2,l))
129
130 IF(bmin > bmax .OR. (bmin == bmax .AND. iflag == 1)) THEN
131 lseg_new=lseg_old
132 bmax=bmin
133 tab_rmax(il) = bmax
134 tab_rmax_uid(1,il) = face_glob_id(1)
135 tab_rmax_uid(2,il) = face_glob_id(2)
136 tab_rmax_uid(3,il) = face_glob_id(3)
137 tab_rmax_uid(4,il) = face_glob_id(4)
138 ENDIF
139
140 IF(bmin >= zero) THEN
141 has_moved(il) = 0
142 GO TO 200
143 ENDIF
144
145 100 CONTINUE
146 ll1=nseg(jl)
147 ll2=nseg(jl+1)-1
148 DO ll=ll1,ll2
149 lg=lmsr(ll)
150 lseg=lg
151 IF(l==lg) cycle
152 DO jjj=1,4
153 jj=jjj
154 IF(irect(jj,lg)==jl) EXIT
155 ENDDO
156 j1=km1(jj)
157 j2=kn1(jj)
158 IF(jj==3.AND.irect(3,lg)==irect(4,lg)) j1=1
159 face_glob_id(1) =itab(msr(irect(1,lg)))
160 face_glob_id(2) =itab(msr(irect(2,lg)))
161 face_glob_id(3) =itab(msr(irect(3,lg)))
162 face_glob_id(4) =itab(msr(irect(4,lg)))
163 m=msr(irect(j1,lg))
164 n=msr(irect(j2,lg))
167 IF(bmin > bmax .OR. (bmin == bmax .AND. iflag == 1)) THEN
168 lseg_new=lseg
169 bmax=bmin
170 tab_rmax(il) = bmax
171 tab_rmax_uid(1,il) = face_glob_id(1)
172 tab_rmax_uid(2,il) = face_glob_id(2)
173 tab_rmax_uid(3,il) = face_glob_id(3)
174 tab_rmax_uid(4,il) = face_glob_id(4)
175 ENDIF
176
177 IF(bmin < zero) cycle
178 irtl(il)=lseg_new
179 has_moved(il) = 1
180 GO TO 200
181 ENDDO
182
183 irtl(il)=lseg_new
184 has_moved(il)=1
185 200 CONTINUE
186
187 tab_rmax(il) = bmax
188 tab_rmax_uid(1,il) = itab(msr(irect(1,lseg_new)))
189 tab_rmax_uid(2,il) = itab(msr(irect(2,lseg_new)))
190 tab_rmax_uid(3,il) = itab(msr(irect(3,lseg_new)))
191 tab_rmax_uid(4,il) = itab(msr(irect(4,lseg_new)))
192
193 ENDIF
194 ENDDO
195
196 RETURN
subroutine i8_nearest_seg(x, is, m1, m2, m3, bmin)
integer function is_sup_face_id(a, b)