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

module FElib / Mesh / 3D domain More...

Data Types

type  meshhierarchy3d
 Derived type for mesh hierarchy in 3D domain. More...
type  meshhierarchylevel3d
 Derived type to represent mesh hierarchy level in 3D domain. More...
type  meshhierarchylocalmgdata3d
 Derived type to manage 3D local mesh data for multigrid. More...

Functions/Subroutines

subroutine meshhierarchy3d_init (this, parent_mesh, porder_list, p_level_num, negx_list, negy_list, negz_list, h_level_num)
 Initialize an object for mesh hierarchy in 3D domain.

Detailed Description

module FElib / Mesh / 3D domain

Description
Manage mesh hierarchy of 3D domain for element-based methods
Author
Yuta Kawai, Team SCALE

Function/Subroutine Documentation

◆ meshhierarchy3d_init()

subroutine scale_mesh_hierarchy_3d::meshhierarchy3d_init ( class(meshhierarchy3d), intent(inout), target this,
class(meshbase3d), intent(in), target parent_mesh,
integer, dimension(p_level_num), intent(in) porder_list,
integer, intent(in) p_level_num,
integer, dimension(h_level_num), intent(in) negx_list,
integer, dimension(h_level_num), intent(in) negy_list,
integer, dimension(h_level_num), intent(in) negz_list,
integer, intent(in) h_level_num )

Initialize an object for mesh hierarchy in 3D domain.

Parameters
[in]parent_meshPointer to the finest mesh
[in]p_level_numNumber of p-mesh levels
[in]porder_listPolynomial order list for p-mesh levels
[in]h_level_numNumber of h-mesh levels
[in]negx_listNumber of elements in x-direction for h-mesh levels
[in]negy_listNumber of elements in y-direction for h-mesh levels
[in]negz_listNumber of elements in z-direction for h-mesh levels

Definition at line 105 of file scale_mesh_hierarchy_3d.F90.

109 implicit none
110 class(MeshHierarchy3D), intent(inout), target :: this
111 class(MeshBase3D), intent(in), target :: parent_mesh !< Pointer to the finest mesh
112 integer, intent(in) :: p_LEVEL_NUM !< Number of p-mesh levels
113 integer, intent(in) :: porder_list(p_LEVEL_NUM) !< Polynomial order list for p-mesh levels
114 integer, intent(in) :: h_LEVEL_NUM !< Number of h-mesh levels
115 integer, intent(in) :: NeGX_list(h_LEVEL_NUM) !< Number of elements in x-direction for h-mesh levels
116 integer, intent(in) :: NeGY_list(h_LEVEL_NUM) !< Number of elements in y-direction for h-mesh levels
117 integer, intent(in) :: NeGZ_list(h_LEVEL_NUM) !< Number of elements in z-direction for h-mesh levels
118
119 integer :: poly_lev
120 integer :: h_lev
121
122 integer :: ldom_id
123
124 type(MeshHierarchyLevel3D), pointer :: level_ptr
125 class(MeshBase3D), pointer :: mesh3D_ptr
126
127 class(MeshPtr3D), pointer :: fine_mesh_ptr
128 class(MeshPtr3D), pointer :: coarse_mesh_ptr
129
130 integer :: NeGZ
131 !-------------------------------------------------------------
132
133 call meshhierarchybase_init( this, p_level_num, h_level_num )
134
135 !--
136 if ( parent_mesh%refElem3D%PolyOrder_h /= parent_mesh%refElem3D%PolyOrder_v ) then
137 log_info('MeshHierarchy3D_Init',*) 'Currently, PolyOrder_h should equal PolyOrder_v. Check!'
138 call prc_abort
139 end if
140 if ( porder_list(p_level_num) /= 1 .and. h_level_num > 0 ) then
141 log_info('MeshHierarchy3D_Init',*) 'Currently, only p=1 is supported for the coarsest p-mesh level. Check!'
142 call prc_abort
143 end if
144 if ( h_level_num > 0 ) then
145 negz = negz_list(1)
146 do h_lev=2, h_level_num
147 if ( negz_list(h_lev) /= negz ) then
148 log_info('MeshHierarchy3D_Init',*) 'Currently, the number of elements should be same in the vertical direction. Check!'
149 call prc_abort
150 end if
151 end do
152 end if
153
154 !- Setup p-mesh hierarchy
155
156 allocate( this%elem3D_list(p_level_num) )
157 do poly_lev=1, p_level_num
158 call this%elem3D_list(poly_lev)%Init( porder_list(poly_lev), porder_list(poly_lev), .false. )
159 end do
160
161 allocate( this%p_mesh_list(this%NUM_pMG_LEVEL) )
162
163 this%p_mesh_list(mesh_hierarchy_pmg_finest_level)%ptr => parent_mesh
164 do poly_lev=mesh_hierarchy_pmg_finest_level + 1, this%NUM_pMG_LEVEL
165 select type(parent_mesh)
166 type is (meshcubedom3d)
167 call construct_cubedom3d_mesh( this, this%p_mesh_list(poly_lev)%ptr, &
168 parent_mesh%NeGX, parent_mesh%NeGY, parent_mesh%NeGZ, parent_mesh%FZ, &
169 parent_mesh, this%elem3D_list(poly_lev) )
170 end select
171 end do
172
173 allocate( this%p_level(this%NUM_pMG_LEVEL) )
174
175 do poly_lev=mesh_hierarchy_pmg_finest_level, this%NUM_pMG_LEVEL
176 call this%p_level(poly_lev)%Init( poly_lev, this%p_mesh_list(poly_lev)%ptr, &
177 this%p_mesh_list, this%NUM_pMG_LEVEL, mesh_hierarchy_type_pmg )
178 end do
179
180 !- Setup h-mesh hierarchy
181
182 if ( this%NUM_hMG_LEVEL > 0 ) then
183 allocate( this%h_mesh_list(this%NUM_hMG_LEVEL) )
184
185 this%h_mesh_list(mesh_hierarchy_hmg_finest_level)%ptr => parent_mesh
186 do h_lev=mesh_hierarchy_hmg_finest_level + 1, this%NUM_hMG_LEVEL
187 select type(parent_mesh)
188 type is (meshcubedom3d)
189 call construct_cubedom3d_mesh( this, this%h_mesh_list(h_lev)%ptr, &
190 negx_list(h_lev), negy_list(h_lev), negz_list(h_lev), parent_mesh%FZ, &
191 parent_mesh, this%elem3D_list(p_level_num) )
192 end select
193 end do
194
195 allocate( this%h_level(this%NUM_hMG_LEVEL) )
196
197 do h_lev=mesh_hierarchy_hmg_finest_level, this%NUM_hMG_LEVEL
198 call this%h_level(h_lev)%Init( h_lev, this%h_mesh_list(h_lev)%ptr, &
199 this%h_mesh_list, this%NUM_hMG_LEVEL, mesh_hierarchy_type_hmg )
200 end do
201 end if
202
203 return

References scale_mesh_hierarchy_base::mesh_hierarchy_hmg_finest_level, scale_mesh_hierarchy_base::mesh_hierarchy_pmg_finest_level, scale_mesh_hierarchy_base::mesh_hierarchy_type_hmg, scale_mesh_hierarchy_base::mesh_hierarchy_type_pmg, scale_mesh_hierarchy_base::meshhierarchy_construct_pmg_mat1d(), scale_mesh_hierarchy_base::meshhierarchybase_final(), scale_mesh_hierarchy_base::meshhierarchybase_init(), scale_mesh_hierarchy_base::meshhierarchylocalmgdatabase_final(), and scale_mesh_hierarchy_base::meshhierarchylocalmgdatabase_init().