?? liao.f90
字號:
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 + -