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

module FElib / File / Common More...

Data Types

type  file_common_meshfield_diminfo
interface  file_common_meshfield_get_axis
interface  file_common_meshfield_get_dims

Functions/Subroutines

subroutine, public file_common_meshfield_get_dims1d (mesh1d, dim_name_postfix, dimsinfo)
subroutine, public file_common_meshfield_get_axis1d (mesh1d, dimsinfo, x, force_uniform_grid)
subroutine, public file_common_meshfield_put_field1d_cartesbuf (mesh1d, field1d, buf, force_uniform_grid)
subroutine, public file_common_meshfield_set_cartesbuf_field1d (mesh1d, buf, field1d)
subroutine, public file_common_meshfield_set_cartesbuf_field1d_local (lcmesh, buf, i0_s, val)
subroutine, public file_common_meshfield_get_dims2d (mesh2d, dim_name_postfix, dimsinfo)
subroutine, public file_common_meshfield_get_axis2d (mesh2d, dimsinfo, x, y, force_uniform_grid)
subroutine, public file_common_meshfield_put_field2d_cartesbuf (mesh2d, field2d, buf, force_uniform_grid)
subroutine, public file_common_meshfield_put_field2d_cubedsphere_cartesbuf (mesh2d, field2d, buf)
subroutine, public file_common_meshfield_set_cartesbuf_field2d (mesh2d, buf, field2d)
subroutine, public file_common_meshfield_set_cartesbuf_field2d_local (lcmesh, buf, i0_s, j0_s, val)
subroutine, public file_common_meshfield_set_cartesbuf_field2d_cubedsphere (mesh2d, buf, field2d)
subroutine, public file_common_meshfield_get_dims3d (mesh3d, dim_name_postfix, dimsinfo)
subroutine, public file_common_meshfield_get_axis3d (mesh3d, dimsinfo, x, y, z, force_uniform_grid)
subroutine, public file_common_meshfield_put_field3d_cartesbuf (mesh3d, field3d, buf, force_uniform_grid)
subroutine, public file_common_meshfield_put_field3d_cubedsphere_cartesbuf (mesh3d, field3d, buf)
subroutine, public file_common_meshfield_set_cartesbuf_field3d (mesh3d, buf, field3d)
subroutine, public file_common_meshfield_set_cartesbuf_field3d_cubedsphere (mesh3d, buf, field3d)
subroutine, public file_common_meshfield_set_cartesbuf_field3d_local (lcmesh, buf, i0_s, j0_s, k0_s, val)
integer function, public file_common_meshfield_get_dtype (datatype)

Detailed Description

module FElib / File / Common

Description
A common module for outputting field data
Author
Yuta Kawai, Team SCALE

Function/Subroutine Documentation

◆ file_common_meshfield_get_dims1d()

subroutine, public scale_file_common_meshfield::file_common_meshfield_get_dims1d ( class(meshbase1d), intent(in), target mesh1d,
character(len=h_short), intent(in) dim_name_postfix,
type(file_common_meshfield_diminfo), dimension(meshbase1d_dimtype_num), intent(out) dimsinfo )

Definition at line 128 of file scale_file_common_meshfield.F90.

130 implicit none
131 class(MeshBase1D), target, intent(in) :: mesh1D
132 character(len=H_SHORT), intent(in) :: dim_name_postfix
133 type(FILE_common_meshfield_diminfo), intent(out) :: dimsinfo(MeshBase1D_DIMTYPE_NUM)
134
135 integer :: i_size
136 type(MeshDimInfo), pointer :: diminfo
137 type(MeshDimInfo), pointer :: diminfo_x
138 !-------------------------------------------------
139
140 i_size = mesh1d%NeG * mesh1d%refElem1D%Np
141
142 diminfo_x => mesh1d%dimInfo(meshbase1d_dimtypeid_x)
143 call set_dimension( dimsinfo(meshbase1d_dimtypeid_x), &
144 diminfo_x, "X", 1, (/ diminfo_x%name /), (/ i_size /), &
145 dim_name_postfix )
146
147 diminfo => mesh1d%dimInfo(meshbase1d_dimtypeid_xt)
148 call set_dimension( dimsinfo(meshbase1d_dimtypeid_xt), &
149 diminfo, "XT", 1, (/ diminfo_x%name /), (/ i_size /), &
150 dim_name_postfix )
151
152 return

Referenced by scale_file_history_meshfield::file_history_meshfield_in::file_history_meshfield_in3d().

◆ file_common_meshfield_get_axis1d()

subroutine, public scale_file_common_meshfield::file_common_meshfield_get_axis1d ( class(meshbase1d), intent(in), target mesh1d,
type(file_common_meshfield_diminfo), dimension(meshbase1d_dimtype_num), intent(in) dimsinfo,
real(rp), dimension(dimsinfo(meshbase1d_dimtypeid_x)%size), intent(out) x,
logical, intent(in), optional force_uniform_grid )

Definition at line 156 of file scale_file_common_meshfield.F90.

158 implicit none
159
160 class(MeshBase1D), target, intent(in) :: mesh1D
161 type(FILE_common_meshfield_diminfo), intent(in) :: dimsinfo(MeshBase1D_DIMTYPE_NUM)
162 real(RP), intent(out) :: x(dimsinfo(MeshBase1D_DIMTYPEID_X)%size)
163 logical, intent(in), optional :: force_uniform_grid
164
165 integer :: n
166 integer :: i
167 integer :: is, ie
168 type(ElementBase1D), pointer :: refElem
169 type(LocalMesh1D), pointer :: lcmesh
170
171 logical :: uniform_grid = .false.
172 real(RP), allocatable :: x_local(:)
173 !-------------------------------------------------
174
175 if ( present(force_uniform_grid) ) uniform_grid = force_uniform_grid
176
177 do n=1,mesh1d%LOCAL_MESH_NUM
178 lcmesh => mesh1d%lcmesh_list(n)
179 refelem => lcmesh%refElem1D
180
181 allocate( x_local(refelem%Np) )
182
183 do i=1,mesh1d%NeG
184 x_local(:) = lcmesh%pos_en(:,i,1)
185 if ( uniform_grid ) call get_uniform_grid1d( x_local, refelem%Nfp )
186
187 is = 1 + (i-1)*refelem%Np + (n-1)*refelem%Np*lcmesh%Ne
188 ie = is + refelem%Np -1
189 x(is:ie) = x_local(:)
190 end do
191
192 deallocate( x_local )
193 end do
194
195 return

Referenced by scale_file_history_meshfield::file_history_meshfield_in::file_history_meshfield_in3d().

◆ file_common_meshfield_put_field1d_cartesbuf()

subroutine, public scale_file_common_meshfield::file_common_meshfield_put_field1d_cartesbuf ( class(meshbase1d), intent(in), target mesh1d,
class(meshfield1d), intent(in) field1d,
real(rp), dimension(:), intent(inout) buf,
logical, intent(in), optional force_uniform_grid )

Definition at line 199 of file scale_file_common_meshfield.F90.

201 use scale_polynomial, only: &
203 implicit none
204 class(MeshBase1D), target, intent(in) :: mesh1D
205 class(MeshField1D), intent(in) :: field1d
206 real(RP), intent(inout) :: buf(:)
207 logical, intent(in), optional :: force_uniform_grid
208
209 integer :: n, kelem1, p
210 integer :: i, i2
211 type(LocalMesh1D), pointer :: lcmesh
212 type(ElementBase1D), pointer :: refElem
213 integer :: i0_s
214
215 logical :: uniform_grid = .false.
216 integer :: Np
217 real(RP), allocatable :: x_local(:)
218 real(RP) :: x_local0, delx
219 real(RP) :: ox(1)
220 real(RP), allocatable :: spectral_coef(:)
221 real(RP), allocatable :: P1D_ori_x(:,:)
222 !------------------------------------------------
223
224 if ( present(force_uniform_grid) ) uniform_grid = force_uniform_grid
225
226 i0_s = 0
227 do n=1, mesh1d%LOCAL_MESH_NUM
228 lcmesh => mesh1d%lcmesh_list(n)
229 refelem => lcmesh%refElem1D
230 np = refelem%Np
231
232 if ( uniform_grid ) then
233 allocate( x_local(np) )
234 allocate( spectral_coef(np) )
235 allocate( p1d_ori_x(1,np) )
236 end if
237
238 do kelem1=lcmesh%NeS, lcmesh%NeE
239 if ( uniform_grid ) then
240 x_local(:) = lcmesh%pos_en(:,kelem1,1)
241 x_local0 = x_local(1); delx = x_local(np) - x_local0
242 call get_uniform_grid1d( x_local, np )
243
244 spectral_coef(:) = matmul(refelem%invV(:,:), field1d%local(n)%val(:,kelem1))
245 do i2=1, np
246 ox = - 1.0_rp + 2.0_rp * (x_local(i2) - x_local0) / delx
247 call polynomial_genlegendrepoly_sub( refelem%PolyOrder, ox, p1d_ori_x(:,:) )
248
249 i = i0_s + i2 + (kelem1-1)*np
250 buf(i) = 0.0_rp
251 do p=1, np
252 buf(i) = buf(i) + &
253 p1d_ori_x(1,p) * sqrt( dble(p-1) + 0.5_rp ) * spectral_coef(p)
254 end do
255 end do
256 else
257 do i2=1, np
258 i = i0_s + i2 + (kelem1-1)*np
259 buf(i) = field1d%local(n)%val(i2,kelem1)
260 end do
261 end if
262 end do
263
264 i0_s = i0_s + lcmesh%Ne * refelem%Np
265 if ( uniform_grid ) then
266 deallocate( x_local )
267 deallocate( spectral_coef )
268 deallocate( p1d_ori_x )
269 end if
270 end do
271
272 return
Module common / Polynomial.
subroutine, public polynomial_genlegendrepoly_sub(nord, x, p)
A function to obtain the values of Legendre polynomials which are evaluated at arbitrary points.

References scale_polynomial::polynomial_genlegendrepoly_sub().

Referenced by scale_file_history_meshfield::file_history_meshfield_put::file_history_meshfield_put1d().

◆ file_common_meshfield_set_cartesbuf_field1d()

subroutine, public scale_file_common_meshfield::file_common_meshfield_set_cartesbuf_field1d ( class(meshbase1d), intent(in), target mesh1d,
real(rp), dimension(:), intent(in) buf,
class(meshfield1d), intent(inout) field1d )

Definition at line 276 of file scale_file_common_meshfield.F90.

278 implicit none
279 class(MeshBase1D), target, intent(in) :: mesh1D
280 real(RP), intent(in) :: buf(:)
281 class(MeshField1D), intent(inout) :: field1d
282
283 integer :: n
284 integer :: i0
285 type(LocalMesh1D), pointer :: lcmesh
286 type(ElementBase1D), pointer :: refElem
287 integer :: i0_s
288 !----------------------------------------------------
289
290 i0_s = 0
291
292 do i0=1, mesh1d%LOCAL_MESH_NUM
293 n = i0
294 lcmesh => mesh1d%lcmesh_list(n)
295 refelem => lcmesh%refElem1D
296
297 call file_common_meshfield_set_cartesbuf_field1d_local( &
298 lcmesh, buf(:), i0_s, &
299 field1d%local(n)%val(:,:) )
300
301 i0_s = i0_s + lcmesh%Ne * refelem%Np
302 end do
303
304 return

References file_common_meshfield_set_cartesbuf_field1d_local().

◆ file_common_meshfield_set_cartesbuf_field1d_local()

subroutine, public scale_file_common_meshfield::file_common_meshfield_set_cartesbuf_field1d_local ( type(localmesh1d), intent(in) lcmesh,
real(rp), dimension(:), intent(in) buf,
integer, intent(in) i0_s,
real(rp), dimension(lcmesh%refelem1d%np,lcmesh%nea), intent(inout) val )

Definition at line 308 of file scale_file_common_meshfield.F90.

311 implicit none
312 type(LocalMesh1D), intent(in) :: lcmesh
313 real(RP), intent(in) :: buf(:)
314 integer, intent(in) :: i0_s
315 real(RP), intent(inout) :: val(lcmesh%refElem1D%Np,lcmesh%NeA)
316
317 integer :: kelem1
318 integer :: i, i1, i2
319 type(ElementBase1D), pointer :: refElem
320 integer :: indx
321 !----------------------------------------------------
322
323 refelem => lcmesh%refElem1D
324
325 do i1=1, lcmesh%Ne
326 kelem1 = i1
327 do i2=1, refelem%Np
328 i = i0_s + i2 + (i1-1)*refelem%Np
329 indx = i2
330 val(indx,kelem1) = buf(i)
331 end do
332 end do
333
334 return

Referenced by file_common_meshfield_set_cartesbuf_field1d().

◆ file_common_meshfield_get_dims2d()

subroutine, public scale_file_common_meshfield::file_common_meshfield_get_dims2d ( class(meshrectdom2d), intent(in), target mesh2d,
character(len=h_short), intent(in) dim_name_postfix,
type(file_common_meshfield_diminfo), dimension(meshbase2d_dimtype_num), intent(out) dimsinfo )

Definition at line 340 of file scale_file_common_meshfield.F90.

342 implicit none
343
344 class(MeshRectDom2D), target, intent(in) :: mesh2D
345 character(len=H_SHORT), intent(in) :: dim_name_postfix
346 type(FILE_common_meshfield_diminfo), intent(out) :: dimsinfo(MeshBase2D_DIMTYPE_NUM)
347
348 type(LocalMesh2D), pointer :: lcmesh
349 integer :: i, j, n
350
351 integer :: i_size, j_size
352 type(MeshDimInfo), pointer :: diminfo
353 type(MeshDimInfo), pointer :: diminfo_x
354 type(MeshDimInfo), pointer :: diminfo_y
355 !-------------------------------------------------
356
357 i_size = 0
358 do i=1, size(mesh2d%rcdomIJ2LCMeshID,1)
359 n = mesh2d%rcdomIJ2LCMeshID(i,1)
360 lcmesh => mesh2d%lcmesh_list(n)
361 i_size =i_size + lcmesh%NeX * lcmesh%refElem2D%Nfp
362 end do
363
364 j_size = 0
365 do j=1, size(mesh2d%rcdomIJ2LCMeshID,2)
366 n = mesh2d%rcdomIJ2LCMeshID(1,j)
367 lcmesh => mesh2d%lcmesh_list(n)
368 j_size = j_size + lcmesh%NeY * lcmesh%refElem2D%Nfp
369 end do
370
371 diminfo_x => mesh2d%dimInfo(meshbase2d_dimtypeid_x)
372 call set_dimension( dimsinfo(meshbase2d_dimtypeid_x), &
373 diminfo_x, "X", 1, (/ diminfo_x%name /), (/ i_size /), &
374 dim_name_postfix )
375
376 diminfo_y => mesh2d%dimInfo(meshbase2d_dimtypeid_y)
377 call set_dimension( dimsinfo(meshbase2d_dimtypeid_y), &
378 diminfo_y, "Y", 1, (/ diminfo_y%name /), (/ j_size /), &
379 dim_name_postfix )
380
381 diminfo => mesh2d%dimInfo(meshbase2d_dimtypeid_xy)
382 call set_dimension( dimsinfo(meshbase2d_dimtypeid_xy), &
383 diminfo, "XY", 2, (/ diminfo_x%name, diminfo_y%name /), &
384 (/ i_size, j_size /), dim_name_postfix )
385
386 diminfo => mesh2d%dimInfo(meshbase2d_dimtypeid_xyt)
387 call set_dimension( dimsinfo(meshbase2d_dimtypeid_xyt), &
388 diminfo, "XYT", 2, (/ diminfo_x%name, diminfo_y%name /), &
389 (/ i_size, j_size /), dim_name_postfix )
390
391 return

Referenced by scale_file_history_meshfield::file_history_meshfield_in::file_history_meshfield_in3d().

◆ file_common_meshfield_get_axis2d()

subroutine, public scale_file_common_meshfield::file_common_meshfield_get_axis2d ( class(meshrectdom2d), intent(in), target mesh2d,
type(file_common_meshfield_diminfo), dimension(meshbase2d_dimtype_num), intent(in) dimsinfo,
real(rp), dimension(dimsinfo(meshbase2d_dimtypeid_x)%size), intent(out) x,
real(rp), dimension(dimsinfo(meshbase2d_dimtypeid_y)%size), intent(out) y,
logical, intent(in), optional force_uniform_grid )

Definition at line 453 of file scale_file_common_meshfield.F90.

455 implicit none
456
457 class(MeshRectDom2D), target, intent(in) :: mesh2D
458 type(FILE_common_meshfield_diminfo), intent(in) :: dimsinfo(MeshBase2D_DIMTYPE_NUM)
459 real(RP), intent(out) :: x(dimsinfo(MeshBase2D_DIMTYPEID_X)%size)
460 real(RP), intent(out) :: y(dimsinfo(MeshBase2D_DIMTYPEID_Y)%size)
461 logical, intent(in), optional :: force_uniform_grid
462
463 integer :: n
464 integer :: ni, nj
465 integer :: k
466 integer :: i, j
467 type(ElementBase2D), pointer :: refElem
468 type(LocalMesh2D), pointer :: lcmesh
469
470 integer :: is, js, ie, je, igs, jgs
471
472 logical :: uniform_grid = .false.
473 real(RP), allocatable :: x_local(:)
474 real(RP), allocatable :: y_local(:)
475 !-------------------------------------------------
476
477 if ( present(force_uniform_grid) ) uniform_grid = force_uniform_grid
478
479 igs = 0; jgs = 0
480 do nj=1, size(mesh2d%rcdomIJ2LCMeshID,2)
481 do ni=1, size(mesh2d%rcdomIJ2LCMeshID,1)
482 n = mesh2d%rcdomIJ2LCMeshID(ni,nj)
483 lcmesh => mesh2d%lcmesh_list(n)
484 refelem => lcmesh%refElem2D
485
486 allocate( x_local(refelem%Nfp), y_local(refelem%Nfp) )
487
488 do j=1, lcmesh%NeY
489 do i=1, lcmesh%NeX
490 k = i + (j-1) * lcmesh%NeX
491 if ( j==1 .and. nj == 1 ) then
492 x_local(:) = lcmesh%pos_en(refelem%Fmask(:,1),k,1)
493 if ( uniform_grid ) call get_uniform_grid1d( x_local, refelem%Nfp )
494
495 is = igs + 1 + (i-1)*refelem%Nfp
496 ie = is + refelem%Nfp - 1
497 x(is:ie) = x_local(:)
498 end if
499 if ( i==1 .and. ni == 1 ) then
500 y_local(:) = lcmesh%pos_en(refelem%Fmask(:,4),k,2)
501 if ( uniform_grid ) call get_uniform_grid1d( y_local, refelem%Nfp )
502
503 js = jgs + 1 + (j-1)*refelem%Nfp
504 je = js + refelem%Nfp - 1
505 y(js:je) = y_local(:)
506 end if
507 end do
508 end do
509
510 igs = ie; jgs = je
511 deallocate( x_local, y_local )
512 end do
513 end do
514
515 return

Referenced by scale_file_history_meshfield::file_history_meshfield_in::file_history_meshfield_in3d().

◆ file_common_meshfield_put_field2d_cartesbuf()

subroutine, public scale_file_common_meshfield::file_common_meshfield_put_field2d_cartesbuf ( class(meshrectdom2d), intent(in), target mesh2d,
class(meshfield2d), intent(in) field2d,
real(rp), dimension(:,:), intent(inout) buf,
logical, intent(in), optional force_uniform_grid )

Definition at line 584 of file scale_file_common_meshfield.F90.

586 use scale_polynomial, only: &
588 implicit none
589 class(MeshRectDom2D), target, intent(in) :: mesh2D
590 class(MeshField2D), intent(in) :: field2d
591 real(RP), intent(inout) :: buf(:,:)
592 logical, intent(in), optional :: force_uniform_grid
593
594 integer :: n, kelem1
595 integer :: i0, j0, i1, j1, i2, j2, i, j
596 type(LocalMesh2D), pointer :: lcmesh
597 type(ElementBase2D), pointer :: refElem
598 integer :: i0_s, j0_s
599
600 logical :: uniform_grid = .false.
601 integer :: Nfp
602 real(RP), allocatable :: x_local(:)
603 real(RP) :: x_local0, delx
604 real(RP), allocatable :: y_local(:)
605 real(RP) :: y_local0, dely
606 real(RP) :: ox(1), oy(1)
607 real(RP), allocatable :: spectral_coef(:)
608 real(RP), allocatable :: P1D_ori_x(:,:)
609 real(RP), allocatable :: P1D_ori_y(:,:)
610 integer :: l, p1, p2
611 !------------------------------------------------
612
613 if ( present(force_uniform_grid) ) uniform_grid = force_uniform_grid
614
615 i0_s = 0; j0_s = 0
616
617 do j0=1, size(mesh2d%rcdomIJ2LCMeshID,2)
618 do i0=1, size(mesh2d%rcdomIJ2LCMeshID,1)
619 n = mesh2d%rcdomIJ2LCMeshID(i0,j0)
620
621 lcmesh => mesh2d%lcmesh_list(n)
622 refelem => lcmesh%refElem2D
623 nfp = refelem%Nfp
624
625 if ( uniform_grid ) then
626 allocate( x_local(nfp), y_local(nfp) )
627 allocate( spectral_coef(refelem%Np) )
628 allocate( p1d_ori_x(1,nfp), p1d_ori_y(1,nfp) )
629 end if
630
631 do j1=1, lcmesh%NeY
632 do i1=1, lcmesh%NeX
633 kelem1 = i1 + (j1-1)*lcmesh%NeX
634
635 if ( uniform_grid ) then
636 x_local(:) = lcmesh%pos_en(refelem%Fmask(1:nfp,1),kelem1,1)
637 x_local0 = x_local(1); delx = x_local(nfp) - x_local0
638 y_local(:) = lcmesh%pos_en(refelem%Fmask(1:nfp,4),kelem1,2)
639 y_local0 = y_local(1); dely = y_local(nfp) - y_local0
640 call get_uniform_grid1d( x_local, nfp )
641 call get_uniform_grid1d( y_local, nfp )
642
643 spectral_coef(:) = matmul(refelem%invV(:,:), field2d%local(n)%val(:,kelem1))
644 do j2=1, nfp
645 do i2=1, nfp
646 ox(1) = - 1.0_rp + 2.0_rp * (x_local(i2) - x_local0) / delx
647 oy(1) = - 1.0_rp + 2.0_rp * (y_local(j2) - y_local0) / dely
648
649 call polynomial_genlegendrepoly_sub( refelem%PolyOrder, ox, p1d_ori_x(:,:) )
650 call polynomial_genlegendrepoly_sub( refelem%PolyOrder, oy, p1d_ori_y(:,:) )
651
652 i = i0_s + i2 + (i1-1)*nfp
653 j = j0_s + j2 + (j1-1)*nfp
654 buf(i,j) = 0.0_rp
655 do p2=1, nfp
656 do p1=1, nfp
657 l = p1 + (p2-1)*nfp
658 buf(i,j) = buf(i,j) + &
659 ( p1d_ori_x(1,p1) * p1d_ori_y(1,p2) ) &
660 * sqrt((dble(p1-1) + 0.5_rp)*(dble(p2-1) + 0.5_rp)) &
661 * spectral_coef(l)
662 end do
663 end do
664 end do
665 end do
666
667 else
668
669 do j2=1, nfp
670 do i2=1, nfp
671 i = i0_s + i2 + (i1-1)*nfp
672 j = j0_s + j2 + (j1-1)*nfp
673 buf(i,j) = field2d%local(n)%val(i2+(j2-1)*nfp,kelem1)
674 end do
675 end do
676
677 end if
678 end do
679 end do
680
681 if ( uniform_grid ) then
682 deallocate( x_local, y_local )
683 deallocate( spectral_coef )
684 deallocate( p1d_ori_x, p1d_ori_y )
685 end if
686
687 i0_s = i0_s + lcmesh%NeX * refelem%Nfp
688 end do
689 j0_s = j0_s + lcmesh%NeY * refelem%Nfp
690 end do
691
692 return

References scale_polynomial::polynomial_genlegendrepoly_sub().

Referenced by scale_file_history_meshfield::file_history_meshfield_put::file_history_meshfield_put2d().

◆ file_common_meshfield_put_field2d_cubedsphere_cartesbuf()

subroutine, public scale_file_common_meshfield::file_common_meshfield_put_field2d_cubedsphere_cartesbuf ( class(meshcubedspheredom2d), intent(in), target mesh2d,
class(meshfield2d), intent(in) field2d,
real(rp), dimension(:,:), intent(inout) buf )

Definition at line 696 of file scale_file_common_meshfield.F90.

698 use scale_polynomial, only: &
700 implicit none
701 class(MeshCubedSphereDom2D), target, intent(in) :: mesh2D
702 class(MeshField2D), intent(in) :: field2d
703 real(RP), intent(inout) :: buf(:,:)
704
705 integer :: n, kelem1
706 integer :: i0, j0, p0, i1, j1, i2, j2, i, j
707 type(LocalMesh2D), pointer :: lcmesh
708 type(ElementBase2D), pointer :: refElem
709 integer :: i0_s, j0_s
710 integer :: Nfp
711 !------------------------------------------------
712
713 i0_s = 0; j0_s = 0
714
715 do p0=1, size(mesh2d%rcdomIJP2LCMeshID,3)
716 do j0=1, size(mesh2d%rcdomIJP2LCMeshID,2)
717 do i0=1, size(mesh2d%rcdomIJP2LCMeshID,1)
718 n = mesh2d%rcdomIJP2LCMeshID(i0,j0,p0)
719
720 lcmesh => mesh2d%lcmesh_list(n)
721 refelem => lcmesh%refElem2D
722 nfp = refelem%Nfp
723
724 do j1=1, lcmesh%NeY
725 do i1=1, lcmesh%NeX
726 kelem1 = i1 + (j1-1)*lcmesh%NeX
727
728 do j2=1, nfp
729 do i2=1, nfp
730 i = i0_s + i2 + (i1-1)*nfp
731 j = j0_s + j2 + (j1-1)*nfp
732 buf(i,j) = field2d%local(n)%val(i2+(j2-1)*nfp,kelem1)
733 end do
734 end do
735
736 end do
737 end do
738
739 i0_s = i0_s + lcmesh%NeX * refelem%Nfp
740 end do
741 j0_s = j0_s + lcmesh%NeY * refelem%Nfp
742 end do
743 i0_s = 0
744 end do
745
746 return
real(rp) function, dimension(size(x), nord+1), public polynomial_genlegendrepoly(nord, x)
A function to obtain the values of Legendre polynomials which are evaluated at arbitrary points.

References scale_polynomial::polynomial_genlegendrepoly().

Referenced by scale_file_history_meshfield::file_history_meshfield_put::file_history_meshfield_put2d().

◆ file_common_meshfield_set_cartesbuf_field2d()

subroutine, public scale_file_common_meshfield::file_common_meshfield_set_cartesbuf_field2d ( class(meshrectdom2d), intent(in), target mesh2d,
real(rp), dimension(:,:), intent(in) buf,
class(meshfield2d), intent(inout) field2d )

Definition at line 750 of file scale_file_common_meshfield.F90.

752 implicit none
753 class(MeshRectDom2D), target, intent(in) :: mesh2D
754 real(RP), intent(in) :: buf(:,:)
755 class(MeshField2D), intent(inout) :: field2d
756
757 integer :: n
758 integer :: i0, j0
759 type(LocalMesh2D), pointer :: lcmesh
760 type(ElementBase2D), pointer :: refElem
761 integer :: i0_s, j0_s
762 !----------------------------------------------------
763
764 i0_s = 0; j0_s = 0
765
766 do j0=1, size(mesh2d%rcdomIJ2LCMeshID,2)
767 do i0=1, size(mesh2d%rcdomIJ2LCMeshID,1)
768 n = mesh2d%rcdomIJ2LCMeshID(i0,j0)
769 lcmesh => mesh2d%lcmesh_list(n)
770 refelem => lcmesh%refElem2D
771
772 call file_common_meshfield_set_cartesbuf_field2d_local( &
773 lcmesh, buf(:,:), i0_s, j0_s, &
774 field2d%local(n)%val(:,:) )
775 !$acc update device(field2d%local(n)%val)
776
777 i0_s = i0_s + lcmesh%NeX * refelem%Nfp
778 end do
779 j0_s = j0_s + lcmesh%NeY * refelem%Nfp
780 i0_s = 0
781 end do
782
783 return

References file_common_meshfield_set_cartesbuf_field2d_local().

◆ file_common_meshfield_set_cartesbuf_field2d_local()

subroutine, public scale_file_common_meshfield::file_common_meshfield_set_cartesbuf_field2d_local ( type(localmesh2d), intent(in) lcmesh,
real(rp), dimension(:,:), intent(in) buf,
integer, intent(in) i0_s,
integer, intent(in) j0_s,
real(rp), dimension(lcmesh%refelem2d%np,lcmesh%nea), intent(inout) val )

Definition at line 787 of file scale_file_common_meshfield.F90.

790 implicit none
791 type(LocalMesh2D), intent(in) :: lcmesh
792 real(RP), intent(in) :: buf(:,:)
793 integer, intent(in) :: i0_s, j0_s
794 real(RP), intent(inout) :: val(lcmesh%refElem2D%Np,lcmesh%NeA)
795
796 integer :: kelem1
797 integer :: i1, j1, i2, j2, i, j
798 type(ElementBase2D), pointer :: refElem
799 integer :: indx
800 !----------------------------------------------------
801
802 refelem => lcmesh%refElem2D
803
804 do j1=1, lcmesh%NeY
805 do i1=1, lcmesh%NeX
806 kelem1 = i1 + (j1-1)*lcmesh%NeX
807 do j2=1, refelem%Nfp
808 do i2=1, refelem%Nfp
809 i = i0_s + i2 + (i1-1)*refelem%Nfp
810 j = j0_s + j2 + (j1-1)*refelem%Nfp
811 indx = i2 + (j2-1)*refelem%Nfp
812 val(indx,kelem1) = buf(i,j)
813 end do
814 end do
815 end do
816 end do
817
818 return

Referenced by file_common_meshfield_set_cartesbuf_field2d(), and file_common_meshfield_set_cartesbuf_field2d_cubedsphere().

◆ file_common_meshfield_set_cartesbuf_field2d_cubedsphere()

subroutine, public scale_file_common_meshfield::file_common_meshfield_set_cartesbuf_field2d_cubedsphere ( class(meshcubedspheredom2d), intent(in), target mesh2d,
real(rp), dimension(:,:), intent(in) buf,
class(meshfield2d), intent(inout) field2d )

Definition at line 822 of file scale_file_common_meshfield.F90.

824 implicit none
825 class(MeshCubedSphereDom2D), target, intent(in) :: mesh2D
826 real(RP), intent(in) :: buf(:,:)
827 class(MeshField2D), intent(inout) :: field2d
828
829 integer :: n
830 integer :: i0, j0, p0
831 type(LocalMesh2D), pointer :: lcmesh
832 type(ElementBase2D), pointer :: refElem
833 integer :: i0_s, j0_s, p0_s
834 !----------------------------------------------------
835
836 i0_s = 0; j0_s = 0; p0_s = 0
837
838 do p0=1, size(mesh2d%rcdomIJP2LCMeshID,3)
839 do j0=1, size(mesh2d%rcdomIJP2LCMeshID,2)
840 do i0=1, size(mesh2d%rcdomIJP2LCMeshID,1)
841 n = mesh2d%rcdomIJP2LCMeshID(i0,j0,p0)
842 lcmesh => mesh2d%lcmesh_list(n)
843 refelem => lcmesh%refElem2D
844
845 call file_common_meshfield_set_cartesbuf_field2d_local( &
846 lcmesh, buf(:,:), i0_s, j0_s, &
847 field2d%local(n)%val(:,:) )
848 !$acc update device(field2d%local(n)%val)
849
850 i0_s = i0_s + lcmesh%NeX * refelem%Nfp
851 end do
852 j0_s = j0_s + lcmesh%NeY * refelem%Nfp
853 i0_s = 0
854 end do
855 end do
856
857 return

References file_common_meshfield_set_cartesbuf_field2d_local().

◆ file_common_meshfield_get_dims3d()

subroutine, public scale_file_common_meshfield::file_common_meshfield_get_dims3d ( class(meshcubedom3d), intent(in), target mesh3d,
character(len=h_short), intent(in) dim_name_postfix,
type(file_common_meshfield_diminfo), dimension(meshbase3d_dimtype_num), intent(out) dimsinfo )

Definition at line 863 of file scale_file_common_meshfield.F90.

865 implicit none
866
867 class(MeshCubeDom3D), target, intent(in) :: mesh3D
868 character(len=H_SHORT), intent(in) :: dim_name_postfix
869 type(FILE_common_meshfield_diminfo), intent(out) :: dimsinfo(MESHBASE3D_DIMTYPE_NUM)
870
871 type(LocalMesh3D), pointer :: lcmesh
872 integer :: i, j, k, n
873 integer :: i_size, j_size, k_size
874
875 type(MeshDimInfo), pointer :: dimInfo
876 type(MeshDimInfo), pointer :: dimInfo_x
877 type(MeshDimInfo), pointer :: dimInfo_y
878 type(MeshDimInfo), pointer :: dimInfo_z
879 !-------------------------------------------------
880
881 i_size = 0
882 do i=1, size(mesh3d%rcdomIJK2LCMeshID,1)
883 n = mesh3d%rcdomIJK2LCMeshID(i,1,1)
884 lcmesh => mesh3d%lcmesh_list(n)
885 i_size = i_size + lcmesh%NeX * lcmesh%refElem3D%Nnode_h1D
886 end do
887
888 j_size = 0
889 do j=1, size(mesh3d%rcdomIJK2LCMeshID,2)
890 n = mesh3d%rcdomIJK2LCMeshID(1,j,1)
891 lcmesh => mesh3d%lcmesh_list(n)
892 j_size = j_size + lcmesh%NeY * lcmesh%refElem3D%Nnode_h1D
893 end do
894
895 k_size = 0
896 do k=1, size(mesh3d%rcdomIJK2LCMeshID,3)
897 n = mesh3d%rcdomIJK2LCMeshID(1,1,k)
898 lcmesh => mesh3d%lcmesh_list(n)
899 k_size = k_size + lcmesh%NeZ * lcmesh%refElem3D%Nnode_v
900 end do
901
902 diminfo_x => mesh3d%dimInfo(meshbase3d_dimtypeid_x)
903 call set_dimension( dimsinfo(meshbase3d_dimtypeid_x), &
904 diminfo_x, "X", 1, (/ diminfo_x%name /), (/ i_size /), &
905 dim_name_postfix )
906
907 diminfo_y => mesh3d%dimInfo(meshbase3d_dimtypeid_y)
908 call set_dimension( dimsinfo(meshbase3d_dimtypeid_y), &
909 diminfo_y, "Y", 1, (/ diminfo_y%name /), (/ j_size /), &
910 dim_name_postfix )
911
912 diminfo_z => mesh3d%dimInfo(meshbase3d_dimtypeid_z)
913 call set_dimension( dimsinfo(meshbase3d_dimtypeid_z), &
914 diminfo_z, "Z", 1, (/ diminfo_z%name /), (/ k_size /), &
915 dim_name_postfix, positive_down=(/ diminfo_z%positive_down /) )
916
917 diminfo => mesh3d%dimInfo(meshbase3d_dimtypeid_zt)
918 call set_dimension( dimsinfo(meshbase3d_dimtypeid_zt), &
919 diminfo, "ZT", 1, (/ diminfo_z%name /), (/ k_size /), &
920 dim_name_postfix )
921
922 diminfo => mesh3d%dimInfo(meshbase3d_dimtypeid_xy)
923 call set_dimension( dimsinfo(meshbase3d_dimtypeid_xy), &
924 diminfo, "XY", 2, (/ diminfo_x%name, diminfo_y%name /), &
925 (/ i_size, j_size /), dim_name_postfix )
926
927 diminfo => mesh3d%dimInfo(meshbase3d_dimtypeid_xyt)
928 call set_dimension( dimsinfo(meshbase3d_dimtypeid_xyt), &
929 diminfo, "XY", 2, (/ diminfo_x%name, diminfo_y%name /), &
930 (/ i_size, j_size /), dim_name_postfix )
931
932 diminfo => mesh3d%dimInfo(meshbase3d_dimtypeid_xyz)
933 call set_dimension( dimsinfo(meshbase3d_dimtypeid_xyz), &
934 diminfo, "XYZ", 3, (/ diminfo_x%name, diminfo_y%name, diminfo_z%name /), &
935 (/ i_size, j_size, k_size /), dim_name_postfix )
936
937 diminfo => mesh3d%dimInfo(meshbase3d_dimtypeid_xyzt)
938 call set_dimension( dimsinfo(meshbase3d_dimtypeid_xyzt), &
939 diminfo, "XYZT", 3, (/ diminfo_x%name, diminfo_y%name, diminfo_z%name /), &
940 (/ i_size, j_size, k_size /), dim_name_postfix )
941
942 return

Referenced by scale_file_history_meshfield::file_history_meshfield_in::file_history_meshfield_in3d().

◆ file_common_meshfield_get_axis3d()

subroutine, public scale_file_common_meshfield::file_common_meshfield_get_axis3d ( class(meshcubedom3d), intent(in), target mesh3d,
type(file_common_meshfield_diminfo), dimension(meshbase3d_dimtype_num), intent(in) dimsinfo,
real(rp), dimension(dimsinfo(meshbase3d_dimtypeid_x)%size), intent(out) x,
real(rp), dimension(dimsinfo(meshbase3d_dimtypeid_y)%size), intent(out) y,
real(rp), dimension(dimsinfo(meshbase3d_dimtypeid_z)%size), intent(out) z,
logical, intent(in), optional force_uniform_grid )

Definition at line 1036 of file scale_file_common_meshfield.F90.

1038 implicit none
1039
1040 class(MeshCubeDom3D), target, intent(in) :: mesh3D
1041 type(FILE_common_meshfield_diminfo), intent(in) :: dimsinfo(MESHBASE3D_DIMTYPE_NUM)
1042 real(RP), intent(out) :: x(dimsinfo(MeshBase3D_DIMTYPEID_X)%size)
1043 real(RP), intent(out) :: y(dimsinfo(MeshBase3D_DIMTYPEID_Y)%size)
1044 real(RP), intent(out) :: z(dimsinfo(MeshBase3D_DIMTYPEID_Z)%size)
1045 logical, intent(in), optional :: force_uniform_grid
1046
1047 integer :: n, kelem
1048 integer :: i, j, k
1049 type(ElementBase3D), pointer :: refElem
1050 type(LocalMesh3D), pointer :: lcmesh
1051
1052 integer :: is, js, ks, ie, je, ke, igs, jgs, kgs
1053 integer :: Nnode_h1D, Nnode_v
1054
1055 logical :: uniform_grid = .false.
1056 real(RP), allocatable :: x_local(:)
1057 real(RP), allocatable :: y_local(:)
1058 real(RP), allocatable :: z_local(:)
1059 !------------------------------------------------------------------------------------------
1060
1061 if ( present(force_uniform_grid) ) uniform_grid = force_uniform_grid
1062
1063 igs = 0; jgs = 0; kgs = 0
1064
1065 do n=1 ,mesh3d%LOCAL_MESH_NUM
1066 lcmesh => mesh3d%lcmesh_list(n)
1067 refelem => lcmesh%refElem3D
1068 nnode_h1d = refelem%Nnode_h1D
1069 nnode_v = refelem%Nnode_v
1070
1071 allocate( x_local(nnode_h1d), y_local(nnode_h1d) )
1072 allocate( z_local(nnode_v) )
1073
1074 do k=1, lcmesh%NeZ
1075 do j=1, lcmesh%NeY
1076 do i=1, lcmesh%NeX
1077 kelem = i + (j-1)*lcmesh%NeX + (k-1)*lcmesh%NeX*lcmesh%NeY
1078 if ( j==1 .and. k==1) then
1079 x_local(:) = lcmesh%pos_en(refelem%Fmask_h(1:nnode_h1d,1),kelem,1)
1080 if ( uniform_grid ) call get_uniform_grid1d( x_local, nnode_h1d )
1081
1082 is = igs + 1 + (i-1)*nnode_h1d
1083 ie = is + nnode_h1d - 1
1084 x(is:ie) = x_local(:)
1085 end if
1086 if ( i==1 .and. k==1) then
1087 y_local(:) = lcmesh%pos_en(refelem%Fmask_h(1:nnode_h1d,4),kelem,2)
1088 if ( uniform_grid ) call get_uniform_grid1d( y_local, nnode_h1d )
1089
1090 js = jgs + 1 + (j-1)*nnode_h1d
1091 je = js + nnode_h1d - 1
1092 y(js:je) = y_local(:)
1093 end if
1094 if ( i==1 .and. j==1) then
1095 z_local(:) = lcmesh%pos_en(refelem%Colmask(:,1),kelem,3)
1096 if ( uniform_grid ) call get_uniform_grid1d( z_local, nnode_v )
1097
1098 ks = kgs + 1 + (k-1)*nnode_v
1099 ke = ks + nnode_v - 1
1100 z(ks:ke) = z_local(:)
1101 end if
1102 end do
1103 end do
1104 end do
1105
1106 igs = ie; jgs = je; kgs = ke
1107 deallocate( x_local, y_local )
1108 deallocate( z_local )
1109 end do
1110
1111 return

Referenced by scale_file_history_meshfield::file_history_meshfield_in::file_history_meshfield_in3d().

◆ file_common_meshfield_put_field3d_cartesbuf()

subroutine, public scale_file_common_meshfield::file_common_meshfield_put_field3d_cartesbuf ( class(meshcubedom3d), intent(in), target mesh3d,
class(meshfield3d), intent(in) field3d,
real(rp), dimension(:,:,:), intent(inout) buf,
logical, intent(in), optional force_uniform_grid )

Definition at line 1191 of file scale_file_common_meshfield.F90.

1193 use scale_polynomial, only: &
1195 implicit none
1196 class(MeshCubeDom3D), target, intent(in) :: mesh3D
1197 class(MeshField3D), intent(in) :: field3d
1198 real(RP), intent(inout) :: buf(:,:,:)
1199 logical, intent(in), optional :: force_uniform_grid
1200
1201 integer :: n, kelem1
1202 integer :: i0, j0, k0, i1, j1, k1, i2, j2, k2, i, j, k
1203 type(LocalMesh3D), pointer :: lcmesh
1204 type(ElementBase3D), pointer :: refElem
1205 integer :: i0_s, j0_s, k0_s, indx
1206
1207 logical :: uniform_grid = .false.
1208 integer :: Nnode_h1D, Nnode_v
1209 real(RP), allocatable :: x_local(:)
1210 real(RP) :: x_local0, delx
1211 real(RP), allocatable :: y_local(:)
1212 real(RP) :: y_local0, dely
1213 real(RP), allocatable :: z_local(:)
1214 real(RP) :: z_local0, delz
1215 real(RP) :: ox(1), oy(1), oz(1)
1216 real(RP), allocatable :: spectral_coef(:)
1217 real(RP), allocatable :: P1D_ori_x(:,:)
1218 real(RP), allocatable :: P1D_ori_y(:,:)
1219 real(RP), allocatable :: P1D_ori_z(:,:)
1220 integer :: l, p1, p2, p3
1221 !----------------------------------------------------
1222
1223 if ( present(force_uniform_grid) ) uniform_grid = force_uniform_grid
1224
1225 i0_s = 0; j0_s = 0; k0_s = 0
1226
1227 do k0=1, size(mesh3d%rcdomIJK2LCMeshID,3)
1228 do j0=1, size(mesh3d%rcdomIJK2LCMeshID,2)
1229 do i0=1, size(mesh3d%rcdomIJK2LCMeshID,1)
1230 n = mesh3d%rcdomIJK2LCMeshID(i0,j0,k0)
1231
1232 lcmesh => mesh3d%lcmesh_list(n)
1233 refelem => lcmesh%refElem3D
1234 nnode_h1d = refelem%Nnode_h1D
1235 nnode_v = refelem%Nnode_v
1236
1237 if ( uniform_grid ) then
1238 allocate( x_local(nnode_h1d), y_local(nnode_h1d) )
1239 allocate( z_local(nnode_v) )
1240 allocate( spectral_coef(refelem%Np) )
1241 allocate( p1d_ori_x(1,nnode_h1d), p1d_ori_y(1,nnode_h1d) )
1242 allocate( p1d_ori_z(1,nnode_v) )
1243 end if
1244
1245 !$omp parallel do collapse(2) private( kelem1, &
1246 !$omp i, i1, i2, j, j2, k, k2, indx, &
1247 !$omp x_local, x_local0, y_local, y_local0, z_local, z_local0, &
1248 !$omp delx, dely, delz, ox, oy, oz, &
1249 !$omp spectral_coef, P1D_ori_x, P1D_ori_y, P1D_ori_z, &
1250 !$omp p1, p2, p3, l )
1251 do k1=1, lcmesh%NeZ
1252 do j1=1, lcmesh%NeY
1253 do i1=1, lcmesh%NeX
1254 kelem1 = i1 + (j1-1)*lcmesh%NeX + (k1-1)*lcmesh%NeX*lcmesh%NeY
1255
1256 if ( uniform_grid ) then
1257 x_local(:) = lcmesh%pos_en(refelem%Fmask_h(1:nnode_h1d,1),kelem1,1)
1258 x_local0 = x_local(1); delx = x_local(nnode_h1d) - x_local0
1259 y_local(:) = lcmesh%pos_en(refelem%Fmask_h(1:nnode_h1d,4),kelem1,2)
1260 y_local0 = y_local(1); dely = y_local(nnode_h1d) - y_local0
1261 z_local(:) = lcmesh%pos_en(refelem%Colmask(:,1),kelem1,3)
1262 z_local0 = z_local(1); delz = z_local(nnode_v ) - z_local0
1263 call get_uniform_grid1d( x_local, nnode_h1d )
1264 call get_uniform_grid1d( y_local, nnode_h1d )
1265 call get_uniform_grid1d( z_local, nnode_v )
1266
1267 spectral_coef(:) = matmul(refelem%invV(:,:), field3d%local(n)%val(:,kelem1))
1268 do k2=1, nnode_v
1269 do j2=1, nnode_h1d
1270 do i2=1, nnode_h1d
1271 ox(1) = - 1.0_rp + 2.0_rp * (x_local(i2) - x_local0) / delx
1272 oy(1) = - 1.0_rp + 2.0_rp * (y_local(j2) - y_local0) / dely
1273 oz(1) = - 1.0_rp + 2.0_rp * (z_local(k2) - z_local0) / delz
1274
1275 call polynomial_genlegendrepoly_sub( refelem%PolyOrder_h, ox, p1d_ori_x )
1276 call polynomial_genlegendrepoly_sub( refelem%PolyOrder_h, oy, p1d_ori_y )
1277 call polynomial_genlegendrepoly_sub( refelem%PolyOrder_v, oz, p1d_ori_z )
1278
1279 i = i0_s + i2 + (i1-1)*nnode_h1d
1280 j = j0_s + j2 + (j1-1)*nnode_h1d
1281 k = k0_s + k2 + (k1-1)*nnode_v
1282 buf(i,j,k) = 0.0_rp
1283 do p3=1, nnode_v
1284 do p2=1, nnode_h1d
1285 do p1=1, nnode_h1d
1286 l = p1 + (p2-1)*nnode_h1d + (p3-1)*nnode_h1d**2
1287 buf(i,j,k) = buf(i,j,k) + &
1288 ( p1d_ori_x(1,p1) * p1d_ori_y(1,p2) * p1d_ori_z(1,p3) ) &
1289 * sqrt((dble(p1-1) + 0.5_rp)*(dble(p2-1) + 0.5_rp)*(dble(p3-1) + 0.5_rp)) &
1290 * spectral_coef(l)
1291 end do
1292 end do
1293 end do
1294 end do
1295 end do
1296 end do
1297 else
1298 do k2=1, nnode_v
1299 do j2=1, nnode_h1d
1300 do i2=1, nnode_h1d
1301 i = i0_s + i2 + (i1-1)*nnode_h1d
1302 j = j0_s + j2 + (j1-1)*nnode_h1d
1303 k = k0_s + k2 + (k1-1)*nnode_v
1304 indx = i2 + (j2-1)*nnode_h1d + (k2-1)*nnode_h1d**2
1305 buf(i,j,k) = field3d%local(n)%val(indx,kelem1)
1306 end do
1307 end do
1308 end do
1309 end if
1310 end do
1311 end do
1312 end do
1313
1314 if ( uniform_grid ) then
1315 deallocate( x_local, y_local )
1316 deallocate( z_local )
1317 deallocate( spectral_coef )
1318 end if
1319
1320 i0_s = i0_s + lcmesh%NeX * refelem%Nnode_h1D
1321 end do
1322 j0_s = j0_s + lcmesh%NeY * refelem%Nnode_h1D
1323 i0_s = 0
1324 end do
1325 k0_s = k0_s + lcmesh%NeZ * refelem%Nnode_v
1326 j0_s = 0
1327 end do
1328
1329 return

References scale_polynomial::polynomial_genlegendrepoly_sub().

Referenced by scale_file_history_meshfield::file_history_meshfield_put::file_history_meshfield_put3d().

◆ file_common_meshfield_put_field3d_cubedsphere_cartesbuf()

subroutine, public scale_file_common_meshfield::file_common_meshfield_put_field3d_cubedsphere_cartesbuf ( class(meshcubedspheredom3d), intent(in), target mesh3d,
class(meshfield3d), intent(in) field3d,
real(rp), dimension(:,:,:), intent(inout) buf )

Definition at line 1333 of file scale_file_common_meshfield.F90.

1335 implicit none
1336 class(MeshCubedSphereDom3D), target, intent(in) :: mesh3D
1337 class(MeshField3D), intent(in) :: field3d
1338 real(RP), intent(inout) :: buf(:,:,:)
1339
1340 integer :: kelem1
1341 integer :: n, i0, j0, k0, p0
1342 integer :: i1, j1, k1, i2, j2, k2, i, j, k
1343 type(LocalMesh3D), pointer :: lcmesh
1344 type(ElementBase3D), pointer :: refElem
1345 integer :: i0_s, j0_s, k0_s
1346 integer :: Nnode_h1D
1347 integer :: Nnode_v
1348 !------------------------------------------------
1349
1350 i0_s = 0; j0_s = 0; k0_s = 0
1351
1352 do p0=1, size(mesh3d%rcdomIJKP2LCMeshID,4)
1353 do k0=1, size(mesh3d%rcdomIJKP2LCMeshID,3)
1354 do j0=1, size(mesh3d%rcdomIJKP2LCMeshID,2)
1355 do i0=1, size(mesh3d%rcdomIJKP2LCMeshID,1)
1356 n = mesh3d%rcdomIJKP2LCMeshID(i0,j0,k0,p0)
1357
1358 lcmesh => mesh3d%lcmesh_list(n)
1359 refelem => lcmesh%refElem3D
1360 nnode_h1d = refelem%Nnode_h1D
1361 nnode_v = refelem%Nnode_v
1362
1363 do k1=1, lcmesh%NeZ
1364 do j1=1, lcmesh%NeY
1365 do i1=1, lcmesh%NeX
1366 kelem1 = i1 + (j1-1)*lcmesh%NeX + (k1-1)*lcmesh%NeX*lcmesh%NeY
1367
1368 do k2=1, nnode_v
1369 do j2=1, nnode_h1d
1370 do i2=1, nnode_h1d
1371 i = i0_s + i2 + (i1-1)*nnode_h1d
1372 j = j0_s + j2 + (j1-1)*nnode_h1d
1373 k = k0_s + k2 + (k1-1)*nnode_v
1374 buf(i,j,k) = field3d%local(n)%val(i2+(j2-1)*nnode_h1d+(k2-1)*nnode_h1d**2,kelem1)
1375 end do
1376 end do
1377 end do
1378 end do
1379 end do
1380 end do
1381
1382 i0_s = i0_s + lcmesh%NeX * refelem%Nnode_h1D
1383 end do
1384 j0_s = j0_s + lcmesh%NeY * refelem%Nnode_h1D
1385 i0_s = 0
1386 end do
1387 k0_s = k0_s + lcmesh%NeZ * refelem%Nnode_v
1388 j0_s = 0
1389 end do
1390 end do
1391
1392 return

Referenced by scale_file_history_meshfield::file_history_meshfield_put::file_history_meshfield_put3d().

◆ file_common_meshfield_set_cartesbuf_field3d()

subroutine, public scale_file_common_meshfield::file_common_meshfield_set_cartesbuf_field3d ( class(meshcubedom3d), intent(in), target mesh3d,
real(rp), dimension(:,:,:), intent(in) buf,
class(meshfield3d), intent(inout) field3d )

Definition at line 1395 of file scale_file_common_meshfield.F90.

1397 implicit none
1398 class(MeshCubeDom3D), target, intent(in) :: mesh3D
1399 real(RP), intent(in) :: buf(:,:,:)
1400 class(MeshField3D), intent(inout) :: field3d
1401
1402 integer :: n
1403 integer :: i0, j0, k0
1404 type(LocalMesh3D), pointer :: lcmesh
1405 type(ElementBase3D), pointer :: refElem
1406 integer :: i0_s, j0_s, k0_s
1407 !----------------------------------------------------
1408
1409 i0_s = 0; j0_s = 0; k0_s = 0
1410
1411 do k0=1, size(mesh3d%rcdomIJK2LCMeshID,3)
1412 do j0=1, size(mesh3d%rcdomIJK2LCMeshID,2)
1413 do i0=1, size(mesh3d%rcdomIJK2LCMeshID,1)
1414 n = mesh3d%rcdomIJK2LCMeshID(i0,j0,k0)
1415 lcmesh => mesh3d%lcmesh_list(n)
1416 refelem => lcmesh%refElem3D
1417
1418 call file_common_meshfield_set_cartesbuf_field3d_local( &
1419 lcmesh, buf(:,:,:), i0_s, j0_s, k0_s, &
1420 field3d%local(n)%val(:,:) )
1421 !$acc update device(field3d%local(n)%val)
1422
1423 i0_s = i0_s + lcmesh%NeX * refelem%Nnode_h1D
1424 end do
1425 j0_s = j0_s + lcmesh%NeY * refelem%Nnode_h1D
1426 i0_s = 0
1427 end do
1428 k0_s = k0_s + lcmesh%NeZ * refelem%Nnode_v
1429 j0_s = 0
1430 end do
1431
1432 return

References file_common_meshfield_set_cartesbuf_field3d_local().

◆ file_common_meshfield_set_cartesbuf_field3d_cubedsphere()

subroutine, public scale_file_common_meshfield::file_common_meshfield_set_cartesbuf_field3d_cubedsphere ( class(meshcubedspheredom3d), intent(in), target mesh3d,
real(rp), dimension(:,:,:), intent(in) buf,
class(meshfield3d), intent(inout) field3d )

Definition at line 1436 of file scale_file_common_meshfield.F90.

1438 implicit none
1439 class(MeshCubedSphereDom3D), target, intent(in) :: mesh3D
1440 real(RP), intent(in) :: buf(:,:,:)
1441 class(MeshField3D), intent(inout) :: field3d
1442
1443 integer :: n
1444 integer :: i0, j0, k0, p0
1445 type(LocalMesh3D), pointer :: lcmesh
1446 type(ElementBase3D), pointer :: refElem
1447 integer :: i0_s, j0_s, k0_s, p0_s
1448 !----------------------------------------------------
1449
1450 i0_s = 0; j0_s = 0; k0_s = 0; p0_s = 0
1451
1452 do p0=1, size(mesh3d%rcdomIJKP2LCMeshID,4)
1453 do k0=1, size(mesh3d%rcdomIJKP2LCMeshID,3)
1454 do j0=1, size(mesh3d%rcdomIJKP2LCMeshID,2)
1455 do i0=1, size(mesh3d%rcdomIJKP2LCMeshID,1)
1456 n = mesh3d%rcdomIJKP2LCMeshID(i0,j0,k0,p0)
1457 lcmesh => mesh3d%lcmesh_list(n)
1458 refelem => lcmesh%refElem3D
1459
1460 call file_common_meshfield_set_cartesbuf_field3d_local( &
1461 lcmesh, buf(:,:,:), i0_s, j0_s, k0_s, &
1462 field3d%local(n)%val(:,:) )
1463 !$acc update device(field3d%local(n)%val)
1464
1465 i0_s = i0_s + lcmesh%NeX * refelem%Nnode_h1D
1466 end do
1467 j0_s = j0_s + lcmesh%NeY * refelem%Nnode_h1D
1468 i0_s = 0
1469 end do
1470 k0_s = k0_s + lcmesh%NeZ * refelem%Nnode_v
1471 j0_s = 0
1472 end do
1473 end do
1474
1475 return

References file_common_meshfield_set_cartesbuf_field3d_local().

◆ file_common_meshfield_set_cartesbuf_field3d_local()

subroutine, public scale_file_common_meshfield::file_common_meshfield_set_cartesbuf_field3d_local ( type(localmesh3d), intent(in) lcmesh,
real(rp), dimension(:,:,:), intent(in) buf,
integer, intent(in) i0_s,
integer, intent(in) j0_s,
integer, intent(in) k0_s,
real(rp), dimension(lcmesh%refelem3d%np,lcmesh%nea), intent(inout) val )

Definition at line 1479 of file scale_file_common_meshfield.F90.

1482 implicit none
1483 type(LocalMesh3D), intent(in) :: lcmesh
1484 real(RP), intent(in) :: buf(:,:,:)
1485 integer, intent(in) :: i0_s, j0_s, k0_s
1486 real(RP), intent(inout) :: val(lcmesh%refElem3D%Np,lcmesh%NeA)
1487
1488 integer :: kelem1
1489 integer :: i1, j1, k1, i2, j2, k2, i, j, k
1490 type(ElementBase3D), pointer :: refElem
1491 integer :: indx
1492 !----------------------------------------------------
1493
1494 refelem => lcmesh%refElem3D
1495
1496 !$omp parallel do collapse(3) private( &
1497 !$omp kelem1, k2,j2,i2, i,j,k, indx )
1498 do k1=1, lcmesh%NeZ
1499 do j1=1, lcmesh%NeY
1500 do i1=1, lcmesh%NeX
1501 kelem1 = i1 + (j1-1)*lcmesh%NeX + (k1-1)*lcmesh%NeX*lcmesh%NeY
1502 do k2=1, refelem%Nnode_v
1503 do j2=1, refelem%Nnode_h1D
1504 do i2=1, refelem%Nnode_h1D
1505 i = i0_s + i2 + (i1-1)*refelem%Nnode_h1D
1506 j = j0_s + j2 + (j1-1)*refelem%Nnode_h1D
1507 k = k0_s + k2 + (k1-1)*refelem%Nnode_v
1508 indx = i2 + (j2-1)*refelem%Nnode_h1D + (k2-1)*refelem%Nnode_h1D**2
1509 val(indx,kelem1) = buf(i,j,k)
1510 end do
1511 end do
1512 end do
1513 end do
1514 end do
1515 end do
1516
1517 return

Referenced by file_common_meshfield_set_cartesbuf_field3d(), and file_common_meshfield_set_cartesbuf_field3d_cubedsphere().

◆ file_common_meshfield_get_dtype()

integer function, public scale_file_common_meshfield::file_common_meshfield_get_dtype ( character(*), intent(in) datatype)

Definition at line 1520 of file scale_file_common_meshfield.F90.

1521 use scale_file_h, only: &
1522 file_real8, file_real4
1523 use scale_prc, &
1524 only: prc_abort
1525
1526 implicit none
1527
1528 character(*), intent(in) :: datatype
1529 integer :: dtype
1530 !--------------------------
1531
1532 ! dtype is used to define the data type of axis variables in file
1533 if ( datatype == 'REAL8' ) then
1534 dtype = file_real8
1535 elseif( datatype == 'REAL4' ) then
1536 dtype = file_real4
1537 else
1538 if ( rp == 8 ) then
1539 dtype = file_real8
1540 elseif( rp == 4 ) then
1541 dtype = file_real4
1542 else
1543 log_error("file_restart_meshfield_get_dtype",*) 'unsupported data type. Check!', trim(datatype)
1544 call prc_abort
1545 endif
1546 endif
1547
1548 return