登 录
註 冊
论坛
微波仿真网
注册
登录论坛可查看更多信息
微波仿真论坛
>
时域有限差分法 FDTD
>
平面波调试遇到入射波场分量引入的问题, ..
发帖
回复
1
2
3970
阅读
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书来编写程序的,为了方便说明问题,我简单举个例子以下面这个式子为例
?^i1_v7 Bi
图片:1.jpg
'OkGReKt
程序写为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);
xe4Oxo
从上面的程序可以看到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循环实现了二维数组于三维数组的相加
]}Z4P-"t
for xhz=ie_jmin:ie_jmax-1
%ft &Q
for zhz=ke_jmin:ke_jmax
F(5hmr
w1hz(xhz,zhz)=hz(xhz,je_jmin-1,zhz);
,E;;wdIt
w1hz(xhz,zhz)= w1hz(xhz,zhz)-db(1)*Eincxd_Left(xhz,zhz);
6KHN&P
end
J@_ctGv
end
b0v:12q
通过中间变量w1hz我实现hz与Einxd_Left的相加
IvHh4DU3Z
现在的问题是如果把循环完后的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)中。
_Zk{!
我的建议:
O[tvR:Nh
1.就不要再另外定义一个中间变量w1hz(xhz,zhz)了;
Q!- 0xlx
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)中。
vgY3L
具体实现:
lC:k7<0Ji
[Wd-Zn%
j=je_jmin-1
{3;AwhN0H
for i=ie_jmin:ie_jmax-1
&'cL%.
for k=ke_jmin:ke_jmax
vEf4HZ&w
hz(i,je_jmin-1,k) = hz(i,je_jmin-1,k) - db(1) * Eincxd_Left(i,k);
+$4(zPs@
end
JB!:JML
end
`E+Jnu,jC
%CWPbk^
上面一段程序是MATLAB形式的。MATLAB里面for循环速度很慢。
rpeJkG@+
如果用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代码:
FWC5&tM
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);
*z'yk*
V]S1X^
问题出在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)三维数组
gKg-O
MATLAB晕菜,认为hz(ie_jmin:ie_jmax-1,je_jmin-1,ke_jmin:ke_jmax)是三维的
O@iu aeEW
1oKfy>i e
我想这么解决:
8z5# ]u;
1.在定义Eincxd_Left的时候,就把它定义为Eincxd_Left(ie_jmin:ie_jmax-1, 1 ,ke_jmin:ke_jmax),中间的1表示第二维只有1个元素。
yFhB>i
2.然后,按原来思路加入“伪三维”的Eincxd_Left
p*5\+WO>!(
这个方法,我已经试验过比较简单的2*3*4维矩阵+2*4矩阵,可行。
_73h<|0
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) 的帖子
师兄这个是回复是及时雨,我会把两种方法都试一下看看,就是不知道结果是不是一样~~呵呵
{},;-%xE
谢谢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个元素。
3;y_qwA
这样定义话从数学坐标来看是y=1时一个xz平面,是否于物理内存对应呢?
TR~|c|B
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这样虽然能加,但是貌似不合理吧
^l--zzO8l
共
条评分
离线
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”可以自己理解为——
GEhdk]<a7
N{ : [/
不是y=1时的那个xz平面。
+]A+!8%Z
J'|=*#
而是当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数组,本质是一样的,只是形式不同。
's =Q.s
}/_('q@s\
我想,为了实现算法,可以进行一定的假设,只要自己清楚相应的物理概念就行。
共
条评分
离线
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
用户被禁言,该主题自动屏蔽!
共
条评分
发帖
回复