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

📄 debug_pml.f90

📁 Sfdtd Simple finite-difference time-domain
💻 F90
字号:
! debug_pml.f90!!    density plot with PML layers    !!    Copyright (C) 2007  Paul Panserrieu, < peutetre@cs.tu-berlin.de >!!    This program is free software: you can redistribute it and/or modify!    it under the terms of the GNU General Public License as published by!    the Free Software Foundation, either version 3 of the License.! ! last modified: 19-10-2007 12:22:10 PM CESTMODULE debug_pmlUSE pml, ONLY: pml_gitter, pml_boundaryUSE plot, ONLY: tochUSE fdtd_gitter, ONLY: gitterIMPLICIT NONECONTAINSSUBROUTINE plot_pml_debug(g, b, it, n, plane, ebene)   TYPE(gitter), INTENT(IN)           :: g  TYPE(pml_boundary), INTENT(IN)     :: b  INTEGER, INTENT(IN)                :: it     INTEGER, INTENT(IN)                :: n     CHARACTER, INTENT(IN)              :: plane  INTEGER, INTENT(IN)               :: ebene  CALL density_pml(g, b, it, ebene, plane, 'E', n, 1, 'xxx')  CALL density_pml(g, b, it, ebene, plane, 'E', n, 2, 'xxx')  CALL density_pml(g, b, it, ebene, plane, 'E', n, 3, 'xxx')  CALL density_pml(g, b, it, ebene, plane, 'H', n, 1, 'xxx')  CALL density_pml(g, b, it, ebene, plane, 'H', n, 2, 'xxx')  CALL density_pml(g, b, it, ebene, plane, 'H', n, 3, 'xxx')END SUBROUTINE plot_pml_debugSUBROUTINE density_pml(g, b, t, ne, co, cf, n, component, memo)      TYPE(gitter), INTENT(IN)           :: g  TYPE(pml_boundary), INTENT(IN)     :: b  INTEGER, INTENT(IN)                :: t     INTEGER, INTENT(IN)                :: ne     INTEGER, INTENT(IN)                :: n    CHARACTER, INTENT(IN)              :: co     CHARACTER, INTENT(IN)              :: cf     INTEGER, INTENT(IN)                :: component   CHARACTER(len=3), INTENT(IN)       :: memo  INTEGER                            :: i1, i2  CHARACTER, DIMENSION(1:5)          :: x  CHARACTER(len=5)                   :: str  CHARACTER                          :: komp  CALL toch(x, t)  str = x(1)//x(2)//x(3)//x(4)//x(5)  IF (component .EQ. 1) THEN    komp = 'x'  ELSEIF (component .EQ. 2) THEN    komp = 'y'  ELSE    komp = 'z'  ENDIF  OPEN(10,FILE='pml_'//g%id//'_'//co//'_'//cf//komp//'_'//memo//str//'.plt',ACTION='WRITE')  WRITE(10,*) '$ DATA=CONTOUR'  WRITE(10,*) '% toplabel   = " "'  WRITE(10,*) '% subtitle   = "Zeitschritte: ', t, '"'  WRITE(10,*) '% interp     = 2'  WRITE(10,*) '% contfill   = on'  WRITE(10,*) '% meshplot   = off'  WRITE(10,*) '% nsteps     = 50'  WRITE(10,*) '% nx   =',  n + 1 + 2 * b%layers  WRITE(10,*) '% ny   =',  n + 1 + 2 * b%layers  WRITE(10,*) '% xmin = ', g%nxl-b%layers, 'xmax =', g%nxgh+b%layers  WRITE(10,*) '% ymin = ', g%nxl-b%layers, 'ymax =', g%nxgh+b%layers  IF ( co .EQ. 'x' ) THEN    WRITE(10,*) '% xlabel="y"'    WRITE(10,*) '% ylabel="z"'    IF (ne < g%nxl) THEN      DO i2 = g%nxl-b%layers, g%nxgh+b%layers, 1        DO i1 = g%nxl-b%layers, g%nxgh+b%layers, 1          IF( cf .EQ. 'E'  .OR. cf .EQ. 'e') THEN            WRITE(10,*)   b%bas_x%E(ne, i1, i2, 2 * component - 1) &                        + b%bas_x%E(ne, i1, i2, 2 * component)          ELSE            WRITE(10,*)   b%bas_x%H(ne, i1, i2, 2 * component - 1) &                        + b%bas_x%H(ne, i1, i2, 2 * component)          ENDIF        ENDDO      ENDDO    ELSEIF (ne > g%nxyh) THEN      DO i2 = g%nxl-b%layers, g%nxgh+b%layers, 1        DO i1 = g%nxl-b%layers, g%nxgh+b%layers, 1          IF( cf .EQ. 'E'  .OR. cf .EQ. 'e') THEN            WRITE(10,*)   b%top_x%E(ne, i1, i2, 2 * component - 1) &                        + b%top_x%E(ne, i1, i2, 2 * component)          ELSE            WRITE(10,*)   b%top_x%H(ne, i1, i2, 2 * component - 1) &                        + b%top_x%H(ne, i1, i2, 2 * component)          ENDIF        ENDDO      ENDDO    ELSE      DO i2 = g%nxl-b%layers, g%nxgh+b%layers, 1        DO i1 = g%nxl-b%layers, g%nxgh+b%layers, 1          IF (i1 < g%nyl) THEN                  IF( cf .EQ. 'E'  .OR. cf .EQ. 'e') THEN              WRITE(10,*)   b%bas_y%E(ne, i1, i2, 2 * component - 1) &                          + b%bas_y%E(ne, i1, i2, 2 * component)            ELSE              WRITE(10,*)   b%bas_y%H(ne, i1, i2, 2 * component - 1) &                          + b%bas_y%H(ne, i1, i2, 2 * component)            ENDIF          ELSEIF (i1 > g%nyyh) THEN            IF( cf .EQ. 'E'  .OR. cf .EQ. 'e') THEN              WRITE(10,*)   b%top_y%E(ne, i1, i2, 2 * component - 1) &                          + b%top_y%E(ne, i1, i2, 2 * component)            ELSE              WRITE(10,*)   b%top_y%H(ne, i1, i2, 2 * component - 1) &                          + b%top_y%H(ne, i1, i2, 2 * component)            ENDIF          ELSEIF (i2 < g%nzl) THEN            IF( cf .EQ. 'E'  .OR. cf .EQ. 'e') THEN              WRITE(10,*)   b%bas_z%E(ne, i1, i2, 2 * component - 1) &                          + b%bas_z%E(ne, i1, i2, 2 * component)            ELSE              WRITE(10,*)   b%bas_z%H(ne, i1, i2, 2 * component - 1) &                          + b%bas_z%H(ne, i1, i2, 2 * component)            ENDIF          ELSEIF (i2 > g%nzyh) THEN            IF( cf .EQ. 'E'  .OR. cf .EQ. 'e') THEN              WRITE(10,*)   b%top_z%E(ne, i1, i2, 2 * component - 1) &                          + b%top_z%E(ne, i1, i2, 2 * component)            ELSE              WRITE(10,*)   b%top_z%H(ne, i1, i2, 2 * component - 1) &                          + b%top_z%H(ne, i1, i2, 2 * component)            ENDIF          ELSE            IF( cf .EQ. 'E'  .OR. cf .EQ. 'e') THEN              WRITE(10,*) g%E(ne, i1, i2, component)            ELSE              WRITE(10,*) g%H(ne, i1, i2, component)            ENDIF          ENDIF        ENDDO      ENDDO    ENDIF  ENDIF  IF ( co .EQ. 'y' ) THEN    WRITE(10,*) '% xlabel="x"'    WRITE(10,*) '% ylabel="z"'    IF (ne < g%nyl) THEN      DO i2 = g%nxl-b%layers, g%nxgh+b%layers, 1        DO i1 = g%nxl-b%layers, g%nxgh+b%layers, 1          IF (i1 < g%nxl) THEN            IF( cf .EQ. 'E'  .OR. cf .EQ. 'e') THEN              WRITE(10,*)   b%bas_x%E(i1, ne, i2, 2 * component - 1) &                          + b%bas_x%E(i1, ne, i2, 2 * component)            ELSE              WRITE(10,*)   b%bas_x%H(i1, ne, i2, 2 * component - 1) &                          + b%bas_x%H(i1, ne, i2, 2 * component)            ENDIF          ELSEIF (i1 > g%nxyh) THEN            IF( cf .EQ. 'E'  .OR. cf .EQ. 'e') THEN              WRITE(10,*)   b%top_x%E(i1, ne, i2, 2 * component - 1) &                          + b%top_x%E(i1, ne, i2, 2 * component)            ELSE              WRITE(10,*)   b%top_x%H(i1, ne, i2, 2 * component - 1) &                          + b%top_x%H(i1, ne, i2, 2 * component)            ENDIF          ELSE            IF( cf .EQ. 'E'  .OR. cf .EQ. 'e') THEN              WRITE(10,*)   b%bas_y%E(i1, ne, i2, 2 * component - 1) &                          + b%bas_y%E(i1, ne, i2, 2 * component)            ELSE              WRITE(10,*)   b%bas_y%H(i1, ne, i2, 2 * component - 1) &                          + b%bas_y%H(i1, ne, i2, 2 * component)            ENDIF          ENDIF        ENDDO      ENDDO    ELSEIF (ne > g%nyyh) THEN      DO i2 = g%nxl-b%layers, g%nxgh+b%layers, 1        DO i1 = g%nxl-b%layers, g%nxgh+b%layers, 1          IF (i1 < g%nxl) THEN            IF( cf .EQ. 'E'  .OR. cf .EQ. 'e') THEN              WRITE(10,*)   b%bas_x%E(i1, ne, i2, 2 * component - 1) &                          + b%bas_x%E(i1, ne, i2, 2 * component)            ELSE              WRITE(10,*)   b%bas_x%H(i1, ne, i2, 2 * component - 1) &                          + b%bas_x%H(i1, ne, i2, 2 * component)            ENDIF          ELSEIF (i1 > g%nxyh) THEN            IF( cf .EQ. 'E'  .OR. cf .EQ. 'e') THEN              WRITE(10,*)   b%top_x%E(i1, ne, i2, 2 * component - 1) &                          + b%top_x%E(i1, ne, i2, 2 * component)            ELSE              WRITE(10,*)   b%top_x%H(i1, ne, i2, 2 * component - 1) &                          + b%top_x%H(i1, ne, i2, 2 * component)            ENDIF          ELSE            IF( cf .EQ. 'E'  .OR. cf .EQ. 'e') THEN              WRITE(10,*)   b%top_y%E(i1, ne, i2, 2 * component - 1) &                          + b%top_y%E(i1, ne, i2, 2 * component)            ELSE              WRITE(10,*)   b%top_y%H(i1, ne, i2, 2 * component - 1) &                          + b%top_y%H(i1, ne, i2, 2 * component)            ENDIF          ENDIF        ENDDO      ENDDO    ELSE      DO i2 = g%nxl-b%layers, g%nxgh+b%layers, 1        DO i1 = g%nxl-b%layers, g%nxgh+b%layers, 1          IF (i1 < g%nxl) THEN                  IF( cf .EQ. 'E'  .OR. cf .EQ. 'e') THEN              WRITE(10,*)   b%bas_x%E(i1, ne, i2, 2 * component - 1) &                          + b%bas_x%E(i1, ne, i2, 2 * component)            ELSE              WRITE(10,*)   b%bas_x%H(i1, ne, i2, 2 * component - 1) &                          + b%bas_x%H(i1, ne, i2, 2 * component)            ENDIF          ELSEIF (i1 > g%nxyh) THEN            IF( cf .EQ. 'E'  .OR. cf .EQ. 'e') THEN              WRITE(10,*)   b%top_x%E(i1, ne, i2, 2 * component - 1) &                          + b%top_x%E(i1, ne, i2, 2 * component)            ELSE              WRITE(10,*)   b%top_x%H(i1, ne, i2, 2 * component - 1) &                          + b%top_x%H(i1, ne, i2, 2 * component)            ENDIF          ELSEIF (i2 < g%nzl) THEN            IF( cf .EQ. 'E'  .OR. cf .EQ. 'e') THEN              WRITE(10,*)   b%bas_z%E(i1, ne, i2, 2 * component - 1) &                          + b%bas_z%E(i1, ne, i2, 2 * component)            ELSE              WRITE(10,*)   b%bas_z%H(i1, ne, i2, 2 * component - 1) &                          + b%bas_z%H(i1, ne, i2, 2 * component)            ENDIF          ELSEIF (i2 > g%nzyh) THEN            IF( cf .EQ. 'E'  .OR. cf .EQ. 'e') THEN              WRITE(10,*)   b%top_z%E(i1, ne, i2, 2 * component - 1) &                          + b%top_z%E(i1, ne, i2, 2 * component)            ELSE              WRITE(10,*)   b%top_z%H(i1, ne, i2, 2 * component - 1) &                          + b%top_z%H(i1, ne, i2, 2 * component)            ENDIF          ELSE            IF( cf .EQ. 'E'  .OR. cf .EQ. 'e') THEN              WRITE(10,*) g%E(i1, ne, i2, component)            ELSE              WRITE(10,*) g%H(i1, ne, i2, component)            ENDIF          ENDIF        ENDDO      ENDDO    ENDIF  ENDIF  IF ( co .EQ. 'z' ) THEN    WRITE(10,*) '% xlabel="x"'    WRITE(10,*) '% ylabel="y"'        DO i2 = g%nxl-b%layers, g%nxgh+b%layers, 1      DO i1 = g%nxl-b%layers, g%nxgh+b%layers, 1        IF(i1 < g%nxl) THEN          IF( cf .EQ. 'E'  .OR. cf .EQ. 'e') THEN            WRITE(10,*)   b%bas_x%E(i1, i2, ne, 2 * component - 1) &                        + b%bas_x%E(i1, i2, ne, 2 * component)          ELSE            WRITE(10,*)   b%bas_x%H(i1, i2, ne, 2 * component - 1) &                        + b%bas_x%H(i1, i2, ne, 2 * component)          ENDIF        ELSEIF (i1 > g%nxyh) THEN          IF( cf .EQ. 'E'  .OR. cf .EQ. 'e') THEN            WRITE(10,*)   b%top_x%E(i1, i2, ne, 2 * component - 1) &                        + b%top_x%E(i1, i2, ne, 2 * component)          ELSE            WRITE(10,*)   b%top_x%H(i1, i2, ne, 2 * component - 1) &                        + b%top_x%H(i1, i2, ne, 2 * component)          ENDIF        ELSEIF (i2 < g%nyl) THEN          IF( cf .EQ. 'E'  .OR. cf .EQ. 'e') THEN            WRITE(10,*)   b%bas_y%E(i1, i2, ne, 2 * component - 1) &                        + b%bas_y%E(i1, i2, ne, 2 * component)          ELSE            WRITE(10,*)   b%bas_y%H(i1, i2, ne, 2 * component - 1) &                        + b%bas_y%H(i1, i2, ne, 2 * component)          ENDIF        ELSEIF (i2 > g%nyyh) THEN          IF( cf .EQ. 'E'  .OR. cf .EQ. 'e') THEN            WRITE(10,*)   b%top_y%E(i1, i2, ne, 2 * component - 1) &                        + b%top_y%E(i1, i2, ne, 2 * component)          ELSE            WRITE(10,*)   b%top_y%H(i1, i2, ne, 2 * component - 1) &                        + b%top_y%H(i1, i2, ne, 2 * component)          ENDIF        ELSE          IF (ne < g%nzl) THEN            IF( cf .EQ. 'E'  .OR. cf .EQ. 'e') THEN              WRITE(10,*)   b%bas_z%E(i1, i2, ne, 2 * component - 1) &                          + b%bas_z%E(i1, i2, ne, 2 * component)            ELSE              WRITE(10,*)   b%bas_z%H(i1, i2, ne, 2 * component - 1) &                          + b%bas_z%H(i1, i2, ne, 2 * component)            ENDIF          ELSEIF (ne > g%nzyh) THEN            IF( cf .EQ. 'E'  .OR. cf .EQ. 'e') THEN              WRITE(10,*)   b%top_z%E(i1, i2, ne, 2 * component - 1) &                          + b%top_z%E(i1, i2, ne, 2 * component)            ELSE              WRITE(10,*)   b%top_z%H(i1, i2, ne, 2 * component - 1) &                          + b%top_z%H(i1, i2, ne, 2 * component)            ENDIF          ELSE            IF( cf .EQ. 'E'  .OR. cf .EQ. 'e') THEN              WRITE(10,*) g%E(i1, i2, ne, component)            ELSE              WRITE(10,*) g%H(i1, i2, ne, component)            ENDIF          ENDIF        ENDIF      ENDDO    ENDDO  ENDIF  WRITE(10,*)  WRITE(10,*) '$ END'  CLOSE(10)END SUBROUTINE density_pmlEND MODULE debug_pml

⌨️ 快捷键说明

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