37 . IXS,IXC,IXT,IXP,IXR,IXTG,IXS10,
38 . ADDCNEL,CNEL,TAG_NODE,TAG_ELEM )
44!
the remote proc send me :
"you must deactivate this edge because my element is
52 use element_mod ,
only : nixs,nixc,nixt,nixp,nixr,nixtg
56#include "implicit_f.inc"
66 TYPE(nodal_arrays_),
INTENT(inout) :: NODES
67 INTEGER,
INTENT(in) :: NB_EDGE
68 INTEGER,
DIMENSION(2*NB_EDGE),
INTENT(in) :: LIST_NODE
69 TYPE(shooting_node_type),
INTENT(inout) :: SHOOT_STRUCT
70 TYPE(intbuf_struct_),
DIMENSION(NINTER),
INTENT(inout) :: INTBUF_TAB
71 INTEGER,
DIMENSION(NINTER),
INTENT(inout) :: NEWFRONT
72 INTEGER,
DIMENSION(NIXS,NUMELS),
INTENT(in) :: IXS
73 INTEGER,
DIMENSION(NIXC,NUMELC),
INTENT(in) :: IXC
74 INTEGER,
DIMENSION(NIXT,NUMELT),
INTENT(in) :: IXT
75 INTEGER,
DIMENSION(NIXP,NUMELP),
INTENT(in) :: IXP
76 INTEGER,
DIMENSION(NIXR,NUMELR),
INTENT(in) :: IXR
77 INTEGER,
DIMENSION(NIXTG,NUMELTG),
INTENT(in) :: IXTG
78 INTEGER,
DIMENSION(6,NUMELS10),
INTENT(in) :: IXS10
79 INTEGER,
DIMENSION(0:NUMNOD+1),
INTENT(in) :: ADDCNEL
80 INTEGER,
DIMENSION(NPARI,NINTER),
INTENT(in) :: IPARI
81 my_real,
DIMENSION(NPROPG,NUMGEO),
INTENT(in) :: geo
82 INTEGER,
DIMENSION(0:LCNEL),
INTENT(in) :: CNEL
83 INTEGER,
DIMENSION(NUMNOD),
INTENT(inout) :: TAG_NODE
84 INTEGER,
DIMENSION(NUMELS+NUMELQ+NUMELC+NUMELT+NUMELP+NUMELR+NUMELTG),
INTENT(inout) :: TAG_ELEM
88 INTEGER :: I,J,NODE_ID
90 INTEGER :: NB_EDGE_R_PROC_M,NB_EDGE_R_PROC_S
91 INTEGER,
DIMENSION(2) :: LOCAL_NODE,GLOBAL_NODE
92 INTEGER,
DIMENSION(:),
ALLOCATABLE :: LIST_EDGE_R_PROC
95 INTEGER :: NB_RESULT_INTERSECT,NB_EDGE_1,NB_EDGE_2
96 INTEGER,
DIMENSION(:),
ALLOCATABLE :: RESULT_INTERSECT,INTERSECT_1,INTERSECT_2
97 INTEGER,
DIMENSION(:),
ALLOCATABLE :: TMP_ARRAY
102 ALLOCATE( list_edge_r_proc(4*nb_edge) )
108 ALLOCATE( result_intersect( shoot_struct%MAX_EDGE_NB ) )
109 ALLOCATE( intersect_1( shoot_struct%MAX_EDGE_NB ) )
110 ALLOCATE( intersect_2( shoot_struct%MAX_EDGE_NB ) )
114 global_node(1:2) = list_node( (i-1)*2+1:(i-1)*2+2)
116 local_node(j) = get_local_node_id(nodes,global_node(j))
121 node_id = local_node(1)
122 nb_edge_1 = shoot_struct%SHIFT_M_NODE_EDGE(node_id+1) - shoot_struct%SHIFT_M_NODE_EDGE(node_id)
123 shift = shoot_struct%SHIFT_M_NODE_EDGE(node_id)
124 intersect_1(1:nb_edge_1) = shoot_struct%M_NODE_EDGE( shift+1:shift+nb_edge_1 )
127 node_id = local_node(2)
130 intersect_2(1:nb_edge_2) = shoot_struct%M_NODE_EDGE( shift+1:shift+nb_edge_2 )
134 nb_result_intersect = 0
135 IF(nb_edge_1>0.AND.nb_edge_2>0)
THEN
136 CALL intersect_2_sorted_sets( intersect_1,nb_edge_1,
137 . intersect_2,nb_edge_2,
138 . result_intersect,nb_result_intersect )
140 nb_result_intersect = 0
145 IF(nb_edge_r_proc_m + nb_result_intersect >
SIZE(list_edge_r_proc) )
THEN
146 ALLOCATE( tmp_array(nb_edge_r_proc_m) )
147 tmp_array(1:nb_edge_r_proc_m) = list_edge_r_proc(1:nb_edge_r_proc_m)
148 DEALLOCATE( list_edge_r_proc )
149 ALLOCATE( list_edge_r_proc( (nb_edge_r_proc_m+nb_result_intersect) * 2 ) )
150 list_edge_r_proc(1:nb_edge_r_proc_m) = tmp_array(1:nb_edge_r_proc_m)
152 list_edge_r_proc(1+nb_edge_r_proc_m:1+nb_edge_r_proc_m+nb_result_intersect) =
153 . result_intersect(1:nb_result_intersect)
154 nb_edge_r_proc_m = nb_edge_r_proc_m + nb_result_intersect
160 global_node(1:2) = list_node( (i-1)*2+1:(i-1)*2+2)
162 local_node(j) = get_local_node_id(nodes,global_node(j))
167 node_id = local_node(1)
168 nb_edge_1 = shoot_struct%SHIFT_S_NODE_EDGE(node_id+1) - shoot_struct%SHIFT_S_NODE_EDGE(node_id)
169 shift = shoot_struct%SHIFT_S_NODE_EDGE(node_id)
170 intersect_1(1:nb_edge_1) = shoot_struct%S_NODE_EDGE( shift+1:shift+nb_edge_1 )
173 node_id = local_node(2)
174 nb_edge_2 = shoot_struct%SHIFT_S_NODE_EDGE(node_id+1) - shoot_struct%SHIFT_S_NODE_EDGE(node_id)
175 shift = shoot_struct%SHIFT_S_NODE_EDGE(node_id)
176 intersect_2(1:nb_edge_2) = shoot_struct%S_NODE_EDGE( shift+1:shift+nb_edge_2 )
180 nb_result_intersect = 0
181 IF(nb_edge_1>0.AND.nb_edge_2>0)
THEN
182 CALL intersect_2_sorted_sets( intersect_1,nb_edge_1,
183 . intersect_2,nb_edge_2,
184 . result_intersect,nb_result_intersect )
186 nb_result_intersect = 0
190 my_size = nb_edge_r_proc_s + nb_edge_r_proc_m
191 IF(my_size + nb_result_intersect >
SIZE(list_edge_r_proc) )
THEN
192 ALLOCATE( tmp_array(my_size) )
193 tmp_array(1:my_size) = list_edge_r_proc(1:my_size)
194 DEALLOCATE( list_edge_r_proc )
195 ALLOCATE( list_edge_r_proc( (my_size+nb_result_intersect) * 2 ) )
196 list_edge_r_proc(1:my_size) = tmp_array(1:my_size)
197 DEALLOCATE( tmp_array )
199 list_edge_r_proc(1+my_size:my_size+nb_result_intersect) =
200 . result_intersect(1:nb_result_intersect)
201 nb_edge_r_proc_s = nb_edge_r_proc_s + nb_result_intersect
205 . list_edge_r_proc(1),list_edge_r_proc(1+nb_edge_r_proc_m),
206 . shoot_struct%SHIFT_INTERFACE,intbuf_tab,newfront,ipari,geo,
207 . ixs,ixc,ixt,ixp,ixr,ixtg,ixs10,
208 . addcnel,cnel,tag_node,tag_elem,shoot_struct )
210 DEALLOCATE( list_edge_r_proc
211 DEALLOCATE( result_intersect )
212 DEALLOCATE( intersect_1 )
213 DEALLOCATE( intersect_2 )
subroutine check_edge_state(itask, m_edge_nb, s_edge_nb, m_edge_id, s_edge_id, shift_interface, intbuf_tab, newfront, ipari, geo, ixs, ixc, ixt, ixp, ixr, ixtg, ixs10, addcnel, cnel, tag_node, tag_elem, shoot_struct)
subroutine find_edge_from_remote_proc(shoot_struct, nb_edge, list_node, intbuf_tab, nodes, newfront, ipari, geo, ixs, ixc, ixt, ixp, ixr, ixtg, ixs10, addcnel, cnel, tag_node, tag_elem)