19 implicit real*8 (a-h,o-z)
20 integer(kind=kint),
dimension(:),
allocatable :: WR, WS
23 integer(kind=kint),
dimension(:),
allocatable :: NFLAG_INFO
25 type (hecmwST_local_mesh) :: hecMESH
32 allocate (nflag_info(hecmesh%PETOT))
37 call mpi_barrier (hecmesh%MPI_COMM, ierr)
39 niteradap= niteradap + 1
41 if ( niteradap .gt. niteradap_max)
then
55 if (hecmesh%my_rank.eq.0) &
56 &
write (*,
'(" TETRA iteration=", 2i8)') niteradap, newtet
59 do 100 icel0= 1, hecmesh%n_adapt_act_elem_341
60 icel= hecmesh%adapt_act_elem_341(icel0)
61 is= hecmesh%elem_node_index(icel-1)
62 n1= hecmesh%elem_node_item (is+1)
63 n2= hecmesh%elem_node_item (is+2)
64 n3= hecmesh%elem_node_item (is+3)
65 n4= hecmesh%elem_node_item (is+4)
74 ndiv(1)= hecmesh%adapt_iemb(ie1)
75 ndiv(2)= hecmesh%adapt_iemb(ie2)
76 ndiv(3)= hecmesh%adapt_iemb(ie3)
77 ndiv(4)= hecmesh%adapt_iemb(ie4)
78 ndiv(5)= hecmesh%adapt_iemb(ie5)
79 ndiv(6)= hecmesh%adapt_iemb(ie6)
81 ndivsum= ndiv(1)+ndiv(2)+ndiv(3)+ndiv(4)+ndiv(5)+ndiv(6)
88 if (ndivsum .eq. 1)
goto 95
91 if (ndivsum .eq. 2)
then
92 if ( ( (ndiv(1).eq.1) .and. (ndiv(6).eq.1) ) .or. &
93 & ( (ndiv(2).eq.1) .and. (ndiv(5).eq.1) ) .or. &
94 & ( (ndiv(3).eq.1) .and. (ndiv(4).eq.1) ) )
then
95 hecmesh%adapt_iemb(ie1)= 1
96 hecmesh%adapt_iemb(ie2)= 1
97 hecmesh%adapt_iemb(ie3)= 1
98 hecmesh%adapt_iemb(ie4)= 1
99 hecmesh%adapt_iemb(ie5)= 1
100 hecmesh%adapt_iemb(ie6)= 1
107 & ( (ndiv(1).eq.1) .and. (ndiv(3).eq.1) )
then
108 hecmesh%adapt_iemb(ie5)= 1
113 & ( (ndiv(1).eq.1) .and. (ndiv(5).eq.1) )
then
114 hecmesh%adapt_iemb(ie3)= 1
119 & ( (ndiv(3).eq.1) .and. (ndiv(5).eq.1) )
then
120 hecmesh%adapt_iemb(ie1)= 1
127 & ( (ndiv(2).eq.1) .and. (ndiv(3).eq.1) )
then
128 hecmesh%adapt_iemb(ie6)= 1
133 & ( (ndiv(2).eq.1) .and. (ndiv(6).eq.1) )
then
134 hecmesh%adapt_iemb(ie3)= 1
139 & ( (ndiv(3).eq.1) .and. (ndiv(6).eq.1) )
then
140 hecmesh%adapt_iemb(ie2)= 1
147 & ( (ndiv(1).eq.1) .and. (ndiv(2).eq.1) )
then
148 hecmesh%adapt_iemb(ie4)= 1
153 & ( (ndiv(1).eq.1) .and. (ndiv(4).eq.1) )
then
154 hecmesh%adapt_iemb(ie2)= 1
159 & ( (ndiv(2).eq.1) .and. (ndiv(4).eq.1) )
then
160 hecmesh%adapt_iemb(ie1)= 1
167 & ( (ndiv(4).eq.1) .and. (ndiv(5).eq.1) )
then
168 hecmesh%adapt_iemb(ie6)= 1
173 & ( (ndiv(4).eq.1) .and. (ndiv(6).eq.1) )
then
174 hecmesh%adapt_iemb(ie5)= 1
179 & ( (ndiv(5).eq.1) .and. (ndiv(6).eq.1) )
then
180 hecmesh%adapt_iemb(ie4)= 1
185 hecmesh%adapt_iemb(ie1)= 1
186 hecmesh%adapt_iemb(ie2)= 1
187 hecmesh%adapt_iemb(ie3)= 1
188 hecmesh%adapt_iemb(ie4)= 1
189 hecmesh%adapt_iemb(ie5)= 1
190 hecmesh%adapt_iemb(ie6)= 1
200 if (ndivsum .eq. 3)
then
202 & ((ndiv(1).eq.1).and.(ndiv(3).eq.1).and.(ndiv(5).eq.1)) .or.&
203 & ((ndiv(2).eq.1).and.(ndiv(3).eq.1).and.(ndiv(6).eq.1)) .or.&
204 & ((ndiv(1).eq.1).and.(ndiv(2).eq.1).and.(ndiv(4).eq.1)) .or.&
205 & ((ndiv(4).eq.1).and.(ndiv(5).eq.1).and.(ndiv(6).eq.1)) ) &
209 hecmesh%adapt_iemb(ie1)= 1
210 hecmesh%adapt_iemb(ie2)= 1
211 hecmesh%adapt_iemb(ie3)= 1
212 hecmesh%adapt_iemb(ie4)= 1
213 hecmesh%adapt_iemb(ie5)= 1
214 hecmesh%adapt_iemb(ie6)= 1
224 if (ndivsum.eq.4 .or. ndivsum.eq.5)
then
225 hecmesh%adapt_iemb(ie1)= 1
226 hecmesh%adapt_iemb(ie2)= 1
227 hecmesh%adapt_iemb(ie3)= 1
228 hecmesh%adapt_iemb(ie4)= 1
229 hecmesh%adapt_iemb(ie5)= 1
230 hecmesh%adapt_iemb(ie6)= 1
241 ntyp= hecmesh%adapt_parent_type(icel)
242 if (ntyp.ne.0 .and. ntyp.ne.11 .and. &
243 & ndivsum.ne.0.and.ndivsum.ne.6)
then
244 hecmesh%adapt_iemb(ie1)= 1
245 hecmesh%adapt_iemb(ie2)= 1
246 hecmesh%adapt_iemb(ie3)= 1
247 hecmesh%adapt_iemb(ie4)= 1
248 hecmesh%adapt_iemb(ie5)= 1
249 hecmesh%adapt_iemb(ie6)= 1
267 if (hecmesh%my_rank.eq.0) &
268 &
write (*,
'(" PRISM iteration=", 2i8)') niteradap, newprism
272 n1= hecmesh%adapt_import_edge_index(hecmesh%n_neighbor_pe)
273 n2= hecmesh%adapt_export_edge_index(hecmesh%n_neighbor_pe)
275 allocate (ws(m), wr(m))
278 do layer= 1, hecmesh%n_adapt_act_elem_351
280 do icel0= 1, hecmesh%n_adapt_act_elem_351
281 icel= hecmesh%adapt_act_elem_351(icel0)
282 is= hecmesh%elem_node_index(icel-1)
283 n1= hecmesh%elem_node_item (is+1)
284 n2= hecmesh%elem_node_item (is+2)
285 n3= hecmesh%elem_node_item (is+3)
286 n4= hecmesh%elem_node_item (is+4)
287 n5= hecmesh%elem_node_item (is+5)
288 n6= hecmesh%elem_node_item (is+6)
297 if (hecmesh%adapt_iemb(ie1).eq.1 .and. &
298 & hecmesh%adapt_iemb(ie4).eq.0)
then
299 hecmesh%adapt_iemb(ie4)= 1
302 if (hecmesh%adapt_iemb(ie2).eq.1 .and. &
303 & hecmesh%adapt_iemb(ie5).eq.0)
then
304 hecmesh%adapt_iemb(ie5)= 1
307 if (hecmesh%adapt_iemb(ie3).eq.1 .and. &
308 & hecmesh%adapt_iemb(ie6).eq.0)
then
309 hecmesh%adapt_iemb(ie6)= 1
312 if (hecmesh%adapt_iemb(ie4).eq.1 .and. &
313 & hecmesh%adapt_iemb(ie1).eq.0)
then
314 hecmesh%adapt_iemb(ie1)= 1
318 if (hecmesh%adapt_iemb(ie5).eq.1 .and. &
319 & hecmesh%adapt_iemb(ie2).eq.0)
then
320 hecmesh%adapt_iemb(ie2)= 1
323 if (hecmesh%adapt_iemb(ie6).eq.1 .and. &
324 & hecmesh%adapt_iemb(ie3).eq.0)
then
325 hecmesh%adapt_iemb(ie3)= 1
330 call mpi_allreduce ( icoum, icoummin, 1, mpi_integer, &
331 & mpi_min, hecmesh%MPI_COMM, ierr)
333 if (icou.eq.0 .and. icoummin.eq.1)
exit
334 if (icou.eq.0) icoum= 1
335 if (icou.ne.0) icoum= 0
340 & ( hecmesh%n_adapt_edge, &
341 & hecmesh%n_neighbor_pe, hecmesh%neighbor_pe, &
342 & hecmesh%adapt_import_edge_index, &
343 & hecmesh%adapt_import_edge_item , &
344 & hecmesh%adapt_export_edge_index, &
345 & hecmesh%adapt_export_edge_item , &
346 & ws, wr, hecmesh%adapt_iemb, hecmesh%MPI_COMM, &
347 & hecmesh%my_rank, 1, m)
352 & ( hecmesh%n_adapt_edge, &
353 & hecmesh%n_neighbor_pe, hecmesh%neighbor_pe, &
354 & hecmesh%adapt_import_edge_index, &
355 & hecmesh%adapt_import_edge_item , &
356 & hecmesh%adapt_export_edge_index, &
357 & hecmesh%adapt_export_edge_item , &
358 & ws, wr, hecmesh%adapt_iemb, hecmesh%MPI_COMM, &
359 & hecmesh%my_rank, 1, m)
364 call mpi_barrier (hecmesh%MPI_COMM,ierr)
369 do 110 icel0= 1, hecmesh%n_adapt_act_elem_351
370 icel= hecmesh%adapt_act_elem_351(icel0)
371 is= hecmesh%elem_node_index(icel-1)
372 n1= hecmesh%elem_node_item (is+1)
373 n2= hecmesh%elem_node_item (is+2)
374 n3= hecmesh%elem_node_item (is+3)
375 n4= hecmesh%elem_node_item (is+4)
376 n5= hecmesh%elem_node_item (is+5)
377 n6= hecmesh%elem_node_item (is+6)
386 ndiv(1)= hecmesh%adapt_iemb(ie1)
387 ndiv(2)= hecmesh%adapt_iemb(ie2)
388 ndiv(3)= hecmesh%adapt_iemb(ie3)
389 ndiv(4)= hecmesh%adapt_iemb(ie4)
390 ndiv(5)= hecmesh%adapt_iemb(ie5)
391 ndiv(6)= hecmesh%adapt_iemb(ie6)
393 ndivsum= ndiv(1)+ndiv(2)+ndiv(3)+ndiv(4)+ndiv(5)+ndiv(6)
403 if (ndivsum .eq. 1)
then
404 if (ndiv(1).eq.1) hecmesh%adapt_iemb(ie4)= 1
405 if (ndiv(2).eq.1) hecmesh%adapt_iemb(ie5)= 1
406 if (ndiv(3).eq.1) hecmesh%adapt_iemb(ie6)= 1
407 if (ndiv(4).eq.1) hecmesh%adapt_iemb(ie1)= 1
408 if (ndiv(5).eq.1) hecmesh%adapt_iemb(ie2)= 1
409 if (ndiv(6).eq.1) hecmesh%adapt_iemb(ie3)= 1
414 if (ndivsum.eq.2)
then
415 if (ndiv(1).eq.1 .and. ndiv(4).eq.1)
goto 105
416 if (ndiv(2).eq.1 .and. ndiv(5).eq.1)
goto 105
417 if (ndiv(3).eq.1 .and. ndiv(6).eq.1)
goto 105
418 hecmesh%adapt_iemb(ie1)= 1
419 hecmesh%adapt_iemb(ie2)= 1
420 hecmesh%adapt_iemb(ie3)= 1
421 hecmesh%adapt_iemb(ie4)= 1
422 hecmesh%adapt_iemb(ie5)= 1
423 hecmesh%adapt_iemb(ie6)= 1
429 if (ndivsum.ge.3)
then
430 hecmesh%adapt_iemb(ie1)= 1
431 hecmesh%adapt_iemb(ie2)= 1
432 hecmesh%adapt_iemb(ie3)= 1
433 hecmesh%adapt_iemb(ie4)= 1
434 hecmesh%adapt_iemb(ie5)= 1
435 hecmesh%adapt_iemb(ie6)= 1
442 ntyp= hecmesh%adapt_parent_type(icel)
443 if (ntyp.ne.0 .and. ntyp.ne.4 .and. &
444 & ndivsum.ne.0.and.ndivsum.ne.6)
then
445 hecmesh%adapt_iemb(ie1)= 1
446 hecmesh%adapt_iemb(ie2)= 1
447 hecmesh%adapt_iemb(ie3)= 1
448 hecmesh%adapt_iemb(ie4)= 1
449 hecmesh%adapt_iemb(ie5)= 1
450 hecmesh%adapt_iemb(ie6)= 1
460 call mpi_barrier (hecmesh%MPI_COMM, ierr)
463 call mpi_barrier (hecmesh%MPI_COMM, ierr)
465 & (nf0, 1, mpi_integer, nflag_info, 1, mpi_integer, 0, &
466 & hecmesh%MPI_COMM, ierr)
468 if (hecmesh%my_rank.eq.0)
then
470 do i= 1, hecmesh%PETOT
471 icou= icou + nflag_info(i)
473 if (icou.ne.0) nf0= 1
476 call mpi_bcast (nf0, 1, mpi_integer, 0, hecmesh%MPI_COMM, ierr)
477 if (nf0 .eq. 1)
goto 90