FE-Project
Loading...
Searching...
No Matches
scale_element_operation_base.F90
Go to the documentation of this file.
1
2!-------------------------------------------------------------------------------
3!> module FElib / Element / Operation / Base
4!!
5!! @par Description
6!! A base module for providing mathematical operations
7!!
8!! @author Yuta Kawai, Xuanzhengbo Ren, and Team SCALE
9!!
10!<
11#include "scaleFElib.h"
13
14 !-----------------------------------------------------------------------------
15 !
16 !++ used modules
17 !
18 use scale_precision
19
20 use scale_element_base, only: &
23 !-----------------------------------------------------------------------------
24 implicit none
25 private
26
27 !-----------------------------------------------------------------------------
28 !
29 !++ Public type & procedure
30 !
31
32 !> Base type for elementwise operations
33 type, public, abstract :: elementoperationbase3d
34 class(elementbase3d), pointer :: elem3d !< Pointer to an object of 3D element
35 integer :: operator_type !< Type of operator (e.g., general, tensor-product)
36 contains
37 procedure(elementoperationbase_final), deferred, public :: final
38 procedure(elementoperationbase_dx), deferred, public :: dx
39 procedure(elementoperationbase_dy), deferred, public :: dy
40 procedure(elementoperationbase_dz), deferred, public :: dz
41 procedure(elementoperationbase_lift), deferred, public :: lift
42 procedure(elementoperationbase_dxdydzlift), deferred, public :: dxdydzlift
43 procedure(elementoperationbase_div), deferred, public :: div
44 procedure(elementoperationbase_div_var5), deferred, public :: div_var5
45 procedure(elementoperationbase_div_var5_2), deferred, public :: div_var5_2
46 procedure(elementoperationbase_lift_var5), deferred, public :: lift_var5
47 procedure(elementoperationbase_vfilterpm1), deferred, public :: vfilterpm1
48 procedure(elementoperationbase_setup_modalfilter), deferred, public :: setup_modalfilter
49 procedure(elementoperationbase_setup_modalfilter_tracer), deferred, public :: setup_modalfilter_tracer
50 procedure(elementoperationbase_modalfilter_tracer), deferred, public :: modalfilter_tracer
51 procedure(elementoperationbase_modalfilter_var5), deferred, public :: modalfilter_var5
53 interface
54 subroutine elementoperationbase_final( this )
56 class(elementoperationbase3d), intent(inout) :: this
57 end subroutine elementoperationbase_final
58
59 subroutine elementoperationbase_dx( this, vec_in, vec_out )
61 import rp
62 class(elementoperationbase3d), intent(in) :: this
63 real(RP), intent(in) :: vec_in(this%elem3D%Np)
64 real(RP), intent(out) :: vec_out(this%elem3D%Np)
65 end subroutine elementoperationbase_dx
66
67 subroutine elementoperationbase_dy( this, vec_in, vec_out )
69 import rp
70 class(elementoperationbase3d), intent(in) :: this
71 real(RP), intent(in) :: vec_in(this%elem3D%Np)
72 real(RP), intent(out) :: vec_out(this%elem3D%Np)
73 end subroutine elementoperationbase_dy
74
75 subroutine elementoperationbase_dz( this, vec_in, vec_out )
77 import rp
78 class(elementoperationbase3d), intent(in) :: this
79 real(RP), intent(in) :: vec_in(this%elem3D%Np)
80 real(RP), intent(out) :: vec_out(this%elem3D%Np)
81 end subroutine elementoperationbase_dz
82
83 subroutine elementoperationbase_lift( this, vec_in, vec_out )
85 import rp
86 class(elementoperationbase3d), intent(in) :: this
87 real(RP), intent(in) :: vec_in(this%elem3D%NfpTot)
88 real(RP), intent(out) :: vec_out(this%elem3D%Np)
89 end subroutine elementoperationbase_lift
90
91 subroutine elementoperationbase_dxdydzlift( this, vec_in, vec_in_lift, vec_out_dx, vec_out_dy, vec_out_dz, vec_out_lift )
93 import rp
94 class(elementoperationbase3d), intent(in) :: this
95 real(RP), intent(in) :: vec_in(this%elem3D%Np)
96 real(RP), intent(in) :: vec_in_lift(this%elem3D%NfpTot)
97 real(RP), intent(out) :: vec_out_dx(this%elem3D%Np)
98 real(RP), intent(out) :: vec_out_dy(this%elem3D%Np)
99 real(RP), intent(out) :: vec_out_dz(this%elem3D%Np)
100 real(RP), intent(out) :: vec_out_lift(this%elem3D%Np)
101 end subroutine elementoperationbase_dxdydzlift
102
103 subroutine elementoperationbase_div( this, vec_in, vec_in_lift, &
104 vec_out )
106 import rp
107 class(elementoperationbase3d), intent(in) :: this
108 real(RP), intent(in) :: vec_in(this%elem3D%Np,3)
109 real(RP), intent(in) :: vec_in_lift(this%elem3D%NfpTot)
110 real(RP), intent(out) :: vec_out(this%elem3D%Np,4)
111 end subroutine elementoperationbase_div
112
113 subroutine elementoperationbase_div_var5( this, vec_in, vec_in_lift, &
114 vec_out_d )
116 import rp
117 class(elementoperationbase3d), intent(in) :: this
118 real(RP), intent(in) :: vec_in(this%elem3D%Np,3,5)
119 real(RP), intent(in) :: vec_in_lift(this%elem3D%NfpTot,5)
120 real(RP), intent(out) :: vec_out_d(this%elem3D%Np,4,5)
121 end subroutine elementoperationbase_div_var5
122
123 subroutine elementoperationbase_div_var5_2( this, vec_in, &
124 vec_out_d )
126 import rp
127 class(elementoperationbase3d), intent(in) :: this
128 real(RP), intent(in) :: vec_in(this%elem3D%Np,3,5)
129 real(RP), intent(out) :: vec_out_d(this%elem3D%Np,3,5)
130 end subroutine elementoperationbase_div_var5_2
131 subroutine elementoperationbase_lift_var5( this, vec_in, vec_out )
133 import rp
134 class(elementoperationbase3d), intent(in) :: this
135 real(RP), intent(in) :: vec_in(this%elem3D%NfpTot,5)
136 real(RP), intent(out) :: vec_out(this%elem3D%Np,5)
137 end subroutine elementoperationbase_lift_var5
138
139 subroutine elementoperationbase_vfilterpm1( this, vec_in, vec_out )
141 import rp
142 class(elementoperationbase3d), intent(in) :: this
143 real(RP), intent(in) :: vec_in(this%elem3D%Np)
144 real(RP), intent(out) :: vec_out(this%elem3D%Np)
145 end subroutine elementoperationbase_vfilterpm1
146
147 subroutine elementoperationbase_setup_modalfilter( this, &
148 MF_ETAC_h, MF_ALPHA_h, MF_ORDER_h, &
149 MF_ETAC_v, MF_ALPHA_v, MF_ORDER_v )
151 import rp
152 class(elementoperationbase3d), intent(inout) :: this
153 real(RP), intent(in) :: MF_ETAC_h
154 real(RP), intent(in) :: MF_ALPHA_h
155 integer, intent(in) :: MF_ORDER_h
156 real(RP), intent(in) :: MF_ETAC_v
157 real(RP), intent(in) :: MF_ALPHA_v
158 integer, intent(in) :: MF_ORDER_v
159 end subroutine elementoperationbase_setup_modalfilter
160
161 subroutine elementoperationbase_setup_modalfilter_tracer( this, &
162 MF_ETAC_h, MF_ALPHA_h, MF_ORDER_h, &
163 MF_ETAC_v, MF_ALPHA_v, MF_ORDER_v )
165 import rp
166 class(elementoperationbase3d), intent(inout) :: this
167 real(RP), intent(in) :: MF_ETAC_h
168 real(RP), intent(in) :: MF_ALPHA_h
169 integer, intent(in) :: MF_ORDER_h
170 real(RP), intent(in) :: MF_ETAC_v
171 real(RP), intent(in) :: MF_ALPHA_v
172 integer, intent(in) :: MF_ORDER_v
173 end subroutine elementoperationbase_setup_modalfilter_tracer
174
175 subroutine elementoperationbase_modalfilter_tracer( this, vec_in, vec_work, vec_out )
177 import rp
178 class(elementoperationbase3d), intent(in) :: this
179 real(RP), intent(in) :: vec_in(this%elem3D%Np)
180 real(RP), intent(out) :: vec_work(this%elem3D%Np)
181 real(RP), intent(out) :: vec_out(this%elem3D%Np)
182 end subroutine elementoperationbase_modalfilter_tracer
183
184 subroutine elementoperationbase_modalfilter_var5( this, vec_in, vec_work, vec_out )
186 import rp
187 class(elementoperationbase3d), intent(in) :: this
188 real(RP), intent(in) :: vec_in(this%elem3D%Np,5)
189 real(RP), intent(out) :: vec_work(this%elem3D%Np)
190 real(RP), intent(out) :: vec_out(this%elem3D%Np,5)
191 end subroutine elementoperationbase_modalfilter_var5
192
193 end interface
194
195 !-----------------------------------------------------------------------------
196 !
197 !++ Public parameters
198 !
199
200 integer, public :: element_operator_type_general = 1 !< Type ID of general operator
201 integer, public :: element_operator_type_tensorprod3d = 2 !< Type ID of tensor-product operator for 3D elements
202contains
module FElib / Element / Base
subroutine, public elementbase3d_init(elem, lumpedmat_flag)
Initialize an object to manage a 3D reference element.
subroutine, public elementbase3d_final(elem)
Finalize an object to manage a 3D reference element.
module FElib / Element / Operation / Base
integer, public element_operator_type_general
Type ID of general operator.
integer, public element_operator_type_tensorprod3d
Type ID of tensor-product operator for 3D elements.
Derived type representing a 3D reference element.