E01_Maxwell_2Drz
================
.. toctree::
:maxdepth: 1
:hidden:
E01_Maxwell_2Drz/fdtd_2d_rz_axisymmetric_notes
E01_Maxwell_2Drz/mod_E01_fdtd_2d_rz_tmz
E01_Maxwell_2Drz/mod_E01_fdtd_2d_rz_tez
E01_Maxwell_2Drz/sub_E01_fdtd_2d_rz_tez_E
E01_Maxwell_2Drz/sub_E01_fdtd_2d_rz_tez_H
E01_Maxwell_2Drz/sub_E01_fdtd_2d_rz_tmz_E
E01_Maxwell_2Drz/sub_E01_fdtd_2d_rz_tmz_H
E01_Maxwell_2Drz/mod_E01_cpml_2d_rz_tez
E01_Maxwell_2Drz/sub_E01_cpml_2d_rz_tez_E
E01_Maxwell_2Drz/sub_E01_cpml_2d_rz_tez_H
E01_Maxwell_2Drz/mod_E01_cpml_2d_rz_tmz
E01_Maxwell_2Drz/sub_E01_cpml_2d_rz_tmz_E
E01_Maxwell_2Drz/sub_E01_cpml_2d_rz_tmz_H
.. raw:: html
.. container:: ap-lang ap-lang-zh
.. rubric:: 模块定位
``E01_Maxwell_2Drz`` 是轴对称 2D ``(r,z)`` FDTD 内核。它把完整柱坐标 Maxwell 方程在
:math:`\partial/\partial\phi=0` 条件下拆成两个互不耦合的子系统:TMz ``Er, Hphi, Ez`` 和 TEz ``Ephi, Hr, Hz``。
.. rubric:: 推荐路径
- 初学公式和轴线处理:先看 :doc:`2D RZ notes `。
- 准备调用 routine:先看 :doc:`FDTD Usage Cookbook `,再进入下表的具体 subroutine。
- 使用吸收边界:先看 :doc:`CPML Cookbook `,再看 ``mod_E01_cpml_*`` 和 ``sub_E01_cpml_*`` 页面。
- 验证改动:运行 ``tests/005_maxwell`` 中的 single-step、m=0 equivalence、MMS 和 CPML wave-packet 测试。
.. rubric:: 最小调用顺序
每个时间步通常先用整步电场更新半步磁场,再用半步磁场更新下一整步电场。若只求解一个分量组,
只调用对应的一对 ``H`` / ``E`` routine。
.. code-block:: fortran
! Ephi / Hr / Hz field set
call sub_E01_fdtd_2d_rz_tez_H(..., Ephi, Hr, Hz, dt, dr, dz, mu)
call fill_H_boundaries_or_ghosts(...)
call sub_E01_fdtd_2d_rz_tez_E(..., Ephi, Hr, Hz, dt, dr, dz, ep)
! Er / Ha(Hphi) / Ez field set
call sub_E01_fdtd_2d_rz_tmz_H(..., Ha, Er, Ez, dt, dr, dz, mu)
call fill_H_boundaries_or_ghosts(...)
call sub_E01_fdtd_2d_rz_tmz_E(..., Ha, Er, Ez, dt, dr, dz, ep)
下表同时列出 module wrapper 和可直接调用的 subroutine 页面。module 行说明 include/use
关系,sub 行说明实际执行的场分量更新。
.. list-table:: 文件角色
:header-rows: 1
:widths: 36 64
* - 文件
- 角色
* - :doc:`2D Cylindrical (rz) FDTD `
- 2D RZ Yee 网格、TEz/TMz 拆分、轴线闭合和更新公式说明。
* - :doc:`mod_E01_fdtd_2d_rz_tez.f90 `
- FDTD TEz 分量组 module wrapper,include ``Ephi`` 和 ``Hr/Hz`` 更新核。
* - :doc:`sub_E01_fdtd_2d_rz_tez_E.f90 `
- FDTD TEz 分量组电场更新核;用 ``Hr/Hz`` 更新 ``Ephi``。
* - :doc:`sub_E01_fdtd_2d_rz_tez_H.f90 `
- FDTD TEz 分量组磁场更新核;用 ``Ephi`` 更新 ``Hr/Hz``。
* - :doc:`mod_E01_fdtd_2d_rz_tmz.f90 `
- FDTD TMz 分量组 module wrapper,include ``Er/Ez`` 和 ``Ha/Hphi`` 更新核。
* - :doc:`sub_E01_fdtd_2d_rz_tmz_E.f90 `
- FDTD TMz 分量组电场更新核;用 ``Ha/Hphi`` 更新 ``Er/Ez``。
* - :doc:`sub_E01_fdtd_2d_rz_tmz_H.f90 `
- FDTD TMz 分量组磁场更新核;用 ``Er/Ez`` 更新 ``Ha/Hphi``。
* - :doc:`mod_E01_cpml_2d_rz_tez.f90 `
- CPML TEz 分量组 module wrapper,include 对应 ``E`` 和 ``H`` CPML 更新核。
* - :doc:`sub_E01_cpml_2d_rz_tez_E.f90 `
- CPML 电场更新核;对 ``Ephi`` 加入 split-field memory 修正,调用者需保证 ``i-1/k-1`` 相邻点可读。
* - :doc:`sub_E01_cpml_2d_rz_tez_H.f90 `
- CPML 磁场更新核;对 ``Hr/Hz`` 加入 split-field memory 修正,并把径向几何项留在 memory variable 外。
* - :doc:`mod_E01_cpml_2d_rz_tmz.f90 `
- CPML TMz 分量组 module wrapper,include 对应 ``E`` 和 ``H`` CPML 更新核。
* - :doc:`sub_E01_cpml_2d_rz_tmz_E.f90 `
- CPML 电场更新核;对 ``Er/Ez`` 加入 split-field memory 修正,``Ez`` 径向项要求 ``i>0``。
* - :doc:`sub_E01_cpml_2d_rz_tmz_H.f90 `
- CPML 磁场更新核;对 ``Ha/Hphi`` 加入 split-field memory 修正。
.. rubric:: 调用注意
更新区间 ``il:iu``、``kl:ku`` 应避开未准备好的 ghost cells。轴线 ``i=0`` 有专门闭合逻辑;
调用方应保持场数组范围、边界填充和 CPML memory variables 与更新核使用的位置一致。
.. raw:: html
.. container:: ap-lang ap-lang-en
.. rubric:: Module Role
``E01_Maxwell_2Drz`` contains axisymmetric 2D ``(r,z)`` FDTD kernels. Under
:math:`\partial/\partial\phi=0`, the full cylindrical Maxwell equations split
into two decoupled subsystems: TMz ``Er, Hphi, Ez`` and TEz ``Ephi, Hr, Hz``.
.. rubric:: Recommended Path
- To learn the formulas and axis handling, start with
:doc:`2D RZ notes `.
- To integrate routines, read :doc:`FDTD Usage Cookbook `
and then open the specific subroutine page from the table below.
- To use absorbing boundaries, read :doc:`CPML Cookbook ` and
then the ``mod_E01_cpml_*`` and ``sub_E01_cpml_*`` pages.
- To validate changes, run the ``tests/005_maxwell`` single-step, m=0
equivalence, MMS, and CPML wave-packet tests.
.. rubric:: Minimal Call Order
A time step usually advances half-step magnetic fields from integer-time
electric fields, then advances the next integer-time electric fields from
half-step magnetic fields. If you solve only one field set, call only its
matching ``H`` / ``E`` routine pair.
.. code-block:: fortran
! Ephi / Hr / Hz field set
call sub_E01_fdtd_2d_rz_tez_H(..., Ephi, Hr, Hz, dt, dr, dz, mu)
call fill_H_boundaries_or_ghosts(...)
call sub_E01_fdtd_2d_rz_tez_E(..., Ephi, Hr, Hz, dt, dr, dz, ep)
! Er / Ha(Hphi) / Ez field set
call sub_E01_fdtd_2d_rz_tmz_H(..., Ha, Er, Ez, dt, dr, dz, mu)
call fill_H_boundaries_or_ghosts(...)
call sub_E01_fdtd_2d_rz_tmz_E(..., Ha, Er, Ez, dt, dr, dz, ep)
The table lists both module wrappers and directly callable subroutine pages.
Module rows describe include/use relations; subroutine rows describe the
actual field-component update performed by each kernel.
.. list-table:: File Roles
:header-rows: 1
:widths: 36 64
* - File
- Role
* - :doc:`2D Cylindrical (rz) FDTD `
- Notes for the 2D RZ Yee grid, TEz/TMz split, axis closure, and update formulas.
* - :doc:`mod_E01_fdtd_2d_rz_tez.f90 `
- FDTD TEz component group module wrapper including ``Ephi`` and ``Hr/Hz`` kernels.
* - :doc:`sub_E01_fdtd_2d_rz_tez_E.f90 `
- FDTD TEz component group electric-field kernel; updates ``Ephi`` from ``Hr/Hz``.
* - :doc:`sub_E01_fdtd_2d_rz_tez_H.f90 `
- FDTD TEz component group magnetic-field kernel; updates ``Hr/Hz`` from ``Ephi``.
* - :doc:`mod_E01_fdtd_2d_rz_tmz.f90 `
- FDTD TMz component group module wrapper including ``Er/Ez`` and ``Ha/Hphi`` kernels.
* - :doc:`sub_E01_fdtd_2d_rz_tmz_E.f90 `
- FDTD TMz component group electric-field kernel; updates ``Er/Ez`` from ``Ha/Hphi``.
* - :doc:`sub_E01_fdtd_2d_rz_tmz_H.f90 `
- FDTD TMz component group magnetic-field kernel; updates ``Ha/Hphi`` from ``Er/Ez``.
* - :doc:`mod_E01_cpml_2d_rz_tez.f90 `
- CPML TEz component group module wrapper including the corresponding ``E`` and ``H`` CPML kernels.
* - :doc:`sub_E01_cpml_2d_rz_tez_E.f90 `
- CPML electric-field kernel; adds split-field memory corrections to ``Ephi`` and requires readable ``i-1/k-1`` neighbors.
* - :doc:`sub_E01_cpml_2d_rz_tez_H.f90 `
- CPML magnetic-field kernel; adds split-field memory corrections to ``Hr/Hz`` while keeping the radial metric term outside the memory variable.
* - :doc:`mod_E01_cpml_2d_rz_tmz.f90 `
- CPML TMz component group module wrapper including the corresponding ``E`` and ``H`` CPML kernels.
* - :doc:`sub_E01_cpml_2d_rz_tmz_E.f90 `
- CPML electric-field kernel; adds split-field memory corrections to ``Er/Ez``; the ``Ez`` radial term requires ``i>0``.
* - :doc:`sub_E01_cpml_2d_rz_tmz_H.f90 `
- CPML magnetic-field kernel; adds split-field memory corrections to ``Ha/Hphi``.
.. rubric:: Calling Notes
Update ranges ``il:iu`` and ``kl:ku`` should avoid ghost cells that have not
been prepared. The axis ``i=0`` has dedicated closure logic; callers should
keep field-array bounds, boundary fill, and CPML memory variables consistent
with the locations used by the kernels.
.. raw:: html