9.2
general documentation
cs_runge_kutta_integrator.h
Go to the documentation of this file.
1#ifndef RK_INTEGRATOR_H
2#define RK_INTEGRATOR_H
3
4/*============================================================================
5 * Explicit Runge-Kutta integrator utilities.
6 *============================================================================*/
7
8/*
9 This file is part of code_saturne, a general-purpose CFD tool.
10
11 Copyright (C) 1998-2026 EDF S.A.
12
13 This program is free software; you can redistribute it and/or modify it under
14 the terms of the GNU General Public License as published by the Free Software
15 Foundation; either version 2 of the License, or (at your option) any later
16 version.
17
18 This program is distributed in the hope that it will be useful, but WITHOUT
19 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
20 FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
21 details.
22
23 You should have received a copy of the GNU General Public License along with
24 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
25 Street, Fifth Floor, Boston, MA 02110-1301, USA.
26*/
27
28/*----------------------------------------------------------------------------*/
29
30#include "base/cs_defs.h"
31
32/*----------------------------------------------------------------------------
33 * Standard C library headers
34 *----------------------------------------------------------------------------*/
35
36#include <assert.h>
37#include <stdarg.h>
38#include <stdio.h>
39#include <stdlib.h>
40#include <string.h>
41
42/*----------------------------------------------------------------------------
43 * Local headers
44 *----------------------------------------------------------------------------*/
45
46#include "alge/cs_balance.h"
47#include "alge/cs_blas.h"
48
49#include "base/cs_array.h"
50#include "base/cs_base_accel.h"
52#include "base/cs_dispatch.h"
53#include "mesh/cs_mesh.h"
54
55/*----------------------------------------------------------------------------
56 * Header for the current file
57 *----------------------------------------------------------------------------*/
58
60
61/*============================================================================
62 * Type definitions
63 *============================================================================*/
64
65/*----------------------------------------------------------------------------*/
66
67namespace cs {
68
69/*----------------------------------------------------------------------------*/
73/*----------------------------------------------------------------------------*/
74
76
77 /*===========================================================================
78 * Public methods
79 *==========================================================================*/
80
81public:
82
83 /*--------------------------------------------------------------------------*/
87 /*--------------------------------------------------------------------------*/
88
91 {}
92
93 /*--------------------------------------------------------------------------*/
97 /*--------------------------------------------------------------------------*/
98
101 (
103 const char *name,
105 const cs_real_t *dt,
106 int dim,
108 )
109 {
110 _scheme = scheme;
111 CS_MALLOC(_name, strlen(name) + 1, char);
112 strcpy(_name, name);
113
114 _dt.update_data(const_cast<cs_real_t *>(dt), n_elts);
115
116 _stride = dim;
117 _n_elts = n_elts;
118 _n_stages = 1;
119 _i_stage = 0;
120
122 _c.reshape(RK_HIGHEST_ORDER);
123
124 init_scheme_();
125
126 _rhs_stages.reshape(_n_stages, _n_elts, _stride);
127 _u_old.reshape(_n_elts, _stride);
128 _u_new.reshape(_n_elts, _stride);
129 _mass.reshape(_n_elts);
130 }
131
132 /*--------------------------------------------------------------------------*/
136 /*--------------------------------------------------------------------------*/
137
140 {
141 CS_FREE(_name);
142 }
143
144 /*--------------------------------------------------------------------------*/
148 /*--------------------------------------------------------------------------*/
149
151 void
153 (
155 const cs_real_t *rho,
157 const cs_real_t *vol,
158 cs_real_t *pvara
160 )
161 {
162 _i_stage = 0;
163
164 auto mass = _mass.view();
165 auto u_old = _u_old.view();
166 const int stride = _stride;
167
168 ctx.parallel_for(_n_elts, CS_LAMBDA (cs_lnum_t e_id) {
169 mass[e_id] = rho[e_id] * vol[e_id];
170 for (cs_lnum_t i = 0; i < stride; i++)
171 u_old(e_id, i) = pvara[stride*e_id + i];
172 });
173 ctx.wait();
174 }
175
176 /*--------------------------------------------------------------------------*/
180 /*--------------------------------------------------------------------------*/
181
183 void
185 (
187 cs_real_t *pvar_stage
189 )
190 {
191 auto dt = _dt.view_1d();
192 auto mass = _mass.view();
193
194 const int i_stg = _i_stage;
195 const int stride = _stride;
196
197 auto u0 = _u_old.view();
198 auto u_new = _u_new.view();
199 auto rhs_stage = _rhs_stages.view();
200
201 const auto a = _a.sub_view(i_stg);
202
203 ctx.parallel_for(_n_elts, CS_LAMBDA (cs_lnum_t e_id) {
204 for (cs_lnum_t i = 0; i < stride; i++)
205 u_new(e_id, i) = u0(e_id, i);
206
207 for (int j_stg = 0; j_stg <= i_stg; j_stg++) {
208 for (cs_lnum_t i = 0; i < stride; i++)
209 u_new(e_id, i) += rhs_stage(j_stg, e_id, i)* a[j_stg] * dt[e_id]
210 / mass[e_id];
211 }
212
213 for (cs_lnum_t i = 0; i < stride; i++)
214 pvar_stage[stride*e_id + i] = u_new(e_id, i);
215 });
216
217 ctx.wait();
218
219 _i_stage += 1;
220 }
221
222 /*--------------------------------------------------------------------------*/
226 /*--------------------------------------------------------------------------*/
227
229 void
231 (
233 cs_real_t *grad_dp
234 )
235 {
236 const int i_stg = _i_stage - 1;
237 const auto a = _a.sub_view(i_stg);
238
239 auto rhs = _rhs_stages.sub_view(i_stg);
240 auto mass = _mass.view();
241 const int stride = _stride;
242
243 ctx.parallel_for(_n_elts, CS_LAMBDA (cs_lnum_t e_id) {
244 for (cs_lnum_t i = 0; i < stride; i++) {
245 rhs(e_id, i) -= grad_dp[stride*e_id + i] * mass[e_id];
246 grad_dp[stride*e_id + i] *= a[i_stg];
247 }
248 });
249 }
250
251 /*--------------------------------------------------------------------------*/
260 /*--------------------------------------------------------------------------*/
261
263 void
265 (
267 cs_real_t *rhs_pvar
268 )
269 {
270 const int i_stg = _i_stage;
271 auto rhs = _rhs_stages.sub_view(i_stg);
272 const int stride = _stride;
273
274 ctx.parallel_for(_n_elts, CS_LAMBDA (cs_lnum_t e_id) {
275 for (cs_lnum_t i = 0; i < stride; i++)
276 rhs(e_id, i) = rhs_pvar[stride*e_id + i];
277 });
278 }
279
280 /*--------------------------------------------------------------------------*/
286 /*--------------------------------------------------------------------------*/
287
289 inline bool
290 is_active() const
291 {
292 return (_scheme > CS_RK_NONE);
293 }
294
295 /*--------------------------------------------------------------------------*/
301 /*--------------------------------------------------------------------------*/
302
304 inline bool
306 {
307 return (_i_stage < _n_stages);
308 }
309
310 /*--------------------------------------------------------------------------*/
316 /*--------------------------------------------------------------------------*/
317
320 scheme() const
321 {
322 return _scheme;
323 }
324
325 /*--------------------------------------------------------------------------*/
331 /*--------------------------------------------------------------------------*/
332
334 inline cs_lnum_t
335 n_elts() const
336 {
337 return _n_elts;
338 }
339
340 /*--------------------------------------------------------------------------*/
346 /*--------------------------------------------------------------------------*/
347
349 inline int
350 i_stage() const
351 {
352 return _i_stage;
353 }
354
355 /*--------------------------------------------------------------------------*/
361 /*--------------------------------------------------------------------------*/
362
364 inline int
365 stride() const
366 {
367 return _stride;
368 }
369
370 /*--------------------------------------------------------------------------*/
376 /*--------------------------------------------------------------------------*/
377
379 cs_real_t *
381 (
382 int stage_id
383 )
384 {
385 return _rhs_stages.sub_array(stage_id);
386 }
387
388 /*--------------------------------------------------------------------------*/
394 /*--------------------------------------------------------------------------*/
398 (
399 int i
400 )
401 {
402 return _a.sub_view(i);
403 }
404
405private:
406
407 /*===========================================================================
408 * Private methods
409 *==========================================================================*/
410
411 /*--------------------------------------------------------------------------*/
419 /*--------------------------------------------------------------------------*/
420
422 void
423 init_scheme_()
424 {
425 _a.zero();
426 _c.zero();
427
428 switch (_scheme) {
429 case CS_RK_NONE:
430 return;
431
432 case CS_RK1:
433 _n_stages = 1;
434 _a(0, 0) = 1.;
435 _c[0] = 1.;
436
437 break;
438
439 case CS_RK2:
440 [[fallthrough]];
441 case CS_RK2_HEUN:
442 _n_stages = 2;
443 _a(0,0) = 1.;
444 _a(1,0) = 0.5, _a(1,1) = 0.5;
445
446 _c[0] = 1.;
447 _c[1] = 1.;
448
449 break;
450
451 case CS_RK2_MP:
452 _n_stages = 2;
453 _a(0,0) = 0.5;
454 _a(1,0) = 0. , _a(1,1) = 1.;
455
456 _c[0] = 0.5;
457 _c[1] = 1.;
458
459 break;
460
461 case CS_RK3:
462 [[fallthrough]];
463 case CS_RK3_WRAY:
464 _n_stages = 3;
465
466 _a(0,0) = 8. / 15.;
467 _a(1,0) = 1./4., _a(1,1) = 5./12.;
468 _a(2,0) = 1./4., _a(2,1) = 0., _a(2,2) = 3./4.;
469
470 _c[0] = 8./15.;
471 _c[1] = 2./3.;
472 _c[2] = 1.;
473
474 break;
475
476 case CS_RK3_SSP:
477 _n_stages = 3;
478 _a(0,0) = 1.;
479 _a(1,0) = 1./4., _a(1,1) = 1./4.;
480 _a(2,0) = 1./6., _a(2,1) = 1./6., _a(2,2) = 2./3.;
481
482 _c[0] = 1.;
483 _c[1] = 1./2.;
484 _c[2] = 1.;
485
486 break;
487
488 case CS_RK4:
489 _n_stages = 4;
490 _a(0,0) = 1.;
491 _a(1,0) = 3./8., _a(1,1) = 1./8.;
492 _a(2,0) = -1./8., _a(2,1) = -3./8., _a(2,2) = 3./2.;
493 _a(3,0) = 1./6., _a(3,1) = -1./18., _a(3,2) = 2./3., _a(3,3) = 2./9.;
494
495 _c[0] = 1.;
496 _c[1] = 1./2.;
497 _c[2] = 1.;
498 _c[3] = 1.;
499
500 break;
501
502 default:
503 bft_error(__FILE__, __LINE__, 0,
504 "%s: Type of Runge-Kutta not available.\n"
505 "%s: Stop building Runge-Kutta integrator.\n",
506 __func__, __func__);
507 break;
508 }
509 }
510
511 /*===========================================================================
512 * Private members
513 *==========================================================================*/
514
516 char *_name{nullptr};
518 int _n_stages{0};
519 int _i_stage{0};
522 int _stride{0};
523 cs_lnum_t _n_elts{0};
526 /* variable storage */
530 cs_array_3d<cs_real_t> _rhs_stages;
531 cs_array<cs_real_t> _mass;
534 /* Coeffients adapted from the Butcher tableau */
537};
538}
539
541
542/*============================================================================
543 * Global variables
544 *============================================================================*/
545
546/*=============================================================================
547 * Public function prototypes
548 *============================================================================*/
549
550/*----------------------------------------------------------------------------*/
562/*----------------------------------------------------------------------------*/
563
564int
566 const char *name,
567 const cs_real_t *dt,
568 int dim,
569 cs_lnum_t n_elts);
570
571/*----------------------------------------------------------------------------*/
575/*----------------------------------------------------------------------------*/
576
577void
579
580/*----------------------------------------------------------------------------*/
588/*----------------------------------------------------------------------------*/
589
590void
593 cs_real_t *phi_stage);
594
595/*----------------------------------------------------------------------------*/
646/*----------------------------------------------------------------------------*/
647
648void
652 int idtvar,
653 int f_id,
654 int imucpp,
656 cs_field_bc_coeffs_t *bc_coeffs,
657 const cs_real_t i_massflux[],
658 const cs_real_t b_massflux[],
659 const cs_real_t i_visc[],
660 const cs_real_t b_visc[],
661 cs_real_t viscel[][6],
662 const cs_real_t weighf[][2],
663 const cs_real_t weighb[],
664 int icvflb,
665 const int icvfli[],
666 cs_real_t pvar[],
667 const cs_real_t xcpp[]);
668
669/*----------------------------------------------------------------------------*/
729/*----------------------------------------------------------------------------*/
730
731template<int stride>
732void
735 int idtvar,
736 int f_id,
737 int ivisep,
739 cs_field_bc_coeffs_t *bc_coeffs,
740 const cs_real_t i_massflux[],
741 const cs_real_t b_massflux[],
742 const cs_real_t i_visc[],
743 const cs_real_t b_visc[],
744 const cs_real_t i_secvis[],
745 const cs_real_t b_secvis[],
746 cs_real_t viscel[][6],
747 const cs_real_t weighf[][2],
748 const cs_real_t weighb[],
749 int icvflb,
750 const int icvfli[],
751 cs_real_t pvar[][stride])
752{
753 // Sanity check
754 assert(rk != nullptr);
755 assert(stride == rk->stride());
756
757 // get the current stage index
758 const int i_stg = rk->i_stage();
759
760 cs_real_t *rhs = rk->get_rhs_stage_sub_array(i_stg);
761
762 /* Allocate non reconstructed face value only if presence of limiter */
763
764 /* We compute the total explicit balance. */
765
766 int inc = 1;
767
768 /* The added convective scalar mass flux is:
769 * (thetex*Y_\face-imasac*Y_\celli)*mf.
770 * When building the explicit part of the rhs, one
771 * has to impose 0 on mass accumulation. */
772 int imasac = 0;
773
774 eqp->theta = 1;
775
776 if (stride == 3)
778 f_id,
779 imasac,
780 inc, /* inc */
781 ivisep,
782 eqp,
783 nullptr, /* pvar == pvara */
784 (const cs_real_3_t *)pvar,
785 bc_coeffs,
786 i_massflux,
787 b_massflux,
788 i_visc,
789 b_visc,
790 i_secvis,
791 b_secvis,
792 viscel,
793 weighf,
794 weighb,
795 icvflb,
796 icvfli,
797 nullptr,
798 nullptr,
799 (cs_real_3_t *)rhs);
800
801 else if (stride == 6)
803 f_id,
804 imasac,
805 inc, /* inc */
806 eqp,
807 nullptr, /* pvar == pvara */
808 (const cs_real_6_t *)pvar,
809 bc_coeffs,
810 i_massflux,
811 b_massflux,
812 i_visc,
813 b_visc,
814 viscel,
815 weighf,
816 weighb,
817 icvflb,
818 icvfli,
819 (cs_real_6_t *)rhs);
820
821 eqp->theta = 0;
822
823 ctx.wait();
824}
825
826/*----------------------------------------------------------------------------*/
831/*----------------------------------------------------------------------------*/
832
833inline bool
835{
836 if (rk == nullptr)
837 return false;
838 else
839 return rk->is_active();
840}
841
842/*----------------------------------------------------------------------------*/
848/*----------------------------------------------------------------------------*/
849
850inline bool
852{
853 if (rk == nullptr)
854 return false;
855
856 return rk->is_staging();
857}
858
859/*----------------------------------------------------------------------------*/
863/*----------------------------------------------------------------------------*/
864
867
868/*----------------------------------------------------------------------------*/
872/*----------------------------------------------------------------------------*/
873
874void
876
877/*----------------------------------------------------------------------------*/
878
879#endif /* __RK_INTEGRATOR_H */
void bft_error(const char *const file_name, const int line_num, const int sys_error_code, const char *const format,...)
Calls the error handler (set by bft_error_handler_set() or default).
Definition: bft_error.cpp:187
Define a templated array class (owner of data)
Definition: cs_array.h:1118
Define a templated mdspan class (non owner of data)
Definition: cs_mdspan.h:68
Generic Runge-Kutta integrator class.
Definition: cs_runge_kutta_integrator.h:75
CS_F_HOST cs_real_t * get_rhs_stage_sub_array(int stage_id)
Get raw pointer to rhs of a given stage.
Definition: cs_runge_kutta_integrator.h:381
CS_F_HOST_DEVICE int stride() const
Get solved variable stride.
Definition: cs_runge_kutta_integrator.h:365
CS_F_HOST void stage_set_initial_rhs(cs_dispatch_context &ctx, cs_real_t *rhs_pvar)
Set initial rhs per stage for Runge-Kutta integrator. Align with legacy equations' building sequence....
Definition: cs_runge_kutta_integrator.h:265
CS_F_HOST void solve_stage(cs_dispatch_context &ctx, cs_real_t *pvar_stage)
Perform one Runge-Kutta staging.
Definition: cs_runge_kutta_integrator.h:185
CS_F_HOST void stage_projection_rhs(cs_dispatch_context &ctx, cs_real_t *grad_dp)
Perform one Runge-Kutta staging for the potential in the NS system.
Definition: cs_runge_kutta_integrator.h:231
CS_F_HOST ~runge_kutta_integrator()
Destructor method.
Definition: cs_runge_kutta_integrator.h:139
CS_F_HOST runge_kutta_integrator(cs_runge_kutta_scheme_t scheme, const char *name, const cs_real_t *dt, int dim, cs_lnum_t n_elts)
Constructor method with input arguments.
Definition: cs_runge_kutta_integrator.h:101
CS_F_HOST cs_span< cs_real_t > get_stage_coeff_a(int i)
Get "a" coefficients for a given stage.
Definition: cs_runge_kutta_integrator.h:398
CS_F_HOST void init_state(cs_dispatch_context &ctx, const cs_real_t *rho, const cs_real_t *vol, cs_real_t *pvara)
IDefault constructor method.
Definition: cs_runge_kutta_integrator.h:153
CS_F_HOST_DEVICE cs_runge_kutta_scheme_t scheme() const
Get scheme used by integrator.
Definition: cs_runge_kutta_integrator.h:320
CS_F_HOST runge_kutta_integrator()
Default constructor method.
Definition: cs_runge_kutta_integrator.h:90
CS_F_HOST_DEVICE cs_lnum_t n_elts() const
Get number of elements used for resolution.
Definition: cs_runge_kutta_integrator.h:335
CS_F_HOST_DEVICE bool is_active() const
Check if integrator is active.
Definition: cs_runge_kutta_integrator.h:290
CS_F_HOST_DEVICE int i_stage() const
Get current stage of RK resolution.
Definition: cs_runge_kutta_integrator.h:350
CS_F_HOST_DEVICE bool is_staging() const
Check if integrator is still in the staging process.
Definition: cs_runge_kutta_integrator.h:305
auto parallel_for(cs_lnum_t n, F &&f, Args &&... args)
Definition: cs_dispatch.h:2146
void wait(void)
Wait (synchronize) until launched computations have finished.
Definition: cs_dispatch.h:2211
Definition: cs_dispatch.h:2288
Field boundary condition descriptor (for variables)
Definition: cs_field.h:107
void cs_balance_tensor(int idtvar, int f_id, int imasac, int inc, cs_equation_param_t *eqp, cs_real_6_t pvar[], const cs_real_6_t pvara[], cs_field_bc_coeffs_t *bc_coeffs, const cs_real_t i_massflux[], const cs_real_t b_massflux[], const cs_real_t i_visc[], const cs_real_t b_visc[], cs_real_6_t c_visc[], const cs_real_2_t weighf[], const cs_real_t weighb[], int icvflb, const int icvfli[], cs_real_6_t rhs[])
Wrapper to the function which adds the explicit part of the convection/diffusion terms of a transport...
Definition: cs_balance.cpp:889
void cs_balance_vector(int idtvar, int f_id, int imasac, int inc, int ivisep, cs_equation_param_t *eqp, cs_real_3_t pvar[], const cs_real_3_t pvara[], cs_field_bc_coeffs_t *bc_coeffs, const cs_real_t i_massflux[], const cs_real_t b_massflux[], const cs_real_t i_visc[], const cs_real_t b_visc[], const cs_real_t secvif[], const cs_real_t secvib[], cs_real_6_t c_visc[], const cs_real_2_t weighf[], const cs_real_t weighb[], int icvflb, const int icvfli[], cs_real_3_t i_pvar[], cs_real_3_t b_pvar[], cs_real_3_t smbr[])
Wrapper to the function which adds the explicit part of the convection/diffusion terms of a transport...
Definition: cs_balance.cpp:690
#define CS_F_HOST_DEVICE
Definition: cs_defs.h:555
double cs_real_t
Floating-point value.
Definition: cs_defs.h:332
#define CS_LAMBDA
Definition: cs_defs.h:564
cs_real_t cs_real_3_t[3]
vector of 3 floating-point values
Definition: cs_defs.h:349
cs_real_t cs_real_6_t[6]
vector of 6 floating-point values
Definition: cs_defs.h:351
int cs_lnum_t
local mesh entity id
Definition: cs_defs.h:325
#define CS_F_HOST
Definition: cs_defs.h:553
@ rho
Definition: cs_field_pointer.h:96
@ dt
Definition: cs_field_pointer.h:61
#define CS_FREE(_ptr)
Definition: cs_mem.h:151
#define CS_MALLOC(_ptr, _ni, _type)
Allocate memory for _ni elements of type _type.
Definition: cs_mem.h:75
void cs_runge_kutta_integrators_initialize()
Create RK integrator structures.
Definition: cs_runge_kutta_integrator.cpp:115
void cs_runge_kutta_integrators_destroy()
Clean all Runge-Kutta integrators.
Definition: cs_runge_kutta_integrator.cpp:168
int cs_runge_kutta_integrator_create(cs_runge_kutta_scheme_t scheme, const char *name, const cs_real_t *dt, int dim, cs_lnum_t n_elts)
Create a RK integrator.
Definition: cs_runge_kutta_integrator.cpp:87
void cs_runge_kutta_stage_complete_rhs(cs_dispatch_context &ctx, cs_runge_kutta_integrator_t *rk, int idtvar, int f_id, int ivisep, cs_equation_param_t *eqp, cs_field_bc_coeffs_t *bc_coeffs, const cs_real_t i_massflux[], const cs_real_t b_massflux[], const cs_real_t i_visc[], const cs_real_t b_visc[], const cs_real_t i_secvis[], const cs_real_t b_secvis[], cs_real_t viscel[][6], const cs_real_t weighf[][2], const cs_real_t weighb[], int icvflb, const int icvfli[], cs_real_t pvar[][stride])
prepare and complete rhs per stage for Runge-Kutta integrator. Align with legacy equations' building ...
Definition: cs_runge_kutta_integrator.h:733
void cs_runge_kutta_stage_complete_scalar_rhs(cs_dispatch_context &ctx, cs_runge_kutta_integrator_t *rk, int idtvar, int f_id, int imucpp, cs_equation_param_t *eqp, cs_field_bc_coeffs_t *bc_coeffs, const cs_real_t i_massflux[], const cs_real_t b_massflux[], const cs_real_t i_visc[], const cs_real_t b_visc[], cs_real_t viscel[][6], const cs_real_t weighf[][2], const cs_real_t weighb[], int icvflb, const int icvfli[], cs_real_t pvar[], const cs_real_t xcpp[])
prepare and complete rhs per stage for Runge-Kutta integrator. Align with legacy equations' building ...
Definition: cs_runge_kutta_integrator.cpp:263
bool cs_runge_kutta_is_active(cs_runge_kutta_integrator_t *rk)
Indicate if Runge-Kutta integrator is activated.
Definition: cs_runge_kutta_integrator.h:834
void cs_runge_kutta_staging_potential(cs_dispatch_context &ctx, cs_runge_kutta_integrator_t *rk, cs_real_t *phi_stage)
Perform one Runge-Kutta staging for the potential in the NS system.
Definition: cs_runge_kutta_integrator.cpp:188
cs_runge_kutta_integrator_t * cs_runge_kutta_integrator_by_id(int rk_id)
Return a Runge-Kutta integrator by id.
Definition: cs_runge_kutta_integrator.cpp:152
bool cs_runge_kutta_is_staging(cs_runge_kutta_integrator_t *rk)
indicate if the Runge-Kutta integrator is staging.
Definition: cs_runge_kutta_integrator.h:851
#define RK_HIGHEST_ORDER
Definition: cs_runge_kutta_integrator_param.h:62
cs_runge_kutta_scheme_t
Definition: cs_runge_kutta_integrator_param.h:71
@ CS_RK2_HEUN
Definition: cs_runge_kutta_integrator_param.h:75
@ CS_RK2
Definition: cs_runge_kutta_integrator_param.h:74
@ CS_RK3_WRAY
Definition: cs_runge_kutta_integrator_param.h:78
@ CS_RK_NONE
Definition: cs_runge_kutta_integrator_param.h:72
@ CS_RK4
Definition: cs_runge_kutta_integrator_param.h:80
@ CS_RK3_SSP
Definition: cs_runge_kutta_integrator_param.h:79
@ CS_RK2_MP
Definition: cs_runge_kutta_integrator_param.h:76
@ CS_RK3
Definition: cs_runge_kutta_integrator_param.h:77
@ CS_RK1
Definition: cs_runge_kutta_integrator_param.h:73
integer(c_int), pointer, save idtvar
option for a variable time step
Definition: optcal.f90:70
Definition: cs_algorithm.h:51
Set of parameters to handle an unsteady convection-diffusion-reaction equation with term sources.
Definition: cs_equation_param.h:190
double theta
Definition: cs_equation_param.h:512