FE-Project
Loading...
Searching...
No Matches
scale_mesh_cubedspheredom2d.F90
Go to the documentation of this file.
1!-------------------------------------------------------------------------------
2!> module FElib / Mesh / Cubed-sphere 2D domain
3!!
4!! @par Description
5!! Manage mesh data of cubed-sphere 2D domain for element-based methods
6!!
7!! @author Yuta Kawai, Team SCALE
8!<
9#include "scaleFElib.h"
11
12 !-----------------------------------------------------------------------------
13 !
14 !++ used modules
15 !
16 use scale_io
17 use scale_precision
18
19 use scale_mesh_base2d, only: &
25
26 use scale_localmesh_2d, only: &
30
31 !-----------------------------------------------------------------------------
32 implicit none
33 private
34
35 !-----------------------------------------------------------------------------
36 !
37 !++ Public type & procedure
38 !
39
40 !> Derived type to manage a cubed-sphere 2D computational domain
41 type, extends(meshbase2d), public :: meshcubedspheredom2d
42 integer :: negx !< Number of elements in X-direction in a panel of cubed-sphere mesh
43 integer :: negy !< Number of elements in Y-direction in a panel of cubed-sphere mesh
44
45 real(rp), public :: xmin_gl !< Minimum X-coordinate in a panel of cubed-sphere mesh
46 real(rp), public :: xmax_gl !< Maximum X-coordinate in a panel of cubed-sphere mesh
47 real(rp), public :: ymin_gl !< Minimum Y-coordinate in a panel of cubed-sphere mesh
48 real(rp), public :: ymax_gl !< Maximum Y-coordinate in a panel of cubed-sphere mesh
49
50 integer, allocatable :: rcdomijp2lcmeshid(:,:,:) !< Mapping from (i,j,panel) to local mesh ID
51
52 real(rp) :: rplanet !< Planetary radius
53 integer :: halosize_1d !< Halo size in 1D direction
54 contains
55 procedure :: init => meshcubedspheredom2d_init
56 procedure :: final => meshcubedspheredom2d_final
57 procedure :: generate => meshcubedspheredom2d_generate
58 procedure :: assigndomid => meshcubedspheredom2d_assigndomid
60
63
64 !-----------------------------------------------------------------------------
65 !
66 !++ Public parameters & variables
67 !
68
69 !-----------------------------------------------------------------------------
70 !
71 !++ Private procedure
72 !
73
74 private :: meshcubedspheredom2d_calc_normal
75 private :: meshcubedspheredom2d_coord_conv
76 private :: fill_halo_metric
77
78 !-----------------------------------------------------------------------------
79 !
80 !++ Private parameters & variables
81 !
82
83contains
84 subroutine meshcubedspheredom2d_init(this, &
85 NeGX, NeGY, RPlanet, &
86 refElem, NLocalMeshPerPrc, &
87 nproc, myrank )
88
89 use scale_const, only: &
90 pi => const_pi
91 implicit none
92
93 class(meshcubedspheredom2d), intent(inout) :: this
94 integer, intent(in) :: NeGX
95 integer, intent(in) :: NeGY
96 real(RP), intent(in) :: RPlanet
97 type(quadrilateralelement), intent(in), target :: refElem
98 integer, intent(in) :: NLocalMeshPerPrc
99 integer, intent(in), optional :: nproc
100 integer, intent(in), optional :: myrank
101 !-----------------------------------------------------------------------------
102
103 this%NeGX = negx
104 this%NeGY = negy
105
106 this%xmin_gl = - 0.25_rp * pi
107 this%xmax_gl = + 0.25_rp * pi
108 this%ymin_gl = - 0.25_rp * pi
109 this%ymax_gl = + 0.25_rp * pi
110 this%RPlanet = rplanet
111 this%dom_vol = 4.0_rp * pi * rplanet**2
112
113
114 call meshbase2d_init( this, refelem, nlocalmeshperprc, &
115 nproc, myrank )
116
117 call this%SetDimInfo( meshbase2d_dimtypeid_x, "x", "1", "X-coordinate" )
118 call this%SetDimInfo( meshbase2d_dimtypeid_y, "y", "1", "Y-coordinate" )
119 call this%SetDimInfo( meshbase2d_dimtypeid_xy, "xy", "1", "XY-coordinate" )
120 call this%SetDimInfo( meshbase2d_dimtypeid_xyt, "xyt", "1", "XY-coordinate" )
121
122 return
123 end subroutine meshcubedspheredom2d_init
124
125 subroutine meshcubedspheredom2d_final( this )
126 implicit none
127 class(meshcubedspheredom2d), intent(inout) :: this
128 !-----------------------------------------------------------------------------
129
130 if (this%isGenerated) then
131 if ( allocated(this%rcdomIJP2LCMeshID) ) then
132 !$acc exit data delete(this%rcdomIJP2LCMeshID)
133 deallocate( this%rcdomIJP2LCMeshID )
134 end if
135 end if
136
137 call meshbase2d_final( this )
138
139 return
140 end subroutine meshcubedspheredom2d_final
141
142 subroutine meshcubedspheredom2d_generate( this )
143 implicit none
144
145 class(meshcubedspheredom2d), intent(inout), target :: this
146
147 integer :: n
148 type(localmesh2d), pointer :: mesh
149
150 integer :: tileID_table(this%LOCAL_MESH_NUM, this%PRC_NUM)
151 integer :: panelID_table(this%LOCAL_MESH_NUM*this%PRC_NUM)
152 integer :: pi_table(this%LOCAL_MESH_NUM*this%PRC_NUM)
153 integer :: pj_table(this%LOCAL_MESH_NUM*this%PRC_NUM)
154
155 integer :: NprcX_lc, NprcY_lc
156 integer :: tileID
157
158 !-----------------------------------------------------------------------------
159
161 nprcx_lc, nprcy_lc, &
162 this%PRC_NUM, this%LOCAL_MESH_NUM_global, &
163 .true. )
164
165 !--- Construct the connectivity of patches (only master node)
166
167 call this%AssignDomID( &
168 nprcx_lc, nprcy_lc, & ! (in)
169 tileid_table, panelid_table, & ! (out)
170 pi_table, pj_table ) ! (out)
171
172 do n=1, this%LOCAL_MESH_NUM
173 mesh => this%lcmesh_list(n)
174 tileid = tileid_table(n, mesh%PRC_myrank+1)
175
177 tileid, panelid_table(tileid), &
178 pi_table(tileid), pj_table(tileid), nprcx_lc, nprcy_lc, &
179 this%xmin_gl, this%xmax_gl, this%ymin_gl, this%ymax_gl, this%RPlanet, &
180 this%NeGX/nprcx_lc, this%NeGY/nprcy_lc )
181
182 !---
183 ! write(*,*) "** my_rank=", mesh%PRC_myrank
184 ! write(*,*) " tileID:", mesh%tileID
185 ! write(*,*) " pnlID:", mesh%panelID, "-- i,j (within a panel)=", pi_table(tileID), pj_table(tileID)
186 ! write(*,*) " local mesh:", n, "( total", this%LOCAL_MESH_NUM, ")"
187 ! write(*,*) " panel_connect:", this%tilePanelID_globalMap(:,mesh%tileID)
188 ! write(*,*) " tile_connect:", this%tileID_globalMap(:,mesh%tileID)
189 ! write(*,*) " face_connect:", this%tileFaceID_globalMap(:,mesh%tileID)
190 ! write(*,*) " domain size"
191 ! write(*,*) " NeX, NeY:", mesh%NeX, mesh%NeY
192 ! write(*,*) " [X], [Y]:", mesh%xmin, mesh%xmax, ":", mesh%ymin, mesh%ymax
193 end do
194
195 this%isGenerated = .true.
196
197 return
198 end subroutine meshcubedspheredom2d_generate
199
201 NprcX_lc, NprcY_lc, &
202 PRC_NUM, LOCAL_MESH_NUM_global, &
203 call_prc_abort )
204
205 use scale_prc, only: prc_abort
206 implicit none
207
208 integer, intent(in) :: prc_num
209 integer, intent(in) :: local_mesh_num_global
210 integer, intent(out) :: nprcx_lc
211 integer, intent(out) :: nprcy_lc
212 logical, intent(in), optional :: call_prc_abort
213
214 integer :: tile_num_per_panel
215 logical :: call_prc_abort_
216 !-----------------------------------------------------------------------------
217
218 if (present(call_prc_abort)) then
219 call_prc_abort_ = call_prc_abort
220 else
221 call_prc_abort_ = .false.
222 end if
223
224 if ( mod(local_mesh_num_global, 6) /= 0 ) then
225 log_error("MeshCubedSphereDom2D_division_params",*) "The total number of local mesh must be a multiple of 6. Check!"
226 if (call_prc_abort_) call prc_abort
227 end if
228
229 tile_num_per_panel = local_mesh_num_global / 6
230
231 if ( prc_num <= 6 ) then
232 if ( ( prc_num == 1 ) .or. &
233 ( prc_num <= 6 .and. (mod(prc_num,2)==0 .or. mod(prc_num,3)==0)) ) then
234 nprcx_lc = 1; nprcy_lc = 1
235 else
236 log_error("MeshCubedSphereDom2D_division_params",*) "The number of proceses is inappropriate. Check!"
237 if (call_prc_abort_) call prc_abort
238 end if
239 else
240 if ( mod(prc_num,6) == 0 ) then
241 nprcx_lc = int(sqrt(dble(tile_num_per_panel)))
242 nprcy_lc = tile_num_per_panel / nprcx_lc
243 if ( nprcx_lc /= nprcy_lc ) then
244 log_error("MeshCubedSphereDom2D_division_params",*) "The number of proceses is inappropriate. Check!"
245 if (call_prc_abort_) call prc_abort
246 end if
247 else
248 log_error("MeshCubedSphereDom2D_division_params",*) "The number of proceses is inappropriate. Check!"
249 if (call_prc_abort_) call prc_abort
250 end if
251 end if
252
253 return
255
257 tileID, panelID, &
258 i, j, NprcX, NprcY, &
259 dom_xmin, dom_xmax, dom_ymin, dom_ymax, planet_radius, &
260 NeX, NeY )
261
263 meshutilcubedsphere2d_genconnectivity, &
264 meshutilcubedsphere2d_genrectdomain, &
265 meshutilcubedsphere2d_buildinteriormap, &
266 meshutilcubedsphere2d_genpatchboundarymap
267
268 use scale_cubedsphere_coord_cnv, only: &
271
273
274 implicit none
275
276 type(localmesh2d), intent(inout) :: lcmesh
277 integer, intent(in) :: tileid
278 integer, intent(in) :: panelid
279 integer, intent(in) :: i, j
280 integer, intent(in) :: nprcx, nprcy
281 real(rp), intent(in) :: dom_xmin, dom_xmax
282 real(rp), intent(in) :: dom_ymin, dom_ymax
283 real(rp), intent(in) :: planet_radius
284 integer, intent(in) :: nex, ney
285
286 class(elementbase2d), pointer :: elem
287 real(rp) :: delx, dely
288 integer :: ke
289
290 real(rp), allocatable :: gam(:,:)
291 !-----------------------------------------------------------------------------
292
293 elem => lcmesh%refElem2D
294
295 lcmesh%tileID = tileid
296 lcmesh%panelID = panelid
297 !$acc update device(lcmesh%tileID, lcmesh%panelID)
298
299 !--
300 lcmesh%Ne = nex * ney
301 lcmesh%Nv = (nex + 1)*(ney + 1)
302 lcmesh%NeS = 1
303 lcmesh%NeE = lcmesh%Ne
304 lcmesh%NeA = lcmesh%Ne + 2*(nex + ney)
305 !$acc update device(lcmesh%Ne, lcmesh%Nv, lcmesh%NeS, lcmesh%NeE, lcmesh%NeA)
306
307 lcmesh%NeX = nex
308 lcmesh%NeY = ney
309 !$acc update device(lcmesh%NeX, lcmesh%NeY)
310
311 !--
312 delx = ( dom_xmax - dom_xmin ) / dble(nprcx)
313 dely = ( dom_ymax - dom_ymin ) / dble(nprcy)
314
315 lcmesh%xmin = dom_xmin + (i-1)*delx
316 lcmesh%xmax = dom_xmin + i *delx
317 lcmesh%ymin = dom_ymin + (j-1)*dely
318 lcmesh%ymax = dom_ymin + j *dely
319 !$acc update device(lcmesh%xmin, lcmesh%xmax, lcmesh%ymin, lcmesh%ymax)
320
321 !--
322 allocate( lcmesh%pos_ev(lcmesh%Nv,2) )
323 allocate( lcmesh%EToV(lcmesh%Ne,elem%Nv) )
324 allocate( lcmesh%EToE(lcmesh%Ne,elem%Nfaces) )
325 allocate( lcmesh%EToF(lcmesh%Ne,elem%Nfaces) )
326 allocate( lcmesh%BCType(lcmesh%refElem%Nfaces,lcmesh%Ne) )
327 allocate( lcmesh%VMapM(elem%NfpTot, lcmesh%Ne) )
328 allocate( lcmesh%VMapP(elem%NfpTot, lcmesh%Ne) )
329 allocate( lcmesh%MapM(elem%NfpTot, lcmesh%Ne) )
330 allocate( lcmesh%MapP(elem%NfpTot, lcmesh%Ne) )
331 !$acc enter data create(lcmesh%pos_ev, lcmesh%EToV, lcmesh%EToE, lcmesh%EToF, lcmesh%BCType, &
332 !$acc lcmesh%VMapM, lcmesh%VMapP, lcmesh%MapM, lcmesh%MapP)
333
334 lcmesh%BCType(:,:) = bctype_interior
335 !$acc update device(lcmesh%BCType)
336
337 !----
338
339 call meshutilcubedsphere2d_genrectdomain( lcmesh%pos_ev, lcmesh%EToV, & ! (out)
340 lcmesh%NeX, lcmesh%xmin, lcmesh%xmax, & ! (in)
341 lcmesh%NeY, lcmesh%ymin, lcmesh%ymax ) ! (in)
342 !$acc update device(lcmesh%pos_ev, lcmesh%EToV)
343
344 !---
345 call meshbase2d_setgeometricinfo(lcmesh, meshcubedspheredom2d_coord_conv, meshcubedspheredom2d_calc_normal )
346
348 lcmesh%pos_en(:,:,1), lcmesh%pos_en(:,:,2), elem%Np * lcmesh%Ne, planet_radius, & ! (in)
349 lcmesh%G_ij, lcmesh%GIJ, lcmesh%Gsqrt(:,lcmesh%NeS:lcmesh%NeE) ) ! (out)
350 !$acc update host(lcmesh%G_ij, lcmesh%GIJ)
351
352 allocate( gam(elem%Np,lcmesh%Ne) )
353 gam(:,:) = 1.0_rp
354 !$acc data copyin(gam)
355
357 lcmesh%panelID, lcmesh%pos_en(:,:,1), lcmesh%pos_en(:,:,2), gam(:,:), & ! (in)
358 lcmesh%Ne * lcmesh%refElem2D%Np, & ! (in)
359 lcmesh%lon(:,:), lcmesh%lat(:,:) ) ! (out)
360 !$acc update host(lcmesh%lon, lcmesh%lat)
361
362 !$acc end data
363
364 !---
365
366 call meshutilcubedsphere2d_genconnectivity( lcmesh%EToE, lcmesh%EToF, & ! (out)
367 lcmesh%EToV, lcmesh%Ne, elem%Nfaces ) ! (in)
368 !$acc update device(lcmesh%EToE, lcmesh%EToF)
369
370 !---
371 call meshutilcubedsphere2d_buildinteriormap( &
372 lcmesh%VmapM, lcmesh%VMapP, lcmesh%MapM, lcmesh%MapP, &
373 lcmesh%pos_en, lcmesh%pos_ev, lcmesh%EToE, lcmesh%EtoF, lcmesh%EtoV, &
374 elem%Fmask, lcmesh%Ne, elem%Np, elem%Nfp, elem%Nfaces, lcmesh%Nv )
375
376 call meshutilcubedsphere2d_genpatchboundarymap( &
377 lcmesh%VMapB, lcmesh%MapB, lcmesh%VMapP, &
378 lcmesh%pos_en, lcmesh%xmin, lcmesh%xmax, lcmesh%ymin, lcmesh%ymax, &
379 elem%Fmask, lcmesh%Ne, elem%Np, elem%Nfp, elem%Nfaces, lcmesh%Nv )
380 !$acc update device(lcmesh%VMapM, lcmesh%VMapP, lcmesh%MapM, lcmesh%MapP)
381 !$acc enter data copyin(lcmesh%VMapB, lcmesh%MapB)
382
383 !--
384 call fill_halo_metric( lcmesh%Gsqrt, &
385 lcmesh%VMapM, lcmesh%VMapP, lcmesh, elem )
386 !$acc update host(lcmesh%Gsqrt)
387
388 return
390
391 !- private ------------------------------
392
393 subroutine meshcubedspheredom2d_assigndomid( this, &
394 NprcX_lc, NprcY_lc, &
395 tileID_table, panelID_table, &
396 pi_table, pj_table )
397
398 use scale_meshutil_cubedsphere2d, only: &
400
401 implicit none
402
403 class(meshcubedspheredom2d), target, intent(inout) :: this
404 integer, intent(in) :: nprcx_lc
405 integer, intent(in) :: nprcy_lc
406 integer, intent(out) :: tileid_table(this%local_mesh_num, this%prc_num)
407 integer, intent(out) :: panelid_table(this%local_mesh_num*this%prc_num)
408 integer, intent(out) :: pi_table(this%local_mesh_num*this%prc_num)
409 integer, intent(out) :: pj_table(this%local_mesh_num*this%prc_num)
410
411 integer :: n
412 integer :: prc
413 integer :: tileid
414 integer :: is_lc, js_lc, ps_lc
415 integer :: ilc_count, jlc_count, plc_count
416 integer :: ilc, jlc, plc
417 integer :: npanel_lc
418
419 type(localmesh2d), pointer :: lcmesh
420 !-----------------------------------------------------------------------------
421
423 panelid_table, pi_table, pj_table, & ! (out)
424 this%tileID_globalMap, this%tileFaceID_globalMap, this%tilePanelID_globalMap, & ! (out)
425 this%LOCAL_MESH_NUM_global ) ! (in)
426 !$acc update device(this%tileID_globalMap, this%tileFaceID_globalMap, this%tilePanelID_globalMap)
427
428 !----
429
430 do prc=1, this%PRC_NUM
431 do n=1, this%LOCAL_MESH_NUM
432 tileid = n + (prc-1)*this%LOCAL_MESH_NUM
433 lcmesh => this%lcmesh_list(n)
434
435 !-
436 tileid_table(n,prc) = tileid
437 this%tileID_global2localMap(tileid) = n
438 this%PRCRank_globalMap(tileid) = prc - 1
439
440 !-
441 if ( this%PRCRank_globalMap(tileid) == lcmesh%PRC_myrank ) then
442 if (n==1) then
443 is_lc = pi_table(tileid); ilc_count = 1
444 js_lc = pj_table(tileid); jlc_count = 1
445 ps_lc = panelid_table(tileid); plc_count = 1
446 end if
447 if(is_lc < pi_table(tileid)) ilc_count = ilc_count + 1
448 if(js_lc < pj_table(tileid)) jlc_count = jlc_count + 1
449 if(ps_lc < panelid_table(tileid)) plc_count = plc_count + 1
450 end if
451 end do
452 end do
453 !$acc update device(this%tileID_global2localMap, this%PRCRank_globalMap)
454
455 allocate( this%rcdomIJP2LCMeshID(ilc_count,jlc_count,plc_count) )
456 do plc=1, plc_count
457 do jlc=1, jlc_count
458 do ilc=1, ilc_count
459 this%rcdomIJP2LCMeshID(ilc,jlc,plc) = ilc + (jlc - 1)*ilc_count + (plc-1)*ilc_count*jlc_count
460 end do
461 end do
462 end do
463 !$acc enter data copyin(this%rcdomIJP2LCMeshID)
464
465 return
466 end subroutine meshcubedspheredom2d_assigndomid
467
468 subroutine meshcubedspheredom2d_coord_conv( x, y, xr, xs, yr, ys, &
469 vx, vy, elem )
470
471 implicit none
472
473 type(elementbase2d), intent(in) :: elem
474 real(rp), intent(out) :: x(elem%np), y(elem%np)
475 real(rp), intent(out) :: xr(elem%np), xs(elem%np), yr(elem%np), ys(elem%np)
476 real(rp), intent(in) :: vx(elem%nv), vy(elem%nv)
477
478 !-------------------------------------------------
479
480 x(:) = vx(1) + 0.5_rp*(elem%x1(:) + 1.0_rp)*(vx(2) - vx(1))
481 y(:) = vy(1) + 0.5_rp*(elem%x2(:) + 1.0_rp)*(vy(3) - vy(1))
482
483 xr(:) = 0.5_rp*(vx(2) - vx(1)) !matmul(refElem%Dx1,mesh%x1(:,n))
484 xs(:) = 0.0_rp !matmul(refElem%Dx2,mesh%x1(:,n))
485 yr(:) = 0.0_rp !matmul(refElem%Dx1,mesh%x2(:,n))
486 ys(:) = 0.5_rp*(vy(3) - vy(1)) !matmul(refElem%Dx2,mesh%x2(:,n))
487
488 return
489 end subroutine meshcubedspheredom2d_coord_conv
490
491 subroutine meshcubedspheredom2d_calc_normal( normal_fn, &
492 Escale_f, fid, elem )
493
494 implicit none
495
496 type(elementbase2d), intent(in) :: elem
497 real(rp), intent(out) :: normal_fn(elem%nfptot,2)
498 integer, intent(in) :: fid(elem%nfp,elem%nfaces)
499 real(rp), intent(in) :: escale_f(elem%nfptot,2,2)
500
501 integer :: d
502 !-------------------------------------------------
503
504 do d=1, 2
505 normal_fn(fid(:,1),d) = - escale_f(fid(:,1),2,d)
506 normal_fn(fid(:,2),d) = + escale_f(fid(:,2),1,d)
507 normal_fn(fid(:,3),d) = + escale_f(fid(:,3),2,d)
508 normal_fn(fid(:,4),d) = - escale_f(fid(:,4),1,d)
509 end do
510
511 return
512 end subroutine meshcubedspheredom2d_calc_normal
513
514 !--
515
516!OCL SERIAL
517 subroutine fill_halo_metric( Gsqrt, vmapM, vmapP, lmesh, elem )
518 implicit none
519 class(localmesh2d), intent(in) :: lmesh
520 class(elementbase2d), intent(in) :: elem
521 integer, intent(in) :: vmapm(elem%nfptot*lmesh%ne)
522 integer, intent(in) :: vmapp(elem%nfptot*lmesh%ne)
523 real(rp), intent(inout) :: gsqrt(elem%np*lmesh%nea)
524
525 integer :: i, im, ip
526 integer :: npxne
527 !------------------------------------------------
528
529 npxne = elem%Np * lmesh%Ne
530
531 !$omp parallel do private(i, iM, iP)
532 !$acc parallel loop present(Gsqrt, vmapM, vmapP)
533 do i=1, elem%NfpTot*lmesh%Ne
534 im = vmapm(i); ip = vmapp(i)
535 if ( ip > npxne ) then
536 gsqrt(ip) = gsqrt(im)
537 end if
538 end do
539 return
540 end subroutine fill_halo_metric
541
Module common / Coordinate conversion with cubed-sphere projection.
subroutine, public cubedspherecoordcnv_cs2lonlatpos(panelid, alpha, beta, gam, np, lon, lat)
Calculate longitude and latitude coordinates from local coordinates using the central angles in an eq...
subroutine, public cubedspherecoordcnv_getmetric(alpha, beta, np, radius, g_ij, gij, gsqrt)
Calculate the metrics associated with an equiangular gnomonic cubed-sphere projection to those in lon...
module FElib / Element / Base
module FElib / Element / Quadrilateral
module FElib / Mesh / Local 2D
module FElib / Mesh / Local, Base
integer, parameter, public bctype_interior
module FElib / Mesh / Base 2D
subroutine, public meshbase2d_final(this)
Finalize an object to manage a 2D computational mesh.
subroutine, public meshbase2d_init(this, refelem, nlocalmeshperprc, nprocs, myrank)
Initialize an object to manage a 2D computational mesh.
subroutine, public meshbase2d_setgeometricinfo(lcmesh, coord_conv, calc_normal)
integer, public meshbase2d_dimtypeid_xy
integer, public meshbase2d_dimtypeid_xyt
integer, public meshbase2d_dimtypeid_x
integer, public meshbase2d_dimtype_num
integer, public meshbase2d_dimtypeid_y
module FElib / Mesh / Cubed-sphere 2D domain
subroutine, public meshcubedspheredom2d_check_division_params(nprcx_lc, nprcy_lc, prc_num, local_mesh_num_global, call_prc_abort)
subroutine, public meshcubedspheredom2d_setuplocaldom(lcmesh, tileid, panelid, i, j, nprcx, nprcy, dom_xmin, dom_xmax, dom_ymin, dom_ymax, planet_radius, nex, ney)
subroutine meshcubedspheredom2d_init(this, negx, negy, rplanet, refelem, nlocalmeshperprc, nproc, myrank)
module FElib / Mesh / utility for 2D cubed-sphere mesh
subroutine, public meshutilcubedsphere2d_buildglobalmap(panelid_table, pi_table, pj_table, tileid_map, tilefaceid_map, tilepanelid_map, ntile)
Derived type representing a 2D reference element.
Derived type representing a quadrilateral element.
Derived type representing a local mesh for 2D domain.
Derived type to manage a computational mesh (base type for 2D domain)
Derived type to manage a cubed-sphere 2D computational domain.