10#include "scaleFElib.h"
59 module procedure file_common_meshfield_get_dims2d_cubedsphere
61 module procedure file_common_meshfield_get_dims3d_cubedsphere
72 module procedure file_common_meshfield_get_axis2d_cubedsphere
74 module procedure file_common_meshfield_get_axis3d_cubedsphere
95 character(len=H_SHORT) :: type
97 character(len=H_SHORT) :: dims(3)
98 character(len=H_SHORT) :: name
99 character(len=H_MID) :: desc
100 character(len=H_SHORT) :: unit
103 logical :: positive_down(3)
120 private :: get_uniform_grid1d
121 private :: set_dimension
131 class(
meshbase1d),
target,
intent(in) :: mesh1D
139 i_size = mesh1d%NeG * mesh1d%refElem1D%Np
143 diminfo_x,
"X", 1, (/ diminfo_x%name /), (/ i_size /) )
147 diminfo,
"XT", 1, (/ diminfo_x%name /), (/ i_size /) )
157 class(
meshbase1d),
target,
intent(in) :: mesh1D
159 real(RP),
intent(out) :: x(dimsinfo(MeshBase1D_DIMTYPEID_X)%size)
160 logical,
intent(in),
optional :: force_uniform_grid
168 logical :: uniform_grid = .false.
169 real(RP),
allocatable :: x_local(:)
172 if (
present(force_uniform_grid) ) uniform_grid = force_uniform_grid
174 do n=1,mesh1d%LOCAL_MESH_NUM
175 lcmesh => mesh1d%lcmesh_list(n)
176 refelem => lcmesh%refElem1D
178 allocate( x_local(refelem%Np) )
181 x_local(:) = lcmesh%pos_en(:,i,1)
182 if ( uniform_grid )
call get_uniform_grid1d( x_local, refelem%Nfp )
184 is = 1 + (i-1)*refelem%Np + (n-1)*refelem%Np*lcmesh%Ne
185 ie = is + refelem%Np -1
186 x(is:ie) = x_local(:)
189 deallocate( x_local )
197 buf, force_uniform_grid )
201 class(
meshbase1d),
target,
intent(in) :: mesh1d
203 real(rp),
intent(inout) :: buf(:)
204 logical,
intent(in),
optional :: force_uniform_grid
206 integer :: n, kelem1, p
212 logical :: uniform_grid = .false.
214 real(rp),
allocatable :: x_local(:)
215 real(rp) :: x_local0, delx
217 real(rp),
allocatable :: spectral_coef(:)
218 real(rp),
allocatable :: p1d_ori_x(:,:)
221 if (
present(force_uniform_grid) ) uniform_grid = force_uniform_grid
224 do n=1, mesh1d%LOCAL_MESH_NUM
225 lcmesh => mesh1d%lcmesh_list(n)
226 refelem => lcmesh%refElem1D
229 if ( uniform_grid )
then
230 allocate( x_local(np) )
231 allocate( spectral_coef(np) )
232 allocate( p1d_ori_x(1,np) )
235 do kelem1=lcmesh%NeS, lcmesh%NeE
236 if ( uniform_grid )
then
237 x_local(:) = lcmesh%pos_en(:,kelem1,1)
238 x_local0 = x_local(1); delx = x_local(np) - x_local0
239 call get_uniform_grid1d( x_local, np )
241 spectral_coef(:) = matmul(refelem%invV(:,:), field1d%local(n)%val(:,kelem1))
243 ox = - 1.0_rp + 2.0_rp * (x_local(i2) - x_local0) / delx
246 i = i0_s + i2 + (kelem1-1)*np
250 p1d_ori_x(1,p) * sqrt( dble(p-1) + 0.5_rp ) * spectral_coef(p)
255 i = i0_s + i2 + (kelem1-1)*np
256 buf(i) = field1d%local(n)%val(i2,kelem1)
261 i0_s = i0_s + lcmesh%Ne * refelem%Np
262 if ( uniform_grid )
then
263 deallocate( x_local )
264 deallocate( spectral_coef )
265 deallocate( p1d_ori_x )
276 class(
meshbase1d),
target,
intent(in) :: mesh1d
277 real(rp),
intent(in) :: buf(:)
289 do i0=1, mesh1d%LOCAL_MESH_NUM
291 lcmesh => mesh1d%lcmesh_list(n)
292 refelem => lcmesh%refElem1D
295 lcmesh, buf(:), i0_s, &
296 field1d%local(n)%val(:,:) )
298 i0_s = i0_s + lcmesh%Ne * refelem%Np
310 real(rp),
intent(in) :: buf(:)
311 integer,
intent(in) :: i0_s
312 real(rp),
intent(inout) :: val(lcmesh%refelem1d%np,lcmesh%nea)
320 refelem => lcmesh%refElem1D
325 i = i0_s + i2 + (i1-1)*refelem%Np
327 val(indx,kelem1) = buf(i)
346 integer :: i_size, j_size
353 do i=1,
size(mesh2d%rcdomIJ2LCMeshID,1)
354 n = mesh2d%rcdomIJ2LCMeshID(i,1)
355 lcmesh => mesh2d%lcmesh_list(n)
356 i_size =i_size + lcmesh%NeX * lcmesh%refElem2D%Nfp
360 do j=1,
size(mesh2d%rcdomIJ2LCMeshID,2)
361 n = mesh2d%rcdomIJ2LCMeshID(1,j)
362 lcmesh => mesh2d%lcmesh_list(n)
363 j_size = j_size + lcmesh%NeY * lcmesh%refElem2D%Nfp
368 diminfo_x,
"X", 1, (/ diminfo_x%name /), (/ i_size /) )
372 diminfo_y,
"Y", 1, (/ diminfo_y%name /), (/ j_size /) )
376 diminfo,
"XY", 2, (/ diminfo_x%name, diminfo_y%name /), &
377 (/ i_size, j_size /) )
381 diminfo,
"XYT", 2, (/ diminfo_x%name, diminfo_y%name /), &
382 (/ i_size, j_size /) )
388 subroutine file_common_meshfield_get_dims2d_cubedsphere( mesh2D, dimsinfo )
397 integer :: i_size, j_size
405 do i=1,
size(mesh2d%rcdomIJP2LCMeshID,1)
406 n = mesh2d%rcdomIJP2LCMeshID(i,1,1)
407 lcmesh => mesh2d%lcmesh_list(n)
408 i_size =i_size + lcmesh%NeX * lcmesh%refElem2D%Nfp
412 do j=1,
size(mesh2d%rcdomIJP2LCMeshID,2)
413 n = mesh2d%rcdomIJP2LCMeshID(1,j,1)
414 lcmesh => mesh2d%lcmesh_list(n)
415 j_size = j_size + lcmesh%NeY * lcmesh%refElem2D%Nfp
418 j_size = j_size *
size(mesh2d%rcdomIJP2LCMeshID,3)
422 diminfo_x,
"X", 1, (/ diminfo_x%name /), (/ i_size /) )
426 diminfo_y,
"Y", 1, (/ diminfo_y%name /), (/ j_size /) )
430 diminfo,
"XY", 2, (/ diminfo_x%name, diminfo_y%name /), &
431 (/ i_size, j_size /) )
435 diminfo,
"XYT", 2, (/ diminfo_x%name, diminfo_y%name /), &
436 (/ i_size, j_size /) )
388 subroutine file_common_meshfield_get_dims2d_cubedsphere( mesh2D, dimsinfo )
…
439 end subroutine file_common_meshfield_get_dims2d_cubedsphere
448 real(RP),
intent(out) :: x(dimsinfo(MeshBase2D_DIMTYPEID_X)%size)
449 real(RP),
intent(out) :: y(dimsinfo(MeshBase2D_DIMTYPEID_Y)%size)
450 logical,
intent(in),
optional :: force_uniform_grid
459 integer :: is, js, ie, je, igs, jgs
461 logical :: uniform_grid = .false.
462 real(RP),
allocatable :: x_local(:)
463 real(RP),
allocatable :: y_local(:)
466 if (
present(force_uniform_grid) ) uniform_grid = force_uniform_grid
469 do nj=1,
size(mesh2d%rcdomIJ2LCMeshID,2)
470 do ni=1,
size(mesh2d%rcdomIJ2LCMeshID,1)
471 n = mesh2d%rcdomIJ2LCMeshID(ni,nj)
472 lcmesh => mesh2d%lcmesh_list(n)
473 refelem => lcmesh%refElem2D
475 allocate( x_local(refelem%Nfp), y_local(refelem%Nfp) )
479 k = i + (j-1) * lcmesh%NeX
480 if ( j==1 .and. nj == 1 )
then
481 x_local(:) = lcmesh%pos_en(refelem%Fmask(:,1),k,1)
482 if ( uniform_grid )
call get_uniform_grid1d( x_local, refelem%Nfp )
484 is = igs + 1 + (i-1)*refelem%Nfp
485 ie = is + refelem%Nfp - 1
486 x(is:ie) = x_local(:)
488 if ( i==1 .and. ni == 1 )
then
489 y_local(:) = lcmesh%pos_en(refelem%Fmask(:,4),k,2)
490 if ( uniform_grid )
call get_uniform_grid1d( y_local, refelem%Nfp )
492 js = jgs + 1 + (j-1)*refelem%Nfp
493 je = js + refelem%Nfp - 1
494 y(js:je) = y_local(:)
500 deallocate( x_local, y_local )
508 subroutine file_common_meshfield_get_axis2d_cubedsphere( mesh2D, dimsinfo, x, y )
509 use scale_const,
only: &
515 real(RP),
intent(out) :: x(dimsinfo(MeshBase2D_DIMTYPEID_X)%size)
516 real(RP),
intent(out) :: y(dimsinfo(MeshBase2D_DIMTYPEID_Y)%size)
518 integer :: ni, nj, np, n
524 integer :: is, js, ie, je, igs, jgs
526 logical :: uniform_grid = .false.
527 real(RP),
allocatable :: x_local(:)
528 real(RP),
allocatable :: y_local(:)
533 do np=1,
size(mesh2d%rcdomIJP2LCMeshID,3)
534 do nj=1,
size(mesh2d%rcdomIJP2LCMeshID,2)
535 do ni=1,
size(mesh2d%rcdomIJP2LCMeshID,1)
536 n = mesh2d%rcdomIJP2LCMeshID(ni,nj,np)
537 lcmesh => mesh2d%lcmesh_list(n)
538 refelem => lcmesh%refElem2D
540 allocate( x_local(refelem%Nfp), y_local(refelem%Nfp) )
544 k = i + (j-1) * lcmesh%NeX
545 if ( j==1 .and. nj == 1 .and. np == 1)
then
546 x_local(:) = lcmesh%pos_en(refelem%Fmask(:,1),k,1)
548 is = igs + 1 + (i-1)*refelem%Nfp
549 ie = is + refelem%Nfp - 1
550 x(is:ie) = x_local(:)
552 if ( i==1 .and. ni == 1 )
then
553 y_local(:) = lcmesh%pos_en(refelem%Fmask(:,4),k,2) &
554 + ( lcmesh%panelID - 1.0_rp ) * 0.5_rp * pi
556 js = jgs + 1 + (j-1)*refelem%Nfp
557 je = js + refelem%Nfp - 1
558 y(js:je) = y_local(:)
564 deallocate( x_local, y_local )
508 subroutine file_common_meshfield_get_axis2d_cubedsphere( mesh2D, dimsinfo, x, y )
…
570 end subroutine file_common_meshfield_get_axis2d_cubedsphere
574 buf, force_uniform_grid )
580 real(rp),
intent(inout) :: buf(:,:)
581 logical,
intent(in),
optional :: force_uniform_grid
584 integer :: i0, j0, i1, j1, i2, j2, i, j
587 integer :: i0_s, j0_s
589 logical :: uniform_grid = .false.
591 real(rp),
allocatable :: x_local(:)
592 real(rp) :: x_local0, delx
593 real(rp),
allocatable :: y_local(:)
594 real(rp) :: y_local0, dely
595 real(rp) :: ox(1), oy(1)
596 real(rp),
allocatable :: spectral_coef(:)
597 real(rp),
allocatable :: p1d_ori_x(:,:)
598 real(rp),
allocatable :: p1d_ori_y(:,:)
602 if (
present(force_uniform_grid) ) uniform_grid = force_uniform_grid
606 do j0=1,
size(mesh2d%rcdomIJ2LCMeshID,2)
607 do i0=1,
size(mesh2d%rcdomIJ2LCMeshID,1)
608 n = mesh2d%rcdomIJ2LCMeshID(i0,j0)
610 lcmesh => mesh2d%lcmesh_list(n)
611 refelem => lcmesh%refElem2D
614 if ( uniform_grid )
then
615 allocate( x_local(nfp), y_local(nfp) )
616 allocate( spectral_coef(refelem%Np) )
617 allocate( p1d_ori_x(1,nfp), p1d_ori_y(1,nfp) )
622 kelem1 = i1 + (j1-1)*lcmesh%NeX
624 if ( uniform_grid )
then
625 x_local(:) = lcmesh%pos_en(refelem%Fmask(1:nfp,1),kelem1,1)
626 x_local0 = x_local(1); delx = x_local(nfp) - x_local0
627 y_local(:) = lcmesh%pos_en(refelem%Fmask(1:nfp,4),kelem1,2)
628 y_local0 = y_local(1); dely = y_local(nfp) - y_local0
629 call get_uniform_grid1d( x_local, nfp )
630 call get_uniform_grid1d( y_local, nfp )
632 spectral_coef(:) = matmul(refelem%invV(:,:), field2d%local(n)%val(:,kelem1))
635 ox(1) = - 1.0_rp + 2.0_rp * (x_local(i2) - x_local0) / delx
636 oy(1) = - 1.0_rp + 2.0_rp * (y_local(j2) - y_local0) / dely
641 i = i0_s + i2 + (i1-1)*nfp
642 j = j0_s + j2 + (j1-1)*nfp
647 buf(i,j) = buf(i,j) + &
648 ( p1d_ori_x(1,p1) * p1d_ori_y(1,p2) ) &
649 * sqrt((dble(p1-1) + 0.5_rp)*(dble(p2-1) + 0.5_rp)) &
660 i = i0_s + i2 + (i1-1)*nfp
661 j = j0_s + j2 + (j1-1)*nfp
662 buf(i,j) = field2d%local(n)%val(i2+(j2-1)*nfp,kelem1)
670 if ( uniform_grid )
then
671 deallocate( x_local, y_local )
672 deallocate( spectral_coef )
673 deallocate( p1d_ori_x, p1d_ori_y )
676 i0_s = i0_s + lcmesh%NeX * refelem%Nfp
678 j0_s = j0_s + lcmesh%NeY * refelem%Nfp
692 real(rp),
intent(inout) :: buf(:,:)
695 integer :: i0, j0, p0, i1, j1, i2, j2, i, j
698 integer :: i0_s, j0_s
704 do p0=1,
size(mesh2d%rcdomIJP2LCMeshID,3)
705 do j0=1,
size(mesh2d%rcdomIJP2LCMeshID,2)
706 do i0=1,
size(mesh2d%rcdomIJP2LCMeshID,1)
707 n = mesh2d%rcdomIJP2LCMeshID(i0,j0,p0)
709 lcmesh => mesh2d%lcmesh_list(n)
710 refelem => lcmesh%refElem2D
715 kelem1 = i1 + (j1-1)*lcmesh%NeX
719 i = i0_s + i2 + (i1-1)*nfp
720 j = j0_s + j2 + (j1-1)*nfp
721 buf(i,j) = field2d%local(n)%val(i2+(j2-1)*nfp,kelem1)
728 i0_s = i0_s + lcmesh%NeX * refelem%Nfp
730 j0_s = j0_s + lcmesh%NeY * refelem%Nfp
743 real(rp),
intent(in) :: buf(:,:)
750 integer :: i0_s, j0_s
755 do j0=1,
size(mesh2d%rcdomIJ2LCMeshID,2)
756 do i0=1,
size(mesh2d%rcdomIJ2LCMeshID,1)
757 n = mesh2d%rcdomIJ2LCMeshID(i0,j0)
758 lcmesh => mesh2d%lcmesh_list(n)
759 refelem => lcmesh%refElem2D
762 lcmesh, buf(:,:), i0_s, j0_s, &
763 field2d%local(n)%val(:,:) )
765 i0_s = i0_s + lcmesh%NeX * refelem%Nfp
767 j0_s = j0_s + lcmesh%NeY * refelem%Nfp
776 lcmesh, buf, i0_s, j0_s, &
780 real(rp),
intent(in) :: buf(:,:)
781 integer,
intent(in) :: i0_s, j0_s
782 real(rp),
intent(inout) :: val(lcmesh%refelem2d%np,lcmesh%nea)
785 integer :: i1, j1, i2, j2, i, j
790 refelem => lcmesh%refElem2D
794 kelem1 = i1 + (j1-1)*lcmesh%NeX
797 i = i0_s + i2 + (i1-1)*refelem%Nfp
798 j = j0_s + j2 + (j1-1)*refelem%Nfp
799 indx = i2 + (j2-1)*refelem%Nfp
800 val(indx,kelem1) = buf(i,j)
814 real(rp),
intent(in) :: buf(:,:)
818 integer :: i0, j0, p0
821 integer :: i0_s, j0_s, p0_s
824 i0_s = 0; j0_s = 0; p0_s = 0
826 do p0=1,
size(mesh2d%rcdomIJP2LCMeshID,3)
827 do j0=1,
size(mesh2d%rcdomIJP2LCMeshID,2)
828 do i0=1,
size(mesh2d%rcdomIJP2LCMeshID,1)
829 n = mesh2d%rcdomIJP2LCMeshID(i0,j0,p0)
830 lcmesh => mesh2d%lcmesh_list(n)
831 refelem => lcmesh%refElem2D
834 lcmesh, buf(:,:), i0_s, j0_s, &
835 field2d%local(n)%val(:,:) )
837 i0_s = i0_s + lcmesh%NeX * refelem%Nfp
839 j0_s = j0_s + lcmesh%NeY * refelem%Nfp
857 integer :: i, j, k, n
858 integer :: i_size, j_size, k_size
867 do i=1,
size(mesh3d%rcdomIJK2LCMeshID,1)
868 n = mesh3d%rcdomIJK2LCMeshID(i,1,1)
869 lcmesh => mesh3d%lcmesh_list(n)
870 i_size = i_size + lcmesh%NeX * lcmesh%refElem3D%Nnode_h1D
874 do j=1,
size(mesh3d%rcdomIJK2LCMeshID,2)
875 n = mesh3d%rcdomIJK2LCMeshID(1,j,1)
876 lcmesh => mesh3d%lcmesh_list(n)
877 j_size = j_size + lcmesh%NeY * lcmesh%refElem3D%Nnode_h1D
881 do k=1,
size(mesh3d%rcdomIJK2LCMeshID,3)
882 n = mesh3d%rcdomIJK2LCMeshID(1,1,k)
883 lcmesh => mesh3d%lcmesh_list(n)
884 k_size = k_size + lcmesh%NeZ * lcmesh%refElem3D%Nnode_v
889 diminfo_x,
"X", 1, (/ diminfo_x%name /), (/ i_size /) )
893 diminfo_y,
"Y", 1, (/ diminfo_y%name /), (/ j_size /) )
897 diminfo_z,
"Z", 1, (/ diminfo_z%name /), (/ k_size /), &
898 positive_down=(/ diminfo_z%positive_down /) )
902 diminfo,
"ZT", 1, (/ diminfo_z%name /), (/ k_size /) )
906 diminfo,
"XY", 2, (/ diminfo_x%name, diminfo_y%name /), &
907 (/ i_size, j_size /) )
911 diminfo,
"XY", 2, (/ diminfo_x%name, diminfo_y%name /), &
912 (/ i_size, j_size /) )
916 diminfo,
"XYZ", 3, (/ diminfo_x%name, diminfo_y%name, diminfo_z%name /), &
917 (/ i_size, j_size, k_size /) )
921 diminfo,
"XYZT", 3, (/ diminfo_x%name, diminfo_y%name, diminfo_z%name /), &
922 (/ i_size, j_size, k_size /) )
928 subroutine file_common_meshfield_get_dims3d_cubedsphere( mesh3D, dimsinfo )
935 integer :: i, j, k, n
937 integer :: i_size, j_size, k_size
946 do i=1,
size(mesh3d%rcdomIJKP2LCMeshID,1)
947 n = mesh3d%rcdomIJKP2LCMeshID(i,1,1,1)
948 lcmesh => mesh3d%lcmesh_list(n)
949 i_size =i_size + lcmesh%NeX * lcmesh%refElem3D%Nnode_h1D
953 do j=1,
size(mesh3d%rcdomIJKP2LCMeshID,2)
954 n = mesh3d%rcdomIJKP2LCMeshID(1,j,1,1)
955 lcmesh => mesh3d%lcmesh_list(n)
956 j_size = j_size + lcmesh%NeY * lcmesh%refElem3D%Nnode_h1D
960 do k=1,
size(mesh3d%rcdomIJKP2LCMeshID,3)
961 n = mesh3d%rcdomIJKP2LCMeshID(1,1,k,1)
962 lcmesh => mesh3d%lcmesh_list(n)
963 k_size = k_size + lcmesh%NeZ * lcmesh%refElem3D%Nnode_v
966 k_size = k_size *
size(mesh3d%rcdomIJKP2LCMeshID,4)
970 diminfo_x,
"X", 1, (/ diminfo_x%name /), (/ i_size /) )
974 diminfo_y,
"Y", 1, (/ diminfo_y%name /), (/ j_size /) )
978 diminfo_z,
"Z", 1, (/ diminfo_z%name /), (/ k_size /), &
979 positive_down=(/ diminfo_z%positive_down /) )
983 diminfo,
"ZT", 1, (/ diminfo_z%name /), (/ k_size /) )
987 diminfo,
"XY", 2, (/ diminfo_x%name, diminfo_y%name /), &
988 (/ i_size, j_size /) )
992 diminfo,
"XY", 2, (/ diminfo_x%name, diminfo_y%name /), &
993 (/ i_size, j_size /) )
997 diminfo,
"XYZ", 3, (/ diminfo_x%name, diminfo_y%name, diminfo_z%name /), &
998 (/ i_size, j_size, k_size /) )
1002 diminfo,
"XYZT", 3, (/ diminfo_x%name, diminfo_y%name, diminfo_z%name /), &
1003 (/ i_size, j_size, k_size /) )
928 subroutine file_common_meshfield_get_dims3d_cubedsphere( mesh3D, dimsinfo )
…
1006 end subroutine file_common_meshfield_get_dims3d_cubedsphere
1010 force_uniform_grid )
1015 real(RP),
intent(out) :: x(dimsinfo(MeshBase3D_DIMTYPEID_X)%size)
1016 real(RP),
intent(out) :: y(dimsinfo(MeshBase3D_DIMTYPEID_Y)%size)
1017 real(RP),
intent(out) :: z(dimsinfo(MeshBase3D_DIMTYPEID_Z)%size)
1018 logical,
intent(in),
optional :: force_uniform_grid
1025 integer :: is, js, ks, ie, je, ke, igs, jgs, kgs
1026 integer :: Nnode_h1D, Nnode_v
1028 logical :: uniform_grid = .false.
1029 real(RP),
allocatable :: x_local(:)
1030 real(RP),
allocatable :: y_local(:)
1031 real(RP),
allocatable :: z_local(:)
1034 if (
present(force_uniform_grid) ) uniform_grid = force_uniform_grid
1036 igs = 0; jgs = 0; kgs = 0
1038 do n=1 ,mesh3d%LOCAL_MESH_NUM
1039 lcmesh => mesh3d%lcmesh_list(n)
1040 refelem => lcmesh%refElem3D
1041 nnode_h1d = refelem%Nnode_h1D
1042 nnode_v = refelem%Nnode_v
1044 allocate( x_local(nnode_h1d), y_local(nnode_h1d) )
1045 allocate( z_local(nnode_v) )
1050 kelem = i + (j-1)*lcmesh%NeX + (k-1)*lcmesh%NeX*lcmesh%NeY
1051 if ( j==1 .and. k==1)
then
1052 x_local(:) = lcmesh%pos_en(refelem%Fmask_h(1:nnode_h1d,1),kelem,1)
1053 if ( uniform_grid )
call get_uniform_grid1d( x_local, nnode_h1d )
1055 is = igs + 1 + (i-1)*nnode_h1d
1056 ie = is + nnode_h1d - 1
1057 x(is:ie) = x_local(:)
1059 if ( i==1 .and. k==1)
then
1060 y_local(:) = lcmesh%pos_en(refelem%Fmask_h(1:nnode_h1d,4),kelem,2)
1061 if ( uniform_grid )
call get_uniform_grid1d( y_local, nnode_h1d )
1063 js = jgs + 1 + (j-1)*nnode_h1d
1064 je = js + nnode_h1d - 1
1065 y(js:je) = y_local(:)
1067 if ( i==1 .and. j==1)
then
1068 z_local(:) = lcmesh%pos_en(refelem%Colmask(:,1),kelem,3)
1069 if ( uniform_grid )
call get_uniform_grid1d( z_local, nnode_v )
1071 ks = kgs + 1 + (k-1)*nnode_v
1072 ke = ks + nnode_v - 1
1073 z(ks:ke) = z_local(:)
1079 igs = ie; jgs = je; kgs = ke
1080 deallocate( x_local, y_local )
1081 deallocate( z_local )
1088 subroutine file_common_meshfield_get_axis3d_cubedsphere( mesh3D, dimsinfo, x, y, z )
1093 real(RP),
intent(out) :: x(dimsinfo(MeshBase3D_DIMTYPEID_X)%size)
1094 real(RP),
intent(out) :: y(dimsinfo(MeshBase3D_DIMTYPEID_Y)%size)
1095 real(RP),
intent(out) :: z(dimsinfo(MeshBase3D_DIMTYPEID_Z)%size)
1097 integer :: n, ni, nj, nk, np
1103 integer :: is, js, ks, ie, je, ke, igs, jgs, kgs
1105 logical :: uniform_grid = .false.
1106 real(RP),
allocatable :: x_local(:)
1107 real(RP),
allocatable :: y_local(:)
1108 real(RP),
allocatable :: z_local(:)
1111 igs = 0; jgs = 0; kgs = 0
1113 do np=1,
size(mesh3d%rcdomIJKP2LCMeshID,4)
1114 do nk=1,
size(mesh3d%rcdomIJKP2LCMeshID,3)
1115 do nj=1,
size(mesh3d%rcdomIJKP2LCMeshID,2)
1116 do ni=1,
size(mesh3d%rcdomIJKP2LCMeshID,1)
1117 n = mesh3d%rcdomIJKP2LCMeshID(ni,nj,nk,np)
1118 lcmesh => mesh3d%lcmesh_list(n)
1119 refelem => lcmesh%refElem3D
1121 allocate( x_local(refelem%Nnode_h1D), y_local(refelem%Nnode_h1D), z_local(refelem%Nnode_v) )
1126 kelem = i + (j-1) * lcmesh%NeX + (k-1) * lcmesh%NeX * lcmesh%NeY
1127 if ( j==1 .and. nj == 1 .and. k==1 .and. nk == 1 .and. np == 1)
then
1128 x_local(:) = lcmesh%pos_en(refelem%Fmask_h(1:refelem%Nnode_h1D,1),kelem,1)
1130 is = igs + 1 + (i-1)*refelem%Nnode_h1D
1131 ie = is + refelem%Nnode_h1D - 1
1132 x(is:ie) = x_local(:)
1134 if ( i==1 .and. ni == 1 .and. k==1 .and. nk == 1 .and. np == 1 )
then
1135 y_local(:) = lcmesh%pos_en(refelem%Fmask_h(1:refelem%Nnode_h1D,4),kelem,2)
1137 js = jgs + 1 + (j-1)*refelem%Nnode_h1D
1138 je = js + refelem%Nnode_h1D - 1
1139 y(js:je) = y_local(:)
1141 if ( i==1 .and. ni == 1 .and. j == 1 .and. nj == 1 )
then
1142 z_local(:) = lcmesh%pos_en(refelem%Colmask(:,1),kelem,3) &
1143 + ( lcmesh%panelID - 1.0_rp ) * ( mesh3d%zmax_gl - mesh3d%zmin_gl )
1145 ks = kgs + 1 + (k-1)*refelem%Nnode_v
1146 ke = ks + refelem%Nnode_v - 1
1147 z(ks:ke) = z_local(:)
1153 igs = ie; jgs = je; kgs = ke
1154 deallocate( x_local, y_local, z_local )
1088 subroutine file_common_meshfield_get_axis3d_cubedsphere( mesh3D, dimsinfo, x, y, z )
…
1161 end subroutine file_common_meshfield_get_axis3d_cubedsphere
1165 buf, force_uniform_grid )
1171 real(rp),
intent(inout) :: buf(:,:,:)
1172 logical,
intent(in),
optional :: force_uniform_grid
1174 integer :: n, kelem1
1175 integer :: i0, j0, k0, i1, j1, k1, i2, j2, k2, i, j, k
1178 integer :: i0_s, j0_s, k0_s, indx
1180 logical :: uniform_grid = .false.
1181 integer :: nnode_h1d, nnode_v
1182 real(rp),
allocatable :: x_local(:)
1183 real(rp) :: x_local0, delx
1184 real(rp),
allocatable :: y_local(:)
1185 real(rp) :: y_local0, dely
1186 real(rp),
allocatable :: z_local(:)
1187 real(rp) :: z_local0, delz
1188 real(rp) :: ox(1), oy(1), oz(1)
1189 real(rp),
allocatable :: spectral_coef(:)
1190 real(rp),
allocatable :: p1d_ori_x(:,:)
1191 real(rp),
allocatable :: p1d_ori_y(:,:)
1192 real(rp),
allocatable :: p1d_ori_z(:,:)
1193 integer :: l, p1, p2, p3
1196 if (
present(force_uniform_grid) ) uniform_grid = force_uniform_grid
1198 i0_s = 0; j0_s = 0; k0_s = 0
1200 do k0=1,
size(mesh3d%rcdomIJK2LCMeshID,3)
1201 do j0=1,
size(mesh3d%rcdomIJK2LCMeshID,2)
1202 do i0=1,
size(mesh3d%rcdomIJK2LCMeshID,1)
1203 n = mesh3d%rcdomIJK2LCMeshID(i0,j0,k0)
1205 lcmesh => mesh3d%lcmesh_list(n)
1206 refelem => lcmesh%refElem3D
1207 nnode_h1d = refelem%Nnode_h1D
1208 nnode_v = refelem%Nnode_v
1210 if ( uniform_grid )
then
1211 allocate( x_local(nnode_h1d), y_local(nnode_h1d) )
1212 allocate( z_local(nnode_v) )
1213 allocate( spectral_coef(refelem%Np) )
1214 allocate( p1d_ori_x(1,nnode_h1d), p1d_ori_y(1,nnode_h1d) )
1215 allocate( p1d_ori_z(1,nnode_v) )
1227 kelem1 = i1 + (j1-1)*lcmesh%NeX + (k1-1)*lcmesh%NeX*lcmesh%NeY
1229 if ( uniform_grid )
then
1230 x_local(:) = lcmesh%pos_en(refelem%Fmask_h(1:nnode_h1d,1),kelem1,1)
1231 x_local0 = x_local(1); delx = x_local(nnode_h1d) - x_local0
1232 y_local(:) = lcmesh%pos_en(refelem%Fmask_h(1:nnode_h1d,4),kelem1,2)
1233 y_local0 = y_local(1); dely = y_local(nnode_h1d) - y_local0
1234 z_local(:) = lcmesh%pos_en(refelem%Colmask(:,1),kelem1,3)
1235 z_local0 = z_local(1); delz = z_local(nnode_v ) - z_local0
1236 call get_uniform_grid1d( x_local, nnode_h1d )
1237 call get_uniform_grid1d( y_local, nnode_h1d )
1238 call get_uniform_grid1d( z_local, nnode_v )
1240 spectral_coef(:) = matmul(refelem%invV(:,:), field3d%local(n)%val(:,kelem1))
1244 ox(1) = - 1.0_rp + 2.0_rp * (x_local(i2) - x_local0) / delx
1245 oy(1) = - 1.0_rp + 2.0_rp * (y_local(j2) - y_local0) / dely
1246 oz(1) = - 1.0_rp + 2.0_rp * (z_local(k2) - z_local0) / delz
1252 i = i0_s + i2 + (i1-1)*nnode_h1d
1253 j = j0_s + j2 + (j1-1)*nnode_h1d
1254 k = k0_s + k2 + (k1-1)*nnode_v
1259 l = p1 + (p2-1)*nnode_h1d + (p3-1)*nnode_h1d**2
1260 buf(i,j,k) = buf(i,j,k) + &
1261 ( p1d_ori_x(1,p1) * p1d_ori_y(1,p2) * p1d_ori_z(1,p3) ) &
1262 * sqrt((dble(p1-1) + 0.5_rp)*(dble(p2-1) + 0.5_rp)*(dble(p3-1) + 0.5_rp)) &
1274 i = i0_s + i2 + (i1-1)*nnode_h1d
1275 j = j0_s + j2 + (j1-1)*nnode_h1d
1276 k = k0_s + k2 + (k1-1)*nnode_v
1277 indx = i2 + (j2-1)*nnode_h1d + (k2-1)*nnode_h1d**2
1278 buf(i,j,k) = field3d%local(n)%val(indx,kelem1)
1287 if ( uniform_grid )
then
1288 deallocate( x_local, y_local )
1289 deallocate( z_local )
1290 deallocate( spectral_coef )
1293 i0_s = i0_s + lcmesh%NeX * refelem%Nnode_h1D
1295 j0_s = j0_s + lcmesh%NeY * refelem%Nnode_h1D
1298 k0_s = k0_s + lcmesh%NeZ * refelem%Nnode_v
1311 real(rp),
intent(inout) :: buf(:,:,:)
1314 integer :: n, i0, j0, k0, p0
1315 integer :: i1, j1, k1, i2, j2, k2, i, j, k
1318 integer :: i0_s, j0_s, k0_s
1319 integer :: nnode_h1d
1323 i0_s = 0; j0_s = 0; k0_s = 0
1325 do p0=1,
size(mesh3d%rcdomIJKP2LCMeshID,4)
1326 do k0=1,
size(mesh3d%rcdomIJKP2LCMeshID,3)
1327 do j0=1,
size(mesh3d%rcdomIJKP2LCMeshID,2)
1328 do i0=1,
size(mesh3d%rcdomIJKP2LCMeshID,1)
1329 n = mesh3d%rcdomIJKP2LCMeshID(i0,j0,k0,p0)
1331 lcmesh => mesh3d%lcmesh_list(n)
1332 refelem => lcmesh%refElem3D
1333 nnode_h1d = refelem%Nnode_h1D
1334 nnode_v = refelem%Nnode_v
1339 kelem1 = i1 + (j1-1)*lcmesh%NeX + (k1-1)*lcmesh%NeX*lcmesh%NeY
1344 i = i0_s + i2 + (i1-1)*nnode_h1d
1345 j = j0_s + j2 + (j1-1)*nnode_h1d
1346 k = k0_s + k2 + (k1-1)*nnode_v
1347 buf(i,j,k) = field3d%local(n)%val(i2+(j2-1)*nnode_h1d+(k2-1)*nnode_h1d**2,kelem1)
1355 i0_s = i0_s + lcmesh%NeX * refelem%Nnode_h1D
1357 j0_s = j0_s + lcmesh%NeY * refelem%Nnode_h1D
1360 k0_s = k0_s + lcmesh%NeZ * refelem%Nnode_v
1372 real(rp),
intent(in) :: buf(:,:,:)
1376 integer :: i0, j0, k0
1379 integer :: i0_s, j0_s, k0_s
1382 i0_s = 0; j0_s = 0; k0_s = 0
1384 do k0=1,
size(mesh3d%rcdomIJK2LCMeshID,3)
1385 do j0=1,
size(mesh3d%rcdomIJK2LCMeshID,2)
1386 do i0=1,
size(mesh3d%rcdomIJK2LCMeshID,1)
1387 n = mesh3d%rcdomIJK2LCMeshID(i0,j0,k0)
1388 lcmesh => mesh3d%lcmesh_list(n)
1389 refelem => lcmesh%refElem3D
1392 lcmesh, buf(:,:,:), i0_s, j0_s, k0_s, &
1393 field3d%local(n)%val(:,:) )
1395 i0_s = i0_s + lcmesh%NeX * refelem%Nnode_h1D
1397 j0_s = j0_s + lcmesh%NeY * refelem%Nnode_h1D
1400 k0_s = k0_s + lcmesh%NeZ * refelem%Nnode_v
1412 real(rp),
intent(in) :: buf(:,:,:)
1416 integer :: i0, j0, k0, p0
1419 integer :: i0_s, j0_s, k0_s, p0_s
1422 i0_s = 0; j0_s = 0; k0_s = 0; p0_s = 0
1424 do p0=1,
size(mesh3d%rcdomIJKP2LCMeshID,4)
1425 do k0=1,
size(mesh3d%rcdomIJKP2LCMeshID,3)
1426 do j0=1,
size(mesh3d%rcdomIJKP2LCMeshID,2)
1427 do i0=1,
size(mesh3d%rcdomIJKP2LCMeshID,1)
1428 n = mesh3d%rcdomIJKP2LCMeshID(i0,j0,k0,p0)
1429 lcmesh => mesh3d%lcmesh_list(n)
1430 refelem => lcmesh%refElem3D
1433 lcmesh, buf(:,:,:), i0_s, j0_s, k0_s, &
1434 field3d%local(n)%val(:,:) )
1436 i0_s = i0_s + lcmesh%NeX * refelem%Nnode_h1D
1438 j0_s = j0_s + lcmesh%NeY * refelem%Nnode_h1D
1441 k0_s = k0_s + lcmesh%NeZ * refelem%Nnode_v
1451 lcmesh, buf, i0_s, j0_s, k0_s, &
1455 real(rp),
intent(in) :: buf(:,:,:)
1456 integer,
intent(in) :: i0_s, j0_s, k0_s
1457 real(rp),
intent(inout) :: val(lcmesh%refelem3d%np,lcmesh%nea)
1460 integer :: i1, j1, k1, i2, j2, k2, i, j, k
1465 refelem => lcmesh%refElem3D
1472 kelem1 = i1 + (j1-1)*lcmesh%NeX + (k1-1)*lcmesh%NeX*lcmesh%NeY
1473 do k2=1, refelem%Nnode_v
1474 do j2=1, refelem%Nnode_h1D
1475 do i2=1, refelem%Nnode_h1D
1476 i = i0_s + i2 + (i1-1)*refelem%Nnode_h1D
1477 j = j0_s + j2 + (j1-1)*refelem%Nnode_h1D
1478 k = k0_s + k2 + (k1-1)*refelem%Nnode_v
1479 indx = i2 + (j2-1)*refelem%Nnode_h1D + (k2-1)*refelem%Nnode_h1D**2
1480 val(indx,kelem1) = buf(i,j,k)
1492 use scale_file_h,
only: &
1493 file_real8, file_real4
1499 character(*),
intent(in) :: datatype
1504 if ( datatype ==
'REAL8' )
then
1506 elseif( datatype ==
'REAL4' )
then
1511 elseif( rp == 4 )
then
1514 log_error(
"file_restart_meshfield_get_dtype",*)
'unsupported data type. Check!', trim(datatype)
1524 subroutine get_uniform_grid1d( pos1D, Np )
1526 integer,
intent(in) :: np
1527 real(rp),
intent(inout) :: pos1d(np)
1533 del = ( pos1d(np) - pos1d(1) ) / dble(np)
1534 pos1d(1) = pos1d(1) + 0.5_rp * del
1536 pos1d(i) = pos1d(i-1) + del
1540 end subroutine get_uniform_grid1d
1542 subroutine set_dimension( dim, diminfo, dim_type, ndims, dims, count, positive_down )
1547 character(*),
intent(in) :: dim_type
1548 integer,
intent(in) :: ndims
1549 character(len=*),
intent(in) :: dims(ndims)
1550 integer,
intent(in) :: count(ndims)
1551 logical,
intent(in),
optional :: positive_down(ndims)
1556 dim%name = diminfo%name
1557 dim%unit = diminfo%unit
1558 dim%desc = diminfo%desc
1563 dim%dims(d) = dims(d)
1564 dim%count(d) = count(d)
1565 dim%size = dim%size * count(d)
1566 if (
present(positive_down) )
then
1567 dim%positive_down(d) = positive_down(d)
1569 dim%positive_down(d) = .false.
1574 end subroutine set_dimension
module FElib / Element / Base
module FElib / File / Common
subroutine, public file_common_meshfield_get_axis1d(mesh1d, dimsinfo, x, force_uniform_grid)
subroutine, public file_common_meshfield_set_cartesbuf_field1d(mesh1d, buf, field1d)
subroutine, public file_common_meshfield_get_axis3d(mesh3d, dimsinfo, x, y, z, force_uniform_grid)
subroutine, public file_common_meshfield_set_cartesbuf_field2d(mesh2d, buf, field2d)
subroutine, public file_common_meshfield_put_field3d_cubedsphere_cartesbuf(mesh3d, field3d, buf)
subroutine, public file_common_meshfield_put_field2d_cubedsphere_cartesbuf(mesh2d, field2d, buf)
subroutine, public file_common_meshfield_put_field2d_cartesbuf(mesh2d, field2d, buf, force_uniform_grid)
subroutine, public file_common_meshfield_set_cartesbuf_field3d(mesh3d, buf, field3d)
subroutine, public file_common_meshfield_get_dims1d(mesh1d, dimsinfo)
subroutine, public file_common_meshfield_put_field1d_cartesbuf(mesh1d, field1d, buf, force_uniform_grid)
subroutine, public file_common_meshfield_get_dims3d(mesh3d, dimsinfo)
subroutine, public file_common_meshfield_set_cartesbuf_field2d_local(lcmesh, buf, i0_s, j0_s, val)
subroutine, public file_common_meshfield_get_dims2d(mesh2d, dimsinfo)
subroutine, public file_common_meshfield_set_cartesbuf_field3d_local(lcmesh, buf, i0_s, j0_s, k0_s, val)
subroutine, public file_common_meshfield_get_axis2d(mesh2d, dimsinfo, x, y, force_uniform_grid)
subroutine, public file_common_meshfield_put_field3d_cartesbuf(mesh3d, field3d, buf, force_uniform_grid)
subroutine, public file_common_meshfield_set_cartesbuf_field1d_local(lcmesh, buf, i0_s, val)
subroutine, public file_common_meshfield_set_cartesbuf_field3d_cubedsphere(mesh3d, buf, field3d)
subroutine, public file_common_meshfield_set_cartesbuf_field2d_cubedsphere(mesh2d, buf, field2d)
integer function, public file_common_meshfield_get_dtype(datatype)
module FElib / Mesh / Local 1D
module FElib / Mesh / Local 2D
module FElib / Mesh / Local 3D
module FElib / Mesh / Base 1D
integer, public meshbase1d_dimtype_num
integer, public meshbase1d_dimtypeid_x
integer, public meshbase1d_dimtypeid_xt
module FElib / Mesh / Base 2D
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 / Base 3D
integer, public meshbase3d_dimtypeid_y
integer, public meshbase3d_dimtypeid_zt
integer, public meshbase3d_dimtypeid_z
integer, public meshbase3d_dimtype_num
integer, public meshbase3d_dimtypeid_xy
integer, public meshbase3d_dimtypeid_xyt
integer, public meshbase3d_dimtypeid_xyz
integer, public meshbase3d_dimtypeid_x
integer, public meshbase3d_dimtypeid_xyzt
module FElib / Mesh / Base
module FElib / Mesh / Cubic 3D domain
module FElib / Mesh / Cubed-sphere 2D domain
module FElib / Mesh / Cubed-sphere 3D domain
module FElib / Mesh / Rectangle 2D domain
module FElib / Data / base
module common / Polynominal
real(rp) function, dimension(size(x), nord+1), public polynominal_genlegendrepoly(nord, x)
A function to obtain the values of Legendre polynominals which are evaluated at aribitary points.
subroutine, public polynominal_genlegendrepoly_sub(nord, x, p)
A function to obtain the values of Legendre polynominals which are evaluated at aribitary points.