127 rk_scheme_name, nstage, imex_flag, & ! (in)
128 coef_a_ex, coef_b_ex, coef_c_ex, &
129 coef_sig_ex, coef_gam_ex, &
130 coef_a_im, coef_b_im, coef_c_im, &
134 character(len=*),
intent(in) :: rk_scheme_name
135 integer,
intent(in) :: nstage
136 logical,
intent(in) :: imex_flag
137 real(rp),
intent(out) :: coef_a_ex(nstage,nstage)
138 real(rp),
intent(out) :: coef_b_ex(nstage)
139 real(rp),
intent(out) :: coef_c_ex(nstage)
140 real(rp),
intent(out) :: coef_sig_ex(nstage+1,nstage)
141 real(rp),
intent(out) :: coef_gam_ex(nstage+1,nstage)
142 real(rp),
intent(out) :: coef_a_im(nstage,nstage)
143 real(rp),
intent(out) :: coef_b_im(nstage)
144 real(rp),
intent(out) :: coef_c_im(nstage)
145 integer,
intent(out) :: tend_buf_indmap(nstage)
148 real(rp) :: alp, gam, del
149 logical :: call_shuosher2butcher
153 coef_a_ex(:,:) = 0.0_rp
154 coef_b_ex(:) = 0.0_rp
155 coef_c_ex(:) = 0.0_rp
157 coef_sig_ex(:,:) = 0.0_rp
158 coef_gam_ex(:,:) = 0.0_rp
161 coef_a_im(:,:) = 0.0_rp
162 coef_b_im(:) = 0.0_rp
163 coef_c_im(:) = 0.0_rp
166 call_shuosher2butcher = .false.
170 select case(rk_scheme_name)
171 case(
'ERK_1s1o',
'ERK_Euler' )
173 coef_a_ex(1,1) = 0.0_rp
174 coef_b_ex(:) = (/ 1.0_rp /)
176 coef_sig_ex(2,1 ) = 1.0_rp
177 coef_gam_ex(2,1 ) = 1.0_rp
179 tend_buf_indmap(:) = 1
181 case(
'ERK_4s4o',
'ERK_RK4' )
183 coef_a_ex(2,1) = 0.5_rp
184 coef_a_ex(3,2) = 0.5_rp
185 coef_a_ex(4,3) = 1.0_rp
186 coef_b_ex(:) = (/ 1.0_rp, 2.0_rp, 2.0_rp, 1.0_rp /)/6.0_rp
188 tend_buf_indmap(:) = 1
190 case(
'ERK_SSP_2s2o' )
192 coef_sig_ex(2,1 ) = 1.0_rp
193 coef_sig_ex(3,1:2) = (/ 1.0_rp, 1.0_rp /) / 2.0_rp
194 coef_gam_ex(2,1 ) = 1.0_rp
195 coef_gam_ex(3,2 ) = 1.0_rp / 2.0_rp
197 tend_buf_indmap(:) = 1
198 call_shuosher2butcher = .true.
200 case(
'ERK_SSP_3s3o' )
202 coef_sig_ex(2,1 ) = 1.0_rp
203 coef_sig_ex(3,1:2) = (/ 3.0_rp, 1.0_rp /) / 4.0_rp
204 coef_sig_ex(4,1:3) = (/ 1.0_rp, 0.0_rp, 2.0_rp /) / 3.0_rp
205 coef_gam_ex(2,1 ) = 1.0_rp
206 coef_gam_ex(3,2 ) = 1.0_rp / 4.0_rp
207 coef_gam_ex(4,3 ) = 2.0_rp / 3.0_rp
209 tend_buf_indmap(:) = 1
210 call_shuosher2butcher = .true.
212 case(
'ERK_SSP_4s3o' )
214 coef_sig_ex(2,1 ) = 1.0_rp
215 coef_sig_ex(3,1:2) = (/ 0.0_rp, 1.0_rp /)
216 coef_sig_ex(4,1:3) = (/ 2.0_rp, 0.0_rp, 1.0_rp /) / 3.0_rp
217 coef_sig_ex(5,1:4) = (/ 0.0_rp, 0.0_rp, 0.0_rp, 1.0_rp /)
218 coef_gam_ex(2,1 ) = 0.5_rp
219 coef_gam_ex(3,2 ) = 0.5_rp
220 coef_gam_ex(4,3 ) = 1.0_rp / 6.0_rp
221 coef_gam_ex(5,4 ) = 0.5_rp
223 tend_buf_indmap(:) = 1
224 call_shuosher2butcher = .true.
226 case(
'ERK_SSP_5s3o_2N2*' )
228 coef_sig_ex(2,1 ) = 1.0_rp
229 coef_sig_ex(3,1:2) = (/ 0.0_rp, 1.0_rp /)
230 coef_sig_ex(4,1:3) = (/ 0.682342861037239_rp, 0.0_rp, 0.317657138962761_rp /)
231 coef_sig_ex(5,1:4) = (/ 0.0_rp, 0.0_rp, 0.0_rp, 1.0_rp /)
232 coef_sig_ex(6,1:5) = (/ 0.045230974482400_rp, 0.0_rp, 0.0_rp, 0.0_rp, 0.954769025517600_rp /)
233 coef_gam_ex(2,1 ) = 0.465388589249323_rp
234 coef_gam_ex(3,2 ) = 0.465388589249323_rp
235 coef_gam_ex(4,3 ) = 0.124745797313998_rp
236 coef_gam_ex(5,4 ) = 0.465388589249323_rp
237 coef_gam_ex(6,5 ) = 0.154263303748666_rp
239 tend_buf_indmap(:) = 1
240 call_shuosher2butcher = .true.
242 case(
'ERK_SSP_10s4o_2N' )
245 coef_sig_ex(n+1,n) = 1.0_rp
246 coef_gam_ex(n+1,n) = 1.0_rp / 6.0_rp
248 coef_sig_ex(6,1:5) = (/ 3.0_rp, 0.0_rp, 0.0_rp, 0.0_rp, 2.0_rp /) / 5.0_rp
249 coef_gam_ex(6,5 ) = 1.0_rp / 15.0_rp
251 coef_sig_ex(n+1,n) = 1.0_rp
252 coef_gam_ex(n+1,n) = 1.0_rp / 6.0_rp
254 coef_sig_ex(11,1:10) = (/ 0.2_rp, 0.0_rp, 0.0_rp, 0.0_rp, 1.8_rp, 0.0_rp, 0.0_rp, 0.0_rp, 0.0_rp, 3.0_rp /) * 0.2_rp
255 coef_gam_ex(11,1:10) = (/ 0.0_rp, 0.0_rp, 0.0_rp, 0.0_rp, 1.8_rp, 0.0_rp, 0.0_rp, 0.0_rp, 0.0_rp, 3.0_rp /) / 30.0_rp
257 tend_buf_indmap(:) = 1
258 call_shuosher2butcher = .true.
262 alp = (3.0_rp + 2.0_rp*sqrt(2.0_rp))/6.0_rp
263 gam = 1.0_rp - 1.0_rp/sqrt(2.0_rp)
264 del = 1.0_rp/(2.0_rp*sqrt(2.0_rp))
266 coef_a_ex(2,1) = 2.0_rp*gam
267 coef_a_ex(3,:) = (/ 1.0_rp - alp, alp, 0.0_rp /)
268 coef_b_ex(:) = (/ del, del, gam /)
270 coef_a_im(2,:) = (/ gam, gam, 0.0_rp /)
271 coef_a_im(3,:) = (/ del, del, gam /)
272 coef_b_im(:) = coef_b_ex(:)
274 tend_buf_indmap(:) = (/ 1, 2, 3 /)
278 coef_a_ex(2,1) = 1767732205903.0_rp/2027836641118.0_rp
279 coef_a_ex(3,1) = 5535828885825.0_rp/10492691773637.0_rp
280 coef_a_ex(3,2) = 788022342437.0_rp/10882634858940.0_rp
281 coef_a_ex(4,1) = 6485989280629.0_rp/16251701735622.0_rp
282 coef_a_ex(4,2) = -4246266847089.0_rp/9704473918619.0_rp
283 coef_a_ex(4,3) = 10755448449292.0_rp/10357097424841.0_rp
284 coef_b_ex(1) = 1471266399579.0_rp/7840856788654.0_rp
285 coef_b_ex(2) = -4482444167858.0_rp/7529755066697.0_rp
286 coef_b_ex(3) = 11266239266428.0_rp/11593286722821.0_rp
287 coef_b_ex(4) = 1767732205903.0_rp/4055673282236.0_rp
289 coef_a_im(2,1:2) = 1767732205903.0_rp/4055673282236.0_rp
290 coef_a_im(3,1) = 2746238789719.0_rp/10658868560708.0_rp
291 coef_a_im(3,2) = -640167445237.0_rp/6845629431997.0_rp
292 coef_a_im(3,3) = 1767732205903.0_rp/4055673282236.0_rp
293 coef_a_im(4,:) = coef_b_ex(:)
294 coef_b_im(:) = coef_b_ex(:)
296 tend_buf_indmap(:) = (/ 1, 2, 3, 4 /)
299 log_error(
"timeint_rk_butcher_tab_get",*) trim(rk_scheme_name)//
' is not supported. Check!'
305 if ( call_shuosher2butcher )
then
306 call shuosher2butcher( &
307 coef_sig_ex, coef_gam_ex, nstage, &
308 coef_a_ex, coef_b_ex )
312 coef_c_ex(:) = 0.0_rp
314 coef_c_ex(n) = sum( coef_a_ex(n,1:n) )
316 if ( imex_flag )
then
317 coef_c_ex(:) = 0.0_rp
319 coef_c_ex(n) = sum( coef_a_ex(n,1:n) )