VSim螺旋线行波管模拟案例讲义Word文件下载.docx
- 文档编号:21961365
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:23
- 大小:648.63KB
VSim螺旋线行波管模拟案例讲义Word文件下载.docx
《VSim螺旋线行波管模拟案例讲义Word文件下载.docx》由会员分享,可在线阅读,更多相关《VSim螺旋线行波管模拟案例讲义Word文件下载.docx(23页珍藏版)》请在冰豆网上搜索。
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))
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))
fillGeoExpression(helix,geoCylinderXP(x-XBGN_HELIX_WIRE,yHelix(y,z),zHelix(x,y,z),RWIRE_HELIX,LENGTH_HELIX_WIRE))
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))
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宏。
<
MultiFieldyeeEM>
#场定义
...................
#推进公式
#-------------------------
#updateoperations
#实际的推进步骤
/MultiField>
通常几乎不会有人真的从头写出整个电磁模块,而都是在一个类型比较相似的模块上进行修改。
当然,我们可以使用以前遗留的一个宏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框架所蕴含的场:
FieldedgeE>
numComponents=3
offset=edge
overlap=[12]
/Field>
FieldfaceB>
offset=face
FieldedgeJ>
kind=depField
$ifINCLUDE_PARTICLES==1
FieldnodalE>
offset=none
dumpPeriod=0
FieldnodalB>
几个场的语法是一样的,都是要定义场的分量,位置(offset参数用来约定场量定义是在顶点,面心还是棱边上),存盘周期以及鬼网格结构。
在这里首先定义了电场,磁场和电流场。
接下来两个节点电磁场nodalE和nodalB是用来将计算出的电磁场传递给带电粒子计算。
所以这个部分是使用了条件编译。
接下来是更新算法,我们看到一系列的FieldUpdater和FieldMultiUpdater:
FieldMultiUpdateryeeFaraday>
gridBoundary=metalParts
interiorness=deymittra
kind=yeeFaradayUpdater
components=[012]
expandToTopInComponentDir=1
lowerBounds=[000]
upperBounds=[NXNYNZ]
readFields=[edgeE]
writeFields=[faceB]
/FieldMultiUpdater>
FieldUpdaterdeyMittraFaraday>
kind=deyMittraUpdater
/FieldUpdater>
FieldMultiUpdateryeeAmpere>
kind=yeeAmpereUpdater
contractFromBottomInNonComponentDir=1
readFieldCompShifts=[00]
readFields=[faceBedgeJ]
writeFields=[edgeE]
FieldUpdaternodalEupdate>
kind=edgeToNodeVec
upperBounds=[$NX+1$$NY+1$$NZ+1$]
writeFields=[nodalE]
FieldUpdaternodalBupdate>
kind=faceToNodeVec
readFields=[faceB]
writeFields=[nodalB]
$endif
这里面有五个Updater。
一般来说前三个都是标准的:
yeeFaradayUpdater和deyMittraUpdater用来推进电磁场的法拉第感应定律:
由于导体表面处没有切向电场,需要对这个方程做特殊考虑,所以法拉第定律包含了两个updater,yeeFaradayUpdater用于计算不和导体接触的网格,而deyMittraUpdater用于计算导体边界处的网格,两个updater一般都是在一起应用的。
yeeAmpereUpdatery用来推进安培定律:
上面两种updater足以完成FDTD推进步骤,为了把电磁场输出给粒子,需要把edgeE和faceB的值传送给nodalE和nodalB,这是后面两个updater完成的工作。
一般情况下我们基本不需要修改这些updater,只要补充我们需要的updater并且封装就可以了。
最后是包装成完整的推进步:
UpdateStepfinishFaraday>
toDtFrac=0.5
messageFields=[faceB]
updaters=[yeeFaradaydeyMittraFaraday]
/UpdateStep>
UpdateStepAmpere>
toDtFrac=1.0
updaters=[yeeAmpere]
messageFields=[edgeE]
UpdateStepstartFaraday>
UpdateStepgetEatNodes>
updaters=[nodalEupdate]
messageFields=[nodalE]
UpdateStepgetBatNodes>
updaters=[nodalBupdate]
messageFields=[nodalB]
按照我们说的那样,首先是finishFarady(半步法拉第定律),然后是Ampere(一步安培定律),再startFarady(另外半步法拉第定律)。
实际上完成这三步之后,一个FDTD推进步就完成,剩下的两个更新步用于将E和B输出到nodalE和nodalB。
加入介质和损耗
上面的计算只包含了导体部分,而实际的行波管还包含夹持杆和衰减器。
从模拟的角度来说夹持杆是一块电介质,而衰减器是一块部分导体。
对于电介质和衰减介质的建模,VSim有两种方案,一种是使用现成的两个求解器(更新器),另一种是干脆自己写一个更新器。
两者的区别是前者可以处理复杂外形(包括CAD导入),但是只能是均匀的介电函数或者电导函数;
后者只能处理用函数描述的结构,但可以处理介电/电导函数的演化。
这里因为外形很简单,我们使用第二种方法。
首先看一下处理介电和电导问题的方法,在考虑介电和电导的情况下,安培定律是
使用半点差分,这个方程可以写成
化简后就是
或者写成
其中第二个方程完全等价于原来的安培更新步,所以我们只需要在原来的安培更新步之前之后各插入一个转换步,就可以实现带电导和介电的器件的求解。
为了实现这两个步骤,首先要写出介电和电导的表达式,这两个表达式是:
functionepsRelTerm(x,y,z)>
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)
/function>
#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
functionattenuateTerm(x,y,z)>
ATTENUATE_FACTOR*geoPipeXP(x-XBGNTURN_ATTENUATOR,y,z,RMID_HELIX,REND_TUBE,LENGTH_ATTENUATOR)
然后需要在MultiField框架内加入updater和updaterStep:
FieldepsRelMinus>
#=epsRel-0.5*sigma*dt/eps0
InitialConditionvacuumEps>
kind=variable
lowerBounds=[000]
STFunccomponent0>
kind=expression
expression=epsRelTerm(x,y,z)-attenuateTerm(x,y,z)
/STFunc>
STFunccomponent1>
STFunccomponent2>
/InitialCondition>
FieldepsRelPlus>
#=epsRel+0.5*sigma*dt/eps0
expression=epsRelTerm(x,y,z)+attenuateTerm(x,y,z)
FieldUpdaterEtoD>
kind=fieldBinOpUpdater
binOp=multiply
aCoeff=0.0
bCoeff=0.0
readFields=[edgeEepsRelMinus]
FieldUpdaterDtoE>
binOp=divide
readFields=[edgeEepsRelPlus]
上面是电磁场的基本部分。
按照我们知道的,行波管除了等离子体自生电磁场之外,还有一个导向磁场,为此我们还要再加入一个更新器:
FieldUpdateraddInBstatic>
kind=STFuncUpdater
operation=add
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VSim 螺旋线 行波 模拟 案例 讲义