C ********************* Si-Rib_AWG.f ****************** C * * C * Array Waveguide Grating Mask Pattern * C * * C * Silicon Rib Waveguide * C * * C ***************************************************** C IMPLICIT INTEGER(I-N),REAL(A-H,O-Z) CHARACTER*15 FNAME,FCELL,TRCSB,TDC3DB,TMMI3DB,CLMAIN CHARACTER*3 FTYP C COMMON /NSCR/NSCR,NDUMY,JDATA,JCOLR COMMON /PI/PI,WFRME,BX,BY COMMON /WG/DIH,SLIT,CUT,XAWG,YAWG,XP,YP,XQ,YQ,SFBR,XDEV,YDEV C PI=3.141592653589793 C WRITE(6,2) 2 FORMAT(1H ) WRITE(6,3) 3 FORMAT(' Jdata = 1 ... Print Out of AWG Parameters') WRITE(6,2) WRITE(6,4) 4 FORMAT(' Jdata = 2 ... Mask Data Fabrication') WRITE(6,2) READ(5,5) JDATA 5 FORMAT(I1) C WRITE(6,2) WRITE(6,6) 6 FORMAT(' Jcolr = 1 ... Multiple Color Display') WRITE(6,2) WRITE(6,7) 7 FORMAT(' Jcolr = 2 ... True Layer for Mask Fabrication') WRITE(6,2) READ(5,8) JCOLR 8 FORMAT(I1) C FTYP='dxf' FNAME='Si-Rib_AWG' CALL OPENFILE(FNAME,FTYP) C C ============== Cell Pattern Generation ============== C C *** Full Cell Pattern *** C 100 IF (JDATA.EQ.1) GO TO 150 FCELL='F_Cell' CALL STRTCELL(FCELL) 150 SLIT=0.2 ! Minimum Slit in Photolithography (um) CUT=0.0 ! One-side RIE Reces (um) GAPSLB=0.0 ! Gap at Slsb-Array WG Interface (um) XDEV=5.4 ! Chip Total Width (mm) YDEV=5.4 ! Chip Total Height (mm) XSHFT= 0.00245086 ! Offset of the Chip Center (mm) YSHFT=-1.50716334 ! Offset of the Chip Center (mm) CALL MSKAWG(XSHFT,YSHFT,GAPSLB,FTYP) IF (JDATA.EQ.1) GO TO 500 C C *** Cell Name & Frame ** C CALL CNPAWG(FTYP) CALL FRAME(FTYP) CALL ENDCELL C C ======== Test Radius of Curvature by S-Bends ======== C 500 TRCSB='T_RCSB' CALL STRTCELL(TRCSB,FTYP) CALL RCSB(FTYP) IF (JDATA.EQ.1) GO TO 520 CALL ENDCELL(FTYP) C C =========== Test 3dB Directional Couplers =========== C TDC3DB='T_DC3dB' CALL STRTCELL(TDC3DB,FTYP) 520 CALL DC3DB(FTYP) IF (JDATA.EQ.1) GO TO 540 CALL ENDCELL(FTYP) C C =============== Test MMI 3dB Couplers =============== C TMMI3DB='T_MMI3dB' CALL STRTCELL(TMMI3DB,FTYP) 540 CALL MMI3DB(FTYP) IF (JDATA.EQ.1) GO TO 9000 CALL ENDCELL(FTYP) C C =========== Cell Allocation in Main Pattern ========== C CLMAIN='Main_Cell' CALL STRTCELL(CLMAIN) ANGLE=0.0 AMAG=1.0 X=0.0 Y=0.0 NROT=0 CALL SREF(ANGLE,FCELL,X,Y,NROT,AMAG) C X=0.0 Y=0.0 NROT=0 CALL SREF(ANGLE,TRCSB,X,Y,NROT,AMAG) CALL SREF(ANGLE,TDC3DB,X,Y,NROT,AMAG) CALL SREF(ANGLE,TMMI3DB,X,Y,NROT,AMAG) C C *** Marker Set *** C CALL MARKER(FTYP) CALL ENDCELL C 9000 CALL CLOSEFILE C WRITE(6,1000) 1000 FORMAT(' !! Mask Job "Si-Rib_AWG.f" has been completed !!') C STOP END C C *********************** MSKAWG *********************** C * * C * Full Mask Pattern XY-Plot with Caption * C * * C ****************************************************** SUBROUTINE MSKAWG(XSHFT,YSHFT,GAPSLB,FTYP) IMPLICIT INTEGER(I-N),REAL(A-H,O-Z) CHARACTER*3 FTYP C COMMON /NSCR/NSCR,NDUMY,JDATA,JCOLR COMMON /PI/PI,WFRME,BX,BY COMMON /WG/DIH,SLIT,CUT,XAWG,YAWG,XP,YP,XQ,YQ,SFBR,XDEV,YDEV C DIMENSION RAWG(1024),OFAWG(1024),PSAI(1024) DIMENSION SFNL(1024),HIGHT(1024),PLNG(1024) DIMENSION XAU(1024),XBU(1024),XCU(1024),XDU(1024),XEU(1024) DIMENSION YAU(1024),YBU(1024),YCU(1024),YDU(1024),YEU(1024) DIMENSION XHU(1024),XOA(1024) DIMENSION YHU(1024),YOA(1024) C DIMENSION GZAI(288),STPR(288),SF(288) DIMENSION XAD(288),XBD(288),XCD(288),XDD(288),XED(288) DIMENSION YAD(288),YBD(288),YCD(288),YDD(288),YED(288) DIMENSION XFD(288),XGD(288),XHD(288),XID(288),XJD(288) DIMENSION YFD(288),YGD(288),YHD(288),YID(288),YJD(288) DIMENSION XOI(288),XOJ(288),XOK(288) DIMENSION YOI(288),YOJ(288),YOK(288) C DIMENSION GZAIHT(288),STPRHT(288),SFHT(288) DIMENSION XADHT(288),XBDHT(288),XCDHT(288),XDDHT(288),XEDHT(288) DIMENSION YADHT(288),YBDHT(288),YCDHT(288),YDDHT(288),YEDHT(288) DIMENSION XFDHT(288),XGDHT(288),XHDHT(288),XIDHT(288),XJDHT(288) DIMENSION YFDHT(288),YGDHT(288),YHDHT(288),YIDHT(288),YJDHT(288) DIMENSION XOIHT(288),XOJHT(288),XOKHT(288) DIMENSION YOIHT(288),YOJHT(288),YOKHT(288) C DIMENSION XSREF(5,2) DIMENSION YSREF(5,2) C C << AWG Parameters >> C RMIN=400.0 ! Minimum Bending Radius (um) OFST=0.0 ! Waveguide Offset (um) C DIA=1.0 ! Core Diameter (um) A=DIA/2.0 DIH=DIA+2.0*CUT ! Mask Width (um) H=DIH/2.0 THK=0.5 ! Core Center Thickness (um) DELRN=9.7 ! Index Difference (%) WL0=1.55 ! Center Wavelength (um) C C *** Slab and Array Waveguide Region *** C NSCR=290 ! Number of Array Waveguides NFDM=64 ! Number of Channels C SGHZ=100.0 ! Channel Spacing (GHz) VNRGHZ=10.0 ! Vernier Frequency (GHz) RY=518.63493096 ! Radius of Slab (um) DSTMWG=1.5 ! Array-side WG Spacing (um) DSTRCV=2.5 ! Input/Output WG Spacing (um) DELTAL=12.10827012 ! Path Length Difference (um) MFDM=25 ! Diffraction Order C WTPR=DSTMWG-SLIT ! Array-side Taperd-WG Mask Width (um) YTAPER=40.0 ! Array-side Taper Length (um) YFNL=YTAPER+10.0 NDUMY=10 ! Number of One-side Dummy Waveguides SDUMY=0.0 ! Straight Dummy Length added to Yfnl C DIASLP=1.5 ! Input Taperd-WG Width WSLP=DIASLP+2.0*CUT ! Input-side Taperd-WG Mask Width (um) YSLPE=35.0 ! Input-side Taper Length (um) YTPR=YSLPE+10.0 C JINIT=13 ! Input-side Initial Port Number JLAST=52 ! Input-side Fial Port Number LINIT=13 ! Output-side Initial Port Number LLAST=52 ! Output-side Fial Port Number C STRAWG=0.0 ! Width of the Space (um) C C *** Slab Angle & Distance Dq1q2 determined by "mcwdm.bas" *** C ALPDEG=90.0 ! Inclination Angle of Slab (deg) DQ1Q2=1.25 ! 2*(Distance between Q1 and Xc) (mm) C C *** Chip Size *** C SWG=10.0 ! Waveguide Separation (um) SFBR=100.0 ! Input Fiber Separation (um) SOUT=100.0 ! Output Waveguide Separation (um) NPAIR=NFDM ! Number of Waveguide Pair ANSP=0.0 ! Block Separation (1 + Ansp)*Sfbr C XDEV=XDEV*1000.0 YDEV=YDEV*1000.0 XSHFT=XSHFT*1000.0 YSHFT=YSHFT*1000.0 C C ================= Array Waveguides ================== C PHI0=ASIN(DSTMWG/2.0/RY) DO 100 J=1,NSCR PSAI(J)=FLOAT(NSCR-2*J+1)*PHI0 100 CONTINUE C ALPHA=ALPDEG*PI/180.0 DQ1Q2=DQ1Q2*1000.0 CNST=DQ1Q2/2.0 C ANGN=ALPHA+PSAI(NSCR) SFNL(NSCR)=0.0 SFNLN=SFNL(NSCR) RAWG(NSCR)=(CNST-STRAWG/2.0-(RY+YFNL+SFNLN)*COS(ANGN))/SIN(ANGN) RAWGN=RAWG(NSCR) OFAWG(NSCR)=OFST*RMIN/RAWGN HIGHT(NSCR)=(RY+YFNL+SFNLN)*SIN(ANGN)+RAWGN*(1.0-COS(ANGN)) PLNG(NSCR)=2.0*(SFNL(NSCR)+RAWG(NSCR)*ANGN) C DO 200 J=NSCR-1,1,-1 ANG=ALPHA+PSAI(J) BUNBO=SIN(ANG)-ANG*COS(ANG) BNSHI=CNST-STRAWG/2.0-(RY+YFNL+RAWGN*ANGN+FLOAT(NSCR-J)*DELTAL & /2.0)*COS(ANG) RAWG(J)=BNSHI/BUNBO OFAWG(J)=OFST*RMIN/RAWG(J) SFNL(J)=RAWGN*ANGN+FLOAT(NSCR-J)*DELTAL/2.0-RAWG(J)*ANG HIGHT(J)=(RY+YFNL+SFNL(J))*SIN(ANG)+RAWG(J)*(1.0-COS(ANG)) PLNG(J)=2.0*(SFNL(J)+RAWG(J)*ANG) SPRTN=HIGHT(J)-HIGHT(J+1) 200 CONTINUE C C ============== Input/Output Waveguides =============== C C *** Normal Output Waveguides *** C SGM0=ASIN(DSTRCV/2.0/RY) DO 300 I=1,NFDM GZAI(I)=FLOAT(NFDM+1-2*I)*SGM0 300 CONTINUE C DO 340 I=LINIT,LLAST IPAIR=IFIX(FLOAT(I-LINIT)/FLOAT(NPAIR))+1 K=(I-LINIT+1)-NPAIR*(IPAIR-1) SF(I)=SOUT*((FLOAT(NPAIR)+ANSP)*FLOAT(IPAIR-1)+FLOAT(K-1)) 340 CONTINUE C DO 360 I=LINIT,LLAST ANG1=ALPHA-GZAI(LINIT) ANGI=ALPHA-GZAI(I) BNSHI=FLOAT(I-LINIT)*SWG-(RY+YTPR)*(SIN(ANGI)-SIN(ANG1)) & -RMIN*(COS(ANG1)-COS(ANGI)) STPR(I)=BNSHI/SIN(ANGI) 360 CONTINUE C C *** Vernier Input Waveguides *** C DSTVNR=DSTRCV*(SGHZ+VNRGHZ)/SGHZ SGM0HT=ASIN(DSTVNR/2.0/RY) DO 400 I=1,NFDM GZAIHT(I)=FLOAT(NFDM-2*I+1)*SGM0HT 400 CONTINUE C DO 440 I=JINIT,JLAST IPAIR=IFIX(FLOAT(I-JINIT)/FLOAT(NPAIR))+1 K=(I-JINIT+1)-NPAIR*(IPAIR-1) SFHT(I)=SFBR*((FLOAT(NPAIR)+ANSP)*FLOAT(IPAIR-1)+FLOAT(K-1)) 440 CONTINUE C DO 460 I=JINIT,JLAST ANG1=ALPHA-GZAIHT(JINIT) ANGI=ALPHA-GZAIHT(I) BNSHI=FLOAT(I-JINIT)*SWG-(RY+YTPR)*(SIN(ANGI)-SIN(ANG1)) & -RMIN*(COS(ANG1)-COS(ANGI)) STPRHT(I)=BNSHI/SIN(ANGI) 460 CONTINUE C X0=0.0 Y0=0.0 BX=1.0 BY=1.0 C C ================= Waveguide Parameters ================ C C *** Parameters are Defined in Lefthand-side Coordinates *** C C --- Slab and Array Waveguides --- C XAWG=X0+BX*XSHFT YAWG=Y0+BY*YSHFT C XC=XAWG-BX*STRAWG/2.0 YC=YAWG C XQ=XAWG-BX*CNST YQ=YAWG XP=XQ+BX*RY*COS(ALPHA) YP=YQ+BY*RY*SIN(ALPHA) C THEDGE=FLOAT(NSCR+2*NDUMY+1)*PHI0 XLU=XQ+BX*RY*COS(ALPHA+THEDGE) YLU=YQ+BY*RY*SIN(ALPHA+THEDGE) XRU=XQ+BX*RY*COS(ALPHA-THEDGE) YRU=YQ+BY*RY*SIN(ALPHA-THEDGE) XLD=XP-BX*RY*COS(ALPHA-THEDGE) YLD=YP-BY*RY*SIN(ALPHA-THEDGE) XRD=XP-BX*RY*COS(ALPHA+THEDGE) YRD=YP-BY*RY*SIN(ALPHA+THEDGE) C DO 600 J=1,NSCR TH=ALPHA+PSAI(J) XAU(J)=XQ+BX*RY*COS(TH) YAU(J)=YQ+BY*RY*SIN(TH) XBU(J)=XQ+BX*(RY+YTAPER)*COS(TH) YBU(J)=YQ+BY*(RY+YTAPER)*SIN(TH) XCU(J)=XQ+BX*(RY+YFNL)*COS(TH) YCU(J)=YQ+BY*(RY+YFNL)*SIN(TH) XDU(J)=XQ+BX*(RY+YFNL+SFNL(J))*COS(TH) YDU(J)=YQ+BY*(RY+YFNL+SFNL(J))*SIN(TH) XOA(J)=XC YOA(J)=YC+BY*((RY+YFNL+SFNL(J))*SIN(TH)-RAWG(J)*COS(TH)) XEU(J)=XC YEU(J)=YOA(J)+BY*RAWG(J) XHU(J)=XAWG YHU(J)=YEU(J) 600 CONTINUE C C *** Vernier Input Waveguides : C (Placed in Lefthand-side Slab and Array WGs) *** C DO 700 I=JINIT,JLAST TH=ALPHA-GZAIHT(I) XADHT(I)=XP-BX*RY*COS(TH) YADHT(I)=YP-BY*RY*SIN(TH) XBDHT(I)=XP-BX*(RY+YSLPE)*COS(TH) YBDHT(I)=YP-BY*(RY+YSLPE)*SIN(TH) XCDHT(I)=XP-BX*(RY+YTPR)*COS(TH) YCDHT(I)=YP-BY*(RY+YTPR)*SIN(TH) XDDHT(I)=XP-BX*(RY+YTPR+STPRHT(I))*COS(TH) YDDHT(I)=YP-BY*(RY+YTPR+STPRHT(I))*SIN(TH) XOIHT(I)=XDDHT(I)-BX*RMIN*SIN(TH) YOIHT(I)=YDDHT(I)+BY*RMIN*COS(TH) XEDHT(I)=XOIHT(I) YEDHT(I)=YOIHT(I)-BY*RMIN 700 CONTINUE C DO 720 I=JINIT,JLAST XGDHT(I)=(XEDHT(JINIT)-BX*RMIN)-BX*FLOAT(I-JINIT)*SWG YGDHT(I)=YOIHT(I) XFDHT(I)=XGDHT(I)+BX*RMIN YFDHT(I)=YEDHT(I) XOJHT(I)=XFDHT(I) YOJHT(I)=YOIHT(I) XIDHT(I)=XGDHT(I)-BX*RMIN YIDHT(I)=(YEDHT(JLAST)+BY*2.0*RMIN)+BY*(SFHT(JLAST)-SFHT(I)) XOKHT(I)=XIDHT(I) YOKHT(I)=YIDHT(I)-BY*RMIN XHDHT(I)=XOKHT(I)+BX*RMIN YHDHT(I)=YOKHT(I) XJDHT(I)=X0-BX*XDEV/2.0 YJDHT(I)=YIDHT(I) 720 CONTINUE C C *** Normal Output Waveguides : C (Turned Over into Righthand-side Slab and Array WGs) *** C DO 800 I=LINIT,LLAST TH=ALPHA-GZAI(I) XAD(I)=XP-BX*RY*COS(TH) YAD(I)=YP-BY*RY*SIN(TH) XBD(I)=XP-BX*(RY+YSLPE)*COS(TH) YBD(I)=YP-BY*(RY+YSLPE)*SIN(TH) XCD(I)=XP-BX*(RY+YTPR)*COS(TH) YCD(I)=YP-BY*(RY+YTPR)*SIN(TH) XDD(I)=XP-BX*(RY+YTPR+STPR(I))*COS(TH) YDD(I)=YP-BY*(RY+YTPR+STPR(I))*SIN(TH) XOI(I)=XDD(I)-BX*RMIN*SIN(TH) YOI(I)=YDD(I)+BY*RMIN*COS(TH) XED(I)=XOI(I) YED(I)=YOI(I)-BY*RMIN 800 CONTINUE C DO 820 I=LINIT,LLAST XGD(I)=(XED(LINIT)-BX*RMIN)-BX*FLOAT(I-LINIT)*SWG YGD(I)=YOI(I) XFD(I)=XGD(I)+BX*RMIN YFD(I)=YED(I) XOJ(I)=XFD(I) YOJ(I)=YOI(I) XID(I)=XGD(I)-BX*RMIN YID(I)=(YED(LLAST)+BY*2.0*RMIN)+BY*(SF(LLAST)-SF(I)) XOK(I)=XID(I) YOK(I)=YID(I)-BY*RMIN XHD(I)=XOK(I)+BX*RMIN YHD(I)=YOK(I) XJD(I)=X0-BX*XDEV/2.0 YJD(I)=YID(I) 820 CONTINUE C C *** Reference Waveguides *** C NREF=1 DO 1000 I=1,NREF XSREF(I,1)=XJDHT(JLAST) YSREF(I,1)=YFDHT(JLAST)-BY*FLOAT(I)*SFBR XSREF(I,2)=2.0*XAWG-XJD(LLAST) YSREF(I,2)=YSREF(I,1) 1000 CONTINUE C GO TO (6000,7000),JDATA C C ====== Print Out of the AWG Parameters ====== C 6000 WRITE(2,1) WRITE(2,1) WRITE(2,1) WRITE(2,2) WRITE(2,1) C WRITE(2,3) SLIT WRITE(2,4) CUT WRITE(2,5) GAPSLB WRITE(2,1) C WRITE(2,6) RMIN WRITE(2,7) OFST WRITE(2,8) DIA WRITE(2,9) THK WRITE(2,10) DELRN WRITE(2,11) WL0 WRITE(2,12) DIH WRITE(2,1) C WRITE(2,13) NSCR WRITE(2,14) NFDM WRITE(2,15) RY WRITE(2,16) DSTMWG WRITE(2,17) DSTRCV WRITE(2,18) DELTAL WRITE(2,19) MFDM WRITE(2,1) C WRITE(2,20) WTPR WRITE(2,21) YTAPER WRITE(2,22) YFNL WRITE(2,23) DIASLP WRITE(2,24) WSLP WRITE(2,25) YSLPE WRITE(2,26) YTPR WRITE(2,1) C WRITE(2,27) ALPDEG WRITE(2,28) DQ1Q2 WRITE(2,29) SFBR WRITE(2,30) NPAIR WRITE(2,31) ANSP WRITE(2,1) C STRHT=0.0 DO 6100 I=JINIT,JLAST IF ((XAWG-XIDHT(I))/BX.LT.STRHT) GO TO 6100 STRIN=(XAWG-XIDHT(I))/BX ISTRHT=I 6100 CONTINUE XWGLFT=XIDHT(ISTRHT) WRITE(2,37) (X0-XWGLFT)/BX/1000.0 WRITE(6,1) WRITE(6,37) (X0-XWGLFT)/BX/1000.0 C STR=0.0 DO 6200 I=LINIT,LLAST IF ((XAWG-XID(I))/BX.LT.STR) GO TO 6200 STROT=(XAWG-XID(I))/BX ISTR=I 6200 CONTINUE XWGRGT=2.0*XAWG-XID(ISTR) WRITE(2,38) (XWGRGT-X0)/BX/1000.0 WRITE(6,38) (XWGRGT-X0)/BX/1000.0 C YWGTP1=YC+BY*HIGHT(1) YWGTP2=YJD(LINIT) YWGTOP=AMAX1(YWGTP1,YWGTP2) YWGBTM=YSREF(NREF,1) WRITE(2,39) (YWGTOP-Y0)/BY/1000.0 WRITE(2,40) (Y0-YWGBTM)/BY/1000.0 WRITE(6,1) WRITE(6,39) (YWGTOP-Y0)/BY/1000.0 WRITE(6,40) (Y0-YWGBTM)/BY/1000.0 C WRITE(2,41) XSHFT/1000.0 WRITE(2,42) YSHFT/1000.0 WRITE(2,43) XDEV/1000.0 WRITE(2,44) YDEV/1000.0 WRITE(6,1) WRITE(6,41) XSHFT/1000.0 WRITE(6,42) YSHFT/1000.0 WRITE(6,43) XDEV/1000.0 WRITE(6,44) YDEV/1000.0 C WRITE(6,1) DELXSH=(X0-(XWGLFT+XWGRGT)/2.0)/BX/1000.0 IF (ABS(DELXSH).LT.1.E-6) THEN WRITE(6,45) ELSE WRITE(6,46) DELXSH END IF C DELYSH=(Y0-(YWGBTM+YWGTOP)/2.0)/BY/1000.0 IF (ABS(DELYSH).LT.1.E-6) THEN WRITE(6,47) ELSE WRITE(6,48) DELYSH END IF WRITE(6,1) C WRITE(2,1) DO 6500 J=1,NSCR PTHDFF=(PLNG(J)-PLNG(NSCR))/DELTAL WRITE(2,50) J,NSCR,PTHDFF 6500 CONTINUE C C ================= Format for Print Out =============== C 1 FORMAT(1H ) 2 FORMAT(' << AWG Parameters >> ') C 3 FORMAT(' Slit =',F11.4,' (um)') 4 FORMAT(' Cut =',F11.4,' (um)') 5 FORMAT(' Gapslb =',F11.4,' (um)') C 6 FORMAT(' Rmin =',F11.4,' (um)') 7 FORMAT(' Ofst =',F11.4,' (um)') 8 FORMAT(' 2a =',F11.4,' (um)') 9 FORMAT(' 2t =',F11.4,' (um)') 10 FORMAT(' delta =',F11.4,' (%)') 11 FORMAT(' wl =',F11.4,' (um)') 12 FORMAT(' 2h =',F11.4,' (um)') C 13 FORMAT(' Nscr =',I5) 14 FORMAT(' Nfdm =',I5) 15 FORMAT(' Ry =',F11.4,' (um)') 16 FORMAT(' Dstmwg =',F11.4,' (um)') 17 FORMAT(' Dstrcv =',F11.4,' (um)') 18 FORMAT(' D(L) =',F11.4,' (um)') 19 FORMAT(' Mfdm =',I5) C 20 FORMAT(' Wtpr =',F11.4,' (um)') 21 FORMAT(' Ytaper =',F11.4,' (um)') 22 FORMAT(' Yfnl =',F11.4,' (um)') 23 FORMAT(' Diaslp =',F11.4,' (um)') 24 FORMAT(' Wslp =',F11.4,' (um)') 25 FORMAT(' Yslpe =',F11.4,' (um)') 26 FORMAT(' Ytpr =',F11.4,' (um)') C 27 FORMAT(' Alpdeg =',F11.4,' (degree)') 28 FORMAT(' DQ1Q2 =',F11.4,' (um)') 29 FORMAT(' Sfbr =',F11.4,' (um)') 30 FORMAT(' Npair =',I5) 31 FORMAT(' Nsp =',F11.4) C 37 FORMAT(' X0 - Net Leftmost Xpstn =',F7.4,' (mm)') 38 FORMAT(' Net Rightmost Xpstn - X0 =',F7.4,' (mm)') 39 FORMAT(' Ywgtop - Y0 =',F9.4,' (mm)') 40 FORMAT(' Y0 - Ywgbtm =',F9.4,' (mm)') 41 FORMAT(' Xshft =',F11.4,' (mm)') 42 FORMAT(' Yshft =',F11.4,' (mm)') 43 FORMAT(' Xdev =',F11.4,' (mm)') 44 FORMAT(' Ydev =',F11.4,' (mm)') 45 FORMAT(' Xshft should be as it is !!') 46 FORMAT(' Xshft should be',F13.8,' (mm) than the present value') 47 FORMAT(' Yshft should be as it is !!') 48 FORMAT(' Yshft should be',F13.8,' (mm) than the present value') C 50 FORMAT(' [Pl(',I4,') - Pl(',I4,')]/D(L) =',F9.4) C RETURN C C [[ dxf Mask Data Output ]] C C ==================== Slab Region ==================== C 7000 XC1=XP YC1=YP AGS1=PI+ALPHA-THEDGE AGE1=PI+ALPHA+THEDGE XC2=XQ YC2=YQ AGS2=ALPHA-THEDGE AGE2=ALPHA+THEDGE IF (GAPSLB.EQ.0.0) THEN RR=RY+2.0E-3 ELSE RR=RY-GAPSLB ENDIF LAYER=1 CALL POLY(XC1,YC1,AGS1,AGE1,XC2,YC2,AGS2,AGE2,RR,LAYER,FTYP) C XC1=2.0*XAWG-XC1 AGS1=PI-AGS1 AGE1=PI-AGE1 XC2=2.0*XAWG-XC2 AGS2=PI-AGS2 AGE2=PI-AGE2 CALL POLY(XC1,YC1,AGS1,AGE1,XC2,YC2,AGS2,AGE2,RR,LAYER,FTYP) C C ================= Array Waveguides ================= C DO 7100 J=-NDUMY+1,0 C PSAIJ=FLOAT(NSCR-2*J+1)*PHI0 C TH=ALPHA+PSAIJ XAUJ=XQ+BX*RY*COS(TH) YAUJ=YQ+BY*RY*SIN(TH) XBUJ=XQ+BX*(RY+YTAPER)*COS(TH) YBUJ=YQ+BY*(RY+YTAPER)*SIN(TH) XCUJ=XQ+BX*(RY+YFNL)*COS(TH) YCUJ=YQ+BY*(RY+YFNL)*SIN(TH) XDUJ=XQ+BX*(RY+YFNL+SDUMY)*COS(TH) YDUJ=YQ+BY*(RY+YFNL+SDUMY)*SIN(TH) C C *** Tapered Quadrangle *** C ANG=ASIN(WTPR/2.0/RY) X1=XQ+BX*RY*COS(ALPHA+PSAIJ+ANG) Y1=YQ+BY*RY*SIN(ALPHA+PSAIJ+ANG) X2=XBUJ-BX*H*SIN(ALPHA+PSAIJ) Y2=YBUJ+BY*H*COS(ALPHA+PSAIJ) X3=XBUJ+BX*H*SIN(ALPHA+PSAIJ) Y3=YBUJ-BY*H*COS(ALPHA+PSAIJ) X4=XQ+BX*RY*COS(ALPHA+PSAIJ-ANG) Y4=YQ+BY*RY*SIN(ALPHA+PSAIJ-ANG) IF (JCOLR.EQ.1) THEN LAYER=5 ELSE LAYER=1 ENDIF CALL QUAD(X1,Y1,X2,Y2,X3,Y3,X4,Y4,LAYER,FTYP) C X1=2.0*XAWG-X1 X2=2.0*XAWG-X2 X3=2.0*XAWG-X3 X4=2.0*XAWG-X4 CALL QUAD(X1,Y1,X2,Y2,X3,Y3,X4,Y4,LAYER,FTYP) C C *** Straight Part *** C XS=XBUJ YS=YBUJ XE=XDUJ YE=YDUJ WIDTH=DIH LTYPE=0 LAYER=1 CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C XS=2.0*XAWG-XS XE=2.0*XAWG-XE CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C 7100 CONTINUE C DO 7200 J=1,NSCR C C *** Tapered Quadrangle *** C ANG=ASIN(WTPR/2.0/RY) X1=XQ+BX*RY*COS(ALPHA+PSAI(J)+ANG) Y1=YQ+BY*RY*SIN(ALPHA+PSAI(J)+ANG) X2=XBU(J)-BX*H*SIN(ALPHA+PSAI(J)) Y2=YBU(J)+BY*H*COS(ALPHA+PSAI(J)) X3=XBU(J)+BX*H*SIN(ALPHA+PSAI(J)) Y3=YBU(J)-BY*H*COS(ALPHA+PSAI(J)) X4=XQ+BX*RY*COS(ALPHA+PSAI(J)-ANG) Y4=YQ+BY*RY*SIN(ALPHA+PSAI(J)-ANG) IF (JCOLR.EQ.1) THEN LAYER=5 ELSE LAYER=1 ENDIF CALL QUAD(X1,Y1,X2,Y2,X3,Y3,X4,Y4,LAYER,FTYP) C X1=2.0*XAWG-X1 X2=2.0*XAWG-X2 X3=2.0*XAWG-X3 X4=2.0*XAWG-X4 CALL QUAD(X1,Y1,X2,Y2,X3,Y3,X4,Y4,LAYER,FTYP) C C *** Straight Part *** C XS=XBU(J) YS=YBU(J) XE=XDU(J) YE=YDU(J) WIDTH=DIH LTYPE=0 LAYER=1 CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C XS=2.0*XAWG-XS XE=2.0*XAWG-XE CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C C *** Bend *** C XCNTR=XOA(J) YCNTR=YOA(J) RR=RAWG(J)-OFAWG(J) ANGS=PI/2.0+ALPHA+PSAI(J) ANGE=PI/2.0 WIDTH=DIH IF (JCOLR.EQ.1) THEN LAYER=7 ELSE LAYER=1 ENDIF CALL BEND(XCNTR,YCNTR,RR,ANGS,ANGE,WIDTH,LAYER,FTYP) C XCNTR=2.0*XAWG-XCNTR ANGS=PI-ANGS ANGE=PI-ANGE CALL BEND(XCNTR,YCNTR,RR,ANGS,ANGE,WIDTH,LAYER,FTYP) C C *** Straight Part *** C XS=XEU(J) YS=YEU(J) XE=XHU(J) YE=YHU(J) WIDTH=DIH LTYPE=0 IF (JCOLR.EQ.1) THEN LAYER=8 ELSE LAYER=1 ENDIF CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C XS=2.0*XAWG-XS XE=2.0*XAWG-XE CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C 7200 CONTINUE C DO 7300 J=NSCR+1,NSCR+NDUMY C PSAIJ=FLOAT(NSCR-2*J+1)*PHI0 C TH=ALPHA+PSAIJ XAUJ=XQ+BX*RY*COS(TH) YAUJ=YQ+BY*RY*SIN(TH) XBUJ=XQ+BX*(RY+YTAPER)*COS(TH) YBUJ=YQ+BY*(RY+YTAPER)*SIN(TH) XCUJ=XQ+BX*(RY+YFNL)*COS(TH) YCUJ=YQ+BY*(RY+YFNL)*SIN(TH) XDUJ=XQ+BX*(RY+YFNL+SDUMY)*COS(TH) YDUJ=YQ+BY*(RY+YFNL+SDUMY)*SIN(TH) C C *** Tapered Quadrangle *** C ANG=ASIN(WTPR/2.0/RY) X1=XQ+BX*RY*COS(ALPHA+PSAIJ+ANG) Y1=YQ+BY*RY*SIN(ALPHA+PSAIJ+ANG) X2=XBUJ-BX*H*SIN(ALPHA+PSAIJ) Y2=YBUJ+BY*H*COS(ALPHA+PSAIJ) X3=XBUJ+BX*H*SIN(ALPHA+PSAIJ) Y3=YBUJ-BY*H*COS(ALPHA+PSAIJ) X4=XQ+BX*RY*COS(ALPHA+PSAIJ-ANG) Y4=YQ+BY*RY*SIN(ALPHA+PSAIJ-ANG) IF (JCOLR.EQ.1) THEN LAYER=5 ELSE LAYER=1 ENDIF CALL QUAD(X1,Y1,X2,Y2,X3,Y3,X4,Y4,LAYER,FTYP) C X1=2.0*XAWG-X1 X2=2.0*XAWG-X2 X3=2.0*XAWG-X3 X4=2.0*XAWG-X4 CALL QUAD(X1,Y1,X2,Y2,X3,Y3,X4,Y4,LAYER,FTYP) C C *** Straight Part *** C XS=XBUJ YS=YBUJ XE=XDUJ YE=YDUJ WIDTH=DIH LTYPE=0 LAYER=1 CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C XS=2.0*XAWG-XS XE=2.0*XAWG-XE CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C 7300 CONTINUE C C === Vernier Input Waveguides === C DO 8000 I=JINIT,JLAST C C *** Tapered Quadrangle *** C ANG=ASIN(WSLP/2.0/RY) X1=XP-BX*RY*COS(ALPHA-GZAIHT(I)-ANG) Y1=YP-BY*RY*SIN(ALPHA-GZAIHT(I)-ANG) X2=XBDHT(I)-BX*H*SIN(ALPHA-GZAIHT(I)) Y2=YBDHT(I)+BY*H*COS(ALPHA-GZAIHT(I)) X3=XBDHT(I)+BX*H*SIN(ALPHA-GZAIHT(I)) Y3=YBDHT(I)-BY*H*COS(ALPHA-GZAIHT(I)) X4=XP-BX*RY*COS(ALPHA-GZAIHT(I)+ANG) Y4=YP-BY*RY*SIN(ALPHA-GZAIHT(I)+ANG) IF (JCOLR.EQ.1) THEN LAYER=5 ELSE LAYER=1 ENDIF CALL QUAD(X1,Y1,X2,Y2,X3,Y3,X4,Y4,LAYER,FTYP) C C *** Straight Part *** C XS=XBDHT(I) YS=YBDHT(I) XE=XDDHT(I) YE=YDDHT(I) WIDTH=DIH LTYPE=0 LAYER=1 CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C C *** Bend *** C XCNTR=XOIHT(I) YCNTR=YOIHT(I) RR=RMIN-OFST ANGS=1.5*PI+ALPHA-GZAIHT(I) ANGE=1.5*PI WIDTH=DIH LAYER=1 CALL BEND(XCNTR,YCNTR,RR,ANGS,ANGE,WIDTH,LAYER,FTYP) C C *** Straight Part *** C XS=XEDHT(I) YS=YEDHT(I) XE=XFDHT(I) YE=YFDHT(I) WIDTH=DIH LTYPE=0 LAYER=1 CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C C *** Bend *** C XCNTR=XOJHT(I) YCNTR=YOJHT(I) RR=RMIN-OFST ANGS=1.5*PI ANGE=PI WIDTH=DIH LAYER=1 CALL BEND(XCNTR,YCNTR,RR,ANGS,ANGE,WIDTH,LAYER,FTYP) C C *** Straight Part *** C XS=XGDHT(I) YS=YGDHT(I) XE=XHDHT(I) YE=YHDHT(I) WIDTH=DIH LTYPE=0 LAYER=1 CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C C *** Bend *** C XCNTR=XOKHT(I) YCNTR=YOKHT(I) RR=RMIN-OFST ANGS=0.0 ANGE=PI/2.0 WIDTH=DIH LAYER=1 CALL BEND(XCNTR,YCNTR,RR,ANGS,ANGE,WIDTH,LAYER,FTYP) C C *** Straight Part *** C XS=XIDHT(I) YS=YIDHT(I) XE=XJDHT(I) YE=YJDHT(I) WIDTH=DIH LTYPE=0 LAYER=1 CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C 8000 CONTINUE C C === Normal Output Waveguides === C DO 8200 I=LINIT,LLAST C C *** Tapered Quadrangle *** C ANG=ASIN(WSLP/2.0/RY) X1=XP-BX*RY*COS(ALPHA-GZAI(I)-ANG) Y1=YP-BY*RY*SIN(ALPHA-GZAI(I)-ANG) X2=XBD(I)-BX*H*SIN(ALPHA-GZAI(I)) Y2=YBD(I)+BY*H*COS(ALPHA-GZAI(I)) X3=XBD(I)+BX*H*SIN(ALPHA-GZAI(I)) Y3=YBD(I)-BY*H*COS(ALPHA-GZAI(I)) X4=XP-BX*RY*COS(ALPHA-GZAI(I)+ANG) Y4=YP-BY*RY*SIN(ALPHA-GZAI(I)+ANG) IF (JCOLR.EQ.1) THEN LAYER=5 ELSE LAYER=1 ENDIF X1=2.0*XAWG-X1 X2=2.0*XAWG-X2 X3=2.0*XAWG-X3 X4=2.0*XAWG-X4 CALL QUAD(X1,Y1,X2,Y2,X3,Y3,X4,Y4,LAYER,FTYP) C C *** Straight Part *** C XS=XBD(I) YS=YBD(I) XE=XDD(I) YE=YDD(I) WIDTH=DIH LTYPE=0 LAYER=1 XS=2.0*XAWG-XS XE=2.0*XAWG-XE CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C C *** Bend *** C XCNTR=XOI(I) YCNTR=YOI(I) RR=RMIN-OFST ANGS=1.5*PI+ALPHA-GZAI(I) ANGE=1.5*PI WIDTH=DIH LAYER=1 XCNTR=2.0*XAWG-XCNTR ANGS=PI-ANGS ANGE=PI-ANGE CALL BEND(XCNTR,YCNTR,RR,ANGS,ANGE,WIDTH,LAYER,FTYP) C C *** Straight Part *** C XS=XED(I) YS=YED(I) XE=XFD(I) YE=YFD(I) WIDTH=DIH LTYPE=0 LAYER=1 XS=2.0*XAWG-XS XE=2.0*XAWG-XE CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C C *** Bend *** C XCNTR=XOJ(I) YCNTR=YOJ(I) RR=RMIN-OFST ANGS=1.5*PI ANGE=PI WIDTH=DIH LAYER=1 XCNTR=2.0*XAWG-XCNTR ANGS=PI-ANGS ANGE=PI-ANGE CALL BEND(XCNTR,YCNTR,RR,ANGS,ANGE,WIDTH,LAYER,FTYP) C C *** Straight Part *** C XS=XGD(I) YS=YGD(I) XE=XHD(I) YE=YHD(I) WIDTH=DIH LTYPE=0 LAYER=1 XS=2.0*XAWG-XS XE=2.0*XAWG-XE CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C C *** Bend *** C XCNTR=XOK(I) YCNTR=YOK(I) RR=RMIN-OFST ANGS=0.0 ANGE=PI/2.0 WIDTH=DIH LAYER=1 XCNTR=2.0*XAWG-XCNTR ANGS=PI-ANGS ANGE=PI-ANGE CALL BEND(XCNTR,YCNTR,RR,ANGS,ANGE,WIDTH,LAYER,FTYP) C C *** Straight Part *** C XS=XID(I) YS=YID(I) XE=XJD(I) YE=YJD(I) WIDTH=DIH LTYPE=0 LAYER=1 XS=2.0*XAWG-XS XE=2.0*XAWG-XE CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C 8200 CONTINUE C C =========== Straight Reference Waveguide ============ C C *** Straight Part *** C XS=XSREF(NREF,1) YS=YSREF(NREF,1) XE=XSREF(NREF,2) YE=YSREF(NREF,2) WIDTH=DIH LTYPE=0 LAYER=1 CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C RETURN END C C ************************ PATH ************************ C * * C * Straight Line * C * * C ****************************************************** SUBROUTINE PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) IMPLICIT INTEGER(I-N),REAL(A-H,O-Z) CHARACTER*3 FTYP C C Xs, Ys ... Start Point (um) C Xe, Ye ... End Point (um) C Width ... Mask Width (um) C Ltype ... Line Type C Layer ... Output Layer C PLNGTH=SQRT((XE-XS)*(XE-XS)+(YE-YS)*(YE-YS)) C IF (PLNGTH.LT.1.0E-10) GO TO 9000 C UNIT=0.05 XS=XS-UNIT*(XE-XS)/PLNGTH YS=YS-UNIT*(YE-YS)/PLNGTH XE=XE+UNIT*(XE-XS)/PLNGTH YE=YE+UNIT*(YE-YS)/PLNGTH C WRITE(2,2020) 'POLYLINE',LAYER WRITE(2,2030) 1 WRITE(2,2050) 0.0,0.0,0.0 WRITE(2,2040) WIDTH,WIDTH WRITE(2,2020) 'VERTEX',LAYER WRITE(2,2050) XS,YS,0.0 WRITE(2,2020) 'VERTEX',LAYER WRITE(2,2050) XE,YE,0.0 WRITE(2,2020) 'SEQEND',LAYER C 2000 FORMAT(' 0'/A) 2010 FORMAT(' 2'/A) 2020 FORMAT(' 0'/A/' 8'/I1) 2030 FORMAT(' 66'/I1) 2040 FORMAT(' 40'/F12.4/' 41'/F12.4) 2050 FORMAT(' 10'/F12.4/' 20'/F12.4/' 30'/F12.4) 2060 FORMAT(' 42'/F12.6) C 9000 RETURN END C C ************************ BEND ************************ C * * C * Continuous Paths with Bend * C * * C ****************************************************** SUBROUTINE BEND(XC,YC,RARC,ANGS,ANGE,WIDTH,LAYER,FTYP) IMPLICIT INTEGER(I-N),REAL(A-H,O-Z) CHARACTER*3 FTYP C COMMON /NSCR/NSCR,NDUMY,JDATA,JCOLR COMMON /PI/PI,WFRME,BX,BY C IF (ANGE.EQ.ANGS) GO TO 9000 C C Xc, Yc ... Arc Center (um) C RARC ... Radius of Arc (um) C Angs ... Angle of Start Point (radian) C Ange ... Angle of End Point (radian) C Width ... Mask Width (um) C Ltype ... Line Type C Layer ... Output Layer C UNITANG=0.05/RARC C IF(ANGS-ANGE) 700,9000,800 C 700 ANGS=ANGS-UNITANG ANGE=ANGE+UNITANG XSTRT=XC+RARC*COS(ANGS) YSTRT=YC+RARC*SIN(ANGS) XEND=XC+RARC*COS(ANGE) YEND=YC+RARC*SIN(ANGE) SWELL=TAN((ANGE-ANGS)/4.0) GO TO 900 C 800 ANGS=ANGS+UNITANG ANGE=ANGE-UNITANG XSTRT=XC+RARC*COS(ANGE) YSTRT=YC+RARC*SIN(ANGE) XEND=XC+RARC*COS(ANGS) YEND=YC+RARC*SIN(ANGS) SWELL=TAN((ANGS-ANGE)/4.0) C 900 WRITE(2,2000) 'POLYLINE',LAYER WRITE(2,2010) 1 WRITE(2,2030) 0.0,0.0,0.0 WRITE(2,2020) WIDTH,WIDTH WRITE(2,2000) 'VERTEX',LAYER WRITE(2,2030) XSTRT,YSTRT,0.0 WRITE(2,2040) SWELL WRITE(2,2000) 'VERTEX',LAYER WRITE(2,2030) XEND,YEND,0.0 WRITE(2,2040) SWELL WRITE(2,2000) 'SEQEND',LAYER C 2000 FORMAT(' 0'/A/' 8'/I1) 2010 FORMAT(' 66'/I1) 2020 FORMAT(' 40'/F12.4/' 41'/F12.4) 2030 FORMAT(' 10'/F12.4/' 20'/F12.4/' 30'/F12.4) 2040 FORMAT(' 42'/F16.10) C 9000 RETURN END C C ************************ QUAD ************************ C * * C * Quadrangle * C * * C ****************************************************** SUBROUTINE QUAD(X1,Y1,X2,Y2,X3,Y3,X4,Y4,LAYER,FTYP) IMPLICIT INTEGER(I-N),REAL(A-H,O-Z) CHARACTER*3 FTYP C C Xi, Yi ... Points of Quadrangle (um) C Layer ... Output Layer C WRITE(2,2000) 'SOLID',LAYER WRITE(2,2010) X1,Y1,0.0 WRITE(2,2020) X2,Y2,0.0 WRITE(2,2030) X4,Y4,0.0 WRITE(2,2040) X3,Y3,0.0 C 2000 FORMAT(' 0'/A/' 8'/I1) 2010 FORMAT(' 10'/F12.4/' 20'/F12.4/' 30'/F12.4) 2020 FORMAT(' 11'/F12.4/' 21'/F12.4/' 31'/F12.4) 2030 FORMAT(' 12'/F12.4/' 22'/F12.4/' 32'/F12.4) 2040 FORMAT(' 13'/F12.4/' 23'/F12.4/' 33'/F12.4) C RETURN END C C ************************ POLY ************************ C * * C * Polygon for Slab Region * C * * C ****************************************************** SUBROUTINE POLY(XC1,YC1,AGS1,AGE1,XC2,YC2,AGS2,AGE2,RR,LAYER,FTYP) IMPLICIT INTEGER(I-N),REAL(A-H,O-Z) CHARACTER*3 FTYP C C Xc1, Yc1 ... First Arc Center (um) C Ags1 ... Start Angle of First Arc (radian) C Age1 ... End Angle of First Arc (radian) C Xc2, Yc2 ... Second Arc Center (um) C Ags2 ... Start Angle of Second Arc (radian) C Age2 ... End Angle of Second Arc (radian) C RR ... Radius of Arc (um) C Layer ... Output Layer C PI=3.141592653589793 C WIDTH=RR/2.0 C C *** First Fanshape *** C XSTRT1=XC1+(0.75*RR)*COS(AGS1) YSTRT1=YC1+(0.75*RR)*SIN(AGS1) XEND1=XC1+(0.75*RR)*COS(AGE1) YEND1=YC1+(0.75*RR)*SIN(AGE1) SWELL1=TAN((AGE1-AGS1)/4.0) C WRITE(2,2000) 'POLYLINE',LAYER WRITE(2,2010) 1 WRITE(2,2030) 0.0,0.0,0.0 WRITE(2,2020) WIDTH,WIDTH WRITE(2,2000) 'VERTEX',LAYER WRITE(2,2030) XSTRT1,YSTRT1,0.0 WRITE(2,2040) SWELL1 WRITE(2,2000) 'VERTEX',LAYER WRITE(2,2030) XEND1,YEND1,0.0 WRITE(2,2040) SWELL1 WRITE(2,2000) 'SEQEND',LAYER C C *** Second Fanshape *** C XSTRT2=XC2+(0.75*RR)*COS(AGS2) YSTRT2=YC2+(0.75*RR)*SIN(AGS2) XEND2=XC2+(0.75*RR)*COS(AGE2) YEND2=YC2+(0.75*RR)*SIN(AGE2) SWELL2=TAN((AGE2-AGS2)/4.0) C WRITE(2,2000) 'POLYLINE',LAYER WRITE(2,2010) 1 WRITE(2,2030) 0.0,0.0,0.0 WRITE(2,2020) WIDTH,WIDTH WRITE(2,2000) 'VERTEX',LAYER WRITE(2,2030) XSTRT2,YSTRT2,0.0 WRITE(2,2040) SWELL2 WRITE(2,2000) 'VERTEX',LAYER WRITE(2,2030) XEND2,YEND2,0.0 WRITE(2,2040) SWELL2 WRITE(2,2000) 'SEQEND',LAYER C C *** Quadrangle *** C X1=XC1+RR*COS(AGS1) Y1=YC1+RR*SIN(AGS1) X2=XC1+RR*COS(AGE1) Y2=YC1+RR*SIN(AGE1) X3=XC2+RR*COS(AGS2) Y3=YC2+RR*SIN(AGS2) X4=XC2+RR*COS(AGE2) Y4=YC2+RR*SIN(AGE2) C WRITE(2,2000) 'SOLID',LAYER WRITE(2,2060) X1,Y1,0.0 WRITE(2,2070) X2,Y2,0.0 WRITE(2,2080) X4,Y4,0.0 WRITE(2,2090) X3,Y3,0.0 C 2000 FORMAT(' 0'/A/' 8'/I1) 2010 FORMAT(' 66'/I1) 2020 FORMAT(' 40'/F12.4/' 41'/F12.4) 2030 FORMAT(' 10'/F12.4/' 20'/F12.4/' 30'/F12.4) 2040 FORMAT(' 42'/F12.6) 2060 FORMAT(' 10'/F12.4/' 20'/F12.4/' 30'/F12.4) 2070 FORMAT(' 11'/F12.4/' 21'/F12.4/' 31'/F12.4) 2080 FORMAT(' 12'/F12.4/' 22'/F12.4/' 32'/F12.4) 2090 FORMAT(' 13'/F12.4/' 23'/F12.4/' 33'/F12.4) C RETURN END C C ********************** OPENFILE ********************** C * * C * Open Data File * C * * C ****************************************************** SUBROUTINE OPENFILE(FNAME,FTYP) IMPLICIT INTEGER(I-N),REAL(A-H,O-Z) CHARACTER FTYP*3,FNAME*15 COMMON /NSCR/NSCR,NDUMY,JDATA,JCOLR C LNAME=INDEX(FNAME,' ') IF (LNAME.EQ.0) THEN OPEN (2,FILE=FNAME//'.'//FTYP) ELSE OPEN (2,FILE=FNAME(1:LNAME-1)//'.'//FTYP) ENDIF C IF (JDATA.EQ.1) GO TO 9000 C WRITE(2,2000) 'SECTION' WRITE(2,2010) 'HEADER' WRITE(2,2020) '$ACADVER' WRITE(2,2005) 'AC1009' WRITE(2,2000) 'ENDSEC' C WRITE(2,2000) 'SECTION' WRITE(2,2010) 'BLOCKS' C 2000 FORMAT(' 0'/A) 2005 FORMAT(' 1'/A) 2010 FORMAT(' 2'/A) 2020 FORMAT(' 9'/A) C 9000 RETURN END C C *********************** CLOSEFILE ******************** C * * C * Close Data File * C * * C ****************************************************** SUBROUTINE CLOSEFILE IMPLICIT INTEGER(I-N),REAL(A-H,O-Z) COMMON /NSCR/NSCR,NDUMY,JDATA,JCOLR C IF (JDATA.EQ.1) GO TO 1000 C WRITE(2,2000) 'ENDSEC' WRITE(2,2000) 'SECTION' WRITE(2,2010) 'ENTITIES' WRITE(2,2020) 'INSERT',0 WRITE(2,2010) 'MAIN_CELL' WRITE(2,2050) 0.0,0.0,0.0 WRITE(2,2070) 1.0,1.0,1.0 WRITE(2,2000) 'ENDSEC' WRITE(2,2000) 'EOF' 1000 CLOSE(2) C 2000 FORMAT(' 0'/A) 2010 FORMAT(' 2'/A) 2020 FORMAT(' 0'/A/' 8'/I1) 2040 FORMAT(' 40'/F12.4/' 41'/F12.4) 2050 FORMAT(' 10'/F12.4/' 20'/F12.4/' 30'/F12.4) 2060 FORMAT(' 42'/F12.4) 2070 FORMAT(' 41'/F12.4/' 42'/F12.4/' 43'/F12.4) 2080 FORMAT(' 50'/F12.4) C RETURN END C C ********************** STRTCELL ********************** C * * C * Start Cell Data * C * * C ****************************************************** SUBROUTINE STRTCELL(CELLNAME) IMPLICIT INTEGER(I-N),REAL(A-H,O-Z) CHARACTER CELLNAME*15 C IF (JDATA.EQ.1) GO TO 9000 C LNAME=INDEX(CELLNAME,' ') WRITE(2,2000) 'BLOCK',0 WRITE(2,2010) CELLNAME(1:LNAME-1) WRITE(2,2020) 0.0,0.0,0.0 C 2000 FORMAT(' 0'/A/' 8'/I1) 2010 FORMAT(' 2'/A/' 70'/' 64') 2020 FORMAT(' 10'/F12.4/' 20'/F12.4/' 30'/F12.4) C 9000 RETURN END C C *********************** ENDCELL ********************** C * * C * End Cell Data * C * * C ****************************************************** SUBROUTINE ENDCELL IMPLICIT INTEGER(I-N),REAL(A-H,O-Z) COMMON /NSCR/NSCR,NDUMY,JDATA,JCOLR C IF (JDATA.EQ.1) GO TO 9000 C WRITE(2,2000) 'ENDBLK',0 C 2000 FORMAT(' 0'/A/' 8'/I1) C 9000 RETURN END C C ************************ SREF ************************ C * * C * Set Cell * C * * C ****************************************************** SUBROUTINE SREF(ANGLE,CELLNAME,X,Y,NROT,AMAG) IMPLICIT INTEGER(I-N),REAL(A-H,O-Z) CHARACTER CELLNAME*15 C AROT=ANGLE AMAGX=AMAG AMAGY=AMAG IROT=NROT+1 GO TO (10,11,12,13,14,15,16,17),IROT 10 GO TO 100 11 AROT=-90.0 GO TO 100 12 AMAGX=-AMAGX AMAGY=-AMAGY GO TO 100 13 AROT=90.0 GO TO 100 14 AMAGX=-AMAGX GO TO 100 15 AMAGX=-AMAGX AROT=-90.0 GO TO 100 16 AMAGY=-AMAGY GO TO 100 17 AMAGY=-AMAGY AROT=-90.0 100 LNAME=INDEX(CELLNAME,' ') WRITE(2,2010) 'INSERT',0 WRITE(2,2000) CELLNAME(1:LNAME-1) WRITE(2,2040) X,Y,0.0 WRITE(2,2050) AMAGX,AMAGY,1.0 WRITE(2,2060) AROT C 2000 FORMAT(' 2'/A) 2010 FORMAT(' 0'/A/' 8'/I1) 2030 FORMAT(' 40'/F12.4/' 41'/F12.4) 2040 FORMAT(' 10'/F12.4/' 20'/F12.4/' 30'/F12.4) 2050 FORMAT(' 41'/F12.4/' 42'/F12.4/' 43'/F12.4) 2060 FORMAT(' 50'/F12.4) C RETURN END C C ************************ FRAME *********************** C * * C * Frame Print Subroutine * C * * C ****************************************************** SUBROUTINE FRAME(FTYP) IMPLICIT INTEGER(I-N),REAL(A-H,O-Z) CHARACTER*3 FTYP C COMMON /NSCR/NSCR,NDUMY,JDATA,JCOLR COMMON /PI/PI,WFRME,BX,BY COMMON /WG/DIH,SLIT,CUT,XAWG,YAWG,XP,YP,XQ,YQ,SFBR,XDEV,YDEV C DIMENSION X(24),Y(24) C WFRME=10.0 LTYPE=0 LAYER=1 C X(1)=-XDEV/2.0-WFRME Y(1)=-YDEV/2.0-WFRME/2.0 X(2)= XDEV/2.0+WFRME Y(2)= Y(1) C X(3)= XDEV/2.0+WFRME/2.0 Y(3)=-YDEV/2.0-WFRME X(4)= X(3) Y(4)= YDEV/2.0+WFRME C X(5)= XDEV/2.0+WFRME Y(5)= YDEV/2.0+WFRME/2.0 X(6)=-XDEV/2.0-WFRME Y(6)= Y(5) C X(7)=-XDEV/2.0-WFRME/2.0 Y(7)= YDEV/2.0+WFRME X(8)= X(7) Y(8)=-YDEV/2.0-WFRME C DO 50 I=1,7,2 XS=X(I) YS=Y(I) XE=X(I+1) YE=Y(I+1) CALL PATH(XS,YS,XE,YE,WFRME,LTYPE,LAYER,FTYP) 50 CONTINUE C RETURN END C C ************************ MARKER ********************** C * * C * Marker for Allignment & Etching Depth * C * * C ****************************************************** SUBROUTINE MARKER(FTYP) IMPLICIT INTEGER(I-N),REAL(A-H,O-Z) CHARACTER*3 FTYP C COMMON /PI/PI,WFRME,BX,BY COMMON /WG/DIH,SLIT,CUT,XAWG,YAWG,XP,YP,XQ,YQ,SFBR,XDEV,YDEV C C === Etching Depth Mark <> === C LTYPE=0 LAYER=1 WIDTH1=10.0 WIDTH2=DIH XETCH=XDEV/2.0+30.0 YETCH=YDEV/4.0+15.0 C DO 200 I=-1,1 IF (I.EQ.0) GO TO 200 DO 100 J=-2,2 C X=XETCH*FLOAT(I) Y=YETCH*FLOAT(J) X1=X-10.0 Y1=Y X2=X+10.0 Y2=Y CALL PATH(X1,Y1,X2,Y2,WIDTH1,LTYPE,LAYER,FTYP) Y1=Y-15.0 Y2=Y1 CALL PATH(X1,Y1,X2,Y2,WIDTH2,LTYPE,LAYER,FTYP) 100 CONTINUE 200 CONTINUE C RETURN END C C ************************ CNPAWG ********************** C * * C * Cell Name Print Subroutine * C * * C ****************************************************** SUBROUTINE CNPAWG(FTYP) IMPLICIT INTEGER(I-N),REAL(A-H,O-Z) CHARACTER FTYP*3,TXTCHR*72 C COMMON /NSCR/NSCR,NDUMY,JDATA,JCOLR COMMON /PI/PI,WFRME,BX,BY COMMON /WG/DIH,SLIT,CUT,XAWG,YAWG,XP,YP,XQ,YQ,SFBR,XDEV,YDEV C C === Chip Name === C XCNP= -260.0 YCNP=-2100.0 HIGHT= 50.0 LAYER=1 TXTCHR='40ch-100GHz' CALL TEXT(TXTCHR,XCNP,YCNP,HIGHT,LAYER) C C === Etching Depth Mark <> === C LTYPE=0 LAYER=1 WIDTH1=10.0 WIDTH2=DIH C C <> C XETCH= -948.0 YETCH=-1040.1 XS=XETCH-10.0 YS=YETCH XE=XETCH+10.0 YE=YS CALL PATH(XS,YS,XE,YE,WIDTH1,LTYPE,LAYER,FTYP) YS=YETCH-15.0 YE=YS CALL PATH(XS,YS,XE,YE,WIDTH2,LTYPE,LAYER,FTYP) C XETCH= 948.0 YETCH=-1040.1 XS=XETCH-10.0 YS=YETCH XE=XETCH+10.0 YE=YS CALL PATH(XS,YS,XE,YE,WIDTH1,LTYPE,LAYER,FTYP) YS=YETCH-15.0 YE=YS CALL PATH(XS,YS,XE,YE,WIDTH2,LTYPE,LAYER,FTYP) C XETCH= -948.0 YETCH=-1455.6 XS=XETCH-10.0 YS=YETCH XE=XETCH+10.0 YE=YS CALL PATH(XS,YS,XE,YE,WIDTH1,LTYPE,LAYER,FTYP) YS=YETCH-15.0 YE=YS CALL PATH(XS,YS,XE,YE,WIDTH2,LTYPE,LAYER,FTYP) C XETCH= 948.0 YETCH=-1455.6 XS=XETCH-10.0 YS=YETCH XE=XETCH+10.0 YE=YS CALL PATH(XS,YS,XE,YE,WIDTH1,LTYPE,LAYER,FTYP) YS=YETCH-15.0 YE=YS CALL PATH(XS,YS,XE,YE,WIDTH2,LTYPE,LAYER,FTYP) C RETURN END C C ************************ TEXT ************************ C * * C * Set Text * C * * C ****************************************************** SUBROUTINE TEXT(TXTCHR,X,Y,HCHR,LAYER) IMPLICIT INTEGER(I-N),REAL(A-H,O-Z) CHARACTER TXTCHR*72 C IX=1.0E3*X IY=1.0E3*Y C WRITE(2,2010) 'TEXT',LAYER WRITE(2,2030) X,Y,0.0 WRITE(2,2020) HCHR WRITE(2,2000) TXTCHR 2000 FORMAT(' 1'/A) 2010 FORMAT(' 0'/A/' 8'/I1) 2020 FORMAT(' 40'/F12.4) 2030 FORMAT(' 10'/F12.4/' 20'/F12.4/' 30'/F12.4) C RETURN END C C ************************ RCSB ************************ C * * C * Test Radius of Curvature by S-Bends * C * * C ****************************************************** SUBROUTINE RCSB(FTYP) IMPLICIT INTEGER(I-N),REAL(A-H,O-Z) CHARACTER*3 FTYP C COMMON /NSCR/NSCR,NDUMY,JDATA,JCOLR COMMON /PI/PI,WFRME,BX,BY COMMON /WG/DIH,SLIT,CUT,XAWG,YAWG,XP,YP,XQ,YQ,SFBR,XDEV,YDEV C DIMENSION RB(50),OF(50),THB(50),YBND(50),YUNIT(50) DIMENSION XDC(50),XU(50,40),XOU(50,20),XFR(24) DIMENSION YDC(50),YU(50,40),YOU(50,20),YFR(24) C PI=3.141592653589793 C C ============== General Waveguide Data ============== C SLIT=0.15 CUT=0.0 C DIA=1.0 A=DIA/2.0 DIH=DIA+2.0*CUT THK=0.5 T=THK/2.0 DELRN=9.7 DELTA=DELRN*0.01 WL=1.55 C RMIN=100.0 OFST=0.03 OFSTMZ=0.03 C RNE=3.272402 RNC=3.200292 DNC=3.779576 C C =============== S-Bend Waveguide Data =============== C GAP=0.2 SDC=21.2 SB=SDC/2.0-(GAP/2.0+A) Y3DB=50.0 YIOWG=50.0 C IF (JDATA.EQ.1) THEN WRITE(2,1) 1 FORMAT(1H ) WRITE(2,10) RNE 10 FORMAT(' e =',F11.8) WRITE(2,12) RNC 12 FORMAT(' c =',F11.8) WRITE(2,14) DNC 14 FORMAT(' mc =',F11.8) WRITE(2,16) Y3DB 16 FORMAT(' x3dB =',F11.4,' (ʂ)') ENDIF C C mrc ... Number of Test Radius of Curvature C Stprc ... rtep of Radius of Curvature C xstep ... -axis rtep of S-Bends C vchip ... Chip Width C gchip ... Chip Height C NRC=21 STPRC=10.0 YSTEP=20.0 WCHIP=XDEV HCHIP=FLOAT(NRC+3)*YSTEP C DO 1000 I=1,NRC RB(I)=120.0+FLOAT(I-(NRC+1)/2)*STPRC OF(I)=OFSTMZ*RMIN/RB(I) C THB(I)=ACOS(1.0-SB/2.0/RB(I)) YBND(I)=2.0*RB(I)*SIN(THB(I)) YUNIT(I)=YIOWG+YBND(I)+Y3DB+YBND(I)+YIOWG C XDC(I)=X0 YDC(I)=(Y0-BY*YDEV/2.0-BY*100.0)-BY*FLOAT(I-1)*YSTEP C C Upper S_Bend-1 C XU(I,3)=XDC(I)-BX*YUNIT(I)-BX*Y3DB/2.0 YU(I,3)=YDC(I)+BY*(GAP/2.0+A) XOU(I,2)=XU(I,3) YOU(I,2)=YU(I,3)+BY*RB(I) XOU(I,1)=XOU(I,2)-BX*2.0*RB(I)*SIN(THB(I)) YOU(I,1)=YOU(I,2)-BY*2.0*RB(I)*COS(THB(I)) XU(I,2)=XOU(I,1) YU(I,2)=YOU(I,1)+BY*RB(I) XU(I,1)=XDC(I)-BX*WCHIP/2.0 YU(I,1)=YU(I,2) C XU(I,4)=XDC(I)-BX*YUNIT(I)+BX*Y3DB/2.0 YU(I,4)=YDC(I)+BY*(GAP/2.0+A) XOU(I,3)=XU(I,4) YOU(I,3)=YU(I,4)+BY*RB(I) XOU(I,4)=XOU(I,3)+BX*2.0*RB(I)*SIN(THB(I)) YOU(I,4)=YOU(I,3)-BY*2.0*RB(I)*COS(THB(I)) XU(I,5)=XOU(I,4) YU(I,5)=YOU(I,4)+BY*RB(I) XU(I,6)=XU(I,5)+BX*YIOWG YU(I,6)=YU(I,5) C C Upper S_Bend-2 C XU(I,8)=XDC(I)-BX*Y3DB/2.0 YU(I,8)=YDC(I)+BY*(GAP/2.0+A) XOU(I,6)=XU(I,8) YOU(I,6)=YU(I,8)+BY*RB(I) XOU(I,5)=XOU(I,6)-BX*2.0*RB(I)*SIN(THB(I)) YOU(I,5)=YOU(I,6)-BY*2.0*RB(I)*COS(THB(I)) XU(I,7)=XOU(I,5) YU(I,7)=YOU(I,5)+BY*RB(I) C XU(I,9)=XDC(I)+BX*Y3DB/2.0 YU(I,9)=YDC(I)+BY*(GAP/2.0+A) XOU(I,7)=XU(I,9) YOU(I,7)=YU(I,9)+BY*RB(I) XOU(I,8)=XOU(I,7)+BX*2.0*RB(I)*SIN(THB(I)) YOU(I,8)=YOU(I,7)-BY*2.0*RB(I)*COS(THB(I)) XU(I,10)=XOU(I,8) YU(I,10)=YOU(I,8)+BY*RB(I) XU(I,11)=XU(I,10)+BX*YIOWG YU(I,11)=YU(I,10) C C Upper S_Bend-3 C XU(I,13)=XDC(I)+BX*YUNIT(I)-BX*Y3DB/2.0 YU(I,13)=YDC(I)+BY*(GAP/2.0+A) XOU(I,10)=XU(I,13) YOU(I,10)=YU(I,13)+BY*RB(I) XOU(I,9)=XOU(I,10)-BX*2.0*RB(I)*SIN(THB(I)) YOU(I,9)=YOU(I,10)-BY*2.0*RB(I)*COS(THB(I)) XU(I,12)=XOU(I,9) YU(I,12)=YOU(I,9)+BY*RB(I) C XU(I,14)=XDC(I)+BX*YUNIT(I)+BX*Y3DB/2.0 YU(I,14)=YDC(I)+BY*(GAP/2.0+A) XOU(I,11)=XU(I,14) YOU(I,11)=YU(I,14)+BY*RB(I) XOU(I,12)=XOU(I,11)+BX*2.0*RB(I)*SIN(THB(I)) YOU(I,12)=YOU(I,11)-BY*2.0*RB(I)*COS(THB(I)) XU(I,15)=XOU(I,12) YU(I,15)=YOU(I,12)+BY*RB(I) XU(I,16)=XDC(I)+BX*WCHIP/2.0 YU(I,16)=YU(I,15) C 1000 CONTINUE C C ============== Mask Pattern Generation ============== C IF (JDATA.EQ.1) GO TO 9000 C C << Straight Reference Waveguide >> C C *** Straight Part *** C XS=XU(1,1) YS=YU(1,1)+BY*YSTEP XE=XU(1,16) YE=YS WIDTH=DIH LTYPE=0 LAYER=1 CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C DO 2000 I=1,NRC C C << Upper S_Bend-1 >> C C *** Straight Part *** C XS=XU(I,1) YS=YU(I,1) XE=XU(I,2) YE=YU(I,2) WIDTH=DIH LTYPE=0 LAYER=1 CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C C *** Bend *** C XCNTR=XOU(I,1) YCNTR=YOU(I,1) RARC=RB(I)-OF(I) ANGS=PI/2.0 ANGE=PI/2.0-THB(I) WIDTH=DIH LAYER=1 CALL BEND(XCNTR,YCNTR,RARC,ANGS,ANGE,WIDTH,LAYER,FTYP) C C *** Bend *** C XCNTR=XOU(I,2) YCNTR=YOU(I,2) RARC=RB(I)-OF(I) ANGS=1.5*PI-THB(I) ANGE=1.5*PI WIDTH=DIH LAYER=1 CALL BEND(XCNTR,YCNTR,RARC,ANGS,ANGE,WIDTH,LAYER,FTYP) C C *** Straight Part *** C XS=XU(I,3) YS=YU(I,3) XE=XU(I,4) YE=YU(I,4) WIDTH=DIH LTYPE=0 IF (JCOLR.EQ.1) THEN LAYER=2 ELSE LAYER=1 ENDIF CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C C *** Bend *** C XCNTR=XOU(I,3) YCNTR=YOU(I,3) RARC=RB(I)-OF(I) ANGS=1.5*PI ANGE=1.5*PI+THB(I) WIDTH=DIH LAYER=1 CALL BEND(XCNTR,YCNTR,RARC,ANGS,ANGE,WIDTH,LAYER,FTYP) C C *** Bend *** C XCNTR=XOU(I,4) YCNTR=YOU(I,4) RARC=RB(I)-OF(I) ANGS=PI/2.0+THB(I) ANGE=PI/2.0 WIDTH=DIH LAYER=1 CALL BEND(XCNTR,YCNTR,RARC,ANGS,ANGE,WIDTH,LAYER,FTYP) C C *** Straight Part *** C XS=XU(I,5) YS=YU(I,5) XE=XU(I,6) YE=YU(I,6) WIDTH=DIH LTYPE=0 LAYER=1 CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C C << Upper S_Bend-2 >> C C *** Straight Part *** C XS=XU(I,6) YS=YU(I,6) XE=XU(I,7) YE=YU(I,7) WIDTH=DIH LTYPE=0 LAYER=1 CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C C *** Bend *** C XCNTR=XOU(I,5) YCNTR=YOU(I,5) RARC=RB(I)-OF(I) ANGS=PI/2.0 ANGE=PI/2.0-THB(I) WIDTH=DIH LAYER=1 CALL BEND(XCNTR,YCNTR,RARC,ANGS,ANGE,WIDTH,LAYER,FTYP) C C *** Bend *** C XCNTR=XOU(I,6) YCNTR=YOU(I,6) RARC=RB(I)-OF(I) ANGS=1.5*PI-THB(I) ANGE=1.5*PI WIDTH=DIH LAYER=1 CALL BEND(XCNTR,YCNTR,RARC,ANGS,ANGE,WIDTH,LAYER,FTYP) C C *** Straight Part *** C XS=XU(I,8) YS=YU(I,8) XE=XU(I,9) YE=YU(I,9) WIDTH=DIH LTYPE=0 IF (JCOLR.EQ.1) THEN LAYER=2 ELSE LAYER=1 ENDIF CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C C *** Bend *** C XCNTR=XOU(I,7) YCNTR=YOU(I,7) RARC=RB(I)-OF(I) ANGS=1.5*PI ANGE=1.5*PI+THB(I) WIDTH=DIH LAYER=1 CALL BEND(XCNTR,YCNTR,RARC,ANGS,ANGE,WIDTH,LAYER,FTYP) C C *** Bend *** C XCNTR=XOU(I,8) YCNTR=YOU(I,8) RARC=RB(I)-OF(I) ANGS=PI/2.0+THB(I) ANGE=PI/2.0 WIDTH=DIH LAYER=1 CALL BEND(XCNTR,YCNTR,RARC,ANGS,ANGE,WIDTH,LAYER,FTYP) C C *** Straight Part *** C XS=XU(I,10) YS=YU(I,10) XE=XU(I,11) YE=YU(I,11) WIDTH=DIH LTYPE=0 LAYER=1 CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C C << Upper S_Bend-3 >> C C *** Straight Part *** C XS=XU(I,11) YS=YU(I,11) XE=XU(I,12) YE=YU(I,12) WIDTH=DIH LTYPE=0 LAYER=1 CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C C *** Bend *** C XCNTR=XOU(I,9) YCNTR=YOU(I,9) RARC=RB(I)-OF(I) ANGS=PI/2.0 ANGE=PI/2.0-THB(I) WIDTH=DIH LAYER=1 CALL BEND(XCNTR,YCNTR,RARC,ANGS,ANGE,WIDTH,LAYER,FTYP) C C *** Bend *** C XCNTR=XOU(I,10) YCNTR=YOU(I,10) RARC=RB(I)-OF(I) ANGS=1.5*PI-THB(I) ANGE=1.5*PI WIDTH=DIH LAYER=1 CALL BEND(XCNTR,YCNTR,RARC,ANGS,ANGE,WIDTH,LAYER,FTYP) C C *** Straight Part *** C XS=XU(I,13) YS=YU(I,13) XE=XU(I,14) YE=YU(I,14) WIDTH=DIH LTYPE=0 IF (JCOLR.EQ.1) THEN LAYER=2 ELSE LAYER=1 ENDIF CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C C *** Bend *** C XCNTR=XOU(I,11) YCNTR=YOU(I,11) RARC=RB(I)-OF(I) ANGS=1.5*PI ANGE=1.5*PI+THB(I) WIDTH=DIH LAYER=1 CALL BEND(XCNTR,YCNTR,RARC,ANGS,ANGE,WIDTH,LAYER,FTYP) C C *** Bend *** C XCNTR=XOU(I,12) YCNTR=YOU(I,12) RARC=RB(I)-OF(I) ANGS=PI/2.0+THB(I) ANGE=PI/2.0 WIDTH=DIH LAYER=1 CALL BEND(XCNTR,YCNTR,RARC,ANGS,ANGE,WIDTH,LAYER,FTYP) C C *** Straight Part *** C XS=XU(I,15) YS=YU(I,15) XE=XU(I,16) YE=YU(I,16) WIDTH=DIH LTYPE=0 LAYER=1 CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C 2000 CONTINUE C C << Straight Reference Waveguide >> C C *** Straight Part *** C XS=XU(NRC,1) YS=YU(NRC,1)-BY*YSTEP XE=XU(NRC,16) YE=YS WIDTH=DIH LTYPE=0 LAYER=1 CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C C ================= Frame of the Chip ================= C WFRME=10.0 C XFR(1)=-WCHIP/2.0-WFRME/2.0 YFR(1)=-HCHIP/2.0 XFR(2)= WCHIP/2.0+WFRME/2.0 YFR(2)= YFR(1) C XFR(3)= WCHIP/2.0 YFR(3)=-HCHIP/2.0-WFRME/2.0 XFR(4)= XFR(3) YFR(4)= HCHIP/2.0+WFRME/2.0 C XFR(5)= WCHIP/2.0+WFRME/2.0 YFR(5)= HCHIP/2.0 XFR(6)=-WCHIP/2.0-WFRME/2.0 YFR(6)= YFR(5) C XFR(7)=-WCHIP/2.0 YFR(7)= HCHIP/2.0+WFRME/2.0 XFR(8)= XFR(7) YFR(8)=-HCHIP/2.0-WFRME/2.0 C DO 3000 I=1,7,2 XS=XFR(I) YS=YFR(I) XE=XFR(I+1) YE=YFR(I+1) LTYPE=0 LAYER=1 C CALL PATH(XS,YS,XE,YE,WFRME,LTYPE,LAYER,FTYP) 3000 CONTINUE C 9000 RETURN END C C ************************ DC3DB *********************** C * * C * 3dB Directional Coupler * C * * C ****************************************************** SUBROUTINE DC3DB(FTYP) IMPLICIT INTEGER(I-N),REAL(A-H,O-Z) CHARACTER*3 FTYP C COMMON /NSCR/NSCR,NDUMY,JDATA,JCOLR COMMON /PI/PI,WFRME,BX,BY COMMON /WG/DIH,SLIT,CUT,XAWG,YAWG,XP,YP,XQ,YQ,SFBR,XDEV,YDEV C DIMENSION XDC(50),XU(50,6),XOU(50,4),XL(50,6),XOL(50,4),XFR(24) DIMENSION YDC(50),YU(50,6),YOU(50,4),YL(50,6),YOL(50,4),YFR(24) C PI=3.141592653589793 C C ============== General Waveguide Data ============== C SLIT=0.15 CUT=0.0 C DIA=1.0 A=DIA/2.0 DIH=DIA+2.0*CUT THK=0.5 T=THK/2.0 DELRN=9.7 DELTA=DELRN*0.01 WL=1.55 C RMIN=100.0 OFST=0.03 OFSTMZ=0.03 C RNE=3.272402 RNC=3.200292 DNC=3.779576 C C =========== 3dB Directional Coupler Data =========== C GAP=0.2 SDC=7.2 Y3DB0=50.0 RB=RMIN OF=OFSTMZ C SB=SDC/2.0-(GAP/2.0+A) THB=ACOS(1.0-SB/2.0/RB) YBND=2.0*RB*SIN(THB) C IF (JDATA.EQ.1) THEN WRITE(2,1) 1 FORMAT(1H ) WRITE(2,10) RNE 10 FORMAT(' e =',F11.8) WRITE(2,12) RNC 12 FORMAT(' c =',F11.8) WRITE(2,14) DNC 14 FORMAT(' mc =',F11.8) WRITE(2,16) THB*180.0/PI 16 FORMAT(' b =',F11.4,' (x)') WRITE(2,18) Y3DB0 18 FORMAT(' x3dB0 =',F11.4,' (ʂ)') WRITE(2,20) YBND 20 FORMAT(' xbnd =',F11.4,' (ʂ)') ENDIF C C mdc ... Number of Test Directional Couplers C Stpdc ... rtep of Straight Coupling Length x3dB C xstep ... -axis rtep of Directional Coupler C vchip ... Chip Width C gchip ... Chip Height C NDC=21 STPDC=5.0 YSTEP=20.0 WCHIP=XDEV HCHIP=FLOAT(NDC+3)*YSTEP C DO 1000 I=1,NDC Y3DB=Y3DB0+FLOAT(I-(NDC+1)/2)*STPDC C XDC(I)=X0 YDC(I)=(Y0-BY*YDEV/2.0-BY*600.0)-BY*FLOAT(I-1)*YSTEP C C Upper Arm of AMZ C XU(I,3)=XDC(I)-BX*Y3DB/2.0 YU(I,3)=YDC(I)+BY*(GAP/2.0+A) XOU(I,2)=XU(I,3) YOU(I,2)=YU(I,3)+BY*RB XOU(I,1)=XOU(I,2)-BX*2.0*RB*SIN(THB) YOU(I,1)=YOU(I,2)-BY*2.0*RB*COS(THB) XU(I,2)=XOU(I,1) YU(I,2)=YOU(I,1)+BY*RB XU(I,1)=XDC(I)-BX*WCHIP/2.0 YU(I,1)=YU(I,2) C XU(I,4)=XDC(I)+BX*Y3DB/2.0 YU(I,4)=YDC(I)+BY*(GAP/2.0+A) XOU(I,3)=XU(I,4) YOU(I,3)=YU(I,4)+BY*RB XOU(I,4)=XOU(I,3)+BX*2.0*RB*SIN(THB) YOU(I,4)=YOU(I,3)-BY*2.0*RB*COS(THB) XU(I,5)=XOU(I,4) YU(I,5)=YOU(I,4)+BY*RB XU(I,6)=XDC(I)+BX*WCHIP/2.0 YU(I,6)=YU(I,5) C C Lower Arm of AMZ C XL(I,3)=XDC(I)-BX*Y3DB/2.0 YL(I,3)=YDC(I)-BY*(GAP/2.0+A) XOL(I,2)=XL(I,3) YOL(I,2)=YL(I,3)-BY*RB XOL(I,1)=XOL(I,2)-BX*2.0*RB*SIN(THB) YOL(I,1)=YOL(I,2)+BY*2.0*RB*COS(THB) XL(I,2)=XOL(I,1) YL(I,2)=YOL(I,1)-BY*RB XL(I,1)=XDC(I)-BX*WCHIP/2.0 YL(I,1)=YL(I,2) C XL(I,4)=XDC(I)+BX*Y3DB/2.0 YL(I,4)=YDC(I)-BY*(GAP/2.0+A) XOL(I,3)=XL(I,4) YOL(I,3)=YL(I,4)-BY*RB XOL(I,4)=XOL(I,3)+BX*2.0*RB*SIN(THB) YOL(I,4)=YOL(I,3)+BY*2.0*RB*COS(THB) XL(I,5)=XOL(I,4) YL(I,5)=YOL(I,4)-BY*RB XL(I,6)=XDC(I)+BX*WCHIP/2.0 YL(I,6)=YL(I,5) C 1000 CONTINUE C C ============== Mask Pattern Generation ============== C IF (JDATA.EQ.1) GO TO 9000 C DO 2000 I=1,NDC C C << Upper Arm of AMZ >> C C *** Straight Part *** C XS=XU(I,1) YS=YU(I,1) XE=XU(I,2) YE=YU(I,2) WIDTH=DIH LTYPE=0 LAYER=1 CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C C *** Bend *** C XCNTR=XOU(I,1) YCNTR=YOU(I,1) RARC=RB-OF ANGS=PI/2.0 ANGE=PI/2.0-THB WIDTH=DIH LAYER=1 CALL BEND(XCNTR,YCNTR,RARC,ANGS,ANGE,WIDTH,LAYER,FTYP) C C *** Bend *** C XCNTR=XOU(I,2) YCNTR=YOU(I,2) RARC=RB-OF ANGS=1.5*PI-THB ANGE=1.5*PI WIDTH=DIH LAYER=1 CALL BEND(XCNTR,YCNTR,RARC,ANGS,ANGE,WIDTH,LAYER,FTYP) C C *** Straight Part *** C XS=XU(I,3) YS=YU(I,3) XE=XU(I,4) YE=YU(I,4) WIDTH=DIH LTYPE=0 IF (JCOLR.EQ.1) THEN LAYER=2 ELSE LAYER=1 ENDIF CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C C *** Bend *** C XCNTR=XOU(I,3) YCNTR=YOU(I,3) RARC=RB-OF ANGS=1.5*PI ANGE=1.5*PI+THB WIDTH=DIH LAYER=1 CALL BEND(XCNTR,YCNTR,RARC,ANGS,ANGE,WIDTH,LAYER,FTYP) C C *** Bend *** C XCNTR=XOU(I,4) YCNTR=YOU(I,4) RARC=RB-OF ANGS=PI/2.0+THB ANGE=PI/2.0 WIDTH=DIH LAYER=1 CALL BEND(XCNTR,YCNTR,RARC,ANGS,ANGE,WIDTH,LAYER,FTYP) C C *** Straight Part *** C XS=XU(I,5) YS=YU(I,5) XE=XU(I,6) YE=YU(I,6) WIDTH=DIH LTYPE=0 LAYER=1 CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C C << Lower Arm of AMZ >> C C *** Straight Part *** C XS=XL(I,1) YS=YL(I,1) XE=XL(I,2) YE=YL(I,2) WIDTH=DIH LTYPE=0 LAYER=1 CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C C *** Bend *** C XCNTR=XOL(I,1) YCNTR=YOL(I,1) RARC=RB-OF ANGS=1.5*PI ANGE=1.5*PI+THB WIDTH=DIH LAYER=1 CALL BEND(XCNTR,YCNTR,RARC,ANGS,ANGE,WIDTH,LAYER,FTYP) C C *** Bend *** C XCNTR=XOL(I,2) YCNTR=YOL(I,2) RARC=RB-OF ANGS=PI/2.0+THB ANGE=PI/2.0 WIDTH=DIH LAYER=1 CALL BEND(XCNTR,YCNTR,RARC,ANGS,ANGE,WIDTH,LAYER,FTYP) C C *** Straight Part *** C XS=XL(I,3) YS=YL(I,3) XE=XL(I,4) YE=YL(I,4) WIDTH=DIH LTYPE=0 IF (JCOLR.EQ.1) THEN LAYER=2 ELSE LAYER=1 ENDIF CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C C *** Bend *** C XCNTR=XOL(I,3) YCNTR=YOL(I,3) RARC=RB-OF ANGS=PI/2.0 ANGE=PI/2.0-THB WIDTH=DIH LAYER=1 CALL BEND(XCNTR,YCNTR,RARC,ANGS,ANGE,WIDTH,LAYER,FTYP) C C *** Bend *** C XCNTR=XOL(I,4) YCNTR=YOL(I,4) RARC=RB-OF ANGS=1.5*PI-THB ANGE=1.5*PI WIDTH=DIH LAYER=1 CALL BEND(XCNTR,YCNTR,RARC,ANGS,ANGE,WIDTH,LAYER,FTYP) C C *** Straight Part *** C XS=XL(I,5) YS=YL(I,5) XE=XL(I,6) YE=YL(I,6) WIDTH=DIH LTYPE=0 LAYER=1 CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C 2000 CONTINUE C C ================= Frame of the Chip ================= C WFRME=10.0 C XFR(1)=-WCHIP/2.0-WFRME/2.0 YFR(1)=-HCHIP/2.0 XFR(2)= WCHIP/2.0+WFRME/2.0 YFR(2)= YFR(1) C XFR(3)= WCHIP/2.0 YFR(3)=-HCHIP/2.0-WFRME/2.0 XFR(4)= XFR(3) YFR(4)= HCHIP/2.0+WFRME/2.0 C XFR(5)= WCHIP/2.0+WFRME/2.0 YFR(5)= HCHIP/2.0 XFR(6)=-WCHIP/2.0-WFRME/2.0 YFR(6)= YFR(5) C XFR(7)=-WCHIP/2.0 YFR(7)= HCHIP/2.0+WFRME/2.0 XFR(8)= XFR(7) YFR(8)=-HCHIP/2.0-WFRME/2.0 C DO 3000 I=1,7,2 XS=XFR(I) YS=YFR(I) XE=XFR(I+1) YE=YFR(I+1) LTYPE=0 LAYER=1 C CALL PATH(XS,YS,XE,YE,WFRME,LTYPE,LAYER,FTYP) 3000 CONTINUE C 9000 RETURN END C C ************************ MMI3DB ********************** C * * C * MMI 3dB Coupler * C * * C ****************************************************** SUBROUTINE MMI3DB(FTYP) IMPLICIT INTEGER(I-N),REAL(A-H,O-Z) CHARACTER*3 FTYP C COMMON /NSCR/NSCR,NDUMY,JDATA,JCOLR COMMON /PI/PI,WFRME,BX,BY COMMON /WG/DIH,SLIT,CUT,XAWG,YAWG,XP,YP,XQ,YQ,SFBR,XDEV,YDEV C DIMENSION XMMI(50),XU(50,6),XOU(50,4),XL(50,6),XOL(50,4),XFR(24) DIMENSION YMMI(50),YU(50,6),YOU(50,4),YL(50,6),YOL(50,4),YFR(24) C PI=3.141592653589793 C C ============== General Waveguide Data ============== C SLIT=0.15 CUT=0.0 C DIA=1.0 A=DIA/2.0 DIH=DIA+2.0*CUT THK=0.5 T=THK/2.0 DELRN=9.7 DELTA=DELRN*0.01 WL=1.55 C RMIN=100.0 OFST=0.03 OFSTMZ=0.03 C RNE=3.272402 RNC=3.200292 DNC=3.779576 C C =============== MMI 3dB Coupler Data =============== C SMMI=9.0 DIAZGC=9.0 SPRTN=3.0 YCPL0=114.0 RB=RMIN*2.0 OF=OFST/2.0 C SB=SMMI/2.0-SPRTN/2.0+OF THB=ACOS(1.0-SB/2.0/RB) YBND=2.0*RB*SIN(THB) C IF (JDATA.EQ.1) THEN WRITE(2,1) 1 FORMAT(1H ) WRITE(2,10) RNE 10 FORMAT(' e =',F11.8) WRITE(2,12) RNC 12 FORMAT(' c =',F11.8) WRITE(2,14) DNC 14 FORMAT(' mc =',F11.8) WRITE(2,16) THB*180.0/PI 16 FORMAT(' b =',F11.4,' (x)') WRITE(2,18) YCPL0 18 FORMAT(' xcpl0 =',F11.4,' (ʂ)') WRITE(2,20) YBND 20 FORMAT(' xbnd =',F11.4,' (ʂ)') ENDIF C C mmmi ... Number of Test MMI 3dB Couplers C Stpmmi ... rtep of Straight Coupling Length x3dB C xstep ... -axis rtep of MMI 3dB Coupler C vchip ... Chip Width C gchip ... Chip Height C NMMI=21 STPMMI=10.0 YSTEP=20.0 WCHIP=XDEV HCHIP=FLOAT(NMMI+1)*YSTEP C DO 1000 I=1,NMMI YCPL=YCPL0+FLOAT(I-(NMMI+1)/2)*STPMMI C XMMI(I)=X0 YMMI(I)=(Y0-BY*YDEV/2.0-BY*1100.0)-BY*FLOAT(I-1)*YSTEP C C Upper Arm of AMZ C XU(I,3)=XMMI(I)-BX*YCPL/2.0 YU(I,3)=YMMI(I)+BY*DIAZGC/2.0 XOU(I,2)=XU(I,3) YOU(I,2)=YMMI(I)+BY*(SMMI/2.0-SB)+BY*RB XOU(I,1)=XOU(I,2)-BX*2.0*RB*SIN(THB) YOU(I,1)=YOU(I,2)-BY*2.0*RB*COS(THB) XU(I,2)=XOU(I,1) YU(I,2)=YOU(I,1)+BY*RB XU(I,1)=XMMI(I)-BX*WCHIP/2.0 YU(I,1)=YU(I,2) C XU(I,4)=XMMI(I)+BX*YCPL/2.0 YU(I,4)=YMMI(I)+BY*DIAZGC/2.0 XOU(I,3)=XU(I,4) YOU(I,3)=YMMI(I)+BY*(SMMI/2.0-SB)+BY*RB XOU(I,4)=XOU(I,3)+BX*2.0*RB*SIN(THB) YOU(I,4)=YOU(I,3)-BY*2.0*RB*COS(THB) XU(I,5)=XOU(I,4) YU(I,5)=YOU(I,4)+BY*RB XU(I,6)=XMMI(I)+BX*WCHIP/2.0 YU(I,6)=YU(I,5) C C Lower Arm of AMZ C XL(I,3)=XMMI(I)-BX*YCPL/2.0 YL(I,3)=YMMI(I)-BY*DIAZGC/2.0 XOL(I,2)=XL(I,3) YOL(I,2)=YMMI(I)-BY*(SMMI/2.0-SB)-BY*RB XOL(I,1)=XOL(I,2)-BX*2.0*RB*SIN(THB) YOL(I,1)=YOL(I,2)+BY*2.0*RB*COS(THB) XL(I,2)=XOL(I,1) YL(I,2)=YOL(I,1)-BY*RB XL(I,1)=XMMI(I)-BX*WCHIP/2.0 YL(I,1)=YL(I,2) C XL(I,4)=XMMI(I)+BX*YCPL/2.0 YL(I,4)=YMMI(I)-BY*DIAZGC/2.0 XOL(I,3)=XL(I,4) YOL(I,3)=YMMI(I)-BY*(SMMI/2.0-SB)-BY*RB XOL(I,4)=XOL(I,3)+BX*2.0*RB*SIN(THB) YOL(I,4)=YOL(I,3)+BY*2.0*RB*COS(THB) XL(I,5)=XOL(I,4) YL(I,5)=YOL(I,4)-BY*RB XL(I,6)=XMMI(I)+BX*WCHIP/2.0 YL(I,6)=YL(I,5) C 1000 CONTINUE C C ============== Mask Pattern Generation ============== C IF (JDATA.EQ.1) GO TO 9000 C DO 2000 I=1,NMMI C C << Upper Arm of AMZ >> C C *** Straight Part *** C XS=XU(I,1) YS=YU(I,1) XE=XU(I,2) YE=YU(I,2) WIDTH=DIH LTYPE=0 LAYER=1 CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C C *** Bend *** C XCNTR=XOU(I,1) YCNTR=YOU(I,1) RARC=RB-OF ANGS=PI/2.0 ANGE=PI/2.0-THB WIDTH=DIH LAYER=1 CALL BEND(XCNTR,YCNTR,RARC,ANGS,ANGE,WIDTH,LAYER,FTYP) C C *** Bend *** C XCNTR=XOU(I,2) YCNTR=YOU(I,2) RARC=RB-OF ANGS=1.5*PI-THB ANGE=1.5*PI WIDTH=DIH LAYER=1 CALL BEND(XCNTR,YCNTR,RARC,ANGS,ANGE,WIDTH,LAYER,FTYP) C C *** Quadrangle for llh 3dB Coupler *** C X1=XU(I,4)+CUT Y1=YU(I,4)+CUT X2=XL(I,4)+CUT Y2=YL(I,4)-CUT X3=XL(I,3)-CUT Y3=YL(I,3)-CUT X4=XU(I,3)-CUT Y4=YU(I,3)+CUT IF (JCOLR.EQ.1) THEN LAYER=2 ELSE LAYER=1 ENDIF CALL QUAD(X1,Y1,X2,Y2,X3,Y3,X4,Y4,LAYER,FTYP) C C *** Bend *** C XCNTR=XOU(I,3) YCNTR=YOU(I,3) RARC=RB-OF ANGS=1.5*PI ANGE=1.5*PI+THB WIDTH=DIH LAYER=1 CALL BEND(XCNTR,YCNTR,RARC,ANGS,ANGE,WIDTH,LAYER,FTYP) C C *** Bend *** C XCNTR=XOU(I,4) YCNTR=YOU(I,4) RARC=RB-OF ANGS=PI/2.0+THB ANGE=PI/2.0 WIDTH=DIH LAYER=1 CALL BEND(XCNTR,YCNTR,RARC,ANGS,ANGE,WIDTH,LAYER,FTYP) C C *** Straight Part *** C XS=XU(I,5) YS=YU(I,5) XE=XU(I,6) YE=YU(I,6) WIDTH=DIH LTYPE=0 LAYER=1 CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C C << Lower Arm of AMZ >> C C *** Straight Part *** C XS=XL(I,1) YS=YL(I,1) XE=XL(I,2) YE=YL(I,2) WIDTH=DIH LTYPE=0 LAYER=1 CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C C *** Bend *** C XCNTR=XOL(I,1) YCNTR=YOL(I,1) RARC=RB-OF ANGS=1.5*PI ANGE=1.5*PI+THB WIDTH=DIH LAYER=1 CALL BEND(XCNTR,YCNTR,RARC,ANGS,ANGE,WIDTH,LAYER,FTYP) C C *** Bend *** C XCNTR=XOL(I,2) YCNTR=YOL(I,2) RARC=RB-OF ANGS=PI/2.0+THB ANGE=PI/2.0 WIDTH=DIH LAYER=1 CALL BEND(XCNTR,YCNTR,RARC,ANGS,ANGE,WIDTH,LAYER,FTYP) C C *** Bend *** C XCNTR=XOL(I,3) YCNTR=YOL(I,3) RARC=RB-OF ANGS=PI/2.0 ANGE=PI/2.0-THB WIDTH=DIH LAYER=1 CALL BEND(XCNTR,YCNTR,RARC,ANGS,ANGE,WIDTH,LAYER,FTYP) C C *** Bend *** C XCNTR=XOL(I,4) YCNTR=YOL(I,4) RARC=RB-OF ANGS=1.5*PI-THB ANGE=1.5*PI WIDTH=DIH LAYER=1 CALL BEND(XCNTR,YCNTR,RARC,ANGS,ANGE,WIDTH,LAYER,FTYP) C C *** Straight Part *** C XS=XL(I,5) YS=YL(I,5) XE=XL(I,6) YE=YL(I,6) WIDTH=DIH LTYPE=0 LAYER=1 CALL PATH(XS,YS,XE,YE,WIDTH,LTYPE,LAYER,FTYP) C 2000 CONTINUE C C ================= Frame of the Chip ================= C WFRME=10.0 C XFR(1)=-WCHIP/2.0-WFRME/2.0 YFR(1)=-HCHIP/2.0 XFR(2)= WCHIP/2.0+WFRME/2.0 YFR(2)= YFR(1) C XFR(3)= WCHIP/2.0 YFR(3)=-HCHIP/2.0-WFRME/2.0 XFR(4)= XFR(3) YFR(4)= HCHIP/2.0+WFRME/2.0 C XFR(5)= WCHIP/2.0+WFRME/2.0 YFR(5)= HCHIP/2.0 XFR(6)=-WCHIP/2.0-WFRME/2.0 YFR(6)= YFR(5) C XFR(7)=-WCHIP/2.0 YFR(7)= HCHIP/2.0+WFRME/2.0 XFR(8)= XFR(7) YFR(8)=-HCHIP/2.0-WFRME/2.0 C DO 3000 I=1,7,2 XS=XFR(I) YS=YFR(I) XE=XFR(I+1) YE=YFR(I+1) LTYPE=0 LAYER=1 C CALL PATH(XS,YS,XE,YE,WFRME,LTYPE,LAYER,FTYP) 3000 CONTINUE C 9000 RETURN END