38
39
40
41
42
43
44
45
46 USE intbufdef_mod
48
49
50
51#include "implicit_f.inc"
52
53
54
55#include "task_c.inc"
56#include "com04_c.inc"
57#include "scr17_c.inc"
58#include "param_c.inc"
59
60
61
62 INTEGER, INTENT(in) :: ITASK
63 INTEGER, INTENT(in) :: M_EDGE_NB,S_EDGE_NB
64 INTEGER, DIMENSION(M_EDGE_NB), INTENT(in) :: M_EDGE_ID
65 INTEGER, DIMENSION(S_EDGE_NB), INTENT(in) :: S_EDGE_ID
66 INTEGER, DIMENSION(NINTER), INTENT(inout) :: NEWFRONT
67 INTEGER, DIMENSION(NINTER+1,2), INTENT(in) :: SHIFT_INTERFACE
68 TYPE(INTBUF_STRUCT_), DIMENSION(NINTER), INTENT(inout) :: INTBUF_TAB
69 INTEGER, DIMENSION(NPARI,NINTER), INTENT(in) :: IPARI
70
71 INTEGER, DIMENSION(NIXS,NUMELS), INTENT(in) :: IXS
72 INTEGER, DIMENSION(NIXC,NUMELC), INTENT(in) :: IXC
73 INTEGER, DIMENSION(NIXT,NUMELT), INTENT(in) :: IXT
74 INTEGER, DIMENSION(NIXP,NUMELP), INTENT(in) :: IXP
75 INTEGER, DIMENSION(NIXR,NUMELR), INTENT(in) :: IXR
76 INTEGER, DIMENSION(NIXTG,NUMELTG), INTENT(in) :: IXTG
77 INTEGER, DIMENSION(6,NUMELS10), INTENT(in) :: IXS10
78 INTEGER, DIMENSION(0:NUMNOD+1), INTENT(in) :: ADDCNEL
79 my_real,
DIMENSION(NPROPG,NUMGEO),
INTENT(in) :: geo
80 INTEGER, DIMENSION(0:LCNEL), INTENT(in) :: CNEL
81 INTEGER, DIMENSION(NUMNOD), INTENT(inout) :: TAG_NODE
82 INTEGER, DIMENSION(NUMELS+NUMELQ+NUMELC+NUMELT+NUMELP+NUMELR+NUMELTG), INTENT(inout) :: TAG_ELEM
83 TYPE(shooting_node_type), INTENT(inout) :: SHOOT_STRUCT
84
85
86
87 LOGICAL :: DEACTIVATION
88 INTEGER :: I,K,FIRST,LAST
89 INTEGER :: NIN,ID_INTER,NUMBER_INTER
90 INTEGER :: ITY,IDEL
91 INTEGER :: N1,N2,N3,N4
92 INTEGER :: NUMBER_NODE
93 INTEGER :: DICHOTOMIC_SEARCH_I_ASC
94
95 IF(itask==-1) THEN
96 first = 1
97 last = m_edge_nb
98 ELSE
99 first = 1 + itask * (m_edge_nb / nthread)
100 last = (itask + 1) * (m_edge_nb / nthread)
101 IF((itask+1)==nthread) last = m_edge_nb
102 ENDIF
103 number_inter = shift_interface(ninter+1,2)
104
105
106 DO i=first,last
107 k = m_edge_id(i)
109 nin = shift_interface(id_inter,2)
110 k = k - shift_interface(id_inter,1) + 1
111
112 ity = ipari(7,nin)
113 idel = ipari(17,nin)
114
115 IF(itask==-1) THEN
116 IF(ity==11.AND.idel==1) THEN
117 shoot_struct%INTER(nin)%REMOTE_ELM_M(k) = shoot_struct%INTER(nin)%REMOTE_ELM_M(k) - 1
118 ENDIF
119 ENDIF
120
121
122 IF(intbuf_tab(nin)%STFM(k)/=zero) THEN
123
124 IF(ity==11.AND.idel==1) THEN
125 n1 = intbuf_tab(nin)%IRECTM((k-1)*2+1)
126 n2 = intbuf_tab(nin)%IRECTM((k-1)*2+2)
127 n3 = 0
128 n4 = 0
129 number_node = 2
130 IF(shoot_struct%INTER(nin)%REMOTE_ELM_M(k)<1) THEN
132 . deactivation,geo,ixs,ixc,
133 . ixt,ixp,ixr,ixtg,ixs10,addcnel,cnel,
134 . tag_node,tag_elem )
135 ELSE
136 deactivation = .false.
137 ENDIF
138 ELSE
139 deactivation=.true.
140 ENDIF
141 IF(deactivation) intbuf_tab(nin)%STFM(k) = zero
142 ENDIF
143 ENDDO
144
145
146 IF(itask==-1) THEN
147 first = 1
148 last = s_edge_nb
149 ELSE
150 first = 1 + itask * (s_edge_nb / nthread)
151 last = (itask + 1) * (s_edge_nb / nthread)
152 IF((itask+1)==nthread) last = s_edge_nb
153 ENDIF
154
155
156 DO i=first,last
157 k = s_edge_id(i)
159 nin = shift_interface(id_inter,2)
160 k = k - shift_interface(id_inter,1) + 1
161
162 ity = ipari(7,nin)
163 idel = ipari(17,nin)
164
165 IF(itask==-1) THEN
166 IF(ity==11.AND.idel==1) THEN
167 shoot_struct%INTER(nin)%REMOTE_ELM_S(k) = shoot_struct%INTER(nin)%REMOTE_ELM_S(k) - 1
168 ENDIF
169 ENDIF
170
171
172 IF(intbuf_tab(nin)%STFS(k)/=zero) THEN
173 IF(ity==11.AND.idel==1) THEN
174 n1 = intbuf_tab(nin)%IRECTS((k-1)*2+1)
175 n2 = intbuf_tab(nin)%IRECTS((k-1)*2+2)
176 n3 = 0
177 n4 = 0
178 number_node = 2
179 IF(shoot_struct%INTER(nin)%REMOTE_ELM_S(k)<1) THEN
181 . deactivation,geo,ixs,ixc,
182 . ixt,ixp,ixr,ixtg,ixs10,addcnel,cnel,
183 . tag_node,tag_elem )
184 ELSE
185 deactivation = .false.
186 ENDIF
187 ELSE
188 deactivation=.true.
189 ENDIF
190
191 IF(deactivation) THEN
192 intbuf_tab(nin)%STFS(k) = -abs(intbuf_tab(nin)%STFS(k))
193 newfront(nin) = -1
194 ENDIF
195 ENDIF
196 ENDDO
197
198
199 RETURN
subroutine check_active_elem_edge(number_node, n1, n2, n3, n4, deactivation, geo, ixs, ixc, ixt, ixp, ixr, ixtg, ixs10, addcnel, cnel, tag_node, tag_elem)
integer function dichotomic_search_i_asc(val, array, len)