FE-Project
Loading...
Searching...
No Matches
scale_meshutil_2d Module Reference

module FElib / Mesh / utility for 2D mesh More...

Functions/Subroutines

subroutine, public meshutil2d_genrectdomain (pos_v, etov, ke_x, xmin, xmax, ke_y, ymin, ymax)
subroutine, public meshutil2d_genconnectivity (etoe, etof, etov, ne, nfaces)
subroutine, public meshutil2d_buildinteriormap (vmapm, vmapp, mapm, mapp, pos_en, pos_ev, etoe, etof, etov, fmask, ne, np, nfp, nfaces, nv)
subroutine, public meshutil2d_genpatchboundarymap (vmapb, mapb, vmapp, pos_en, xmin, xmax, ymin, ymax, fmask, ne, np, nfp, nfaces, nv)
subroutine, public meshutil2d_genpatchboundarymap_wide (vmapb2, vmapb, halosize, nex, ney, nfp)
subroutine, public meshutil2d_buildglobalmap (panelid_table, pi_table, pj_table, tileid_map, tilefaceid_map, tilepanelid_map, ntile, isperiodicx, isperiodicy, ne_x, ne_y)

Detailed Description

module FElib / Mesh / utility for 2D mesh

Description
A module useful for generating 2D mesh
Author
Yuta Kawai, Team SCALE

Function/Subroutine Documentation

◆ meshutil2d_genrectdomain()

subroutine, public scale_meshutil_2d::meshutil2d_genrectdomain ( real(rp), dimension((ke_x+1)*(ke_y+1),2), intent(out) pos_v,
integer, dimension(ke_x*ke_y,4), intent(out) etov,
integer, intent(in) ke_x,
real(rp), intent(in) xmin,
real(rp), intent(in) xmax,
integer, intent(in) ke_y,
real(rp), intent(in) ymin,
real(rp), intent(in) ymax )

Definition at line 36 of file scale_meshutil_2d.F90.

38
39 implicit none
40
41 integer, intent(in) :: Ke_x
42 real(RP), intent(in) :: xmin, xmax
43 integer, intent(in) :: Ke_y
44 real(RP), intent(in) :: ymin, ymax
45
46 real(RP), intent(out) :: pos_v((Ke_x+1)*(Ke_y+1),2)
47 integer, intent(out) :: EToV(Ke_x*Ke_y,4)
48
49 integer :: i, j
50 integer :: n
51 integer :: NvX, NvY
52 !-----------------------------------------------------------------------------
53
54 nvx = ke_x + 1
55 nvy = ke_y + 1
56
57 do j=1, nvy
58 do i=1, nvx
59 n = i + (j-1)*nvx
60 pos_v(n,1) = (xmax - xmin)*dble(i - 1)/dble(nvx - 1) + xmin
61 pos_v(n,2) = (ymax - ymin)*dble(j - 1)/dble(nvy - 1) + ymin
62 end do
63 end do
64
65 do j=1, ke_y
66 do i=1, ke_x
67 n = i + (j-1)*ke_x
68 etov(n,1:4) = (j-1)*nvx + &
69 & (/ i, i+1, &
70 & i + nvx, i+1 + nvx /)
71 end do
72 end do
73
74 !---
75 !!$
76 !!$ write(*,*) "-- vx, vy --"
77 !!$ do j=1, NvY
78 !!$ do i=1, NvX
79 !!$ n = i + (j-1)*NvY
80 !!$ write(*,*) i, j, " :", mesh%vx(n), mesh%vy(n)
81 !!$ end do
82 !!$ end do
83 !!$
84 !!$ write(*,*) "-- EToV --"
85 !!$ do j=1, Ke_y
86 !!$ do i=1, Ke_x
87 !!$ n = i + (j-1)*Ke_y
88 !!$ write(*,*) i, j, " :", mesh%EToV(n,:)
89 !!$ end do
90 !!$ end do
91
92 return

Referenced by scale_mesh_rectdom2d::meshrectdom2d_setuplocaldom().

◆ meshutil2d_genconnectivity()

subroutine, public scale_meshutil_2d::meshutil2d_genconnectivity ( integer, dimension(ne, nfaces), intent(out) etoe,
integer, dimension(ne, nfaces), intent(out) etof,
integer, dimension(ne,4), intent(in) etov,
integer, intent(in) ne,
integer, intent(in) nfaces )

Definition at line 96 of file scale_meshutil_2d.F90.

98
100 implicit none
101
102 integer, intent(in) :: Ne
103 integer, intent(in) :: Nfaces
104 integer, intent(out) :: EToE(Ne, Nfaces)
105 integer, intent(out) :: EToF(Ne, Nfaces)
106 integer, intent(in) :: EToV(Ne,4)
107
108 integer :: nodes(Ne*Nfaces,2)
109 integer(kind=8) :: face_ids(Ne*Nfaces)
110 integer :: ke
111 integer :: f
112 integer :: n
113 integer :: n1, n2
114 integer :: Nnodes
115 integer :: tmp
116 integer :: Nnodes_row
117 integer :: matchL(2,3), matchR(2,3)
118
119 real(RP) :: EToE_1d(Ne*Nfaces)
120 real(RP) :: EToF_1d(Ne*Nfaces)
121
122 integer :: spNodeToNode(3,Ne*Nfaces)
123 integer :: spNodeToNodeRowTmp(3,Ne*Nfaces)
124 integer :: sort_indx(Ne*Nfaces)
125 integer(kind=8) :: sorted_faceid(Ne*Nfaces)
126 !-----------------------------------------------------------------------------
127
128 nnodes = maxval( etov )
129 nnodes_row = size(nodes,1)
130
131 !---------
132 do ke=1, ne
133 nodes(ke ,:) = etov(ke,(/ 1, 2 /))
134 nodes(ke+ne ,:) = etov(ke,(/ 2, 4 /))
135 nodes(ke+2*ne,:) = etov(ke,(/ 4, 3 /))
136 nodes(ke+3*ne,:) = etov(ke,(/ 3, 1 /))
137 end do
138
139 ! Sort
140 do n=1, nnodes_row
141 if (nodes(n,1) > nodes(n,2) ) then
142 tmp = nodes(n,1);
143 nodes(n,1) = nodes(n,2)
144 nodes(n,2) = tmp
145 end if
146 ! write(*,*) n, ":", nodes(n,:)
147 end do
148 nodes = nodes - 1
149 !---------
150
151 do ke=1, ne
152 etoe(ke,:) = ke
153 etof(ke,:) = (/ 1, 2, 3, 4 /)
154 end do
155
156 face_ids(:) = nodes(:,1)*nnodes + nodes(:,2) + 1
157
158 do f=1, nfaces
159 do ke=1, ne
160 n = ke + (f-1)*ne
161 spnodetonode(:,n) = (/ n, etoe(ke,f), etof(ke,f) /)
162 sorted_faceid(n) = face_ids(n)
163 sort_indx(n) = n
164 ! write(*,*) "face_id, n, EToE, EToF:", spNodeToNode(:,n)
165 end do
166 end do
167
168 !- sort row
169 call quicksort_exec_with_idx( ne*nfaces, sorted_faceid, sort_indx )
170 spnodetonoderowtmp(:,:) = spnodetonode(:,:)
171 do n=1, nnodes_row
172 spnodetonode(:,n) = spnodetonoderowtmp(:,sort_indx(n))
173 ! write(*,'(a,4i10)') "(sorted) face_id, n, EToE, EToF:", spNodeToNode(:,n)
174 end do
175
176 etoe_1d(:) = -1
177 etof_1d(:) = -1
178 do n=1, nnodes_row-1
179 if ( sorted_faceid(n) - sorted_faceid(n+1) == 0 ) then
180 matchl(:,:) = transpose( spnodetonode(:,(/ n, n+1 /)) )
181 matchr(:,:) = transpose( spnodetonode(:,(/ n+1, n /)) )
182
183 etoe_1d(matchl(:,1)) = matchr(:,2)
184 etof_1d(matchl(:,1)) = matchr(:,3)
185 end if
186 end do
187
188 do f=1, nfaces
189 do ke=1, ne
190 n = ke + (f-1)*ne
191 if ( etoe_1d(n) /= -1 ) then
192 etoe(ke,f) = etoe_1d(n)
193 etof(ke,f) = etof_1d(n)
194 end if
195 end do
196 end do
197
198 !-------------------
199
200! write(*,*) "EToE------"
201! do k=1, mesh%Ne
202! write(*,*) "k=", k, ":", mesh%EToE(k,:)
203! end do
204! write(*,*) "EToF------"
205! do k=1, mesh%Ne
206! write(*,*) "k=", k, ":", mesh%EToF(k,:)
207! end do
208
209 return
Module common / sort algorithm.

Referenced by scale_mesh_rectdom2d::meshrectdom2d_setuplocaldom(), meshutil2d_buildglobalmap(), and scale_meshutil_cubedsphere2d::meshutilcubedsphere2d_buildglobalmap().

◆ meshutil2d_buildinteriormap()

subroutine, public scale_meshutil_2d::meshutil2d_buildinteriormap ( integer, dimension(nfp,nfaces,ne), intent(out) vmapm,
integer, dimension(nfp,nfaces,ne), intent(out) vmapp,
integer, dimension(nfp,nfaces,ne), intent(out) mapm,
integer, dimension(nfp,nfaces,ne), intent(out) mapp,
real(rp), dimension(np,ne,2), intent(in) pos_en,
real(rp), dimension(nv,2), intent(in) pos_ev,
integer, dimension(ne, nfaces), intent(in) etoe,
integer, dimension(ne, nfaces), intent(in) etof,
integer, dimension(ne, 4), intent(in) etov,
integer, dimension(nfp,4), intent(in) fmask,
integer, intent(in) ne,
integer, intent(in) np,
integer, intent(in) nfp,
integer, intent(in) nfaces,
integer, intent(in) nv )

Definition at line 213 of file scale_meshutil_2d.F90.

215
216 implicit none
217
218 integer, intent(in) :: Ne
219 integer, intent(in) :: Np
220 integer, intent(in) :: Nfp
221 integer, intent(in) :: Nfaces
222 integer, intent(in) :: Nv
223
224 integer, intent(out) :: VMapM(Nfp,Nfaces,Ne)
225 integer, intent(out) :: VMapP(Nfp,Nfaces,Ne)
226 integer, intent(out) :: MapM(Nfp,Nfaces,Ne)
227 integer, intent(out) :: MapP(Nfp,Nfaces,Ne)
228
229 real(RP), intent(in) :: pos_en(Np,Ne,2)
230 real(RP), intent(in) :: pos_ev(Nv,2)
231 integer, intent(in) :: EToE(Ne, Nfaces)
232 integer, intent(in) :: EToF(Ne, Nfaces)
233 integer, intent(in) :: EToV(Ne, 4)
234 integer, intent(in) :: Fmask(Nfp,4)
235
236
237 integer :: ke, ke1, ke2
238 integer :: f, f1, f2
239 integer :: p
240 integer :: n
241 integer :: idP, idM
242 integer :: v1, v2
243 integer :: nodeids(Np,Ne)
244 real(RP) :: x1(Nfp,Nfp), x2(Nfp,Nfp)
245 real(RP) :: y1(Nfp,Nfp), y2(Nfp,Nfp)
246 real(RP) :: dist(Nfp,Nfp)
247 real(RP) :: x(Np*Ne), y(Np*Ne)
248
249 integer :: mindist_indx(1)
250 !-----------------------------------------------------------------------------
251
252 !$omp parallel private(ke,f,p,n)
253 !$omp do
254 do ke=1, ne
255 do p=1, np
256 n = p + (ke-1)*np
257 nodeids(p,ke) = n
258 x(n) = pos_en(p,ke,1)
259 y(n) = pos_en(p,ke,2)
260 end do
261 end do
262 !$omp end do
263 !$omp do collapse(2)
264 do ke=1, ne
265 do f=1, nfaces
266 do p=1, nfp
267 n = p + (f-1)*nfp + (ke-1)*nfp*nfaces
268 mapm(p,f,ke) = n
269 mapp(p,f,ke) = n
270 vmapm(p,f,ke) = nodeids(fmask(p,f),ke)
271 end do
272 end do
273 end do
274
275 !$omp workshare
276 vmapp(:,:,:) = -1
277 !$omp end workshare
278 !$omp end parallel
279
280 !$omp parallel private( &
281 !$omp ke1, f1, ke2, f2, v1, v2, &
282 !$omp x1, x2, y1, y2, dist, mindist_indx, idP, idM )
283
284 !$omp do
285 do ke1=1, ne
286 do f1=1, nfaces
287 ke2 = etoe(ke1,f1); f2 = etof(ke1,f1)
288
289 v1 = etov(ke1,f1); v2 = etov(ke1,1+mod(f1,nfaces))
290
291 x1(:,:) = spread( x(vmapm(:,f1,ke1)), 2, nfp )
292 x2(:,:) = spread( x(vmapm(:,f2,ke2)), 1, nfp )
293 y1(:,:) = spread( y(vmapm(:,f1,ke1)), 2, nfp )
294 y2(:,:) = spread( y(vmapm(:,f2,ke2)), 1, nfp )
295
296 dist(:,:) = (x1(:,:) - x2(:,:))**2 &
297 + (y1(:,:) - y2(:,:))**2
298 do idm=1, nfp
299 mindist_indx(:) = minloc(dist(idm,:))
300 idp = mindist_indx(1)
301 vmapp(idm,f1,ke1) = vmapm(idp,f2,ke2)
302 mapp(idm,f1,ke1) = idp + (f2-1)*nfp + (ke2-1)*nfp*nfaces
303 end do
304 end do
305 end do
306 !$omp end do
307 !$omp end parallel
308
309 !-----
310 ! mapB_counter = 0
311 ! do k=1,mesh%Ne
312 ! do f=1,elem%Nfaces
313 ! do p=1,elem%Nfp
314 ! n = p + (f-1)*elem%Nfp + (k-1)*elem%Nfp*elem%Nfaces
315 ! if (mesh%VMapM(p,f,k) == mesh%VMapP(p,f,k)) then
316 ! mapB_counter = mapB_counter + 1
317 ! mapB_tmp(mapB_counter) = n
318 !
319 ! vmapB_tmp(mapB_counter) = mesh%VMapM(p,f,k)
320 ! mesh%VMapP(p,f,k) = elem%Np*mesh%NeE + mapB_counter
321 ! end if
322 ! end do
323 ! end do
324 ! end do
325 !
326 ! allocate( mesh%mapB(mapB_counter) )
327 ! allocate( mesh%vmapB(mapB_counter) )
328 ! mesh%mapB(:) = mapB_tmp(1:mapB_counter)
329 ! mesh%vmapB(:) = vmapB_tmp(1:mapB_counter)
330
331 !-------
332 ! write(*,*) "Build MapInfo: "
333 ! do k=mesh%NeS,mesh%NeE
334 ! write(*,*) "k=", k, "---"
335 ! write(*,*) " VMapM:", mesh%VMapM(:,:,k)
336 ! write(*,*) " VMapP:", mesh%VMapP(:,:,k)
337 ! end do
338
339 ! write(*,*) "mapB:", mesh%mapB(:)
340 ! write(*,*) "vmapB:", mesh%vmapB(:)
341

Referenced by scale_mesh_rectdom2d::meshrectdom2d_setuplocaldom().

◆ meshutil2d_genpatchboundarymap()

subroutine, public scale_meshutil_2d::meshutil2d_genpatchboundarymap ( integer, dimension(:), intent(inout), allocatable vmapb,
integer, dimension(:), intent(inout), allocatable mapb,
integer, dimension(nfp,nfaces,ne), intent(inout) vmapp,
real(rp), dimension(np,ne,2), intent(in) pos_en,
real(rp), intent(in) xmin,
real(rp), intent(in) xmax,
real(rp), intent(in) ymin,
real(rp), intent(in) ymax,
integer, dimension(nfp,4), intent(in) fmask,
integer, intent(in) ne,
integer, intent(in) np,
integer, intent(in) nfp,
integer, intent(in) nfaces,
integer, intent(in) nv )

Definition at line 345 of file scale_meshutil_2d.F90.

347
348 implicit none
349
350 integer, intent(in) :: Ne
351 integer, intent(in) :: Np
352 integer, intent(in) :: Nfp
353 integer, intent(in) :: Nfaces
354 integer, intent(in) :: Nv
355
356 integer, intent(inout), allocatable :: VMapB(:)
357 integer, intent(inout), allocatable :: MapB(:)
358 integer, intent(inout) :: VMapP(Nfp,Nfaces,Ne)
359
360 real(RP), intent(in) :: pos_en(Np,Ne,2)
361 real(RP), intent(in) :: xmin, xmax
362 real(RP), intent(in) :: ymin, ymax
363 integer, intent(in) :: Fmask(Nfp,4)
364
365
366 integer :: ke
367 integer :: b
368 integer :: f
369 integer :: i, j
370 real(RP) :: x, y
371
372 real(RP), parameter :: NODE_TOL = 1.0e-12_rp
373
374 real(RP) :: ordInfo(Nfp*Ne,4)
375 integer :: elemIDs(Nfp*Ne,4)
376 integer :: faceIDs(Nfp*Ne,4)
377 integer :: counterB(4)
378 integer :: mapB_counter
379 real(RP) :: rdomx, rdomy
380 !-----------------------------------------------------------------------------
381
382
383 counterb(:) = 0
384 rdomx = 1.0_rp/(xmax - xmin)
385 rdomy = 1.0_rp/(ymax - ymin)
386
387 do ke=1, ne
388 do f=1, nfaces
389 x = sum(pos_en(fmask(:,f),ke,1)/dble(nfp))
390 y = sum(pos_en(fmask(:,f),ke,2)/dble(nfp))
391
392 call eval_domain_boundary(1, y, ymin, x, ke, f, rdomy)
393 call eval_domain_boundary(2, x, xmax, y, ke, f, rdomx)
394 call eval_domain_boundary(3, y, ymax, x, ke, f, rdomy)
395 call eval_domain_boundary(4, x, xmin, y, ke, f, rdomx)
396 end do
397 end do
398
399 allocate( mapb(sum(counterb*nfp)) )
400 allocate( vmapb(size(mapb)) )
401
402 mapb_counter = 1
403 do b = 1, 4
404 ! write(*,*) "LocalMesh boundary ID:", b
405 ! write(*,*) counterB(b)
406 ! write(*,*) ordInfo(1:counterB(b),b)
407 ! write(*,*) elemIds(1:counterB(b),b)
408 ! write(*,*) faceIds(1:counterB(b),b)
409
410 do i=1, counterb(b)
411 ke = elemids(i,b); f = faceids(i,b)
412 do j=1, nfp
413 vmapp(j,f,ke) = np*ne + mapb_counter
414 vmapb(mapb_counter) = fmask(j,f) + (ke-1)*np
415 mapb_counter = mapb_counter + 1
416 end do
417 end do
418 end do
419
420 ! write(*,*) "VMapP:-----"
421 ! do b=1, 4
422 ! do i=1, counterB(b)
423 ! k = elemIds(i,b); f = faceIDs(i,b)
424 ! write(*,*) "bid=", b, ":", mesh%VmapP(:,f,k)
425 ! end do
426 ! end do
427 ! write(*,*) "-----"
428 ! write(*,*) "VMapB:", mesh%VmapB(:)
429 ! write(*,*) "NeA=", mesh%NeA
430
431 return
432 contains
433 subroutine eval_domain_boundary(domb_id, r, rbc, ord_info, ke_, f_, normalized_fac)
434 integer, intent(in) :: domb_id
435 real(RP), intent(in) :: r
436 real(RP), intent(in) :: rbc
437 real(RP), intent(in) :: ord_info
438 integer, intent(in) :: ke_, f_
439 real(RP), intent(in) :: normalized_fac
440 !-------------------------------------------------------------
441
442 if ( abs(r - rbc)*normalized_fac < node_tol ) then
443 counterb(domb_id) = counterb(domb_id) + 1
444 ordinfo(counterb(domb_id),domb_id) = ord_info
445 elemids(counterb(domb_id),domb_id) = ke_
446 faceids(counterb(domb_id),domb_id) = f_
447 end if
448
449 return
450 end subroutine eval_domain_boundary
451

Referenced by scale_mesh_rectdom2d::meshrectdom2d_setuplocaldom().

◆ meshutil2d_genpatchboundarymap_wide()

subroutine, public scale_meshutil_2d::meshutil2d_genpatchboundarymap_wide ( integer, dimension( 2*(nex + ney)*nfp*halosize ), intent(inout) vmapb2,
integer, dimension( 2*(nex + ney)*nfp ), intent(in) vmapb,
integer, intent(in) halosize,
integer, intent(in) nex,
integer, intent(in) ney,
integer, intent(in) nfp )

Definition at line 456 of file scale_meshutil_2d.F90.

459 use scale_prc, only: prc_abort
460 implicit none
461 integer, intent(in) :: HaloSize
462 integer, intent(in) :: NeX
463 integer, intent(in) :: NeY
464 integer, intent(in) :: Nfp
465 integer, intent(inout) :: VMapB2( 2*(NeX + NeY)*Nfp*HaloSize )
466 integer, intent(in) :: VMapB( 2*(NeX + NeY)*Nfp )
467
468 integer :: f
469 integer :: iso, isso, i, ii
470 integer :: ke, p, ph, pv
471 !------------------------------------------------------------
472
473 if ( halosize > nfp ) then
474 log_info("MeshUtil2D_genPatchBoundaryMap_wide",*) "HaloSize should be <= Nfp. Check!"
475 call prc_abort
476 end if
477
478 !--
479 f = 1
480 iso = 0; isso = 0
481 do ke=1, nex
482 do ph=1, halosize
483 do p=1, nfp
484 i = iso + p + (ke-1)*nfp
485 ii = isso + p + (ph-1)*nfp + (ke-1)*nfp*halosize
486 vmapb2(ii) = vmapb(i) + (ph-1)*nfp
487 end do
488 end do
489 end do
490
491 !--
492 f = 2
493 iso = iso + nex * nfp
494 isso = isso + nex * nfp*halosize
495 do ke=1, ney
496 do ph=1, halosize
497 do p=1, nfp
498 i = iso + p + (ke-1)*nfp
499 ii = isso + p + (ph-1)*nfp + (ke-1)*nfp*halosize
500 vmapb2(ii) = vmapb(i) - (ph-1)
501 end do
502 end do
503 end do
504
505 !--
506 f = 3
507 iso = iso + ney * nfp
508 isso = isso + ney * nfp*halosize
509 do ke=1, nex
510 do ph=1, halosize
511 do p=1, nfp
512 i = iso + p + (ke-1)*nfp
513 ii = isso + p + (ph-1)*nfp + (ke-1)*nfp*halosize
514 vmapb2(ii) = vmapb(i) - (ph-1)*nfp
515 end do
516 end do
517 end do
518
519 !--
520 f = 4
521 iso = iso + nex * nfp
522 isso = isso + nex * nfp*halosize
523 do ke=1, ney
524 do ph=1, halosize
525 do p=1, nfp
526 i = iso + p + (ke-1)*nfp
527 ii = isso + p + (ph-1)*nfp + (ke-1)*nfp*halosize
528 vmapb2(ii) = vmapb(i) + (ph-1)
529 end do
530 end do
531 end do
532 return

◆ meshutil2d_buildglobalmap()

subroutine, public scale_meshutil_2d::meshutil2d_buildglobalmap ( integer, dimension(ntile), intent(out) panelid_table,
integer, dimension(ntile), intent(out) pi_table,
integer, dimension(ntile), intent(out) pj_table,
integer, dimension(4,ntile), intent(out) tileid_map,
integer, dimension(4,ntile), intent(out) tilefaceid_map,
integer, dimension(4,ntile), intent(out) tilepanelid_map,
integer, intent(in) ntile,
logical, intent(in) isperiodicx,
logical, intent(in) isperiodicy,
integer, intent(in) ne_x,
integer, intent(in) ne_y )

Definition at line 536 of file scale_meshutil_2d.F90.

541
542 implicit none
543
544 integer, intent(in) :: Ntile
545 integer, intent(out) :: panelID_table(Ntile)
546 integer, intent(out) :: pi_table(Ntile)
547 integer, intent(out) :: pj_table(Ntile)
548 integer, intent(out) :: tileID_map(4,Ntile)
549 integer, intent(out) :: tileFaceID_map(4,Ntile)
550 integer, intent(out) :: tilePanelID_map(4,Ntile)
551 logical, intent(in) :: isPeriodicX
552 logical, intent(in) :: isPeriodicY
553 integer, intent(in) :: Ne_x
554 integer, intent(in) :: Ne_y
555
556 integer :: NtilePerPanel
557 integer :: NvX, NvY
558 integer, allocatable :: nodesID_2d(:,:)
559 integer, allocatable :: EToV(:,:)
560 integer, allocatable :: EToE(:,:)
561 integer, allocatable :: EToF(:,:)
562 integer :: i, j, f
563 integer :: panelID
564 integer :: tileID, tileID_R
565 integer :: counter
566
567 !-----------------------------------------------------------------------------
568
569 ntileperpanel = ntile/1
570 nvx = ne_x + 1
571 nvy = ne_y + 1
572 allocate( nodesid_2d(nvx, nvy) )
573 allocate( etov(ntile,4), etoe(ntile,4), etof(ntile,4) )
574
575 counter = 0
576 do j = 1, nvy
577 do i = 1, nvx
578 counter = counter + 1
579 nodesid_2d(i,j) = counter
580 end do
581 end do
582
583 !----
584
585 tileid = 0
586 do j = 1, ne_y
587 do i = 1, ne_x
588 tileid = tileid + 1
589 panelid_table(tileid) = 1
590 pi_table(tileid) = i; pj_table(tileid) = j
591 etov(tileid,:) = (/ nodesid_2d(i,j ), nodesid_2d(i+1,j ), &
592 & nodesid_2d(i,j+1), nodesid_2d(i+1,j+1)/)
593 end do
594 end do
595
596 call meshutil2d_genconnectivity( etoe, etof, &
597 & etov, ntile, 4 )
598 tileid_map(:,:) = transpose(etoe)
599 tilefaceid_map(:,:) = transpose(etof)
600
601 do tileid=1, ntile
602 do f=1, 4
603 tileid_r = tileid_map(f,tileid)
604 tilepanelid_map(f,tileid) = panelid_table(tileid_r)
605 end do
606 end do
607
608 if (isperiodicx) then
609 do tileid=1, ntile
610 if (pi_table(tileid) == 1 .and. tilefaceid_map(4,tileid) == 4) then
611 tileid_map(4,tileid) = ne_x + (pj_table(tileid) - 1)*ne_x
612 tilefaceid_map(4,tileid) = 2
613 end if
614 if (pi_table(tileid) == ne_x .and. tilefaceid_map(2,tileid) == 2) then
615 tileid_map(2,tileid) = 1 + (pj_table(tileid) - 1)*ne_x
616 tilefaceid_map(2,tileid) = 4
617 end if
618 end do
619 end if
620
621 if (isperiodicy) then
622 do tileid=1, ntile
623 if (pj_table(tileid) == 1 .and. tilefaceid_map(1,tileid) == 1) then
624 tileid_map(1,tileid) = pi_table(tileid) + (ne_y - 1)*ne_x
625 tilefaceid_map(1,tileid) = 3
626 end if
627 if (pj_table(tileid) == ne_y .and. tilefaceid_map(3,tileid) == 3) then
628 tileid_map(3,tileid) = pi_table(tileid)
629 tilefaceid_map(3,tileid) = 1
630 end if
631 end do
632 end if
633
634 return
635
636 !--
637
638 ! if (PRC_isMaster) then
639 ! write(*,*) "TotTile", Ntile
640 ! do tileID = 1, Ntile
641 ! write(*,*) "tileID:", tileID, ", EtoV:", EtoV(tileID,:)
642 ! end do
643 ! write(*,*) "-----------"
644 ! do tileID = 1, Ntile
645 ! write(*,*) "tileID:", tileID, ", EtoE:", EtoE(tileID,:)
646 ! end do
647 ! write(*,*) "-----------"
648 ! do tileID = 1, Ntile
649 ! write(*,*) "tileID:", tileID, ", EtoF:", EtoF(tileID,:)
650 ! end do
651 ! end if

References meshutil2d_genconnectivity().

Referenced by scale_mesh_rectdom2d::meshrectdom2d_setuplocaldom().