53#include "implicit_f.inc"
66 TYPE(loads_),
INTENT(INOUT) :: LOADS
67 INTEGER ,
DIMENSION(LISKN,NUMFRAM+1) ,
INTENT(IN) :: IFRAME
71 LOGICAL :: NEXT_OPERATION
73 INTEGER :: NUMBER_SEGMENT,LOCAL_NUMBER_SEG,NUMBER_NODE
74 INTEGER :: NODE_ID,MY_PROC,MY_SIZE,FRAME_ID
75 INTEGER :: NUMBER_PROC,NUMBER_PROC_1,NUMBER_PROC_2
76 INTEGER,
DIMENSION(NSPMD) :: LIST_1,LIST_2
77 INTEGER :: NB_RESULT_INTERSECT
78 INTEGER,
DIMENSION(NSPMD) :: RESULT_INTERSECT
79 INTEGER,
DIMENSION(NSPMD) :: PROC_ARRAY
80 LOGICAL,
DIMENSION(:),
ALLOCATABLE :: BOOL
81 INTEGER,
DIMENSION(:),
ALLOCATABLE :: TEMP_ARRAY
83 INTEGER :: NB_LOCAL_ARRAY
84 INTEGER,
DIMENSION(:),
ALLOCATABLE :: INDEX_LOCAL_ARRAY
88 ALLOCATE( bool(numnod) )
89 bool(1:numnod) = .true.
91 ALLOCATE( index_local_array(numnod) )
92 ALLOCATE( local_array(numnod) )
93 local_array(1:numnod)%SIZE_INT_ARRAY_1D = 0
95 IF(.NOT.
ALLOCATED(loads%CYL_RESTART))
ALLOCATE( loads%CYL_RESTART(loads%NLOAD_CYL) )
98 DO i=1,loads%NLOAD_CYL
99 number_segment = loads%LOAD_CYL(i)%NSEG
102 DO j=1,number_segment
104 node_id = loads%LOAD_CYL(i)%SEGNOD(j
107 IF(bool(node_id))
THEN
109 bool(node_id) = .false.
110 local_array(node_id)%SIZE_INT_ARRAY_1D = number_proc
112 local_array(node_id)%INT_ARRAY_1D(1:number_proc) = proc_array(1:number_proc)
113 nb_local_array = nb_local_array + 1
114 index_local_array(nb_local_array) = node_id
122 IF(.NOT.
ALLOCATED(loads%CYL_RESTART(i)%SEGMENT_TO_PROC))
THEN
123 ALLOCATE( loads%CYL_RESTART(i)%SEGMENT_TO_PROC(number_segment) )
125 IF(.NOT.
ALLOCATED(loads%CYL_RESTART(i)%PROC))
ALLOCATE( loads%CYL_RESTART(i)%PROC(nspmd) )
127 loads%CYL_RESTART(i)%PROC(j)%LOCAL_SEGMENT_NUMBER = 0
128 loads%CYL_RESTART(i)%PROC(j)%S_LOCAL_SEGMENT = number_segment / nspmd + 4
129 my_size = loads%CYL_RESTART(i)%PROC(j)%S_LOCAL_SEGMENT
130 IF(
ALLOCATED(loads%CYL_RESTART(i)%PROC(j)%LOCAL_SEGMENT))
THEN
131 DEALLOCATE( loads%CYL_RESTART(i)%PROC(j)%LOCAL_SEGMENT )
133 ALLOCATE( loads%CYL_RESTART(i)%PROC(j)%LOCAL_SEGMENT(my_size) )
136 DO j=1,number_segment
138 node_id = loads%LOAD_CYL(i)%SEGNOD(j,4)
139 IF(node_id==0) number_node =
141 node_id = loads%LOAD_CYL(i)%SEGNOD(j,1)
142 number_proc_1 = local_array(node_id
143 list_1(1:number_proc_1) = local_array(node_id)%INT_ARRAY_1D(1:number_proc_1)
144 next_operation = .true.
150 node_id = loads%LOAD_CYL(i)%SEGNOD(j,k)
151 number_proc_2 = local_array(node_id)%SIZE_INT_ARRAY_1D
152 list_2(1:number_proc_2) = local_array(node_id)%INT_ARRAY_1D(1:number_proc_2)
155 IF(next_operation)
THEN
156 CALL intersect_2_sorted_sets( list_1,number_proc_1,
157 . list_2,number_proc_2,
158 . result_intersect,nb_result_intersect )
159 IF(nb_result_intersect>0)
THEN
160 list_1(1:nb_result_intersect) = result_intersect
161 number_proc_1 = nb_result_intersect
164 nb_result_intersect = 0
166 next_operation = (nb_result_intersect>0)
172 IF(nb_result_intersect>0)
THEN
177 node_id = loads%LOAD_CYL(i)%SEGNOD(j,k)
183 loads%CYL_RESTART(i)%SEGMENT_TO_PROC(j) = my_proc
184 local_number_seg = loads%CYL_RESTART(i)%PROC(my_proc)%LOCAL_SEGMENT_NUMBER
187 my_size = loads%CYL_RESTART(i)%PROC(my_proc)%S_LOCAL_SEGMENT
188 IF(my_size< local_number_seg + 1 )
THEN
189 ALLOCATE(temp_array(local_number_seg))
190 temp_array(1:local_number_seg) =
191 . loads%CYL_RESTART(i)%PROC(my_proc)%LOCAL_SEGMENT(1:local_number_seg)
192 DEALLOCATE( loads%CYL_RESTART(i)%PROC(my_proc)%LOCAL_SEGMENT )
193 loads%CYL_RESTART(i)%PROC(my_proc)%S_LOCAL_SEGMENT = my_size *1.2 + 4
194 my_size = loads%CYL_RESTART(i)%PROC(my_proc)%S_LOCAL_SEGMENT
195 ALLOCATE( loads%CYL_RESTART(i)%PROC(my_proc)%LOCAL_SEGMENT(my_size) )
196 loads%CYL_RESTART(i)%PROC(my_proc)%LOCAL_SEGMENT(1:local_number_seg) =
197 . temp_array(1:local_number_seg)
198 DEALLOCATE(temp_array)
200 local_number_seg = local_number_seg + 1
201 loads%CYL_RESTART(i)%PROC(my_proc)%LOCAL_SEGMENT_NUMBER = local_number_seg
202 loads%CYL_RESTART(i)%PROC(my_proc)%LOCAL_SEGMENT
209 IF(loads%CYL_RESTART(i)%PROC(j)%LOCAL_SEGMENT_NUMBER>0)
THEN
210 frame_id = loads%LOAD_CYL(i)%IFRAME + 1
211 IF(frame_id > 0 .and. iframe(5,frame_id) > 0)
THEN
213 node_id = iframe(k,frame_id)
224 DO j=1,nb_local_array
225 node_id = index_local_array(j)
231 DEALLOCATE( local_array )
subroutine domain_decomposition_pcyl(loads, iframe)