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

module FElib / Fluid dyn solver / Atmosphere / HEVI / Common More...

Functions/Subroutines

subroutine, public atm_dyn_dgm_hevi_common_linalgebra_get_param (im, jm, nnode_h1d)
subroutine, public atm_dyn_dgm_hevi_common_linalgebra_solve_uv (d, b, g, nnode_v, im, jm, ne2d, is_top)
subroutine, public atm_dyn_dgm_hevi_common_linalgebra_solve_var3 (d, b, g, nnode_v, im, jm, ne2d, is_top)

Detailed Description

module FElib / Fluid dyn solver / Atmosphere / HEVI / Common

Description
Computational kernels associated with linear algebra for vertical implicit solvers
Author
Yuta Kawai, Xuanzhengbo Ren, and Team SCALE

Function/Subroutine Documentation

◆ atm_dyn_dgm_hevi_common_linalgebra_get_param()

subroutine, public scale_atm_dyn_dgm_hevi_common_linalgebra::atm_dyn_dgm_hevi_common_linalgebra_get_param ( integer, intent(out) im,
integer, intent(out) jm,
integer, intent(in) nnode_h1d )

Definition at line 49 of file scale_atm_dyn_dgm_hevi_common_linalgebra.F90.

50 implicit none
51 integer, intent(out) :: im
52 integer, intent(out) :: jm
53 integer, intent(in) :: Nnode_h1D
54 !-----------------------------------------------------------
55 select case(nnode_h1d)
56 case( 2 )
57 im = 4
58 case( 3 )
59 im = 9
60 case( 4 )
61 im = 16
62 case( 5 )
63 im = 5
64 case( 6 )
65 im = 6
66 case( 7 )
67 im = 7
68 case( 8 )
69 im = 8
70 case( 9 )
71 im = 9
72 case( 10 )
73 im = 10
74 case( 11 )
75 im = 22
76 case( 12 )
77 im = 24
78 case( 13 )
79 im = 26
80 case( 14 )
81 im = 28
82 case( 15 )
83 im = 15
84 case( 16 )
85 im = 16
86 end select
87 jm = nnode_h1d**2/im
88
89 return

Referenced by scale_atm_dyn_dgm_globalnonhydro3d_rhot_hevi::atm_dyn_dgm_globalnonhydro3d_rhot_hevi_cal_vi(), and scale_atm_dyn_dgm_nonhydro3d_rhot_hevi::atm_dyn_dgm_nonhydro3d_rhot_hevi_cal_vi().

◆ atm_dyn_dgm_hevi_common_linalgebra_solve_uv()

subroutine, public scale_atm_dyn_dgm_hevi_common_linalgebra::atm_dyn_dgm_hevi_common_linalgebra_solve_uv ( real(rp), dimension(im,nnode_v,nnode_v,jm,ne2d), intent(in) d,
real(rp), dimension(im,nnode_v,2,jm,ne2d), intent(inout) b,
real(rp), dimension(im,nnode_v,jm,ne2d), intent(inout) g,
integer, intent(in) nnode_v,
integer, intent(in) im,
integer, intent(in) jm,
integer, intent(in) ne2d,
logical, intent(in) is_top )

Definition at line 93 of file scale_atm_dyn_dgm_hevi_common_linalgebra.F90.

94 implicit none
95 integer, intent(in) :: Nnode_v
96 integer, intent(in) :: im, jm
97 integer, intent(in) :: Ne2D
98 real(RP), intent(in) :: D(im,Nnode_v,Nnode_v,jm,Ne2D)
99 real(RP), intent(inout) :: b(im,Nnode_v,2,jm,Ne2D)
100 real(RP), intent(inout) :: G(im,Nnode_v,jm,Ne2D)
101 logical, intent(in) :: is_top
102 !------------------------------------------
103 select case(nnode_v)
104 case( 2 )
105 if ( im == 4 ) then
106 call solve_nnode2_uv( d, b, g, nnode_v, jm, ne2d, is_top )
107 else
108 call solve_uv_im( d, b, g, nnode_v, im, jm, ne2d, is_top )
109 end if
110 case( 3 )
111 if ( im == 9 ) then
112 call solve_nnode3_uv( d, b, g, nnode_v, jm, ne2d, is_top )
113 else
114 call solve_uv_im( d, b, g, nnode_v, im, jm, ne2d, is_top )
115 end if
116 case( 4 )
117 if ( im == 16 ) then
118 call solve_nnode4_uv( d, b, g, nnode_v, jm, ne2d, is_top )
119 else
120 call solve_uv_im( d, b, g, nnode_v, im, jm, ne2d, is_top )
121 end if
122 case( 5 )
123 if ( im == 5 ) then
124 call solve_nnode5_uv( d, b, g, nnode_v, jm, ne2d, is_top )
125 else
126 call solve_uv_im( d, b, g, nnode_v, im, jm, ne2d, is_top )
127 end if
128 case( 6 )
129 if ( im == 6 ) then
130 call solve_nnode6_uv( d, b, g, nnode_v, jm, ne2d, is_top )
131 else
132 call solve_uv_im( d, b, g, nnode_v, im, jm, ne2d, is_top )
133 end if
134 case( 7 )
135 if ( im == 7 ) then
136 call solve_nnode7_uv( d, b, g, nnode_v, jm, ne2d, is_top )
137 else
138 call solve_uv_im( d, b, g, nnode_v, im, jm, ne2d, is_top )
139 end if
140 case( 8 )
141 if ( im == 8 ) then
142 call solve_nnode8_uv( d, b, g, nnode_v, jm, ne2d, is_top )
143 else
144 call solve_uv_im( d, b, g, nnode_v, im, jm, ne2d, is_top )
145 end if
146 case( 9 )
147 if ( im == 9 ) then
148 call solve_nnode9_uv( d, b, g, nnode_v, jm, ne2d, is_top )
149 else
150 call solve_uv_im( d, b, g, nnode_v, im, jm, ne2d, is_top )
151 end if
152 case( 10 )
153 if ( im == 10 ) then
154 call solve_nnode10_uv( d, b, g, nnode_v, jm, ne2d, is_top )
155 else
156 call solve_uv_im( d, b, g, nnode_v, im, jm, ne2d, is_top )
157 end if
158 case( 11 )
159 if ( im == 22 ) then
160 call solve_nnode11_uv( d, b, g, nnode_v, jm, ne2d, is_top )
161 else
162 call solve_uv_im( d, b, g, nnode_v, im, jm, ne2d, is_top )
163 end if
164 case( 12 )
165 if ( im == 24 ) then
166 call solve_nnode12_uv( d, b, g, nnode_v, jm, ne2d, is_top )
167 else
168 call solve_uv_im( d, b, g, nnode_v, im, jm, ne2d, is_top )
169 end if
170 case( 13 )
171 if ( im == 26 ) then
172 call solve_nnode13_uv( d, b, g, nnode_v, jm, ne2d, is_top )
173 else
174 call solve_uv_im( d, b, g, nnode_v, im, jm, ne2d, is_top )
175 end if
176 case( 14 )
177 if ( im == 28 ) then
178 call solve_nnode14_uv( d, b, g, nnode_v, jm, ne2d, is_top )
179 else
180 call solve_uv_im( d, b, g, nnode_v, im, jm, ne2d, is_top )
181 end if
182 case( 15 )
183 if ( im == 15 ) then
184 call solve_nnode15_uv( d, b, g, nnode_v, jm, ne2d, is_top )
185 else
186 call solve_uv_im( d, b, g, nnode_v, im, jm, ne2d, is_top )
187 end if
188 case( 16 )
189 if ( im == 16 ) then
190 call solve_nnode16_uv( d, b, g, nnode_v, jm, ne2d, is_top )
191 else
192 call solve_uv_im( d, b, g, nnode_v, im, jm, ne2d, is_top )
193 end if
194 case default
195 log_info('atm_dyn_dgm_hevi_common_linalgebra_solve_uv',*) "im > 16 is not supported. Check!"
196 call prc_abort
197 end select
198 return

Referenced by scale_atm_dyn_dgm_nonhydro3d_rhot_hevi_common_2::atm_dyn_dgm_nonhydro3d_rhot_hevi_common_solve_uv().

◆ atm_dyn_dgm_hevi_common_linalgebra_solve_var3()

subroutine, public scale_atm_dyn_dgm_hevi_common_linalgebra::atm_dyn_dgm_hevi_common_linalgebra_solve_var3 ( real(rp), dimension(im,3*nnode_v,3*nnode_v,jm,ne2d), intent(in) d,
real(rp), dimension(im,3*nnode_v,jm,ne2d), intent(inout) b,
real(rp), dimension(im,3*nnode_v,3,jm,ne2d), intent(inout) g,
integer, intent(in) nnode_v,
integer, intent(in) im,
integer, intent(in) jm,
integer, intent(in) ne2d,
logical, intent(in) is_top )

Definition at line 202 of file scale_atm_dyn_dgm_hevi_common_linalgebra.F90.

203 implicit none
204 integer, intent(in) :: Nnode_v
205 integer, intent(in) :: im, jm
206 integer, intent(in) :: Ne2D
207 real(RP), intent(in) :: D(im,3*Nnode_v,3*Nnode_v,jm,Ne2D)
208 real(RP), intent(inout) :: b(im,3*Nnode_v,jm,Ne2D)
209 real(RP), intent(inout) :: G(im,3*Nnode_v,3,jm,Ne2D)
210 logical, intent(in) :: is_top
211 !------------------------------------------
212 select case(nnode_v)
213 case( 2 )
214 if ( im == 4 ) then
215 call solve_nnode2_var3( d, b, g, nnode_v, jm, ne2d, is_top )
216 else
217 call solve_var3_im( d, b, g, nnode_v, im, jm, ne2d, is_top )
218 end if
219 case( 3 )
220 if ( im == 9 ) then
221 call solve_nnode3_var3( d, b, g, nnode_v, jm, ne2d, is_top )
222 else
223 call solve_var3_im( d, b, g, nnode_v, im, jm, ne2d, is_top )
224 end if
225 case( 4 )
226 if ( im == 16 ) then
227 call solve_nnode4_var3( d, b, g, nnode_v, jm, ne2d, is_top )
228 else
229 call solve_var3_im( d, b, g, nnode_v, im, jm, ne2d, is_top )
230 end if
231 case( 5 )
232 if ( im == 5 ) then
233 call solve_nnode5_var3( d, b, g, nnode_v, jm, ne2d, is_top )
234 else
235 call solve_var3_im( d, b, g, nnode_v, im, jm, ne2d, is_top )
236 end if
237 case( 6 )
238 if ( im == 6 ) then
239 call solve_nnode6_var3( d, b, g, nnode_v, jm, ne2d, is_top )
240 else
241 call solve_var3_im( d, b, g, nnode_v, im, jm, ne2d, is_top )
242 end if
243 case( 7 )
244 if ( im == 7 ) then
245 call solve_nnode7_var3( d, b, g, nnode_v, jm, ne2d, is_top )
246 else
247 call solve_var3_im( d, b, g, nnode_v, im, jm, ne2d, is_top )
248 end if
249 case( 8 )
250 if ( im == 8 ) then
251 call solve_nnode8_var3( d, b, g, nnode_v, jm, ne2d, is_top )
252 else
253 call solve_var3_im( d, b, g, nnode_v, im, jm, ne2d, is_top )
254 end if
255 case( 9 )
256 if ( im == 9 ) then
257 call solve_nnode9_var3( d, b, g, nnode_v, jm, ne2d, is_top )
258 else
259 call solve_var3_im( d, b, g, nnode_v, im, jm, ne2d, is_top )
260 end if
261 case( 10 )
262 if ( im == 10 ) then
263 call solve_nnode10_var3( d, b, g, nnode_v, jm, ne2d, is_top )
264 else
265 call solve_var3_im( d, b, g, nnode_v, im, jm, ne2d, is_top )
266 end if
267 case( 11 )
268 if ( im == 22 ) then
269 call solve_nnode11_var3( d, b, g, nnode_v, jm, ne2d, is_top )
270 else
271 call solve_var3_im( d, b, g, nnode_v, im, jm, ne2d, is_top )
272 end if
273 case( 12 )
274 if ( im == 24 ) then
275 call solve_nnode12_var3( d, b, g, nnode_v, jm, ne2d, is_top )
276 else
277 call solve_var3_im( d, b, g, nnode_v, im, jm, ne2d, is_top )
278 end if
279 case( 13 )
280 if ( im == 26 ) then
281 call solve_nnode13_var3( d, b, g, nnode_v, jm, ne2d, is_top )
282 else
283 call solve_var3_im( d, b, g, nnode_v, im, jm, ne2d, is_top )
284 end if
285 case( 14 )
286 if ( im == 28 ) then
287 call solve_nnode14_var3( d, b, g, nnode_v, jm, ne2d, is_top )
288 else
289 call solve_var3_im( d, b, g, nnode_v, im, jm, ne2d, is_top )
290 end if
291 case( 15 )
292 if ( im == 15 ) then
293 call solve_nnode15_var3( d, b, g, nnode_v, jm, ne2d, is_top )
294 else
295 call solve_var3_im( d, b, g, nnode_v, im, jm, ne2d, is_top )
296 end if
297 case( 16 )
298 if ( im == 16 ) then
299 call solve_nnode16_var3( d, b, g, nnode_v, jm, ne2d, is_top )
300 else
301 call solve_var3_im( d, b, g, nnode_v, im, jm, ne2d, is_top )
302 end if
303 case default
304 log_info('atm_dyn_dgm_hevi_common_linalgebra_solve',*) "im > 16 is not supported. Check!"
305 call prc_abort
306 end select
307 return

Referenced by scale_atm_dyn_dgm_nonhydro3d_rhot_hevi_common_2::atm_dyn_dgm_nonhydro3d_rhot_hevi_common_solve().