39
40
41
42
43
44
45
46
47#include "implicit_f.inc"
48
49
50
51#include "assert.inc"
52#include "i25edge_c.inc"
53
54
55
56#include "param_c.inc"
57#include "task_c.inc"
58
59
60
61 INTEGER, INTENT(IN) :: JTASK
62 INTEGER, INTENT(IN) :: IEDGE, NEDGE
63 INTEGER, INTENT(IN) :: MVOISIN(4,*)
64 INTEGER, INTENT(INOUT) :: LEDGE(NLEDGE,*)
65
67 my_real,
INTENT(INOUT) :: stfe(nedge)
68
69
70
71 INTEGER :: NEDG,NEDGFT,NEDGLT
72 INTEGER :: IRM,IEDG,JRM,JEDG
74 s1 = -huge(s1)
75 s2 = -huge(s2)
76 IF(iedge/=0)THEN
77
78 nedgft= 1+(jtask-1)*nedge/ nthread
79 nedglt= jtask*nedge/nthread
80 DO nedg=nedgft,nedglt
81 irm =ledge(ledge_left_seg,nedg)
82 iedg=ledge(ledge_left_id,nedg)
83 jrm =ledge(ledge_right_seg,nedg)
84 jedg=ledge(ledge_right_id,nedg)
85 IF(jrm/=0)THEN
86
87 IF(irm > 0 .AND. jrm > 0) THEN
88
89 s1 = stifm(irm)
90 s2 = stifm(jrm)
91 ELSEIF(irm < 0 .AND. jrm > 0) THEN
92
93
94 assert(.false.)
95
96
97 s1 = one
98
99 IF(mvoisin(jedg,jrm) == 0 ) s1 = zero
100 s2 = stifm(jrm)
101 ELSEIF(irm > 0 .AND. jrm < 0) THEN
102
103
104 s1 = stifm(irm)
105
106
107 s2 = one
108 IF(mvoisin(iedg,irm) == 0) s2 = zero
109 ELSE
110
111 assert(.false.)
112 ENDIF
113
114 IF(s1 == zero)THEN
115
116
117
118
119
120
121
122
123 IF(jrm > 0) THEN
124 ledge(ledge_left_seg,nedg) = jrm
125 ledge(ledge_left_id,nedg) = jedg
126 ELSEIF (jrm < 0) THEN
127 ledge(ledge_left_seg,nedg) = -abs(irm)
128
129
130 ENDIF
131
132 IF(ledge(ledge_weight,nedg) == 1) THEN
133 ledge(ledge_global_id,nedg) = -abs(ledge(ledge_global_id,nedg))
134 ENDIF
135
136
137 ledge(ledge_seg1_im,nedg) = ledge(ledge_seg2_im,nedg)
138 ledge(ledge_seg1_i1,nedg) = ledge(ledge_seg2_i1,nedg)
139 ledge(ledge_seg1_i2,nedg) = ledge(ledge_seg2_i2,nedg)
140 ledge(ledge_right_seg,nedg) = 0
141
142 IF(jrm >= 0) THEN
143 ledge(ledge_right_id,nedg) = 0
144 ELSE
145
146 ENDIF
147
148 ELSEIF(s2 == zero)THEN
149
150
151
152 ledge(ledge_right_seg,nedg) = 0
153 ledge(ledge_right_id,nedg) = 0
154
155
156 IF(ledge(ledge_weight,nedg) == 1) THEN
157 ledge(ledge_global_id,nedg) = -abs(ledge(ledge_global_id,nedg))
158 ENDIF
159
160
161 END IF
162 END IF
163 END DO
164
165
166 DO nedg = nedgft,nedglt
167 irm = ledge(ledge_left_seg,nedg)
168 jrm = ledge(ledge_right_seg,nedg)
169
170
171 IF(irm > 0) THEN
172
173
174
175 IF(stifm(irm)==zero)THEN
176 IF(stfe(nedg) > zero) THEN
177 stfe(nedg) = -stfe(nedg)
178 ENDIF
179 ENDIF
180 ELSE IF(irm < 0) THEN
181
182
183
184
185
186
187
188
189
190 s1 = one
191 iedg=ledge(ledge_left_id ,nedg)
192 IF(jrm == 0) THEN
193 IF(mvoisin(iedg,abs(irm))==0) s1 = zero
194
195
196
197
198
199
200 ELSE
201 assert(.false.)
202 ENDIF
203
204 IF(s1==zero)THEN
205 IF(stfe(nedg) > zero) THEN
206 stfe(nedg) = -stfe(nedg)
207 ENDIF
208 ENDIF
209
210 ELSEIF (irm == 0) THEN
211 assert(.false.)
212 IF(stfe(nedg) > zero) THEN
213 stfe(nedg) = -stfe(nedg)
214 END IF
215 END IF
216 END DO
217
219 END IF
220 RETURN