VSim螺旋线行波管模拟案例讲义.docx

上传人:b****6 文档编号:8825198 上传时间:2023-02-02 格式:DOCX 页数:23 大小:648.63KB
下载 相关 举报
VSim螺旋线行波管模拟案例讲义.docx_第1页
第1页 / 共23页
VSim螺旋线行波管模拟案例讲义.docx_第2页
第2页 / 共23页
VSim螺旋线行波管模拟案例讲义.docx_第3页
第3页 / 共23页
VSim螺旋线行波管模拟案例讲义.docx_第4页
第4页 / 共23页
VSim螺旋线行波管模拟案例讲义.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

VSim螺旋线行波管模拟案例讲义.docx

《VSim螺旋线行波管模拟案例讲义.docx》由会员分享,可在线阅读,更多相关《VSim螺旋线行波管模拟案例讲义.docx(23页珍藏版)》请在冰豆网上搜索。

VSim螺旋线行波管模拟案例讲义.docx

VSim螺旋线行波管模拟案例讲义

VSim螺旋线行波管模拟案例讲义

第一部分概述

模拟的对象为一个典型的螺旋线行波管。

基本结构是在金属管内装有螺旋线和介质夹持杆,然后在两端引入输入和输出端口。

当电子束进入螺旋线波导时,就产生微波放大。

实际模拟时我们用很多圈的螺旋线,为了看清几何,我们用一组示意图来描述:

第二部分几何生成

从上面的图形可以看到,整个几何模型包括下面的主要内容:

金属外壳:

在外壳上安装了耦合端口,这里使用的耦合端口是一个简单的同轴线针头-壁面耦合,在模拟的时候直接从同轴线送入TEM波。

然后是作为波导的螺旋线,同轴线针头直接耦合到螺旋线上。

接下来,为了支持螺旋线,需要三根介质夹持杆:

剖面图显示出夹持结构:

实际计算中,我们需要使用一个圈数很多的螺旋线(N=100turns以上)。

此外,在实践中还需要加入衰减器。

我们首先把匝数调整到100,然后可以看到衰减器的结构(去掉外壳以便看清):

中央绿色的是衰减器。

这里需要考虑一下VSim的逻辑,金属件都必须被实现为几何结构(gridBoundary),而夹持杆(介电结构)和衰减器(电导耗散)既可以实现为几何结构,也可以直接用函数引入,它们并不是必须被写成gridBoundary的。

确定一个结构是否要被实现为gridBoundary,要看它的具体应用。

例如如果设置夹持杆和衰减器都要吸收电子,那么就应该将它们实现为gridBoundary,而如果我们暂时不考虑夹持杆和衰减器的吸收,那么就可以到处理电磁场的时候再写这个部分。

除了上述的部分之外,VSim逻辑建议把所有的粒子发射源(emitter)都设置成为gridBoundary。

所以,在几何建模部分,需要建立金属部件和发射体的gridBoundary。

特别是,如果整个系统中有若干组金属部件,但其中只有一个用作发射体,那么这个必须额外被单独几何建模一次,吸收体同理。

gridBoundary可以用常规的对象来做,也可以使用geometry宏来做。

下面是用geometry宏实现的金属部件几何,其中复杂的主要是螺旋线结构。

基本思路就是从一个实体开始,不断贴上或者挖去部分,最后形成金属部件。

$DM_FRAC=0.25

$importgeometry

fillGeoExpression(tube,geoCylinderXP(x-XBGN_GUN_WALL,y,z,REND_TUBE,LENGTH_TUBE_SHELL))

$ifPERIODIC_GEOMETRY==0

fillGeoExpression(inputCoaxShell,geoCylinderXP(y-YBGN_COAX,z,x-XBGN_HELIX,RSHELL_COAX,LEGNTH_COAX))

fillGeoExpression(outputCoaxShell,geoCylinderXP(y-YBGN_COAX,z,x-XEND_HELIX,RSHELL_COAX,LEGNTH_COAX))

$endif

voidGeoExpression(tubeInterior,geoCylinderXP(x-XEND_GUN_WALL,y,z,RBGN_TUBE,LENGTH_TUBE_INTERIOR))

$ifPERIODIC_GEOMETRY==0

voidGeoExpression(inputCoaxInterior,geoCylinderXP(y-YBGN_COAX,z,x-XBGN_HELIX,ROUTER_COAX,LEGNTH_COAX))

voidGeoExpression(outputCoaxInterior,geoCylinderXP(y-YBGN_COAX,z,x-XEND_HELIX,ROUTER_COAX,LEGNTH_COAX))

$endif

fillGeoExpression(helix,geoCylinderXP(x-XBGN_HELIX_WIRE,yHelix(y,z),zHelix(x,y,z),RWIRE_HELIX,LENGTH_HELIX_WIRE))

$ifPERIODIC_GEOMETRY==0

voidGeoExpression(trimHelixInput,myHalfCylinderXPZ(x-XBGN_HELIX_WIRE,y,-z,RBGN_TUBE,LENGTH_TRIM_HELIX_INPUT))

voidGeoExpression(trimHelixOutput,myHalfCylinderXPZ(x-XTRIM_HELIX_OUTPUT,y,z,RBGN_TUBE,LENGTH_TRIM_HELIX_OUTPUT))

fillGeoExpression(inputCoaxInner,geoCylinderXP(y-YBGN_COAX,z,x-XBGN_HELIX,RINNER_COAX,LEGNTH_COAX))

fillGeoExpression(outputCoaxInner,geoCylinderXP(y-YBGN_COAX,z,x-XEND_HELIX,RINNER_COAX,LEGNTH_COAX))

$endif

saveGeoToGridBoundary(metalParts,DM_FRAC)

其中有一部分几何用$ifPERIODIC_GEOMETRY==0来设置为条件形式。

这些部分主要是两端的切断以及馈电的同轴线接口。

涉及到的几个宏的具体描述参考VSimInDepth。

emitter几何可以类似地来做,应该指出的是emitter一般来说不必和金属部件有什么关系,但是实践中emitter往往是金属部件的一部分。

在这种情况下,emitter必须被独立地实现为一个gridBoundary:

resetGeoToVoid()

fillGeoExpression(emitterDisk,geoCylinderXP(x-XBGN_GUN_WALL,y,z,RBGN_TUBE,THICKNESS_ENDCAPS))

saveGeoToGridBoundary(emitter,DM_FRAC)

第三部分:

场模型和频率分析

基本框架

产生金属部件模型后,就可以启用电磁场模型了。

电磁场模型看上去很复杂,实际上基本都是从一个模板产生的,最简单的模板是以前用的dMYee宏。

对于微波器件,一般我们可以从VSim6的例子中选择一个类似的模型,然后逐步修改成我们需要的模型。

这里我们使用的是一个比较通用的模板,它基本来自于dMYee宏。

#场定义

...................

#推进公式

#-------------------------

#updateoperations

#实际的推进步骤

通常几乎不会有人真的从头写出整个电磁模块,而都是在一个类型比较相似的模块上进行修改。

当然,我们可以使用以前遗留的一个宏deymittra.mac,此外现在的TWT输入文件也是一个不错的模板。

这个模板是利用MultiField写成的。

为了在需要的时候修改这个模板,我们需要解释其基本内容。

一般来说,MultiField框架要包含三个主要的部分:

场定义,更新器和算法包装。

由于MultiField是一个具有相当自由的场计算框架,原则上我们应该首先列出场方程。

实践中因为微波器件的场模型是非常类似的,一般只要简单修改就可以,无需如此复杂。

这里为了解释清楚,我们列出基本概念。

微波器件计算的电磁场,一般包含静态外场(主要是外磁场)和微波时变电磁场。

时变电磁场的方程是

和在计算电磁学中的方法一样,电场强度(和电流强度)被定义在网格的棱边上,而磁场强度B被定义在面心,如同下面这个图:

和标准计算电磁学稍有区别的是,由于存在粒子电流J,为了计算的精度,上述方程是被拆成三步来进行FDTD推进。

按照VSim的逻辑,我们引入一个参数toDtFrac,它的取值从0.0到1.0。

我们假设每个推进步推进中,迭代器的绝对时间从

推进到

,每个电磁场推进步的时间步长是

实际中MultiField总是要由一组“更新步”组成,而每个更新步代表从“当前时间”推进到某个值

现在我们可以列出PIC算法里面最标准的电磁场推进步,,推进开始的时刻是

,所有场的“内部时间”都是

第一步:

进行磁场B的推进。

设置toDtFac参数为0.5,也就是推进目标时间

然后按照法拉第电磁感应定律将磁场推进为

其中

,其中

是磁场在这个更新步之前的内部时间。

这里显然

于是

,于是磁场被推进了半个时间步,推进结束后,磁场内部时间被推进到

第二步:

进行电场E的推进,这是利用广义的安培定律:

由于电场只有一步推进,因此这里的toDtFrac=1.0,所以

,并且在执行这个推进后,电场的内部时间被推进到

第三步:

再次推进磁场,仍然使用法拉第定律,并且设置toDtFrac=1.0,于是

并且

执行这个推进后,磁场内部时间被推进到

现在我们可以分析行波管的MultiField模型了。

在开始的部分,必须定义这个MultiField框架所蕴含的场:

numComponents=3

offset=edge

overlap=[12]

numComponents=3

offset=face

overlap=[12]

kind=depField

numComponents=3

offset=edge

overlap=[12]

$ifINCLUDE_PARTICLES==1

numComponents=3

offset=none

overlap=[12]

dumpPeriod=0

numComponents=3

offset=none

overlap=[12]

dumpPeriod=0

$endif

几个场的语法是一样的,都是要定义场的分量,位置(offset参数用来约定场量定义是在顶点,面心还是棱边上),存盘周期以及鬼网格结构。

在这里首先定义了电场,磁场和电流场。

接下来两个节点电磁场nodalE和nodalB是用来将计算出的电磁场传递给带电粒子计算。

所以这个部分是使用了条件编译。

接下来是更新算法,我们看到一系列的FieldUpdater和FieldMultiUpdater:

gridBoundary=metalParts

interiorness=deymittra

kind=yeeFaradayUpdater

components=[012]

expandToTopInComponentDir=1

lowerBounds=[000]

upperBounds=[NXNYNZ]

readFields=[edgeE]

writeFields=[faceB]

gridBoundary=metalParts

interiorness=deymittra

kind=deyMittraUpdater

lowerBounds=[000]

upperBounds=[NXNYNZ]

readFields=[edgeE]

writeFields=[faceB]

 

gridBoundary=metalParts

interiorness=deymittra

kind=yeeAmpereUpdater

components=[012]

contractFromBottomInNonComponentDir=1

lowerBounds=[000]

upperBounds=[NXNYNZ]

readFieldCompShifts=[00]

readFields=[faceBedgeJ]

writeFields=[edgeE]

 

$ifINCLUDE_PARTICLES==1

kind=edgeToNodeVec

lowerBounds=[000]

upperBounds=[$NX+1$$NY+1$$NZ+1$]

readFields=[edgeE]

writeFields=[nodalE]

kind=faceToNodeVec

lowerBounds=[000]

upperBounds=[$NX+1$$NY+1$$NZ+1$]

readFields=[faceB]

writeFields=[nodalB]

$endif

这里面有五个Updater。

一般来说前三个都是标准的:

yeeFaradayUpdater和deyMittraUpdater用来推进电磁场的法拉第感应定律:

由于导体表面处没有切向电场,需要对这个方程做特殊考虑,所以法拉第定律包含了两个updater,yeeFaradayUpdater用于计算不和导体接触的网格,而deyMittraUpdater用于计算导体边界处的网格,两个updater一般都是在一起应用的。

yeeAmpereUpdatery用来推进安培定律:

上面两种updater足以完成FDTD推进步骤,为了把电磁场输出给粒子,需要把edgeE和faceB的值传送给nodalE和nodalB,这是后面两个updater完成的工作。

一般情况下我们基本不需要修改这些updater,只要补充我们需要的updater并且封装就可以了。

最后是包装成完整的推进步:

toDtFrac=0.5

messageFields=[faceB]

updaters=[yeeFaradaydeyMittraFaraday]

toDtFrac=1.0

updaters=[yeeAmpere]

messageFields=[edgeE]

toDtFrac=1.0

messageFields=[faceB]

updaters=[yeeFaradaydeyMittraFaraday]

$ifINCLUDE_PARTICLES==1

toDtFrac=1.0

updaters=[nodalEupdate]

messageFields=[nodalE]

toDtFrac=1.0

updaters=[nodalBupdate]

messageFields=[nodalB]

$endif

按照我们说的那样,首先是finishFarady(半步法拉第定律),然后是Ampere(一步安培定律),再startFarady(另外半步法拉第定律)。

实际上完成这三步之后,一个FDTD推进步就完成,剩下的两个更新步用于将E和B输出到nodalE和nodalB。

加入介质和损耗

上面的计算只包含了导体部分,而实际的行波管还包含夹持杆和衰减器。

从模拟的角度来说夹持杆是一块电介质,而衰减器是一块部分导体。

对于电介质和衰减介质的建模,VSim有两种方案,一种是使用现成的两个求解器(更新器),另一种是干脆自己写一个更新器。

两者的区别是前者可以处理复杂外形(包括CAD导入),但是只能是均匀的介电函数或者电导函数;后者只能处理用函数描述的结构,但可以处理介电/电导函数的演化。

这里因为外形很简单,我们使用第二种方法。

首先看一下处理介电和电导问题的方法,在考虑介电和电导的情况下,安培定律是

使用半点差分,这个方程可以写成

化简后就是

或者写成

其中第二个方程完全等价于原来的安培更新步,所以我们只需要在原来的安培更新步之前之后各插入一个转换步,就可以实现带电导和介电的器件的求解。

为了实现这两个步骤,首先要写出介电和电导的表达式,这两个表达式是:

1.0+\

(EPS_ROD-1.0)*geoCylinderXP(x-XBGN_HELIX_WIRE,y-YROD1,z-ZROD1,RADIUS_ROD,LENGTH_HELIX_WIRE)+\

(EPS_ROD-1.0)*geoCylinderXP(x-XBGN_HELIX_WIRE,y-YROD2,z-ZROD2,RADIUS_ROD,LENGTH_HELIX_WIRE)+\

(EPS_ROD-1.0)*geoCylinderXP(x-XBGN_HELIX_WIRE,y-YROD3,z-ZROD3,RADIUS_ROD,LENGTH_HELIX_WIRE)

#definitionsforattenuator

$VPHASEX_HELIX=LIGHTSPEED*SINPHI

$XBGNTURN_ATTENUATOR=XBGN_HELIX+BGNTURN_ATTENUATOR*PITCH_HELIX

$LENGTH_ATTENUATOR=(ENDTURN_ATTENUATOR-BGNTURN_ATTENUATOR)*PITCH_HELIX

$SIGMA=(VPHASEX_HELIX*EPS0/LENGTH_ATTENUATOR)*ln(10.0**(DB_ATTENUATOR/10.0))

$ATTENUATE_FACTOR=0.5*DT*SIGMA/EPS0

ATTENUATE_FACTOR*geoPipeXP(x-XBGNTURN_ATTENUATOR,y,z,RMID_HELIX,REND_TUBE,LENGTH_ATTENUATOR)

然后需要在MultiField框架内加入updater和updaterStep:

#=epsRel-0.5*sigma*dt/eps0

numComponents=3

overlap=[12]

offset=edge

kind=variable

lowerBounds=[000]

upperBounds=[NXNYNZ]

components=[012]

kind=expression

expression=epsRelTerm(x,y,z)-attenuateTerm(x,y,z)

kind=expression

expression=epsRelTerm(x,y,z)-attenuateTerm(x,y,z)

kind=expression

expression=epsRelTerm(x,y,z)-attenuateTerm(x,y,z)

#=epsRel+0.5*sigma*dt/eps0

numComponents=3

overlap=[12]

offset=edge

kind=variable

lowerBounds=[000]

upperBounds=[NXNYNZ]

components=[012]

kind=expression

expression=epsRelTerm(x,y,z)+attenuateTerm(x,y,z)

kind=expression

expression=epsRelTerm(x,y,z)+attenuateTerm(x,y,z)

kind=expression

expression=epsRelTerm(x,y,z)+attenuateTerm(x,y,z)

kind=fieldBinOpUpdater

lowerBounds=[000]

upperBounds=[NXNYNZ]

binOp=multiply

aCoeff=0.0

bCoeff=0.0

readFields=[edgeEepsRelMinus]

writeFields=[edgeE]

kind=fieldBinOpUpdater

lowerBounds=[000]

upperBounds=[NXNYNZ]

binOp=divide

aCoeff=0.0

bCoeff=0.0

readFields=[edgeEepsRelPlus]

writeFields=[edgeE]

上面是电磁场的基本部分。

按照我们知道的,行波管除了等离子体自生电磁场之外,还有一个导向磁场,为此我们还要再加入一个更新器:

kind=STFuncUpdater

operation=add

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 表格类模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1