📄 mainfbh1test.html
字号:
<TITLE>COG 2.0: FBH nr. 1</TITLE>
<H1>FBH example nr. 1</H1>
<P>In this example we have have a very complex but rectangular structure.
<P><IMG SRC="fbh1test.gif">
<P>Thus, to define the geometry the standard
<B><A HREF="mainoctree3dtest.html">CogenOctree</A></B> class is
sufficient. Of course, in the real application we have to use
additional <A HREF="mainreftest.html">local refinement</A>.
<PRE>
#include "<A HREF="coglib.hxx">cog/coglib.hxx</A>"
</PRE>
<P>First, we introduce self-commenting names for regions, faces and
the distances we need:
<PRE>
static wzRegion rAir(1);
static wzRegion rGaAs(2);
static wzRegion rMetal(3);
static wzRegion rEntryPart(4);
static wzRegion rConductor1(5);
static wzRegion rConductor2(7);
static wzRegion rInnerPart(6);
static wzRegion rCrossbar(8);
static wzRegion rPillar(9);
wzFloat xHalf = 2.0; // half wide (symmetry x <-> -x)
wzFloat yFull = 5.0; // full length
wzFloat zDown = -1.5; // lower limit
wzFloat zUp = 1.0; // upper limit of the layer
wzFloat yCross = 0.6; // length of the crossbar
wzFloat zCross = 0.5; // high of the crossbar
wzFloat xCorner = 0.6; // wide of the corner parts
wzFloat yCorner = 1.4; // length of the corner parts
wzFloat xInner = 1.4; // wide of the inner hole
wzFloat xPillar = 0.2; // wide of the supporting pillar
wzFloat yPillar = 0.6; // length of the supporting pillar
wzFloat hz = 0.01; // high of the conductor
wzFloat hx = 0.1; // wide of the conductor
wzFloat dx = 0.1; // wide of gap between conductor and inner side
wzFloat dy = dx; // length of gap between conductor and inner side
wzFloat yb = 0.2; // begin and end of the conductor
wzFloat ybe= yCorner+dx; // before first kink
wzFloat ye = yFull-yCorner-dx; // after last kink
wzFloat yCenter =3*dy; // size of the inner hole
int main()
{
wzFloat xbInner = (xHalf-xInner)/2.0, xeInner = xHalf-xbInner;
wzFloat xbEntry = xCorner, xeEntry = xHalf-xbEntry;
wzFloat xbPillar= (xHalf-xPillar)/2.0,xePillar= xHalf-xbPillar;
wzFloat ybCross = yCorner - yCross, yeCross = yFull-ybCross;
wzFloat yePillar= yFull-yPillar, yeCorner = yFull-yCorner;
wzFloat zTop = zUp+hz;
wzFloat xb = (xHalf-hx)/2.0, xe = xHalf-xb;
wzFloat xb0 = xbInner+dx, xe0 = xHalf-xb0;
wzFloat xb1 = xb0+hx+dx, xe1 = xe0-hx-dx;
wzFloat yb0 = ybe+hx+dx, ymb = yb0+hx+dx;
wzFloat yme = ymb+yCenter+2*hx, ye0=yme+hx+dx;
wzFloat yu = ymb+hx;
cogenOctree gen = new CogenOctree();
gen->addPlaneX(0.0);
gen->addBox(rGaAs, -xHalf,xHalf, 0.0, yFull, zDown,0.0);
gen->addBox(rMetal, -xHalf,xHalf, 0.0, yFull, 0.0,zUp);
</PRE>
<P>Part for x>0:
<PRE>
gen->addBox(rInnerPart, xbInner,xeInner, yCorner,yeCorner, 0.0,zUp);
gen->addBox(rEntryPart, xbEntry,xeEntry, 0.0,yCorner, 0.0,zUp);
gen->addBox(rEntryPart, xbEntry,xeEntry, yeCorner,yFull, 0.0,zUp);
gen->addBox(rCrossbar, xbEntry,xeEntry, ybCross,yCorner, 0.0,zCross);
gen->addBox(rCrossbar, xbEntry,xeEntry, yeCorner,yeCross, 0.0,zCross);
gen->addBox(rPillar, xbPillar,xePillar, 0.0,yPillar, 0.0,zUp);
gen->addBox(rPillar, xbPillar,xePillar, yePillar,yFull, 0.0,zUp);
gen->addBox(rConductor2, xb,xe, yb,ybe, zUp,zTop);
gen->addBox(rConductor1, xb,xe0, ybe,ye0, zUp,zTop);
gen->addBox(rInnerPart, xb,xe0-hx, ybe+hx, ye0-hx, zUp,zTop);
gen->addBox(rConductor1, xb0,xe1, yb0,ye0, zUp,zTop);
gen->addBox(rInnerPart, xb0+hx,xe0-hx, yb0+hx,ye0-hx, zUp,zTop);
gen->addBox(rConductor1, xb1,xe1, yb0,yme, zUp,zTop);
gen->addBox(rInnerPart, xb1,xe1-hx, yb0+hx, yme-hx, zUp,zTop);
gen->addBox(rConductor1, xb1,xb+hx, ymb,yme, zUp,zTop);
gen->addBox(rInnerPart, xb1+hx,xb+hx, ymb+hx,yme-hx, zUp,zTop);
gen->addBox(rConductor1, xb,xe, ye,yFull-yb, zUp,zTop);
gen->addBox(rConductor2, xb,xe, ye-hz,ye, 0.0,zTop);
gen->addBox(rConductor1, xb,xe, yu,ye, 0.0,hz);
gen->addBox(rConductor2, xb,xe, yu,yu+hz, 0.0,zTop);
</PRE>
<P>Symmetrical part for x<0:
<PRE>
gen->addBox(rInnerPart, -xeInner,-xbInner, yCorner,yeCorner, 0.0,zUp);
gen->addBox(rEntryPart, -xeEntry,-xbEntry, 0.0,yCorner, 0.0,zUp);
gen->addBox(rEntryPart, -xeEntry,-xbEntry, yeCorner,yFull, 0.0,zUp);
gen->addBox(rCrossbar, -xeEntry,-xbEntry, ybCross,yCorner, 0.0,zCross);
gen->addBox(rCrossbar, -xeEntry,-xbEntry, yeCorner,yeCross, 0.0,zCross);
gen->addBox(rPillar, -xePillar,-xbPillar, 0.0,yPillar, 0.0,zUp);
gen->addBox(rPillar, -xePillar,-xbPillar, yePillar,yFull, 0.0,zUp);
gen->addBox(rConductor2, -xe, -xb, yb, ybe, zUp,zTop);
gen->addBox(rConductor1, -xe0,-xb, ybe,ye0, zUp,zTop);
gen->addBox(rInnerPart, -xe0+hx,-xb, ybe+hx,ye0-hx, zUp,zTop);
gen->addBox(rConductor1, -xe1,-xb0, yb0,ye0, zUp,zTop);
gen->addBox(rInnerPart, -xe0+hx,-xb0-hx, yb0+hx,ye0-hx, zUp,zTop);
gen->addBox(rConductor1, -xe1,-xb1, yb0,yme, zUp,zTop);
gen->addBox(rInnerPart, -xe1+hx,-xb1, yb0+hx,yme-hx, zUp,zTop);
gen->addBox(rConductor1, -xb-hx,-xb1, ymb,yme, zUp,zTop);
gen->addBox(rInnerPart, -xb-hx,-xb1-hx, ymb+hx,yme-hx, zUp,zTop);
gen->addBox(rConductor1, -xe,-xb, ye,yFull-yb, zUp,zTop);
gen->addBox(rConductor2, -xe,-xb, ye-hz,ye, 0.0,zTop);
gen->addBox(rConductor1, -xe,-xb, yu,ye, 0.0,hz);
gen->addBox(rConductor2, -xe,-xb, yu,yu+hz, 0.0,zTop);
gen->refinementGlobal(1.0,1.0,0.5);
wzgrid grid = (*gen)();
</PRE>
<P>What remains are some definitions for output:
<PRE>
rAir.material() = rAir;
rGaAs.material() = rGaAs;
rMetal.material() = rMetal;
rEntryPart.material() = rAir;
rCrossbar.material() = rMetal;
rInnerPart.material() = rAir;
rPillar.material() = rMetal;
rConductor1.material() = rMetal;
rConductor2.material() = rMetal;
ibgOutput(grid);
grid->write("fbh1.sg");
}
</PRE>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -