38 . IXS,IXC,IXT,IXP,IXR,IXTG,IXS10,
39 . ADDCNEL,CNEL,TAG_NODE,TAG_ELEM,SHOOT_STRUCT )
52 use element_mod ,
only : nixs,nixc,nixt,nixp,nixr,nixtg
56#include "implicit_f.inc"
67 INTEGER,
INTENT(in) :: ITASK
68 INTEGER,
INTENT(in) :: SURFARCE_NB
69 INTEGER,
DIMENSION(SURFARCE_NB),
INTENT(in) :: SURFACE_ID
70 INTEGER,
DIMENSION(NINTER+1,2),
INTENT(in) :: SHIFT_INTERFACE
71 TYPE(intbuf_struct_),
DIMENSION(NINTER),
INTENT(inout) :: INTBUF_TAB
72 INTEGER,
DIMENSION(NPARI,NINTER),
INTENT(in) :: IPARI
74 INTEGER,
DIMENSION(NIXS,NUMELS),
INTENT(in) :: IXS
75 INTEGER,
DIMENSION(NIXC,NUMELC),
INTENT(in) :: IXC
76 INTEGER,
DIMENSION(NIXT,NUMELT),
INTENT(in) :: IXT
77 INTEGER,
DIMENSION(NIXP,NUMELP),
INTENT(in) :: IXP
78 INTEGER,
DIMENSION(NIXR,NUMELR),
INTENT(in) :: IXR
79 INTEGER,
DIMENSION(NIXTG,NUMELTG),
INTENT(in) :: IXTG
80 INTEGER,
DIMENSION(6,NUMELS10),
INTENT(in) :: IXS10
81 INTEGER,
DIMENSION(0:NUMNOD+1),
INTENT(in) :: ADDCNEL
82 my_real,
DIMENSION(NPROPG,NUMGEO),
INTENT(in) :: geo
83 INTEGER,
DIMENSION(0:LCNEL),
INTENT(in) :: CNEL
84 INTEGER,
DIMENSION(NUMNOD),
INTENT(inout) :: TAG_NODE
85 INTEGER,
DIMENSION(NUMELS+NUMELQ+NUMELC+NUMELT+NUMELP+NUMELR+NUMELTG),
INTENT(inout) :: TAG_ELEM
86 TYPE(shooting_node_type),
INTENT(inout) :: SHOOT_STRUCT
90 LOGICAL :: DEACTIVATION,ACTIVATION,TYPE_INTER
91 INTEGER :: I,K,FIRST,LAST
92 INTEGER :: NIN,ID_INTER,NUMBER_INTER
94 INTEGER :: N1,N2,N3,N4
95 INTEGER :: NUMBER_NODE
96 INTEGER :: DICHOTOMIC_SEARCH_I_ASC
97 INTEGER :: MY_REAL_TASK_ID
98 INTEGER,
DIMENSION(:),
ALLOCATABLE :: NUMBER_SAVED_SURFACE_TYP24_25
99 INTEGER,
DIMENSION(SURFARCE_NB) :: SAVED_SURFACE_TYP24_25
100 SAVE number_saved_surface_typ24_25
101 INTEGER :: OFFSET_TASK
102 INTEGER :: LOW_BOUND,UP_BOUND
103 INTEGER :: TOTAL_NUMBER_SURFACE
104 INTEGER,
DIMENSION(:),
ALLOCATABLE :: SAVED_SURFACE
105 INTEGER :: NB_CONNECTED_ELM
106 INTEGER :: TOTAL_NUMBER_NEW_SURFACE
107 INTEGER,
DIMENSION(:),
ALLOCATABLE :: NUMBER_NEW_SURFACE
108 SAVE number_new_surface
109 INTEGER,
DIMENSION(SURFARCE_NB) :: NEW_SURFACE
116 first = 1 + itask * (surfarce_nb / nthread)
117 last = (itask + 1) * (surfarce_nb / nthread)
118 IF((itask+1)==nthread) last = surfarce_nb
119 my_real_task_id = itask+1
121 IF(my_real_task_id==1)
THEN
122 ALLOCATE( number_saved_surface_typ24_25(nthread) )
123 ALLOCATE( number_new_surface(nthread) )
126 number_inter = shift_interface(ninter+1,2)
127 number_saved_surface_typ24_25(my_real_task_id) = 0
128 number_new_surface(my_real_task_id) = 0
133 id_inter = dichotomic_search_i_asc(k, shift_interface(1,1), number_inter+1)
134 nin = shift_interface(id_inter,2)
135 k = k - shift_interface(id_inter,1) + 1
139 type_inter = (ity==7.OR.ity==10.OR.ity==22.OR.ity==24.OR.(ipari(100,nin)==0.AND.ity==25))
142 IF((type_inter.AND.idel==1).OR.(ipari(100,nin)/=0.AND.ity==25))
THEN
143 shoot_struct%INTER(nin)%REMOTE_ELM_M(k) = shoot_struct%INTER(nin)%REMOTE_ELM_M(k) - 1
149 IF(ipari(100,nin)/=0.AND.ity==25)
THEN
150 shoot_struct%INTER(nin)%NB_ELM_M(k) = shoot_struct%INTER(nin)%NB_ELM_M(k) - 1
154 deactivation = .false.
155 IF((type_inter.AND.idel==1).OR.(ipari(100,nin)/=0.AND.ity==25))
THEN
156 n1 = intbuf_tab(nin)%IRECTM((k-1)*4+1)
157 n2 = intbuf_tab(nin)%IRECTM((k-1)*4+2)
158 n3 = intbuf_tab(nin)%IRECTM((k-1)*4+3)
159 n4 = intbuf_tab(nin)%IRECTM((k-1)*4+4)
161 IF(n3==n4) number_node = 3
162 IF(shoot_struct%INTER(nin)%REMOTE_ELM_M(k)<1)
THEN
164 . deactivation,geo,ixs,ixc,
165 . ixt,ixp,ixr,ixtg,ixs10,addcnel,cnel,
168 deactivation = .false.
170 ELSEIF(type_inter.AND.idel==2)
THEN
171 deactivation = .true.
174 IF(.NOT.deactivation.AND.(ipari(100,nin)/=0.AND.ity==25))
THEN
175 nb_connected_elm = shoot_struct%INTER(nin)%NB_ELM_M(k)
179 IF(nb_connected_elm==1.AND.(intbuf_tab(nin)%STFM(k)<zero))
THEN
188 IF(deactivation)
THEN
189 intbuf_tab(nin)%STFM(k) = zero
190 IF(ity==24.OR.ity==25)
THEN
191 number_saved_surface_typ24_25(my_real_task_id) = number_saved_surface_typ24_25(my_real_task_id) + 1
192 saved_surface_typ24_25(number_saved_surface_typ24_25(my_real_task_id)) = surface_id(i)
200 intbuf_tab(nin)%STFM(k) = abs(intbuf_tab(nin)%STFM(k
201 number_new_surface(my_real_task_id) = number_new_surface(my_real_task_id) + 1
202 new_surface(number_new_surface(my_real_task_id)) = surface_id(i)
213 offset_task = shoot_struct%NUMBER_REMOTE_SURF
218 offset_task = offset_task + number_saved_surface_typ24_25(i)
221 total_number_surface = 0
223 total_number_surface = total_number_surface + number_saved_surface_typ24_25(i)
226 total_number_surface = number_saved_surface_typ24_25(my_real_task_id)
229 IF(total_number_surface>0)
THEN
230 IF(my_real_task_id==1)
THEN
231 IF( total_number_surface+shoot_struct%NUMBER_REMOTE_SURF > shoot_struct%SIZE_REMOTE_SURF)
THEN
232 ALLOCATE( saved_surface(shoot_struct%NUMBER_REMOTE_SURF) )
233 saved_surface(1:shoot_struct%NUMBER_REMOTE_SURF) = shoot_struct%REMOTE_SURF(1:shoot_struct%NUMBER_REMOTE_SURF)
234 DEALLOCATE( shoot_struct%REMOTE_SURF )
235 shoot_struct%SIZE_REMOTE_SURF = total_number_surface
236 ALLOCATE( shoot_struct%REMOTE_SURF(shoot_struct%SIZE_REMOTE_SURF) )
237 shoot_struct%REMOTE_SURF(1:shoot_struct%NUMBER_REMOTE_SURF) = saved_surface(1:shoot_struct%NUMBER_REMOTE_SURF)
238 DEALLOCATE( saved_surface )
244 up_bound = number_saved_surface_typ24_25(my_real_task_id)
245 shoot_struct%REMOTE_SURF(low_bound+offset_task:up_bound+offset_task) = saved_surface_typ24_25(low_bound:up_bound)
247 IF(my_real_task_id==1) shoot_struct%NUMBER_REMOTE_SURF = shoot_struct%NUMBER_REMOTE_SURF + total_number_surface
254 offset_task = shoot_struct%NUMBER_NEW_SURF
259 offset_task = offset_task + number_new_surface(i)
262 total_number_new_surface = 0
264 total_number_new_surface = total_number_new_surface + number_new_surface(i)
267 total_number_new_surface = number_new_surface(my_real_task_id)
270 IF(total_number_new_surface>0)
THEN
271 IF(my_real_task_id==1)
THEN
272 IF( total_number_new_surface+shoot_struct%NUMBER_NEW_SURF > shoot_struct%SIZE_NEW_SURF)
THEN
273 ALLOCATE( saved_surface(shoot_struct%NUMBER_NEW_SURF) )
274 saved_surface(1:shoot_struct%NUMBER_NEW_SURF) = shoot_struct%NEW_SURF(1:shoot_struct%NUMBER_NEW_SURF)
275 DEALLOCATE( shoot_struct%NEW_SURF )
276 shoot_struct%SIZE_NEW_SURF = total_number_new_surface+shoot_struct%NUMBER_NEW_SURF
277 ALLOCATE( shoot_struct%NEW_SURF(shoot_struct%SIZE_NEW_SURF) )
278 shoot_struct%NEW_SURF(1:shoot_struct%NUMBER_NEW_SURF) = saved_surface(1:shoot_struct%NUMBER_NEW_SURF
279 DEALLOCATE( saved_surface )
284 up_bound = number_new_surface(my_real_task_id)
285 shoot_struct%NEW_SURF(low_bound+offset_task:up_bound+offset_task) = new_surface
287 IF(my_real_task_id==1) shoot_struct%NUMBER_NEW_SURF = shoot_struct%NUMBER_NEW_SURF + total_number_new_surface
294 IF(my_real_task_id==1)
THEN
295 DEALLOCATE( number_saved_surface_typ24_25 )
296 DEALLOCATE( number_new_surface )