《FDTD electromagnetic field using MATLAB》读书笔记之 Figure 1.14

背景:

基于公式1.42(Ez分量)、1.43(Hy分量)的1D FDTD实现。

计算电场和磁场分量,该分量由z方向的电流片Jz产生,Jz位于两个理想导体极板中间,两个极板平行且向y和z方向无限延伸。

          平行极板相距1m,差分网格Δx=1mm。

电流面密度导致分界面(电流薄层)磁场分量的不连续,在两侧产生Hy的波,每个强度为5×10^(-4)A/m。因为电磁波在自由空间中传播,本征阻抗为η0。

          显示了从左右极板反射前后的传播过程。本例中是PEC边界,正切电场分量(Ez)在PEC表面消失。

观察图中step650到700的场的变换情况,经过PEC板的入射波和反射波的传播特征。经过PEC反射后,Ez的极性变反,这是因为反射系数等于-1;

而磁场分量Hy没有反向,反射系数等于1。

下面是书中的代码(几乎没动):

第1个是主程序:

%% ------------------------------------------------------------------------------
%%            Output Info about this m-file
fprintf(‘\n****************************************************************\n‘);
fprintf(‘\n   <FDTD 4 ElectroMagnetics with MATLAB Simulations>     \n‘);
fprintf(‘\n                                             Listing A.1     \n\n‘);

time_stamp = datestr(now, 31);
[wkd1, wkd2] = weekday(today, ‘long‘);
fprintf(‘           Now is %20s, and it is %7s  \n\n‘, time_stamp, wkd2);
%% ------------------------------------------------------------------------------

% This program demonstrates a one-dimensional FDTD simulation.
% The problem geometry is composed of two PEC plates extending to
% infinity in y and z dimensions, parallel to each other with 1 meter
% separation. The space between the PEC plates is filled with air.
% A sheet of current source paralle to the PEC plates is placed
% at the center of the problem space. The current source excites fields
% in the problem space due to a z-directed current density Jz,
% which has a Gaussian waveform in time.

% Define initial constants
eps_0 = 8.854187817e-12;                  % permittivity of free space
mu_0  = 4*pi*1e-7;                        % permeability of free space
c     = 1/sqrt(mu_0*eps_0);               % speed of light

% Define problem geometry and parameters
domain_size = 1;                          % 1D problem space length in meters
dx = 1e-3;                                % cell size in meters, Δx=0.001m
dt = 3e-12;                               % duration of time step in seconds
number_of_time_steps = 2000;              % number of iterations
nx = round(domain_size/dx);               % number of cells in 1D problem space
source_position = 0.5;                    % position of the current source Jz

% Initialize field and material arrays
Ceze       = zeros(nx+1, 1);
Cezhy      = zeros(nx+1, 1);
Cezj       = zeros(nx+1, 1);
Ez         = zeros(nx+1, 1);
Jz         = zeros(nx+1, 1);
eps_r_z    = ones (nx+1, 1);              % free space
sigma_e_z  = zeros(nx+1, 1);              % free space

Chyh       = zeros(nx, 1);
Chyez      = zeros(nx, 1);
Chym       = zeros(nx, 1);
Hy         = zeros(nx, 1);
My         = zeros(nx, 1);
mu_r_y     = ones (nx, 1);                % free space
sigma_m_y  = zeros(nx, 1);                % free space

% Calculate FDTD updating coefficients
Ceze       = (2 * eps_r_z * eps_0 - dt * sigma_e_z) ...
           ./(2 * eps_r_z * eps_0 + dt * sigma_e_z); 

Cezhy      = (2 * dt / dx) ...
           ./(2 * eps_r_z * eps_0 + dt * sigma_e_z);

Cezj       = (-2 * dt) ...
           ./(2 * eps_r_z * eps_0 + dt * sigma_e_z);

Chyh       = (2 * mu_r_y * mu_0 - dt * sigma_m_y) ...
           ./(2 * mu_r_y * mu_0 + dt * sigma_m_y);

Chyez      = (2 * dt / dx) ...
           ./(2 * mu_r_y * mu_0 + dt * sigma_m_y);

Chym       = (-2 *dt) ...
           ./(2 * mu_r_y * mu_0 + dt * sigma_m_y);

% Define the Gaussian source waveform
time                  = dt * [0:number_of_time_steps-1].‘;
Jz_waveform           = exp(-((time-2e-10)/5e-11).^2)*1e-3/dx;
source_position_index = round(nx * source_position/domain_size)+1; 

% Subroutine to initialize plotting
initialize_plotting_parameters;

% FDTD loop
for time_step = 1:number_of_time_steps

	% Update Jz for the current time step
	Jz(source_position_index) = Jz_waveform(time_step);

	% Update magnetic field
	Hy(1:nx) = Chyh(1:nx) .* Hy(1:nx) ...
	     + Chyez(1:nx) .* (Ez(2:nx+1) - Ez(1:nx)) ...
	     + Chym(1:nx) .* My(1:nx);

	% Update electric field
	Ez(2:nx) = Ceze (2:nx) .* Ez(2:nx) ...
	         + Cezhy(2:nx) .* (Hy(2:nx) - Hy(1:nx-1)) ...
	         + Cezj (2:nx) .* Jz(2:nx);

	Ez(1)    = 0;       % Apply PEC boundary condition at x = 0 m
	Ez(nx+1) = 0;       % Apply PEC boundary condition at x = 1 m

	% Subroutine to plot the current state of the fields
	plot_fields;
end

  第2个是initialize_plotting_parameters,看名字就知道是初始化参数:

% Subroutine used to initialize 1D plot 

Ez_positions = [0:nx]*dx;
Hy_positions = ([0:nx-1]+0.5)*dx;
v = [0 -0.1 -0.1; 0 -0.1 0.1; 0 0.1 0.1; 0 0.1 -0.1; ...
     1 -0.1 -0.1; 1 -0.1 0.1; 1 0.1 0.1; 1 0.1 -0.1];

f = [1 2 3 4; 5 6 7 8];
axis([0 1 -0.2 0.2 -0.2 0.2]);
lez = line(Ez_positions, Ez*0, Ez, ‘Color‘, ‘b‘, ‘linewidth‘, 1.5);
lhy = line(Hy_positions, 377*Hy, Hy*0, ‘Color‘, ‘r‘, ‘LineWidth‘, 1.5, ‘LineStyle‘,‘-.‘);

set(gca, ‘fontsize‘, 12, ‘fontweight‘, ‘bold‘);
set(gcf,‘Color‘,‘white‘);
axis square;
legend(‘E_{z}‘, ‘H_{y} \times 377‘, ‘location‘, ‘northeast‘);
xlabel(‘x [m]‘);
ylabel(‘[A/m]‘);
zlabel(‘[V/m]‘);
grid on;

p = patch(‘vertices‘, v, ‘faces‘, f, ‘facecolor‘, ‘g‘, ‘facealpha‘, 0.2);
text(0, 1, 1.1, ‘PEC‘, ‘horizontalalignment‘, ‘center‘, ‘fontweight‘, ‘bold‘);
text(1, 1, 1.1, ‘PEC‘, ‘horizontalalignment‘, ‘center‘, ‘fontweight‘, ‘bold‘);

  第3个就是画图:

% Subroutine used to plot 1D transient field 

delete(lez);
delete(lhy);
lez = line(Ez_positions, Ez*0, Ez, ‘Color‘, ‘b‘, ‘LineWidth‘, 1.5);
lhy = line(Hy_positions, 377*Hy, Hy*0, ‘Color‘, ‘r‘, ‘LineWidth‘, 1.5, ‘LineStyle‘, ‘-.‘);
ts  = num2str(time_step);
ti  = num2str(dt*time_step*1e9);
title([‘time step = ‘ ts ‘ , time = ‘ ti  ‘ ns‘]);
drawnow;

  运行结果:

上图,从PEC板反射后,电场分量极性变反,磁场分量极性不变。

反射后,电场分量极性再次改变;

时间: 2024-10-10 01:04:15

《FDTD electromagnetic field using MATLAB》读书笔记之 Figure 1.14的相关文章

《FDTD electromagnetic field using MATLAB》读书笔记 Figure 1.2

函数f(x)用采样间隔Δx=π/5进行采样,使用向前差商.向后差商和中心差商三种公式来近似一阶导数. 书中代码: %% ------------------------------------------------------------------------------ %% Output Info about this m-file fprintf('\n****************************************************************\n'

《FDTD electromagnetic field using MATLAB》读书笔记之一阶、二阶偏导数差商近似

读书笔记 effective c++ Item 14 对资源管理类的拷贝行为要谨慎

1. 自己实现一个资源管理类 Item 13中介绍了 “资源获取之时也是初始化之时(RAII)”的概念,这个概念被当作资源管理类的“脊柱“,也描述了auto_ptr和tr1::shared_ptr是如何用堆资源来表现这个概念的.然而并不是所有资源都是在堆上创建的,对于这种资源,像auto_ptr和tr1::shared_ptr这样的智能指针就不适合当作资源句柄(handle)来使用了.你会发现你时不时的就会需要创建自己的资源管理类. 举个例子,假设你正在使用C API来操纵Mutex类型的互斥信

Python基础教程【读书笔记】 - 2016/7/14

希望通过博客园持续的更新,分享和记录Python基础知识到高级应用的点点滴滴! 第六波:第2章 [总览] 列表和元组 数据结构,是通过某种方式组织在一起的数据元素的集合,数据元素可以使数字或字符串,甚至可以是其他数据结构.最基本的数据结构是序列sequence. 序列中的每个元素被分配一个序号---即元素的位置,也称为索引.第一个索引是0,第二个则是1,以此类推. 首先对序列作一个概览,接下来讲解对所有序列都通用的操作,而这些操作同样适用于字符串.学习如何使用列表,同时看看它有什么特别之处.然后

Linux内核架构读书笔记 - 2.5.2 数据结构

调度系统各个组建关系如下 激活调度器两种方法:进程睡眠或其他原因放弃CPU,周期性检测 上述两个组件统称为通用调度器或核心调度器. 调度器用于判断接下来运行那个进程,内核支持不同的调度策略( 完全公平调度 实时调度 无事可做的空闲调度进程) 调度器被调用时候 需要执行体系相关的进程上下文切换 每个进程属于某个调度器类,各个调度器负责管理所属进程,通用调度器不涉及进程管理,都由调度器来 下面分别讲述: task_struct 成员 sched.h 1 struct task_struct { 2

【读书笔记】计算机网络1章:课程介绍、协议、分层

这是我在Coursera上的学习笔记.课程名称为<Computer Networks>,出自University of Washington. 由于计算机网络才诞生不久,目前正在以高速在发展,所以有些旧的教材可能都已经跟不上时代了.这门课程在2013年左右录制,知识相对还是比较新的.覆盖了计算机网络中的各个协议层,从物理层到应用层都讲得非常仔细.学完这门课程之后对计算机网络会有比较深刻的了解. 本章讲述了这门课程的大致情况,讲述了协议.协议层等基本概念. 目标和动机 课程的主要目标就是介绍计算

《Linux内核设计与实现》 Chapter4 读书笔记

<Linux内核设计与实现> Chapter4 读书笔记 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统. 一.多任务 多任务操作系统就是能同时并发地交互执行多个进程的操作系统. 多任务系统可以划分为两类: 非抢占式多任务 进程会一直执行直到自己主动停止运行 抢占式多任务 Linux/Unix使用的是抢占式的方式:强制的挂起进程的动作就叫做抢占. 像所有unix的变体和许多其他现代操作系统一样,Linux提

嵌入式开发之道——菜鸟成长日志与项目经理的私房菜(读书笔记)

嵌入式开发之道--菜鸟成长日志与项目经理的私房菜 邱毅凌著 读书笔记文档下载:http://download.csdn.net/detail/luckywang1103/8710299 1.一般函数调用与中断ISR的区别 一般程序都是循序执行的,CPU一定要执行到main()的第20行,才有可能去调用sub_fun()函数,而中断可以发生在任何的时间地点.例如,使用者可以在任何时候按下键盘的某个键,此时不论CPU下个要执行的指令是什么,CPU都会先记录目前的状态,然后参考中断向量表,接着去执行键

驱动开发读书笔记. 0.04 linux 2.6 platform device register 平台设备注册 1/2 共2篇

驱动开发读书笔记. 0.04  linux 2.6 platform device register 平台设备注册  1/2 共2篇下面这段摘自 linux源码里面的文档 : Documentation/driver-model/platform.txt Device Enumeration 82 ~~~~~~~~~~~~~~~~~~ 83 As a rule, platform specific (and often board-specific) setup code will 84 reg