📄 mainfbh1test.html
字号:
<TITLE>COG 2.1: 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 issufficient. Of course, in the real application we have to useadditional <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 andthe 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 lengthwzFloat zDown = -1.5; // lower limit wzFloat zUp = 1.0; // upper limit of the layerwzFloat yCross = 0.6; // length of the crossbarwzFloat zCross = 0.5; // high of the crossbarwzFloat xCorner = 0.6; // wide of the corner partswzFloat yCorner = 1.4; // length of the corner partswzFloat xInner = 1.4; // wide of the inner holewzFloat xPillar = 0.2; // wide of the supporting pillarwzFloat yPillar = 0.6; // length of the supporting pillarwzFloat hz = 0.01; // high of the conductorwzFloat hx = 0.1; // wide of the conductorwzFloat dx = 0.1; // wide of gap between conductor and inner sidewzFloat dy = dx; // length of gap between conductor and inner sidewzFloat yb = 0.2; // begin and end of the conductorwzFloat ybe= yCorner+dx; // before first kinkwzFloat ye = yFull-yCorner-dx; // after last kinkwzFloat yCenter =3*dy; // size of the inner holeint 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); gen->omitEdgeComputation(); 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; grid->write("test.sg",wzDefaultSegmentDescription);}</PRE>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -