diff --git a/src/advance_field.F90 b/src/advance_field.F90 index ef7d2e463336550ce2f93a37468e35c762dfd510..f8ee34c80aba555785fdd7aeed8d6648ae68027b 100644 --- a/src/advance_field.F90 +++ b/src/advance_field.F90 @@ -14,6 +14,49 @@ CONTAINS CALL set_updatetlevel(mod(updatetlevel,ntimelevel)+1) END SUBROUTINE advance_time_level + 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 )