登 录
註 冊
论坛
微波仿真网
注册
登录论坛可查看更多信息
微波仿真论坛
>
时域有限差分法 FDTD
>
平面波调试遇到入射波场分量引入的问题, ..
发帖
回复
1
2
3966
阅读
18
回复
[
求助
]
平面波调试遇到入射波场分量引入的问题,请教大家
离线
wq_463
UID :20925
注册:
2008-11-06
登录:
2021-04-22
发帖:
227
等级:
仿真三级
10楼
发表于: 2009-05-13 20:13:55
回 9楼(gwzhao) 的帖子
首先在连接边界box六面体的6个平面上,分别建立6个2D数组。这里面每个数组元素的值,根据边界单元到入射点(一般是total field某个角落点)距离L,从第一步1D的数组模拟出平面波里面确定取值;然后在每次迭代开始,把6个2D数组的值加入到连接边界box对应的单元上面,我是根据allen taflove书来编写程序的,为了方便说明问题,我简单举个例子以下面这个式子为例
zF5q=9 4$
图片:1.jpg
-J,Q;tj
程序写为hz(ie_jmin:ie_jmax-1,je_jmin-1,ke_jmin:ke_jmax)=hz(ie_jmin:ie_jmax-1,je_jmin-1,ke_jmin:ke_jmax)-db(1)*Eincxd_Left(ie_jmin:ie_jmax-1,,ke_jmin:ke_jmax);
B0oxCc/'sZ
从上面的程序可以看到hz(ie_jmin:ie_jmax-1,je_jmin-1,ke_jmin:ke_jmax)是一个三维的数组,而Eincxd_Left(ie_jmin:ie_jmax-1,ke_jmin:ke_jmax);是一个二维数组,为了能实现二维数组于三维数组的相加,我利用了for循环实现了二维数组于三维数组的相加
QjA&IZEC
for xhz=ie_jmin:ie_jmax-1
M$Fth*q{GD
for zhz=ke_jmin:ke_jmax
G#H9g PY
w1hz(xhz,zhz)=hz(xhz,je_jmin-1,zhz);
3J%V%}mD
w1hz(xhz,zhz)= w1hz(xhz,zhz)-db(1)*Eincxd_Left(xhz,zhz);
n%/i:Whs
end
pkX v.D`
end
Xb}!0k/{
通过中间变量w1hz我实现hz与Einxd_Left的相加
vv+D*e&<
现在的问题是如果把循环完后的w1hz赋值给hz,为了具体能说明我的疑问,这地方带入具体的数值,假如hz(1:10,5,1:20),Einxd_left(1:10,1:20),通过for循环实现相加以后得出得出的中间变量w1hz(1:10,1:20)是一个10*20的二维数组,我令hz(1:10,5,1:20)=w1hz(1:10,1:20).问题就出在这个地方,这样给hz赋值后查看workplace发现hz是一个10*5*20的三维数组,而实际上我们固定了y=5,hz是一个10*1*20的三维数组,如何对hz进行正确的赋值就是我现在的困惑,希望师兄指点一下,已经憋了有些日子了~~~谢谢gwzhao师兄了
共
条评分
离线
strange007
UID :2803
注册:
2007-05-20
登录:
2025-03-08
发帖:
453
等级:
积极交流五级
11楼
发表于: 2009-05-13 23:03:33
wq_463:你的目的就是把db(1)*Eincxd_Left(ie_jmin:ie_jmax-1,,ke_jmin:ke_jmax)加入到hz(ie_jmin:ie_jmax-1,je_jmin-1,ke_jmin:ke_jmax)中。
\D?:J3H*]
我的建议:
h*Je35
1.就不要再另外定义一个中间变量w1hz(xhz,zhz)了;
FXahZW~Ol
2.直接遍历x,z坐标,把db(1)*Eincxd_Left(ie_jmin:ie_jmax-1,,ke_jmin:ke_jmax)加入到hz(ie_jmin:ie_jmax-1,je_jmin-1,ke_jmin:ke_jmax)中。
=&7@<vBpy
具体实现:
+`.,| |Mq
QU T"z'
j=je_jmin-1
:)IV!_>'d
for i=ie_jmin:ie_jmax-1
vXdZmYrC
for k=ke_jmin:ke_jmax
@2 =z}S3O
hz(i,je_jmin-1,k) = hz(i,je_jmin-1,k) - db(1) * Eincxd_Left(i,k);
5M:D?9E+
end
!>n|c$=;qk
end
rbyY8 bX
jl}$HEI5m}
上面一段程序是MATLAB形式的。MATLAB里面for循环速度很慢。
?x3Jv<G0*
如果用C语言实现for循环就不降低速度。
共
1
条评分
gwzhao
技术分
+1
积极参与讨论+技术分 论坛感谢您的参与
2009-05-14
离线
strange007
UID :2803
注册:
2007-05-20
登录:
2025-03-08
发帖:
453
等级:
积极交流五级
12楼
发表于: 2009-05-13 23:29:38
如果修改原来的这段MATLAB代码:
>EL)X #e
hz(ie_jmin:ie_jmax-1,je_jmin-1,ke_jmin:ke_jmax)=hz(ie_jmin:ie_jmax-1,je_jmin-1,ke_jmin:ke_jmax)-db(1)*Eincxd_Left(ie_jmin:ie_jmax-1,,ke_jmin:ke_jmax);
8`4<R6]LKB
6:GTD$Uz.
问题出在Eincxd_Left是(ie_jmin:ie_jmax-1)×(ke_jmin:ke_jmax)二维数组,而hz(ie_jmin:ie_jmax-1,je_jmin-1,ke_jmin:ke_jmax)是(ie_jmin:ie_jmax-1)×1×(ke_jmin:ke_jmax)三维数组
tO7v4
MATLAB晕菜,认为hz(ie_jmin:ie_jmax-1,je_jmin-1,ke_jmin:ke_jmax)是三维的
^4r73ak/):
`p;eIt
我想这么解决:
2"|2a@
1.在定义Eincxd_Left的时候,就把它定义为Eincxd_Left(ie_jmin:ie_jmax-1, 1 ,ke_jmin:ke_jmax),中间的1表示第二维只有1个元素。
N8qDdr9p?c
2.然后,按原来思路加入“伪三维”的Eincxd_Left
iHwLZ[O{
这个方法,我已经试验过比较简单的2*3*4维矩阵+2*4矩阵,可行。
xq-17HKs
MATLAB被干掉了……
共
1
条评分
gwzhao
技术分
+1
积极参与讨论+技术分 论坛感谢您的参与
2009-05-14
离线
wq_463
UID :20925
注册:
2008-11-06
登录:
2021-04-22
发帖:
227
等级:
仿真三级
13楼
发表于: 2009-05-14 09:29:05
回 12楼(strange007) 的帖子
师兄这个是回复是及时雨,我会把两种方法都试一下看看,就是不知道结果是不是一样~~呵呵
GWvH[0
谢谢007师兄,果然名不虚传~~007~~
共
条评分
离线
wq_463
UID :20925
注册:
2008-11-06
登录:
2021-04-22
发帖:
227
等级:
仿真三级
14楼
发表于: 2009-05-14 10:21:33
回 12楼(strange007) 的帖子
师兄所说的:在定义Eincxd_Left的时候,就把它定义为Eincxd_Left(ie_jmin:ie_jmax-1, 1 ,ke_jmin:ke_jmax),中间的1表示第二维只有1个元素。
VCy5JH
这样定义话从数学坐标来看是y=1时一个xz平面,是否于物理内存对应呢?
-)!>M>=s
hz(ie_jmin:ie_jmax-1,je_jmin-1,ke_jmin:ke_jmax)从数学坐标来看,是在y=je_jmin-1时的一个xz平面,根据公式我们需要的Eincxd_left是一个在y=je_jmin处xz的一个平面上的电场值,随便让y=1这样虽然能加,但是貌似不合理吧
Ff^@~X+W<
共
条评分
离线
strange007
UID :2803
注册:
2007-05-20
登录:
2025-03-08
发帖:
453
等级:
积极交流五级
15楼
发表于: 2009-05-14 10:36:14
这里Eincxd_Left(ie_jmin:ie_jmax-1, 1 ,ke_jmin:ke_jmax)的“1”可以自己理解为——
X_; *`,<T
Z#`0txCF
不是y=1时的那个xz平面。
UkR3}{i
]8 U ~Iy
而是当y=je_jmin-1时的“一个”xz平面。这个Eincxd_Left(ie_jmin:ie_jmax-1, 1 ,ke_jmin:ke_jmax)的3D数组和原来Eincxd_Left(ie_jmin:ie_jmax-1, ke_jmin:ke_jmax)的2D数组,本质是一样的,只是形式不同。
xFp<7p L
PX".Km p.
我想,为了实现算法,可以进行一定的假设,只要自己清楚相应的物理概念就行。
共
条评分
离线
wq_463
UID :20925
注册:
2008-11-06
登录:
2021-04-22
发帖:
227
等级:
仿真三级
16楼
发表于: 2009-05-14 10:39:08
回 15楼(strange007) 的帖子
感谢师兄的回复,我去调试一下,看看效果怎么样吧
共
条评分
离线
lizi0908
UID :33555
注册:
2009-05-25
登录:
2010-04-25
发帖:
56
等级:
仿真一级
17楼
发表于: 2009-05-25 15:49:53
学习了
共
条评分
离线
mars982133
UID :14427
注册:
2008-06-28
登录:
2012-07-30
发帖:
134
等级:
禁止发言
18楼
发表于: 2009-06-16 10:00:05
用户被禁言,该主题自动屏蔽!
共
条评分
发帖
回复