diff --git a/src/compute_Sapj.F90 b/src/compute_Sapj.F90 index be2e7f4f5f2fc5a40d3310c954612b0acd57994d..6618ce0c664cb962d00c51898c7bfbcc10911e1b 100644 --- a/src/compute_Sapj.F90 +++ b/src/compute_Sapj.F90 @@ -24,32 +24,32 @@ SUBROUTINE compute_Sapj sigmae2_taue_o2 = sigma_e**2 * tau_e/2._dp ! factor of the kerneln argument ploope: DO ip = ips_e,ipe_e ! Loop over Hermite moments - ! ploope: DO ip = 1,1 jloope: DO ij = ijs_e, ije_e ! Loop over Laguerre moments - ! jloope: DO ij = 1,1 Sepj(ip,ij,:,:) = 0._dp factn = 1 nloope: DO in = 1,jmaxe+1 ! Loop over laguerre for the sum - ! nloope: DO in = 1,1 krloope1: DO ikr = 1,Nkr ! Loop over kr kzloope1: DO ikz = 1,Nkz ! Loop over kz kr = krarray(ikr) kz = kzarray(ikz) - IF ( DK ) THEN - be_2 = 0._dp - ELSE - be_2 = sigmae2_taue_o2 * (kr**2 + kz**2) - ENDIF + be_2 = sigmae2_taue_o2 * (kr**2 + kz**2) kerneln = be_2**(in-1)/factn * EXP(-be_2) - ! First convolution term IF ( NON_LIN ) THEN F_(ikr,ikz) = imagu*kr* phi(ikr,ikz) * kerneln ELSE F_(ikr,ikz) = 0._dp ENDIF + ! Background sinusoidal electrostatic potential phi_0 for KH inst. + IF ( q_e .NE. 0._dp ) THEN ! If electron are not removed + IF ( kz .EQ. 0._dp ) THEN ! Kronecker kz=0 + IF ( ABS(kr) .EQ. ABS(kr0KH) ) THEN ! kronecker kr=kr0 + F_(ikr,ikz) = -A0KH/2._dp + F_(ikr,ikz) + ENDIF + ENDIF + ENDIF ! Second convolution term G_(ikr,ikz) = 0._dp ! initialization of the sum DO is = 1, MIN( in+ij-1, jmaxe+1 ) ! sum truncation on number of moments @@ -57,14 +57,6 @@ SUBROUTINE compute_Sapj dnjs(in,ij,is) * moments_e(ip,is,ikr,ikz,updatetlevel) ENDDO G_(ikr,ikz) = imagu*kz*G_(ikr,ikz) - ! G_(ikr,ikz) = imagu*kz* moments_e(ip,ij,ikr,ikz,updatetlevel) - - ! Background sinusoidal electrostatic potential phi_0 for KH inst. - IF ( (kz .EQ. 0._dp) .AND. (q_e .NE. 0._dp) ) THEN ! Kronecker kz=0 - IF ( ABS(kr) .EQ. ABS(kr0KH) ) THEN ! kronecker kr=kr0 - F_(ikr,ikz) = -A0KH/2._dp + F_(ikr,ikz) - ENDIF - ENDIF ENDDO kzloope1 ENDDO krloope1 @@ -72,23 +64,15 @@ SUBROUTINE compute_Sapj CALL convolve_2D_F2F( F_, G_, CONV ) ! Convolve Fourier to Fourier Sepj(ip,ij,:,:) = Sepj(ip,ij,:,:) + CONV ! Add it to Sepj - IF ( NON_LIN ) THEN + IF ( NON_LIN ) THEN ! Fully non linear term ikz phi * ikr Napj krloope2: DO ikr = 1,Nkr ! Loop over kr kzloope2: DO ikz = 1,Nkz ! Loop over kz kr = krarray(ikr) kz = kzarray(ikz) - - IF ( DK ) THEN - be_2 = 0._dp - ELSE - be_2 = sigmae2_taue_o2 * (kr**2 + kz**2) - ENDIF - + be_2 = sigmae2_taue_o2 * (kr**2 + kz**2) kerneln = be_2**(in-1)/factn * EXP(-be_2) - ! First convolution term - F_(ikr,ikz) = imagu*kz* phi(ikr,ikz) * kerneln - + F_(ikr,ikz) = imagu*kz* phi(ikr,ikz) * kerneln ! Second convolution term G_(ikr,ikz) = 0._dp ! initialization of the sum DO is = 1, MIN( in+ij-1, jmaxe+1 ) ! sum truncation on number of moments @@ -117,26 +101,17 @@ SUBROUTINE compute_Sapj sigmai2_taui_o2 = sigma_i**2 * tau_i/2._dp ploopi: DO ip = ips_i,ipe_i ! Loop over Hermite moments - ! ploopi: DO ip = 1,1 ! Loop over Hermite moments jloopi: DO ij = ijs_i, ije_i ! Loop over Laguerre moments - ! jloopi: DO ij = 1,1 ! Loop over Laguerre moments Sipj(ip,ij,:,:) = 0._dp factn = 1 nloopi: DO in = 1,jmaxi+1 ! Loop over laguerre for the sum - ! nloopi: DO in = 1,1 ! Loop over laguerre for the sum krloopi1: DO ikr = 1,Nkr ! Loop over kr kzloopi1: DO ikz = 1,Nkz ! Loop over kz kr = krarray(ikr) kz = kzarray(ikz) - - IF ( DK ) THEN - bi_2 = 0._dp - ELSE - bi_2 = sigmai2_taui_o2 * (kr**2 + kz**2) - ENDIF - + bi_2 = sigmai2_taui_o2 * (kr**2 + kz**2) kerneln = bi_2**(in-1)/factn * EXP(-bi_2) ! First convolution term @@ -145,6 +120,12 @@ SUBROUTINE compute_Sapj ELSE F_(ikr,ikz) = 0._dp ENDIF + ! Background sinusoidal electrostatic potential phi_0 for KH inst. + IF ( kz .EQ. 0._dp ) THEN ! Kronecker kz=0 + IF ( ABS(kr) .EQ. ABS(kr0KH) ) THEN ! kronecker kr=kr0 + F_(ikr,ikz) = -A0KH/2._dp + F_(ikr,ikz) + ENDIF + ENDIF ! Second convolution term G_(ikr,ikz) = 0._dp ! initialization of the sum DO is = 1, MIN( in+ij-1, jmaxi+1 ) @@ -152,14 +133,6 @@ SUBROUTINE compute_Sapj dnjs(in,ij,is) * moments_i(ip,is,ikr,ikz,updatetlevel) ENDDO G_(ikr,ikz) = imagu*kz*G_(ikr,ikz) - ! G_(ikr,ikz) = imagu*kz* moments_i(ip,ij,ikr,ikz,updatetlevel) - - ! Background sinusoidal electrostatic potential phi_0 for KH inst. - IF ( kz .EQ. 0._dp ) THEN ! Kronecker kz=0 - IF ( ABS(kr) .EQ. ABS(kr0KH) ) THEN ! kronecker kr=kr0 - F_(ikr,ikz) = -A0KH/2._dp + F_(ikr,ikz) - ENDIF - ENDIF ENDDO kzloopi1 ENDDO krloopi1 @@ -171,18 +144,10 @@ SUBROUTINE compute_Sapj kzloopi2: DO ikz = 1,Nkz ! Loop over kz kr = krarray(ikr) kz = kzarray(ikz) - - IF ( DK ) THEN - bi_2 = 0._dp - ELSE - bi_2 = sigmai2_taui_o2 * (kr**2 + kz**2) - ENDIF - + bi_2 = sigmai2_taui_o2 * (kr**2 + kz**2) kerneln = bi_2**(in-1)/factn * EXP(-bi_2) - ! First convolution term F_(ikr,ikz) = imagu*kz*phi(ikr,ikz) * kerneln - ! Second convolution term G_(ikr,ikz) = 0._dp ! initialization of the sum IF ( NON_LIN ) THEN @@ -192,7 +157,6 @@ SUBROUTINE compute_Sapj ENDDO G_(ikr,ikz) = imagu*kr*G_(ikr,ikz) ENDIF - ! Background sinusoidal ion denstiy n_i0 for KH inst. IF ( kz .EQ. 0._dp ) THEN ! Kronecker kz=0 IF ( ABS(kr) .EQ. ABS(kr0KH) ) THEN ! kronecker kr=+-kr0 @@ -209,6 +173,7 @@ SUBROUTINE compute_Sapj IF ( in + 1 .LE. jmaxi+1 ) THEN factn = real(in,dp) * factn ! factorial(n+1) ENDIF + ENDDO nloopi ENDDO jloopi diff --git a/src/diagnose.F90 b/src/diagnose.F90 index bba9f42514c34779ab6db909dbf25b9f4c9fd4de..82fa6c8c373ce07471cdb9c5ccdf3a1adb8a2106 100644 --- a/src/diagnose.F90 +++ b/src/diagnose.F90 @@ -219,6 +219,7 @@ SUBROUTINE diagnose(kstep) ELSEIF (kstep .EQ. -1) THEN CALL cpu_time(finish) + CALL attach(fidres, "/data/input","cpu_time",finish-start) ! Close all diagnostic files CALL closef(fidres) END IF diff --git a/src/inital.F90 b/src/inital.F90 index 822b5dbb7e6f46fc403f830d97797c8e24c9fa1c..b3d9fc9b2cbaf458ae11bb08987b700dc160dee3 100644 --- a/src/inital.F90 +++ b/src/inital.F90 @@ -89,12 +89,14 @@ SUBROUTINE init_moments DO ikr=ikrs,ikre DO ikz=ikzs,ikze CALL RANDOM_NUMBER(noise) - moments_e( ip,ij, ikr, ikz, :) = initback_moments + initnoise_moments*(noise-0.5_dp) - ! moments_e( ip,ij, Nkz-ikz, ikr, :) = moments_e( ip,ij, ikr, ikz, :) ! Symmetry - ! moments_e( ip,ij, ikz,Nkr-ikr, :) = moments_e( ip,ij, ikr, ikz, :) ! Symmetry - ! moments_e( ip,ij, Nkz-ikz,Nkr-ikr, :) = moments_e( ip,ij, ikr, ikz, :) ! Symmetry + moments_e( ip,ij, ikr, ikz, :) = initback_moments + initnoise_moments*(noise-0.5_dp) & + * AA_r(ikr) * AA_z(ikz) END DO END DO + DO ikz=2,Nkz/2 !symmetry at kr = 0 + CALL RANDOM_NUMBER(noise) + moments_e( ip,ij,1,ikz, :) = moments_e( ip,ij,1,Nkz+2-ikz, :) + END DO END DO END DO DO ip=ips_i,ipe_i @@ -102,12 +104,14 @@ SUBROUTINE init_moments DO ikr=ikrs,ikre DO ikz=ikzs,ikze CALL RANDOM_NUMBER(noise) - moments_i( ip,ij, ikr, ikz, :) = initback_moments + initnoise_moments*(noise-0.5_dp) - ! moments_i( ip,ij, Nkz-ikz, ikr, :) = moments_i( ip,ij, ikr, ikz, :) ! Symmetry - ! moments_i( ip,ij, ikz,Nkr-ikr, :) = moments_i( ip,ij, ikr, ikz, :) ! Symmetry - ! moments_i( ip,ij, Nkz-ikz,Nkr-ikr, :) = moments_i( ip,ij, ikr, ikz, :) ! Symmetry + moments_i( ip,ij,ikr,ikz, :) = initback_moments + initnoise_moments*(noise-0.5_dp) & + * AA_r(ikr) * AA_z(ikz) END DO END DO + DO ikz=2,Nkz/2 !symmetry at kr = 0 + CALL RANDOM_NUMBER(noise) + moments_i( ip,ij,1,ikz, :) = moments_i( ip,ij,1,Nkz+2-ikz, :) + END DO END DO END DO diff --git a/src/poisson.F90 b/src/poisson.F90 index 305a6b32ae096149e0cd57e78f62e984ed2ae03c..9af24e7aeafcd60ed9d055266f724a33ee405408 100644 --- a/src/poisson.F90 +++ b/src/poisson.F90 @@ -40,46 +40,35 @@ SUBROUTINE poisson !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!! Electrons sum(Kernel * Ne0n) (skm) and sum(Kernel**2) (sk2) !! Sum(kernel * Moments_0n) - ! IF ( DK ) THEN - ! sum_kernel_mom_e = moments_e(1, 1, ikr, ikz, updatetlevel) - ! ELSE - ! Initialization for n = 0 (ine = 1) - Kne = exp(-be_2) - sum_kernel_mom_e = Kne*moments_e(1, 1, ikr, ikz, updatetlevel) - ! loop over n only if the max polynomial degree is 1 or more - if (jmaxe .GT. 0) then - DO ine=2,jmaxe+1 ! ine = n+1 - ine_dp = REAL(ine-1,dp) - ! We update iteratively the kernel functions (to spare factorial computations) - Kne = Kne * be_2/ine_dp - sum_kernel_mom_e = sum_kernel_mom_e + Kne * moments_e(1, ine, ikr, ikz, updatetlevel) - END DO - endif - ! ENDIF - !! Sum(kernel**2) - ! IF ( DK ) THEN - ! sum_kernel2_e = 1._dp - 2._dp*be_2 + be_2**2!(1._dp-be_2)**2 - ! ELSE - ! Initialization for n = 0 (ine = 1) - Kne = exp(-be_2) - sum_kernel2_e = Kne**2 - ! loop over n only without caring of jmax since no moment dependency - ! DO ine=2,10 - if (jmaxe .GT. 0) then - DO ine=2,jmaxe+1 ! ine = n+1 - ine_dp = REAL(ine-1,dp) ! Real index (0 to jmax) - Kne = Kne * be_2/ine_dp ! update kernel_n - sum_kernel2_e = sum_kernel2_e + Kne**2 ! ... sum recursively ... - END DO - ENDIF + ! Initialization for n = 0 (ine = 1) + Kne = exp(-be_2) + sum_kernel_mom_e = Kne*moments_e(1, 1, ikr, ikz, updatetlevel) + ! loop over n only if the max polynomial degree is 1 or more + if (jmaxe .GT. 0) then + DO ine=2,jmaxe+1 ! ine = n+1 + ine_dp = REAL(ine-1,dp) + ! We update iteratively the kernel functions (to spare factorial computations) + Kne = Kne * be_2/ine_dp + sum_kernel_mom_e = sum_kernel_mom_e + Kne * moments_e(1, ine, ikr, ikz, updatetlevel) + END DO + endif + ! Initialization for n = 0 (ine = 1) + Kne = exp(-be_2) + sum_kernel2_e = Kne**2 + ! loop over n only without caring of jmax since no moment dependency + ! DO ine=2,10 + if (jmaxe .GT. 0) then + DO ine=2,jmaxe+1 ! ine = n+1 + ine_dp = REAL(ine-1,dp) ! Real index (0 to jmax) + Kne = Kne * be_2/ine_dp ! update kernel_n + sum_kernel2_e = sum_kernel2_e + Kne**2 ! ... sum recursively ... + END DO + ENDIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!! Ions sum(Kernel * Ni0n) (skm) and sum(Kernel**2) (sk2) !! Sum(kernel * Moments_0n) ! Initialization for n = 0 (ini = 1) - ! IF ( DK ) THEN - ! sum_kernel_mom_i = moments_i(1, 1, ikr, ikz, updatetlevel) - ! ELSE Kni = exp(-bi_2) sum_kernel_mom_i = Kni*moments_i(1, 1, ikr, ikz, updatetlevel) ! loop over n only if the max polynomial degree is 1 or more @@ -91,11 +80,7 @@ SUBROUTINE poisson sum_kernel_mom_i = sum_kernel_mom_i + Kni * moments_i(1, ini, ikr, ikz, updatetlevel) END DO endif - ! ENDIF - !! Sum(kernel**2) - ! IF ( DK ) THEN - ! sum_kernel2_i = 1._dp - 2._dp*bi_2 + bi_2**2 !(1._dp-bi_2)**2 - ! ELSE + ! Initialization for n = 0 (ini = 1) Kni = exp(-bi_2) sum_kernel2_i = Kni**2 @@ -113,10 +98,6 @@ SUBROUTINE poisson alphaD = kperp2 * lambdaD**2 gammaD = alphaD + qe2_taue * (1._dp - sum_kernel2_e) & ! Called Poisson_ in MOLI + qi2_taui * (1._dp - sum_kernel2_i) - ! ! Adiabatic electron response - ! IF ( q_e .EQ. 0 ) THEN - ! gammaD = gammaD + 1._dp - ! ENDIF gammaD_phi = q_e * sum_kernel_mom_e + q_i * sum_kernel_mom_i @@ -125,12 +106,6 @@ SUBROUTINE poisson ENDIF phi(ikr, ikz) = gammaD_phi/gammaD - ! write(*,*) -2._dp*gammaD,' ',-kperp2 - ! phi(ikr, ikz) = -gammaD_phi/kperp2 - ! write(*,*) 'gD = ', gammaD,', kperp = ',-kperp2 - ! write(*,*) 'sum_kernel2_i = ', sum_kernel2_i, ', sum_kernel2_e', sum_kernel2_e - ! phi(ikr, ikz) = gammaD_phi/(qi2_taui * (sum_kernel2_i)) - ! phi(ikr, ikz) = -moments_i(1,1,ikr,ikz,1)/kperp2 END DO END DO diff --git a/src/stepon.F90 b/src/stepon.F90 index eb55a10497c7a6e6d5219ca7dfe8b1fce9cd4729..a900af8f3a52abd47db8e264f5a6d92e6ad24950 100644 --- a/src/stepon.F90 +++ b/src/stepon.F90 @@ -40,6 +40,8 @@ SUBROUTINE stepon ENDIF !(The two routines above are called in inital for t=0) + CALL enforce_symetry() ! Enforcing symmetry on kr = 0 + CALL checkfield_all() END DO @@ -62,4 +64,25 @@ SUBROUTINE stepon ENDIF END SUBROUTINE checkfield_all + SUBROUTINE enforce_symetry + + DO ip=ips_e,ipe_e + DO ij=ijs_e,ije_e + DO ikz=2,Nkz/2 !symmetry at kr = 0 + moments_e( ip,ij,1,ikz, :) = CONJG(moments_e( ip,ij,1,Nkz+2-ikz, :)) + END DO + END DO + END DO + DO ip=ips_i,ipe_i + DO ij=ijs_i,ije_i + DO ikz=2,Nkz/2 !symmetry at kr = 0 + moments_i( ip,ij,1,ikz, :) = CONJG(moments_i( ip,ij,1,Nkz+2-ikz, :)) + END DO + END DO + END DO + DO ikz=2,Nkz/2 !symmetry at kr = 0 + phi(1,ikz) = phi(1,Nkz+2-ikz) + END DO + END SUBROUTINE enforce_symetry + END SUBROUTINE stepon diff --git a/src/time_integration_mod.F90 b/src/time_integration_mod.F90 index 4936e6f9ec9a94bddf6124829ef61a42df7c4fb7..3f473707ea390b27deebb96853e9327eb387cc69 100644 --- a/src/time_integration_mod.F90 +++ b/src/time_integration_mod.F90 @@ -8,8 +8,8 @@ MODULE time_integration INTEGER, PUBLIC, PROTECTED :: updatetlevel ! Current time level to be updated real(dp),PUBLIC,PROTECTED,DIMENSION(:,:),ALLOCATABLE :: A_E,A_I - real(dp),PUBLIC,PROTECTED,DIMENSION(:),ALLOCATABLE :: b_E,b_I - real(dp),PUBLIC,PROTECTED,DIMENSION(:),ALLOCATABLE :: c_E,c_I !Coeff for Expl/Implic time integration in case of time dependent RHS (i.e. dy/dt = f(y,t)) see Baptiste Frei CSE Rapport 06/17 + real(dp),PUBLIC,PROTECTED,DIMENSION(:),ALLOCATABLE :: b_E,b_Es,b_I + real(dp),PUBLIC,PROTECTED,DIMENSION(:),ALLOCATABLE :: c_E,c_I !Coeff for Expl/Implic time integration in case of time dependent RHS (i.e. dy/dt = f(y,t)) see Baptiste Frei CSE Rapport 06/17 character(len=10),PUBLIC,PROTECTED :: numerical_scheme='RK4' @@ -47,9 +47,9 @@ CONTAINS IMPLICIT NONE INTEGER, INTENT(in) :: fidres CHARACTER(len=256), INTENT(in) :: str - + CALL attach(fidres, TRIM(str), "numerical_scheme", numerical_scheme) - + END SUBROUTINE time_integration_outputinputs @@ -57,7 +57,7 @@ CONTAINS SUBROUTINE set_numerical_scheme ! Initialize Butcher coefficient of numerical_scheme - use basic + use basic IMPLICIT NONE SELECT CASE (numerical_scheme) @@ -65,7 +65,9 @@ CONTAINS CALL RK4 CASE ('DOPRI5') CALL DOPRI5 - CASE DEFAULT + CASE ('DOPRI5_ADAPT') + CALL DOPRI5_ADAPT + CASE DEFAULT WRITE(*,*) 'Cannot initialize time integration scheme. Name invalid.' END SELECT @@ -82,20 +84,20 @@ CONTAINS INTEGER,PARAMETER :: nbstep = 4 CALL allocate_array_dp1(c_E,1,nbstep) - CALL allocate_array_dp1(b_E,1,nbstep) + CALL allocate_array_dp1(b_E,1,nbstep) CALL allocate_array_dp2(A_E,1,nbstep,1,nbstep) ntimelevel = 4 - c_E(1) = 0.0_dp + c_E(1) = 0.0_dp c_E(2) = 1.0_dp/2.0_dp c_E(3) = 1.0_dp/2.0_dp c_E(4) = 1.0_dp b_E(1) = 1.0_dp/6.0_dp - b_E(2) = 1.0_dp/3.0_dp + b_E(2) = 1.0_dp/3.0_dp b_E(3) = 1.0_dp/3.0_dp - b_E(4) = 1.0_dp/6.0_dp + b_E(4) = 1.0_dp/6.0_dp A_E(2,1) = 1.0_dp/2.0_dp A_E(3,2) = 1.0_dp/2.0_dp @@ -108,22 +110,22 @@ CONTAINS SUBROUTINE DOPRI5 ! Butcher coeff for DOPRI5 --> Stiffness detection ! DOPRI5 used for stiffness detection. - ! 5 order method/7 stages + ! 5 order method/7 stages USE basic IMPLICIT NONE INTEGER,PARAMETER :: nbstep =7 CALL allocate_array_dp1(c_E,1,nbstep) - CALL allocate_array_dp1(b_E,1,nbstep) + CALL allocate_array_dp1(b_E,1,nbstep) CALL allocate_array_dp2(A_E,1,nbstep,1,nbstep) ntimelevel = 7 ! c_E(1) = 0._dp - c_E(2) = 1.0_dp/5.0_dp - c_E(3) = 3.0_dp /10.0_dp - c_E(4) = 4.0_dp/5.0_dp + c_E(2) = 1.0_dp/5.0_dp + c_E(3) = 3.0_dp /10.0_dp + c_E(4) = 4.0_dp/5.0_dp c_E(5) = 8.0_dp/9.0_dp c_E(6) = 1.0_dp c_E(7) = 1.0_dp @@ -159,4 +161,67 @@ CONTAINS ! END SUBROUTINE DOPRI5 + SUBROUTINE DOPRI5_ADAPT + ! Butcher coeff for DOPRI5 --> Stiffness detection + ! DOPRI5 used for stiffness detection. + ! 5 order method/7 stages + + USE basic + IMPLICIT NONE + INTEGER,PARAMETER :: nbstep =7 + + CALL allocate_array_dp1(c_E,1,nbstep) + CALL allocate_array_dp1(b_E,1,nbstep) + CALL allocate_array_dp1(b_Es,1,nbstep) + CALL allocate_array_dp2(A_E,1,nbstep,1,nbstep) + + ntimelevel = 7 + ! + c_E(1) = 0._dp + c_E(2) = 1.0_dp/5.0_dp + c_E(3) = 3.0_dp /10.0_dp + c_E(4) = 4.0_dp/5.0_dp + c_E(5) = 8.0_dp/9.0_dp + c_E(6) = 1.0_dp + c_E(7) = 1.0_dp + ! + A_E(2,1) = 1.0_dp/5.0_dp + A_E(3,1) = 3.0_dp/40.0_dp + A_E(3,2) = 9.0_dp/40.0_dp + A_E(4,1) = 44.0_dp/45.0_dp + A_E(4,2) = -56.0_dp/15.0_dp + A_E(4,3) = 32.0_dp/9.0_dp + A_E(5,1 ) = 19372.0_dp/6561.0_dp + A_E(5,2) = -25360.0_dp/2187.0_dp + A_E(5,3) = 64448.0_dp/6561.0_dp + A_E(5,4) = -212.0_dp/729.0_dp + A_E(6,1) = 9017.0_dp/3168.0_dp + A_E(6,2)= -355.0_dp/33.0_dp + A_E(6,3) = 46732.0_dp/5247.0_dp + A_E(6,4) = 49.0_dp/176.0_dp + A_E(6,5) = -5103.0_dp/18656.0_dp + A_E(7,1) = 35.0_dp/384.0_dp + A_E(7,3) = 500.0_dp/1113.0_dp + A_E(7,4) = 125.0_dp/192.0_dp + A_E(7,5) = -2187.0_dp/6784.0_dp + A_E(7,6) = 11.0_dp/84.0_dp + ! + b_E(1) = 35.0_dp/384.0_dp + b_E(2) = 0._dp + b_E(3) = 500.0_dp/1113.0_dp + b_E(4) = 125.0_dp/192.0_dp + b_E(5) = -2187.0_dp/6784.0_dp + b_E(6) = 11.0_dp/84.0_dp + b_E(7) = 0._dp + ! + b_Es(1) = 5179.0_dp/57600.0_dp + b_Es(2) = 0._dp + b_Es(3) = 7571.0_dp/16695.0_dp + b_Es(4) = 393.0_dp/640.0_dp + b_Es(5) = -92097.0_dp/339200.0_dp + b_Es(6) = 187.0_dp/2100.0_dp + b_Es(7) = 1._dp/40._dp + ! + END SUBROUTINE DOPRI5_ADAPT + END MODULE time_integration