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 type, public, abstract :: elementoperationbase3d
32 class(elementbase3d), pointer :: elem3d
33 contains
34 procedure(elementoperationbase_final), deferred, public :: final
35 procedure(elementoperationbase_dx), deferred, public :: dx
36 procedure(elementoperationbase_dy), deferred, public :: dy
37 procedure(elementoperationbase_dz), deferred, public :: dz
38 procedure(elementoperationbase_lift), deferred, public :: lift
39 procedure(elementoperationbase_dxdydzlift), deferred, public :: dxdydzlift
40 procedure(elementoperationbase_div), deferred, public :: div
41 procedure(elementoperationbase_div_var5), deferred, public :: div_var5
42 procedure(elementoperationbase_div_var5_2), deferred, public :: div_var5_2
43 procedure(elementoperationbase_lift_var5), deferred, public :: lift_var5
44 procedure(elementoperationbase_vfilterpm1), deferred, public :: vfilterpm1
45 procedure(elementoperationbase_setup_modalfilter), deferred, public :: setup_modalfilter
46 procedure(elementoperationbase_setup_modalfilter_tracer), deferred, public :: setup_modalfilter_tracer
47 procedure(elementoperationbase_modalfilter_tracer), deferred, public :: modalfilter_tracer
48 procedure(elementoperationbase_modalfilter_var5), deferred, public :: modalfilter_var5
50 interface
51 subroutine elementoperationbase_final( this )
53 class(elementoperationbase3d), intent(inout) :: this
54 end subroutine elementoperationbase_final
55
56 subroutine elementoperationbase_dx( this, vec_in, vec_out )
58 import rp
59 class(elementoperationbase3d), intent(in) :: this
60 real(RP), intent(in) :: vec_in(this%elem3D%Np)
61 real(RP), intent(out) :: vec_out(this%elem3D%Np)
62 end subroutine elementoperationbase_dx
63
64 subroutine elementoperationbase_dy( this, vec_in, vec_out )
66 import rp
67 class(elementoperationbase3d), intent(in) :: this
68 real(RP), intent(in) :: vec_in(this%elem3D%Np)
69 real(RP), intent(out) :: vec_out(this%elem3D%Np)
70 end subroutine elementoperationbase_dy
71
72 subroutine elementoperationbase_dz( this, vec_in, vec_out )
74 import rp
75 class(elementoperationbase3d), intent(in) :: this
76 real(RP), intent(in) :: vec_in(this%elem3D%Np)
77 real(RP), intent(out) :: vec_out(this%elem3D%Np)
78 end subroutine elementoperationbase_dz
79
80 subroutine elementoperationbase_lift( this, vec_in, vec_out )
82 import rp
83 class(elementoperationbase3d), intent(in) :: this
84 real(RP), intent(in) :: vec_in(this%elem3D%NfpTot)
85 real(RP), intent(out) :: vec_out(this%elem3D%Np)
86 end subroutine elementoperationbase_lift
87
88 subroutine elementoperationbase_dxdydzlift( this, vec_in, vec_in_lift, vec_out_dx, vec_out_dy, vec_out_dz, vec_out_lift )
90 import rp
91 class(elementoperationbase3d), intent(in) :: this
92 real(RP), intent(in) :: vec_in(this%elem3D%Np)
93 real(RP), intent(in) :: vec_in_lift(this%elem3D%NfpTot)
94 real(RP), intent(out) :: vec_out_dx(this%elem3D%Np)
95 real(RP), intent(out) :: vec_out_dy(this%elem3D%Np)
96 real(RP), intent(out) :: vec_out_dz(this%elem3D%Np)
97 real(RP), intent(out) :: vec_out_lift(this%elem3D%Np)
98 end subroutine elementoperationbase_dxdydzlift
99
100 subroutine elementoperationbase_div( this, vec_in, vec_in_lift, &
101 vec_out )
103 import rp
104 class(elementoperationbase3d), intent(in) :: this
105 real(RP), intent(in) :: vec_in(this%elem3D%Np,3)
106 real(RP), intent(in) :: vec_in_lift(this%elem3D%NfpTot)
107 real(RP), intent(out) :: vec_out(this%elem3D%Np,4)
108 end subroutine elementoperationbase_div
109
110 subroutine elementoperationbase_div_var5( this, vec_in, vec_in_lift, &
111 vec_out_d )
113 import rp
114 class(elementoperationbase3d), intent(in) :: this
115 real(RP), intent(in) :: vec_in(this%elem3D%Np,3,5)
116 real(RP), intent(in) :: vec_in_lift(this%elem3D%NfpTot,5)
117 real(RP), intent(out) :: vec_out_d(this%elem3D%Np,4,5)
118 end subroutine elementoperationbase_div_var5
119
120 subroutine elementoperationbase_div_var5_2( this, vec_in, &
121 vec_out_d )
123 import rp
124 class(elementoperationbase3d), intent(in) :: this
125 real(RP), intent(in) :: vec_in(this%elem3D%Np,3,5)
126 real(RP), intent(out) :: vec_out_d(this%elem3D%Np,3,5)
127 end subroutine elementoperationbase_div_var5_2
128 subroutine elementoperationbase_lift_var5( this, vec_in, vec_out )
130 import rp
131 class(elementoperationbase3d), intent(in) :: this
132 real(RP), intent(in) :: vec_in(this%elem3D%NfpTot,5)
133 real(RP), intent(out) :: vec_out(this%elem3D%Np,5)
134 end subroutine elementoperationbase_lift_var5
135
136 subroutine elementoperationbase_vfilterpm1( this, vec_in, vec_out )
138 import rp
139 class(elementoperationbase3d), intent(in) :: this
140 real(RP), intent(in) :: vec_in(this%elem3D%Np)
141 real(RP), intent(out) :: vec_out(this%elem3D%Np)
142 end subroutine elementoperationbase_vfilterpm1
143
144 subroutine elementoperationbase_setup_modalfilter( this, &
145 MF_ETAC_h, MF_ALPHA_h, MF_ORDER_h, &
146 MF_ETAC_v, MF_ALPHA_v, MF_ORDER_v )
148 import rp
149 class(elementoperationbase3d), intent(inout) :: this
150 real(RP), intent(in) :: MF_ETAC_h
151 real(RP), intent(in) :: MF_ALPHA_h
152 integer, intent(in) :: MF_ORDER_h
153 real(RP), intent(in) :: MF_ETAC_v
154 real(RP), intent(in) :: MF_ALPHA_v
155 integer, intent(in) :: MF_ORDER_v
156 end subroutine elementoperationbase_setup_modalfilter
157
158 subroutine elementoperationbase_setup_modalfilter_tracer( this, &
159 MF_ETAC_h, MF_ALPHA_h, MF_ORDER_h, &
160 MF_ETAC_v, MF_ALPHA_v, MF_ORDER_v )
162 import rp
163 class(elementoperationbase3d), intent(inout) :: this
164 real(RP), intent(in) :: MF_ETAC_h
165 real(RP), intent(in) :: MF_ALPHA_h
166 integer, intent(in) :: MF_ORDER_h
167 real(RP), intent(in) :: MF_ETAC_v
168 real(RP), intent(in) :: MF_ALPHA_v
169 integer, intent(in) :: MF_ORDER_v
170 end subroutine elementoperationbase_setup_modalfilter_tracer
171
172 subroutine elementoperationbase_modalfilter_tracer( this, vec_in, vec_work, vec_out )
174 import rp
175 class(elementoperationbase3d), intent(in) :: this
176 real(RP), intent(in) :: vec_in(this%elem3D%Np)
177 real(RP), intent(out) :: vec_work(this%elem3D%Np)
178 real(RP), intent(out) :: vec_out(this%elem3D%Np)
179 end subroutine elementoperationbase_modalfilter_tracer
180
181 subroutine elementoperationbase_modalfilter_var5( this, vec_in, vec_work, vec_out )
183 import rp
184 class(elementoperationbase3d), intent(in) :: this
185 real(RP), intent(in) :: vec_in(this%elem3D%Np,5)
186 real(RP), intent(out) :: vec_work(this%elem3D%Np)
187 real(RP), intent(out) :: vec_out(this%elem3D%Np,5)
188 end subroutine elementoperationbase_modalfilter_var5
189
190 end interface
191contains
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
Derived type representing a 3D reference element.