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

📄 pml_update.f90

📁 Sfdtd Simple finite-difference time-domain
💻 F90
📖 第 1 页 / 共 5 页
字号:
        IF (iy .EQ. b%min_yo .OR. iy .EQ. b%max_yo) THEN          b%top_x%E(ix, iy, iz, 1) = 0.0d0          b%top_x%E(ix, iy, iz, 2) = 0.0d0        ELSEIF (iz .EQ. b%min_zo .OR. iz .EQ. b%max_zo) THEN          b%top_x%E(ix, iy, iz, 1) = 0.0d0          b%top_x%E(ix, iy, iz, 2) = 0.0d0        ELSE          c1 = EXP(- b%top_x%sigma(ix, iy, iz, 2)*g%dt/g%eps)          CALL compute_E_factor(g, b%top_x%sigma(ix, iy, iz, 2), c1, c2)          c3 = EXP(- b%top_x%sigma(ix, iy, iz, 3)*g%dt/g%eps)          CALL compute_E_factor(g, b%top_x%sigma(ix, iy, iz, 3), c3, c4)          b%top_x%E(ix, iy, iz, 1) =     c1 *   b%top_x%E(ix, iy, iz, 1)              &                                       + c2 * ( b%top_x%H(ix, iy, iz, 5)              &                                              - b%top_x%H(ix, iy-1, iz, 5)            &                                              + b%top_x%H(ix, iy, iz, 6)              &                                              - b%top_x%H(ix, iy-1, iz, 6))          b%top_x%E(ix, iy, iz, 2) =     c3 *   b%top_x%E(ix, iy, iz, 2)              &                                       - c4 * ( b%top_x%H(ix, iy, iz, 3)              &                                              - b%top_x%H(ix, iy, iz-1, 3)            &                                              + b%top_x%H(ix, iy, iz, 4)              &                                              - b%top_x%H(ix, iy, iz-1, 4))        ENDIF      ENDDO    ENDDO  ENDDO  ! bas_y  DO ix = g%nxl, g%nxyh, 1    DO iy = b%min_yo, g%nyl-1, 1      DO iz = b%min_zo, b%max_zo, 1         IF (iy  .EQ. b%min_yo) THEN          b%bas_y%E(ix, iy, iz, 1) = 0.0d0          b%bas_y%E(ix, iy, iz, 2) = 0.0d0        ELSEIF (iz .EQ. b%min_zo .OR. iz .EQ. b%max_zo) THEN          b%bas_y%E(ix, iy, iz, 1) = 0.0d0          b%bas_y%E(ix, iy, iz, 2) = 0.0d0        ELSE          c1 = EXP(- b%bas_y%sigma(ix, iy, iz, 2)*g%dt/g%eps)          CALL compute_E_factor(g, b%bas_y%sigma(ix, iy, iz, 2), c1, c2)          c3 = EXP(- b%bas_y%sigma(ix, iy, iz, 3)*g%dt/g%eps)          CALL compute_E_factor(g, b%bas_y%sigma(ix, iy, iz, 3), c3, c4)          b%bas_y%E(ix, iy, iz, 1) =     c1 *   b%bas_y%E(ix, iy, iz, 1)                &                                       + c2 * ( b%bas_y%H(ix, iy, iz, 5)                &                                              - b%bas_y%H(ix, iy-1, iz, 5)              &                                              + b%bas_y%H(ix, iy, iz, 6)                &                                              - b%bas_y%H(ix, iy-1, iz, 6))          b%bas_y%E(ix, iy, iz, 2) =     c3 *   b%bas_y%E(ix, iy, iz, 2)                &                                       - c4 * ( b%bas_y%H(ix, iy, iz, 3)                &                                              - b%bas_y%H(ix, iy, iz-1, 3)              &                                              + b%bas_y%H(ix, iy, iz, 4)                &                                              - b%bas_y%H(ix, iy, iz-1, 4))        ENDIF      ENDDO    ENDDO  ENDDO  ! top_y  DO ix = g%nxl, g%nxyh, 1    DO iy = g%nygh, b%max_yo, 1      DO iz = b%min_zo, b%max_zo, 1         IF (iy .EQ. b%max_yo) THEN          b%top_y%E(ix, iy, iz, 1) = 0.0d0          b%top_y%E(ix, iy, iz, 2) = 0.0d0        ELSEIF (iz .EQ. b%min_zo .OR. iz .EQ. b%max_zo) THEN          b%top_y%E(ix, iy, iz, 1) = 0.0d0          b%top_y%E(ix, iy, iz, 2) = 0.0d0        ELSE          IF (iy .EQ. g%nygh) THEN            IF (iz < g%nzl) THEN              Hzx_1 = b%bas_z%H(ix, iy-1, iz, 5)              Hzy_1 = b%bas_z%H(ix, iy-1, iz, 6)            ELSEIF (iz > g%nzyh) THEN              Hzx_1 = b%top_z%H(ix, iy-1, iz, 5)              Hzy_1 = b%top_z%H(ix, iy-1, iz, 6)            ELSE              Hzx_1 = g%H(ix, iy-1, iz, 3)              Hzy_1 = 0.0d0            ENDIF          ELSE            Hzx_1 = b%top_y%H(ix, iy-1, iz, 5)            Hzy_1 = b%top_y%H(ix, iy-1, iz, 6)          ENDIF          c1 = EXP(- b%top_y%sigma(ix, iy, iz, 2)*g%dt/g%eps)          CALL compute_E_factor(g, b%top_y%sigma(ix, iy, iz, 2), c1, c2)          c3 = EXP(- b%top_y%sigma(ix, iy, iz, 3)*g%dt/g%eps)          CALL compute_E_factor(g, b%top_y%sigma(ix, iy, iz, 3), c3, c4)          b%top_y%E(ix, iy, iz, 1) =     c1 *   b%top_y%E(ix, iy, iz, 1)                &                                       + c2 * ( b%top_y%H(ix, iy, iz, 5)                &                                              - Hzx_1                                   &                                              + b%top_y%H(ix, iy, iz, 6)                &                                              - Hzy_1)          b%top_y%E(ix, iy, iz, 2) =     c3 *   b%top_y%E(ix, iy, iz, 2)                &                                       - c4 * ( b%top_y%H(ix, iy, iz, 3)                &                                              - b%top_y%H(ix, iy, iz-1, 3)              &                                              + b%top_y%H(ix, iy, iz, 4)                &                                              - b%top_y%H(ix, iy, iz-1, 4))        ENDIF      ENDDO    ENDDO  ENDDO  ! bas_z  DO ix = g%nxl, g%nxyh, 1    DO iy = g%nyl, g%nyyh, 1      DO iz = b%min_zo, g%nzl-1, 1                 IF (iz .EQ. b%min_zo) THEN          b%bas_z%E(ix, iy, iz, 1) = 0.0d0          b%bas_z%E(ix, iy, iz, 2) = 0.0d0        ELSE          IF(iy .EQ. g%nyl) THEN            Hzx_1 = b%bas_y%H(ix, iy-1, iz, 5)            Hzy_1 = b%bas_y%H(ix, iy-1, iz, 6)          ELSE            Hzx_1 = b%bas_z%H(ix, iy-1, iz, 5)            Hzy_1 = b%bas_z%H(ix, iy-1, iz, 6)          ENDIF          c1 = EXP(- b%bas_z%sigma(ix, iy, iz, 2)*g%dt/g%eps)          CALL compute_E_factor(g, b%bas_z%sigma(ix, iy, iz, 2), c1, c2)          c3 = EXP(- b%bas_z%sigma(ix, iy, iz, 3)*g%dt/g%eps)          CALL compute_E_factor(g, b%bas_z%sigma(ix, iy, iz, 3), c3, c4)          b%bas_z%E(ix, iy, iz, 1) =     c1 *   b%bas_z%E(ix, iy, iz, 1)                &                                       + c2 * ( b%bas_z%H(ix, iy, iz, 5)                &                                              - Hzx_1                                   &                                              + b%bas_z%H(ix, iy, iz, 6)                &                                              - Hzy_1)          b%bas_z%E(ix, iy, iz, 2) =     c3 *   b%bas_z%E(ix, iy, iz, 2)                &                                       - c4 * ( b%bas_z%H(ix, iy, iz, 3)                &                                              - b%bas_z%H(ix, iy, iz-1, 3)              &                                              + b%bas_z%H(ix, iy, iz, 4)                &                                              - b%bas_z%H(ix, iy, iz-1, 4))        ENDIF      ENDDO    ENDDO  ENDDO  ! top_z  DO ix = g%nxl, g%nxyh, 1    DO iy = g%nyl, g%nyyh, 1      DO iz = g%nzgh, b%max_zo, 1         IF (iz .EQ. b%max_zo) THEN          b%top_z%E(ix, iy, iz, 1) = 0.0d0          b%top_z%E(ix, iy, iz, 2) = 0.0d0        ELSE          IF(iy .EQ. g%nyl) THEN            Hzx_1 = b%bas_y%H(ix, iy-1, iz, 5)            Hzy_1 = b%bas_y%H(ix, iy-1, iz, 6)          ELSE            Hzx_1 = b%top_z%H(ix, iy-1, iz, 5)            Hzy_1 = b%top_z%H(ix, iy-1, iz, 6)          ENDIF          IF(iz .EQ. g%nzgh) THEN            Hyz_1 = g%H(ix, iy, iz-1, 2)             Hyx_1 = 0.0d0          ELSE            Hyz_1 = b%top_z%H(ix, iy, iz-1, 3)            Hyx_1 = b%top_z%H(ix, iy, iz-1, 4)          ENDIF          c1 = EXP(- b%top_z%sigma(ix, iy, iz, 2)*g%dt/g%eps)          CALL compute_E_factor(g, b%top_z%sigma(ix, iy, iz, 2), c1, c2)          c3 = EXP(- b%top_z%sigma(ix, iy, iz, 3)*g%dt/g%eps)          CALL compute_E_factor(g, b%top_z%sigma(ix, iy, iz, 3), c3, c4)          b%top_z%E(ix, iy, iz, 1) =     c1 *   b%top_z%E(ix, iy, iz, 1)                &                                       + c2 * ( b%top_z%H(ix, iy, iz, 5)                &                                              - Hzx_1                                   &                                              + b%top_z%H(ix, iy, iz, 6)                &                                              - Hzy_1)          b%top_z%E(ix, iy, iz, 2) =     c3 *   b%top_z%E(ix, iy, iz, 2)                &                                       - c4 * ( b%top_z%H(ix, iy, iz, 3)                &                                              - Hyz_1                                   &                                              + b%top_z%H(ix, iy, iz, 4)                &                                              - Hyx_1)        ENDIF      ENDDO    ENDDO  ENDDOEND SUBROUTINE PML_update_ExSUBROUTINE PML_update_Ey(g, b)  TYPE(gitter), INTENT(IN)                                      :: g  TYPE(pml_boundary), INTENT(INOUT)                             :: b  INTEGER                                                       :: ix, iy, iz  DOUBLE PRECISION                                              :: c1, c2, c3, c4  DOUBLE PRECISION                                              :: Hxy_1, Hxz_1  DOUBLE PRECISION                                              :: Hzx_1, Hzy_1    ! bas_x  DO ix = b%min_xo, g%nxl-1, 1    DO iy = b%min_yo, b%max_yo-1, 1      DO iz = b%min_zo, b%max_zo, 1         IF (ix .EQ. b%min_xo) THEN          b%bas_x%E(ix, iy, iz, 3) = 0.0d0          b%bas_x%E(ix, iy, iz, 4) = 0.0d0        ELSEIF (iz .EQ. b%min_zo .OR. iz .EQ. b%max_zo) THEN          b%bas_x%E(ix, iy, iz, 3) = 0.0d0          b%bas_x%E(ix, iy, iz, 4) = 0.0d0        ELSE          c1 = EXP(- b%bas_x%sigma(ix, iy, iz, 3)*g%dt/g%eps)          CALL compute_E_factor(g, b%bas_x%sigma(ix, iy, iz, 3), c1, c2)          c3 = EXP(- b%bas_x%sigma(ix, iy, iz, 1)*g%dt/g%eps)          CALL compute_E_factor(g, b%bas_x%sigma(ix, iy, iz, 1), c3, c4)          b%bas_x%E(ix, iy, iz, 3) =     c1 *   b%bas_x%E(ix, iy, iz, 3)                &                                       + c2 * ( b%bas_x%H(ix, iy, iz, 1)                &                                              - b%bas_x%H(ix, iy, iz-1, 1)              &                                              + b%bas_x%H(ix, iy, iz, 2)                &                                              - b%bas_x%H(ix, iy, iz-1, 2))          b%bas_x%E(ix, iy, iz, 4) =     c3 *   b%bas_x%E(ix, iy, iz, 4)                &                                       - c4 * ( b%bas_x%H(ix, iy, iz, 5)                &                                              - b%bas_x%H(ix-1, iy, iz, 5)              &                                              + b%bas_x%H(ix, iy, iz, 6)                &                                              - b%bas_x%H(ix-1, iy, iz, 6))        ENDIF      ENDDO    ENDDO  ENDDO  ! top_x  DO ix = g%nxgh, b%max_xo, 1    DO iy = b%min_yo, b%max_yo-1, 1      DO iz = b%min_zo, b%max_zo, 1        IF (ix .EQ. b%max_xo) THEN           b%top_x%E(ix, iy, iz, 3) = 0.0d0          b%top_x%E(ix, iy, iz, 4) = 0.0d0        ELSEIF (iz .EQ. b%min_zo .OR. iz .EQ. b%max_zo) THEN          b%top_x%E(ix, iy, iz, 3) = 0.0d0          b%top_x%E(ix, iy, iz, 4) = 0.0d0        ELSE          IF(ix .EQ. g%nxgh) THEN            IF (iy < g%nyl) THEN              Hzx_1 = b%bas_y%H(ix-1, iy, iz, 5)              Hzy_1 = b%bas_y%H(ix-1, iy, iz, 6)            ELSEIF (iy > g%nyyh) THEN              Hzx_1 = b%top_y%H(ix-1, iy, iz, 5)              Hzy_1 = b%top_y%H(ix-1, iy, iz, 6)            ELSE              IF (iz < g%nzl) THEN                Hzx_1 = b%bas_z%H(ix-1, iy, iz, 5)                Hzy_1 = b%bas_z%H(ix-1, iy, iz, 6)              ELSEIF (iz > g%nzyh) THEN                Hzx_1 = b%top_z%H(ix-1, iy, iz, 5)                Hzy_1 = b%top_z%H(ix-1, iy, iz, 6)               ELSE                Hzx_1 = g%H(ix-1, iy, iz, 3)                Hzy_1 = 0.0d0              ENDIF            ENDIF          ELSE            Hzx_1 = b%top_x%H(ix-1, iy, iz, 5)            Hzy_1 = b%top_x%H(ix-1, iy, iz, 6)          ENDIF            c1 = EXP(- b%top_x%sigma(ix, iy, iz, 3)*g%dt/g%eps)          CALL compute_E_factor(g, b%top_x%sigma(ix, iy, iz, 3), c1, c2)          c3 = EXP(- b%top_x%sigma(ix, iy, iz, 1)*g%dt/g%eps)          CALL compute_E_factor(g, b%top_x%sigma(ix, iy, iz, 1), c3, c4)          b%top_x%E(ix, iy, iz, 3) =     c1 *   b%top_x%E(ix, iy, iz, 3)              &                                       + c2 * ( b%top_x%H(ix, iy, iz, 1)              &                                              - b%top_x%H(ix, iy, iz-1, 1)            &                                              + b%top_x%H(ix, iy, iz, 2)              &                                              - b%top_x%H(ix, iy, iz-1, 2))          b%top_x%E(ix, iy, iz, 4) =     c3 *   b%top_x%E(ix, iy, iz, 4)              &                                       - c4 * ( b%top_x%H(ix, iy, iz, 5)              &                                              - Hzx_1                                 &                                              + b%top_x%H(ix, iy, iz, 6)              &                                              - Hzy_1 )        ENDIF      ENDDO    ENDDO  ENDDO  ! bas_y  DO ix = g%nxl, g%nxyh, 1    DO iy = b%min_yo, g%nyl-1, 1      DO iz = b%min_zo, b%max_zo, 1         IF (iz .EQ. b%min_zo .OR. iz .EQ. b%max_zo) THEN          b%bas_y%E(ix, iy, iz, 3) = 0.0d0          b%bas_y%E(ix, iy, iz, 4) = 0.0d0

⌨️ 快捷键说明

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