⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 liao.f90

📁 Sfdtd Simple finite-difference time-domain
💻 F90
📖 第 1 页 / 共 2 页
字号:
  TYPE(rand), INTENT(IN), DIMENSION(1:2)                   :: un  INTEGER                                                  :: ix, iy, iz  ! x Ebene  DO iy = g%nyl, g%nyyh, 1    DO iz = g%nzl+1, g%nzyh, 1      ! E_y      g%E(g%nxl, iy, iz, 2) = 2.0d0 * zero%faceXl(iy, iz, 1) - un(2)%faceXl(iy, iz, 1)      g%E(g%nxgh, iy, iz, 2) = 2.0d0 * zero%faceXh(iy, iz, 1) - un(2)%faceXh(iy, iz, 1)    ENDDO  ENDDO  DO iy = g%nyl+1, g%nyyh, 1    DO iz = g%nzl, g%nzyh, 1      ! E_z      g%E(g%nxl, iy, iz, 3) = 2.0d0 * zero%faceXl(iy, iz, 2) - un(2)%faceXl(iy, iz, 2)      g%E(g%nxgh, iy, iz, 3) = 2.0d0 * zero%faceXh(iy, iz, 2) - un(2)%faceXh(iy, iz, 2)    ENDDO  ENDDO  ! y   DO ix = g%nxl, g%nxyh, 1    DO iz = g%nzl+1, g%nzyh, 1      ! E_x      g%E(ix, g%nyl, iz, 1) = 2.0d0 * zero%faceYl(ix, iz, 1) - un(2)%faceYl(ix, iz, 1)      g%E(ix, g%nygh, iz, 1) = 2.0d0 * zero%faceYh(ix, iz, 1) - un(2)%faceYh(ix, iz, 1)    ENDDO  ENDDO  DO ix = g%nxl, g%nxgh, 1    DO iz = g%nzl, g%nzyh, 1      ! E_z      g%E(ix, g%nyl, iz, 3) = 2.0d0 * zero%faceYl(ix, iz, 2) - un(2)%faceYl(ix, iz, 2)      g%E(ix, g%nygh, iz, 3) = 2.0d0 * zero%faceYh(ix, iz, 2) - un(2)%faceYh(ix, iz, 2)    ENDDO  ENDDO  ! und z   DO ix = g%nxl, g%nxyh, 1    DO iy = g%nyl, g%nygh, 1      ! E_x      g%E(ix, iy, g%nzl, 1) = 2.0d0 * zero%faceZl(ix, iy, 1) - un(2)%faceZl(ix, iy, 1)      g%E(ix, iy, g%nzgh, 1) = 2.0d0 * zero%faceZh(ix, iy, 1) - un(2)%faceZh(ix, iy, 1)    ENDDO  ENDDO  DO ix = g%nxl, g%nxgh, 1    DO iy = g%nyl, g%nyyh, 1      ! E_y       g%E(ix, iy, g%nzl, 2) = 2.0d0 * zero%faceZl(ix, iy, 2) - un(2)%faceZl(ix, iy, 2)      g%E(ix, iy, g%nzgh, 2) = 2.0d0 * zero%faceZh(ix, iy, 2) - un(2)%faceZh(ix, iy, 2)    ENDDO  ENDDOEND SUBROUTINE add_liao_second_order! Liao ABC 3. Ordnung ohne Interpolation (Speicherung 0)SUBROUTINE store_liao_zero(g, zero)  TYPE(gitter), INTENT(IN)                                 :: g  TYPE(rand), INTENT(INOUT)                                :: zero  INTEGER                                                  :: ix, iy, iz  ! x Ebene  DO iy = g%nyl, g%nyyh, 1    DO iz = g%nzl+1, g%nzyh, 1    ! E_y      zero%faceXl(iy, iz, 1) = g%E(g%nxl+1, iy, iz, 2)      zero%faceXh(iy, iz, 1) = g%E(g%nxyh, iy, iz, 2)    ENDDO  ENDDO  DO iy = g%nyl+1, g%nyyh, 1    DO iz = g%nzl, g%nzyh, 1    ! E_z      zero%faceXl(iy, iz, 2) = g%E(g%nxl+1, iy, iz, 3)      zero%faceXh(iy, iz, 2) = g%E(g%nxyh, iy, iz, 3)    ENDDO  ENDDO  ! y   DO ix = g%nxl, g%nxyh, 1    DO iz = g%nzl+1, g%nzyh, 1      ! E_x      zero%faceYl(ix, iz, 1) = g%E(ix, g%nyl + 1, iz, 1)      zero%faceYh(ix, iz, 1) = g%E(ix, g%nyyh, iz, 1)    ENDDO  ENDDO  DO ix = g%nxl, g%nxgh, 1    DO iz = g%nzl, g%nzyh, 1      ! E_z      zero%faceYl(ix, iz, 2) = g%E(ix, g%nyl + 1, iz, 3)      zero%faceYh(ix, iz, 2) = g%E(ix, g%nyyh, iz, 3)    ENDDO  ENDDO  ! und z   DO ix = g%nxl, g%nxyh, 1    DO iy = g%nyl, g%nygh, 1      ! E_x      zero%faceZl(ix, iy, 1) = g%E(ix, iy, g%nzl + 1, 1)      zero%faceZh(ix, iy, 1) = g%E(ix, iy, g%nzyh, 1)    ENDDO  ENDDO  DO ix = g%nxl, g%nxgh, 1    DO iy = g%nyl, g%nyyh, 1      ! E_y      zero%faceZl(ix, iy, 2) = g%E(ix, iy, g%nzl + 1, 2)      zero%faceZh(ix, iy, 2) = g%E(ix, iy, g%nzyh, 2)    ENDDO  ENDDOEND SUBROUTINE store_liao_zero! Liao ABC 3. Ordnung ohne Interpolation (Speicherung 1)SUBROUTINE store_liao_one(g, un)  TYPE(gitter), INTENT(IN)                                 :: g  TYPE(rand), INTENT(INOUT), DIMENSION(1:2)                :: un  INTEGER                                                  :: ix, iy, iz  un(2)%faceXl(:,:,:) = un(1)%faceXl(:,:,:)  un(2)%faceXh(:,:,:) = un(1)%faceXh(:,:,:)  un(2)%faceYl(:,:,:) = un(1)%faceYl(:,:,:)  un(2)%faceYh(:,:,:) = un(1)%faceYh(:,:,:)  un(2)%faceZl(:,:,:) = un(1)%faceZl(:,:,:)  un(2)%faceZh(:,:,:) = un(1)%faceZh(:,:,:)  ! x Ebene  DO iy = g%nyl, g%nyyh, 1    DO iz = g%nzl+1, g%nzyh, 1   ! E_y      un(1)%faceXl(iy, iz, 1) = g%E(g%nxl+2, iy, iz, 2)      un(1)%faceXh(iy, iz, 1) = g%E(g%nxyh-1, iy, iz, 2)    ENDDO  ENDDO  DO iy = g%nyl+1, g%nyyh, 1    DO iz = g%nzl, g%nzyh, 1      ! E_z      un(1)%faceXl(iy, iz, 2) = g%E(g%nxl+2, iy, iz, 3)      un(1)%faceXh(iy, iz, 2) = g%E(g%nxyh-1, iy, iz, 3)    ENDDO  ENDDO  ! y   DO ix = g%nxl, g%nxyh, 1    DO iz = g%nzl+1, g%nzyh, 1      ! E_x       un(1)%faceYl(ix, iz, 1) = g%E(ix, g%nyl + 2, iz, 1)      un(1)%faceYh(ix, iz, 1) = g%E(ix, g%nyyh - 1, iz, 1)    ENDDO  ENDDO  DO ix = g%nxl, g%nxgh, 1    DO iz = g%nzl, g%nzyh, 1      ! E_z      un(1)%faceYl(ix, iz, 2) = g%E(ix, g%nyl + 2, iz, 3)      un(1)%faceYh(ix, iz, 2) = g%E(ix, g%nyyh - 1, iz, 3)    ENDDO  ENDDO  ! und z   DO ix = g%nxl, g%nxyh, 1    DO iy = g%nyl, g%nygh, 1      ! E_x       un(1)%faceZl(ix, iy, 1) = g%E(ix, iy, g%nzl + 2, 1)      un(1)%faceZh(ix, iy, 1) = g%E(ix, iy, g%nzyh - 1, 1)    ENDDO  ENDDO  DO ix = g%nxl, g%nxgh, 1    DO iy = g%nyl, g%nyyh, 1      ! E_y      un(1)%faceZl(ix, iy, 2) = g%E(ix, iy, g%nzl + 2, 2)      un(1)%faceZh(ix, iy, 2) = g%E(ix, iy, g%nzyh - 1, 2)    ENDDO  ENDDOEND SUBROUTINE store_liao_one! Liao ABC 3. Ordnung ohne Interpolation (Speicherung 2)SUBROUTINE store_liao_second(g, deux)  TYPE(gitter), INTENT(IN)                                 :: g  TYPE(rand), INTENT(INOUT), DIMENSION(1:3)                :: deux  INTEGER                                                  :: ix, iy, iz, i  DO i= 2, 1, -1    deux(i+1)%faceXl(:,:,:) = deux(i)%faceXl(:,:,:)    deux(i+1)%faceXh(:,:,:) = deux(i)%faceXh(:,:,:)    deux(i+1)%faceYl(:,:,:) = deux(i)%faceYl(:,:,:)    deux(i+1)%faceYh(:,:,:) = deux(i)%faceYh(:,:,:)    deux(i+1)%faceZl(:,:,:) = deux(i)%faceZl(:,:,:)    deux(i+1)%faceZh(:,:,:) = deux(i)%faceZh(:,:,:)  ENDDO  ! x Ebene  DO iy = g%nyl, g%nyyh, 1    DO iz = g%nzl+1, g%nzyh, 1    ! E_y       deux(1)%faceXl(iy, iz, 1) = g%E(g%nxl+3, iy, iz, 2)      deux(1)%faceXh(iy, iz, 1) = g%E(g%nxyh-2, iy, iz, 2)    ENDDO  ENDDO  DO iy = g%nyl+1, g%nyyh, 1    DO iz = g%nzl, g%nzyh, 1      ! E_z      deux(1)%faceXl(iy, iz, 2) = g%E(g%nxl+3, iy, iz, 3)      deux(1)%faceXh(iy, iz, 2) = g%E(g%nxyh-2, iy, iz, 3)    ENDDO  ENDDO  ! y   DO ix = g%nxl, g%nxyh, 1    DO iz = g%nzl+1, g%nzyh, 1     ! E_x       deux(1)%faceYl(ix, iz, 1) = g%E(ix, g%nyl + 3, iz, 1)      deux(1)%faceYh(ix, iz, 1) = g%E(ix, g%nyyh - 2, iz, 1)    ENDDO  ENDDO  DO ix = g%nxl, g%nxgh, 1    DO iz = g%nzl, g%nzyh, 1   ! E_z      deux(1)%faceYl(ix, iz, 2) = g%E(ix, g%nyl + 3, iz, 3)      deux(1)%faceYh(ix, iz, 2) = g%E(ix, g%nyyh - 2, iz, 3)     ENDDO  ENDDO  ! und z   DO ix = g%nxl, g%nxyh, 1    DO iy = g%nyl, g%nygh, 1      ! E_x       deux(1)%faceZl(ix, iy, 1) = g%E(ix, iy, g%nzl + 3, 1)      deux(1)%faceZh(ix, iy, 1) = g%E(ix, iy, g%nzyh - 2, 1)    ENDDO  ENDDO  DO ix = g%nxl, g%nxgh, 1    DO iy = g%nyl, g%nyyh, 1     ! E_y      deux(1)%faceZl(ix, iy, 2) = g%E(ix, iy, g%nzl + 3, 2)      deux(1)%faceZh(ix, iy, 2) = g%E(ix, iy, g%nzyh - 2, 2)    ENDDO  ENDDOEND SUBROUTINE store_liao_second! Third order Liao ABC without interpolation (Zufuegung)SUBROUTINE add_liao_no_interpolation(g, zero, un, deux)  TYPE(gitter), INTENT(INOUT)                              :: g  TYPE(rand), INTENT(IN)                                   :: zero  TYPE(rand), INTENT(IN), DIMENSION(1:2)                   :: un  TYPE(rand), INTENT(IN), DIMENSION(1:3)                   :: deux  INTEGER                                                  :: ix, iy, iz  ! x Ebene  DO iy = g%nyl, g%nyyh, 1    DO iz = g%nzl+1, g%nzyh, 1      ! E_y       g%E(g%nxl, iy, iz, 2) = 3.0d0 * (zero%faceXl(iy, iz, 1) - un(2)%faceXl(iy, iz, 1)) &                                + deux(3)%faceXl(iy, iz, 1)      g%E(g%nxgh, iy, iz, 2) = 3.0d0 * (zero%faceXh(iy, iz, 1) - un(2)%faceXh(iy, iz, 1)) &                                + deux(3)%faceXh(iy, iz, 1)    ENDDO  ENDDO  DO iy = g%nyl+1, g%nyyh, 1    DO iz = g%nzl, g%nzyh, 1      ! E_z      g%E(g%nxl, iy, iz, 3) = 3.0d0 * (zero%faceXl(iy, iz, 2) - un(2)%faceXl(iy, iz, 2)) &                                + deux(3)%faceXl(iy, iz, 2)      g%E(g%nxgh, iy, iz, 3) = 3.0d0 * (zero%faceXh(iy, iz, 2) - un(2)%faceXh(iy, iz, 2)) &                                + deux(3)%faceXh(iy, iz, 2)    ENDDO  ENDDO  ! y   DO ix = g%nxl, g%nxyh, 1    DO iz = g%nzl+1, g%nzyh, 1      ! E_x       g%E(ix, g%nyl, iz, 1) = 3.0d0 * (zero%faceYl(ix, iz, 1) - un(2)%faceYl(ix, iz, 1)) &                                + deux(3)%faceYl(ix, iz, 1)      g%E(ix, g%nygh, iz, 1) = 3.0d0 * (zero%faceYh(ix, iz, 1) - un(2)%faceYh(ix, iz, 1)) &                                + deux(3)%faceYh(ix, iz, 1)    ENDDO  ENDDO  DO ix = g%nxl, g%nxgh, 1    DO iz = g%nzl, g%nzyh, 1      ! E_z      g%E(ix, g%nyl, iz, 3) = 3.0d0 * (zero%faceYl(ix, iz, 2) - un(2)%faceYl(ix, iz, 2)) &                                + deux(3)%faceYl(ix, iz, 2)      g%E(ix, g%nygh, iz, 3) = 3.0d0 * (zero%faceYh(ix, iz, 2) - un(2)%faceYh(ix, iz, 2)) &                                + deux(3)%faceYh(ix, iz, 2)    ENDDO  ENDDO  ! und z   DO ix = g%nxl, g%nxyh, 1    DO iy = g%nyl, g%nygh, 1      ! E_x       g%E(ix, iy, g%nzl, 1) = 3.0d0 * (zero%faceZl(ix, iy, 1) - un(2)%faceZl(ix, iy, 1)) &                                + deux(3)%faceZl(ix, iy, 1)      g%E(ix, iy, g%nzgh, 1) = 3.0d0 * (zero%faceZh(ix, iy, 1) - un(2)%faceZh(ix, iy, 1)) &                                + deux(3)%faceZh(ix, iy, 1)    ENDDO  ENDDO  DO ix = g%nxl, g%nxgh, 1    DO iy = g%nyl, g%nyyh, 1     !  E_y       g%E(ix, iy, g%nzl, 2) = 3.0d0 * (zero%faceZl(ix, iy, 2) - un(2)%faceZl(ix, iy, 2)) &                                + deux(3)%faceZl(ix, iy, 2)      g%E(ix, iy, g%nzgh, 2) = 3.0d0 * (zero%faceZh(ix, iy, 2) - un(2)%faceZh(ix, iy, 2)) &                                + deux(3)%faceZh(ix, iy, 2)    ENDDO  ENDDO  END SUBROUTINE add_liao_no_interpolationEND MODULE liao 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -