Newer
Older
MODULE advance_field_routine
USE prec_const
implicit none
CONTAINS
SUBROUTINE advance_time_level
USE basic
USE time_integration
use prec_const
IMPLICIT NONE
CALL set_updatetlevel(mod(updatetlevel,ntimelevel)+1)
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
SUBROUTINE advance_moments_explicit
USE basic
USE time_integration
USE grid
use prec_const
use fields, ONLY: moments_e, moments_i
use array, ONLY: moments_rhs_e, moments_rhs_i
IMPLICIT NONE
INTEGER :: istage
! Execution time start
CALL cpu_time(t0_adv_field)
SELECT CASE (updatetlevel)
CASE(1)
DO istage=1,ntimelevel
moments_e(ips_e:ipe_e,ijs_e:ije_e,:,:,1) = moments_e(ips_e:ipe_e,ijs_e:ije_e,:,:,1) &
+ dt*b_E(istage)*moments_rhs_e(ips_e:ipe_e,ijs_e:ije_e,:,:,istage)
END DO
! Advance ions
DO istage=1,ntimelevel
moments_i(ips_i:ipe_i,ijs_i:ije_i,:,:,1) = moments_i(ips_i:ipe_i,ijs_i:ije_i,:,:,1) &
+ dt*b_E(istage)*moments_rhs_i(ips_i:ipe_i,ijs_i:ije_i,:,:,istage)
END DO
CASE DEFAULT
! Advance electrons
moments_e(ips_e:ipe_e,ijs_e:ije_e,:,:,updatetlevel) = moments_e(ips_e:ipe_e,ijs_e:ije_e,:,:,1);
DO istage=1,updatetlevel-1
moments_e(ips_e:ipe_e,ijs_e:ije_e,:,:,updatetlevel) = moments_e(ips_e:ipe_e,ijs_e:ije_e,:,:,updatetlevel) &
+ dt*A_E(updatetlevel,istage)*moments_rhs_e(ips_e:ipe_e,ijs_e:ije_e,:,:,istage)
END DO
! Advance ions
moments_i(ips_i:ipe_i,ijs_i:ije_i,:,:,updatetlevel) = moments_i(ips_i:ipe_i,ijs_i:ije_i,:,:,1);
DO istage=1,updatetlevel-1
moments_i(ips_i:ipe_i,ijs_i:ije_i,:,:,updatetlevel) = moments_i(ips_i:ipe_i,ijs_i:ije_i,:,:,updatetlevel) &
+ dt*A_E(updatetlevel,istage)*moments_rhs_i(ips_i:ipe_i,ijs_i:ije_i,:,:,istage)
END DO
END SELECT
! Execution time end
CALL cpu_time(t1_adv_field)
tc_adv_field = tc_adv_field + (t1_adv_field - t0_adv_field)
END SUBROUTINE advance_moments_explicit
SUBROUTINE advance_field( f, f_rhs )
USE basic
USE time_integration
USE array
Antoine Cyril David Hoffmann
committed
COMPLEX(dp), DIMENSION ( ikrs:ikre, ikzs:ikze, ntimelevel ) :: f
COMPLEX(dp), DIMENSION ( ikrs:ikre, ikzs:ikze, ntimelevel ) :: f_rhs
DO ikr=ikrs,ikre
DO istage=1,ntimelevel
f(ikr,ikz,1) = f(ikr,ikz,1) + dt*b_E(istage)*f_rhs(ikr,ikz,istage)
END DO
END DO
END DO
CASE DEFAULT
DO istage=1,updatetlevel-1
f(ikr,ikz,updatetlevel) = f(ikr,ikz,updatetlevel) + &
dt*A_E(updatetlevel,istage)*f_rhs(ikr,ikz,istage)
END DO
END DO
END DO
END SELECT
END SUBROUTINE advance_field
END MODULE advance_field_routine