📄 mainfbh2test.html
字号:
<TITLE>COG 2.0: FBH nr. 2</TITLE>
<H1>FBH example nr. 2</H1>
<P>In this example we have to combine a rectangular planar structure
with a cylindrical hole:
<P><IMG SRC="fbh2test.gif">
<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 rLuft(1);
static wzRegion rGaAs(2);
static wzRegion rMetal(3);
static wzRegion rBase(6);
static wzRegion rCylinder(7);
static wzFace fMetal(3);
static wzFace fCylinder(7);
static wzFace fBase(6);
wzFloat xHalf = 800; // half of the wide (x<->-x is symmetry)
wzFloat yFull = 1025; // full length in y-direction
wzFloat zGaAs = 150; // thickness of the GaAs layer
wzFloat zMetal = 3; // thickness of the metallic layer
wzFloat zTop = 783; // upper size for air
wzFloat xMetal = 110; // wide of the metallic connection
wzFloat yMetal = 460; // lenght of the metallic connection
wzFloat dCyl = 90; // diameter of the cylindrical hole
wzFloat dBase = 130; // wide of the metallic base of the cylinder
wzFloat yCenter= 525; // center of the base and the cylinder
// begin (b) and end (e) values for some regions:
wzFloat yb = -yCenter, ye = yFull-yCenter;
wzFloat xbb = -dBase/2, xbe = dBase/2, ybb = xbb, ybe = xbe;
wzFloat xmb = -xMetal/2,xme = xMetal/2, ymb = -yCenter, yme = ybb;
</PRE>
<P>Now, we define the rectangular part of the grid. Note that we
distiguish two metallic regions (rBase, rMetal) and define
<A HREF="mainfacetest.html">face numbers</A> for these regions.
<PRE>
int main()
{
cogenOctree rec = new CogenOctree();
rec->addBox(rGaAs, -xHalf,xHalf, yb,ye, -zGaAs,0.0);
wzIndex ib = rec->addBox(rBase, xbb,xbe, ybb,ybe, 0.0,zMetal);
wzIndex im = rec->addBox(rMetal, xmb,xme, ymb,yme, 0.0,zMetal);
rec->setFaceOfBox(fMetal,im);
rec->setFaceOfBox(fBase,ib);
rec->addPlaneZ(zTop-zGaAs);
rec->addPlaneZ(zMetal/2);
</PRE>
<P>The reason for using different metallic regions is that we want
different <A HREF="mainreftest.html">refinement criteria</A>:
<PRE>
cogenRefine recref = new CogenRefine(rec->generator());
recref->refinementGlobal(200,200,200);
recref->refinementInRegion(200,200,50,rGaAs);
recref->refinementInRegion(50,100,zMetal,rMetal);
recref->refinementInRegion(25,25,zMetal,rBase);
</PRE>
<P>Now let's define the cylinder. The cylinder is full (from radius
0.0, angle -pi..pi). Note that the refinement in z-direction should be
compatible with the refinement outside.
<PRE>
wzFloat rCyl = dCyl/2, rCylEnv = rCyl+10;
cogenOctree cylbase = new CogenOctree();
cylbase->setBorder(0.0,rCylEnv, -wzPi,wzPi, -zGaAs,zTop-zGaAs);
ib = cylbase->addBox(rBase, 0.0,rCylEnv, -wzPi,wzPi, 0.0,zMetal);
cylbase->setFaceOfBox(fBase,ib);
wzIndex ic = cylbase->addBox(rCylinder, 0.0,rCyl, -wzPi,wzPi, -zGaAs,0.0);
cylbase->setFaceOfBox(fCylinder,ic);
cylbase->addPlaneZ(zMetal/2);
cogenRefine cylref = new CogenRefine(cylbase->generator());
cylref->refinementGlobal(22,0.5,200);
cylref->refinementInRegion(22,0.5,50,rCylinder);
cylref->refinementInRegion(22,0.5,zMetal,rBase);
wzcoordinates ccyl = new wz3DContinuation(new wzPolarCoordinates);
cogenChart cyl = new CogenChart(cylref->generator(),ccyl);
</PRE>
<P>Then we define the <A HREF="mainuniontest.html">union</A> of these
two grids. The cylinder comes first, because in the part where above
grids are defined we want to use the cylinder grid:
<PRE>
cogenComposite gen = new CogenUnion;
gen->add(cyl->generator());
gen->add(recref->generator());
wzgrid grid = (*gen)();
ibgOutput(grid);
grid->write("test.sg");
}
</PRE>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -