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

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

Data Types

type  meshhierarchy2d
 Derived type for mesh hierarchy in 2D domain. More...
type  meshhierarchylevel2d
 Derived type to represent mesh hierarchy level in 2D domain. More...
type  meshhierarchylocalmgdata2d
 Derived type to manage 2D local mesh data for multigrid. More...

Functions/Subroutines

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

Detailed Description

module FElib / Mesh / 2D domain

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

Function/Subroutine Documentation

◆ meshhierarchy2d_init()

subroutine scale_mesh_hierarchy_2d::meshhierarchy2d_init ( class(meshhierarchy2d), intent(inout), target this,
class(meshbase2d), 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, intent(in) h_level_num )

Initialize an object for mesh hierarchy in 2D 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

Definition at line 105 of file scale_mesh_hierarchy_2d.F90.

109 implicit none
110 class(MeshHierarchy2D), intent(inout), target :: this
111 class(MeshBase2D), 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
118 integer :: poly_lev
119 integer :: h_lev
120
121 integer :: ldom_id
122
123 type(MeshHierarchyLevel2D), pointer :: level_ptr
124 class(MeshBase2D), pointer :: mesh2D_ptr
125
126 class(MeshPtr2D), pointer :: fine_mesh_ptr
127 class(MeshPtr2D), pointer :: coarse_mesh_ptr
128 !-------------------------------------------------------------
129
130 call meshhierarchybase_init( this, p_level_num, h_level_num )
131
132 !- Setup p-mesh hierarchy
133
134 if ( porder_list(p_level_num) /= 1 .and. h_level_num > 0 ) then
135 log_info('MeshHierarchy2D_Init',*) 'Currently, only p=1 is supported for the coarsest p-mesh level when h_LEVEL_NUM > 0. Check!'
136 call prc_abort
137 end if
138
139 !- Setup p-mesh hierarchy
140
141 allocate( this%elem2D_list(p_level_num) )
142 do poly_lev=1, p_level_num
143 call this%elem2D_list(poly_lev)%Init( porder_list(poly_lev), .false. )
144 end do
145
146 allocate( this%p_mesh_list(this%NUM_pMG_LEVEL) )
147
148 this%p_mesh_list(mesh_hierarchy_pmg_finest_level)%ptr => parent_mesh
149 do poly_lev=mesh_hierarchy_pmg_finest_level + 1, this%NUM_pMG_LEVEL
150 select type(parent_mesh)
151 type is (meshrectdom2d)
152 call construct_rectdom2d_mesh( this, this%p_mesh_list(poly_lev)%ptr, &
153 parent_mesh%NeGX, parent_mesh%NeGY, &
154 parent_mesh, this%elem2D_list(poly_lev) )
155 end select
156 end do
157
158 allocate( this%p_level(this%NUM_pMG_LEVEL) )
159
160 do poly_lev=mesh_hierarchy_pmg_finest_level, this%NUM_pMG_LEVEL
161 call this%p_level(poly_lev)%Init( poly_lev, this%p_mesh_list(poly_lev)%ptr, &
162 this%p_mesh_list, this%NUM_pMG_LEVEL, mesh_hierarchy_type_pmg )
163 end do
164
165 !- Setup h-mesh hierarchy
166
167 allocate( this%h_mesh_list(this%NUM_hMG_LEVEL) )
168
169 this%h_mesh_list(mesh_hierarchy_hmg_finest_level)%ptr => this%p_mesh_list(this%NUM_pMG_LEVEL)%ptr
170 do h_lev=mesh_hierarchy_hmg_finest_level + 1, this%NUM_hMG_LEVEL
171 select type(parent_mesh)
172 type is (meshrectdom2d)
173 call construct_rectdom2d_mesh( this, this%h_mesh_list(h_lev)%ptr, &
174 negx_list(h_lev), negy_list(h_lev), &
175 parent_mesh, this%elem2D_list(p_level_num) )
176 end select
177 end do
178
179 allocate( this%h_level(this%NUM_hMG_LEVEL) )
180
181 do h_lev=mesh_hierarchy_hmg_finest_level, this%NUM_hMG_LEVEL
182 call this%h_level(h_lev)%Init( h_lev, this%h_mesh_list(h_lev)%ptr, &
183 this%h_mesh_list, this%NUM_hMG_LEVEL, mesh_hierarchy_type_hmg )
184 end do
185
186 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().