Skip to content
Snippets Groups Projects
advance_field.F90 1.23 KiB
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)
  END SUBROUTINE advance_time_level



  SUBROUTINE advance_field( f, f_rhs )

    USE basic
    USE time_integration
    USE array
    use prec_const
    IMPLICIT NONE

    COMPLEX(dp), DIMENSION ( ikrs:ikre, ikzs:ikze, ntimelevel ) :: f
    COMPLEX(dp), DIMENSION ( ikrs:ikre, ikzs:ikze, ntimelevel ) :: f_rhs
    INTEGER :: istage
    SELECT CASE (updatetlevel)
    CASE(1)
      DO ikz=ikzs,ikze
        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 ikz=ikzs,ikze
        DO ikr=ikrs,ikre
Antoine Cyril David Hoffmann's avatar
Antoine Cyril David Hoffmann committed
          f(ikr,ikz,updatetlevel) = f(ikr,ikz,1);
          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