Choral
All Classes Namespaces Files Functions Variables Modules
ode_SL_NL_DC_mod.f90
Go to the documentation of this file.
1 
12 
14 
17  use real_type
18  use basic_tools
19  use r1d_mod, only: xpay
20  use ode_def
21  use ode_problem_mod
23  use krylov_mod
24  !$ use OMP_LIB
25 
26  implicit none
27  private
28 
29  ! %----------------------------------------%
30  ! | |
31  ! | PUBLIC DATA |
32  ! | |
33  ! %----------------------------------------%
34 
35  public :: solve_ode_sl_nl_dc
36  public :: create_ode_sl_nl_dc_sol
38 
39 contains
40 
41 
43  function check_ode_method_sl_nl_dc(method) result(b)
44  logical :: b
45  integer, intent(in) :: method
46 
47  b = .false.
48 
49  select case(method)
50  case(ode_dc_2, ode_dc_3)
51  b = .true.
52  end select
53 
54  end function check_ode_method_sl_nl_dc
55 
56 
60  subroutine memsize_ode_sl_nl_dc(n_Y, n_FY, n_V, method)
61  integer, intent(out) :: n_FY, n_Y, n_V
62  integer, intent(in) :: method
63 
64  select case(method)
65 
66  case(ode_dc_2)
67  n_y = 5; n_fy = 2; n_v = 1
68 
69  case(ode_dc_3)
70  n_y = 9; n_fy = 4; n_v = 1
71 
72  case default
73  call quit("ode_SL_NL_DC_mod: memSize_ode_SL_NL_DC: uncorrect method")
74 
75  end select
76 
77  end subroutine memsize_ode_sl_nl_dc
78 
81  subroutine create_ode_sl_nl_dc_sol(sol, pb, method)
82  type(ode_solution), intent(inout) :: sol
83  type(ode_problem) , intent(in) :: pb
84  integer , intent(in) :: method
85 
86  integer :: n_Y, n_FY, n_V
87 
88  if (pb%Na/=0) call quit("ode_SL_NL_DC_mod: create_ode_SL_NL_DC:&
89  & Na muste be ezero")
90 
91  call memsize_ode_sl_nl_dc(n_y, n_fy, n_v, method)
92  sol = ode_solution(pb, ny=n_y, nfy=n_fy, nv=n_v)
93 
94  end subroutine create_ode_sl_nl_dc_sol
95 
96 
97 
98  subroutine init_nl_dc(sol, pb, meth, t0, dt, KInv)
99  type(ode_solution), intent(inout) :: sol
100  type(ode_problem) , intent(in) :: pb
101  integer , intent(in) :: meth
102  real(RP) , intent(in) :: t0, dt
103  procedure(linsystem_solver) :: Kinv
104 
105  select case(meth)
106  case(ode_dc_2)
107  call init_dc_2(sol, pb, t0, dt, kinv)
108 
109  case(ode_dc_3)
110  call init_dc_3(sol, pb, t0, dt, kinv)
111 
112  case default
113  call quit("ode_NL_DC_mod: init_NL_DC: wrong method")
114 
115  end select
116 
117  end subroutine init_nl_dc
118 
119 
120  subroutine init_dc_2(sol, pb, t0, dt, KInv)
121  type(ode_solution), intent(inout) :: sol
122  type(ode_problem) , intent(in) :: pb
123  real(RP) , intent(in) :: t0, dt
124  procedure(linsystem_solver) :: Kinv
125 
126  real(RP), dimension(0) :: a
127 
128  integer :: ii, N
129  logical :: ierr
130 
131  n = pb%N
132 
133  associate( y=>sol%Y, f=>sol%BY, x=>pb%X, &
134  & v=>sol%V, aux=>sol%aux, rhs=>sol%rhs)
135 
136  !! Y(:,2,:) = Y_0^0 = Y^0
137  y(:,2,:) = y(:,1,:)
138 
139  !! Y(:,4,:) = Y_1^0 = 0
140  y(:,4,:) = 0.0_rp
141 
142  !! F(:,1,:) = F_0^0
143  do ii=1, sol%dof
144  call pb%AB(a, f(:,1,ii), x(:,ii), t0, y(:,1,ii), n, 0 )
145  end do
146 
147  !! V = V^0 (initial guess to compute V^1)
148  v(:,1) = y(n,1,:)
149 
150  !! Y(:,3,:) = Y_0^{1}
151  y(:,3,:) = y(:,1,:) + dt*f(:,1,:)
152 
153  !! V = V_0^{n+2}
154  aux = y(n,3,:)
155  call pb%M(rhs, aux)
156  call kinv(v(:,1), ierr, rhs)
157 
158  !! update Y(N,yi(2),ii) = V_0^{n+2}
159  y(n,3,:) = v(:,1)
160 
161  !! restore V(:,1) = V^0
162  v(:,1) = y(n,1,:)
163 
164  end associate
165 
166  end subroutine init_dc_2
167 
168 
169  subroutine init_dc_3(sol, pb, t0, dt, KInv)
170  type(ode_solution), intent(inout) :: sol
171  type(ode_problem) , intent(in) :: pb
172  real(RP) , intent(in) :: t0, dt
173  procedure(linsystem_solver) :: Kinv
174 
175  real(RP), dimension(0) :: a
176 
177  integer :: ii, N
178  logical :: ierr
179 
180  n = pb%N
181 
182  associate( y=>sol%Y, f=>sol%BY, x=>pb%X, &
183  & v=>sol%V, aux=>sol%aux, rhs=>sol%rhs)
184 
185  !! Y(:,2,:) = Y_0^0 = Y^0
186  !! Y(:,5,:) = Y_1^0 = 0
187  !! Y(:,7,:) = Y_2^0 = 0
188  y(:,2,:) = y(:,1,:)
189  y(:,5,:) = 0.0_rp
190  y(:,7,:) = 0.0_rp
191 
192  !! F(:,1,:) = F_0^0
193  do ii=1, sol%dof
194  call pb%AB(a, f(:,1,ii), x(:,ii), t0, y(:,1,ii), n, 0 )
195  end do
196 
197  !! Y(:,3,:) = Y_0^{1}
198  y(:,3,:) = y(:,1,:) + dt*f(:,1,:)
199  aux = y(n,3,:)
200  call pb%M(rhs, aux)
201  v(:,1) = y(n,1,:) ! initial guess
202  call kinv(v(:,1), ierr, rhs)
203  y(n,3,:) = v(:,1)
204 
205  !! F(:,2,:) = F_0^1
206  do ii=1, sol%dof
207  call pb%AB(a, f(:,2,ii), x(:,ii), t0+dt, y(:,3,ii), n, 0 )
208  end do
209 
210  !! Y(:,4,:) = Y_0^{2}
211  y(:,4,:) = y(:,3,:) + dt*f(:,2,:)
212  aux = y(n,4,:)
213  call pb%M(rhs, aux)
214  v(:,1) = y(n,3,:) ! initial guess
215  call kinv(v(:,1), ierr, rhs)
216  y(n,4,:) = v(:,1)
217 
218  !! F(:,4,:) = F_1^1 = F_0^1
219  f(:,4,:) = f(:,2,:)
220 
221  !! Y(:,6,:) = Y_1^{1}
222  y(:,6,:) = (y(:,4,:) - 2._rp*y(:,3,:) + y(:,2,:))*(-0.5_rp/dt) &
223  & + f(:,4,:) - f(:,1,:)
224  aux = y(n,6,:)
225  call pb%M(rhs, aux)
226  v(:,1) = 0._rp ! initial guess
227  call kinv(v(:,1), ierr, rhs)
228  y(n,6,:) = v(:,1)
229 
230  !! restore V(:,1) = V^0
231  v(:,1) = y(n,1,:)
232 
233  end associate
234 
235  end subroutine init_dc_3
236 
237 
240  subroutine solve_ode_sl_nl_dc(sol, pb, t0, T, dt, &
241  & meth, out, check_overflow, Kinv, kry)
242  type(ode_solution) , intent(inout) :: sol
243  type(ode_problem) , intent(in) :: pb
244  real(RP) , intent(in) :: t0, T, dt
245  integer , intent(in) :: meth
246  procedure(ode_output_proc) :: out
247  logical , intent(in) :: check_overflow
248  procedure(linsystem_solver), optional :: Kinv
249  type(krylov) , optional :: kry
250 
251  procedure(linsystem_solver), pointer :: KInv_1
252  type(krylov) :: kry_1
253  real(RP) :: tn, CS
254  integer :: nS, jj, ii
255  logical :: exit_comp, bool
256 
257  if (choral_verb>1) write(*,*) &
258  &"ode_SL_NL_DC_mod: solve"
259  if (choral_verb>2) write(*,*) &
260  &" Method = ",&
261  & name_ode_method(meth)
262  if (choral_verb>2) write(*,*) &
263  &" K_inv provided =",&
264  & present(kinv)
265  if (.NOT.present(kinv)) then
266  if (choral_verb>2) write(*,*) &
267  &" Krylov settings provided = ",&
268  & present(kry)
269  end if
270 
271  bool = check_ode_method_sl_nl_dc(meth)
272  if (.NOT.bool) call quit("ode_SL_NL_DC_mod: solve_ode_SL_NL_DC:&
273  & wrong method")
274 
275  if (pb%Na/=0) call quit("ode_SL_NL_DC_mod: solve_ode_SL_NL_DC:&
276  & Na muste be ezero")
277 
278  !! Set CS to define K = M + CS*S
279  !!
280  cs = s_prefactor(meth, dt)
281 
282  !! set the linear system solver for the system K*x = rhs
283  !!
284  if (present(kinv)) then
285  kinv_1 => kinv
286  else
287  kinv_1 => kinv_default
288  if (present(kry)) kry_1 = kry
289  end if
290 
291  !! initialise the solution indexes
292  !!
293  call ode_solution_init_indexes(sol)
294 
295  !! Initialise
296  !!
297  call init_nl_dc(sol, pb, meth, t0, dt, kinv_1)
298 
299  !! ode resolution
300  !!
301  ns = int( (t-t0) / dt)
302  exit_comp = .false.
303  sol%ierr = 0
304  !!
305  !! Time loop
306  !!
307  do jj=1, ns
308  tn = t0 + re(jj-1)*dt
309 
310  ! output
311  ! cpu = clock()
312  call out(tn, sol, exit_comp)
313  if (exit_comp) then
314  if (choral_verb>2) write(*,*) &
315  &"ode_SL_NL_DC_mod: solve&
316  & time = ", tn, ': EXIT_COMPp'
317  return
318  end if
319 
320  select case(meth)
321  case(ode_dc_2)
322  call sl_nl_dc_2(sol, dt, tn, pb, kinv_1)
323 
324  case(ode_dc_3)
325  call sl_nl_dc_3(sol, dt, tn, pb, kinv_1)
326 
327  end select
328 
329  !! exit in case of linear system inversion error
330  if (sol%ierr/=0) then
331  return
332  end if
333 
334  !! check overflow
335  !! WARNING : for the monodoain model
336  if (check_overflow) then
337 
338  bool = ( minval(sol%V) < -200.0_rp ) .OR. &
339  & ( maxval(sol%V) > 200.0_rp )
340  if (bool) then
341  sol%ierr = 10
342  return
343  end if
344 
345  end if
346 
347  end do
348 
349 
350  contains
351 
354  subroutine kinv_default(x, bool, b)
355  real(RP), dimension(:), intent(inout) :: x
356  logical , intent(out) :: bool
357  real(RP), dimension(:), intent(in) :: b
358 
359  call solve(x, kry_1, b, k_default)
360  bool = kry_1%ierr
361 
362  end subroutine kinv_default
363 
364  !! matrix-vector product x --> K*x, K = M + CS*S
365  !!
366  subroutine k_default(y, x)
367  real(RP), dimension(:), intent(out) :: y
368  real(RP), dimension(:), intent(in) :: x
369 
370  call pb%M(y , x)
371  call pb%S(sol%aux, x)
372  call xpay(y, cs, sol%aux)
373 
374  end subroutine k_default
375 
376  end subroutine solve_ode_sl_nl_dc
377 
378 
381  subroutine sl_nl_dc_2(sol, dt, t, pb, KInv)
382  type(ode_solution), intent(inout) :: sol
383  real(RP) , intent(in) :: dt, t
384  type(ode_problem) , intent(in) :: pb
385  procedure(linsystem_solver) :: Kinv
386 
387  integer :: ii, N
388  real(RP), dimension(pb%N) :: F1, yy
389  real(RP), dimension(0) :: a
390  logical :: ierr
391  real(RP) :: dt_inv, t1
392 
393  dt_inv = 1.0_rp / dt
394  t1 = t + dt
395 
396  n = pb%N
397 
398  associate( y=>sol%Y, f=>sol%BY, x=>pb%X, &
399  & v=>sol%V, aux=>sol%aux, rhs=>sol%rhs, &
400  & yi=>sol%Y_i, fi=>sol%F_i)
401 
402  !$OMP PARALLEL PRIVATE(a)
403  !$OMP DO
404  do ii=1, sol%dof
405 
406  !! Y(:,5,ii) = d Y_0^{n+1}
407  y(:,5,ii) = (y(:,yi(3),ii)-y(:,yi(2),ii)) * dt_inv
408 
409  !! V = V_0^{n+1} (initial guess to compute V_0^{n+2})
410  v(ii,1) = y(n,yi(3),ii)
411 
412  !! F(:,fi(2),ii) = F_0^{n+1}
413  call pb%AB(a,f(:,fi(2),ii),x(:,ii),t1,y(:,yi(3),ii),n,0)
414 
415  !! Y(:,yi(2),ii) = Y_0^{n+2}
416  y(:,yi(2),ii) = y(:,yi(3),ii) + dt*f(:,fi(2),ii)
417 
418  !! aux = [ Y_0^{n+2} ]_N
419  aux(ii) = y(n,yi(2),ii)
420 
421  end do
422  !$OMP END DO
423  !$OMP END PARALLEL
424 
425  !! V = V_0^{n+2}
426  call pb%M(rhs, aux)
427  call kinv(v(:,1), ierr, rhs)
428  if (ierr) then
429  sol%ierr = 1
430  return
431  end if
432 
433 
434  !$OMP PARALLEL PRIVATE(a, yy, F1)
435  !$OMP DO
436  do ii=1, sol%dof
437 
438  !! update Y(N,yi(2),ii) = V_0^{n+2}
439  y(n,yi(2),ii) = v(ii,1)
440 
441  !! V = V_1^{n} (initial guess to compute V_1^{n+1})
442  v(ii,1) = y(n,4,ii)
443 
444  !! F1 = F_1^{n+1}
445  yy = y(:,yi(3),ii) + dt*y(:,4,ii)
446  call pb%AB(a, f1, x(:,ii), t1, yy, n, 0 )
447 
448  !! yy = - d^2 Y_0^{n+2} * dt / 2
449  yy = y(:,5,ii) - ( y(:,yi(2),ii) - y(:,yi(3),ii) ) * dt_inv
450  yy = yy * 0.5_rp
451 
452  !! Y(:,4,ii) = Y_1^{n+1}
453  y(:,4,ii) = y(:,4,ii) + yy + f1 - f(:,fi(1),ii)
454 
455  !! aux = [ Y_1^{n+1} ]_N
456  aux(ii) = y(n,4,ii)
457 
458  end do
459  !$OMP END DO
460  !$OMP END PARALLEL
461 
462  !! V = V_1^{n+1}
463  call pb%M(rhs, aux)
464  call kinv(v(:,1), ierr, rhs)
465  if (ierr) then
466  sol%ierr = 1
467  return
468  end if
469 
470  !$OMP PARALLEL
471  !$OMP DO
472  do ii=1, sol%dof
473 
474  !! update Y(N,4,ii) = V_1^{n+1}
475  y(n,4,ii) = v(ii,1)
476 
477  !! Compute Y_{n+1}
478  y(:,1,ii) = y(:,yi(3),ii) + dt * y(:,4,ii)
479 
480  !! Update V = V_{n+1} = [ Y_{n+1} ]_N
481  v(ii,1) = y(n,1,ii)
482 
483  end do
484  !$OMP END DO
485  !$OMP END PARALLEL
486 
487  !! index permutation for sol%Y_i and sol%FY_i
488  call perm2(yi(2:3))
489  call perm2(fi)
490 
491  end associate
492 
493  end subroutine sl_nl_dc_2
494 
495 
496 
497 
498 
501  subroutine sl_nl_dc_3(sol, dt, t, pb, KInv)
502  type(ode_solution), intent(inout) :: sol
503  real(RP) , intent(in) :: dt, t
504  type(ode_problem) , intent(in) :: pb
505  procedure(linsystem_solver) :: Kinv
506 
507  integer :: ii, N
508  real(RP), dimension(pb%N) :: yy, F2
509  real(RP), dimension(0) :: a
510  logical :: ierr
511  real(RP) :: t1, t2
512  real(RP) :: dt_inv, dt2_inv_6, dt_inv_2
513 
514  dt_inv = 1.0_rp / dt
515  dt_inv_2 = 1.0_rp / (dt * 2._rp)
516  dt2_inv_6 = 1.0_rp / (dt**2 * 6._rp)
517 
518  t1 = t + dt
519  t2 = t1 + dt
520 
521  n = pb%N
522 
523  associate( y=>sol%Y, f=>sol%BY, x=>pb%X, &
524  & v=>sol%V, aux=>sol%aux, rhs=>sol%rhs, &
525  & yi=>sol%Y_i, fi=>sol%F_i)
526 
527  !$OMP PARALLEL PRIVATE(a)
528  !$OMP DO
529  do ii=1, sol%dof
530 
531  !! Y(:,8,ii) = d^2 Y_0^{n+2} * dt**2
532  y(:,8,ii) = y(:,yi(4),ii) - 2._rp*y(:,yi(3),ii) &
533  & + y(:,yi(2),ii)
534 
535  !! F(:,fi(1),ii) = F_0^{n+2}
536  call pb%AB(a,f(:,fi(1),ii),x(:,ii),t2,y(:,yi(4),ii),n,0)
537 
538  !! Y(:,yi(2),ii) = Y_0^{n+3}
539  y(:,yi(2),ii) = y(:,yi(4),ii) + dt*f(:,fi(1),ii)
540 
541  !! aux = [ Y_0^{n+3} ]_N
542  aux(ii) = y(n,yi(2),ii)
543 
544  !! V = V_0^{n+2} (initial guess to compute V_0^{n+3})
545  v(ii,1) = y(n,yi(4),ii)
546 
547  end do
548  !$OMP END DO
549  !$OMP END PARALLEL
550 
551  !! V = V_0^{n+3}
552  call pb%M(rhs, aux)
553  call kinv(v(:,1), ierr, rhs)
554  if (ierr) then
555  sol%ierr = 1
556  return
557  end if
558 
559  !$OMP PARALLEL PRIVATE(a, yy)
560  !$OMP DO
561  do ii=1, sol%dof
562 
563  !! update Y(N,yi(2),ii) = V_0^{n+3}
564  y(n,yi(2),ii) = v(ii,1)
565 
566  !! Y(:,9,ii) = Y_1^{n}
567  y(:,9,ii) = y(:,yi(5),ii)
568 
569  !! F(:,fi(3),ii) = F_1^{n+2}
570  yy = y(:,yi(4),ii) + dt*y(:,yi(6),ii)
571  call pb%AB(a,f(:,fi(3),ii),x(:,ii),t2,yy,n,0)
572 
573  !! yy = d^2 Y_0^{n+3} * dt**2
574  yy = y(:,yi(2),ii) - 2._rp*y(:,yi(4),ii) &
575  & + y(:,yi(3),ii)
576 
577  !! Y(:,8,ii) = d^3 Y_0^{n+3} * dt * 1/6
578  y(:,8,ii) = ( yy - y(:,8,ii) ) * dt2_inv_6
579 
580  !! yy = -d^2 Y_0^{n+3} * dt/2 * 1/2
581  yy = - yy * dt_inv_2
582 
583  !! Y(:,yi(5),ii) = Y_1^{n+2}
584  y(:,yi(5),ii) = y(:,yi(6),ii) + yy &
585  & + f(:,fi(3),ii) - f(:,fi(2),ii)
586 
587  !! V = V_1^{n+1} (initial guess to compute V_1^{n+2})
588  v(ii,1) = y(n,yi(6),ii)
589 
590  !! aux = [ Y_1^{n+2} ]_N
591  aux(ii) = y(n,yi(5),ii)
592 
593  end do
594  !$OMP END DO
595  !$OMP END PARALLEL
596 
597  !! V = V_1^{n+2}
598  call pb%M(rhs, aux)
599  call kinv(v(:,1), ierr, rhs)
600  if (ierr) then
601  sol%ierr = 1
602  return
603  end if
604 
605  !$OMP PARALLEL PRIVATE(a, yy, F2)
606  !$OMP DO
607  do ii=1, sol%dof
608 
609  !! update Y(N,yi(5),ii) = V_1^{n+2}
610  y(n,yi(5),ii) = v(ii,1)
611 
612  !! V = V_2^{n} (initial guess to compute V_2^{n+1})
613  v(ii,1) = y(n,7,ii)
614 
615  !! F2 = F_2^{n+1}
616  yy = y(:,yi(3),ii) + dt*y(:,yi(6),ii) + dt**2*y(:,7,ii)
617  call pb%AB(a,f2,x(:,ii),t1,yy,n,0)
618 
619  !! yy = - d^2 Y_1{n+2} * dt * 1/2
620  yy = -y(:,9,ii) + 2._rp*y(:,yi(6),ii) - y(:,yi(5),ii)
621  yy = yy * dt_inv_2
622 
623  !! Y(:,7,:) = Y_2^{n+1}
624  yy = yy + ( f2 - f(:,fi(4),ii) ) * dt_inv
625  y(:,7,ii) = y(:,7,ii) + y(:,8,ii) + yy
626 
627  !! aux = [ Y_2^{n+1} ]_N
628  aux(ii) = y(n,7,ii)
629 
630  end do
631  !$OMP END DO
632  !$OMP END PARALLEL
633 
634  !! V = V_2^{n+1}
635  call pb%M(rhs, aux)
636  call kinv(v(:,1), ierr, rhs)
637  if (ierr) then
638  sol%ierr = 1
639  return
640  end if
641 
642  !$OMP PARALLEL
643  !$OMP DO
644  do ii=1, sol%dof
645 
646  !! update Y(N,7,ii) = V_2^{n+1}
647  y(n,7,ii) = v(ii,1)
648 
649  !! Compute Y_{n+1}
650  y(:,1,ii) = y(:,yi(3),ii) + dt * y(:,yi(6),ii) &
651  & + dt**2 * y(:,7,ii)
652 
653  !! Update V = V_{n+1} = [ Y_{n+1} ]_N
654  v(ii,1) = y(n,1,ii)
655 
656  end do
657  !$OMP END DO
658  !$OMP END PARALLEL
659 
660 
661  !! index permutation for sol%Y_i and sol%FY_i
662  call perm3(yi(2:4))
663  call perm2(yi(5:6))
664  call perm2(fi(1:2))
665  call perm2(fi(3:4))
666 
667  end associate
668 
669  end subroutine sl_nl_dc_3
670 
671 
672  subroutine perm2(T)
673  integer, dimension(2), intent(inout) :: T
674 
675  integer :: t1
676 
677  t1 = t(1)
678  t(1) = t(2)
679  t(2) = t1
680 
681  end subroutine perm2
682 
683 
684  subroutine perm3(T)
685  integer, dimension(3), intent(inout) :: T
686 
687  integer :: t1
688 
689  t1 = t(1)
690  t(1) = t(2)
691  t(2) = t(3)
692  t(3) = t1
693 
694  end subroutine perm3
695 
696 end module ode_sl_nl_dc_mod
integer, parameter ode_dc_3
Deferred corrections 3.
DEFERRED CORRECTION SOLVERS FOR A SEMILINEAR ODE coupled with a non-linear ODE system ...
subroutine init_nl_dc(sol, pb, meth, t0, dt, KInv)
Type ode_solution: data structure to solve ODE/PDE problems.
BASIC TOOLS
Definition: basic_tools.F90:8
subroutine k_default(y, x)
DERIVED TYPE ode_problem: definition of ODE/PDE problems
subroutine, public create_ode_sl_nl_dc_sol(sol, pb, method)
Create the solution data structure.
subroutine init_dc_3(sol, pb, t0, dt, KInv)
subroutine, public solve_ode_sl_nl_dc(sol, pb, t0, T, dt, meth, out, check_overflow, Kinv, kry)
solve : multistep with constant time step
subroutine, public quit(message)
Stop program execution, display an error messahe.
logical function, public check_ode_method_sl_nl_dc(method)
is &#39;method&#39; a DC method for SL_NL problem ?
integer, parameter ode_dc_2
Deferred corrections 2.
REAL NUMBERS PRECISION IN CHORAL: selects simple/double/quad
Definition: real_type.F90:33
OPENMP OPERATIONS ON 1-DIMENSIONAL REAL ARRAYS
Definition: R1d_mod.F90:10
DERIVED TYPE ode_solution: data straucture to solve ODEs
subroutine kinv_default(x, bool, b)
Default solver for K*x = b.
subroutine memsize_ode_sl_nl_dc(n_Y, n_FY, n_V, method)
required sizes to allocate memory
CHORAL CONSTANTS
real(rp) function f(x)
right hand side &#39;f&#39;
BOTTOM LEVEL MODULE FOR ODEs
Definition: ode_def.f90:12
x = x + b*y // OR // z = x + b*y
Definition: R1d_mod.F90:60
DEFINITION OF GLOBAL VARIABLES FOR THE LIBRARY CHORAL
subroutine init_dc_2(sol, pb, t0, dt, KInv)
Type ode_problem: definition of ODE/PDE problems.
DERIVED TYPE krylov: for the resolution of linear systems
Definition: krylov_mod.f90:25
subroutine sl_nl_dc_3(sol, dt, t, pb, KInv)
DC order 3.
subroutine sl_nl_dc_2(sol, dt, t, pb, KInv)
DC order 2.