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

module FElib / Mesh / Hierarchy base More...

Data Types

type  meshhierarchybase
 Base type for mesh hierarchy. More...
type  meshhierarchylevelbase
type  meshhierarchylocalmgdatabase
 Base type to manage local mesh data for multigrid. More...

Functions/Subroutines

subroutine, public meshhierarchybase_init (this, p_level_num, h_level_num)
 Initialize a base object for mesh hierarchy.
subroutine, public meshhierarchybase_final (this)
 Finalize a base object for mesh hierarchy.
subroutine, public meshhierarchy_construct_pmg_mat1d (mat1d, np_i, np_o)
 Construct a 1D p-multigrid matrix used for transfer between different p-levels.
subroutine, public meshhierarchylocalmgdatabase_init (this, lcmesh)
 Initialize a base object to manage local multigrid data for mesh hierarchy.
subroutine, public meshhierarchylocalmgdatabase_final (this)
 Finalize a base object to manage local multigrid data for mesh hierarchy.

Variables

integer, parameter, public mesh_hierarchy_pmg_finest_level = 1
 Finest level index in p-MG.
integer, parameter, public mesh_hierarchy_hmg_finest_level = 1
 Finest level index in h-MG.
integer, parameter, public mesh_hierarchy_type_pmg = 1
 Type ID of mesh hierarchy: p-MG.
integer, parameter, public mesh_hierarchy_type_hmg = 2
 Type ID of mesh hierarchy: h-MG.

Detailed Description

module FElib / Mesh / Hierarchy base

Description
A base module to provide a mesh hierarchy
Author
Yuta Kawai, Team SCALE

Function/Subroutine Documentation

◆ meshhierarchybase_init()

subroutine, public scale_mesh_hierarchy_base::meshhierarchybase_init ( class(meshhierarchybase), intent(inout) this,
integer, intent(in) p_level_num,
integer, intent(in) h_level_num )

Initialize a base object for mesh hierarchy.

Parameters
[in]p_level_numNumber of p-mesh levels
[in]h_level_numNumber of h-mesh levels

Definition at line 83 of file scale_mesh_hierarchy_base.F90.

86 implicit none
87 class(MeshHierarchyBase), intent(inout) :: this
88 integer, intent(in) :: p_LEVEL_NUM !< Number of p-mesh levels
89 integer, intent(in) :: h_LEVEL_NUM !< Number of h-mesh levels
90 !-------------------------------------------------------------
91
92 this%NUM_TOT_LEVEL = 0
93 this%NUM_hMG_LEVEL = h_level_num
94 this%NUM_pMG_LEVEL = p_level_num
95
96 this%NUM_TOT_LEVEL = this%NUM_hMG_LEVEL + this%NUM_pMG_LEVEL
97 return

Referenced by scale_mesh_hierarchy_2d::meshhierarchy2d_init(), and scale_mesh_hierarchy_3d::meshhierarchy3d_init().

◆ meshhierarchybase_final()

subroutine, public scale_mesh_hierarchy_base::meshhierarchybase_final ( class(meshhierarchybase), intent(inout) this)

Finalize a base object for mesh hierarchy.

Definition at line 102 of file scale_mesh_hierarchy_base.F90.

103 implicit none
104 class(MeshHierarchyBase), intent(inout) :: this
105 !-------------------------------------------------------------
106 return

Referenced by scale_mesh_hierarchy_2d::meshhierarchy2d_init(), and scale_mesh_hierarchy_3d::meshhierarchy3d_init().

◆ meshhierarchy_construct_pmg_mat1d()

subroutine, public scale_mesh_hierarchy_base::meshhierarchy_construct_pmg_mat1d ( real(rp), dimension(np_o,np_i), intent(out) mat1d,
integer, intent(in) np_i,
integer, intent(in) np_o )

Construct a 1D p-multigrid matrix used for transfer between different p-levels.

Parameters
[in]np_iNumber of points with input DOF
[in]np_oNumber of points with output DOF
[out]mat1dTransfer matrix with p-MG

Definition at line 111 of file scale_mesh_hierarchy_base.F90.

112 use scale_polynomial, only: &
117 implicit none
118 integer, intent(in) :: np_i !< Number of points with input DOF
119 integer, intent(in) :: np_o !< Number of points with output DOF
120 real(RP), intent(out) :: mat1D(np_o,np_i) !< Transfer matrix with p-MG
121
122 type(LineElement) :: elem1D_i
123 type(LineElement) :: elem1D_o
124
125 real(RP), allocatable :: lag_i(:,:)
126 real(RP), allocatable :: lag_o(:,:)
127
128 integer :: np_int
129 real(RP), allocatable :: int_w(:)
130 real(RP), allocatable :: int_pts(:)
131
132 integer :: pi, po
133 !---------------------------------------------------------------------
134
135 call elem1d_i%Init( np_i-1, .false. )
136 call elem1d_o%Init( np_o-1, .false. )
137
138 !-
139 np_int = max(np_i,np_o)
140
141 allocate( int_pts(np_int) )
142 int_pts(:) = polynomial_gengausslegendrept(np_int)
143
144 allocate( int_w(np_int) )
146
147 !-
148 allocate( lag_i(np_int,np_i) )
149 lag_i(:,:) = polynomial_genlagrangepoly(elem1d_i%PolyOrder, elem1d_i%x1, int_pts)
150
151 allocate( lag_o(np_int,np_o) )
152 lag_o(:,:) = polynomial_genlagrangepoly(elem1d_o%PolyOrder, elem1d_o%x1, int_pts)
153
154 do pi=1, np_i
155 do po=1, np_o
156 mat1d(po,pi) = sum( int_w(:) * lag_i(:,pi) * lag_o(:,po) )
157 end do
158 end do
159 mat1d(:,:) = matmul( elem1d_o%invM, mat1d )
160
161 !-
162 call elem1d_i%Final()
163 call elem1d_o%Final()
164
165 return
module FElib / Element / line
Module common / Polynomial.
real(rp) function, dimension(nord), public polynomial_gengausslegendreptintweight(nord)
A function to calculate the Gauss-Legendre (GL) weights.
real(rp) function, dimension(size(x), nord+1), public polynomial_genlagrangepoly(nord, x_lgl, x)
A function to obtain the Lagrange basis functions related to the Gauss-Legendre-Lobatto (GLL) points.
real(rp) function, dimension(nord), public polynomial_gengausslegendrept(nord)
A function to calculate the Gauss-Legendre (GL) points.
Derived type representing a line element.

References scale_polynomial::polynomial_gengausslegendrept(), scale_polynomial::polynomial_gengausslegendreptintweight(), and scale_polynomial::polynomial_genlagrangepoly().

Referenced by scale_mesh_hierarchy_2d::meshhierarchy2d_init(), and scale_mesh_hierarchy_3d::meshhierarchy3d_init().

◆ meshhierarchylocalmgdatabase_init()

subroutine, public scale_mesh_hierarchy_base::meshhierarchylocalmgdatabase_init ( class(meshhierarchylocalmgdatabase), intent(inout) this,
class(localmeshbase), intent(in) lcmesh )

Initialize a base object to manage local multigrid data for mesh hierarchy.

Definition at line 171 of file scale_mesh_hierarchy_base.F90.

173 implicit none
174 class(MeshHierarchyLocalMGDataBase), intent(inout) :: this
175 class(LocalMeshBase), intent(in) :: lcmesh
176 !-------------------------------------------------------------
177
178 allocate( this%Ic2f(lcmesh%refElem%Np,lcmesh%refElem%Nv,lcmesh%NeA) )
179 allocate( this%Ic2f_emap(lcmesh%Ne) )
180
181 allocate( this%CoarseLocalMesh_tileIDlist(1) )
182 allocate( this%CoarseLocalMesh_lcdomIDlist(1) )
183 return

Referenced by scale_mesh_hierarchy_2d::meshhierarchy2d_init(), and scale_mesh_hierarchy_3d::meshhierarchy3d_init().

◆ meshhierarchylocalmgdatabase_final()

subroutine, public scale_mesh_hierarchy_base::meshhierarchylocalmgdatabase_final ( class(meshhierarchylocalmgdatabase), intent(inout) this)

Finalize a base object to manage local multigrid data for mesh hierarchy.

Definition at line 188 of file scale_mesh_hierarchy_base.F90.

189 implicit none
190 class(MeshHierarchyLocalMGDataBase), intent(inout) :: this
191 !-------------------------------------------------------------
192 deallocate( this%Ic2f )
193 deallocate( this%Ic2f_emap )
194 deallocate( this%CoarseLocalMesh_tileIDlist )
195 deallocate( this%CoarseLocalMesh_lcdomIDlist )
196 return

Referenced by scale_mesh_hierarchy_2d::meshhierarchy2d_init(), and scale_mesh_hierarchy_3d::meshhierarchy3d_init().

Variable Documentation

◆ mesh_hierarchy_pmg_finest_level

integer, parameter, public scale_mesh_hierarchy_base::mesh_hierarchy_pmg_finest_level = 1

Finest level index in p-MG.

Definition at line 65 of file scale_mesh_hierarchy_base.F90.

65 integer, public, parameter :: MESH_HIERARCHY_pMG_FINEST_LEVEL = 1 !< Finest level index in p-MG

Referenced by scale_mesh_hierarchy_2d::meshhierarchy2d_init(), and scale_mesh_hierarchy_3d::meshhierarchy3d_init().

◆ mesh_hierarchy_hmg_finest_level

integer, parameter, public scale_mesh_hierarchy_base::mesh_hierarchy_hmg_finest_level = 1

Finest level index in h-MG.

Definition at line 66 of file scale_mesh_hierarchy_base.F90.

66 integer, public, parameter :: MESH_HIERARCHY_hMG_FINEST_LEVEL = 1 !< Finest level index in h-MG

Referenced by scale_mesh_hierarchy_2d::meshhierarchy2d_init(), and scale_mesh_hierarchy_3d::meshhierarchy3d_init().

◆ mesh_hierarchy_type_pmg

integer, parameter, public scale_mesh_hierarchy_base::mesh_hierarchy_type_pmg = 1

Type ID of mesh hierarchy: p-MG.

Definition at line 68 of file scale_mesh_hierarchy_base.F90.

68 integer, public, parameter :: MESH_HIERARCHY_TYPE_pMG = 1 !< Type ID of mesh hierarchy: p-MG

Referenced by scale_mesh_hierarchy_2d::meshhierarchy2d_init(), and scale_mesh_hierarchy_3d::meshhierarchy3d_init().

◆ mesh_hierarchy_type_hmg

integer, parameter, public scale_mesh_hierarchy_base::mesh_hierarchy_type_hmg = 2

Type ID of mesh hierarchy: h-MG.

Definition at line 69 of file scale_mesh_hierarchy_base.F90.

69 integer, public, parameter :: MESH_HIERARCHY_TYPE_hMG = 2 !< Type ID of mesh hierarchy: h-MG

Referenced by scale_mesh_hierarchy_2d::meshhierarchy2d_init(), and scale_mesh_hierarchy_3d::meshhierarchy3d_init().