CA2417462A1 - Programmable molecular device - Google Patents

Programmable molecular device Download PDF

Info

Publication number
CA2417462A1
CA2417462A1 CA002417462A CA2417462A CA2417462A1 CA 2417462 A1 CA2417462 A1 CA 2417462A1 CA 002417462 A CA002417462 A CA 002417462A CA 2417462 A CA2417462 A CA 2417462A CA 2417462 A1 CA2417462 A1 CA 2417462A1
Authority
CA
Canada
Prior art keywords
ndrdiode
molecular
int
programmable
nanocell
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Abandoned
Application number
CA002417462A
Other languages
French (fr)
Inventor
James M. Tour
Bill Van Zandt
Christopher Husband
Summer Husband
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
William Marsh Rice University
Original Assignee
Wm. Marsh Rice University
James M. Tour
Bill Van Zandt
Christopher Husband
Summer Husband
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Wm. Marsh Rice University, James M. Tour, Bill Van Zandt, Christopher Husband, Summer Husband filed Critical Wm. Marsh Rice University
Publication of CA2417462A1 publication Critical patent/CA2417462A1/en
Abandoned legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03KPULSE TECHNIQUE
    • H03K19/00Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits
    • H03K19/02Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits using specified components
    • H03K19/173Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits using specified components using elementary logic circuits as components
    • H03K19/177Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits using specified components using elementary logic circuits as components arranged in matrix form
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B82NANOTECHNOLOGY
    • B82YSPECIFIC USES OR APPLICATIONS OF NANOSTRUCTURES; MEASUREMENT OR ANALYSIS OF NANOSTRUCTURES; MANUFACTURE OR TREATMENT OF NANOSTRUCTURES
    • B82Y30/00Nanotechnology for materials or surface science, e.g. nanocomposites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/002Biomolecular computers, i.e. using biomolecules, proteins, cells
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/21Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements
    • G11C11/34Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices
    • G11C11/36Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices using diodes, e.g. as threshold elements, i.e. diodes assuming a stable ON-stage when driven above their threshold (S- or N-characteristic)
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C13/00Digital stores characterised by the use of storage elements not covered by groups G11C11/00, G11C23/00, or G11C25/00
    • G11C13/0002Digital stores characterised by the use of storage elements not covered by groups G11C11/00, G11C23/00, or G11C25/00 using resistive RAM [RRAM] elements
    • G11C13/0009RRAM elements whose operation depends upon chemical change
    • G11C13/0014RRAM elements whose operation depends upon chemical change comprising cells based on organic memory material
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C13/00Digital stores characterised by the use of storage elements not covered by groups G11C11/00, G11C23/00, or G11C25/00
    • G11C13/02Digital stores characterised by the use of storage elements not covered by groups G11C11/00, G11C23/00, or G11C25/00 using elements whose operation depends upon chemical change
    • G11C13/025Digital stores characterised by the use of storage elements not covered by groups G11C11/00, G11C23/00, or G11C25/00 using elements whose operation depends upon chemical change using fullerenes, e.g. C60, or nanotubes, e.g. carbon or silicon nanotubes
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B82NANOTECHNOLOGY
    • B82YSPECIFIC USES OR APPLICATIONS OF NANOSTRUCTURES; MEASUREMENT OR ANALYSIS OF NANOSTRUCTURES; MANUFACTURE OR TREATMENT OF NANOSTRUCTURES
    • B82Y10/00Nanotechnology for information processing, storage or transmission, e.g. quantum computing or single electron logic
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C2213/00Indexing scheme relating to G11C13/00 for features not covered by this group
    • G11C2213/70Resistive array aspects
    • G11C2213/81Array wherein the array conductors, e.g. word lines, bit lines, are made of nanowires
    • HELECTRICITY
    • H10SEMICONDUCTOR DEVICES; ELECTRIC SOLID-STATE DEVICES NOT OTHERWISE PROVIDED FOR
    • H10KORGANIC ELECTRIC SOLID-STATE DEVICES
    • H10K10/00Organic devices specially adapted for rectifying, amplifying, oscillating or switching; Organic capacitors or resistors having a potential-jump barrier or a surface barrier
    • H10K10/701Organic molecular electronic devices

Abstract

A programmable molecular device (10) is provided that includes a random nano-network that includes a plurality of molecular circuit components. Preferred molecular circuit components include molecular diodes that exhibit negative differential resistance. A method of programming the molecular device may include configuring the molecular components. Configuring a molecular component may include applying a voltage across input and output leads connected to the nano-networks. The voltage may be determined according to a self-adapting algorithm that programs the device to function, for example, as a logic unit or a memory unit. A molecular computer may include a plurality of programmable molecular devices (10) that are interconnected by metallic wires (14).

Description

PROGRAMMABLE MOLECULAR DEVICE
STATEMENT REGARDING FEDERALLY SPONSORED
RESEARCH OR DEVELOPMENT
This work was supported by funding from DARPA through the Office of Naval Research, Grant No. 813160.
REFERENCE TO CD-ROM APPENDIX
AND STATEMENT UNDER 37 C.F.R ~ 1.52(e)(5) One compact disk - read only memory (CD-ROM) is attached hereto in duplicate copy ("Copy 1" and "Copy 2") in IEM-PC format, compatible with MS-Windows and MS-DOS, and incorporated-by-reference herein, in accordance with 37 C.F.R ~ 1.52(e)(5).
Copy 1 and Copy 2 are identical and contain 269 files in 1 main directory and 2 subdirectories, as identified by the following output from the MS-DOS command "dir e: /s", where the output includes a line in standard fomnat [month/date/year time bytes filename.extension] for each file, identifying, to one of ordinary skill in the computational arts, the date of creation, size, name, and type of each file:
Volume in drive E is PatentFiles Directory of E:\
01/01/01 <DIR>
12:00a 01/01/01 <DIR> ..
12:00a 07/24/01 <DIR> Dynamic Nanocell Simulator 01:59p 07/24101 250,368 Exhaustive Truth 09:34a Table Tests.ppt 07/24/01 <DIR> Spice Nanocell Simulator 01:58p 07/24/01 44,553,216 Trained Nanocell.doc 01:30p G Files) 44,803,584 bytes Directory of E:\Dynamic Nanocell Simulator 07/24/01 <DIR>
09:34a 07/24/01 <DIR> ..
09:34a 07/24/0i <DIR> molec 01:59p 07/23/01 2,341 SimCellVl.jcp 09:43a 07/10/01 390 SimCellVl.jcw 12:09p 07/11/01 239 SimCel1V12.jcw 12:42p 07/24/01 <DIR> src 01:59p 07118/01 1,022 src_simcellvl.txt 07:53a 8 Files) 3,992 bytes Directory of E:\Dynamic Nanocell Simulator\molec 07/24/01 01:58p <DIR>
07/24/01 01:58p <DIR> ..
07/24/01 01:59p <DIR> cell 07124/01 01:59p <DIR> control 07/24/01 01:59p <DIR> ga 07/24!01 01:59p <D1R> table 07/24/01 01:59p <DIR> u/
7 Files) 0 bytes Directory of E:\Dynamic Nanocell Simulator\molec\cell 0411 G/O1 O <DIR>
1:07p 04/16/01 01:07p<DIR> ..

07/18/01 490 Link.class 07:54a 07/18/01 07:54a9,255 Nanocell.class 07/18/01 07:54a1,206 Node.class 07/18/01 07:54a1,503 Util.class G Files) 12,454 bytes Directory of E:\Dynamic Nanocell Simulator\molec\control 07/18/01 <DIR>
07:54a 07/18/01 <DIR> ..
07:54a 07/18/01 2,372 nanoControl$l.class 07:54a 07/18/01 2,060 nanoContl~ol$l0.class 07:54a 07/18/01 1,942 nanoControl$1l.class 07:54a 07/18/01 745 nanoControl$l2.class 07:54a 07!18/01 839 nanoControl$l3.class 07:54a 07/18/01 745 nanoContl-ol$l4.class 07:54a 07/18/01 1,426 nanoControl$l5.class 07:54a 07/18/01 835 nanoControl$lG.class 07:54a 07/18/01 751 nanoControl$l7.class 07:54a 07/18/01 2,083 nanoControl$l8.class 07:54a 07/18/01 751 nanoControl$l9.class 07:54a 07/18/01 1,251 nanoCont<~ol$2.class 07:54a 07118/01 1,560 nanoControl$20.class 07:54a 07118/01 1,383 nanoControl$2l.class 07:54a 07/18/01 1,054 nanoControl$22.class 07:54a 07118/01 749 nanoConhol$23.class 07:54a 07/18/01 846 nanoControl$24.class 07:54a 07/18/01 749 nanoConti~ol$25.class 07:54a 07/18/01 2,672 nanoControl$2G.class 07:54a 07/18/01 1,251 nanoControl$3.class 07:54a 07/18/01 1,213 nanoControl$4.class 07:54a 07/18/01 1,233 nanoControl$5.class 07:54a 07118!01 1,278 nanoControl$G.class 07:54a 07/18/01 744 nanoControl$7.class 07:54a 07/18/01 1,290 nanoControl$8.class 07:54a 07/18/01 744 nanoControl$9.class 07:54a 07/18/01 5,091 nanoControl.class 07:54a 29 Files) 37,657 bytes Directory of E:\Dynamic Nanocell Simulator\molec\ga 07118101 07:54a<DIR>

07/18101 07:54a<DIR> ..

07/18/01 07:54a158 Evaluatable.class 07/18/01 07:54a4,057 GA.class 07/18/01 2,176Individual.class 07:54a 07/18/01 07:54a3,132 Population.class 07/18/01 07:54a1,020 Util.class 7 File(sj 10,543 bytes Directory of E:\Dynamic Nanocell Simulator\molec\table 07/18/01 <DIR>
07:54a 07/18/01 <D1R> ..
07:54a 07/18101 2,128 TruthTable.class 07:54a 3 Files) 2,128 bytes Directory of E:\Dynamic Nanocell Simulator\molec\ui 07/18/01 <DIR>
07:54a 07/18/01 <D1R> ..
07:54a 07/18/01 6,747 GCell.class 07:54a 07/24/01 <DIR> inputWindows 01:59p 07/18/01 487 mainMenu$l.class 07:54a 07118101 5,985 mainMenu.class 07:54a 07/18/01 427 NodeCheckl3oxMenuItem.class 07:54a 7 Files) 13,646 bytes Directory of E:\Dynamic Nanocell Simulator\molec\ui\inputWindows 07/24/01 <DIR>
01:59p 07124/01 <DIR> ..
01:59p 07/18/01 2,517 AInputWindow.class 07:54a 07/18/01 656 GAPropsWin.class 07:54a 07/18/01 1,068 makeNano.class 07:54a 07/18/01 2,775 PropsGui.class 07:54a 07/18/01 701 SimPropsWin.class 07:54a 07/18/01 3,006 TableGui.class 07:54a 8 Files) 10,723 bytes Directory of E:\Dynamic Nanocell Simulator\src 07/24/01 <DIR>
01:59p 07/24/01 <DIR> ..
01:59p 07/24/01 <DlR> cell 01:59p 07/24/01 <DIR> control 01:59p 07/24/01 <DIR> ga 01:59p 07/24/01 <DIR> table 01:59p 07/24101 <DlR> ui 01:59p 7 Files) 0 bytes Directory of E:\Dynamic Nanocell Simulator\src\cell 07/24/01 <DIR>
01:59p 07/24/01 <D1R> ..
01:59p 05/11/01 516 Link.java 02:33p 07/17/01 30,722 Nanocell.java 01:32p 07/09/01 1,230 Node Java 11:18a 04/04/01 1,312 Util.java 09:37a 6 Files) 33,780 bytes Directory of E:\Dynamic Nanocell Simulator\src\conti-ol 04/04/01 <DIR>
09:37a 04/04/01 <DlR> ..
09:37a 07/18/01 20,315 nanoControl.java 03:45p 3 Files) 20,315 bytes Directory of E:\Dynamic Nanocell Simulator\src\ga 07/18/01 <DIIZ>
03:45p 07/18/01 03:45p~ <DIR> ..

04/17/01 OG:59p87 Evaluatable.java 07/14/01 OG:40a6,716 GA.java 07/14/01 OG:l6a3,268Individual.java OG/11/O1 4,467 Population.java 10:32a OG/1G/O1 OG:OOa854 Util.java 7 Files) 15,392 bytes Directory of E:\Dynamic Nanocell Simulator\src\table 07/14/01 OG:40a <DIR>
07/14/01 OG:40a <DIR> ..
04/17/01 OG:SGp 2,074 TruthTable.java 3 Files) 2,074 bytes Directory of E:\Dynamic Nanocell Simulator\src\ui 04117101 OG:SGp<DIR>

04/17/01 OG:SGp<DIR> ..

07/14/01 9,G3G GCell.java 05:39a 07/24/01 01:59p<DIR> images 07/24/01 01:59p<DIR> inputWindows 05/23/01 01:49p9,295 mainMenu.java 04/0G/01 09:15a327 NodeCheclcBoxMenuItem.java 7 Files) 19,258 bytes Directory of E:\Dynamic Nanocell Simulator\src\ui\images 07/18/01 07:54a<D~R>

3007/18/01 07:54a<DIR> ..

02/05/01 05:07p291 cell_prop.gif 02/05/01 04:50p1,087 chip.gif OG/02/00 11:11a885 clone.gif OG/02/00 ll:lla81 hand.gif 35OG/02/00 ll:lla1,4761ooping.gif 02105101 02:45p235 middle.gif 02/05/01 05:02p843 molecule.gif OG/02/00 l 139 new.gif !:!la OG/02/00 11:11a14G open.gif 40OG/02/00 11:11a184 save.gif OG/02/00 l 852 start.gif !:!la OG/02/00 ll:lla858 stop.gif 02/05/01 04:51p1,422 truth.gif 02/05/01 05:05p211 zap.gif 451G Files) 8,710 bytes Directory of E:\Dynamic Nanocell Simulator\src\ui\inputWindows 02/05/01 05:05p<DIR>

50 02/05/01 <DIR> ..
05:05p 0G/05/01 01:31p2,592 AInputWindow.java ' 07/13/01 lO:Olp522 GAPropsWin.java 07/03/01 02:31pG91 makeNano.java 07/03/01 02:35p2,007 PropsGui.java 55 07/13/01 52G SimPropsWin.java 03:3Gp 02/28/01 01:04p2,744 TableGui.java 8 Files) 9,082 bytes GO
Directory of E:\Spice Nanocell Simulator 07/24/01 <DIR>
01:59p 07/24/0I <D7R> ..
01:59p 03/26/01 921bit.tt 04:24p 03126/01 412 2bit.tt 04:25p 07/03/01 8G 2Nand.pin 01:42p 07/03/01 153 2Nand.tt 01:24p 07/03/01 8G 4Nand.pin 02;56p 07/03/01 8G 4Nand.pin.pin 03:SGp 07/03/01 410 4Nand.tt 03;55p 07/23/01 4,562 AllScores 03:01p 03/26/01 3G And.tt 04:25p 06/08/01 2,272 BigRemoteTest 02:25p 02/12/01 2,036 Connector.cpp 10:27a 05/30/01 1,030 Connector.h 12:46p I5 OI/25/OI 1,157 Conprop.cpp 01:35p 01/25/01 1,245 Conprop.h 01:35p 03/28/01 8G DlBit.pin 05:10p 03/26/01 93 Dlbit.tt 04:29p 03/28/01 8G DlBit_l.pin 10:12a 03/27/01 G3 DlBit_l.tt 03:20p 03/28/01 88 DlBit 2.pin 10:29a 03/28/01 G3 DlBit_2.tt 10:22a 07124/01 <D1R> Debug 01:58p 01/25101 1,249 Device.cpp 01:35p 01!29/01 2,604 Device.h 02:25p 03/14/01 0 DNand.pin 02:16p 03/14/01 42 DNand.tt 02:06p 03/16/01 85 DXor.pin 01:04p 03/14/01 3G DXor.tt 02:12p 01/25/01 1,117 FindDlg.cpp 01:35p 01/25/01 1,213 FindDlg.h 01:35p 07/18/01 91 HalfAdder.pin 12:07p 07/18/01 59 HalfAdder.tt 12:06p 01/25/01 8,644 icaps.cpp 01:35p 02/06/01 2,169 icaps.h OG:45p 07/20/01 1 intusoft.err 04:52p 03/12/01 137Inverter.pin 11:08a 03/26/01 33Inverter.tt 04:26p 05/10/01 89Inverter2.pin 11:38a 03124/01 89InverterLess.pin 04:09p 06/15/01 13,570 MainFrm.cpp 12:42p 06/15101 2,602 MainFrm.h 12:30p 06115/01 78,956 mcG.aps 12:40p 07/24/01 16,91I mcG.clw 01:25p 02/06/01 6,218 mcG.cpp 04:28p 03/28/01 7,062 mcG.dsp 12:24p 02/12/01 711 mcG.dsw 10:33a 02/03/01 1,432 mcG.h 01:58p 07/24/01 484,352 mcG.ncb 01:25p 06/15101 1,001 mcG.odl 12:30p 07/24101 61,952 mcG.opt 01:25p 07/23/01 2,748 mcG.plg 02:IOp 06/15/01 49,154 mcG.rc 12:40p 01/18/01 GGO mcG.reg 04:32p 07/20/01 26,643 mcGDoc.cpp 01:14p 06/15/01 4,078 mcGDoc.h 12:42p 02/07/01 3,033 mcGView.cpp 04:21p 02/06/01 1,841 mcGView.h 07:44p 01/25/01 949 Molecule.cpp 01:35p 01/25/01 GG8 Molecule.h 01:35p 07120/01 1,329 Moletronic.cir 04:51p 07/20/01 1,382 Moletronic.ckt 04:52p 07/20101 632 moletronic.en 04:52p 07120/01 3,869 moletr-onic.out 04:52p 07/20/01 1,330 Moletronic.prm 04:52p 07120/01 1,329 Moletronic.tmp 04:52p 03/27/01 41,480 Moletronic2 11:04a 03/28/01 142 mssccprj.scc 12:24p 06/08/01 81 NAdder.pin 02:25p 05/07/01 87 NAdder.tt 02:38p 05/11/01 85 Nand.pin 03:42p 03/26/01 37 Nand.tt 04:26p 03/26/01 85 NandLess.pin 02:18p 07/19/01 76,429 Nanocell.cpp 03:33p 07/23/01 5,784 Nanocell.h 02:10p 01/25/01 2,717 Nanocolor.cpp 01:35p 01/25/01 1,530 Nanocolor.h 01:35p 04/16/01 1,912 Nanoprop.cpp 01:08p 04/16/01 1,452 Nanoprop.h 01:08p 03/26/01 15,595 NewPinStatus.cpp 04:16p 03/12/01 3,125 NewPinStatus.h 11:49a 03/12101 43,329 NewTT.cpp 03:27p 03/12/01 7,659 NewTT.h 02:59p 04/20/01 81 NHalfAdder.pin 05:23p 06115/01 81 NHalfAdder.pin.pin 04:26p 04/20/01 59 NHalfAdder.tt 01:32p 04/23/01 81 NHaIfAdderBig.pin 11:54a 03/26/01 35 Or.tt 04:26p 07/18/01 1,090 papertest 12:50p 07/18101 331 papertest2 02:35p 04/17/01 10,311 Pin.cpp 02:40p 03/28/01 920 Pin.h 09:59a 03/26/01 4,562 Pinprop.cpp 04:16p 06/08/01 1,567 Pinprop.h 10:55a 03/26/01 2,861 PinStatus.cpp 04:17p 03/15/01 1,886 PinStatus.h 02:59p 01/18/01 4,650 readme.txt 04:32p 06/25/01 410 RemoteTest 12:54p 06/21/01 2,220 RemoteTestBig 04:04p 07/24/01 <DIR> res 01:58p 06/15/01 13,766 resource.h 12:40p 01/21/01 515 Results.tmp 02:56p 07/20/01 133 Scores 04:50p 07123/01 616 ScoresSmall 03:01p 05/24/01 3,503 Simprop.cpp 11:49a 05/24/01 1,947 Simprop.h I I:44a 01/25101 4,971 spice4.cpp 01:35p 01/25/01 1,412 spice4.h 01:35p 05/28/01 1,419 SpiceSocket.cpp 10:58a 06/18/01 1,358 SpiceSocket.h 02:41p 01/25/01 205 StdAfx.cpp 01:35p 03/12/01 1,639 StdAfx.h 12:57p 07/20/01 8,074 Switch.cpp 12:47p 07/19/01 1,241 Switch.h 03:03p 03/14101 1,106 Truthtable.cpp 02:10p 03/12/01 1,494 Truthtable.h 03:24p 03/28/01 912 vssver.scc 01:46p 04/03/01 81 Xor.pin 12:08p 03/26/01 36 Xor.tt 04:27p GO 07/19/01 385 xortest 05:57p G

120 Files) 1,083,699 bytes Directory of E:\Spice Nanocell Simulator\Debug 07/24/O1~ <DIR>
01:59p 07/24/01 01:59p<DIR> ..

07/05/01 11:27a0 AllScores 07/23/01 02:10p5,161,984 mcG.bsc 4 Files) 5,161,984 bytes Directory of E:\Spice Nanocell Simulator\res 07/05/01 11:27a<DIR>

07/05/01 11:27a<DIR> ..

01/17/01 1,078 mcG.ico 08:59p 01/13/01 04:31p395 mc6.rc2 01/13/01 04:31p1,078 mcGDoc.ico 03109/01 02:57p778 Toolbar.bmp 04/16/01 01:07p9G vssver.scc 7 Files) 3,425 bytes Total Files Listed:
269 Files) 51,252,446 bytes 0 bytes free FIELD OF THE INVENTION
The present invention relates generally to programmable electronic devices, more particularly programmable nano-scale devices based on molecular circuit components.
BACKGROUND OF THE INVENTION
Basic functions of a computer include information processing and storage. In von Neumann (serial) architectures, those arithmetic, logic, and memory operations are performed by devices that are capable of reversibly switching between two states often referred to as "0"
and "1." Semiconducting devices that penorm these various functions must be capable of switching between two states at a very high speed using minimum amounts of electrical energy in order to allow the computer to perform basic operations. Transistors perform the basic switching functions in computers.
While the design and production of energy-efficient, state-of-the-art electronic devices depend increasingly on the ability to produce ever higher densities of circuit elements within integrated circuits, semiconductor-based computer technology and architecture have advanced to nearly the quantum mechanical limitations of such configurations. Soon, size and price will limit the advancement of future growth of high-performance computers. A major component that modulates these attributes of high-performance computers is the memory, particular the memory circuit density. Because of the huge data storage requirements of these instruments, a new, compact, low-cost, very high capacity, high-speed memory circuit configuration is needed. A more detailed discussion of the issues relating to downsizing of electronic devices can be found in U.S. Patents 6,259,277, 6,219,833, 5,589,692, and 5,475,341, each of which is incorporated herein by reference.
Molecular scale electronics is a field of study that proposes the use of single molecules or groups of molecules to function as the lcey components in future computational devices. In particular, molecules that have strategically placed charge barriers could serve as switches. In addition to substantial size reductions, the response times of molecular devices can be in the range of femto-seconds, while the fastest present devices operate in the nanosecond regime.
Thus a 105 to 10~ increase in speed may be attainable, particularly if other circuit elements do not limit operational performance.
Optimizing the size of conventional basic units (usually the transistors) and their speed (limited by their natural temporal responses) are conflicting design goals.
Therefore several trade-offs have to be made. The most important compromise in computational technology is the hardware-software duality, which materializes in the requirements of a programmed logic (memory- or software-dominant) versus wired logic (CPU-, or hardware-dominant).
Components of programmed logic are smaller and able to handle larger problems than a wired logic system; however, a wired-logic is faster than a programmed-logic. At one extreme there can be a bit adder (a minimum logic unit able to sum) with a small number of logical gates that will require a large memory to obtain the results, while at the other extreme, there could be a large CPU with all specific functions wired into the system that will be able to process the entire problem, having only a small memory for the input and output data.
Present technology is heavily inclined toward programmed logic, for example, a computer with a large memory and a fast but simple CPU.
An ongoing challenge in implementing molecular scale electronics has been the search for approaches for arranging molecular components into structures that have logic functions.
Thus, there have been investigations into architectures that allow molecular components to be used as the basic switching elements in building logic devices. Any logic gate may be constructed from a complete set of one or more fundamental gates. More than one of these fundamental gates may be arranged in series or in parallel, or a combination of the two, to form other logic functions. Thus, there has been particular emphasis on demonstrating the functionality of fundamental gates. A NAND gate is one fundamental gates that by itself forms a complete set. A NOR gate is another fundamental gate that by itself forms a complete set.

Other complete sets include the combination of an AND gate and an XOR gate, the combination of an OR gate and an XOR gate, the combinatation of an AND gate and a NOT
(also teamed Inverter) gate, and the combination of an OR gate and a NOT gate.
In one approach, elementary logic functions have been proposed using single molecules built up of smaller molecules bonded together. Each smaller molecule would be designed to mimic the function of a conventional circuit element. Such speculative molecules are shown in Figures 12, 13, and 14 of Proceedings of the IEEE, March 2000, pages 386-426, by James C.
Ellenbogen and J. Christopher Love. This article is hereby incorporated by reference. The molecules shown in Figures 12, 13, and 14 of that reference are suggested as functioning as an AND gate, an OR gate, and a half adder, respectively. A disadvantage of this approach is the difficulty of synthesis of such proposed molecules. Further, dynamic conformational changes of the molecular segments would have the tendency to produce shorts between molecular segments. ' In another approach, elementary logic functions have been demonstrated in mixed arrays of conventional circuit components and switches that contain a monolayer of millions of molecular diodes between leads. Switching function has been demonstrated in devices of monolayers of molecular diodes oriented between two conventional metal plates, such as capacitor plates. A monolayer is a layer of molecules having the thiclcness of one molecule. In the monolayer, molecules having opposite ends with functional groups that allow bonding to metal and have come to be termed molecular alligator clips are oriented side by side. The functionalized ends are bonded to the metallic plates. Exemplary circuits incorporating molecular monolayer-based switching devices that are disclosed to have NAND
and NOR
functionality are shown in Figure 5 of the article entitled "Moletronics: A
circuit design perspective", by David P. Naclcashi and Paul D. Franzon, Proc, SPIE 2001, vol.
4236 pp. 80-88. This article is hereby incorporated by reference in its entirety. Further, circuits incorporating oriented molecular monolayers are also described in U.S. Patent Application Attorney Docket Number OCR 1049, filed April 18, 2000, entitled "Molecular Scale Electronic Devices", which is incorporated herein by reference.
In each of the above approaches, the molecular scale devices are implementations of wired logic. This runs counter to the trend in present technology toward programmed logic.
Further, wired logic tends to be less tolerant of defects than programmed logic. For industrial scale fabrication of molecular scale devices to be cost-effective and efficient the devices must be tolerant to the defects that may occur in the course of chemically assembling the devices.

Molecular scale electronics offers the possibility of computing power that dwarfs our current capabilities. Hence, a technique for creating programmed logic from molecular components in an effective, robust, and reproducible manner is desired.
SUMMARY OF THE INVENTION
In a preferred embodiment, the present invention features a programmed logic using molecular components. Alternatively, the present invention provides a programmed memory using molecular components. The molecular components are arranged in a nanocell that forms a small programmable unit. A nanocell preferably contains as many as trillions of molecules, a few thousand of which are in a suitable orientation for switching. This provides a balance in scale between the desire for miniaturization realized by single molecule logic and the desire for robust, programmable functionality. The nanocells of the present invention have the advantage that a single nanocell that is assembled by straightforward wet chemical techniques may be programmed first to perform as one logic unit and then optionally reprogrammed to function as another logic unit. Further, the nanocells are adapted to be incorporated into standard computers in the place of conventional logic units, while providing similar functionality on a smaller scale than presently realizable in conventional silicon-based logic.
The versatility, robustness, and ease of production of the present nanocells are realized by constructing the nanocell from molecular components that are allowed to self=assemble into a structure. Unless guided by a scaffold, the molecular components assemble into a random arrangement, such as a random network. Since the networlc preferably extends on a scale from about 1 nm to about 2 Vim, it is temned herein a nano-network. The random arrangement has the advantage that if a particular molecular component is absent from a particular location, this has little or no effect on the function of the nanocell. That is, the nanocell is programmable regardless of the precise arrangement of the molecular components. The nanocell is programmable by an iterative method termed a self-adaptive algorithm in which the algorithm adjusts to the arrangement of the molecular components.
Thus, the present invention comprises a combination of features and advantages that enable it to overcome various problems of prior devices. The various characteristics described above, as well as other features, will be readily apparent to those dulled in the art upon reading the following detailed description of the preferred embodiments of the invention, and by referring to the accompanying drawings.

BRIEF DESCRIPTION OF THE DRAWINGS
For a more detailed description of the preferred embodiment of the present invention, reference will now be made to the accompanying drawings, wherein:
Figure 1 is a schematic drawing of a nanocell according to an embodiment of the present invention;
Figures 2A and 2B are a schematic drawings of arrangement of leads according to an embodiment of the present invention;
Figure 3 is a schematic representation of molecular components according to an embodiment of the present invention;
Figures 4A and 4B shows plots of the I(V) response of the molecules depicted in Figure 3;
Figure 5 is a schematic drawing of a molecular computer according to an exemplary embodiment of the present invention;
Figure 6 is a schematic representation of molecular devices containing pyridyl groups as "alligator clips";
Figure 7 is a schematic representation of a simulated nanocell according to an exemplary embodiment of the present invention, showing "on" high conducting molecules as black lines and "off" low conducting molecules as white lines;
Figure 8 is schematic representation of the simulated nanocell of Figure 7 programmed to function as an Inverter gate;
Figure 9 is schematic representation of the simulated nanocell of Figure 7 reprogrammed to function as a NAND gate; and Figure 10 is schematic representation of the simulated nanocell of Figure 7 reprogrammed to function as an Inverse Half Adder gate.
DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENT
Nanocell Referring initially to Figure 1, a molecular electronic device 10 includes a nanocell 12.
Nanocell 12 includes at least one and preferably a plurality of molecular circuit components 14.
Nanocell 12 preferably has a linear dimension 16 of up to about 2 Vim, more preferably between about 1 nm and about 2 ~,m. Linear dimension 16 may be the length of a side 18 of nanocell 12.
Sides 18 enclose, that is define the borders containing, molecular circuit components 14.
Nanocell 12 may include any number of sides and may be from one to three dimensional.
Nanocell 12 is shown in Figure 1 in a square configuration. It will be understood that alternative configurations are contemplated, such as circular, rectangular, and any other suitable configuration.
Still referring to Figure 1, nanocell 12 preferably further includes at least one input lead 20 and at least one output lead 22. The numbers of input leads and of output leads are not crucial. The number of leads preferably is constrained only by the technique for forming leads 20, 22, such as conventional lithography, and by the size of nanocell 20.
Leads 20,22 are shown at the edges of nanocell 12 in Figure 1. It will be understood that other configurations of leads are contemplated. For example input leads 23 and output leads 25 may be interleaved, extending from edges of nanocell 27, such as shown in Figure 2A.
Alternatively, input leads 29 and output leads 33 may extend from concentric perimeters 37 defining the edges of nanocell 39, as shown in Figure 2B.
Nano-networlc 20 preferably spans each input lead 20 and each output lead 22.
Leads 20, 22 may be metallic and are designed to connect to conventional lithographic interconnect, such as metallic wire. Edge molecular circuit components 24 are connect to leads 20, 22, through molecular alligator clips 26. Molecular alligator clips include sticky end groups that bind to metal, based on moieties such as sulfur, oxygen, selenium, phosphorous, isonitrile, pyridine, and carboxylate. A particularly preferred sulfur-based molecular alligator clip is a thiol group. It will be understood that molecular circuit components 14 may include two, three, four, five, six or more termini, such as disclosed in Tour, J. M.; Kozalti, M.; and Seminario, J.
M. "Molecular Scale Electronics: A Synthetic/Computational Approach to Digital Computing,"
J. Am. Chem. Soc. 120, 8486-8493 (1998), which is incorporated by reference herein, and in U.S. Patent No. 6,259,277, hereby incorporated herein by reference. Each terminus is preferably an end that includes a molecular alligator clip.
Still refen~ng to Figure 1, nanocell 12 is preferably a nano-network 28 that has a network structure in which the molecular circuit components form at least a portion or portions of the network. Nano-network 28 is a preferably a random nano-network. In particular, nano-network 28 preferably has at least one of the following elements of randomness. The x-ray crystal structure of nano-network 28 may include no appreciable peaks indicative of a periodic or a semi-periodic arrangement of molecular circuit components, preferable for length scales between about 1 nm and 2 Vim. Alternatively, the x-ray crystal structure of nano-network 28 may include at least one peals indicative of a lack of characteristic length scale between about 1 nm and 2 ~.m. Still alternatively, nano-network 28 may have a structure that exhibits scaling behavior, mufti-scaling behavior, fractal characteristics, and the like. Yet alternatively, nano-network 28 may have a structure that includes orientations of molecular circuit components 14 with respect to an arbitrary axis that follow a lcnown random distribution, such as a Poisson distribution of several molecules between nanoparticle in the network. Still yet alternatively, nano-network 28 may have a structure that includes positions of the centers of mass of molecular circuit components 14 that follow a known random distubution, such as is characteristic of non-crystalline or amorphous solids. It will be understood that the term "r andom" as used herein may include any other conventional definition and may be used interchangeably with the terms "disordered" and "irregular." Further, it will be understood that randomness may occur for certain predetermined .length scales. In particular, the term random network here includes a network with little long-range order. Long-range may denote distances long with respect to the length scale of the components malting up a network.
A random arrangement of molecular circuit components 14 in molecular electronic device 10 has the advantage that device 10 may be fault tolerant.
Still refen-ing to Figure l, in one preferred embodiment, nano-network 28 is self-assembled. As is known in the art, a self-assembled networlc is one that has created itself from its component parts in response to a stimulus, such as a change in reaction conditions. A self assembled nano-network preferably has a non-predetermined structure. Further, a self-assembled nano-network in this embodiment preferably has only short range order between adjacent nanoparticles and preferably is disordered for longer length scales.
Nano-networks suitable for use in the present invention include but are not limited to nano-networks made as in the following description. Metal nanoparticles are deposited on an oxide grid. The oxide grid may be a semiconductor substrate from which material has been removed to define a hole that provides the boundaries of the nano-network. A
molecular self-assembled monolayer coating each nanoparticle may be used to control the spacing between nanoparticles. Molecular switches are inserted into the inert self-assembled monolayer barrier around each nanoparticle via processes that have previously been demonstrated, and thereby inter-link adjacent nanoparticles. The processes have been disclosed in Dunbar, T. D.; Cygan, M. T.; Bumm, L. A.; McCarty, G. S.; Burgin, T. P.; Reinerth, W. A.; Jones, II, L.; Jaclciw, J. J.;
Tour, J. M.; Weiss, P. S.; Allara, D. L. J. Phys. Clzem. B. 2000, 104, 4880-4893, hereby incorporated herein by reference.
Still referring to Figure 1, nano-networks 28 that are trainable and include any suitable conventional molecular circuit components are contemplated. Thus, molecular circuit components 14 may be selected from among molecular wires, molecular rectifiers, molecular diodes, molecular switches, molecular resistors, molecular transistors, and the like and combinations thereof. A molecular wire, rectifier, diode, switch, resistor, or transistor is any molecule that can function in a circuit analogously to a conventional wire, rectifier, diode, switch, resistor, or transistor, respectively. Exemplary molecular wires include oligo(phenyleneethynylene), and the like. Exemplary molecular rectifiers include hexadeculquinolinium tricyanoquinodimethanide, and the like.
Still referring to Figure 1, molecular circuit elements 14 preferably include conjugated molecular segments. The conjugated molecular segments are preferably substituted with groups at the termini that function as molecular alligator clips. Exemplary conjugated molecules that serve as conjugated molecular segments for molecular circuit elements, and exemplary conjugated molecules functionalized with molecular alligator clips are described in: Tour, J. M.
"Molecular Electronics. Synthesis and Testing of Components," Accounts of Chemical Research, volume 33, number 11, pages 791-804 (2000); Tour, J. M.; Kozal~i, M.; and Seminario, J. M. "Molecular Scale Electronics: A Synthetic/Computational Approach to Digital Computing," J. Am. Chem. Soc. 120, 8486-8493 (1998); Dirlc, S. M., et al.
"Accoutrements of a molecular computer: switches, memory components and alligator clips,"
Tetrahedron 57, pp.
5109-5121 (2001), each hereby incorporated herein by reference. Further, molecular circuit components 14 may include any of the molecules, conductive organic material, or conductive paths disclosed in U.S. Patent Application Serial Number Attorney Docket Number OCR 1049, filed April 18, 2000, entitled "Molecular Scale Electronic Devices", which is incorporated by reference herein.
Molecular circuit element 14 is preferably a molecule that exhibits negative differential resistance. Conventional resonant tunneling diodes also exhibit negative differential resistance.
However, conventional resonant tunneling diodes are based on gallium arsenide.
Negative differential resistance is a particular useful property in designing logic as it allows negation.
Refernng now to Figure 3, a molecular circuit component 14 may be a molecular diode 30. Exemplary molecular diodes include a mono-vitro substituted oligophenylene 32, in particular 4,4'-diphenyleneethynelene-2'-vitro-1-benzenethiol and a di-vitro substituted oligophenylene 34, in particular 2',5'-dinintro-4,4'-diphenyleneethynylene-1-benzenethiol.
Alternative molecular diodes include the dithiol substituted analogs of molecules 32 and 34, in particular 4,4'-diphenyleneethynelene-2'-vitro-1,4"-benzenedithiol and 2',5'-dinitro-4,4'-diphenyleneethynylene-1,4"-benzenedithiol, respectively. Each of these molecules includes a thiol group at each end. Such a configuration is preferred for molecular circuit elements 14 that contact gold at each end. As used herein the term molecular switch also, encompasses these molecules when they are in an electrical environment that allows them to function as a switch.
The electrical environment may be created by adding or changing'substituents, by bonding another molecule to the molecular diode, or by connecting the molecular diode, such as by a molecular alligator clip, to a circuit element.
Nanocell 12 may further include nanoscale components 40. Nanoscale components preferably are arrayed as part of nano-network 28. Nanoscale components may have functionality of electrical connectors, aiding the formation of molecular components 14 into a conductive network. Further, nanoscale components may have functionality of electronic circuit components, such as conductance, capacitance, resistance, impedance, and the like. Exemplary nanoscale components include nanotubes;. nanoparticles, nanorods, and combinations thereof.
Nanoparticles may be metallic, semiconducting, dielectric, and the like.
Exemplary nanopanicles and nanotubes are described in Reed, M.A. and Tour, J.M.
Scientific American 282, pp. 86-93 (2000), hereby incorporated herein by reference. Exemplary nanorods are described in Martin, B.R., et al. "Orthogonal self assemble on colliodal gold-platinum nanorods," Adv. Mater. 11, pp. 1021-1025 (1999), hereby incorporated herein by reference.
It will be understood that where one molecular circuit component 14 is depicted by a line in Figure 1, a plurality of molecular circuit components 14 may be substituted. For example, a plurality of molecular circuit components 14 may contact each of a pair of nanoscale components 40, spanning the nanoscale components.
Referring still to Figure 1, in an exemplary arrangement, a nanocell 10 includes molecular switches 52 and nanoparticles 54. Nanoparticles 54 are preferably metallic, more preferably gold. Molecular switches 52 are preferably switches with thiol molecular alligator clips at each end, more preferably 2',5'-dinitro-4,4'-diphenyleneethynylene-1,4"-benzenedithiol.
Edge molecular switches 56 connect to input leads 20 and output leads 22.
Molecular switches 52 interconnect nanoparticles 54. Interconnect is here used in the sense of enabling electrical continuity. In this sense, in an alternative view, nanoparticles 54 interconnect molecular switches 52. Further, the electrical continuity supplied by a molecular switch 52 need not be permanent and can be interrupted by configuring molecular switch 54.
Nano-networle 28 is preferably foamed by molecular switches 52 and nanoparticles 54.
In particular, nanoparticles 54 are preferably arrayed With little or no order. Further, molecular switches 52 interconnect nanoparticles 54. Not all nanoparticles 54 connect to other nanoparticles 54 and some nanoparticles 54 are connected to more than one or more than two other nanoparticles, and connections may be randomly distributed.
It will be understood that the impedance properties of a nanocell 12 may be optimized by varying any one or combination of a metal of nanoparticles 54, a conjugated baclcbone of malecular circuit component 14, the moiety for the alligator clip of molecular circuit component 14, the geometry of leads 20, 22, and other suitable properties for adjusting impedance.
It will further be understood that molecular circuit components 14 may be multiple state molecules, such as three, four, five, or six state molecules. For example, Coo has six independent states that are attained by incrementally taping up six electrons. Thus, molecular circuit components 14 are not limited to binary "0" and "1", or "on" and "off" logic and, for example, tertiary and quaternary logic are contemplated.
Referring now to Figure 5, a plurality of programmable electronic devices 62, preferably nanocells 64, may be interconnected by standard lithographically produced metallic wires to foam a molecular computer 66. Nanocells 64 are preferably constructed as described above with respect to Figure l, more preferably as shown, for example, in Figure 4. Any conventional architecture for interconnection by wires 65 is contemplated.
Programmability Referring again to Figure 1, molecular electronic device 10 is preferably programmable.
More particularly, molecular electronic device 10 is preferably programmable with a self-adaptive algorithm. As used herein, a self-adaptive algorithm is one that can "evolve" using an iterative process in which the algorithm queries and adjusts a system in order to move the system toward a desired state. More particularly, self-adaptive algorithms are a class of algorithms that include a set of rules for comparing an actual outcome of a system to a target outcome, and adjusting an input to the system based on a function of the difference between the actual outcome and the target outcome. A next actual outcome is associated with the adjusted input according to the behavior of the system. By repeatedly adjusting the inputs, the actual outcome converges to the target outcome. In this way, the self-adaptive algorithm trains the system.
Molecular device 10 is preferably programmable by a self-adaptive algorithm for configuring molecular circuit components 14.
In one preferred embodiment, molecular circuit components 14 are preferably configurable by applying a voltage across leads 20, 22. For example, molecular circuit components 14 may include molecules for which a conductivity-affecting property is adjustable by applying a voltage across leads 20, 22. The conductivity-affecting property that is adjusted is preferably selected from the group consisting of: charge, conformational state, electronic state, and the like, and combinations thereof.
It will be understood that molecular circuit components 14 may be configurable by other methods Oligophenylene-based molecular wires and switches are exemplary of molecules whose conductivity is affected by charge, electronic state, and conformational state. It is believed that applying a voltage across these molecules can effect transitions between electronic states. The voltages may cause the molecule to hold an electron; thus increasing its charge. Further, when charged, the molecule transitions to an excited electronic state. The phenyl rings rotate with respect to each other so that electronic orbitals, such as pi-orbitals, align, forming a molecular orbital extending the length of the molecule. In the presence of an applied voltage, it is believed that electronic continuity is established through the molecular orbitals and the molecule conducts. A description of a molecular mechanism of switching functionality is contained Donhauser, Z.J. et al., Science 292, pp. 2303-2307 (2001), hereby incouporated herein by reference.
In a preferred arrangement, the electrical characteristics of the materials used to make the leads contacting the molecule are matched to the energetics of the molecular electronic transitions. In particular, it is preferred that the Fermi energy of the metal contacting a conjugated molecular circuit element are close in energy to the lowest unoccupied molecular orbital (LUMO) energy of the molecular circuit element. This has the advantage of optimizing the impedance characteristics of the connection between the metal and the molecule.
Operation of molecular switches differs from molecular wires. The conductivity of switches can be switched to a state that is stable for a relatively long time by applying and then removing a voltage. Referring to Figure 3, stability times of at least 24 hours have been obtained with molecule 34. Further, it is expected that improved sealing of the system containing a molecular switch; use of similar oligophenylene-based molecules with multiple vitro groups; or use of new classes of molecules will permit longer stability times, such as days or months. A preferred molecular switch is configurable by applying a switching voltage and operates in either a high or low conductivity state by applying an operating voltage that is less than the switching voltage.

Referring now to Figure 3, operation of a molecular switch is exemplified by operation of a molecule 34. When a switching voltage above 2.0V is applied to molecules 34, molecules 34 switch to the high conductivity state and when a corresponding voltage below -2.OV is applied the molecules 34 will switch to a low conductivity state. The switching voltage is preferably between about 0.2 and 3.0V for the high state and -0.2 and -3.OV
for the low conductivity state. The high conductivity state is associated with the I(V) curve that is traced by black dots and the low conductivity state is associated with the lower I(V) curve, traced by white dots, in Figure 4. The degree of differentiation between the high and low conductivity states is determined by the difference between these' two curves. When an operating voltage between about -2 V and 2V is applied to molecules 36 they conduct according to the state, high or low conductivity, that they were most recently switched to. A molecule in the high conductivity state will also exhibit low conductivity if a voltage exceeding the negative differential resistance (NDR) limit is applied. The degree of differentiation between high and low conductivity of a molecule in the high conductivity state that is due to the NDR effect is determined by the ratio between the peals and valley on the I(V) curve traced by the black dots.
The absolute value of the operating voltage is preferably between about 0.2 and about 2.0V.
Referring again to Figure 1, nanocell 12 is preferably programmable by an algorithm for setting molecular switches 54.~Molecular switches 54 are preferably settable by applying a voltage across leads 20, 22. It is preferred that a self adaptive algorithm for programming nanocell 10 be capable of learning voltage combinations that can be applied to leads 20, 22 that will configure remote molecular switches, that is molecular switches not directly connected to leads 20, 22.
It will be understood that the type of the self-adaptive algorithm is not critical. Any suitable conventional self-adaptive algorithm capable of training a network such as nano network 28 may be used. Exemplary self-adaptive algorithms include genetic algorithms, simulated annealing algorithms, reinforcment learning algorithms, temperoral difference algorithms, go with the winner algorithms, and the like. The principles of self-adaptive algorithms are described in Goldberg, D.E., Genetic algorithms in Search, Optimization, and Machine Learning, (Addison Wesley, Reading, MA, 1989), pp. 1-15 and 221-229, hereby incorporated herein by reference.
Self-adaptive algorithms have the advantage of being error-resilient. Further, the use of a self-adaptive algorithm also provides the advantage of fault tolerance.
Thus, molecular electronic device 10 is adapted to be manufactured by methods of self assembly that can be implemented on an industrial scale with cost-effective reliability. The self-adaptive algorithm may be encoded in an auxiliary computer.
An advantage of the present invention is that the programmability of molecular electronic device 10 means that the device, as first assembled, need not function as a specified logic device. Thus, molecular electronic device 10, nanocell 12, and nano-network 28 need not have a predetermined structure. Nanocell 12, and in particular nano-network 28 may be self-assembled into an indeterminate structure that may be random. A self-adaptive algorithm may be used to program device 10 to function as a desired device.
In a preferred embodiment, device 10 is programmable to function as a logic unit selected from the group consisting of AND, OR, XOR, NOR, NOT, and NAND gates and the like. Thus, in this embodiment, when device 10 has been programmed, it is a programmed logic device with the logic element being selected from the group consisting of AND, OR, XOR, NOR, NOT, NAND, and the like.
In another preferred embodiment, device 10 is programmable to function as a logic unit selected from the group consisting of an Adder, a Half-Adder, a Multiplexor, a Decoder, or and the like. Thus, in this embodiment, when device 10 has been programmed, it is a programmed logic device with the logic element being selected from the group consisting of an Adder, a Half-adder, a Multiplexor, a Decoder, and the like. In yet another preferred embodiment, device 10 is programmable to function as a memory unit.
It will be understood that device 10 preferably may function as any gate having a truth table supported by input/output pins.
Device 10 is preferably reprogrammable. In particular, device 10, initially programmed to function as one of the above-described logic or memory units can be reprogrammed to function as another of the above-described logic or memory devices. Thus, device 10 has the advantage of versatility.
The above-described programmability preferably is achieved by using the preferred topologies of nanocell structures described above in combination with the preferred programming methods described below.
Programming method A preferred method of malting an electronic component includes providing a self assembled nanocell and programming the nanocell to function as the electronic component.
The nanocell is preferably a nanocell according to any of the embodiments described above.

Programming the nanocell preferably includes configuring the molecular circuit components. Configuring the molecular circuit components preferably includes adjusting a conductivity-affecting property of at least one of the molecular circuit components by applying a voltage across the input lead and the output lead. The conductivity-affecting property may be selected from among any of the above-described conductivity-affecting properties.
Programming the nanocell preferably further includes testing the performance of the nanocell. For example, the performance may be tested by comparing input/output operating voltage relationships of the nanocell to a target truth table, such as a desired logic truth table.
Programming the nanocell preferably still further includes repeating the steps of configuring the molecular circuit components and testing the performance of the nanocell until the nanocell functions as the electronic component desired. For example, the steps may be repeated until the input/output operating voltage relationships match, within a desired predetermined error, the above-described target truth table. Once programmed, the electronic component serves as any of the above-described logic or memory units or other similar device.
Providing a self-assembled nanocell preferably includes allowing a plurality of nanoscale components to self-assemble into a random array, allowing the plurality of molecular circuit components to self-assemble into an interconnected network between the nanoscale components, and bonding the molecular circuit components to the nanoscale components with molecular alligator clips. The random array may be an array with short-range order and long-range disorder. The molecular alligator clips may include any of the above-described moieties useful as molecular alligator clips. A preferred moiety is a thiol group. The nanoscale components may be, for example, any of the above-described nanoscale components. The molecular circuit components may be, for example, any of the above-described molecular circuit components.
Any embodiment described above for programming or training a nanocell can be used to assemble a computer from a plurality of nanocells. One method of malting a computer preferably includes providing a plurality of trained self-assembled nanocells, interconnecting the trained nanocells to a plurality of untrained nanocells, and allowing the trained nanocells to train the untrained nanocells. An advantage of the above method.is that the trained nanocell is used in the bootstrap training of the untrained nanocell. Thus, the method may include hierarchically repeating interconnecting the nanocells and using the latest trained nanocells to train the untrained nanocells. In this way, a molecular computer may be rapidly and efficiently made from a plurality of nanocells.

EXAMPLES

Synthesis of conjugated molecules Switches and Memory Components In an effort to improve the electron storage time by adding more nitro groups, synthetic targets 1 and 2 were chosen. The SAc group is easily cleaved to the free thiol (SH) upon treatment with acid or base. The synthesis of compound 1 is outlined in scheme 1.
N02 NOz \ / - \ / - \ / SAc / \ \ / - \ / SAc The synthesis of 1 began by Sonogashira coupling 2,5-dibromo-4-nitroaniline (3) to phenylacetylene affording 4 which was subjected to an HOF oxidation forming 5.
A final coupling produced desired compound 1 in 24% yield. The low yield in this coupling may be indicative of the easily deprotected thiol or a stable palladacycle intermediate that formed during coupling.
Scheme 1 NHZ Pd(PPh3)2CI2 NH2 Cul HOF
Br \ / Br \ / \ / Br EtOAc 02N \ / - H 02N 60%

Pd(dba)Z
N02 Cul NOz Hunig's Base / - \ / Br 24% \ / \ / - \ / SAc 02N _ OzN
AcS \ / - 1 In order to conduct electrons all the phenyl rings in the conjugated molecule should be preferentially planar to each other. If a phenyl group replaces the terminal phenylethynyl group, the system cannot attain planarity. In an effort to determine the effect of a rotational baurier (i.e. conduction barrier), the synthesis of compound 2 was initiated via a Suzulci coupling of 2,5-dibromo-4-nitroacetanilide (6) to phenyl boronic acid to form compound 7.
The acetyl group was removed to provide the aniline (8) functionality that would subsequently undergo an HOF oxidation to afford 9 in nearly quantitative yield. A final Sonogashira coupling provided 2.
Scheme 2 Scheme 3 Pd(PPh3)zClz NHAc NHAc NHz o-B(OH)z_ Br Br \ / / \ zC03 / \

\ / Br Br toluene \ / MeOH - \ /

OzN Cs CO OzN CHZCIz OzN

84% 100%

Pd(dba)z NOz Cul NOz HOF Hunig's - -Base / \
/ \

Br - SAc \ / \ / \ /

EtOA c '- PPH3 (39%) AcS \ / _ / \ = H

Brz, AcOH ~ (xs) / \ Br / \ Br 81 % Pd/Cu H3C0 H3C0 92 %

CAN / H O
/ \ - / \ - \ / z / \ - / / - \ /

H3C0 p 10 13 was synthesized for the purpose of studying the electrochemical properties of the quinone-containing molecular system. Scheme 3 shows the synthesis of 13 from 1,4-dimethoxybenzene (10). 10 was converted to 11 using bromine and glacial acetic acid in good yield. Compound 11 was then cross-coupled with an excess of phenylacetylene to afford compound 12 which was then oxidized to the quinone affording desired compound 13. This synthetic route had to be used because quinones generally cannot be used in the palladium-catalyzed couplings since quinones are known to oxidize palladium(0) to palladium(I~, terminating the catalytic cycle. Ceric ammonium nitrate (CAN) is a mild and neutral oxidizing agent known to generate quinones from dimethoxybenzenes and therefore was a logical choice for this procedure.l8 This oxidation afforded the desired quinone compound in 47 % yield.
The optimum conditions for the oxidation have not yet been obtained for these systems.

Scheme 4 OCH3 / \ - H OCH3 Br / \ Br / \ - / \ Br 1 ) TMSA, Pd/Ou 79°/
H3C0 PdICu H CO 2) KzCOa,MeOH 79%
11 33°/

OCH3 I / \ SAc OCH3 / \ - / \ - H / \ / \
- - \ / SAc Pd/Cu H3C0 15 76% H3C'~ i6 O
CAN/Hz0 -/ \ - / / - \ / SAc 74%
O
i7 Scheme 4 shows the synthesis of the quinone-containing molecular system with one thioacetate group serving as a protected alligator clip. Cross-coupling of 11 with phenylacetylene afforded 14 in a modest yet statistically expected yield of 33% due to the equal reactivity of both aryl bromides of 11 under Sonogashira coupling conditions.
15 was prepared by the cross-coupling of trimethylsilylacetylene with 14 followed by deprotection of the alkyne to afford 15. Further palladium-catalyzed cross-coupling with 4-iodobenzenethioacetate afforded compound 16. The final compound 17 was obtained in 74% yield via the CAN
oxidation. However, this yield was an isolated incident. Other attempts resulted in much lower yields (~ 20 %). More work is underway to optimize the conditions of this CAN
oxidation.
Scheme 5 I / \
SAc OCH
OCH 1 ) TMSA (xs), (2 eqiv) Pd/Cu, 79 % / \

Br / H = - H
\ Br 2) KpC03, MeOH,-98% d/Cu H3C0 H3C'~ 85%

/ \ / \

AcS -- \ / SAc O

AcS - / / - \ /
/ \ SAc O

Scheme 5 shows the synthesis of the quinone-containing molecular system with alligator clips on both ends (5). This compound can be used to crosslinlc metallic nanoparticles for bridging connections in future molecular electronic devices. 11 was cross-coupled with an excess of trimethylsilylacetylene followed by a subsequent deprotection to cleanly afforded the diyne 18. This was subsequently cross-coupled with 2 equivalents of 4-iodobenzenethioacetate to afford compound 19. Finally, 19 was oxidized using the CAN procedure to generate 20 in modest yield.
ALLIGATOR CLIPS
The synthesis of several compounds containing a pyridine alligator clip for incorporation into a molecular electronic device began with compound 21. The synthesis of 22 was accomplished by coupling pyridine 21 with 2,5-dibromonitrobenzene as shown in eq 1.
The low yield may be due to a stable copper acetylide formed after the TMS
group is cleaved.
If an irZ situ deprotection was not used, the pyridine allcyne proved to be unstable.
K2C03, MeOH, NOz 15 .
Pd(PPh3)zClz, Br ~ ~ Br + N~ ~ - TMS N\ ~ - ~ - ~N (1) Cul, 24%.

24 was synthesized according to Scheme 6. The synthesis began by coupling one equivalent of 21 to 2,5-dibromonitrobenzene selectively to the position ortl2o to the vitro group affording 23. Coupling 23 to phenylacetylene to produce 24 completed the synthesis.
Scheme 6 _ KzC03, MeOH, Br~Br + N~TMS N7 ~ - ' Br Pd(PPh3)zClz.
OzN 21 Cul, 71 % OzN

- -N/ \
Et3N, Pd(PPh3)zClz, Gul, 69 % . 02N

The synthesis of compound 26 was initiated to study the effect of the vitro group in relation to the chemisorbed pyridine alligator clip. To this end, compound 24 was synthesized in a manor analogous to the synthesis of 23 as shown in Scheme 7. Coupling one equivalent of phenylacetylene selectively to 2,5-dibromonitrobenzene to produce 25 then coupling to 21 to afford 26 in good yield completed the synthesis.

Scheme 7 Pd(dba)z, Cul, _ 21, K2C03, MeOH, Br \ / Br + ~ - \ / Br _ Pd(PPh3)zClz, 02N \ / H OzN Cul, 79°/
47°/
NOz /\
N- - - \ /

Linker 28 was synthesized according to Scheme 8. The synthesis commenced with the coupling of 2,5-dibromo-4-nitroacetanilide with excess trimethylsilylacetylene to give 27, 5 which was then deprotected ira-situ and coupled with 4-iodopyridine to produce 28 in poor yield. The low yield of the coupling reactions could be due to a cyclization process between the nitro and the allcyne unit.
Scheme 8 NHAc NHAc / \ TMSA, Pd(dba)z, - N\ / I
Br~Br TMS = \ / - TMS
Cul, 47 % K2C03, MeOH, OZN 02N 27 Pd(PPh3)zClz, CUI, 16°/.
NHz / \
N - \ / - \ /N

10 Compound 31 was synthesized in an effort to form a SAM via the protected benzenethiol terminal group enabling the pyridyl end of the molecule to serve as a better top contact with metal than a phenyl when incorporated into a device. 31 was synthesized by coupling the 2,5-dibromo-4-nitroacetanilide with 21 in a low yield to afford compound 29.
29 was then coupled with trimethylsilylacetylene, followed by deprotection with potassium 15 carbonate to yield 30. finally, 30 was coupled with 4-iodobenzenethioacetate, which afforded the molecular device 31 in good yield (75 °70).
Scheme 9 NHAc NHz 21, K2C03, MeOH, - - 1) TMSA, Pd(PPh3)zClz, Cul Br / \ Br Pd(PPh3)zClz, Cul, 39% N\ / - \ / Br 2) KzCOs~ MeOH, 88% ' OzN 29 OzN
NHz ~ NHz _ _ I / \ SAc _ _ _ N\ / - \ ~ - H N\ / - \ / - \ / SAc O N Pd(PPh3)zClz, Cul O N
z z 32 was synthesized to study the effect of a rotational barrier analogous to that described for 2. The synthesis of 32 began with previously synthesized 7 and coupling to 21 in good yield as shown in eq 2.
NHAc NHz _ 2 21, KzC03, MeOH, \ / \ / Br ~ \ / \ / - \ /N (2) Pd(PPh3)zClz.
OZN Cul, 79%. OzN

Compound 34 was synthesized according to eq 3 using the previously described 33.
Compound 34 is analogous to a thiol terminated nitroaniline that previously exhibited negative differential resistance (NDR) in a device embodiment.
NHAc NHz / \ - 21, KzC03, MeOH, / \
Br - - N
\ / PdClz(PPh3)z, Cul ' \ / \ /
OzN 34 % 02N

In addition to the pyridine containing systems, three potential memory and switching components terminated by diazonium salts were synthesized. 38 is analogous to the thioacetyl terminated NDR and memory component) and the pyridyl terminated 24. The synthesis of 38 began by coupling 35~ to 2,5-dibromonitrobenzene in moderate yield to afford 36 which was then coupled to phenylacetylene to produce compound 3'7. Diazotization of 37 produced the completed molecule 38 in good yield.
Scheme 10 Br \ /NOBr -NOz \ /
/\ ~/ Pd(PPh3)zCiz, Cu( Br - - NHz Pd(PPh3)zClz, Cul HzN-( -49% \ / \ / 97%

NOBF4, CH3CN ~ O ~ _ \ / - \ / - \ / NHz \ / ~ \ / - \ / Nz BF4 Sulfolane 40 is similar in structure to 26 except the pyridyl group has been replaced with the aryl diazonium salt. The synthesis of 40 is shown is Scheme 11. Coupling aniline 35 to nitrocompound 25 produced diazonium precursor 39 in moderate yield.
Diazotization of aniline 42 afforded desired product 37.
Scheme 11 OzN
\ / \ / Br + HzN ~ / - Pd(PPh3)2CIz~ Cul 44%

NOBF4, CH3CN
- - ~ NHz -Sulfolane 39 77%
OZN
\ / - \ / - \ / N2 BF4 Nanoparticle linker 43 was synthesized according to Scheme 12. Starting from dinitro 4I and coupling aniline 35 afforded dinitrodianiline 42 which was subsequently diazotized to produce 43 in good yield.

Scheme 12 Experimental NOz NOz 35, Pd(PPh3)zClz, Br \ / Br HzN \ / - \ / .- \ / NHz Cul, 43%

4~ 42 NOz NOBF4, CH3CN _ .~ - - - ~ _ Sulfolane BF4 Nz \ / \ / - \ / Nz BF4 72% OpN

10 General Procedure. All reactions were carried out under a dry nitrogen atmosphere unless noted. Reagent grade diethyl ether, and tetrahydrofuran (THF) were distilled under nitrogen from sodium benzophenone lcetyl. Reagent grade dichloromethane (CH2Clz) was distilled from calcium hydride (CaH2) under nitrogen. Triethylamine and N,N-diisopropylamine (Hiinig's base) were distilled over CaH~ under a nitrogen atmosphere. Bullc 15 hexanes were distilled prior to use. Gravity column chromatography and flash chromatography were carried out using 230-400 mesh silica gel from EM Science. Thin layer chromatography (TLC) was peuomned using Merclc 40 F254 on a thickness of 0.25 mm.
General Pd/Cu Coupling Reaction Procedures. To an oven dried glass screw capped tube were added all solids including the aryl halide (bromide or iodide), alkyne, copper iodide, 20 triphenylphosphine and palladium catalyst. The atmosphere was removed via vacuum and replaced with dry nitrogen (3x). THF, remaining liquids, and Hiinig's base or triethylamine were added and the reaction was heated in an oil bath while stirring. Upon cooling the reaction mixture was filtered via gravity filtration to remove solids and diluted with CHZC12. The reaction mixture was extracted with an aqueous solution of ammonium chloride (NH~.CI) (3x).
The organic layer was dried with magnesium sulfate and filtered. The solvent was then removed in vacuo.
General Procedure for the Deprotection of Trimethylsilyl-Protected Alkynes. To a round bottom flask equipped with a stir bar were added the protected allcyne, potassium carbonate (5 equiv per protected allcyne), methanol, and methylene chloride.
The reaction was heated, and upon completion the reaction mixture was diluted with methylene chloride and washed with brine (3~e). The organic layer was dried over MgS04, and the solvent removed irZ
vacuo.
General HOF Oxidation Procedure. To a 125 mL polyethylene bottle were added H20 (2 mL) and CH3CN (60 mL) and cooled to -20 °C. F2 (20% in He) was then bubbled through the solution at a rate of 50 scan for 2~h. The resulting HOF/CH3CN
solution was purged with He for 15 min. The species to be oxidized was added in acetone or ethyl acetate (10'mL) and mixed at -20 °C for 5 min before being neutralized by pouring into a saturated NaHC03 solution. The organic phase was then separated, dried over MgS04 and the solvent were removed in vacuo.
General Procedure for the Diazotization of Anilines with Nitrosonium Tetrafluoroborate in the Acetonitrile - Sulfolane System. NOBF4 was weighed out in a nitrogen filled dry box and placed in a round bottom flask equipped with a magnetic stirring bar and sealed with a septum. Acetonitrile and sulfolane were injected in a 5 to 1 volume ratio and the resulting suspension was cooled in a dry ice/acetone bath to - 40 °C. The solution of the aniline was prepared by adding warm sulfolane (45-50 °C) to the amine under a nitrogen blanket, sonication for 1 min and subsequent addition of acetonitrile (10-20%
by volume). The aniline solution was then added to the nitrosonium salt suspension over a period of 10 min. The reaction mixture was kept at - 40 °C for 30 min and was then allowed to warm to the room temperature. At this point, the diazonium salt was precipitated by the addition of ether 'or dichloromethane, collected by filtration, washed with ether or dichloromethane and dried.
Additional purification of the salt was accomplished by re-precipitation from DMSO by dichloromethane and/or ether.
4-Ethynlphenyl-2,4-dinitrobromobenzene (5). 2-Bromo-4-nitro-5-ethynlphenylaniline (490 mg, 1.48 mmol) in ethyl acetate (10 mL) was oxidized according to the general HOF oxidation procedure to yield 320 mg (60 %) of a yellow solid.
1R (KBr) 3442.7, 3101.4, 2216.8, 1610.6, 1540.9, 1461.3, 1384.8, 1358.7, 1337.1, 1264.4, 906.2, 849.6, 824.4, 760.2, 689.8 cm'. 'H NMR (400 MHz, CDC13) S 8.41 (s, 1 H), 8.09 (s, 1 H), 7.60-7.58 (m, 2 H), 7.41-7.39 (m, 3 H). '3C NMR (100 MHz, CDCl3) 8 152.1, 150.4, 132.7, 131.7, 131.0, 130.7, 129.1, 121.5, 119.8, 113.9, 102Ø HRMS Calc'd for 345.9589.
Found:
345.9585.
2',5'-Dinitro-4,4'-diethynylphenyl-1-thioacetylbenzene (1). 4 (300 mg, 0.86 mmol), 4-ethynyl(thioacetyl)benzene (183 mg, 1.04 mmol), bis(dibenzylideneacetone)palladium (12 mg, 0.02 mmol), copper(I) iodide (4 mg, 0.02 mmol), triphenylphosphine (13 mg, 0.05 mmol), Hunig's base (0.60 mL) and THF (20 mL) were reacted according to the general coupling procedure. The reaction mixture was heated at 60 °C overnight and worked up according to the procedure above. The crude compound was purified via flash chromatography (silica, 3:1 dichloromethane:hexane) to yield 90 mg (24%) of a bright yellow solid. IR
(KBr) 2220.2;
1705.2, 1545.5, 1499.81, 1396.8, 1337.5, 1286.1, 1252.1, 1108.6, 1087.2, 953.2, 926.0, 868.3, 827.2, 756.7, 684.1, 618.3 cm'. 'H NMR (400 MHz, CDCl3) ~ 8.34 (d, J= 0.4, 1 H), 8.35 (d, J
= 0.4, 1 H), 7.63-7.59 (m, 4 H), 7.46-7.40 (m, 5 H), 2.49 (s, 3 H). '3C NMR
(100 MHz, CDCl3) 8 193.2, 151.1, 134.7, 133.1, 132.7, 131.0, 130.7, 129.1, 122.8, 121.7, 119.4, 118.6, 102.4, 100.9, 84.8, 83.5, 30.8. HRMS Calc'd for 442.0623. Found: 442.0634.
2-Bromo-4-nitro-5-phenylacetanilide (7). 6 (676 mg, 2 mmol), triphenylphosphine (52 mg, 0.2 mmol), phenylboronic acid (293 mg, 2.4 mmol), bis(triphenylphosphine)palladium dichloride (70 mg, 0.1 mmol), and cesium carbonate (977 mg, 3 mmol) were placed in a 100 mL round bottom flask and the atmosphere was removed and replaced with nitrogen. Toluene (30 mL) was added and the reaction was heated at 60 °C for 2 d. The reaction was worked up by diluting with ether, washing with aqueous ammonium chloride (2x), drying over MgS04, and removing the solvents irZ vacuo. The crude product was purified via flash chromatography (CH~Ch) to yield 430 mg (64%) of a white solid. IR (I~Br) 3373.6, 3322.4, 3086.5, 1774.0, 1681.7, 1568.9, 1528.8, 1445.8, 1389.4, 1358.6, 1245.8, 1179.1, 1112.5, 1056.1, 1030.4, 999.6, 872.0, 850.9, 768.9, 697.1 crri'. 'H NMR (400 MHz, CDC13) ~ 8.54 (s, 1H), 8.15 (s, 1H), 7.80 (br s, 1H), 7.40-7.38 (m, 3H), 7.29-7.27 (m, 2H) 2.26 (s, 3H). '3C NMR (100 MHz, CDC13) b 168.44, 143.77, 139.34, 137.74, 136.81, 128.67, 128.51, 128.47, 127.85, 123.31, 110.59, 25.05.
HRMS Calc'd for Cl4HmBrN2O3: 333.9953. Found: 333.9952.
2-Bromo-4-nitro-5-phenylaniline (8). 7 (500 mg, 1.49 mmol), potassium carbonate (1.031 g, 7.46 mmol), methanol (30 mL), and methylene chloride (30 mL) were added to a 100 mL round bottom flask and stirred at room temperature under a nitrogen blanket for 2 h. The reaction was worlced up by filtering off the K2C03 and washing with CH2C12 to yield 437 mg (100%) of the title compound. 1R (KBr) 3463.7, 3349.2, 3221.3, 1623.9, 1584.6, 1555.4, 1495.5, 1443.6, 1406.9, 1305.6, 1259.4, 1123.9, 1051.7, 896.7, 846.5, 760.1, 701.3, 632.1, 563.8 cml. 1H NMR (400 MHz, CDC13) 8 8.21 (s, 1H), 7.39-7.36 (m, 3H), 7.23-7.21 (m (overlapping), 2H), 6.61 (s, 1H). 13C NMR (100 MHz, CDC13) 8 148.5, 139.4, 138.5, 130.7, 128.8, 128.4, 128.2, 128.1, 117.2, 106.3. HRMS Calc'd for 291.9848. Found:
291.9846.
2,5-Dinitro-4-phenylbromobenzene (9). 8 (373 mg, 1.28 mmol) in ethyl acetate (10 mL) was oxidized according to the general HOF oxidation procedure to yield 407 mg (99 %) of a orange solid 1R (KBr) 3446.7, 3090.4, 1542.8, 1461.1, 1443.1, 1347.3, 1257.7, 1114.6, 1076.2, 1051.8, 1021.0, 904.5, 842.5, 768.8, 743.7, 699.9, 551.0, 485.16 crri 1. 1H NMR (400 MHz, CDC13) 8 8.16 (s, 1 H), 7.89 (s, 1 H), 7.47-7.45 (m, 3 H), 7.31-7.29 (m, 2 H). 13C NMR
(100 MHz, CDCl3) 8 151.5, 150.6, 137.2, 134.4, 130.8, 130.1, 129.7, 128.9, 128.1, 114.1.
HRMS Calc'd for 321.9589. Found: 321.9592.
2',4'-Dinitro-5'-phenyl-4-ethynylphenyl-1-thioacetylbenzene (2). 9 (147 mg, 0.46 mmol), 4-ethynyl(thioacetyl)benzene (106 mg, 0.60 mmol), bis(dibenzylideneacetone)palladium (26 mg, 0.05 mmol), copper(I) iodide (9 mg, 0.05 rnmol), triphenylphosphine (12 mg, 0.05 mmol), Hunig's base (0.16 mL) and THF (20 mL) were coupled according to the general coupling procedure. The reaction mixture was stirred and heated overnight at 45 °C. Crude product was purified via column chromatography (silica, 3:1 dichloromethane:hexanes) to yield 75 mg of an orange solid (39%). 1R (KBr) 2922.7, 2214.3, 1702.7, 1542.8, 1488.1, 1357.1, 1271.1, 1115.1, 1088.6, 956.0, 908.6, 829.9, 770.5, 707.0, 623.4 cm 1. 1H NMR (400 MHz, CDC13) ~ 8.16 (s, 1 H), 8.10 (s, 1 H), 7.63 (d, J
= 8.4, 2 H), 7.48-7.44 (m, 5 H), 7.36-7.33 (m, 2 H), 2.44 (s, 3 H). 13C NMR (100 MHz, CDC13) b 193.3, 151.2, 150.6, 136.8, 134.8, 134.7, 133.1, 130.8, 130.2, 130.1, 129.6, 128.6, 128.1, 122.9, 119.0, 99.8, 84.5, 30.8. HRMS Calc'd for 418.0623. Found: 418.0619.
2,5-Dibromo-1,4-dimethoxybenzene (11). In a 100 mL round bottom flask, 1,4-dimethoxybenzene (10.0 g, 72.4 mmol) was dissolved in glacial acetic acid (20 mL). A
solution of bromine (7.42 mL, 145.0 mmol) in glacial acetic acid (7.5 mL) was added dropwise to the first solution at room temperature over 40 min. The resulting mixture was allowed to stir for 2 h. The crude product was washed with ice-cold water and ice-cold methanol to afford fine white crystals. The mother liquor was concentrated and cooled to afford more white crystals (15.9 g, 74% yield). Mp 136-138 °C (litzl mp 144-145 °C). 1R (KBr) 3091.9, 3022.1, 2968.8, 2944.4, 2842.8, 1694.9, 1494.2, 1475.6, 1436.5, 1358.2, 1275.0, 1211.8, 1185.0, 1065.4, 1021.9, 860.5, 760.4, 441.8 cm 1. 1H NMR (400 MHz, CDCl3) X7.13 (s, 2 H), 3.87 (s, 6 H). 13C NMR (100 MHz, CDCl3) 8 150.93, 117.53, 110.90, 57.43.
2,5-Di(ethynylphenyl)-1,4-dimethoxybenzene (12). 11 (8.745 g, 29.55 mmol), bis(triphenylphosphine)palladium dichloride (0.415 g, 0.591 mmol), copper(I) iodide (0.225 g, 1.182 mmol), triphenylphosphine (0.310 g, 1.182 mmol), THF (35 mL), Hiinig's base (20.5 mL, 118 mmol), and phenylacetylene (7.8 mL, 70.92 mmol) were used following the general procedure for couplings. The solution was heated in a 65 °C oil bath for 3 d. Recrystallization from benzene afforded the desired product mp 175-177 °C (lit.l~ 176-177 °C) (9.22 g, 92 %).
1H NMR (400 MHz, CDCl3) 8 7.57 (m, 4 H), 7.34 (m, 6H), 7.03 (s, 2H), 3.89 (s, 6 H). 13C
NMR (100 MHz, CDC13) b 154.10, 131.89, 128.60, 128.50, 123.39, 115.86, 113.57, 95.23, 85.86, 56.66.
2,5-Di(ethynylphenyl)benzoquinone (13). 12 (0.300 g, 0.886 mmol) and THF (6 mL) were added to a 25 mL round bottom flask containing a stir bar. A solution of ceric ammonium nitrate (1.46 g, 2.658 mmol) in water (3 mL) was slowly added to the flask and allowed to stir for 15 min. Water was added and the organic materials were extracted with dichloromethane.
Flash column chromatography (silica gel using 1:1 hexanes/dichloromethane as eluent) afforded the desired product (0.129 g, 47 %). 1R (KBr) 3047.5, 2203.0, 1716.2, 1655.3, 1568.3, 1215.4, 1100.6, 902.1, 757.6, 686.4 cm 1. 1H NMR (400 MHz, CDCl3) ~
7.58 (dd, J =
7.9, 1.5 Hz, 4 H), 7.38 (m, 6 H), 6.99 (s, 2 H). 13C NMR (100 MHz, CDC13) b 182.87, 136.55, 133.34, 132.83, 130.57,128.97, 121.83, 105.26, 82.90. HRMS calc'd for C22,H12~~2~ 308.0837 Found: 308.0834.
2-Bromo-5-ethynylphenyl-1,4-dimethoxybenzene (14). 11 (2.96 g, 10.0 mmol), bis(dibenzylideneacetone)palladium '(0.115 g, 0.20 mmol), copper(I) iodide (0.038 g, 0.20 mmol), triphenylphosphine (0.131 g, 0.50 mmol), THF (15 mL), Hunig's base (6.97 mL, 40.0 mmol) and phenylacetylene (1.21 mL, 11.0 mmol) were used following the general procedure for coupling. The tube was heated in a 50 °C oil bath for 18 h. Column chromatography (silica gel using 19:1 hexanes/diethyl ether as eluent) afforded the desired product, somewhat impure (approximately 15°70 impurities by NMR) in moderate yield (1.02 g, 32%
yield). This was taken onto the next step in this impure form. 1H NMR (400 MHz, CDCl3) S 7.54 (m, 2 H), 7.33 ( m, 3 H), 7.09 (s, 1 H), 7.02 (s, 1 H), 3.86 (s, 6 H).
1,4-Dimethoxy-2-ethynylphenyl-5-(trimethylsilylethynyl)benzene. 14 (1.0 g, 3.15 mmol), bis(dibenzylideneacetone)palladium (0.036 g, 0.063 mmol), copper(I) iodide (0.012 g, 0.063 mmol), triphenylphosphine (0.042 g, 0.16 mmol), THF (20 mL), Hiinig's base (2.2 mL, 12.6 mmol), and trimethylsilylacetylene (0.89 mL, 6.3 mmol) were used following the general procedure for couplings. The tube was capped and heated in a 60 °C oil bath for 1 d. Flash column chromatography (silica gel using 24:1 hexanes/ethyl acetate as eluent) afforded the desired product slightly impure (0.83 g, 79% yield). 1H NMR (400 MHz, CDC13) 8 7.55 (m, 2 H), 7.32 (m, 3 H), 6.98 (s, 1 H), 6.95 (s, 1 H), 3.84 (s, 3 H), 3.83 (s, 3 H), 0.27 (s, 9 H).
1,4-Dimethoxy-2-ethynyl-5-(ethynylphenyl)benzene (15). 1,4-dimethoxy-2-ethynylphenyl-5-(trimethylsilylethynyl)benzene (0.830 g, 2.48 mmol), potassium carbonate (1.71 g, 12.4 mmol), methanol (50 mL), and dichloromethane (50 mL) were used following the general procedure for deprotection to afford the desired product (0.513 g, 79%
yield). 1H
NMR (400 MHz, CDCl3) 8 7.55 (m, 2 H), 7.33 (m, 3 H), 7.00 (s, 1 H), 6.98 (s, 1 H), 3.87 (s, 3 H), 3.86 (s, 3 H), 3.39 (s, 1 H).
4,4'-Di(ethynylphenyl)-2',5'-dimethoxy-1-benzenethioacetate (16). 15 (0.513 g, 1.96 mmol), bis(dibenzylideneacetone)palladium(0) (0.058 g, 0.10 mmol), copper(I) iodide (0.019 g, 0.10 mmol), triphenylphosphine (0.066 g, 0.25 mmol), THF (20 mL), Hiinig's base (1.37 mL, 7.84 mmol), and 4-(thioacetyl)iodobenzene (0.608 g, 2.16 mmol) were used following the general procedure for couplings. The tube was capped and heated in a 55 °C oil bath for 3 d. Flash column chromatography (silica gel using dichloromethane as eluent) afforded the desired product slightly impure (0.621 g, 76% yield). 1H NMR (400 MHz, CDCl3) S 7.57 (m, 4 H), 7.38 (d, J= 8.1 Hz, 2 H), 7.33 (m, 3 H), 7.03 (s, 1 H), 7.02 (s, 1 H), 3.874 (s, 3 H), 3.870 (s, 3 H), 2.40 (s, 3 H).
2-Ethynylphenyl-5-((4'-thioacetyl)ethynylphenyl)benzoquinone (17). 16 (0.050 g, 0.12 mmol), acetonitrile (5 mL), and THF (5 mL) were added to a 25 mL round bottom flask containing a stir bar. A solution of ceric ammonium nitrate (0.13 g, 0.24 mmol) in water (1 mL) was added in one portion. After stirring at room temperature for 30 min, another equivalent solution of ceric ammonium nitrate (0.13 g, 0.24 mmol) was added.
After 20 additional min, the reaction was quenched by adding water (30 mL) to effect precipitation of an orange solid. Flash column chromatography (silica gel using dichloromethane as eluent) afforded the desired product (0.034 g, 74% yield). IR (I~Br) 3053.0, 2924.3, 2852.6, 2205.4, 1703.4, 1652.7, 1568.8, 1483.7, 1442.2, 1354.8, 1221.3, 1105.4, 1089.4, 949.6, 920.1, 830.9, 758.2, 688.2, 620.6 cm 1. 1H NMR (400 MHz, CDC13) 8 7.58 (m, 4 H), 7.42 (m, 2 H), 7.38 (m, 3 H), 6.98 (s, 1 H), 6.97 (s, 1 H), 2.42 (s, 3 H). 13C NMR (100 MHz, CDCl3) 8 193.22, 182.74, 182.67, 136.88, 136.51, 134.63, 133.34, 133.24, 132.99, 132.84, 130.94, 130.63, 128.99, 122.81, 121.80, 105.38, 103.99, 84.17, 82.92, 30.80. HRMS calc'd for C~~,H14,03,5: 382.0664.
Found: 382.0663.
1,4-Dimethoxy-2,5-bis(trimethylsilylethynyl)benzene. 11 (1.75 g, 5.91 mmol), bis(triphenylphosphine)palladium dichloride (0.207 g, 0.296 mmol), copper( iodide (0.113 g, 0.591 mmol), triphenylphosphine (0.155 g, 0.591 mmol), THF (20 mL), Hiinig's base (4.1 mL, 23.64 mmol), and trimethylsilylacetylene (2.51 mL, 17.73 mmol) were used following the general procedure for couplings. The tube was capped and heated in a 55 °C oil bath for 2 d.
Flash column chromatography (silica gel using 1:1 hexanes/dichloromethane as eluent) afforded the desired product (1.54 g, 79 % yield). 1R (KBr) 2957.0, 2898.2, 2851.2, 2829.0, 2149.1, 1496.8, 1464.1, 1449.1, 1388.2, 1283.7, 1249.0, 1223.6, 1203.1, 1172.4, 1039.6, 883.2, 841.3, 757.4, 714.9, 696.2, 626.4 crri'.'H NMR (400 MHz, CDCl3) X6.89 (s, 2 H), 3:81 (s, 6 H), 0.25 (s, 18 H) '3C NMR (100 MHz, CDC13) 8 154.56, 116.59, 113.81, 101.22, 100.84, 56.83, 0.40. HRMS calc'd for C18,H2~,02,Si2: 330.1471, Found: 330.1468.
1,4-Dimethoxy-2,5-diethynylbenzene (18). 1,4-Dimethoxy-2,5-bis(trimethylsilylethynyl)benzene (1.50 g, 4.54 mmol), potassium carbonate (6.27 g, 45.4 mmol), methanol (50 mL), and dichloromethane (50 mL) were used following the general procedure for deprotection to give the desired product (0.829 g, 98 %). 'H NMR
(400 MHz, CDC13) 8 6.96 (s, 2 H), 3.84 (s, 6 H), 3.37 (s, 2 H).
2,5-Bis(4'-(thioacetyl)ethynylphenyl)-1,4-dimethoxybenzene (19). 18 (0.810 g, 4.35 mmol), bis(dibenzylideneacetone)palladium (0.253 g, 0.44 mmol), copper(I) iodide (0.084 g, 0.44 mmol), triphenylphosphine (0.115 g, 0.44 mmol), TI-~ (30 mL), Hiinig's base (4.5 mL, 26.1 mmol), and 4-(thioacetyl)iodobenzene22 (2.54 g, 9.14 mmol) were used following the general procedure for couplings. The solution was stirred in a 60 °C
oil bath for 16 h.
Crystallization from dichloromethane/hexanes afforded the desired product (1.81 g, 85 %). IR
(KBr) 3129.1, 3057.4, 3006.2, 2975.5, 2940.0, 2847.4, 2207.2, 1697.7, 1506.8, 1483.1, 1463.1, 1396.2, 1279.2, 1223.5, 1222.2, 1034.2, 949.5, 898.8, 825.5, 765.6, 616.8 crri'. 'H NMR (400 MHz, CDC13) b 7.57 (dt, J = 8.5, 1.9 Hz, 4 H), 7.39 (dt, J = 8.5, 2.0 Hz, 4 H), 7.01 (s, 2 H), 3.89 (s, 6 H), 2.42 (s, 6 H). '3C NMR (100 MHz, CDC13) ~ 193.85, 154.43, 134.58, 132.65, 128.64, 124.84, 116.08, 113.75, 94.76, 87.73, 56.91, 30.70. HRMS calc'd for C28,H?2,O~,S2,:
486.0960 Found: 486.0956.
2,,5-Bis(4'-(thioacetyl)ethynylphenyl)benzoquinone (20). 19 (0.050 g, 0.103 mmol), acetonitrile (5 mL), and THF (3 mL) were added to a 25 mL round bottom flask containing a stir bar. A solution of ceric ammonium nitrate (0.339 g, 0.618 mmol) in water (2 mL) was added in two portions at 30 min intervals. After stirring at room temperature for 3 h, the reaction was quenched by adding water to effect precipitation of an orange solid. Flash column chromatography (silica gel using dichloromethane as eluent) afforded the desired product (0.023 g, 49 % yield). IR (KBr) 2922.2, 2847.4, 2203.4, 1694.9, 1660.1, 1569.9, 1351.8, 1212.3, 1119.7, 1084.6, 1013.2, 960.3, 826.8, 620.6 cm 1. 1H NMR (400 MHz, CDC13) 8 7.60 (dt, J = 8.3, 1.6 Hz, 4 H), 7.42 (dt, J = 8.3, 1.6 Hz, 4 H), 7.00 (s, 2 H), 2.43 (s, 6 H). 13C NMR
(100 MHz, CDC13) 8 193.23, 182.61, 136.86, 134.64, 133.25, 133.07, 130.97, 122.78, 104.14, 84.08, 30.79. HRMS calc'd for C?~,H1~,O4,S?: 456.0500, Found: 456.0490.
2,5-Bis(4'-ethynylpyridyl)-1-nitrobenzene (22). To a solution of 2,5-dibromonitrobenzene (0.28 g, 0.997 mmol), bis(triphenylphosphine)palladium dichloride (0.07 g, 0.098 mmol), copper(I) iodide (0.019 g, 0.098 mmol), triphenylphosphine (0.106 g, 0.40 mmol) and K2C03 (1.l g, 7.96 nnnol) in THF (4 mL) were added via a cannula 21 (0.377 g, 2.15 mmol) in THF (4 mL) and MeOH (2 mL). The mixture was heated at 64 °C for 20 h. The solvent was removed by rotary evaporation and the black residue was washed with aqueous KZC03 and extracted with Et20. The combined organic layers were dried over Na2S04, filtered, and the solvent evaporated i~z vaczzo. Purification by flash chromatography (silica gel, hexane/AcOEt 70/30, 50/50, 20/80, 0/100) afforded 60 mg (24% yield) of the title compound as a yellow solid. Mp: 178-180 °C. 1R (KBr) 3414.0, 3036.7, 1616.0, 1589.4, 1538.1, 1519.9, 1407.9, 1345.7, 1271.1, 1214.1, 828.3 cm 1. 1H NMR (400 MHz, DMSO-d) 8 8.69 (br s, 4 H), 8.44 (d, J--1.4 Hz, 1 H), 8.04 (1/2 ABqd, J--8.0, 1.4 Hz, 1 H), 7.99 (1/2 ABq, J--8.0 Hz, 1 H), 7.60 (d, J--5.8 Hz, 2 H), 7.57 (d, J=5.8 Hz, 2 H). 13C NMR (100 MHz, DMSO-d) 8 150.21, 150.13, 149.42, 136.27, 135.36, 129.16, 129.11, 127.96, 125.50, 125.39, 123.25, 116.55, 94.98, 90.63, 90.59, 88.13. HRMS calc'd for C2oH11N3O2: 325.0851, found: 325.0847.
1-Bromo-4-(4'-ethynylpyridyl)-3-nitrobenzene (23). To a solution of 2,5-dibromonitrobenzene (0.43 g, 1.53 mmol), bis(triphenylphosphine)palladium(II) dichloride (0.052 g, 0.074 mmol), copper(I) iodide (0.015 g, 0.078 mmol), triphenylphosphine (0.079 g, 0.30 mmol) and K~C03 (0.83 g, 6.0 mmol) in THF (2 mL) were added via a cannula 21 (0.342 g, 1.95 mmol) in THF (4 mL) and MeOH (1.5 mL). The mixture was heated at 23 °C for 2 d.
The solvent was removed by rotary evaporation and the residue was diluted with water and extracted with Et20. The combined organic layers were dried over NaZSOø, filtered, and the solvent evaporated irz vczcuo. Purification by flash chromatography (silica gel, hexane/AcOEt 90/10, 70/30, 50/50) afforded 330 mg (71% yield) of the title compound as an off-white solid.
Mp: 166-171 °C. IR (KBr) 3424.4, 3093.3, 1592.3, 1521.4, 1409.3, 1341.4, 1272.6 cm I. 1H

NMR (400 MHz, CDCl3) 8 8.68 (br s, 2 H), 8.29 (d, J--1.9 Hz, 1 H), 7.79 (dd, J--8.3, 2.0 Hz, 1 H), 7.62 (d, J 8.3 Hz, 1 H), 7.44 (d, J--4.7 Hz, 2 H). 13C NMR (100 MHz, CDC13) 8 149.96, 136.22, 135.69, 130.14, 128.08, 126.67, 125.65, 123.19, 116.48, 94.80, 87.81.
HRMS calc'd for C13H7BrN20z : 303.9672, found: 303.9682 .
5-Ethynylphenyl-2-(4'-ethynylpyridyl)-1-nitrobenzene (24). To a solution of 23 (88.8 mg, 0.293 mmol), bis(triphenylphosphine)palladium(II) dichloride (0.011 g, 0.016 mmol), copper(I) iodide (0.004 g, 0.021 mmol) and triphenylphosphine (0.008 g, 0.029 mmol) in THF (4 mL) were added Et3N, (0.25 mL, 1.76 mmol) and phenylacetylene (0.1 mL, 9.1 mmol). The mixture was stirred at 56 °C for 36 h. The solvent was evaporated ira vacuo. The residue was diluted with water and extracted with Et20. The combined organic layers were duied over MgS04, filtered, and the solvent evaporated in vacuo. Purification by flash chromatography (silica gel, AcOEt/ hexane 20/80) afforded 65 mg (69% yield) of the title compound as a yellow solid. Mp: 130-132 °C. IR (KBr) 3445.3, 3046.3, 2203.5, 1548.5, 1529.1, 1399.9, 1341.6 cm 1. 1H NMR (400 MHz, CDC13) 8 8.67 (br d, J--4.9 Hz, 2 H), 8.27 (d, J--1.5 Hz, 1 H), 7.76 (1/2 ABqd, J--8.0, 1.6 Hz, 1 H), 7.72 (1/2 ABqd, J--8.0, 0.5 Hz, 1 H), 7.56 (m, 2 H), 7.45 (dd, J--5.9, 1.7 Hz, 2 H), 7.40 (m, 3 H). 13C NMR (100 MHz, CDCl3) 8 149.58, 135.39, 134.65, 131.81, 129.34, 128.54, 127.67, 125.32, 121.85, 116.66, 95.30, 94.30, 88.52, 86.63. HRMS calc'd for C2~H12N202: 324.0899, found: 324.0895.
1-Bromo-4-ethynylphenyl-3-nitrobenzene (25). To a solution of 2,5-dibromonitrobenzene (0.937 g, 3.34 mmol), bis(dibenzylideneacetone)palladium (0.095 g, 0.166 mmol), copper(I) iodide (0.032 g, 0.168 mmol) and triphenylphosphine (0.173 g, 0.66 mmol) in THF (4 mL) were added Et3N (1 mL, 7.2 mmol) and phenylacetylene (0.5 mL, 4.56 mmol). The mixture was stirred at 23 °C for 48 h. The mixture was washed with a saturated solution of NH~CI and then extracted with EtzO. The combined organic layers were dried over Na~SOø, filtered, and the solvent evaporated i~2 vacuo. Purification by flash chromatography (silica gel, CHZCl2/ hexane 1/8) afforded 0.48 g (47% yield) of the title compound as a yellow solid. Mp: 58-74 °C. IR (KBr) 3421.9, 3085.5, 2213.4, 1595.7, 1545.9, 1521.3, 1336.5, 1269.2 cm 1. 1H NMR (400 MHz, CDC13) 8 8.23 (d, J--1.9 Hz, 1 H), 7.72 (dd, J--8.3 Hz, 2.0, 1 H), 7.59 (m, 3 H), 7.40 (m, 3 H). 13C NMR (100 MHz, CDC13) b 149.71, 135.91, 135.45, 131.99, 129.44, 128.46,127.78, 122.03, 121.75, 117.69, 98.43, 84.00. HRMS calc'd for C14H$NOZBr:
302.9720, found: 302.9725.
2-Ethynylphenyl-5-(4'-ethynylpyridyl)-1-nitrobenzene (26). To a solution of 25 (0.306 g, 1.01 mmol), KZC03 (0.713 g, 5.16 mmol), bis(triphenylphosphine)palladium dichloride (0.035 g, 0.05 mmol), copper(I) iodide (0.009 g, 0.047 mmol) and triphenylphosphine (0.052 g, 0.198 mmol) in THF (2 mL) were added via a cannula 21, (0.217 g, 1.24 mmol) in THF (2 mL) and MeOH (1 mL). The mixture was heated at 60 °C for 18 h.
The solvent was removed by rotary evaporation and the brown residue was diluted with water and extracted with EtzO. The combined organic layers were dried over NazS04, filtered, and the solvent evaporated i~z vacuo. Purification by flash chromatography (silica gel, AcOEt/hexane 20/80, 40/60) afforded 260 mg (79% yield) of the title compound as a yellow solid. Mp: 144-146 °C. IR (KBr) 3442.3, 3053.0, 2209.4, 1631.3, 1584.8, 1524.7, 1404.3, 1344.7, 1269.0, 826.4, 755.2, 686.6 cm 1. 1H NMR (400 MHz, CDCl3) S 8.67 (dd, J--4.4, 1.6 Hz, 2 H), 8.27 (br s, 1 H), 7.74 (m, 2 H), 7.63 (d, J--1.8 Hz, 1 H), 7.60 (m, 1 H), 7.42 (m, 5 H). 13C NMR (100 MHz, CDCl3) b 149.99, 135.41, 134.65, 132.14, 130.19, 129.61, 128.54, 127.95, 125.50, 122.68, 122.06, 119.15, 99.67, 90.83, 90.27, 84.62. HRMS calc'd for CzlHizNzOz: 324.0899, found: 324.0897.
2,5-Bis(trimethylsilylethynyl)-4-nitroacetanilide (27). To a solution of 6 (0.78 g, 2.3 mmol), bis(dibenzylideneacetone)palladium (0.068 g, 0.118 mmol), copper(I) iodide (0.023 g, 0.012 mmol), triphenylphosphine (0.123 g, 0.47 mmol) in THF (8 mL) were added Et3N (1 mL, 7.2 mmol) and trimethylsilylacetylene (1 mL, 7.0 mmol). The mixture was heated at 67 °C
for 48 h. The solvent was removed by rotary evaporation and the brown residue was diluted with water and extracted with EtzO. The combined organic phases were dried over NazSO~, filtered, and the solvent evaporated ifa vacuo. Purification by flash chromatography (silica gel, CHZCIz/ hexane 35/65) afforded 410 mg (47% yield) of the title compound as an off white solid. Mp: 162-164°C. IR (KBr) 3372.9, 2962.9, 2146.0, 1727.2, 1611.2, 1544.9, 1501.5, 1457.1, 1404.3, 1338.2, 1250.6, 1222.3, 881.9 crri 1. 1H NMR (400 MHz, CDCl3) 8 8.75 (s, 1 H), 8.15 (s, 1 H), 8.10 (br s, 1 H), 2.27 (s, 3 H), 0.33 (s, 9 H), 0.28 (s, 9 H). '3C NMR (100 MHz, CDC13) b 168.21, 144.19, 142.41, 128.11, 123.82, 120.18, 111.52, 106.66, 106.16, 99.50, 97.44, 24.90, -0.31, -0.46. HRMS calc'd for ClBHza.NzO3Siz: 372.1326, found:
372.1326.
2,5-Bis(4'-ethynylpyridyl)-4-nitroaniline (28). To a solution of 27 (0.056 g, 0.15 mmol), 4-iodopyridine (0.08 g, 0.39 mmol), KzC03 (0.17 g, 1.2 mmol), bis(triphenylphosphine)palladium(II) dichloride (0.01 g, 0.015 mmol), copper(I) iodide (0.004 g, 0.021 mmol) and triphenylphosphine (0.016 g, 0.061 mmol) in THF (4 mL) was added MeOH (1 mL). The mixture was heated at 60 °C for 50 h. The solvent was removed by rotary evaporation and the brown residue was diluted with water and extracted with AcOEt. The combined organic phases were dried over NazS04, filtered, and the solvent evaporated in vacuo. Purification by flash chromatography (silica gel, AcOEt) afforded 8 mg (16% yield) of the title compound as a yellow solid. Mp: 154-160 °C. IR (KBr) 3730.2, 3438.6, 2204.8, 1592.4, 1541.1, 1409.8, 1308.5, 1249.9, 818.8 cm I. 1H NMR (400 MHz, CDC13) 8 8.67 (dd, J=4.4, 1.7 Hz, 2 H), 8.65 (dd, J-- 4.5, 1.7 Hz, 2 H), 8.34 (s, 1 H), 7.44 (dd, J=4.5, 1.7 Hz, 2 H), 7.40 (dd, J--4,4, 1.6 Hz, 2 H), 6.99 (s, 1 H), 5.03 (br s, 2 H). 13C NMR (100 MHz, CDC13) 8 151.26, 150.03, 149.90, 139.56, 130.71, 130.52, 130.00, 125.65, 125.33, 120.33, 118.52, 106.57, 94.67, 94.19, 89.55, 87.27. HRMS calc'd for CZpH12N40a: 340.0960, found: 340.0958.
2-Amino-4-(4'-ethynylpyridyl)-5-nitrobromobenzene (29). To a solution of 6 (0.877 g, 8.84 mmol), KZC03 (1.08 g, 7.81 mmol), bis(triphenylphosphine)palladium dichloride (0.054 g, 0.077 mmol), copper(I) iodide (0.025 g, 0.13 mmol) and triphenylphosphine (0.068 g, 0.26 mmol) in THF (4 mL) were added via a cannula 21 (0.404 g, 2.30 mmol) in THF (8 mL) and MeOH (3 mL). The mixture was stirred at 23 °C for 1 d. The solvent was evaporated i~z vacuo.
The residue was diluted with water and extracted with AcOEt. The combined organic phases were dried over MgSO~, filtered and the solvent evaporated in vacuo.
Purification by flash chromatography (silica gel, AcOEt/hexane 40/60 50/50) afforded 290 mg (39%
yield) of the title compound as a yellow solid. Mp: 226- 228 °C. IR (KBr) 3385.4, 3297.7, 3171.3, 1646.8, 1591.7, 1556.9, 1471.3, 1297.8 cm'. 'H NMR (400 MHz, DMSO-d) 8 8.66 (br d, J=3.8 Hz, 2 H), 8.32 (d, J=1.3 Hz, 1 H), 7.53 (br d, J--4.5 Hz, 2 H), 7.06 (d, J--1.3 Hz, 1 H), 6.94 (br s, 2 H).
isC NMR (100 MHz, DMSO-d) 8 151.33, 150.12, 136.44, 130.70, 129.64, 125.32, 118.13, 117.73, 106.02, 91.85, 89.72. HRMS calc'd for C13H8BrN302: 316.9800, found:
316.9801.
4-Amino-2-(4'-ethynylpyridyl)-1-vitro-5-(trimethylsilylethynyl)benzene. To a solution of 29 (0.310 g, 0.975 mmol), bis(triphenylphosphine) palladium dichloride (0.035 g, 0.05 mmol), copper(I) iodide (0.011 g, O.OS mmol) and triphenylphosphine (0.026 g, 0.10 mmol) in THF (10 mL) were added Et3N (0.9 mL, 6.5 mmol) and tririlethylsilylacetylene (0.2 mL, 1.4 mmol). The mixture was stirred at 60 °C for 2 d. The solvent was evaporated iyz vacuo.
The residue was diluted with water and extracted with AcOEt. The combined organic phases were dried over MgS04, filtered, and the solvent evaporated ira vacuo.
Purification by flash chromatography (silica gel, Et20) afforded 160 mg (49% yield) of the title compound as a yellow solid. Mp: 145-150 °C. IR (KBr) 3451.9, 3379.1, 2960.5, 2149.5, 1620.4, 1597.9, 1545.5, 1512.2, 1317.0 cm 1. 1H NMR (400 MHz, CDCl3) 8 8.65 (dd, J=4.6, 1.5 Hz, 2 H), 8.25 (s, 1 H), 7.44 (dd, J--4.3, 1.5 Hz, 2 H), 6.93 (s, 1 H), 4.90 (s, 2 H), 0.30 (s, 9 H). 13C NMR (100 MHz, CDC13) 8 151.44, 149.90, 139.35, 130.65, 130.43, 125.65, 119.56, 118.06, 107.93, 104.28, 98.37, 93.70, 89.79, -0.15. HRMS calc'd for C18H17N302Si: 335.1090, found:
335.1089.
4-Amino-5-ethynyl-2-(4'-ethynylpyridyl)-1-nitrobenzene. (30). To a solution of Amino-2-(4'-ethynylpyridyl)-1-nitro-5-(trimethylsilylethynyl)benzene (160 mg, 0.477 mmol) in MeOH (15 mL) and CHZC12 (15 mL) was added K2C03 (0.66 g, 4.77 mmol). The solution was stined at 23 °C for 2 h. The reaction mixture was diluted with water and extracted with AcOEt. The combined organic layers were dried over MgSO~, filtered, and the solvent evaporated i~2 vacuo. The reaction afforded 0.11 g (88% yield) of the title compound as a yellow solid. The product was too unstable to attain its complete characterization data. 1H
NMR (400 MHz, DMSO-d) 8 8.67 (dd, J--4.5, 1.6 Hz, 2 H), 8.12 (s, 1 H), 7.53 (dd, J--4.5, 1.6 Hz, 2 H), 7.03 (s, 1 H), 6.97 (br s, 2 H), 4.70 (s, 1 H).
4-Amino-2-(4'-ethynylpyridyl)-5-(4'-thioacetylphenylethynyl)-1-nitrobenzene (31).
To a solution of 30 (0.110 g, 0.418 mmol), 4-thioacetyliodobenzenel°
(0.124 g, 0.446 mmol), bis(triphenylphosphine)palladium(II) dichloride (0.015 g, 0.021 mmol), copper(I) iodide (0.004 g, 0.021 mmol) and triphenylphosphine (0.014 g, 0.053 mmol) in THF (13 mL) was added Et3N (0.4 mL, 2.9 mmol). The mixture was stirred at 50 °C for 2 d. The reaction was checked by TLC (AcOEt/hex 75/25). More bis(triphenylphosphine)palladium dichloride (0.014 g, 0.020 mmol), copper(I) iodide (0.035 g, 0.018 mmol) and triphenylphosphine (0.085 g, 0.324 mmol) were added and the reaction was stirred at 60 °C for 1 d. The solvent was evaporated isa vacuo. The residue was diluted with water and extracted with AcOEt. The combined organic layers were dried over MgSO~, filtered, and the solvent evaporated ifZ vacuo.
Purification by flash chromatography (silica gel, AcOEt/hex 66/33) afforded 130 mg (75% yield) of the title compound as a yellow solid. Mp: 185-188 °C. IR (KBr) 3438.2, 3195.9, 2922.4, 1695.4, 1627.7, 1596.5, 1545.1, 1514.8, 1477.2, 1402.8, 1316.4, 1249.9 cm 1. 1H NMR
(400 MHz, DMSO-d) 8 8.68 (br d, J--4.0 Hz, 2 H), 8.23 (s, 1 H), 7.79 (d, J--8.1 Hz, 2 H), 7.54 (d, J--5.0 Hz, 2 H), 7.49 (d, J-- 8.0 Hz, 2 H), 7.13 (br s, 2 H), 7.06 (s, 1 H), 2.46 (s, 3 H). 13C NMR (100 MHz, DMSO-d) 8 192.98, 153.79, 150.13, 136.28, 134.31, 132.32, 130.69, 129.67, 128.66, 125.34, 123.05, 118.70, 118.26, 105.43, 95.72, 92.51, 90.12, 85.54, 30.32.
HRMS calc'd for C23HISN3~3s~ 413.0834, found: 413.0940.
2-(4'-Ethynylpyridyl)-4-nitro-5-phenylaniline (32). To a solution of 7 (80.5 mg, 0.241 mmol), K2C03 (0.151 g, 1.09 mmol), bis(triphenylphosphine)palladium(II) dichloride (0.009 g, 0.014 mmol), copper(I) iodide (0.003 g, 0.014 mmol) and triphenylphosphine (0.014 g, 0.053 mmol) in THF (2 mL) were added via a cannula 1 (0.053 g, 0.3 mmol) in THF (2 mL) and MeOH (1 mL). The mixture was heated to 70 °C for 3 d. The solvent was removed by rotary evaporation and the brown residue was diluted with water and extracted with Et20. The combined organic layers were dried over Na2S0ø, filtered and the solvent evaporated ifa vacuo.
Purification by flash chromatography (silica gel, AcOEt/hex 30/70) afforded 60 mg (79%
yield) of the title compound as a yellow solid. Mp: 187-190 °C. IR
(KBr) 3410.2, 3323.4, 3212.1, 2215.1, 1627.6, 1592.4, 1548.4, 1511.7, 1410.5, 1331.9 cm I. IH NMR
(400 MHz, CDCl3) 8 8.64 (br d, J--4.8, 2 H), 8.16 (s, 1 H), 7.39 (m, 5 H), 7.27 (m, 2 H), 6.62 (s, 1 H), 5.03 (br s, 2 H). 13C NMR (100 MHz, CDCl3) 8 151.23, 149.82, 140.65, 138.82, 138.19, 130.49, 128.36, 128.06, 127.52, 125.34, 116.41, 104.85, 93.24, 87.89. HRMS calc'd for C19H13N3O2:
315.1008, found: 315.1011.
1-Bromo-4-(4'-ethynyl)pyridine-3-nitrobenzene (34). To a solution of 331 (0.84. g, 2.34 mmol), bis(triphenylphosphine)palladium dichloride (0.083 g, 0.117 mmol), copper(I) iodide (0.022 g, 0.117 mmol), KZC03 (1.94 g, 14.04 mmol) in THF (4 mL) were added 21 (0.451 g, 2.57 mmol) in THF (12 mL) via a cannula and MeOH (4 mL). The mixture was heated to 55 °C for 14 h. The solvent was removed by rotary evaporation and the residue was diluted with water, washed with brine and extracted with AcOEt. The, combined organic phases were dried over MgSO~., filtered and the solvent evaporated in vacuo.
Purification by flash chromatography (silica gel, AcOEt) afforded 271 mg (34% yield) of the title compound as a yellow solid. Mp: 224-229 °C. IR (KBr) 3451.7, 3351.1, 3202.6, 2206.4, 1622.9, 1588.4, 1539.0, 1474.4, 1306.7; 1249.8 cm 1. 1H NMR (400 MHz, DMSO-c~ 8 8.64 (d, J--5.7 Hz, 2 H), 8.25 (s, 1 H), 7.67 (dd, J--4.5, 1.5 Hz, 2 H), 7.59 (m, 2 H), 7.47 (m, 3 H), 7.15 (br s, 1 H), 7.03 (s, 1 H). 13C NMR (100 MHz, DMSO-c~ 8 153.97, 149.83, 136.31, 131.67, 131.17, 130.01, 129.69, 128.99, 125.45, 121.78, 120.40, 118.06, 103.92, 96.13, 93.41, 88.37, 86.25. HRMS
calc'd for C~IH13N3O2: 339.1008, found: 339.1004.
1-Bromo-3-nitro-4-(4-aminophenylethynyl)benzene (36). 1,4-Dibromo-2-nitrobenzene (5.62 g, 20.0 mmol), bis(triphenylphosphine)palladium dichloride (0.140 g, 0.20 mmol), copper(I) iodide (0.038 g, 0.20 mmol), triethylamine (10.0 mL), THF (10 mL) and 3S
(1.170 g, 10.0 mmol) were used following the general procedure for couplings.
The reaction mixture was stirred at room temperature for 4 h. After solvent removal in vacuo, the residue was chromatographed on a column of silica (dichloromethane as eluent) to give a mixture of the desired product along with its negioisomer as a red solid. The desired product was isolated from the mixture by a two-fold recrystallization from dichloromethane/hexanes as fine bright red needles (1.561 g, 49% yield). Mp 147-149 °C. IR (KBr) 3457, 3367, 2194, 1623, 1593, 1513, 1550, 1334, 1273, 1136, 834, 817, 528 cm 1. 1H NMR (400 MHz, CDCl3) 0 8.21 (d, J--2.0 Hz), 7.67 (dd, J--8.4, 2.0 Hz), 7.51 (d, J--8.4 Hz), 7.96 (m, AA' part of AA~X' pattern, J--8.2, 2.7, I.9, 0.4 Hz, 2 H), 7.93 (m, XX' part of AA~X' pattern, J--8.2, 2.7, 1.9, 0.4 Hz, 2 H), 3.39 (s, 2 H). 13C NMR (100 MHz, CDC13) 0 149.27, 147.85, 135.82, 135.12, 133.71, 127.73, 120.62, 118.59, 114.63, 111.09, 100.24, 82.86. HRMS calc'd for C14H9N2BrO2:
315.9848, found: 315.9845.
4-(2-Nitro-4-phenylethynylphenylethynyl)aniline (37). 36 (0.697 g, 2.20 mmol), bis(triphenylphosphine)palladium dichloride (0.062 g, 0.088 mmol), copper(I) iodide (0.0084 g, 0.044 mmol), triethylamine (10.0 mL) and ethynylbenzene (0.306 g, 3.00 mmol) were used following the general procedure for couplings. The reaction mixture was stirred at 80 °C for 2 h. After solvent removal in vacuo, the residue was chromatographed on a column of silica with dichloromethane to give red needles of the desired product (0.72 g, 97% yield) Mp 166-168 °C.
IR (KBr) 3454, 3381, 3360, 2177, 2197, 1594, 1623, 1539, 1520, 1299, 1342, 1133, 829, 758, 690, 527 cm 1. 1H NMR (400 MHz, CDCl3) D 8.20 (dd, J--1.6, 0.3 Hz), 7.66 (dd, J--8.2, 1.6, Hz), 7.61 (d, J--8.1 Hz), 7.52-7.57 (m, 2 H), 7.36-7.43 (m, 5 H), 3.94 (s, 2 H). 13C NMR (100 MHz, CDC13) ~ 148.93, 147.81, 135.12, 134.04, 133.76, 131.74, 129.04, 128.49, 127.59, 122.97, 122.18, 118.95, 114.64, II1.29, 100.75, 93.03, 87.05, 83.71. HRMS
calc'd for C~~H1~N~0z: 338.1055, found: 338.1058.
4-(2-Nitro-4-phenylethynylphenylethynyl)benzenediazonium tetrafluoroborate (38). Following the general diazotization procedure 37 (0.0845 g, 0.250 mmol) was treated with NOBF4 (0.0322 g, 0.275 mmol) in acetonitrile (2 mL)/sulfolane (2 mL). The product was precipitated with ether (12 mL) as dark orange scales. The salt was washed with ether and reprecipitated from DMSO (0.5 mL) and CH2C12 (20 mL) as lustrous dark orange plates (0.0885 g, 81 °7o yield). IR (KBr) 3103, 2279, 2209, 1576, 1345, 1540, 1084, 841, 764 cm 1. 1H
NMR (400 MHz, CDCl3/DMSO-d~, line width of about 1.9 Hz was observed) ~ 8.78 (d, .1=8.9 Hz, 2 H), 8.30 (s, 1 H), 8.03 (d, J--8.9 Hz, 2 H), 7.85-7.92 (m, 2 H), 7.57-7.60 (m, 2 H), 7.42-7.44 (m, ~3H). 13C NMR (100 MHz, CDC13lDMSO-d~) 0 149.00, 135.46, 134.85, 134.15, 133.31, 132.84, 1.34, 129.13, 128.21, 127.15, 125.66, 121.06, 114.81, 114.25, 94.57, 94.42, 94.11, 86.29.
4-(3-Nitro-4-phenylethynylphenylethynyl)aniline (39). 25 (1.208 g, 4.0 mmol), bis(tuphenylphosphine)palladium dichloride (0.070 g, 0.10 mmol), copper(I) iodide (0.019 g, 0.10 mmol), triethylamine (6.0 mL), THF (6.0 mL) and 35 (0.479 g, 4.10 mmol) were used following the general procedure for couplings. The reaction mixture was stirred at room temperature for 15 h. After solvent removal in vacuo, the residue was chromatographed on a short column of silica with dichloromethane/hexanes (1:l) to afford the desired product as an orange solid (0.560 g, 44% yield): mp 175-177 °C. IR (I~Br) 3303, 2985, 1696, 1587, 1522, 1406, 1314, 1243, 1153, 1060, 839, 757, 692 cm 1. 1H NMR (400 MHz, CDC13) ~
8.16 (t, J--1.0 Hz, 1H), 7.64 (d, J=1.0 Hz, 2H), 7.58-7.61 (m, 2H), 7.34-7.40 (m, 3H), 7.35 (m, AA' part of AA'XX' pattern, J--8.0, 2.5, 2.0, 0.4 Hz, 2 H), 6.65 (m, XX' part of AA'XX' pattern, J--8.0, 2.5, 2.0, 0.4 Hz, 2 H), 3.91 (s, 2H). 13C NMR (100 MHz, CDC13) 149.4, 147.5, 134.9, 134.3, 133.3, 132.0, 129.3, 128.5, 127.1, 124.9, 122.3, 117.1, 114.7, 11.1, 98.4, 94.9, 85.3, 85Ø
HRMS calc'd for C2zHløNZO~: 338.1055, found: 338.1059.
4-(3-Nitro-4-phenylethynylphenylethynyl)benzenediazonium tetrafluoroborate (40). Following the general diazotization procedure, 39 (0.0676 g, 0.200 mmol) was treated with NOBF4 (0.025 g, 0.210 mmol) in acetonitrile (2 mL)/sulfolane (2 mL). The product was precipitated with ether (20 mL) as fine orange-red crystals. The salt was washed with ether and reprecipitated from DMSO (0.6 mL) and CH2C12 (10 mL) as heavy lustrous red plates (0.0676 g, 77% yield). IR (KBr) 3101, 2279, 2209, 1576, 1540, 1346, 1083, 1034, 840, 764 cm 1. 1H
NMR (400 MHz, CDCl3/DMSO-d~) ~ 7.94 (m, AA' part of AA'XX' pattern, J--8.7, 2.4, 1.7, 0.4 Hz, 2 H), 7.82 (dd, J--1.7, 0.4 Hz, 1 H), 7.49 (m, XX' part of AA'XX' pattern, J--8.7, 2.4, 1.7, 0.4 Hz, 2 H), 7.62 (dd, J=8.1, 1.7 Hz, 1 H), 7.56 (dd, J=8.1, 0.4 Hz, 1 H), 7.07 (m, AA' part of AA'XX'Y pattern, J=7.8, 7.6, 1.8, 1.3, 1.3, 0.6 Hz, 2 H), 6.94 (tt, J--7.6, 1.3 Hz, 1 H), 6.91 (m, YY' part of AA'XX'Y pattern, J--7.8, 7.6, 1.8, 1.3, 1.3, 0.6 Hz, 2 H). 13C
NMR (100 MHz, CDC13/DMSO-d~) ~ 137.24, 136.97, 136.23, 135.40, 133.72, 133.00, 131.08, 129.96, 129.48, 122.81, 122.75, 120.68, 114.12, 100.47, 98.81, 91.04, 85.57.
4-(2,5-Dinitro-4-(4-aminophenylethynyl)phenylethynyl)aniline (42). 1,4-Dibromo-2,5-dinitrobenzenel2 (0.977 g, 3.0 mmol), bis(triphenylphosphine)palladium dichloride (0.042 g, 0.06 mmol), copper(I) iodide (0.011 g, 0.06 mmol), triethylamine (5.0 mL), THF (5.0 mL) and 4-ethynylaniline (0.468 g, 4.00 mmol) were used following the general procedure for couplings. The reaction mixture was stirred at room temperature for 12 h.
After solvent removal i~2 vacuo, the residue was sonicated with dichloromethane (10 mL) and filtered. The filter calve was washed 5X with dichloromethane (10 mL) and dried in vacuo to afford dark purple crystals of the diamine 42 (0.432 g, 36% yield). Mp >270 °C. IR
(I~Br) 3494, 3387, 2184, 1600, 1400, 1523, 1537, 1308, 1337, 1251, 1136 cm 1. 1H NMR (400 MHz, DMSO-d~) X8.37 (s, 2 H), 7.27-7.29 (m, 2 H), 6.59-6.61 (m, 2 H), 5.93 (br s, 4 H). 13C
NMR (100 MHz, DMSO-d~) 0151.18, 149.89, 133.67, 129.43, 116.95, 113.66, 106.10, 103.45, 82.23. HRMS
calc'd for C22H1~N4O4: 398.1015, found 398.1018.
4-(2,S-Dinitro-4-(4-diazoniophenylethynyl)phenylethynyl)benzenediazonium tetrafluoroborate (43). Following the general diazotization procedure 42 (0.199 g, 0.500 mmol) was treated with NOBFø (0.128 g, 1.10 mmol) in acetonitrile (5.0 mL)/sulfolane (5.0 mL). The product was precipitated with ether (20 mL). The salt was washed with ether and reprecipitated from DMSO and CHZC12 as light-sensitive yellow crystals (0.215 g, 72% yield).
IR (KBr) 3107, 2291, 1579, 1546, 1342, 1078, 830 cm 1. 1H NMR (400 MHz, d~) 0 8.85 (s, 2H), 8.79 (d, J--9 Hz, 2 H), 8.20 (d, J--9 Hz, 2 H). 13C NMR
(100 MHz, CDC13/DMSO-d~) 0 150.60, 133.93, 133.83, 133.14, 132.40, 131.75, 117.62, 116.32, 96.91, 91.51.
Many oligo(phenylene ethynylene)s containing reversibly reducible functionalities based on quinone and vitro cores have been synthesized. These molecules have methods of attachment to a metal surface ranging from the standard protected thiol groups to the novel diazonium and pyridyl linkages.

Molecular electronic devices containing pyridine units Figure 6 shows the two groups of potential molecular devices that have been synthesized. The first group has a vitro functionality on the internal phenyl ring, which was designed to retain electrons so that the molecule could work as a memory element.
The second group has a vitro and an amino group, which have been shown to work similarly albeit at lower temperature.
The potential molecular devices 2 and 4 were envisioned to have two pyridyl terminal groups so that they could serve as cross-linlcers for gold connections.
NOZ
Br \ ~ Br + N~ ~ = TMS --- a -- N\ \ - ~ ' ~N

Scheme 2. (a) KZC03, MeOH, Pd(PPh3)ZC12, PPh3, CuI, THF, 64 °C, 20 h, 24%.

Scheme 2 outlines the synthesis of 2 from 2,5-dibromonitrobenzene. 1 was easily prepared via Sonogashira~ coupling of 4-iodopyridine7 and trimethylsilylacetylene (99%). Potassium carbonate is used as a base for the irz situ removal of the TMS protecting group and for the coupling, as the free allcyne decomposes after a few hours. Attempts to perform the reaction at room temperature gave mostly the bis(ethynylpyridine) and coupling at one site of the aryl dibromide.
1 O NHAc NHAc Br ~ ~ Br + H = TMS a TMS = ~ ~ - TMS

NHZ
N~ N/ \ - ~ ~ - ~ /N
b >--J
OzN 4 Scheme 2. (a) Et3N, Pd(dba)2, PPh3, CuI, THF, GO °C, 48 h, 47%. (b) KZC03, MeOH, Pd(PPh3)~C12, PPh3, CuI, THF, 60 °C, 50 h, 16%.
Compound 4 resembles 2, but has a nitroaniline core instead of a vitro core.
Unlike the potential molecular device 2, the synthesis of 4 (Scheme 2) commenced with the coupling of 2,5-dibromo-4-nitroacetanilide~ with trimethylsilylacetylene to give 3, which was then coupled with 4-iodopyridine in low yield. The low yield of the coupling reactions could be due to cyclization between the vitro and the allcyne unit.
NHAc NH2 Br ~ ~ Br + N~ ~ = TMS -a -~ N~ ~ - ~ ~ Br O2N 1 '' 02N

H b TMS N~ ~ - ~ ~ - TMS ~ --. N\ ~ - ~ ~ - H
02N s O2N
NHz 7 I ~ ~ SAc - _ b N~ ~ - ~ ~ - ~ / SAc OZN

Scheme 3. (a) KZC03, MeOH, Pd(PPh3)ZCl2, PPh3, CuI, THF, rt, 24 h, 39%. (b) Et3N, Pd(PPh3)2C12, PPh3, CuI, THF, 60 °C. (c) K~C03, MeOH, CHZCIz, rt, 2 h, 88%.
The synthesis of 8 is shown in Scheme 3. 8 has a protected benzenethiol terminal group, which can bind to a gold surface. The other end of the molecule has a pyridyl group, which could possibly serve as a better top-layer linker than the phenyl group. 8 was synthesized by coupling the 2,5-dibromo-4-nitroacetanilide with 1 in a moderate yield to afford compound 5.
Compound 5 was then coupled with trimethylsilylacetylene to afford 6 in 49%
yield, which was deprotected with potassium carbonate to give 7. The last step of this synthesis was the coupling with 4-thioacetyliodobenzene, which afforded the potential device 8 in good yield (75 %).
Br ~ ~ Br + N~ ~ ~ TMS
OzN 1 - ~ ~ - H ~ \ - -N - ~ / Br b N - ~ ~ - ~
Scheme 4. (a) K2C03, MeOH, Pd(PPh3)ZC12, PPh3, CuI, THF, rt, 2 d, 71%. (b) Et3N, Pd(PPh3)ZC12, PPh3, CuI, THF, 56 °C, 36 h, 69%.
10 and 12 were synthesized to study the importance of the position of the nitro group relative to the "alligator clip" during the self assembly. 10, which has the nitro group oriented toward the pyridyl group (Scheme 4), was synthesized by first coupling 1 with 2,5-dibromonitrobenzene, with if2 sztu removal of the TMS group to give 9 in good yield.
Coupling of 9 with phenylacetylene afforded 10.

Br ~ / Br + ~ / - H a / ~ - ~ / Br N~ / = TMS NOz d N\ \~/

Scheme 5. (a) Et3N, Pd(dba)2, PPh3, CuI, THF, rt, 48 h, 47%. (b) K2C03, MeOH, Pd(PPh3)ZCIz, PPh3, CuI, THF, 64 °C, 18 h, 79%.
The synthesis of 12 (Scheme 5), which has the nitro group pointing away from the pyridyl group, resembles the approach used for 10 except that the steps are reversed.
In this case, the phenylacetylene was first coupled to 2;5-dibromonitrobenzene to give 11 in a moderate yield.
1 was then coupled to 11 to afford 12 in good yield.
In order to conduct electrons with minimal inhibition, these organic oligomers preferably have all their phenyl rings in the same plane. If the terminal phenylethynyl group is replaced by a phenyl group, the molecule becomes slightly twisted. To study the effect of this rotational barrier, 14 was synthesized. The Suzulti coupling of 2,5-dibromo-4 nitroacetanilide with phenyl boronic acid was used to synthesize compound 13 (Scheme 6), which was then coupled to 4-(trimethylsilylethynyl)pyridine (1) to afford 14.
The structures of compounds 2, 4, 8, 10, 12 and 14 were confirmed by IR, 1H
NMR, 13C
NMR and MS.
NHAc NHAc Br / ~ Br + ~ / B(OH)z a ~ / ~ / Br OzN OzN

N~ / = TMS _ _ z _ b ~ / ~ / - ~ /N

Scheme 6. (a) Pd(dba)2, PPh3, CsZC03, toluene, 67 °C, 3 d, 51 %. (b) KZC03, MeOH, Pd(PPh;)ZCl2, PPh3, CuI, THF, 70 °C, 3 d, 79%.
In conclusion, the synthesis of conjugated aromatic molecules containing pyridine units for molecular electronics was accomplished using palladium-catalyzed couplings.

Negative differential resistance Referring again to Figure 3, negative differential resistance was observed in exemplary molecular diodes 30, in particular a molecular a mono-vitro substituted oligophenylene 32, in particular 4,4'-diphenyleneethynelene-2'-vitro-1-benzenethiol and a di-vitro ~
substituted oligophenylene 34, in particular 2',5'-dinintro-4,4'-diphenyleneethynylene-1-benzenethiol.
Referring now to Figures 4A and 4B, the I(V) response curves of the molecules shown in Figure 2 (where I denotes current and V denotes voltage) are shown. These curves were obtained by measuring the response of a self-assembled monolayer of molecules 32 and molecules 34. In each monolayer the molecules were oriented with the thiol substituted ends contacting a gold lead and the unsubstituted opposite ends contacting a second gold lead.
Referring now iri particular to Figure 4A, for molecule 32, initially the I(V) response is in the "0" state (open circles). Once application of a 1.75V pulse takes place, the molecule sets into a new state, "1" (black circles), that exhibits negative differential resistance (NDR) behavior, where the current rises then falls with increased voltage.
Referring now in particular to Figure 4B, for molecule 34, initially the I(V) response is in a "1" state (closed circles), that exhibits NDR. Once application of a 1.5 V pulse takes place, the molecule sets into a new state, "0" (open circles). The initial state is restored by application of a negative bias. This is the reverse of the initial/final switching observed for molecule 32, as shown in Figure3A. However, each behavior is exemplary of the duality of switch states. An advantage of molecule 34 is that it is a molecule that exhibits negative differential resistance at room temperature. Further, the retention of the switched state was observed for 24 h. It is believed that longer retention times will be possible with improved packaging of the system. It is preferred that a nanocell 12 is hermetically sealed to improve stability of the switched states for longer times.
The NDR curve shown in Figure 4B was used for the dynamic nanocell simulations and the SPICE simulations described below.

It has been discovered by the present inventors that simulated nanocells that are based on nano-networks containing atTayed molecular switches connected by nanoparticles are trainable to act as exemplary known logic devices. The molecular switches are molecules that exhibit an I(V) response that is characterized by negative differential resistance It is believed that the simulated nanocells are representative of actual physical nanocells. Hence, it is believed that, for the first time, a technique for programming an actual nanocell has been discovered. The inventors are aware of no other demonstration of the learning of logic by a network that includes "dendrites" (using the conventional analogy to the structure of the brain) that have these I(V) characteristics. In particular, conventional neural network models of the brain and other simulated systems usually are based on representations of systems that have "dendrite" I(V) curves selected from among step functions, hyperbolic tangents, and the lilee, none of which have negative differential resistance.
A genetic algorithm was used to train simulated nanocells omnisciently. That is, the algorithm knew the states of remote molecular switches. The algorithm trained the nanocells by omnipotent switching, that is by adjusting the states of the switches directly. It is nonetheless believed that these results are representative of results that are achievable by self-adaptive algorithms that mortally configure remote molecular switches by adjusting voltages at input and output leads.
General Programming The object in programming or training a nanocell is to take a random, fixed nanocell and turn its switches "on" and "off" until it functions as a target logic device. The physical position of each molecular switch is first fixed; i.e. the internal topology of the nanocell is static. The nanocell is then trained post-fabrication. Only the states, "on"
or "off", of the molecular switches can change.
. .,, Here we introduce the terms omniscience, omnipotence and mortal switching in relation to the programming algorithms used. By omniscience we mean that the connections within the nanocell and the location and state of each switch are known. Omnipotence means that the search algorithm knows the location of each molecular switch and has precise and selective access to reversibly set its "on" or "off" state. Naturally, the definition of omnipotence includes omniscience. Finally, with mortal switching, the algorithm does not know the connections within the nanocell or locations of the switches, and switching is limited to voltage pulses applied to the input/output pins. An actual physical nanocell is desirably programmed in a mortal fashion and switching will occur only through voltage pulses between contact pads along the periphery.
In the simulations presented here, we demonstrate that there are switch states such that a given nanocell functions as a target logic device. Given a certain density of nanoparticles and molecular switches, it is desirable to determine whether any random nanocell can be trained as some target logic device, with the assumption of absolute control over switch states. Some preliminary strategies for extending the method to mortal switching include taking advantage of the capacitances of the gold particles to better access individual switches.
It is believed that a line of molecular switches between two I/O pins, where there is exactly one switch and some capacitance between two gold particles, can be set to any pattern of "on" and "off" states by using these capacitances. The network of molecular switches and gold particles within a nanocell is much more complicated than a simple line of switches between I/O
pins; however, simulations indicate that the solution space for some logic gates is quite dense. This implies that it will not be necessary to uniquely access every individual molecule. In fact, if there are multiple switches between two gold particles, then every switch oriented in one direction will switch states simultaneously. However, this should not be a problem because toggling groups of molecules is most likely sufficient.
The nanocell training problem with omnipotence is a combinatorial optimization problem where the search space is the set of all possible switch states for some fixed nanocell.
If a nanocell contains 250 nanoparticles and about 750 molecular switches in a suitable orientation for switching, then the size of this search space is 275°
(as a size comparison, the number of elemental particles in the universe is estimated at 2300). A genetic algorithm is used to search this space. First a random nanocell is generated and a target logic device is defined (such as NAND). The states of the nanocell's switches are stored as a "chromosome" of "1's"
and "0's". An initial generation of random chromosomes is produced. Each chromosome corresponds to a different set of switch states fox the nanocell with fixed locations of nanoparticles and molecular switches. A fitness function is formulated such that switch states that cause the nanocell to perform as the target logic device receive low scores while those that do not perform the target logic function receive high scores. The search stops when a chromosome of switch states obtains a score of zero, and thus acceptably performs the desired logic. After the first generation, each generation of new chromosomes is produced by operations performed on the previous generation. Highly fit, or low-scoring, chromosomes combine in pairs to form new and hopefully even better performing chromosomes.
In this manner, the space is searched until a chromosome of fitness zero is obtained.
Here we present two methods of simulating this omnipotent training process. In order to calculate the fitness of each configuration, or combination of switch states within a nanocell, a series of circuits must be analyzed. Each of these circuits contains a complex network of nonlinear resistors. A pattern of input voltages over time is applied to some of the input/output pins, and the resulting output current over time must be calculated. This involves solving a series of nonlinear, ordinary differential equations. Though solving this system is difficult, the simulations presented here address this in two ways. In the model that we present second, the circuit engineering software, SPICE, is used to analyze each configuration of the nanocell.
This software is highly accurate but time consuming, as it is not designed to run iterations of randomly assembled circuits. In the dynamic nanocell model that we present first, the accuracy is sacrificed for the salve of speed; the electrical behavior of the nanocell is approximated so that the complex system of equations is not solved, but a useful approximation can be obtained.
The genetic algorithm used is recorded on the attached appendix in file vzNanocell.cpp.
Dynamic Nanocell Model Cellular automata (CA) are dynamical system with discrete values for space and time.
The states of cells in a regular lattice are updated synchronously according to a deterministic rule relying only on the states of local or neighboring cells [c]. While the state of each cell is often limited to small set of discrete values, it is not uncommon to extend the concept of CA's to permit a real valued state variable [d]. The dynamic nanocell model is a cellular automata in which a hexagonal lattice represents the nanocell and the cells in the lattice represent individual gold nanoparticles. The real valued state variable for a cell is the voltage potential of the nanoparticle and the transition rule for changing the state variable at each time step is to adjust the voltage potential of the nanoparticle to malce it Kirchhoff compliant with its neighboring cells. It has been said that computer scientist use cellular automata where physicist's use field theory governed by "field equations" and that using CA's provides an alternative computational approach that may outpenorm conventional methods by many orders of magnitude [a][b]. We believe that the dynamic nanocell model allows our search algorithms to execute in a timely manner and still accurately model the electrical characteristics of a physical device.
The transition rule for the dynamic nanocell model tools into account the nonlinearity of the I(V) curve in the NDR devices and allowed the model to simulate electric flow passing through the nanocell, not just fluid flow. This provided the capability to model more interesting logical devices, such as those with negating logic.
The dynamic model was evaluated in an incremental fashion as follows. All of the metallic nanoparticles were initialized with a voltage potential of 0, then a non-zero potential was applied to some of the nanoparticles that have been designated as inpudoutput points. The voltage potentials applied to the input points were ramped up incrementally until they reach the levels that represent the Boolean valued input to the nanocell and were then held constant through the simulation. The effected nanoparticles signaled their neighbors that a change has occurred. The nanoparticles then re-evaluated their own potentials by comparing their voltage potential with that of each of their immediate neighbors. The voltage differential of each neighbor along with the I(V) characteristics of the intervening molecular switches determined the amount of current that passes to or from each neighbor. If the sum of the current entering from some neighbors was not equal to the sum of the current that flows out to the remaining neighbors, then the nanoparticle's voltage potential was adjusted accordingly.
If an adjustment was peformed, then neighboring nanopanticles were signaled to re-evaluate their potentials.
This process was continued until nanoparticles were satisfied that their entering current were equal to their exiting current, thereby malting the system Kirchhoff-compliant. Finally, the cmTent was calculated at each input/output.
Genetic algorithms were used to find a combination of switch settings that malee the nanocell behave as a desired logic gate. Since switches were either in an "on"
or an "off" state, the chromosome model was a set of bits, at values of 0 or 1, representing the state of all the switches in the cell, "off" or "on", respectively. Hexagonal arrays were used.
That is, the nanoparticles were laid down at the corners of triangles, with switches along the sides of the triangles. The genetic algorithm was able to find a combination of switch settings to make a small, 4 x 4, nanocell act as an XOR device. Further, it has been demonstrated in a "circular"
nanocell with a radius of one (that is one central nanoparticle surrounded by an approximately circular perimeter of six nanoparticles) that the nanocell can be trained to fuction as any of the ' 8 2x1 truth tables (2 inputs, 1 output). Still further, it has been demonstrated in a "circular"
nanocell with a radius of two (the above radius-one nanocell surrounded by another approximately circular perimeter of 12 nanoparticles) any of the 64 2x2 truth tables (2 inputs, 2 outputs). This dynamic nanocell model is simple and it executes relatively quicldy making it an excellent tool for studying search techniques and logical properties of the nanocell.
Each of the following references is hereby incorporated herein by reference:
[a] T. Toffoli, N.H.Margolus; "Invertible Cellular Automata: A Review", Cellular Automata: Theory and Experiment, H. Gutowitz, editor; 1991, A Bradford Boolc, The MIT
Press, Cambridge, Massachusetts, London England.
[b] T. Toffoli; "Cellular Automata as an Alternative to (Rather than An Approximation ofj Differential Equations in Modeling Physics. PHYSICA D, Nonlinear Phenomena, Vol lOD
(1984) Nos. 1 & 2, January 1984 [c] H. Gutowitz; "Introduction", Cellular Automata: Theory and Experiment, H.
Gutowitz same as [a]
[d] Chopard, Droz; Cellular Automata Modeling of Physical Systems; 1998, Cambridge University Press SPICE Model Spice Model The SPICE model simulates the complex device circuit properties of a nanocell.
We configured SPICE to inteuace with the genetic algorithm described in the previous section.
Using Microsoft's COM platform to interface through OLE to Intusoft's ICAPSl4 Windows SPICE variant, a nanocell simulator was developed. Calculations were also performed with HSPICE v. 1999.2 available from Avant. The nanocell simulator randomly generates nanocells and configures them to function as simple logic gates. Given the density and dimensions of the nanoparticles and the average density of the molecular switches, a random nanocell is generated as a hexagonal grid of metallic particles with the specified chosen density.
Molecular switches connecting adjacent nanoparticles are distributed following a Poisson distribution based around the given average density (Figure 7). After the creation of a nanocell, the settings on 20 surrounding input/output pins (five pins occupying each of the four sides) are specified. Each inputloutput pin can be set to input, output, or to float and thus behave like a nanoparticle. Inside the SPICE engine, individual molecules are modeled using nonlinear resistor circuit elements. Achieving convergence in SPICE was resolved by including the parasitic capacitance expected between the nanoparticles. The added capacitance prevents abrupt changes in the current from occurnng during simulations, which more realistically models the nanocell architecture and helps with convergence.
In the work described here, the logic gates are voltage-input and current-output circuits.
When setting the input/output pins to "high" or "low", we let V~, and V~ be the low and high voltages for input pins, respectively. When the truth table value of an input is 1, V~ volts are applied to this pin. A truth table value of 0 indicates that V~ volts are applied. Similarly, we set IoL and IoH as the output current thresholds, respectively. If the current through an output pin is at or below IoL, that pin is considered "off", and if the current is at or above IoH, the pin is considered "on". , Given a number of two-state inputs and outputs, a truth table describes the desired logic. Testing each individual truth is not sufficient. Each transition between truths must be tested as well. Input graphs and corresponding truth tables for an inverter, a NAND gate, and the inverse of a half-adder are displayed in a later section.
By parsing the output from SPICE,, we determined the output of the nanocell at each clock step. We then compare these readings to IoH and IoL to determine if the output pin is "on", "off", or neither (between the discrete threshold settings). In this way, we determined the logic of any given nanocell. By comparing this logic to the desired truth table, we can determine if the nanocell performs the desired logic function.
For a fixed nanocell it is desirable to search among all possible combinations of switch states, where the location of each switch is fixed. In other words, a new switch cannot be added between nanoparticles, and existing switches cannot be removed. Only the switch states can be altered. In the SPICE model, pin settings and "on" and "off" current thresholds (IoL and IoH) were constant. The objective was to fix these parameters such that any random nanocell, of a particular nanoparticle and molecular switch density, can be trained as some target logic gate.
Exemplar y setting were determined for inverters, NAND gates and inverse half-adders.
A representative SPICE listing of an exemplary nanocell in an unprogrammed state is recorded on the attached APPENDIX in file Trained Nanocell.doc. The "on"-"off"
states of the molecular switches of the unprogrammed nanocell is shown in Figure 7.
A representative SPICE listing a the same nanocell reprogrammed to function as an Inverter is recording on the attached APPENDIX in file Trained Nanocell.doc.
The "on"-"off"
states of the nanocell functioning as a programmed Inverter are shown in Figure 8.
A representative SPICE listing of the same nanocell programmed to function as a NAND gate is recorded on the attached APPENDIX in file Trained ,Nanocell.doc.
The "on"-"off" states of the nanocell functioning as a programmed NAND are shown in Figure 9.
A representative SPICE listing of the same nanocell programmed to function as a Inverse Half Adder is recorded on the attached APPENDIX in file Trained Nanocell.doc. The "on"-"off" states of the nanocell functioning as a programmed Inverse Half Adder are shown in Figure 10.
The above-described results demonstrate the programmable and reprogrammability of the exemplary nanocell shown in Figure 7.
While preferred embodiments of this invention have been shown and described, modifications thereof can be made by one spilled in the art without departing from the spirit or teaching of this invention. The embodiments described herein are exemplary only and are not limiting. Many variations and modifications of the device, computer, and methods are possible and are within the scope of the invention. Accordingly, the scope of protection is not limited to the embodiments described herein, but is only limited by the claims that follow, the scope of which shall include all equivalents of the subject matter of the claims.

APPENDIX
adjust.cpp /* . , *******************************************************************
*********
adjust.cpp Van Zandt ***~****************************************************************
*********
*/
#include "vzComputer.h"
void main() vzNanoCell *myCell;
myCell= new vzNanoCell;
StartGraphi-cs ( ) ;
SetTimer(0);
myCell->DoCreate(5,4,30,30,80,90);
m~Cell->SetInReg("00100");
myCell->SetOutReg("00000");
myCell->DoDraw();
readkey();
rectfill(screen,0,0,5,5,WHITE);
myCell->DoAdjust();
rectfill(screen,0,0,5,5,BLACK);
readkey();
delete myCell;
StopGraphics();
return 0;
//*****************************************************************
*********

conduct.cpp /*
*******************************************************************
*********
conduct.cpp Van Zandt *******************************************************************
*********
*/
#include "vzComputer.h"
void main() {.
vzNanoCell *myCell;
myCell= new vzNanoCell;
StartGraphics();
SetTimer(5);
myCell->DoCreate(5,9,30,30,75,75);
myCell->SetInReg("01000")-;
myCell->SetOutReg("01010");
myCell->DoDraw();
readkey();
myCell->DoConduct();
readkey();
delete myCell;
StopGraphics();
return 0;
//*****************************************************************
*********

draw.cpp /*
***************************************************************
Draw.cpp Van Zandt ***************************************************************
*/
#include "vzComputer.h"
void main() StartGraphics();
line(screen,50,50,70,70,VJHITE);
line(screen,51,50,71,70,WHITE);
line(screen,52,50,72,70,WHITE);
circlefill(screen,50,50,10,RED);
circlefill(screen,70,70,10,RED);
line(screen,50,150,70,170,WHITE);
circlefill(screen,50,150,10,LIGHTRED);
circlefill(screen,70,170,10,LIGHTRED);
readkey();
StopGraphics();

flood.cpp /*
*******************************************************************
*********
flood.cpp Van Zandt *******************************************************************
*********
*/
#include "vzComputer.h"~
void main() vzNanoCell *myCell;
myCell= new vzNanoCell;
StartGraphics();
SetTimer(1);
myCell->DoCreate(5,4,30,30,80,80);
myCell->SetInReg("00100");
myCell->SetOutReg("01010");
myCell->DoDraw();
save_bitmap("floodl.bmp", screen, desktop~alette);
readkey();
//myCell->DoAdjust();
//myCell->DoDraw();
myCell->DoFlood();
save_bitmap("flood2.bmp", screen, desktop~alette);
readkey();
delete myCell;
StopGraphics();
return 0;
//*****************************************************************
*********

gal.cpp /*
*******************************************************************
*********
gal.cpp Van Zandt *******************************************************************
*********
*/
#include "vzComputer.h"
#include "vzPopulation.h"
#include <iostream.h>
vzNanoCell *myCell;
double theEvaluator(vzIndividual *iPtr);
void main() {.....
int i;
char buffer[80];
vzPopulation *myPopulationPtr;
StartGraphics();
myCell= new vzNanoCell;
SetTimer(0);
myCell->DoCreate(5,4,30,30,80,90);
myPopulationPtr = new vzPopulation(500, myCell->GetSwitchCo unt(), 2, theEvaluator);
myCell->DoClear();
myCell->SetInReg("00100");
myCell->SetOutReg("00000");
myCell->DoDraw();
readkey ( ). ;
myCell->DoFlood();
save bitmap("floodl.bmp", screen, desktop~alette);
readkey ( ) ;
rectfill(screen,0,0,SCREEN W,SCREEN_H,WHITE);
myPopulationPtr->BuildRandom();
myPopulationPtr->ReGenerate(100);
readkey();

gal.cpp rectfill(screen,O,O,SCREEN_W,SCREEN_H,BLACK);
myCell->DoClear();
myCell->SetInReg("00100");
myCell->SetOutReg("00000");
myCell->LoadSwitch(myPopulationPtr->
PopulationPtr->SelectBest())->
a myCell->DoDraw();
readkey ( ) ;
GetIndividualPtr(my GetChromosomePtr()) myCell->DoFlood();
save bitmap("flood2.bmp", screen, desktop~alette);
readkey ( ) ;
StopGraphics();
delete myPopulationPtr;
delete myCell;
return 0;
double theEvaluator(vzIndividual *iPtr) static int i = 0;
char buffer[80];
double tmpFitness;
double totFitness = 0.0;
myCell->DoClear();
myCell->LoadSwitch(iPtr->GetChromosomePtr());
myCell->SetInReg("00100");
myCell->SetOutReg("00000"); ' myCell->DoAdjust();
tmpFitness = (double)myCell->GetPinPtr(out,0)->GetPinDistan ce(in,2);
if ( tmpFitness =- -1.00 ) tmpFitness = 0.00;
else tmpFitness = 1000.0 - tmpFitness;
totFitness += tmpFitness;
tmpFitness = (double)myCell->GetPinPtr(out,1)->GetPinDistan ce(in,2);
if ( tmpFitness =- -1.00 ) tmpFitness = 0.00;
else tmpFitness = 1000.0 - tmpFitness;

gal.cpp totFitness += tmpFitness;
tmpFitness = (double)myCell->GetPinPtr(out,3)->GetPinDistan ce(in,2);
if ( tmpFitness =- -1.00 ) tmpFitness = 0.00;
else tmpFitness = 1000.0 - tmpFitness;
totFitness += tmpFitness;
tmpFitness = (double)myCell->GetPinPtr(out,4)->GetPinDistan ce{in,2);
if ( tmpFitness =- -1.00 ), tmpFitness = 0.00;
else tmpFitness = 1000.0 - tmpFitness;
totFitness += tmpFitness;
tmpFitness = (double)myCell->GetPinPtr(in,1)->GetPinDistanc e(in,2);
if ( tmpFitness =- -1.00 ) tmpFitness = 0.00;
else tmpFitness = 1000.0 - tmpFitness;
totFitness += tmpFitness; .
tmpFitness = (double)myCell->GetPinPtr(in,3)->GetPinDistanc e(in,,2);
if ( tmpFitness =- -1.00 ) tmpFitness = 0.00;
else tmpFitness = 1000.0 - tmpFitness;
totFitness '+= tmpFitness;
// ________ tmpFitness = (double)myCell->GetPinPtr(out,2)->GetPinDistan ce(in,2);
if ( tmpFitness =- -1.00 ) tmpFitness = 1000.00;
else if ( tmpFitness < 50 ) tmpFitness = 0.00;
else tmpFitness = tmpFitness - 50;
totFitness += tmpFitness;
tmpFitness = (double)myCell->GetPinPtr(in,0)->GetPinDistanc e(in,2);
if ( tmpFitness =- -1.00 ) tmpFitness = 1000.00;
else if ( tmpFitness < 50 ) tmpFitriess = 0.00;
else tmpFitness = tmpFitness~- 50;
totFitness += tmpFitness;
tmpFitness = (double)myCell->GetPinPtr(in,4)->GetPinDistanc e(in,2);
if ( tmpFitness =- -1.00 ) tmpFitness = 1000.00;
else if ( tmpFitness < 50 ) tmpFitness = 0.00;
else tmpFitness = tmpFitness - 50;
totFitness += tmpFitness;

gal.cpp sprintf(buffer,"~d: of",i++, totFitness);
textout(screen,font,buffer,5,5,BLACK);
return totFitness;
//*****************************************************************
*********

parity.cpp /*
************************************************************
parity.cpp Van Zandt ************************************************************
*/
#include "vzClassifier.h"
int gClassifierSetSize = 100;
double gGeneralTaxRate = .01;
double gBadMatchTaxRate = .10;
double gHonorariumRate = .0;
int gMutationPer1000 = 100;
int gTournamentSize = 100;
int gTournamentCount = 10;
int gRegeneratePer1000 = 1000;
int main() vzClassSystem myClass( gClassifierSetSize, gGe neralTaxRate, gBa dMatchTaxRate, gHo norariumRate, gMu tationPer1000, gTo urnamentSize, gTo urnamentCount, gRe generatePer1000 );.

~vzVector<int> SO(3);

vzVector<int> S1(3);

vzVector<int> S2(3);

vzVector<int> S3(3);

vzVector<int> S4(3);

vzVector<int> S5(3);

vzVector<int> S6(3);

vzVector<int> S7(3);

vzVector<int> Solution(8);

int i;

parity.cpp int maxCycle = 1000;

int theScore;

SO [0]
= 0;

SO [1]
= 0;

SO [2]
= 0;

Solution[0]= 1;

S1 [0]
= 0;

S1 [1]
= 0;

S1 [2]
= 1;

Solution[1]- 0;

S2 [0]
= 0;

S2 [1]
= 1;

S2 [2]
= 0;

Solution[2]- 0;

S3 [0]
= 0;

S3 [1]
= 1;

S3 [2]
= 1;

Solution[3]= 1;

S4 [0]
= 1;

S4 [1]
= 0;

S4[2] =
0;

Solution[4]- 0;

S5 [0]
= 1;

S5[1] =
0;

S5 [2]
= 1;

Solution[5]- 1;

S6 [0]
= 1;

S6 [1]
= 1;

S6[2] =
0;

Solution[6]= 1;

S7 [0]
= 1;

S7 [1]
= 1;

S7 [2]
= 1;

Solution[7]- 0;

for (i=0;
i<maxCycle;
i++) theScore = 0;

parity.cpp if ( Solution[0] _= myClass.GetMove(SO) ) { theScore++; myClass.ApplyReward(1000); }
if ( Solution[1] _= myClass.GetMove(S1) ) { theScore~+; myClass.ApplyReward(1000); }
if ( Solution[2] _= myClass.GetMove(S2) ) { theScore++; myClass.ApplyReward(1000); }
if ( Solution[3] _= myClass.GetMove(S3) ) . { theScore++; myClass.ApplyReward(1000); }
if ( Solution[4] _= myClass.GetMove(S4) ) ( theScore++; myClass.ApplyReward(1000); }
if ( Solution[5] _= myClass.GetMove(S5) ) { theScore++; myClass.ApplyReward(1000); }
if ( Solution[6] _= myClass.GetMove(S6) ) { theScore++; myClass.ApplyReward(1000); }
if ( Solution[7] _= myClass.GetMove(S7) ) { theScore++; myClass.ApplyReward(1000); }
cout « i « " -> " « theScore « endl;
doPause(10);
}~
return 0;

plot.cpp /*
**********************************************'*****************
Plot.cpp Van Zandt ***************************************************************
*/
#include <math.h>
#include "vzComputer.h"
void main ( )' double x, y;
int i;
StartGraphics();
int myBorder =.20;
int XO = SCREEN_W/2;
int YO = SCREEN_H12;
line(screen,XO,YO-(YO-myBorder),XO, YO+(YO-myBorder),WHITE);
line(screen,XO-(XO-myBorder),YO,XO+(XO-myBorder),YO,WHITE);
for ( i=-75; i<=75; i+=2 ) x = i + 0.00;
y = 150.0 * sin((x*PI)/50.0);
if ( x*PI/50.0 > PI/2 && y < 50.0 ) y = 50.0;
if ( x*PI/50.0 < -PI/2 && y >-50.0 ) y = -50.0;
circlefill(screen,XO+({int)x*4),YO-(int)y,3,RED);
x = i + 1.00;
y = 150.0 * sin((x*PI)/50.0);
if ( (x > 0.0 && y > 50.0) ~~ x*PI/50.0 > PI/2 ) y = 50.0;
if ( (x < 0.0 && y < -50.0) ~~ x*PI/50.0 < -PT/2 ).
y = '-50.0;
circlefill(screen,XO+((int)x*4),YO-(int)y,3,LIGHTRED);
save_bitmap("plot.bmp", screen, desktop~alette);
readkey();
StopGraphics ( ) ;

ptest.cpp /*
ptest.cpp Van Zandt */
#include <iostream.h>
#include <conio.h>
#include <math.h>
#include "vzTools.h"
int PoissonRandom(double expectedvalue);
void main() int k = 5;
int i;
int n;
int result[20];
double sum = 0.0;
for ( i=0; i<20; i++ ) result[i] = 0;
for ( i=0; i<1000; i++ ) n = PoissonRandom((double)k);
result[n]++;
sum += n;
for ( i=0; i<20; i++ ) cout « i « '\t' « result[i] « endl;
Gout « endl « endl « sum11000.0 « endl;
getch ( ) ;
int PoissonRandom(double expectedvalue) int n = 0;
double limit;
double x;
limit = exp(-expectedvalue);
x = getRandom(1000000)/1000000.0;
while ( x > limit ) n++;
x *= getRandom(1000000)/1000000.0;

ptest.cpp return n;

Run.cpp /*
*******************************************************************
*********
vzRun.cpp Van Zandt *******************************************************************
*********
*/
#include "vzComputer.h"
void main() vzNanoCell *myCell;
myCell= new vzNanoCell;
StartGraphics();
SetTimer(0);
myCell->DoCreate(5,9,30,30,75,75);
//myCell->SetInReg("01000");
//myCell->SetOutReg("01010");
myCell->DoDraw();
readkey();
myCell->DoAdjust();
//myCell->DoDraw();
readkey ( ) ;
delete myCell;
StopGraphics();
return 0;
//*****************************************************************
*********

theSimulator.cpp /*
*******************************************************************
*********
theSimulator.cpp Van Zandt *******************************************************************
*********
*/ ..
#include ~ "vzComputer.h"
#include "vzPopulation.h" .
vzNanocell *myCell;
double theEvaluatorl(vzIndividual *iPtr);

double theEvaluator2(vzIndividual *iPtr);

double doScore(int n, bool IsItAnd);

int . doNew ( ) ; .
' int doClear();

int doRun();

int doAbout();

int doExit();

int doSet10000();

int doSet01000();

int doSet11000();

int doStore();

int doLoad();

int doPaint();

int. doSelect();

int doTrainAND();

int doTrainOR();

int doGetAND();

int doGetOR();

int doClassifierAND();

MENU theFileMenu[]
{
{ "Load ", doLoad, NULL, NULL }, { ~ "Store ", doStore, NULL, NULL }, { "Paint ", doPaint, NULL, NULL }, { "Select ", doSelect, NULL, NULL }, .

{ " ", NULL, NULL, ~theSimulator.cpp NULL }, { "Exit "., doExit,NULL, NULL }

}:

MENU theTrainMenu[]
_ { "AND ", doTrairiAND, NULL,NULL }, { "OR ", doTrainOR, NULL,NULL }, { .. .. NULL

NULL,NULL }, { "AND Circuit", doGetAND, NULL, NULL }, { "OR Circuit", doGetOR, NULL, NULL }, { ~~ .. ~ ~L

NULL,NULL }, { "AND Classifier", doClassifierAND, NUL

L, NULL }

}i MENU theMenu [
]
_ { "File ", NULL, theFileMenu NULL }, { "Train ", NULL, theTrainMen u, NULL }, { " The Nanocell Simu lator", doAbout, NULL, NULL }

}~

MENU theRunMenu[]
-{ "New ", doNew, NULL, NULL }, { "Run ", doRun, NULL, NULL }, { "Clear ", doClear,NULL, ~

NULL }, { , " ", NULL, NULL, NULL

}.

{ "Set[10000] doSet10000, NULL, NULL
", }.

{ "Set[01000] doSet01000, NULL, NULL
", theSimulator.cpp }~
{ "Set[11000] ", doSet11000, NULL, ~7L
L }
};
DIALOG the_dialog[]
l* (dialog proc) (x) (y) (w) (h) (fg) (bg) (key) flags) (d1) (d2) (dp) (dp2) (dpi) */
{ d_box,~roc, 0, 0, 639, 479, 255, 4, 0, 0 0, 0, NULL, ~ NULL, NULL }, { d_box~roc, 12, 12, 615, 455, 8, 6, 0, 0 0, 0, NULL, NULL, NULL }, d_menu~roc, 12, 13, 0, 0, 0, 0, 0, 0 0, 0, (void *)theMenu, NULL, NULL }, { d_menu~roc, 12, 454, 0, 0, 0, 0, 0, 0 0, 0, (void *)theRunMenu, NULL, NULL }, { NULL, 0, 0, 0, 0, 0, 0, 0, 0 0, 0, NULL, NULL, NULL }
}; ' int main() .
StartGraphics();
SetTimer(0);
TraceOff();
do_dialog(the_dialog, -1);
if ( myCell != NULL ) delete myCell;
StopGraphics();
return 0;
}
int doNew() show mouse(NULL);
if ( myCell != NULL ) delete myCell;
myCell= new vzNanocell;

theSimulator.cpp myCell->DoCreate(5,4,30,30,85,90);
myCell->DoDraw();
show mouse(screen);
return D 0 K;
int doAbout() char strl[] _ "The Nanocell Simulator";
char str2[] _ "by Bill Van Zandt";
char str3G] _ "and Eric Libby";
alert(strl,str2,str3,"OK",NULL,0,0);
return D_0_K;
int doClear() int i;
char msg[20] - "
char buffer[40] _ " ";
if ( myCell !='NULL ) show_mouse(NULL);
text mode(CYAN);
for (i=0; i<myCell->GetPinNum(); i++) textout(screen, font, msg, 540,myCell->PinH
eight(i),BLACK);
textout(screen, font, msg, 540,myCell->PinHeight(i) +10,BLACK);
textout(screen, font, msg, 15, myCell->PinH
eight(i),BLACK);
textout(screen, -font, msg, 15, myCell->PinHeight(i) +10,BLACK);
textout(screen,font,buffer,20,440,BLACK);
TraceOn();
myCell->ClearCell();

theSimulator.cpp TraceOff();
show mouse(screen);
else {
show mouse(NULL);
rectfill(screen,25,25,615,445,CYAN);
show mouse(screen);
return D 0 K;
int doRun() int i;
int flow;
char msg[20);
if ( myCell != NULL
{
show mouse(NULL);
text mode(CYAN);
myCell->DoFlow();
for (i=0; i<myCell->GetPinNum(); i++) {
flow=0;
eight(i),BLACK);
flow=myCell->GetInitialFlow(false,i);
sprintf(msg, "init = od", flow);
textout(screen, font, msg, 540,myCell->PinH
flow=myCell->GetFlow(false,i);
sprintf(msg, "flow = ad",flow);
textout(screen, font, msg, 540,myCell->PinHeight(i) +10,BLACK);
flow=myCell->GetInitialFlow(true,i);
sprintf(msg, "init = ~d", flow);
textout(screen, font, msg, 15, myCell->PinH
eight(i),BLACK);

theSimulator.cpp flow=myCell->GetFlow(true,i);
sprintf(msg, "flow = od",flow);
textout(screen, font, msg, l5,myCell->PinHeight(i)+
10,BLACK);
myCell->Drawpaths();
show_mouse(screen);
return D_0_K;
int doSelect() {
char path[81];
file_select("Select File", path, NULL);
doClear(); .
return D 0 K;
int doSet10000() {
char msg(20];
if ( myCell != NULL ) doClear();
show mouse(NULL);
text mode(CYAN);
TraceOn();
myCell->SetPin(true, 0, kStartFlow);
sprintf(msg, "flow = o-5d", kStartFlow);
textout(screen, font, msg, l6,myCell->PinHeight(0),BLACK);
myCell->DeactivatePin(true, 1);
myCell->DeactivatePin(true, 2);
myCell->DeactivatePin(true, 3);

theSimulator.cpp myCell->DeactivatePin(true, 4);
TraceOff ( ) ;
show_mouse(screen);
return D 0 K;
int doSet01000() char msg[20];
if ( myCell != NULL ) doClear();
show mouse(NULL);
text mode(CYAN);
TraceOn();
myCell->SetPin(true, 1, kStartFlow);
sprintf(msg, "flow = ~-5d", kStartFlow);
textout(screen, font, msg, l6,myCell->PinHeight(1),BLACK);
myCell->DeactivatePin(true, 0);
myCell->DeactivatePin(true, 2);
myCell->DeactivatePin(true, 3);
myCell->DeactivatePin(true, 4);
TraceOff ( ) ;
show mouse(screen);
return D 0 K;
int doSet11000() char msg[20];
if ( myCell != NULL ) doClear();
show mouse(NULL);

theSimulator.cpp text mode(-1);
TraceOn();
myCell->SetPin(true, 0, kStartFlow);
sprintf(msg, "flow = o-5d", kStartFlow);
textout(screen, font, msg, l6,myCell->PinHeight(0),BLACK);
myCell->SetPin(true, 1, kStartFlow); .
sprintf(msg, "flow = o-5d", kStartFlow);
textout(screen, font, msg, l6,myCell->PinHeight(1),BLACK);
myCell->DeactivatePin(true, 2);
myCell->DeactivatePin(true, 3);
myCell->DeactivatePin(true, 4);
TraceOff();
show_mouse(screen);
return D 0 K;
int doStore() if ( myCell != NULL ) myCell->DoStore("Nanocell.out");
return D_0 K;
int doLoad() show mouse(NULL);
doClear ( ) ;
~if ( myCell != NULL ) delete myCell;
myCell = new vzNanocell;
myCell->DoLoad("Nanocell.out");
myCell->DoDraw();
show_mouse(screen);

theSimulator.cpp return D 0 K;
int doGetAND() show_mouse(NULL);
doClear();
if ( myCell != NULL ) delete myCell;
myCell = new vzNanocell;
myCell->DoLoad("Nanocell.and");
myCell->DoDraw();
show_mouse(screen);
return D_0 K;
int doGetOR() show_mouse(NULL);
doClear();
if ( myCell != NULL ) delete myCell;
myCell = new vzNanocell;
myCell->DoLoad("Nanocell.or");
myCell->DoDraw();
show_mouse(screen);
return D 0 K;
int doPaint() char buffer[40];
static int bmp = 1;

theSimulator.cpp sprintf(buffer,"mcPaintod.bmp", bmp);
save_bitmap(buffer,screen,desktop~alette);
bmp++;
return D_0_K;
int doTrainAND() vzPopulation *myPopulationPtr;
if ( myCell != NULL ) doClear();
TraceOff();
myPopulationPtr = new vzPopulation( 20, //mkTournamentCount 32, //mkTournamentSize 400, //mkMutate 500, l/mkCrossover 100, //mkRandom, 50, //mkCount myCell->GetSwitchCo unt(), //mkSize 2, //mkAlphabetCount the Evaluator2); //Evaluation Ptr myCell->ClearCell();
myPopulationPtr->BuildRandom();
. myPopulationPtr->ReGenerate(50);
myCell->ClearCell();
myCell->LoadSwitch(myPopulationPtr->
GetIndividualPtr(myPopulationPtr->S
electBest())->
GetChromosomePtr());

theSimulator.cpp delete myPopulationPtr;
return D_0_K;
int doTrainOR() vzPopulation *myPopulationPtr;
if ( myCell != NULL ) doClear();
TraceOf f ( ) ;
myPopulationPtr = new vzPopulation( 20, //mkTournamentCount 32, //mkTournamentSize 400, /lmkMutate 500, //mkCrossover 100, //mkRandom, 50,. //mkCount myCell->GetSwitchCo unt(), //mkSize 2, //mkAlphabetCount the Evaluatorl); //Evaluation Ptr myCell->ClearCell();
myPopulationPtr->BuildRandom();
myPopulationPtr->ReGenerate(10);
TraceOn();
myCell->ClearCell();
TraceOff ( ) ;
myCell->LoadSwitch(myPopulationPtr->
GetIndividualPtr(myPopulationPtr->S
electBest())->
GetChromosomePtr());

theSimulator.cpp delete myPopulationPtr;
return D 0 K;
int doExit() return D_CLOSE;
double theEvaluatorl(v~Individual *iPtr) static int i = 0;
char buffer[80];
int tmpFlow;
double totFitness = 0.0;
text mode(CYAN);
myCell->LoadSwitch(iPtr->GetChromosomePtr());
myCell->ClearCell();
myCell->SetInReg("10000");
myCell->SetOutReg("*****");
myCell->DoFlow();
totFitness += doScore(0, false);
myCell->ClearCell();
myCell->SetInReg("01000");
myCell->SetOutReg("*****");
myCell->DoFlow();
totFitness += doScore(1, false);
myCell->ClearCell();
myCell->SetInReg("11000");
myCell->SetOutReg("*****");
myCell->DoFlow();
totFitness += doScore(2, false);
sprintf(buffer,"od: ~f",i++, totFitness);
textout(screen,font,buffer,20,440,BLACK);
if (totFitness==0) i=0;

theSimulator.cpp return totFitness;
double theEvaluator2(vzIndividual *iPtr) static int i = 0;
char buffer[80];
int tmpFlow;
double totFitness = 0.0;
text mode(CYAN);
myCell->LoadSwitch(iPtr->GetChromosomePtr());
myCell->ClearCell();
myCell->SetInReg("10000");
myCell->SetOutReg("*****");
myCell->DoFlow();
totFitness += doScore(0, true);
myCell->ClearCell();
myCell->SetInReg("01000");
myCell->SetOutReg("*****");
myCell->DoFlow();
totFitness += doScore(1, true);
myCell->ClearCell();
myCell->SetInReg("11000");
myCell->SetOutReg("*****");
myCell->DoFlow();
totFitness += doScore(2, true);
sprintf(buffer,"~d: ~f",i++, totFitness); .
textout(screen,font,buffer,20,440,BLACK);
if (totFitness==0) i=0;
return totFitness;
double doScore(int n, bool IsItAnd) // AND: in(~~~~***..) __> out(~~~****..) theSimulator.cpp int tmpFlow;
double retFitness = 0.0;
if (IsItAnd) switch(n) case 0: // in("10000"
case 1: // in("01000"
tmpFlow = myCell->GetPinPtr(out,0)->GetFlow(true);
if ( tmpFlow <= kLowFlow ) retFitness += 0.00;
else retFitness.+= (double)(tmpF
low - kLowFlow);
break;
case 2: // in("11000") tmpFlow = myCell->GetPinPtr(out,0)->GetFlow(true);
if ( tmpFlow >= kHighFlow ) retFitness += 0.00;
else retFitness +_ (double)(kHig hFlow - tmpFlow);
break;
tmpFlow = myCell->GetPinPtr(out,1)->GetFlow(true);
if ( tmpFlow <= kLowFlow ) retFitness += 0.00;
else retFitness +_ (double)(tmpFlow - kLowFlow);
tmpFlow = myCell->GetPinPtr(out;2)->GetFlow(true);
if ( tmpFlow <= kLowFlow ) retFitness += 0.00;
else retFitness +_ (double)(tmpFlow - kLowFlow);
tmpFlow = myCell->GetPinPtr(out,3)->GetFlow(true);
if ( tmpFlow <= kLowFlow ) retFitness += 0.00;
else retFitness +_ (double)(tmpFlow - kLowFlow);
tmpFlow = myCell->GetPinPtr(out,4)->GetFlow(true);
if ( tmpFlow <= kLowFlow ) retFitness += 0.00;

theSimulator.cpp else else retFitness +_ {double)(tmpFlow - kLowFlow);
switch(n) , case 0: // in{"10000") case 1: // in("01000") case 2: l/ in("11000") tmpFlow = myCell->GetPinPtr(out,0)->GetFlow (true);
if ( tmpFlow >= kHighFlow ) retFitness += 0.00;
else retFitness +_ (double)(kHighFlow -tmpFlow);
break;
tmpFlow = myCell->GetPinPtr(out,1)->GetFlow(true);
if ( tmpFlow <= kLowFlow ) retFitness += 0.00;
else retFitness +_ (double)(tmpFlow - kLowFlow);
tmpFlow = myCell->GetPinPtr(out,2)->GetFlow(true);
if ( tmpFlow <= kLowFlow ) retFitness += 0.00;
else 'retFitness +_ (double)(tmpFlow - kLowFlow);
tmpFlow = myCell->GetPinPtr(out,3)->GetFlow(true);
if { tmpFlow <= kLowFlow ) retFitness +_' 0.00;
else retFitness +_ (double)(tmpFlow - kLowFlow);
tmpFlow = myCell->GetPinPtr(out,4)->GetFlow{true);
if ( tmpFlow <= kLowFlow ) retFitness += 0.00; .
else retFitness +_ (double)(tmpFlow - kLowFlow);
return retFitness;

theSimulator.cpp int doClassifierAND() return D 0 K;

vzGrid.cpp /*
*******************************************************************
*******
vzGrid.cpp Van Zandt *******************************************************************
*******
*/
vzGrid::vzGrid() vzGrid: : wzGrid ( ) void vzGrid::DoCreate(int NumConn, int NumSwit) mNumConn=NumConn;
mNumSwit=NumSwit;
mBoxHeight=190/(2*mNumConn);
mBoxWidth=320/(2*mNumSwit);
mCount=-1;

void vzGrid::DoDraw(int CurrentConn, int CurrentSwit, int Successva 1) int x, y;
x=CurrentConn;
y=CurrentSwit;
mCount++;
if ((Successval>=90)&&(Successval<100)) box(mBoxWidth*2*x+5,2*y*mBoxHeight+lO,mBoxWidth*(2*
x+1)+5, mBoxHeight*(2*y+1)+10,RED, FILLED);
if ((Successval>=80)&&(Successval<90)) box(mBoxWidth*2*x+5,2*y*mBoxHeight+lO,mBoxWidth*(2*
x+1)+5, mBoxHeight*(2*y+1)+10,MAGENTA, FILLED);
if ((Successval>=70)&&(Successval<80)) box(mBoxWidth*2*x+5,2*y*mBoxHeight+lO,mBoxWidth*(2*
x+1)+5, . .

vzGrid.cpp mBoxHeight*(2*y+1)+10,YELLOW, FILLED);
x+1)+5, x+1)+5, x+1)+5, x+1)+5, if ((Successval>=60)&&(Successval<70)) box(mBoxWidth*2*x+5,2*y*mBo~cHeight+lO,mBoxWidth*(2*' mBoxHeight*(2*y+1)+10,GREEN, FILLED);
if ((Successval>=50)&&(Successval<60)) box(mBoxWidth*2*x+5,2*y*mBoxHeight+lO,mBoxWidth*(2*
mBoxHeight*(2*y+1)+10,CYAN, FILLED);
if ((Successval<50)) box(mBOxWidth*2*x+5,2*y*mBoxHeight+lO,mBoxWidth*(2*
mBoxHeight*(2*y+1)+10,BLUE, FILLED);
if (Successval==100) box(mBoxWidth*2*x+5,2*y*mBoxHeight+lO,mBoxWidth*(2*
mBoxHeight*(2*y+1)+10,WHITE, FILLED);

vzGrid.h /*
*******************************************************************
***** ' vzGrid.h .
Van Zandt *******************************************************************
*****
*/
#if !defined( vzGrid_h) #define vzGrid_h .
#include <conio.h>
class vzGrid private:
int mBoxHeight;
int mBoxWidth;
int mNumSwit;
int mNumConn;
int mCount;
public:
vzGrid();
wzGrid ( ) ;
void DoCreate(int NumConn,int NumSwit);
void DoDraw(int CurrentConn, i.nt CurrentSwit; int Successva 1);
}.
#include "vzGrid.cpp"
#endif // _vzGrid_h vzPercolation.cpp /*
*******************************************************************
*********
vzPercolation.cpp Van Zandt -*****~************************************************************'**
*********
*/
const int kRegisterWidth=15;
#include "vzNanoCell.h"
#include <iostream.h>
#include "vzGrid.h"
void main() int connx;
int swity;
int x,y,p;
float success;
int i;~
int testnum;
vzGrid myGrid;
vgainit();
cls(BLACK);
testnum=1;
i=-1c x=-1;
vzNanoCell *myCell;
myGrid.DoCreate(30,30);
for (connx=40;connx<101;connx=connx+2) x++;
y=-17 for (swity=40;swity<101;swity=swity+2) y++;
success=0;
i++;
for (p=O;p<testnum;p++) vzPercolation.cpp myCell= new vzNanoCell;
myCell->DoCreate(4,3,40,40,connx,swity);
myCell->DoLoad("1000");
myCell->DoFlood();
if (myCell->DoCheck()) success++;
delete myCell;
myCell= new vzNanoCell;
myCell->DoCreate(4,3,40,40,connx,swity);
myCell->DoLoad("0100");
myCell->DoFlood();
if (myCell->DoCheck()) success++;
delete myCell;
myCell= new vzNanoCell;
myCell->DoCreate(4,3,40,40,connx,swity);
myCell->DoLoad("0010");
myCell->DoFlood();
if (myCell->DoCheck()) success++;
delete myCell;
myCell= new vzNanoCell;
myCell->DoCreate(4,3,40,40,connx,swity);
myCell->DoLoad("0001");
myCell->DoFlood();
if (myCell->DoCheck()) success++;
delete myCell;
myGrid.DoDraw(x,y,success/testnum*25.00);

vzPercolation.cpp getch();
vgaexit();
return 0;
/l*****************************************************************
*********

vzClassifier.cpp /*
*******************************************************************
*******
Van Zandt vzClassifier.cpp *******************************************************************
*******
*/
vzClassifier::vzClassifier( int kClassifierSetSize, dou ble kGeneralTaxRate, ble kBadMatchTaxRate, dou dou ble kHonorariumRate, int kMutationPer1000, int kTournamentSize, int kTournamentCount, int kRegeneratePer1000 ) mClassifierSetSize(kClassifierSetSize), mGeneralTaxRate(kGeneralTaxRate), mBadMatchTaxRate(kBadMatchTaxRate), mHonorariumRate(kHonorariumRate), mMutationPer1000(kMutationPer1000), mTournamentSize(kTournamentSize), mTournamentCount(kTournamentCount), mRegeneratePer1000(kRegeneratePer1000) mClassifierSet.resize(mClassifierSetSize);

mMatchSet.resize(mClassifierSetSize)';

mActionSet.resize(mClassifierSetSize);

mOldActionSet.resize(mClassifierSetSize);

//BuildRandom();

mMatchSize = 0;

mActionSize = 0;

mOldActionSize = 0;

/*

vzClassifier.cpp void vzClassifier::PrintvzClassifiers(ofstream out) int ~ i;
for (i=0; i<kvzClassifierSetSize; i++) out « i « " ; _> .. ;
mClassifierSet[i].PrintToFile(out);
*/
void vzClassifier::BuildMatchSet(vzVector<int> theSensor) int i;
mMatchSize = 0;
for (i=0; i<mClassifierSet.length(); i++) if ( mClassifierSet[i].IsMatch(theSensor) ) mMatchSet[mMatchSize] = i;
mMatchSize++;
if ( mMatchSize =- 0 ) i = BuildCover(theSensor);
mMatchSet[mMatchSize] = i;
mMatchSize++; , int vzClassifier::GetMove(vzVector<int> theSensor) BuildMatchSet(theSensor);
return BuildActionSet();
int vzClassifier::BuildCover(vzVector<int> theSensor) int ~i ;
double average;
average = 0.0;

vzClassifier.cpp for (i=0; i<mClassifierSetSize; i++) average += mClassifierSet[i].GetFitness();
average /= mClassifierSetSize;
i = SelectWeak(mClassifierSet, mClassifierSet.length());
mClassifierSet[i].BuildCover(theSensor,average);
return i;
void vzClassifier::ApplyReward(int score) double tmpHonorarium = 0.0;
double totHonorarium = 0.0;
int bestAction;
int i;
double tmpFitness;
bestAction = mClassifierSet[mActionSet[0]].GetAction();
for (i=0; i<mClassifierSet.length(); i++) tmpFitness = mClassifierSet[i].GetFitness();
mClassifierSet[i].SetFitness( tmpFitness (1.0-mGener alTaxRate) );
for (i=0; i<mMatchSize; i++) if ( mClassifierSet[mMatchSet[i]].GetAction() != be stAction ) tmpFitness = mClassifierSet[mMatchSet[i]].G
etFitness();
mClassifierSet[mMatchSet[i]].SetFitness( tm pFitness (1.0-mBadMa tchTaxRate) );
}
/*
for (i=0; i<mActionSize; i++) tmpHonorarium = mClassifierSet[mActionSet[i]].GetFi mess ( ) kHonorariumRate;

vzClassifier.cpp mClassifierSet[mActionSet[i]].SetFitness( mClassifierSet[mActionSet[i]].GetFitness() - tmpHonorarium) totHonorarium += tmpHonorarium;
for (i=0; i<mOldActionSize; i++) mClassifierSet[mOldActionSet[i]].SetFitness(tmpHono rarium l mOldActionS
ize);
*/
for (i=0; i<mActionSize; ~i++) tmpFitness = mClassifierSet[mActionSet[i]].GetFitne ss();
tmpFitness *= 1.0+mGeneralTaxRate;
mClassifierSet[mActionSet[i]].SetFitness( tmpFitnes s +' (((double)s core)/mActionSize) );
DoTournament();
int vzClassifier::SelectStrongAction(vzVector<int> theS
et, int size) int i;
int r;
double TotalFitness;
TotalFitness = 0.0;
for ( i=0; i<size; i++ ) TotalFitness += mClassifierSet[theSet[i]].GetFitnes s();
r = getRandom( (int)TotalFitness );
TotalFitness = 0.0;
for ~( i=0; i<size; i++ ) TotalFitness += mClassifierSet[theSet[i]].GetFitnes vzClassifier.cpp s();
}
if ( TotalFitness >= r ) break;
return i;
int vzClassifier::BuildActionSet() int retSelection;
int i;
for (i=0; i<mActionSize; i++) mOldActionSet[i] = mActionSet[i];
mOldActionSize = mActionSize;
retSelection = SelectStrongAction(mMatchSet, mMatchSize):
mActionSize = 0;
for (i=0; i<mMatchSize; i++) if (mClassifierSet[mMatchSet[i]].GetAction() --mClassifierSet[mMatchSet[retSelecti on]].GetAction()) mActionSet[mActionSize] = mMatchSet[i];
mActionSize++;
}
}
return mClassifierSet[mMatchSet[retSelection]].GetAction();
//*****************************************************************
*******

vzClassifier.h /*
*******************************************************************
**********
Van Zandt vzClassifier.h **********************************************~*********************
**********
*/
#if !defined( vzClassifier h) #define ClassSystem h #include "vzPopulation.h"
#include "vzLib\vzTools.h"
#include "vzLib\vzVector.h"
class vzClassifier private:
int mClassifierSetSize;

double mGeneralTaxRate;

double mBadMatchTaxRate;

double mHonorariumRate;

int mMutationPer1000;

int mTournamentSize;

int mTournamentCount;

int mRegeneratePer1000;

int mMatchSize;

int mActionSize;

int mOldActionSize;

vzPopulation *mpClassifierSetPtr;
vzVec or<int> mMatchSet;
vzVector<int> mActionSet;
vzVector<int> mOldActionSet;
public:
r1000, Size, vzClassifier( int kClassifierSetSize, double kGeneralTaxRate, double kBadMatchTaxRate, double kHonorariumRate, int kMutationPe int kTournament int kTournament vzClassifier.h Count, Per1000 );
int kRegenerate int BuildCover(vzVector<int> theSensor);
void BuildMatchSet(vzVector<int> theSensor);
int GetMove(vzVector<int> theSensor);
int BuildActionSet();
int SelectStrongAction(vzVector<int> theSet, in t size);
void ApplyReward(int score);
// void PrintClassifiers(ofstream out);
?;
#include "vzClassifier.cpp"
#endif // vzClassifier h l/******************************************************'***********
*********

vzComputer.h /*
*******************************************************************
******
vzComputer.h Van Zandt *******************************************************************
******
*/
#if !defined( vzComputer_h) #define vzComputer_h #include <allegro.h>
#include <fstream.h>
// Global Variables staticboot GraphicsOn = false;

staticint TimerInterval = 0;

staticboot Trace = true;

staticbool New = false;

staticint Summation=0;

staticint Counter=0;

const int kHighFlow = 80;

const int kLowFlow = 40;

const int kHighCapacity = 100;

const int kLowCapacity = 20;

const int kStartFlow = 120;

enum vzCOLOR { WHITE, RED, GREEN, YELLOW, BLUE, MAGENTA, C
YAN, DARKGRAY, LIGHTGRAY, LIGHTRED, LIGHTG
REEN, LIGHTYELLOW, LIGHTBLUE, ACK };
void StartGraphics() {.
LIGHTMAGENTA; LIGHTCYAN, BL
allegro_init();
install_keyboard();
install_mouse();
-install timer();
set_gf~ mode(GFX_AUTODETECT,640,480,0,0);
set~allete (desktop~allete) ;
GraphicsOn = true;

vzComputer.h void StopGraphics() allegro exit();
GraphicsOn = false;
) l*
void CapacityChange() kHighCapacity = kHighCapacity-1;
kLowCapacity = kLowCapacity++;
void Sum(int x) Summation=Summation+x;
Counter++;
) int Average() int Average;
Average=SummationJCounter;
Counter=0;
Summation=0 ;
return Average;
) void FlowChange() kHighFlow = kHighFlow-1;
kLowFlow = kLowFlow++;
) *l void Reset() New=true;
void NoReset() {.
New=false;
) void SetTimer(int n) TimerInterval = n;

vzComputer.h void TraceOff() Trace=false;
void TraceOn() Trace=true;
#include "vzNanoCell.h"
#endif // vzComputer_h //*****************************************************************
******

vzConnector.cpp /*
*******************************************************************
*********
vzConnector.cpp Van Zandt *******************************************************************
*********
*/
vzConnector::vzConnector() vzConnector:: wzConnector() void vzConnector::DoCreate(int wordsize, int x0, int y0, int siz e, int x, int y, boot alive, vzEvent Q *apEventQ) int i;
mWordSize = wordsize;
mSize = size;
mX = x0 + (3*mSize*x); // + (3*mSize);
mY = y0 + (3*mSize*y) + ( (x~2) * (3*mSize/2) );
mAlive = alive;
mRow = y;
mColumn = x;
mpEventQ = apEventQ;
mColor = cOffColor;
mFlow = 0;
mLabel = false;
mpSource = NULL;
void vzConnector::DoDraw() if (mAlive) circlefill(screen,mX,mY,mSize,mColor);
void vzConnector::DoFlood() int i;

vzConnector.cpp if ((mColor==c~owColor) && (mAlive)) {
mColor=cHighColor;
if (Trace) DoDraw();
for (i=O;i<mNeighborCount;i++) mpEventQ->UpdateFuture(mNeighborArray[iJ);
int vzConnector::GetX() return mX;
int vzConnector::GetY() return mY;
int vzConnector::GetSize() return mSize;
void vzConnector::DoClear() if ( mAlive ) {.
mColor = cOffColor;
if (Trace) DoDraw();
mLabel = false;
mpSource = NULL;
mFlow = 0;
void bzConnector::GiveFlow('int .flow,bool meaningless, vzDevice *p) mFlow = flow;
mpSource = p;

vzConnector.cpp bool vzConnector::GetLabel() return mLabel;
int vzConnector::DoAugment(int x) int j;
for(j=O;j<mNeighborCount;j++) if (mNeighborArray[j]==mpSource) mColor=cLowColor;
if (Trace) DoDraw();
mpEventQ->UpdateFuture(mNeighborArray[j]);
return x;
void vzConnector::CheckFlow() int j;
int sum;
sum =0;
for (j=O;j<mNeighborCount;j++) sum=sum+mNeighborArray[j]->GetFlow(true)+mNeighborA
rray[j]->GetFlow(false);
sum=sum/2;
if (sum==0) mColor=cOffColor;
else if (sum<=kLowFlow) mColor=cLowColor;
else if (sum>=kHighFlow) mColor=cHighColor;
else mColor=cMiddleColor;
int vzConnector::DoLabel(bool lefttoright) int j~ space;
if ( (mLabel==false) && (mFlow>0) ) vzConnector.cpp mColor = cHighColor;
if (Trace) DoDraw();
for (j=O;j<mNeighborCount;j++) if (mNeighborArray[j]->GetLabel() _- false) space = mNeighborArray[j]->GetSpace(lefttoright);
if ( space != 0 ) if (space<mFlow) mNeighborAr ray[j]->GiveFlow(space, lefttoright,~this);
else ray[j]->GiveFlow(mFlow, lefttoright, this);
mNeighborAr mpEventQ->UpdateFuture(mNeighborArray[j]);
mLabel = true;
return 0;
void vzConnector::ClearStart() mColor = cOffColor;
mFlow = 0;
mLabel = false;
mpSource = NULL;
//*****************************************************************
*********

vzConnector.h /*
*******************************************************************
*********
vzConnector.h Van Zandt *******************************************************************
*********
*/
#if !defined( vzConnector h) #define vzConnector_h #include "vzLib\vzVector.h"
#include "vzDevice.h"
#include "vzEventQ.h"
const int cOffColor = DARKGRAY;
const int cLowColor = YELLOW;
const int cMiddleColor = LIGHTBLUE;
const int cHighColor = BLUE;
class vzRegister;
class vzConnector : public vzDevice private: .
int mX;
int mY;
int mSize;
int mAlive;
int mRow;
int mColumn;
int mColor;
int mWordSize;
vzEventQ *mpEventQ;
int mFlow;
boot mLabel;
vzDevice *mpSource;~
public:
vzConnector(); ' ~vzConnector();
void DoCreate(int wordsize, int x0, int y0, int size, in t x, int y, ' bool alive, vzEventQ *apEve ntQ);
void DoDraw();

vzConnector.h boot IsAlive() {return mAlive;};

int GetRow() { return mRow; };

int GetColumn() { return mColumn; };

void DoFlood();

void DoClear();

int GetX();

int GetY ( ) ;

int GetSize();

void GiveFlow(int flow, boot meaningless, vzDevice *p);

bool GetLabel();

int DoAugment(int x);

bool IsADrain() {return false;};

int GetSpace(bool lefttoright) {return 0;};

int GetFlow(bool lefttoright) {return 0;};

void CheckFlow();

int. DoLabel(bool lefttoright);

void ClearStart();

};
#include "vzConnector.cpp"
#endif // vzConnector_h //*****************************************************************
*********

vzDevice.cpp /*
*******************************************************************
*******
vzDevice.ccp Van Zandt *******************************************************************
*******
*l vzDevice::vzDevice() . mStatus(0),mNeighborCount(0) {
int i;
mNeighborArray.resize(2);
mNeighborCurrent.resize(2);
for (i=0';i<2;i++) {
mNeighborArray[i]=NULL;
mNeighborCurrent[i] = 0;
a }
vzDevice : : wzDevice ( ) .{
void vzDevice::AddNeighbor(vzDevice *N) {
int i;
mNeighborArray[mNeighborCount]=N;
mNeighborCount++;
if ( mNeighborCount >= mNeighborArray.length() ) mNeighborArray.resize(mNeighborCount+4);
mNeighborCurrent.resize(mNeighborCount+4);
for (i=0; i<4; i++) mNeighborCurrent[mNeighborCount+i] = 0;
vzDevice *vzDevice::GetNeighbor(int n) {
return mNeighborArray[n];

vzDevice.cpp int vzDevice::GetCurrent(vzDevice *dPtr) int i;
int retCode = 0;
for ( i=0; i<mNeighborCount; i++ ) if ( dPtr == mNeighborArray[i] ) retCode = mNeighborCurrent[i];
return retCode;

vzDevice.h 1*
*******************************************************************
**********
vzDevice.h Van Zandt *******************************************************************
**********
*J
#if !defined( vzDevice_h) #define vzDevice h #include "vzLib\vzVector.h"
enum pType { in, out };
enum vzCommand { Flood };
class vzDevice {
protected:
int mStatus;
int mNeighborCaunt;
vzVector<vzDevice*> mNeighborArray;
vzVector<int> mNeighborCurrent;
public:
vzAevice();
wzDevice ( ) ;
void AddNeighbor(vzDevice *N);
vzDevice ' *GetNeighbor(int n);
int GetCurrent(vzDevice *dPtr);
virtual void DoDraw() {};
virtual DoFlood() {};
void virtual. int DoAugment(int x) {};

virtual boot GetLabel() {};

virtual void DoClear() {};

virtual void GiveFlow(int f, boot m, vzDevice *p) {};

virtual boot TsADrain() {};

virtual int GetFlow(bool m) {};

virtual int DoLabel(bool m) {};

virtual int GetSpaca(bool m) {};

};
#include "vzDevice.cpp"
#endif /! _vzDevice_h vzEventQ.cpp /*
*******************************************************************
********
vzEventQ.cpp Van Zandt *******************************************************************
********
*/
vzEventQ::vzEventQ() mFutureCount=0;
mFutureList.resize(50);
? .
vzEventQ::~vzEventQ() void vzEventQ::UpdateFuture(vzDevice *N) if (mFutureList.length()-1<mFutureCount) .
mFutureList.resize(mFutureList.length()+50);
mFutureList[mFutureCount]=N;
mFutureCount++;
void vzEventQ::DoFire(int command) int mCurrentCount;
int firecounter;
vzVector<vzDevice*> mCurrentList;
mCurrentList=mFutureList;
mCurrentCount=mFutureCount; .
mFutureCount=0; .
while (mCurrentCount>0) for (firecounter=O;firecounter<mCurrentCount;fireco unter++) switch (command) case Flood: mCurrentList[fireco unter]->DoFlood();
break;

vzEventQ.cpp doPause(TimerInterval);
mCurrentCount=mFutureCount;
mCurrentList=mFutureList;
// rectfill(screen,0,0,10,10,mColor++);
/l . if ( mColor > 16 ) // mColor = 0;
mFutureCount=0;
void vzEventQ::DoLabel(bool le~ttoright) int mCurrentCount;
int firecounter;
int temp;
vzVector<vzDevice*> mCurrentList;
mCurrentList = mFutureList;
mCurrentCount = mFutureCount;
mFutureCount = 0;
temp = 0;
while ( mCurrentCount > 0 ) for (firecounter=O;firecounter<mCurrentCount;fireco unter++) ttoright);
temp=mCurrentList[firecounter]->DoLabel(lef if ( temp =- 1 ) mCurrentCount =0 ;
mFutureCount =0 ;
break;
doPause(TimerInterval);
mCurrentCount = mFutureCount;
mCurrentList = mFutureList;
/* rectfill(screen,0,0,10,10,mColor++);

vzEventQ.cpp i if (mColor>16) }.
mColor=0; */
mFutureCount=0;
void vzEventQ::DoAugment(int minflow) int mCurrentCount;
int firecounter;
int temp;
vzVector<vzDevice*> mCurrentList;
mCurrentList = mFutureList;
mCurrentCount = mFutureCount;
- mFutureCount = 0;
temp = 0;
while ( mCurrentCount > 0 ) for.(firecounter=O;firecounter<mCurrentCount;fireco unter++) temp = mCurrentList[firecounter]->DoAugment (minflow);
if ( temp =- 0 ) , mCurrentCount = 0;
mFutureCount = 0;
break;
doPause(TimerInterval);
mCurrentCount=mFutureCount;
mCurrentList=mFutureList;
/* rectfill(screen,0,0,10,10,mColor++);
if ( mColor > 16 ) mColor = 0;*/-mFutureCount = 0;

vzEventQ.h /*
*******************************************************************
********
vzEventQ.h Van Zandt *******************************************************************
********
*/
#if !defined( vzEventQ_h) #define vzEventQ_h #include "vzLib\vzVector.h"
#include "vzDevice.h"
#include "vzLib\vzTools.h"
class vzEventQ
private:
int mFutureCount;
vzVector<vzDevice*> mFutureList;
int mColor;
public:
vzEventQ()~
wzEventQ ( ) ;
void UpdateFuture(vzDevice *D);
void DoFire(int command);
void DoLabel(bool lefttoright);
void DoAugment(int minflow);
~1 #include "vzEventQ.cpp"
#endif /l vzEventQ h vzIndividual.cpp /*
*******************************************************************
*******
Van Zandt vzlndividual.cpp *******************************************************************
*******
*/
vzIndividual::vzIndividual(int size, int alpha_count) . mSize(size), mAlphabetCount(alpha_count) mChromosome.resize(mSize);
vzIndividual:: wzIndividual() void vzIndividual::DoResize(int size) mChromosome.resize(size);
/*
void vzIndividual::PrintToFile(ofstream out) */
/* .
void vzIndividual::DoPrint(int x, int y) ' */
void vzIndividual::DoMutate() int i;
int r7 int for (i=0; i<100; i++) r = getRandom(mChromosome.length());
c = getRandom(mAlphabetCount);

vzIndividual.cpp while ( mChromosome[r] _- c ) c = getRandom(mAlphabetCount);
mChromosome[r] = c;
}
}
void vzlndividual::DoCrossover(vzIndividual *cPtr) int i;
int r;
r = getRandom(mChromosome.length());
if ( getRandom(2) ) for (i=0; i<r; i++) mChromosome[i] = cPtr->mChromosome[i];
else for (i=r; i<mChromosome.length(); i++) mChromosome[i] = cPtr->mChromosome[i];
void vzIndividual::BuildRandom() int i;
for (i=0; i<mChromosome.length(); i++) mChromosome[i] = getRandom(mAlphabetCount);
}
vzIndividual vzIndividual::operator=(const vzIndividual rhs) int i;
for (i=0; i<mChromosome.length(); i++) mChromosome[i] = rhs.mChromosome[i];
mFitness = rhs.mFitness;
return *this;
}
//*****************************************************************
*******

vzIndividual.h /*
*******************************************************************
**********
Van Zandt vzIndividual.h ***********************'********************************************
**********
*/
#if !defined( vzIndividual_h) #define vzIndividual_h #include "vzLib\vzTools.h"
#include "vzLib\vzVect'or.h"
class vzIndividual private:
const int mSize;
const int mAlphabetCount;
vzVector<int> mChromosome;
double mFitness;
public:
vzIndividual(int size, int alpha_count);
wzIndividual ( ) ;
void DoResize(int size);
void BuildRandom();
double GetFitness() { return mFitness; };
void SetFitness(double fitness) { mFitness=fitness; };
int GetValue(int i) { return mChromosome[i]; };
vzVector<int> *GetChromosomePtr() { return &mChromosome;
}t void DoMutate();
void DoCrossover(vzIndividual *cPtr);
vzIndividual operator=(const vzIndividual rhs);
// void DoPrint(int x, int y);
// void PrintToFile(ofstream out);
};
#include "vzIndividual.cpp"
#endif // vzIndividual h //**********************,*******************************************
*********

vzNanocell.cpp ~*
*******************************************************************
*********
vzNanocell.cpp Van Zandt ******************************************************************.*
*********
*/
vzNanocell::vzNanocell() . mActive(false), mWordSize(0), mRowCount(0), mColumnCount(0) int i;
mSwitchMax = 50;
mSwitchCount = 0;
mpSwitch.resize(mSwitchMax);
for (i=O;i<mSwitchMax;i++) mpSwitch[i]=new vzSwitch;
vzNanocell::-vzNanocell() int i;
for (i=O;i<mSwitchMax;i++) if (mpSwitch[i] != NULL) delete mpSwitch[i];
if (mpInRegister != NULL) delete mpInRegister;
if (mpOutRegister != NULL) delete mpOutRegister;
void vzNanocell::DoCreate(int WordSize, int devicesize, int rowcoun t, int columncount, int density, int switchd ensity) int r, c;
int border;
int temp;
bool alive;
mWordSize = WordSize;

vzNanocell.cpp mDeviceSize = devicesize;
mRowCount = rowcount;
mColumnCount = columncount;
mConnector.resize(mRowCount,mColumnCount);
mDensity = density;
mSwitchDensity=switchdensity;
mpInRegister = new vzR.egister(mWordSize, mDeviceSize);
mpOutRegister = new vzRegister(mWordSize, mDeviceSize);
border = 1 + mDeviceSize;
mX1 = (SCREEN_W/2) - ((mColumnCount+1) * 3 * mDeviceSize)/2 - b order;
mY1 = (SCREEN-H/2) - (mRowCount*3*mDeviceSize)/2 - border;
mX2 ~ (SCREEN W/2) + ((mColumnCount+3) * 3 * mDeviceSize)l2 + b order; .
mY2 = (SCREEN_H/2) + (mRowCount*3*mDeviceSize)/2 + border;
.mActive = true;
mpInRegister->DoCreate(mX1-(8*mDeviceSize),mYl,mY2, true,&mEven tQ);
mpOutRegister->DoCreate(mX2-(4*mDeviceSize),mYl,mY2, false,&mEv entQ);
for (r=0; r<mRowCount; r++) for (c=0; c<mColumnCount; c++) if ( getRandom(100) < mDensity ) alive = true;
else alive = false;
}.
mConnector[r][c].DoCreate(mWordSize,mX1+6*mDeviceSi ze,mY1+2*mDeviceSize, mDeviceSize,c,r,alive,&mEventQ);
for (r=O;r<mRowCount;r++) for (c=O;c<mColumnCount;c++) vzNanocell.cpp if (mConnector[r][c].IsAlive()) if ((c==0)&&(r<mRowCount-1)) if (mConnector[r][c+1].IsAl ive()) SetSwitch(r,c,r,c+1 );
if (mConnector[r+1][c].IsAl ive()) SetSwitch(r,c,r+1,c );
. } , if ((c>0)&&(c<mColumnCount-1)&&(c~2 >0)&&(r<mRowCount-1)) if (mConnector[r+1][c-1].Is Alive ( ) ) SetSwitch(r,c,r+1,c -1);

if (mConnector[r+1][c].IsAl ive ( ) ) SetSwitch(r,c,r+1,c );

if (mConnector[r+1][c+1].Is Alive ( ) ) SetSwitch(r,c,r+1,c +1);

if ((c>0)&&(c<mColumnCount-1)&&(co2 -=0)&&(r<mRowCount-1)) if (mConnector[r][c-1].IsAl ive ( ) ) SetSwitch(r,c,r,c-1 );

vzNanocell.cpp if (mConnector[r+1][c].IsAl ive ( ) ) SetSwitch(r,c,r+l,c );

if (mConnector[r][c+1].IsAl ive ( ) ) SetSwitch(r,c,r,c+1 ) ;

if ((r==mRowCount-1)&&(c<mColumnCou nt-1)&&(c~2==0)) if (mConnector[r][c+1].IsAl ive() ) SetSwitch(r,c,r,c+1 if ((r==mRowCount-1)&&(c<mColumnCo unt-1)&&(c~2>0))- ' if (mConnector[r][c+1].IsAl ive()) SetSwitch(r,c,r,c+1 ):

if ((r<mRowCount-1)&&(c==mColumnCou nt-1)&&(c%2==0)) if (mConnector[r][c-1].IsAT

ive ( ) ) );
SetSwitch(r,c,r,c-1 if (mConnector[r+1][c].IsAl ive()) SetSwitch(r,c,r+1,c );

if ((r<mRowCount-1)&&(c==mColumnCou nt-1).&&(co2>0)) vzNanocell.cpp if (mConnector[r+1][c-1].Is Alive ( ) ) SetSwitch(r,c,r+1,c -1);
if (mConnector[r+1][c].IsAl ive ( ) ) SetSwitch(r,c,r+1,c );
]
for (r=O;r<mRowCount;r++) if (mConnector[r][0].IsAlive()) temp=mpInRegister->ConnectToPin(&mC
onnector[r][0], mSwitchDensity*2);
if (temp>=0) SetPinSwitch(mpInRegister->
GetPinPtr(temp),&mConnector[r][0]);
]
if (mConnector[r][mColumnCount-1].IsAlive() temp=mpOutRegister->ConnectToPin(&m Connector[r][mColumnCount-1], mSwitchDensity*2);
if (temp>=0) SetPinSwitch(mpOutRegister->GetPinPtr('temp),&mConnector[r][mColumnCount-1]);
DoDraw ( ) ;
void vzNanocell::SetSwitch(int r1, int c1,. int r2, int c2) int i;
int state;
if ( mSwitchCourit >= mSwitchMax ) vzNanocell.cpp mpSwitch.resize(mSwitchMax+50);
for (i=0; i<50; i++) mpSwitch[mSwitchCount+i] = new vzSwitch;
mSwitchMax += 50;
if ( getRandom(100) < mSwitchDensity ) state = 1 + getRandom(2);
mpSwitch[mSwitchCount]->DoCreate(mConnector[r1][c1]
. GetX ( ) , onnector[r1][c1].GetY(), onnector[r2][c2].GetX(), onnector[r2][c2].GetY(), ate, &mEventQ);
mC
mC
mC
st mConnector[r1][c1].AddNeighbor((vzDevice. *)mpSwitch [mSwitchCount]);
mpSwitch[mSwitchCount]->AddNeighbor(&mConnector[r1]
[c1]);
mpSwitch[mSwitchCount]->AddNeighbor(&mConnector[r2]
[c2]);
mConnector[r2][c2].AddNeighbor((vzDevice *)mpSwitch [mSwitchCount]);
mpSwitch[mSwitchCount]->SetNeighborlType(1);
mpSwitch[mSwitchCount]->SetNeighborlParml(r1);
mpSwitch[mSwitchCount]->SetNeighborlParm2(c1);
mpSwitch[mSwitchCount]->SetNeighbor2Type(1);
mpSwitch[mSwitchCount]->SetNeighbor2Parm1(r2);
mpSwitch[mSwitchCount]->SetNeighbor2Parm2(c2);
mSwitchCount++;
]
]
void vzNanocell::SetSwitch2(int r1, int c1, int r2, int c2, int sta te) mpSwitch[mSwitchCount] = new vzSwitch;

vzNanocell.cpp mpSwitch[mSwitchCount]->DoCreate(mConnector[r1][c1].GetX(), mC
onnector[r1][c1].GetY(), onnector[r2][c2].GetX(), onnector[r2][c2].GetY(), ate, &mEventQ);
mC
mC
st mConnector[r1][c1].AddNeighbor((vzDevice *)mpSwitch[mSwitch Count]);
mpSwitch[mSwitchCount]->AddNeighbor(&mConnector[r1][c1]);
mpSwitch[mSwitchCount]->AddNeighbor(&mConnector[r2][c2]);
mConnector[r2][c2].AddNeighbor((vzDevice *)mpSwitch[mSwitch Count] ) ; .
mpSwitch[mSwitchCount]->SetNeighborlType(1);
mpSwitch[mSwitchCount]->SetNeighborlParml(.r1);
mpSwitch[mSwitchCount]->SetNeighborlParm2(c1);
mpSwitch[mSwitchCount]->SetNeighbor2Type(1);
mpSwitch[mSwitchCount]->SetNeighbor2Parm1(r2);
mpSwitch[mSwitchCount]->SetNeighbor2Parm2(c2);
mSwitchCount++;
void vzNanocell::SetPinSwitch2(vzPin *aPin, vzConnector *aConnector int state) .' mpSwitch[mSwitchCount] = new vzSwitch;
mpSwitch[mSwitchCount]->DoCreate(aConnector->GetX(), onnector->GetY(), in->Get0utX2 ( ) , onnector->GetY(), ate, &mEventQ);
aConnector->AddNeighbor((vzDevice *)mpSwitch[mSwitchCount]);
mpSwitch[mSwitchCount]->AddNeighbor(aConnector);
mpSwitch[mSwitchCount]->AddNeighbor(aPin);
aPin->AddNeighbor(mpSwitch[mSwitchCount]);
mpSwitch[mSwitchCount]->SetState(state);
aC
aP
aC
st vzNanocell.cpp mpSwitch[mSwitchCount]->SetNeighborlType(1);
mpSwitch[mSwitchCount].->SetNeighborlParml(aConnector->GetRo w());
mpSwitch[mSwitchCount]->SetNeighborlParm2(aConnector->GetCo lump ( ) ) ;
mpSwitch[mSwitchCount]->SetNeighbor2Type(0);
mpSwitch[mSwitchCount]->SetNeighbor2Parm1(aPin->GetType());
mpSwitch[mSwitchCount]->SetNeighbor2Parm2(aPin->GetID());
mSwitchCount++;
void vzNanocell::SetPinSwitch(vzPin *aPin, vzConnector *aConnector) int i;
int state;
state = 1 + getRandom(2);
if ( mSwitchCount >= mSwitchMax ) mpSwitch.resize(mSwitchMax+50);
for (i=0; i<50; i++) mpSwitch[mSwitchCount+i] = new vzSwitch;
mSwitchMax += 50;
] , mpSwitch[mSwitchCount]->DoCreate(aConnector->GetX(), onnector->GetY(), in->Get0utX2 ( ) , , onnector->GetY(), ate, &mEventQ);
aConnector->AddNeighbor((vzDevice *)mpSwitch[mSwitchCount]);
mpSwitch[mSwitchCount]->AddNeighbor(aConnector);
mpSwitch[mSwitchCount]->AddNeighbor(aPin);
aPin->AddNeighbor(mpSwitch[mSwitchCount]);
aC
aP
aC
st mpSwitch[mSwitchCount]->SetNeighborlType(1);
mpSwitch[mSwitchCount]->SetNeighborlParml(aConnector->GetRo vzNanocell.cpp w());
mpSwitch[mSwitchCount]->SetNeighborlParm2(aConnector->GetCo lump ( ) ) ;
mpSwitch[mSwitchCount]->SetNeighbor2Type(0);
mpSwitch[mSwitchCount]->SetNeighbor2Parm1(aPin->GetType());
mpSwitch[mSwitchCount]->SetNeighbor2Parm2(aPin->GetID());
mSwitchCount++;
void vzNanocell::DoClear() int r, c;
int i;
mpInRegister->DoClear();
mpOutRegister->DoClear();
for (r=0; r<mRowCount; r++) for (c=0; c<mColumnCount; c++) if ( mConnector[r][c].IsAlive() ) mConnector[r][c].DoClear();
for (i=0; i<mSwitchCount; i++) mpSwitch[i]->DoClear();
void vzNanocell::DoDraw() int r, c;
if ( mActive ) , , rectfill(screen,mXl,mYl,mX2,mY2,LIGHTGRAY);
mpInRegister->DoDraw();
mpOutRegister->DoDraw();
for (r=0; r<mRowCount; r++) for (c=0; c<mColumnCount; c++) mConnector[r][c].DoDraw();
for (r=O;r<mSwitchCount;r++) mpSwitch[r]->DoDraw();

vzNanocell.cpp void vzNanocell::DoFlood() mpInRegister->DoFlood();
mpOutRegister->DoFlood();
mEventQ.DoFire.(Flood);
void vzNanocell::DoFlow() int minflow = 0;
int r, c;
bool abletolabelone = true;
bool abletolabeltwo = true;
bool abletolabelthree = true;
bool abletolabelfour = true;
boot breakerone = true;
bool breakertwo = true;
while ((breakerone)~~(breakertwo)) mpInRegister->DoLabel(true);
mEventQ.DoLabel(true);
abletolabelone=mpOutRegister->CheckLabel();
abletolabeltwo=mpInRegister->CheckLabel();
if ((abletolabelone)~~(abletolabeltwo)) if (abletolabelone) minflow=mpOutR.egister-~>DoAugment();
else minflow=mpInRegister->DoAugment();
mEventQ.DoAugment(minflow);
mpInRegister->DoClear();
mpOutRegister->DoClear();
for (r=0; r<mRowCount; r++) for (c=0; c<mColumnCount; c++) mConnector[r][c].DoClear();
for (r=O;r<mSwitchCount;r++) mpSwitch[r]->DoClear();
else vzNanocell.cpp breakerone=false;
mpOutRegister->DoLabel(false);
mEventQ.DoLabel(false);
abletolabelthree=mpInRegister->CheckLabel();
abletolabelfour=mpOutRegister->CheckLabel();
if ((abletolabelthree)~~(abletolabelfour)) if (abletolabelthree) minflow=mpInRegister->DoAugment();
if (abletolabelfour) minflow=mpOutRegister->DoAugment();
mEventQ.DoAugment(minflow);
mpInR.egister->DoClear();
mpOutRegister->DoClear();
for (r=0; r<mRowCount; r++) for (c=0; c<mColumnCount; c++) mConnector[r][c].DoClear();
for (r=O;r<mSwitchCount;r++) mpSwitch[r]->DoClear();
else breakertwo=false;
int vzNanocell::GetPinNum() return mWordSize;
int vzNanocell::OnPin(int xl,int y1) int FirstReply;
int SecondReply;
FirstReply=mpInRegister->OnPin(xl,y1);
if (FirstReply>=0) return FirstReply;
else SecondReply=mpOutRegister->OnPin(xl,y1);
if (SecondReply>=0) return SecondReply+mWordSize;
else return -1;

vzNanocell.cpp void vzNanocell::SetPin(bool InRegister,int WhichPin, int flow) if (InRegister) mpInRegister->SetPin(WhichPin,flow);
else mpOutRegister->SetPin(WhichPin,flow);
int vzNanocell'::PinHeight(int WhichPin) return (mpInRegister->PinHeight(V~h.ichPin));
int vzNanocell::GetFlow(bool WhichRegister,int WhichPin) int flow;
if (WhichRegister) flow=mpInRegister->GetPinFlow(WhichPin);
else flow=mpOutRegister->GetPinFlow(WhichPin);
return flow;
void vzNanocell::DeactivatePin(bool WhichRegister,int WhichPin) if (WhichRegister) mpInRegister->DeactivatePin(WhichPin);
else mpOutRegister->DeactivatePin(WhichPin);
void vzNanocell::Drawpaths() int r,c;
for (r=0; r<mRowCount; r++) for (c=0; c<mColumnCount; c++) mConnector[r][c].CheckFlow();
mConnector[r][c].DoDraw();
for (r=O;r<mSwitchCount;r++) mpSwitch[r]->DoDraw();
int vzNanocell::GetInitialFlow(bool V~ThichRegister,int WhichPin) int flow;

vzNanocell.cpp if (V~hichRegister) flow=mpTnRegister->GetTnitialFlow(WhichPin);
else flow=mpOutRegister->GetlnitialFlow(WhichPin);
return flow;
void vzNanocell::ClearCell(}
int r,c;
mpInRegister->ClearStart();
mpOutRegister->ClearStart();
far (r=0; r<mRowCount; r++) for.(c=0; c<mColumnCount; c++) mConnectorjr]jc].ClearStart();
far (r=O;r<mSwitchCount;rt+) mpSwitchjr]->ClearStart();
if ( Trace ) DoDraw();
void vzNanocell::SetInReg(vzString aFireCode) mpIn.Register->Write(aFa.reCode);
void vzNanocell::SetOutReg(vzString aFireCode) {.
mpOutRegister->Write(aFireCode);
void vzNanocell;:LoadSwitch(vzVector<int> *vPtr) int i;
if ( vPtr->length() _= mSwitchCount ) for (i=0; i<mSwitchCount; i++) mpSwitchji]->SetState(1+(*vPtr)ji]);
vzPin *vzNanocell::GetPinPtr(pType type, int i) if ( type =- in ) vzNanocell.cpp return mpInRegister->GetPinPtr(i);
else return mpOutRegister->GetPinPtr(i);
int vzNanocell::GetConnectorData(int x) {
return mConnectorData[x];
int vzNanocell::GetColumnCount() {
return mColumnCount;
int vzNanocell::GetWordSize() {
int r,c,temp;
temp=mSwitchData.length();
c=0; . .
for (r=O;r<temp;r++) if ((mSwitchData[r]>0)&&(c<mSwitchCount)) {
mSwitchData[r]= mpSwitch[c]->GetState();
c++;
return mWordSize;
int vzNanocell::GetRowCount() {
return mRowCount;
int vzNanocell::GetSwitchDataSize() {
return mSwitchData.length();
int vzNanocell::GetSwitchData(int y) return mSwitchData[y];

vzNanocell.cpp void vzNanocell::DoLoad(vzString filename) int i;
int r, c;
iizt border;
int ~ temp;
bool alive;
int tmpState;
int tmpNeighborlType, tmpNeighborlParml tmpNeighborlParm2;
int tmpNeighbor2Type, tmpNeighbor2Parml tmpNeighbor2Parm2;
ifstream infile;
infile.open( filename.c_str() );
infile » mWordSize;
infile » mDeviceSize;
infile » mRowCount;
infile » mColumnCount;
mConnector.resize(mRowCount,mColumnCount);
infile » mDensity;
infile » mSwitchDensity;
infile » mSwitchCount;
mSwitchMax = mSwitchCount;
mpSwitch.resize(mSwitchMax);
mSwitchCount = 0;
mpInRegister = new vzRegister(mWordSize, mDeviceSize);
mpOutRegister = new vzRegister(mWordSize, mDeviceSize);
border = 1 + mDeviceSize;
mX1 = (SCREEN_Wl2) - ((mColumnCount+1) * 3 * mDeviceSize)/2 - b order;
mY1 = (SCREEN_H/2) - (mRowCount*3*mDeviceSize)/2 - border;
mX2 = (SCREEN_W/2) + ((mColumnCount+3) * 3 * mDeviceSize)/2 + b order;
mY2 = (SCREEN_H/2) + (mRowCount*3*mDeviceSize)/2 + border;
mActive = true;
mpInRegister->DoCreate(mX1-(8*mDeviceSize),mYl,mY2, true,&mEven vzNanocell.cpp tQ);
mpOutRegister->DoCreate(mX2-(4*mDeviceSize),mYl,mY2, false,&mEv entQ);
for (r=0; r<mRowCount; r++) for (c=0; c<mColumnCount; c++) infile » alive;
mConnector[r](c].DoCreate(mWordSize,mX1+6*mDeviceSi ze,mY1+2*mDeviceSize, mDeviceSize,c,r,alive,&mEventQ);
for (i=0; i<mSwitchMax; i++) infile » tmpState;
infile » tmpNeighborlType;
infile » tmpNeighborlParml;
infile » tmpNeighborlParm2;
infile » tmpNeighbor2Type;
infile » tmpNeighbor2Parml;
infile » tmpNeighbor2Parm2;
if ( tmpNeighbor2Type =- 1 ) SetSwitch2(tmpNeighborlParml, tmpNeighborlP
arm2, tmpNeighbor2Parml, tmpNei ghbor2Parm2, tmpState);
else tr(tmpNeighbor2Parm2), if ( tmpNeighbor2Parm1 =- 0 ) SetPinSwitch2(mpInRegister->GetPinP
&mConnecto r[tmpNeighborlParml][tmpNeighborlParm2],,tmpState);
else SetPinSwitch2(mpOutRegister->GetPin Ptr(tmpNeighbor2Parm2), r[tmpNeighborlParml][tmpNeighborlParm2], tmpState);
&mConnecto vzNanocell.cpp infile.close();
void vzNanocell::DoStore(vzString filename) int i;
int r,c;
ofstream outfile;
outfile.open( filename.c_str() );
outfile « mWordSize « endl;
outfile « mDeviceSize « endl;
outfile « mRowCount « endl;
outfile « mColumnCount « endl;
outfile « mDensity « endl;
outfile « mSwitchDensity « endl;
outfile « mSwitchCount « endl;
for (r=0; r<mRowCount; r++) for (c=0; c<mColumnCount; c++) outfile « mConnector[r][c].IsAlive() « en dl;
for (i=0; i<mSwitchCount; i++) outfile « mpSwitch[i]->GetState() « endl;
outfile « mpSwitch[i]->GetNeighborlType() « endl;
outfile « mpSwitch[i]->GetNeighborlParml() « endl outfile « mpSwitch[i]->GetNeighborlParm2() « endl outfile « mpSwitch[i]->GetNeighbor2Type() « endl;
outfile « mpSwitch[i]->GetNeighbor2Parm1() « endl outfile « mpSwitch[i]->GetNeighbor2Parm2() « endl outfile.close();
}.

vzNanocell.cpp //*****************************************************************
*********

vzNanocell.h /*
*******************************************************************
*********
vzNanocell.h Van Zandt *******************************************************************
*********
*/
#if !defined( vzNanocell_h) #define vzNanocell h #include "vzEventQ.h"
#include "vzRegister.h"
#include "vzConnector.h"
#include "vzLib\vzTools.h"
#include "vzLib\vzString.h"
#include "vzSwitch.h"
#include "vzLib\vzMatrix.h"
#include "vzLib\vzVector.h"
class vzNanocell private:
bool mACtive;
int mWordSize;
int mRowCount;
int mColumnCount;
int mDeviceSize;
int mDensity;
int mSwitchDensity;
int mSwitchMax;
int mXl;
int mYl;
int mX2;
int mY2;
int mSwitchCount;
vzRegister *mpInRegister;
vzRegister *mpOutRegister;
int sizecount;
vzMatrix<vzConnector> mConnector;
vzVector<vzSwitch *> mpSwitch;
vzEventQ mEventQ;
vzVector<int> mConnectorData;
vzVector<int> mSwitchData;
public:
vzNanocell();
~vzNanocell();

vzNanocell.h void DoCreate(int WordSize, int devicesize, int rowcount int columncount, int density, int switchdensity);
void SetSwitch(int r1, int c1, int r2, int c2);
void SetSwitch2(int r1, int c1, int r2, int c2, int stat e);
void SetPinSwitch2(vzPin *aPin, vzConnector *aConnector, int state);

void SetPinSwitch(vzPin *aPin, vzConnector *aConnector);

int GetSwitchCount() { return mSwitchCount; },;

void DoClear();

void DoDraw();

void DoFlood(); ' void DoFlow();

int GetPinNum();

int OnPin(int xl,int y1);

void SetPin(bool InRegister, int WhichPin, int flow);

int PinHeight(int WhichPin);

int GetFlow(bool VdhichRegister,int WhichPin);

void DeactivatePin(bool WhichRegister, int WhichPin);

void Drawpaths();

int GetInitialFlow(bool WhichRegister,int Which Pin);
void ClearCell();.

void SetInReg(vzString aFireCode);.

void SetOutReg(vzString aFireCode);

void LoadSwitch(vzVector<int>
*vPtr);

vzPin *GetPinPtr(pType type, int i);

int GetConnectorData(int x);

int GetColumnCount();

int GetWordSize();

int GetRowCount();

int GetSwitchDataSize();

int GetSwitchData(int y);

void DoLoad(vzString filename);

void DoStore(vzString filename);

};
#inc.lude "vzNanocell.cpp"
#endif // vzNanocell h //*****************************************************************
*********

vzPin.cpp /*
*******************************************************************
******
vzPin.cpp Van zandt *******************************************************************
******
*/
vzPin::vzPin() :vzDevice() vzPin: : wzPin ( ) void vzPin::DoCreate(int id, pType type, int x1, int y1, int x2, in t.y2, int x12, int y12, i nt x22, int y22, ntQ *apEventQ) int i;
int wordsize, vzEve mID = id;
mType = type;
mColor = pnDrainColor;
mInX1 = x1;
mInX2 = x2;
mInY1 = y1;
mInY2 = y2;
m0utX1 = x12;
mOutX2 = x22;
m0utY1 = y12;
m0utY2 = y22;
mWordSize = wordsize;
mpEventQ = apEventQ;
mFlow=0;
mIsADrain=true;
mIsASource=false;
mTempFlow=0;
mLabel=false;
mDeactivated=false;
mInitialFlow=0;

vzPin.cpp void vzPin::DoDraw() if (mIsADrain) if (mFlow==0) mColor=pnDrainColor;
else if (mFlow<=kLowFlow) . mColor=pnLowColor;
else if (mFlow>=kHighFlow) mColor=pnHighColor;
else mColor=pnMiddleColor;
if (mDeactivated) mColor=pnOffColor;
if (mIsASource) mColor=pnSourceColor;
rectfill(screen,mInXl,mInYl,mInX2,mInY2,mColor);
rectfill(screen,m0utX1,m0utY1,m0utX2,m0utY2,mColor);
int vzPin::Get0utX1() return m0utXl;
int vzPin::Get0utY1() return m0utYl;
int vzPin::Get0utX2() return m0utX2;
int vzPin::Get0utY2() return m0utY2;

vzPin.cpp void vzPin::DoFlood() int i;
if (mColor == pnLowColor) mColor=pnHighColor;
if (Trace) DoDraw();
for (i=O;i<mNeighborCount;i++) mpEventQ->UpdateFuture(mNeighborArray[i]);
void vzPin::DoClear() if (mIsADrain) mColor=pnDrainColor;
if (mDeactivated) mColor=pnOffColor;
if (mIsASource) mColor=pnSourceColor;
if (Trace) DoDraw();
mpSource = NULL;
mLabel = false;
mTempFlov~ = 0;
bool vzPin::GetLabel() return mLabel;
bool vzPin::IsADrain() return mIsADrain;
void vzPin::GiveFlow(int flow, bool meaningless, vzDevice *p) mTempFlow = flow;
mpSource = p;
mLabel = true;
mColor=pnSourceColor;
if (Trace) DoDraw();

vzPin.cpp int vzPin::DoAugment(int x) int j;
int returncode;
if (mIsADrain) mFlow=mFlow+mTempFlow;
for (j=O;j<mNeighborCount;j++) if (mNeighborArray[j]==mpSource) mpEventQ->UpdateFuture(mNeighborArray[j]);
returncode=mTempFlow;
else if (mDeactivated) else for (j=O;j<mNeighborCount;j++) if (mNeighborArray[j]==mpSource) mpEventQ->UpdateFuture(mNeighborArray[j]);
returncode=mTempFlow;
mFlow=mFlow-x;
returncode=0;
return returncode;
int vzPin::GetFlow(bool lefttoright) if (mIsASource) return (mInitialFlow-mFlow);
else return mFlow;
int vzPin::GetInitialFlow() return mInitialFlow;
void vzPin::SetStart(int flow) vzPin.cpp mIsASource = true;
mIsADrain =.false;
mFlow = flow;
mInitialFlow = flow;
mTempFlow = 0;
mColor = pnSourceColor;
if (Trace) DoDraw();
mColor = pnDrainColor;
void vzPin::DeactivatePin() mDeactivated = true;
mColor = pnOffColor;
if (Trace) DoDraw();
mIsADrain = false;
int vzPin::DoLabel(bool lefttoright) int j, space;
int returncode = 0;
int flow, extra;
extra=0;
flow=0;
if (mIsASource) t!=0)) - false) if ( (mLabel==false) && (mFlow>0) && (mNeighborCoun flow=mFlow/mNeighborCount;
extra=mFlowomNeighborCount;
mColor = pnSourceColor;
if (Trace) DoDraw();
for (j=O;j<mNeighborCount;j++) if (mNeighborArray[j]->GetLabel() _ space = mNeighborArray[j]->

vzPin.cpp GetSpace(lefttoright);
if ( space !- 0 ) if (space<flow) mNeighborAr ray[j]->GiveFlow(space, lefttoright, this);
else if (extra>0) mNe ighborArray[j]->GiveFlow(flow+1, lefttoright, this);
else mNe ighborArray[j]->GiveFlow(flow,lefttoright,this);
extra=extra-1;
mpEventQ->UpdateFuture(mNeighborArray[j]);
mLabel=true;
return 0;
if ((mDeactivated)&&(mLabel==false)&&(mTempFlow>0)&&(mNeighborC
ount!=0)) t mColor = pnSourceColor;
if (Trace) DoDraw();
for (j=O;j<mNeighborCount;j++) if (mNeighborArray[j]->GetLabel() _- false) space = mNeighborArray[j]->GetSpace(lefttoright);
if ( space != 0 ) if (space<mTempFlow) mNeighborArray[j]->
GiveFlow(space, lefttoright, this);
else mNeighborArray[j]->
GiveFlow(mTempFlow, lefttoright, this);
mpEventQ->UpdateFuture(mNei ghborArray[j]);

vzPin.cpp mLabel=true;
return 0;
void vzPin::ClearStart() mColor=pnDrainColor;
mFlow=0;
mIsADrain=true;
mIsASource=false;
mTempFlow=0;
mLabel=false;
mDeactivated=false;
mInitialFlow=0;

,, vzPin.h l*
*******************************************************************
*******
vzPin.h Van Zandt ***********************************************************'********
*******
*~
#if !defined( vzPin h) #define vzPin h #include "vzLib\vzVector.h"
#include "vzDevice.h" _ #include "vzEventQ.h"
const int pnOffColor = DARKGRAY;
const int pnDrainColor = WHITE; .
const int pnSourceColor = BLUE;
const int pnLowColor - YELLOW;
const int pnMiddleColor = LIGHTBLUE;
const int pnHighColor = BLUE;
class vzPin: public vzDevice private:
int mID;

pType mType;

int mInXl;

int mInX2;

int mInYl;

int mInY2;

int m0utXl;

int m0utX2;

int m0utYl;

int mOutY2;

int mWordSize;

int mColor;

int mCurrent;

vzEventQ*mpEventQ;

bool mAmIInPin;

bool mLabel;~

int mFlow;

boot mIsADrain;

bool mIsASource;

vzDevice . *mpSource;

vzPin.h int mTempFlow;
boot mDeactivated;
int mInitialFlow;
public:
vzPin ( ) ;
~vzPin();
void DoCreate(int id, pType type, int xl,int yl,int x2~,i nt y2, int y22, int x12, int y12, int x22, int wordsize, vzEventQ *apE

ventQ);

void DoDraw();

int Get0utX1();

int Get0utY1();

int GetOutX2 ( ) ;

int GetOutY2();

int GetType() { return mType; };

int GetID() { return mID; };

void DoFlood();

void DoClear();

bool GetLabel();

boob IsADrain ( ) ;

void GiveFlow(int flow, bool meaningless, vzDevice *p);

int DoAugment(int x);

int GetSpace(bool m) {return 0;};

int GetFlow(bool lefttoright);

int GetInitialFlow();

void SetStart(int flow);

void DeactivatePin();

int . DoLabel(bool lefttoright);

void ClearStart();

}t #include "vzPin.cpp"
#endif l/ vzPin h //*****************************************************************
******

vzPopulation.cpp /*
*******************************************************************
*******
Van Zandt vzPopulation.cpp *******************************************************************
*******
*/
vzPopulation::vzPopulation(. int tournamentcount, int tournam entsize, int mutate, int crossov er, dom, int ran int count, int size, int alphas ize, double (* a val)(vzIndividual *iPtr) ) mkTournamentCount(tournamentcount), mkTournamentSize(tournamentsize), ' mkMutate(mutate), mkCrossover(crossover), mkRandom(random), mkTotal(mutate + crossover + random), mkCount(count), mkSize(size), mkAlphabetCount(alpha_size), DoEvaluate(eval) int i;

mpIndividual.resize(mkCount);

for (i=0; i<mkCount; i++) mpIndividual[i] = new vzIndividual (mkSize, mkAlphab etCount);

vzPopulation:: wzPopulation() int i;
for (i=0; i<mkCount; i++) vzPopulation.cpp }
delete mpIndividual[i];
/*
void vzPopulation::PrintToFile(ofstream out) }
*/
/*
void vzPopulation::DoPrint(int x, int y) } .':, */
void vzPopulation::ReGenerate(int cycle_count) int i, j;
0 ) for (i=0; i<cycle_count; i++) if ( mpIndividual(SelectBest()]->GetFitness() _- 0.
break;
for (j=0; j<mkTournamentCount; j++) if ( mpIndividual[SelectBest()]->GetFitness () _- 0.0 ) break;
DoTournament();
}
}
}
int vzPopulation:I:SelectBest() int i;
int retBestIndex;
double retBestFitness;
for (i=0; i<mkCount; i++) if ( i == 0 ) retBestIndex = 0;

vzPopulation.cpp s();
retBestFitness = mpIndividual[0]->GetFitnes else if ( mpIndividual[i]->GetFitness() < retBes tFitness ) retBestIndex = i;
retBestFitness = mpIndividual[i]->G
etFitness();
return retBestIndex;
void vzPopulation::DoTournament() int i;
int r;
int first = 0;
int ' second = 0;
int last = 0;
double tmpFitness = 0.0;
double firstFit - 1000000.0;
double secondFit - 1000000.0;
double lastFit - 0.0;
for (i=0; i<mkTournamentSize; i++) r = getRandom(mkCount);
tmpFitness = mpIndividual[r]->GetFitness();
if ( tmpFitness < firstFit ) _ secondFit = firstFit;
firstFit - tmpFitness;
second - first; ' first = r;
else if ( tmpFitness < secondFit ).
secondFit = tmpFitness;
second = r;
else if ( tmpFitness > lastFit ) vzPopulation.cpp lastFit = tmpFitness;
last - r;
if ( first !- last ) ual[last]));
r = getRandom(mkTotal);
if ( r < mkMutate ) DoClone(first, last);
DoMutate(last);.
else if ( r < mkMutate+mkCrossover if ( second !- last ) DoClone(first, last);
DoCrossover(last,second);
else // ( r < mkMutate+mkCrossover+mkRandom ) mpIndividual[last]->BuildRandom();
mpIndividualjlast]->SetFitness(DoEvaluate(mpIndivid void vzPopulation::DoClone(int from, int to) *(mpIndividual[to]) _ *(mpIndividual[from]);
]
void vzPopulatiori::DoMutate(int i) mpIndividualji]->DoMutate();
void vzPopulation::DoCrossover(int i, int j) mpIndividual[i]->DoCrossover(mpIndividual[j]);

vzPopulation.cpp void vzPopulation::BuildRandom() int i;
for (i=0; i<mkCount; i++) mplndividual[i]->BuildRandom();
mpIndividual[i]->SetFitness(DoEvaluate(mpIndividual [i]));
//*****************************************************************
*******

vzPopulation.h ~*
****************~***************************************************
**********
Van Zandt vzPopulation.h *******************************************************************
**********
*/
#if !defined( vzPopulation_h) #define vzPopulation_h #include "vzLib\vzTools.h"
#include "vzLib\vzVector.h"
#include "vzIndividual.h"
class vzPopulation private:
const int mkTournamen tCount;

const int mkTournamen tSize;

const int , mkMutate;

const int mkCrossover const int mkRandom;

const int mkTotal;

const int mkCount;

const int mkSize.;

const int mkAlphabetC

ount;

vzVector<vzIndividual mpIndividual;
*>

public:
vzPopulation( int tournamentcount, int tournamentsize, int mutate, int crossover, int random, int count, int size, int alpha_size, double (* eval)(vzIndividua 1 *iPtr) );
~vzPopulation();

vzPopulation.h.
void BuildRandom();

void ReGenerate(int cycle_count);

void DoTournament(j;

int SelectBest();

void DoClone(int from, int to);

void DoMutate(int i);

void DoCrossover(int i, int j);

vzIndividual *GetIndividualPtr(int i) { return mpIndivid ual[i]; };

double (-* DoEvaluate)(vzIndividual *iPtr);

// void DoPrint(int x, int y);

// void PrintToFile(ofstream out);

};

#include "vzPopulation.cpp"
#endif // vzPopulation_h //*****************************************************************
*********

vzRegister.cpp /*
*******************************************************************
*********
vzRegister.cpp Van Zandt *******************************************************************
*********
*/
vzRegister::vzRegister(int WordSize, int devicesize) . mWordSize(WordSize), mWidth(devicesize*4), mX1(0), mY1(0), mX2(0) mY2 (0) mPin= new vzPin[mWordSize];
vzRegister:: wzRegister() delete [ ] mPin; .
mPin=NULL;
void vzRegister::DoCreate(int x1, int y1, int y2, bool ingrid, vzEventQ *a pEventQ) int counter; // in for loop that draws yellow boxes int boxlength; // the calculated average length of each box int extra; // the leftover space for boxes int gladder; //.adders distribute leftover space to boxes int y2adder;
mX1 = x1 + mWidth; //mWidth;
mY1 = y1;
mX2 = mX1 + mWidth; //mWidth;
mY2 = y2 ;
mpEventQ = apEventQ;
boxlength=((mY2-mY1)/(2*mWordSize+1));
extra=(mY2-mY1)~(2*mWordSize+1); // the space reserved between ends y2adder=extra/2;
gladder=extra/2;
if ( ingrid ) for (counter = O;counter<mWordSize;counter++) vzRegister.cpp mPin[counter].DoCreate(counter, in,mX1+3,mYl+boxleng th+yladder+(boxlength+boxlength)*counter, mX2-3,mYl+boxlength+y2adder+(boxlength+boxlength)*c ounter+boxlength, mX.1+mWidth+3,mY1+boxlength+yladder+(boxlength+boxle ngth)*counter, mXl+2*mWidth-3,mYl+boxlength+y2adder+(boxlength+box length)*counter+boxlength, mWordSize,mpEventQ);
if (counter==mWordSize-2) < -., if (extra~2>0) y2adder=extra/2+1;
else else y2adder=extral2;
for (counter = O;counter<mWordSize;counter++) mPin[counter].DoCreate(counter, out,mXl+3,mY1+boxlen gth+yladder+(boxlength+boxlength)*counter, mX2-3,mY1+boxlength+y2adder+(boxlength+boxlength)*c ounter+boxlength, mX1-mWidth+3,mY1+boxlength+yladder+(boxlength+boxle ngth)*counter, mX1-3,mY1+boxlength+y2adder+(boxlength+boxlength)*c ounter+boxlength, mWordSize,mpEventQ);
if (counter==mWordSize-2) C
if (extra~2>0) y2adder=extra/2+2;
else y2adder=extral2;
) void vzRegister::DoDraw() t int counter;

vzRegister.cpp for (counter = O;counter<mWordSize;counter++) mPin[counter].DoDraw();
void vzRegister::DoFlood() int counter;
for (counter=O;counter<mWordSize;counter++) if (mPin[counter].GetFlow(true)>0) mpin[counter].DoFlood();
void vzRegister::DoClear() int counter;
for (counter=O;counter<mWordSize;counter++) mPin[counter].DoClear();
int vzRegister::ConnectToPin(vzConnector *pAConnector, int SwitchDe nsity) int any;
int connectorsize;
int counter;
int whichpin;
any = pAConnector->GetY();
connectorsize = pAConnector->GetSize();
whichpin=-1;
for (counter=O;counter<mWordSize;counter++) if ((any>=mPin[counter].Get0utY1()) && (any<=mPin[c ounter].Get0utY2())) if ( getRandom(100) < SwitchDensity ) whichpin=counter;
return whichpin;
vzPin *vzRegister::GetPinPtr(int i) return &mPin[i];

vzRegister.cpp void vzRegister::DoLabel(bool lefttoright) int counter;
for (counter=O;counter<mWordSize;counter++) mPinlcounter].DoLabel(lefttoright);
int vzRegister::DoAugment() int counter, minflow;
for (counter=O;counter<mWordSize;counter++) if ( (mPin[counter].GetLabel()) && (mPin[counter].I
sADrain()) ) break;
minflow = mPin[counter].DoAugment(0);
return minflow;
bool vzRegister::CheckLabel() int counter;
int check = 0;
for (counter=O;counter<mWordSize;counter++) if (( mPin[counter].GetLabel() )&& (mPin[counter].I
sADrain())) check++;
if ( check > 0 ) return true;
else return false;
int vzRegister::OnPin(int xl,int y1) int j;
int answer;
answer=-1;
for (j=O;j<mWordSize;j++) vzRegister.cpp if (mPin[j].Get0utX1()<=x1) if (mPin[j].Get0utX2()>=x1) if (mPin[j].Get0utY1()<=y1) if (mPin[j].Get0utY2()>=y1) answer=j;
break;
]
return answer;
]
void vzRegister::SetPin(int WhichPin, int flow) mPin[WhichPin].SetStart(flow);
int vzRegister::PinHeight(int WhichPin) return (mPin[WhichPin].Get0utY1());
int vzRegister::GetPinFlow(int WhichPin) return (mPin[WhichPin].GetFlow(true));
void vzRegister::DeactivatePin(int WhichPin) mPin[WhichPin].DeactivatePin();
int vzRegister::GetInitialFlow(int TnlhichPin)~
return (mPin[WhichPin].GetInitialFlow());
void vzRegister::ClearStart() int counter;
for (counter=O;counter<mWordSize;counter++) mPin[counter].ClearStart();
void vzRegister::Write(vzString string) vzRegister.cpp int counter;
int size;
if ( string. length() < mWordSize size = string. length();
else size = mWordSize;
for (counter=O;counter<size;counter++) if (string[counter]=='0') mPin[counter].DeactivatePin();
else if (string[counter]=='1') mPin[counter].SetStart(kStartFlow);
//*****************************************************************
*********

vzRegister.h /*
*******************************************************************
*********
vzRegister.h Van Zandt *******************************************************************
*********
*/
#if !defined( vzRegister_h) #define vzRegister_h #include "vzEventQ.h"
#include "vzPin.h"
#include "vzConnector.h"
#include "vzLib\vzString.h"
//const int kRegisterWidth=15;
class vzRegister private:
const int mWordSize;
int mWidth;
int mXl;
int mYl;
int mX2;
int mY2;
vzPin *mPin; °
vzEventQ *mpEventQ;
boot mAmIInReg;
public:
vzRegister(int WordSize, int devicesize);
-vzRegister();
void DoCreate(int x1, int y1, int y2, bool ingrid,vzEven tQ *apEventQ);
void DoDraw();
void DoFlood();
int ConnectToPin(vzConnector *pAConnector, int SwitchDe nsity);
void DoClear();
vzPin *GetPinPtr(int i);
void DoLabel(bool lefttoright);
int DoAugment ( ) ;
bool CheckLabel();
int OnPin(int xl,int y1);
void SetPin(int V~hichPin, int flow);
160w vzRegister.h int PinHeight(int WhichPin);
int GetPinFlow(int WhichPin);
void DeactivatePin(int WhichPin);
int Get~itialFlow(int WhichPin);
void ClearStart();
void Write(vzString string);
#include "vzRegister.cpp"
#endif // vzRegister_h //*****************************************************************
*********

vzRegister.h /*
*******************************************************************
*********
vzRegister.h Van Zandt *******************************************************************
********* ' */
#if !defined( vzRegister_h) #define vzRegister_h #include "vzEventQ.h"
#include "vzPin.h"
#include "vzConnector.h"
#include "vzLib\vzString.h"
//const int kRegisterWidth=15;
class vzRegister private:
const int mWordSize;
int mWidth; , int mXl;
int mYl;
int mX2;
int mY2;
vzPin *mPin;
vzEventQ *mpEventQ;
boot mAmIInReg;
public:
vzRegister(int WordSize, int devicesize);
~vzRegister();
void DoCreate(int x1, int y1, int y2, bool ingrid,vzEven tQ. * apEventQ ) ;
void DoDraw().; , void DoFlood();
int ConnectToPin(vzConnector *pAConnector, int SwitchDe nsity);
void DoClear();
vzPin *GetPinPtr(int i);
void DoLabel(bool lefttoright);
int DoAugment();
boot CheckLabel();
int OnPin(int xl,int y1);
void SetPin(int WhichPin, int flow);

vzRegister.h int PinHeight(int WhichPin);
int GetPinFlow(int WhichPin);
void DeactivatePin(int WhichPin);
int GetInitialFlow(int WhichPin);
void ClearStart();
void Write(vzString string);
}1 #include "vzR.egister.cpp"
#endif // vzRegister_h //*************************************************~****************
********* .

vzSwitch.cpp /*
*******************************************************************
****** , vzSwitch.cpp Van Zandt *******************************************************************
******
*/
vzSwitch::vzSwitch() {
vzSwitch: : wzSwitch ( ) void.vzSwitch::DoCreate(int x1, int y1, int x2, int y2, int state, vzEventQ
*apEventQ) mX1 = x1;
mY1 = y1;
mX2 = x2;
mY2 = y2;
mpEventQ = apEventQ;
mState = state;
if ( mState =- 0 ) mInCapacity = 0;
else if (mState==1) mInCapacity=kLowCapacity;
else mInCapacity=kHighCapacity;
mOutCapacity = mInCapacity;
mInFlow = 0;
mOutFlow = 0;
mLabel = false;
mpSource = NULL;
mTempFlow = 0;
mColor = swLowColor;
void vzSwitch::DoDraw() int i;

vzSwitch.cpp if (mState==2) mColor=swHighColor;
if (mState==1) mColor=swLowColor;
if (mState==0) mColor=swOffColor;
line(screen,mXl,mYl,mX2,mY2,mColor);
- for (i=O;i«eighborCount;i++) mNeighborArray[i]->DoDraw();
void vzSwitch::DoFlood() int i;
if ( mColor =- swLowColor ) mColor = swHighColor;
if (Trace) DoDraw();
for (i=O;i<mNeighborCount;i++) mpEventQ->UpdateFuture(mNeighborArray[i]);
void vzSwitch::DoClear() mColor = swLowColor;
if (Trace) DoDraw();
mLabel = false;
mpSource = NULL;
mTempFlow = 0;
mAddFlow = true;
bool vzSwitch::GetLabel() return mLabel;
int vzSwitch::GetSpace(bool lefttoright) if (lefttoright) vzSwitch.cpp return (mInCapacity-mInFlow);
else return (mOutCapacity-mOutFlow);
int vzSwitch::GetFlow(bool lefttoright) if (lefttoright) return mOutFlow;
else return mInFlow;
void vzSwitch::GiveFlow(int flow,bool inflow,vzDevice *p) mpSource = p;
mTempFlow = flow;
if (inflow) mAddFlow = true;
else mAddFlow = false;
int vzSwitch::DoAugment(int x) int j;
mColor=swHighColor;
if (Trace) DoDraw();
if (mAddFlow) mlnFlow=mInFlow+x;
else mOutFlow=mOutFlow+x;
for (j=O;j<mNeighborCount;j++) if (mNeighborArray[j] _= mpSource) mpEventQ->UpdateFuture(mNeighborArray[j]);
break;
return x;
int vzSwitch::DoZabel(bool lefttoright) vzSwitch.cpp int j, returncode;
returncode=0;
if ( (mLabel==false) && (mTempFlow>0) ) for (j=0; j<InNeighborCount; j++) if ((mNeighborArray[j]!=mpSource)&&(mNeighb orArray[j]->GetLabel()==false)) if (mNeighborArray[j]->IsADrain()) mNeighborArray[j]->GiveFIow(mTempFlow,Teftt oright, this);
returncode = 1;
break;
else mNeighborArray[j]->GiveFlow (mTempFlow,lefttoright,this);
mpEventQ->UpdateFuture(mNeighborArray[j]);
mLabel=true;
return returncode;
void vzSwitch::ClearStart() mInFlow = 0;
mOutFlow = 0;
mLabel = false;
mpSource = NULL;
mTempFlow = 0;
mColor = swLowColor;
void vzSwitch::'SetState(int n) i f ( n == 0 ) mState = 0;

vzSwitch.cpp mColor = swOffColor;
mInCapacity=0;
else if ( n =- 1 ) mState = 1;
mColor = swLowColor;
mInCapacity=kLowCapacity;
else mState = 2;
mColor = swHighColor;
mInCapacity=kHighCapacity;
mOutCapacity=mInCapacity;

vzSwitch.h /*
*******************************************************************
*********
vzSwitch.h Van Zandt *******************************************************************
*********
*/

.#if ined( vzSwitch_h) !def #definevzSwitch_h #include"vzDevice.h"

const int swOffColor = DARKGRAY;

const int swLowColor = BLACK;

const int swHighColor = WHITE;

class Switch: publicvzDevice vz private:

int mxl;

int mYl;

int mX2;

int mY2;

int mColor;

vzEventQ *mpEventQ;

int mInCapacity;

int mOutCapacity;

int mInFlow;

int mOutFlow;

bool mLabel;

vzDevice *mpSource;
' int mTempFlow;

bool mAddFlow;

int mState;

int mNeighborlType;

int mNeighborlParml;

int mNeighborlParm2;

int mNeighbor2Type;

int mNeighbor2Parml;

int mNeighbor2Parm2;

public:
vzSwitch();
~VZSWItCh();
void DoCreate(int x1, int y1, int x2, int y2, vzSwitch.h int state, vzEventQ *apEven tQ);

void DoDraw();

void DoFlood();

void DoClear();

bool GetLabel();

int GetSpace(bool lefttoright);

int GetFlow(bool leftt'oright);

void GiveFlow(int flow, boot inflow, vzDevice *p);
.

bool IsADrain() {return false;};

int DoAugment(int x);

int DoLabel(bool lefttoright);

void ClearStart();
~

void SetState(int n);

void SetNeighborlType/(int n) { mNeighborlType = n; };

void SetNeighborlParml(int n) { mNeighborlParml = n; };

void SetNeighborlParm2.(int n) { mNeighborlParm2 = n; };

void SetNeighbor2Type(int n) { mNeighbor2Type =
n; };

void SetNeighbor2Parm1(int n) { mNeighbor2Parm1 = n; };

void SetNeighbor2Parm2(int n) { mNeighbor2Parm2 = n; };

int GetState() {return mState;};

int GetNeighborlType() { return mNeighborlType;

};
1; };
2; };
};
1; };
2; };
};
int GetNeighborlParml() { return mNeighborlParm int GetNeighborlParm2() { return mNeighborlParm int GetNeighbor2Type() { return mNeighbor2Type;
int GetNeighbor2Parm1() { return mNeighbor2Parm int GetNeighbor2Parm2() ~ return mNeighbor2Parm #include "vzSwitch.cpp"
#endif // vzSwitch h Untrained Nanocell Netlist Moletronics .OPTIONS RELTOL=.01 ITL4=10 SCALE=1 POST METHOD=Gear DCSTEP=10 .OPTIONS ACCT=0 INGOLD=1 NOMOD PROBE
.TRAM 10000n 60000n ROut1 1 0 1 .PRINT TRAM I(Rout1) C1 1 0 10f C2 2 0 10f C3 3 0 10f C4 4 0 10f C5 5 0 10f C6 6 0 10f C7 7 0 10f C8 8 0 10f C9 9 0 10f C10 10 0 10f C11 11 0 10f C12 12 0 10f C13 13 0 10f C14 14 0 10f VInputAl5 15 0 PWL(On,OV 20000n,OV 20001n,0.5V 30000n,0.5V 30001n,2V
40000n,2V
+ 40001n,0.5V 50000n,0.5V 50001n,0.5V 60000n,0.5V ) .PRINT TRAM 15 C15 15 0 10f C16 16 0 10f C17 17 0 10f C18 18 0 10f C19 19 0 10f C20 20 0 10f C24 24 0 5f C27 27 0 5f C29 29 0 5f C32 32 0 5f C34 34 0 5f C35 35 0 5f C37 37 0 5f C39 39 0 5f C42 42 0 5f C44 44 0 5f C47 47 0 5f C49 49 0 5f C50 50 0 5f C52 52 0 5f C53 53 0 5f C54 54 0 5f C55 55 0 5f C56 56 0 5f C57 57 0 5f C58 58 0 5f C59 59 0 5f C60 60 0 5f C61 61 0 5f C62 62 0 5f C63 63 0 5f C64 64 0 5f C67 67 0 5f C68 68 0 5f C69 69 0 5f C70 70 0 5f C71 71 0 5f C72 72 0 5f C74 74 0 5f C75 75 0 5f C76 76 0 5f C77 77 0 5f C78 78 0 5f C79 79 0 5f C82 82 0 5f C83 83 0 5f C84 84 0 5f C85 85 0 5f C86 86 0 5f C87 87 0 5f C88 88 0 5f C89 89 0 5f C90 90 0 5f C92 92 0 5f C93 93 0 5f C94 94 0 5f C97 97 0 5f C99 99 0 5f C101 101 0 5f C102 102 0 5f C103 103 0 5f C104 104 0 5f C105 105 0 5f C106 106 0 5f C108 108 0 5f C109 109 0 5f C111 111 0 5f C112 112 0 5f C113 113 0 5f C114 114 0 5f C115 115 0 5f C116 116 0 5f C119 119 0 5f C120 120 0 5f 0121 121 0 5f C122 122 0 5f C123 123 0 5f C124 124 0 5f C125 125 0 5f C128 128 0 5f 0129 129 0 5f C130 130 0 5f C131 131 0 5f C132 132 0 5f C133 133 0 5f C134 134 0 5f C135 135 0 5f C136 136 0 5f C137 137 0 5f C138 138 0 5f C139 139 0 5f C142 142 0 5f C143 143 0 5f C144 144 0 5f C145 145 0 5f C146 146 0 5f C147 147 0 5f C149 149 0 5f C150 150 0 5f C151 151 0 5f C152 152 0 5f C153 153 0 5f C154 154 0 5f C157 157 0 5f C158 158 0 5f C159 159 0 5f C160 160 0 5f C161 161 0 5f C162 162 0 5f 0163 163 0 5f C164 164 0 5f C165 165 0 5f C166 166 0 5f C167 167 0 5f C168 168 0 5f C169 169 0 5f C172 172 0 5f C173 173 0 5f C175 175 0 5f C176 176 0 5f C178 178 0 5f C179 179 0 5f C180 180 0 5f C181 181 0 5f C182 182 0 5f C183 183 0 5f C184 184 0 5f C186 186 0 5f C187 187 0 5f C188 188 0 5f C190 190 0 5f C191 191 0 5f C192 192 0 5f C193 193 0 5f C194 194 0 5f C195 195 0 5f C196 196 0 5f C197 197 0 5f C198 198 0 5f C199 199 0 5f C200 200 0 5f C202 202 0 5f C203 203 0 5f C204 204 0 5f C205 205 0 5f C206 206 0 5f C207 207 0 5f C208 208 0 5f C209 209 0 5f C210 210 0 5f C212 212 0 5f C214 214 0 5f C217 217 0 5f C219 219 0 5f C222 222 0 5f C224 224 0 5f C229 229 0 5f C231 231 0 5f C232 232 0 5f C234 234 0 5f C237 237 0 5f C239 239 0 5f C242 242 0 5f C244 244 0 5f X512 20 244 NDRDIODE_0 X511 242 20 NDRDIODE_1 X510 19 242 NDRDIODE_0 X508 239 19 NDRDIODE_0 X507 18 239 NDRDIODE_1 X506 237 18 NDRDIODE_0 X505 237 17 NDRDIODE_0 X503 234 17 NDRDIODE_1 X502 234 16 NDRDIODE_1 X501 16 232 NDRDIODE_0 X500 232 231 NDRDIODE_1 X499 5 229 NDRDIODE_1 X498 229 244 NDRDIODE_0 X497 20 229 NDRDIODE_0 X496 20 229 NDRDIODE_0 X490 239 19 NDRDIODE_1 X489 224 19 NDRDIODE_1 X488 224 239 NDRDIODE_0 X487 18 224 NDRDTODE_0 X486 18 239 NDRDIODE_0 X484 18 237 NDRDIODE_0 X483 222 18 NDRDIODE_0 X482 237 222 NDRDIODE_1 X481 222 17 NDRDIODE_0 X480 237 17 NDRDIODE_1 X475 219 17 NDRDIODE_1 X474 219 17 NDRDIODE_0 X473 219 234 NDRDIODE_1 X472 219 16 NDRDIODE_0 X471 16 219 NDRDIODE_1 X469 217 16 NDRDIODE_0 X468 217 16 NDRDIODE_0 X467 217 232 NDRDIODE_0 X466 217 231 NDRDIODE_0 X465 10 231 NDRDIODE_0 X464 10 217 NDRDIODE_1 X462 214 5 NDRDIODE_0 X461 214 5 NDRDIODE_1 X460 214 229 NDRDIODE_1 X459 214 20 NDRDIODE_1 X458 212 20 NDRDIODE_0 X457 212 19 NDRDIODE_0 X456 210 19 NDRDIODE_0 X455 19 210 NDRDIODE_0 X453 210 209 NDRDIODE~0 X452 209 224 NDRDIODE_0 X451 209 208 NDRDIODE_1 X450 224 208 NDRDIODE_0 X449 18 208 NDRDIODE_0 X448 222 208 NDRDIODE_1 X445 207 206 NDRDIODE_0 X444 206 222 NDRDIODE_0 X443 206 17 NDRDIODE_0 X442 206 17 NDRDIODE_0 X441 206 205 NDRDIODE_0 X440 205 17 NDRDIODE_0 X439 204 205 NDRDIODE_0 X438 17 204 NDRDIODE_1 X437 204 219 NDRDIODE_0 X436 16 204 NDRDIODE_1 X435 203 204 NDRDIODE_0 X434 203 16 NDRDIODE_1 X433 203 202 NDRDIODE_0 X432 16 202 NDRDIODE_1 X431 217 202 NDRDIODE_0 X430 202 10 NDRDIODE_1 X428 10 202 NDRDIODE_1 X427 200 5 NDRDIODE_1 X426 199 200 NDRDIODE_0 X425 199 5 NDRDIODE_0 X424 199 214 NDRDIODE_0 X423 199 198 NDRDIODE_0 X422 197 198 NDRDIODE_1 X421 212 197 NDRDIODE_1 X420 196 197 NDRDIODE_0 X419 195 196 NDRDIODE_1 X418 195 210 NDRDIODE_0 X417 195 209 NDRDIODE_0 X416 194 195 NDRDIODE_0 X415 194 209 NDRDIODE_1 X414 194 193 NDRDIODE_1 X413 193 209 NDRDIODE_1 X412 193 208 NDRDIODE_0 X411 207 193 NDRDIODE_1 X410 193 192 NDRDIODE_0 X409 207 192 NDRDIODE_1 X408 191 192 NDRDIODE_0 X407 207 191 NDRDIODE_0 X406 191 206 NDRDIODE_1 X405 205 191 NDRDIODE_0 X404 190 191 NDRDIODE_0 X403 205 190 NDRDIODE_0 X402 188 203 NDRDIODE_1 X401 188 187 NDRDIODE_1 X400 187 203 NDRDIODE_1 X399 202 187 NDRDIODE_1 X398 10 187 NDRDIODE_0 X397 186 10 NDRDIODE_1 X396 187 186 NDRDIODE_0 X395 200 4 NDRDIODE_0 X394 4 184 NDRDIODE_1 X393 184 200 NDRDIODE_0 X392 184 199 NDRDIODE_0 X391 184 198 NDRDIODE_0 X390 183 184 NDRDIODE_0 X389 198 183 NDRDIODE_1 X388 183 182 NDRDIODE_0 X387 182 198 NDRDIODE_1 X386 197 182 NDRDIODE_1 X487 18 224 NDRDTODE_0 WO 02/09117 ~ PCT/USO1/23333 X384 182 181 NDRDIODE_0 X383 196 181 NDRDIODE_1 X382 181 180 NDRDIODE_0 X381 196 180 NDRDIODE_1 X380 195 180 NDRDIODE_1 X379 194 180 NDRDIODE_1 X378 179 180 NDRDIODE_1 X377 179 194 NDRDIODE_0 X376 179 178 NDRDIODE_0 X375 178 194 NDRDIODE_1 X374 178 193 NDRDIODE_1 X373 192 178 NDRDIODE_1 X372 192 176 NDRDIODE_0 X371 191 176 NDRDIODE_0 X370 190 176 NDRDIODE_0 X369 175 176 NDRDIODE_0 X368 190 175 NDRDIODE_1 X367 188 173 NDRDIODE_0 X366 173 172 NDRDIODE_0 X365 188 172 NDRDIODE_0 X364 172 187 NDRDIODE_0 X363 172 186 NDRDIODE_0 X362 186 9 NDRDIODE_0 X361 9 172 NDRDIODE_1 X359 169 4 NDRDIODE_0 X358 169 4 NDRDIODE_1 X357 184 169 NDRDIODE_0 X356 183 169 NDRDIODE_0 X355 168 169 NDRDIODE_1 X354 183 168 NDRDIODE_1 X353 167 168 NDRDIODE_1 X352 167 183 NDRDIODE_0 X350 181 167 NDRDIODE_~0 X349 167 166 NDRDIODE_0 X348 181 166 NDRDIODE_1 X347 165 166 NDRDIODE_1 X346 181 165 NDRDIODE_1 X345 165 180 NDRDIODE_0 X344 179 165 NDRDIODE_1 X343 165 164 NDRDIODE_1 X342 179 164 NDRDIODE_1 X341 164 163 NDRDIODE_0 X340 179 163 NDRDIODE_0 X339 178 163 NDRDIODE_0 X338 162 163 NDRDIODE_1 X337 162 161 NDRDIODE_1 X336 161 176 NDRDIODE_1 X335 161 175 NDRDIODE_1 X334 161 160 NDRDIODE_0 X333 175 160 NDRDIODE_1 X332 160 159 NDRDIODE_0 X331 159 175 NDRDIODE_1 X330 173 159 NDRDIODE_1 X329 158 159 NDRDIODE_0 X328 158 173 NDRDIODE_1 X327 158 157 NDRDIODE_0 X326 157 173 NDRDIODE_0 X325 157 172 NDRDIODE_0 X324 157 9 NDRDIODE_0 X320 3 154 NDRDIODE_1 X319 154 4 NDRDTODE_0 X318 154 169 NDRDIODE_0 X317 168 154 NDRDIODE_l X316 153 154 NDRDIODE_1 X315 168 153 NDRDIODE_0 X314 152 153 NDRDIODE_0 X312 152 167 NDRDIODE~0 X311 152 166 NDRDIODE_1 X310 152 151 NDRDIODE_1 X309 151 166 NDRDIODE_0 X308 150 151 NDRDIODE_1 X307 166 150 NDRDIODE_1 X306 165 150 NDRDIODE_1 X305 164 150 NDRDIODE_1 X304 150 149 NDRDIODE_0 X303 149 164 NDRDIODE_1 X302 147 162 NDRDIODE_0 X301 147 146 NDRDIODE_0 X300 162 146 NDRDIODE_0 X299 146 161 NDRDIODE_1 X298 146 160 NDRDIODE_1 X297 145 146 NDRDIODE_0 X296 145 160 NDRDIODE_1 X295 144 145 NDRDIODE_0 X294 160 144 NDRDIODE_1 X293 144 159 NDRDTODE_1 X292 144 158 NDRDIODE_0 X291 143 144 NDRDTODE_1 X290 158 143 NDRDIODE_1 X289 143 142 NDRDIODE_0 X288 158 142 NDRDIODE_0 X287 157 142 NDRDIODE_0 X286 9 142 NDRDIODE_0 X284 8 142 NDRDIODE_0 X282 139 3 NDRDIODE_1 X281 3 139 NDRDIODE_0 X280 139 154 NDRDIODE_1 X279 139 153 NDRDIODE_1 X278 139 138 NDRDIODE_1 X277 138 153 NDRDIODE_1 X276 137 138 NDRDIODE_1 X275 137 153 NDRDIODE_1 X274 152 137 NDRDIODE_0 X273 151 137 NDRDIODE_1 X272 136 137 NDRDIODE_0 X271 136 151 NDRDIODE_0 X270 136 135 NDRDIODE_1 X269 151 135 NDRDIODE_1 X268 150 135 NDRDIODE_0 X267 149 135 NDRDIODE_0 X266 135 134 NDRDIODE_0 X265 134 149 NDRDIODE_1 X264 134 133 NDRDIODE_1 X263 133 149 NDRDIODE_0 X262 133 147 NDRDIODE_0 X261 132 133 NDRDIODE_0 X260 147 132 NDRDIODE_0 X259 131 132 NDRDIODE_1 X257 146 131 NDRDIODE_1 X256 131 145 NDRDIODE_0 X255 131 130 NDRDIODE_1 X254 145 130 NDRDIODE_1 X253 130 129 NDRDIODE_1 X252 129 145 NDRDIODE_0 X251 129'144 NDRDIODE_0 X250 143 129 NDRDIODE_1 X249 128 129 NDRDIODE_1 X248 143 128 NDRDIODE_0 X246 3 125 NDRDIODE_1 X245 124 125 NDRDIODE_0 X244 3 124 NDRDIODE_0 X242 138 124 NDRDIODE~1 X241 124 123 NDRDIODE_1 X240 138 123 NDRDIODE_0 X239 122 123 NDRDIODE_0 X238 122 138 NDRDIODE_1 X237 122 137 NDRDIODE_0 X236 136 122 NDRDIODE_0 X235 121 122 NDRDIODE_0 X234 121 136 NDRDIODE_0 X233 121 120 NDRDIODE_1 X232 136 120 NDRDIODE_1 X231 120 135 NDRDIODE_1 X230 120 134 NDRDIODE_1 X229 120 119 NDRDIODE_1 X228 134 119 NDRDIODE_0 X227 115 116 NDRDIODE_1 X226 115 130 NDRDIODE_0 X225 114 115 NDRDIODE_1 X224 114 130 NDRDIODE_0 X223 129 114 NDRDIODE_0 X222 114 128 NDRDIODE_1 X221 113 114 NDRDIODE_0 X220 113 128 NDRDIODE_1 X219 112 113 NDRDIODE_1 X218 112 128 NDRDIODE_0 X217 112 8 NDRDIODE_0 X216 111 8 NDRDIODE_0 X215 112 111 NDRDIODE_1 X214 2 125 NDRDIODE_0 X213 2 109 NDRDIODE_0 X212 125 109 NDRDIODE_0 X211 109 124 NDRDIODE_1 X210 109 123 NDRDIODE_0 X209 108 109 NDRDIODE_1 X208 123 108 NDRDIODE_0 X207 121 106 NDRDIODE_1 X206 106 105 NDRDIODE_1 X205 121 105 NDRDIODE_0 X204 120 105 NDRDIODE_1 X203 119 105 NDRDIODE_0 X202 105 104 NDRDIODE_0 X201 119 104 NDRDIODE_0 X200 104 103 NDRDIODE_0 X199 103 119 NDRDIODE_0 X198 102 103 NDRDIODE_0 X197 101 102 NDRDIODE_1 X195 115 101 NDRDIODE_0 X194 99 115 NDRDTODE_1 X193 114 99 NDRDIODE_1 X192 113 99 NDRDIODE_0 X191 97 113 NDRDIODE_0 X190 112 97 NDRDIODE_0 X189 111 97 NDRDIODE_0 X188 111 7 NDRDIODE_1 X187 97 7 NDRDIQDE_0 X185 2 94 NDRDIODE_0 X184 2 94 NDRDIODE_1 X183 94 109 NDRDIODE_1 X182 94 108 NDRDIODE_1 X181 93 94 NDRDIODE_0 X180 93 108 NDRDIODE_1 X179 93 92 NDRDIODE_1 X178 108 92 NDRDIODE_0 X177 106 92 NDRDIODE_0 X176 106 90~NDRDIODE_0 X174 90 104 NDRDIODE_1 X173 89 90 NDRDIODE_1 X172 104 89 NDRDIODE_1 X171 89 88 NDRDIODE_0 X170 88 104 NDRDIODE_1 X169 103 88 NDRDIODE_1 X168 88 102 NDRDIODE_0 X167 87 88 NDRDIODE_1 X166 87 102 NDRDIODE_1 X165 86 87 NDRDIODE_0 X164 86 102 NDRDIODE_0 X163 101 86 NDRDIODE_0 X162 86 85 NDRDIODE_1 X161 84 85 NDRDIODE_1 X160 84 99 NDRDIODE_1 X159 84 83 NDRDIODE_1 X158 83 82 NDRDIODE_1 X157 82 97 NDRDIODE_1 X156 82 7 NDRDIODE_1 X154 7 82 NDRDIODE_1 X152 1 79 NDRDIODE_1 X151 2 79 NDRDIODE_1 X150 94 79 NDRDIODE_1 X149 93 79 NDRDIODE_0 X148 78 79 NDRDIODE_1 x147 78 93 NDRDIODE_0 X146 78 77 NDRDIODE_1 X145 77 93 NDRDIODE_0 X144 92 77 NDRDIODE_1 X143 77 76 NDRDIODE_1 X142 76 75 NDRDIODE_1 X141 90 75 NDRDIODE_1 X140 75 89 NDRDIODE_0 X139 74 75 NDRDIODE_1 X138 74 89 NDRDIODE_1 X137 87 72 NDRDIODE_0 X136 72 71 NDRDIODE_0 X135 87 71 NDRDIODE_1 x134 71 86 NDRDIODE_1 X133 71 85 NDRDIODE_0 X131 85 70 NDRDIODE_1 X130 70 69 NDRDIODE_0 X129 85 69 NDRDIODE_1 X128 69 84 NDRDIODE_0 X127 69 83 NDRDIODE_1 X126 68 69 NDRDIODE_0 X125 83 68 NDRDIODE_0 X124 68 67 NDRDIODE_0 X123 83 67 NDRDIODE_0 X122 67 82 NDRDIODE_1 X121 7 67 NDRDIODE_0 X119 6 67 NDRDIODE_1 X117 64 1 NDRDIODE_1 X116 64 1 NDRDIODE_0 X115 79 64 NDRDIODE_0 X114 64 78 NDRDIODE_0 X113 63 64 NDRDIODE_0 X112 78 63 NDRDIODE_1 X111 63 62 NDRDIODE_0 X110 78 62 NDRDIODE_1 X109 62 77 NDRDIODE_1 X108 62 76 NDRDIODE_1 X107 62 61 NDRDIODE_0 X106 76 61 NDRDIODE_0 X105 60 61 NDRDIODE_0 X104 76 60 NDRDIODE_0 X103 60 75 NDRDIODE_1 X102 74 60 NDRDIODE_1 X101 59 60 NDRDIODE_1 X100 59 74 NDRDIODE_1 X99 59 58 NDRDIODE_0 X98 58 74 NDRDIODE_0 X97 72 58 NDRDIODE_0 X96 57 58 NDRDIODE_1 X95 72 57 NDRDIODE_1 X94 56 57 NDRDIODE_1 X93 72 56 NDRDIODE_1 X92 56 71 NDRDIODE_0 X91 56 70 NDRDTODE_0 X90 56 55 NDRDIODE_0 X89 55 70 NDRDIODE_0 X88 54 55 NDRDIODE_1 X87 70 54 NDRDIODE_0 X86 69 54 NDRDIODE_1 X85 54 68 NDRDIODE_1 X84 54 53 NDRDIODE_0 X83 68 53 NDRDIODE_0 X82 52 53 NDRDIODE_0 X81 68 52 NDRDIODE_0 X80 67 52 NDRDIODE_1 X79 52 6 NDRDIODE_1 X77 6 52 NDRDIODE_1 X76 1 50 NDRDIODE_0 X75 50 49 NDRDIODE_0 X74 49 1 NDRDIODE_1 X73 64 49 NDRDIODE_1 X72 63 49 NDRDIODE_1 X71 15 49 NDRDIODE_0 X70 15 63 NDRDIODE_1 X69 15 47 NDRDIODE_1 X67 62 47 NDRDIODE_0 X66 47 61 NDRDIODE_0 X65 47 14 NDRDIODE_1 X64 61 14 NDRDIODE_0 X62 14 61 NDRDIODE_1 X61 60 14 NDRDIODE_0 X60 14 59 NDRDIODE_1 X59 14 44 NDRDIODE_1 X58 44 59 NDRDIODE_1 X57 13 44 NDRDIODE_1 X56 13 59 NDRDIODE_1 X55 13 58 NDRDIODE_0 X54 13 57 NDRDIODE_1 X53 13 42 NDRDIODE_1 X52 57 42 NDRDIODE_0 X51 12 42 NDRDIODE_1 X50 57 12 NDRDIODE_0 X49 12 56 NDRDIODE_1 X48 55 12 NDRDIODE_1 X46 12 55 NDRDIODE_1 X45 12 39 NDRDIODE_0 X44 55 39 NDRDIODE_1 X43 39 54 NDRDIODE_0 X42 53 39 NDRDIODE_1 X41 11 39 NDRDIODE_1 X40 11 53 NDRDIODE_0 X39 37 11 NDRDIODE_0 X38 53 37 NDRDIODE_0 X37 37 52 NDRDIODE_0 X36 6 37 NDRDIODE_0 X35 35 50 NDRDIODE_0 X34 35 34 NDRDIODE_1 X33 50 34 NDRDIODE_1 X32 34 49 NDRDIODE_0 X31 15 34 NDRDIODE_1 X30 32 15 NDRDIODE_0 X29 32 47 NDRDIODE_1 X28 32 14 NDRDIODE_1 X27 32 14 NDRDIODE_1 X22 44 14 NDRDIODE_0 X21 14 29 NDRDIODE_1 X20 29 44 NDRDIODE_0 X19 13 29 NDRDIODE_0 X18 44 13 NDRDIODE_1 X16 13 42 NDRDIODE_0 X15 13 27 NDRDIODE_1 X14 42 27 NDRDIODE_1 X13 27 12 NDRDIODE_0 X12 12 42 NDRDIODE_1 X7 12 24 NDRDIODE_0 X6 12 24 NDRDIODE_1 X5 39 24 NDRDIODE_0 X4 11 24 NDRDIODE_0 .SUT3CKT NDRDIODE-1 IN OUT
G1 IN OUT PWL(1) IN OUT -1V,-1n -.8V,-1n -.625V,-760n OV,On .625V,760n .8V,ln lV,ln SMOOTH=1 .ENDS

.SUBCKT NDRDTODE-0 IN OUT
G1 IN OUT PWL(1) IN OUT -2V,-.8n -1V,-.8n -.75V,-.55n -.5V,-.21n OV,On .5V,.21n .75V,.55n 1V,.8n 2V,.8n SMOOTH=1 .ENDS
.END

Inverter Netlist Moletronics .OPTIONS RELTOL=.01 ITL4=10 SCALE=1 POST METHOD=Gear DCSTEP=10 .OPTIONS ACCT=0 INGOLD=1 NOMOD PROBE
.TRAM 10000n 60000n ROut1 1 0 1 .PRINT TRAM I(Rout1) C1 1 0 10f C2 2 0 10f C3 3 0 10f C4 4 0 10f C5 5 0 10f C6 6 0 10f C7 7 0 10f C8 8 0 10f C9 9 0 10f C10 10 0 10f C11 11 0 10f C12 12 0 10f C13 13 0 10f C14 14 0 10f VlnputAl5 15 0 PWL(On,OV 20000n,OV 20001n,0.5V 30000n,0.5V 30001n,2V
40000n,2V
+ 40001n,0.5V 50000n,0.5V 50001n,0.5V 60000n,0.5V ) .PRINT TRAM 15 C15 15 0 10f C16 16 0 10f C17 17 0 10f C18 18 0 10f C19 19 0 10f C20 20 0 10f C24 24 0 5f C27 27 0 5f C29 29 0 5f C32 32 0 5f C34 34 0 5f C35 35 0 5f C37 37 0 5f C39 39 0 5f C42 42 0 5f C44 44 0 5f C47 47 0 5f C49 49 0 5f C50 50 0 5f C52 52 0 5f C53 53 0 5f C54 54 0 5f C55 55 0 5f C56 56 0 5f C57 57 0 5f C58 58 0 5f C59 59 0 5f C60 60 0 5f C61 61 0 5f C62 62 0 5f C63 63 0 5f C64 64 0 5f C67 67 0 5f C68 68 0 5f C69 69 0 5f C70 70 0 5f C71 71 0 5f C72 72 0 5f C74 74 0 5f C75 75 0 5f C76 76 0 5f C77 77 0 5f C78 78 0 5f C79 79 0 5f C82 82 0 5f C83 83 0 5f C84 84 0 5f C85 85 0 5f C86 86 0 5f C87 87 0 5f C88 88 0 5f C89 89 0 5f C90 90 0 5f C92 92 0 5f C93 93 0 5f C94 94 0 5f C97 97 0 5f C99 99 0 5f C101 101 0 5f C102 102 0 5f C103 103 0 5f C104 104 0 5f C105 105 0 5f C106 106 0 5f C108 108 0 5f 0109 109 0 5f C111 111 0 5f C112 112 0 5f C113 113 0 5f C114 114 0 5f C115 115 0 5f C116 116 0 5f C119 119 0 5f 0120 120 0 5f C121 121 0 5f C122 122 0 5f C123 123 0 5f C124 124 0 5f C125 125 0 5f C128 128 0 5f C129 129 0 5f 0130 130 0 5f C131 131 0 5f C132 132 0 5f C133 133 0 5f 0134 134 0 5f C135 135 0 5f C136 136 0 5f C137 137 0 5f C138 138 0 5f C139 139 0 5f C142 142 0 5f C143 143 0 5f C144 144 0 5f C145 145 0 5f 0146 146 0 5f C147 147 0 5f C149 149 0 5f C150 150 0 5f C151 151 0 5f C152 152 0 5f C153 153 0 5f C154 154 0- 5f C157 157 0 5f C158 158 0 5f C159 159 0 5f C160 160 0 5f C161 161 0 5f C162 162 0 5f C163 163 0 5f C164 164 0 5f C165 165 0 5f C166 166 0 5f C167 167 0 5f C168 168 0 5f C169 169 0 5f C172 172 0 5f C173 173 0 5f C175 175 0 5f C176 176 0 5f C178 178 0 5f C179 179 0 5f C180 180 0 5f C181 181 0 5f C182 182 0 5f C183 183 0 5f C184 184 0 5f 0186 186 0 5f C187 187 0 5f 0188 188 0 5f C190 190 0 5f C191 191 0 5f C192 192 0 5f C193 193 0 5f C194 194 0 5f C195 195 0 5f C196 196 0 5f C197 197 0 5f C198 198 0 5f C199 199 0 5f C200 200 0 5f C202 202 0 5f C203 203 0 5f C204 204 0 5f C205 205 0 5f C206 206 0 5f C207 207 0 5f C208 208 0 5f C209 209 0 5f C210 210 0 5f C212 212 0 5f C214 214 0 5f C217 217 0 5f C219 219 0 5f C222 222 0 5f C224 224 0 5f C229 229 0 5f C231 231 0 5f C232 232 0 5f C234 234 0 5f 0237 237 0 5f C239 239 0 5f C242 242 0 5f C244 244 0 5f X512 20 244 NDRDIODE_0 X511 242 20 NDRDIODE_0 X510 19 242 NDRDIODE_1 X508 239 19 NDRDIODE_1 X507 18 239 NDRDIODE_1 X506 237 18 NDRDIODE_0 X505 237 17 NDRDIODE_1 X503 234 17 NDRDIODE_0 X502 234 16 NDRDIODE_0 X501 16 232 NDRDIODE_1 X500 232 231 NDRDIODE_0 X499 5 229 NDRDIODE_0 X498 229 244 NDRDIODE_0 X497 20 229 NDRDIODE_0 X496 20 229 NDRDIODE_0 X489 224 19 NDRDIODE~1 X488 224 239 NDRDIODE_1 X487 18 224 NDRDIODE_1 X486 18 239 NDRDIODE_0 X484 18 237 NDRDIODE_1 X483 222 18 NDRDIODE_1 X482 237 222 NDRDIODE_0 X481 222 17 NDRDIODE_0 X480 237 17 NDRDIODE_0 X475 219 17 NDRDIODE_1 X474 219 17 NDRDIODE_0 X473 219 234 NDRDIODE_1 X472 219 16 NDRDIODE_0 X471 16 219 NDRDIODE_0 X469 217 16 NDRDIODE_1 X468 217 16 NDRDIODE_0 X467 217 232 NDRDIODE_0 X466 217 231 NDRDIODE_0 X465 10 231 NDRDIODE_1 X464 10 217 NDRDIODE_0 X462 214 5 NDRDIODE_0 X461 214 5 NDRDIODE_1 X460 214 229 NDRDIODE_1 X459 214 20 NDRDIODE_0 X458 212 20 NDRDIODE_0 X457 212 19 NDRDIODE_1 X456 210 19 NDRDIODE_1 X455 19 210 NDRDIODE_0 X454 210 224 NDRDIODE_1 X453 210 209 NDRDIODE_1 X452 209 224 NDRDIODE_1 X451 209 208 NDRDIODE_1 X450 224 208 ~~IVDRDIODE_0 X449 18 208 NDRDIODE_1 X447 207 208 NDRDIODE~1 X446 222 207 NDRDIODE_0 X445 207 206 NDRDIODE_0 X444 206 222 NDRDTODE_1 X443 206 17 NDRDIODE_0 X442 206 17 NDRDIODE_1 X441 206 205 NDRDIODE_1 X440 205 17 NDRDIODE_0 X439 204 205 NDRDIODE_0 X438 17 204 NDRDIODE_0 X437 204 219 NDRDIODE_1 X436 16 204 NDRDIODE_1 X435 203 204 NDRDIODE_0 X434 203 16 NDRDIODE_1 X433 203 202 NDRDIODE_1 X432 16 202 NDRDIODE_1 X431 217 202 NDRDIODE_0 X430 202 10 NDRDIODE_0 X428 10 202 NDRDIODE_1 X427 200 5 NDRDIODE_0 X426 199 200 NDRDIODE_0 X425 199 5 NDRDIODE_1 X424 199 214 NDRDIODE_0 X422 197 198 NDRDIODE~0 X421 212 197 NDRDIODE_1 X420 196 197 NDRDIODE_0 X419 195 196 NDRDIODE_1 X418 195 210 NDRDIODE_0 X417 195 209 NDRDIODE_0 X416 194 195 NDRDIODE_0 X415 194 209 NDRDIODE_0 X414 194 193 NDRDIODE_1 X413 193 209 NDRDIODE_1 X412 193 208 NDRDIODE_0 X411 207 193 NDRDIODE_0 X410 193 192 NDRDIODE_0 X409 207 192 NDRDIODE_0 X408 191 192 NDRDIODE_1 X407 207 191 NDRDIODE_1 X406 191 206 NDRDIODE_1 X405 205 191 NDRDIODE_0 X404 190 191 NDRDIODE_1 X403 205 190 NDRDIODE_0 X402 188 203 NDRDIODE_1 X401 188 187 NDRDIODE_0 X400 187 203 NDRDIODE_1 X399 202 187 NDRDIODE_1 X398 10 187 NDRDIODE_1 X397 186 10 NDRDIODE_1 X396 187 186 NDRDIODE_0 X395 200 4 NDRDIODE_1 X394 4 184 NDRDIODE_0 X393 184 200 NDRDIODE_1 X392 184 199 NDRDIODE_1 X391 184 198 NDRDIODE_0 X390 183 184 NDRDIODE_0 X389 198 183 NDRDIODE_1 X388 183 182 NDRDIODE_0 X387 182 198 NDRDIODE_0 X386 197 182 NDRDIODE_0 X385 182 196 NDRDIODE_0 X383 196 181 NDRDIODE_1 X382 181 180 NDRDIODE_1 X381 196 180 NDRDIODE_1 X380 195 180 NDRDIODE_0 X379 194 180 NDRDTODE_1 X378 179 180 NDRDIODE_1 X377 179 194 NDRDIODE_1 X376 179 178 NDRDIODE_0 X375 178 194 NDRDIODE_1 X374 178 193 NDRDIODE_1 X373 192 178 NDRDIODE_1 X372 192 176 NDRDIODE_1 X371 191 176 NDRDIODE_0 X370 190 176 NDRDIODE_0 X369 175 176 NDRDIODE_1 X368 190 175 NDRDIODE_0 X367 188 173 NDRDIODE_1 X366 173 172 NDRDIODE_0 X365 188 172 NDRDIODE_1 X364 172 187 NDRDIODE_1 X363 172 186 NDRDIODE_1 X362 186 9 NDRDIODE_0 X361 9 172 NDRDIODE_1 X359 169 4 NDRDIODE_1 X358 169 4 NDRDIODE_1 X357 184 169 NDRDIODE_0 X356 183 169 NDRDIODE_1 X355 168 169 NDRDIODE_1 X354 183 168 NDRDIODE_0 X353 167 168 NDRDIODE_1 X352 167 183 NDRDIODE_0 X351 167 182 NDRDIODE_1 X350 181 167 NDRDIODE_1 X349 167 166 NDRDIODE_1 X348 181 166 NDRDIODE_1 X347 165 166 NDRDIODE_1 X346 181 165 NDRDIODE_1 X345 165 180 NDRDIODE_0 X344 179 165 NDRDIODE_0 X343 165 164 NDRDIODE_1 X342 179 164 NDRDIODE_1 X341 164 163 NDRDIODE_0 X340 179 163 NDRDTODE_0 X339 178 163 NDRDIODE_0 X338 162 163 NDRDIODE_1 X337 162 161 NDRDIODE_0 X336 161 176 NDRDIODE_1 X335 161 175 NDRDIODE_0 X334 161 160 NDRDIODE_1 X333 175 160 NDRDIODE_1 X332 160 159 NDRDIODE_1 X331 159 175 NDRDIODE_0 X330 173 159 NDRDIODE_0 X329 158 159 NDRDIODE_1 X328 158 173 NDRDIODE_1 X327 158 157 NDRDIODE_1 X326 157 173 NDRDIODE_1 X325 157 172 NDRDIODE_1 X324 157 9 NDRDIODE_1 X322 157 9 NDRDIODE_0 X319 154 4 NDRDIODE_0 X318 154 169 NDRDIODE_1 X317 168 154 NDRDIODE_1 X315 168 153 NDRDIODE~0 X314 152 153 NDRDIODE_0 X313 152 168 NDRDIODE_0 X312 152 167 NDRDIODE_0 X311 152 166 NDRDIODE_0 X310 152 151 NDRDTODE_0 X309 151 166 NDRDIODE_0 X308 150 151 NDRDIODE_0 X307 166 150 NDRDIODE_1 X306 165 150 NDRDIODE_0 X305 164 150 NDRDIODE_0 X304 150 149 NDRDIODE_0 X303 149 164 NDRDIODE_0 X302 147 162 NDRDIODE_0 X301 147 146 NDRDIODE_0 X300 162 146 NDRDIODE_0 X299 146 161 NDRDIODE_0 X298 146 160 NDRDIODE_0 X297 145 146 NDRDIODE_1 X296 145 160 NDRDIODE_1 X295 144 145 NDRDIODE_1 X294 160 144 NDRDIODE_1 X293 144 159 NDRDIODE_0 X292 144 158 NDRDIODE_0 X290 158 143 NDRDIODE~1 X289 143 142 NDRDIODE_1 X288 158 142 NDRDIODE_0 X287 157 142 NDRDIODE_1 X286 9 142 NDRDIODE_0 X282 139 3 NDRDIODE_1 X281 3 139 NDRDTODE_0 X280 139 154 NDRDIODE_1 X279 139 153 NDRDIODE_0 X278 139 138 NDRDIODE_0 X277 138 153 NDRDIODE_l X276 137 138 NDRDIODE_1 X275 137 153 NDRDIODE_1 X274 152 137 NDRDIODE_1 X273 151 137 NDRDIODE_1 X271 136 151 NDRDIODE~0 X270 136 135 NDRDIODE_0 X269 151 135 NDRDIODE_1 X268 150 135 NDRDIODE_0 X267 149 135 NDRDIODE_0 X266 135 134 NDRDIODE_1 X265 134 149 NDRDIODE_0 X264 134 133 NDRDIODE_1 X263 133 149 NDRDIODE_1 X262 133 147 NDRDIODE_1 X261 132 133 NDRDIODE_0 X260 147 132 NDRDIODE_0 X259 131 132 NDRDIODE_0 X2.58 147 131 NDRDIODE_0 X256 131 145 NDRDIODE_1 X255 131 130 NDRDIODE_0 X254 145 130 NDRDIODE_0 X253 130 129 NDRDIODE_1 X252 129 145 NDRDIODE_1 X251 129 144 NDRDIODE_0 X250 143 129 NDRDIODE_1 X249 128 129 NDRDIODE_0 X248 143 128 NDRDIODE_0 X246 3 125 NDRDIODE_0 X245 124 125 NDRDIODE_0 X244 3 124 NDRDIODE_0 X243 124 139 NDRDIODE_1 X242 138 124 NDRDIODE_1 X241 124 123 NDRDIODE_0 X240 138 123 NDRDIODE_1 X239 122 123 NDRDIODE_0 X238 122 138 NDRDIODE_0 X237 122 137 NDRDIODE_1 X236 136 122 NDRDIODE_1 X235 121 122 NDRDIODE_1 X234 121 136 NDRDIODE_0 X233 121 120 NDRDIODE_1 X232 136 120 NDRDIODE_1 X231 120 135 NDRDIODE_1 X230 120 134 NDRDIODE_1 X229 120 119 NDRDIODE_0 X228 134 119 NDRDIODE_0 X227 115 116 NDRDIODE_0 X226 115 130 NDRDIODE_1 X225 114 115 NDRDIODE_1 X224 114 130 NDRDTODE_0 X223 129 114 NDRDIODE_0 X222 114 128 NDRDIODE_1 X221 113 114 NDRDIODE_0 X220 113 128 NDRDIODE_0 X219 112 113 NDRDIODE_1 X218 112 128 NDRDIODE_1 X217 112 8 NDRDIODE_1 X216 111 8 NDRDIODE_1 X215 112 111 NDRDIODE_0 X214 2 125 NDRDIODE_0 X213 2 109 NDRDIODE_0 X212 125 109 NDRDIODE_0 X211 109 124 NDRDIODE_1 X210 109 123 NDRDIODE_0 X209 108 109 NDRDIODE_0 X208 123 108 NDRDIODE_1 X207 121 106 NDRDTODE_0 X206 106 105 NDRDIODE_0 X205 121 105 NDRDIODE_0 X204 120 105 NDRDIODE_1 X203 119 105 NDRDIODE_0 X202 105 104 NDRDIODE_0 X201 119 104 NDRDIODE_0 X200 104 103 NDRDIODE_0 X199 103 119 NDRDIODE_1 X198 102 103 NDRDIODE_0 X197 101 102 NDRDIODE_1 X196 101 116 NDRDIODE_1 X194 99 115 NDRDIODE_0 X193 114 99 NDRDIODE_0 X192 113 99 NDRDIODE_1 X191 97 113 NDRDIODE_0 X189 111 97 NDRDIODE_1 X188 111 7 NDRDTODE_1 X184 2 94 NDRDIODE_0 X183 94 109 NDRDIODE_0 X182 94 108 NDRDIODE_0 X181 93 94 NDRDIODE_0 X180 93 108 NDRDIODE_0 X179 93 92 NDRDIODE_1 X178 108 92 NDRDTODE_0 X177 106 92 NDRDIODE_0 X176 106 90 NDRDIODE_0 X175 105 90 NDRDIODE_0 X174 90 104 NDRDIODE_1 X173 89 90 NDRDIODE_0 X172 104 89 NDRDIODE_1 X171 89 88 NDRDIODE_1 X170 88 104 NDRDTODE_0 X169 103 88 NDRDIODE_0 X168 88 102 NDRDIODE_1 X167 87 88 NDRDIODE_0 X166 87 102 NDRDIODE_0 X164 86 102 NDRDTODE_1 X163 101 86 NDRDIODE_0 X162 86 85 NDRDIODE_1 X161 84 85 NDRDIODE_0 X159 84 83 NDRDIODE_0 X158 83 82 NDRDIODE_0 X156 82 7 NDRDIODE_0 X154 7 82 NDRDIODE_1 X152 1 79 NDRDIODE_0 X151 2 79 NDRDIODE_0 X150 94 79 NDRDIODE_1 X149 93 79 NDRDIODE_0 X148 78 79 NDRDIODE_1 X147 78 93 NDRDTODE_0 X146 78 77 NDRDIODE_0 X145 77 93 NDRDIODE_0 X144 92 77 NDRDIODE_0 X143 77 76 NDRDIODE_0 X142 76 75 NDRDIODE_0 X141 90 75 NDRDIODE_1 X140 75 89 NDRDIODE_1 X139 74 75 NDRDIODE_1 X138 74 89 NDRDIODE_1 X137 87 72 NDRDIODE_0 X136 72 71 NDRDIODE_0 X135 87 71 NDRDIODE_0 X134 71 86 NDRDIODE_0 X133 71 85 NDRDIODE_1 X132 70 71 NDRDTODE_1 X129 85 69 NDRDIODE_1 X128 69 84 NDRDIODE_1 X127 69 83 NDRDIODE_1 X126 68 69 NDRDIODE_1 X125 83 68 NDRDIODE_0 X124 68 67 NDRDIODE_1 X123 83 67 NDRDIODE_0 X122 67 82 NDRDIODE_0 X121 7 67 NDRDIODE_1 X119 6 67 NDRDIODE_1 X117 64 1 NDRDIODE_1 X116 64 1 NDRDTODE_0 X115 79 64 NDRDIODE_0 X114 64 78 NDRDIODE_0 X113 63 64 NDRDIODE_1 X110 78 62 NDRDIODE_1 X109 62 77 NDRDIODE_0 X108 62 76 NDRDIODE_0 X107 62 61 NDRDIODE_0 X106 76 61 NDRDIODE_1 X105 60 61 NDRDIODE_1 X104 76 60 NDRDIODE_1 X103 60 75 NDRDIODE_1 X102 74 60 NDRDIODE_0 X101 59 60 NDRDIODE_0 X100 59 74 NDRDIODE_1 X99 59 58 NDRDIODE_1 X98 58 74 NDRDIODE_1 X97 72 58 NDRDIODE_0 X96 57 58 NDRDIODE_0 X95 72 57 NDRDIODE_1 X94 56 57 NDRDIODE_0 X93 72 56 NDRDIODE_1 X92 56 71 NDRD20DE_1 X91 56 70 NDRDIODE_0 X90 56 55 NDRDTODE_0 X89 55 70 NDRDIODE_1 X88 54 55 NDRDIODE_1 X87 70 54 NDRDIODE_1 X86 69 54 NDRDIODE_1 X85 54 68 NDRDIODE_1 X84 54 53 NDRDIODE_1 X83 68 53 NDRDIODE_1 X82 52 53 NDRDIODE_0 X81 68 52 NDRDIODE_1 X80 67 52 NDRDIODE_1 X79 52 6 NDRDIODE_1 X77 6 52 NDRDIODE_0 X76 1 50 NDRDIODE_1 X75 50 49 NDRDIODE_1 X74 49 1 NDRDIODE_1 X73 64 49 NDRDIODE_0 X72 63 49 NDRDIODE_0 X71 15 49 NDRDIODE_1 X70 15 63 NDRDIODE_1 X69 15 47 NDRDIODE_0 X68 63 47 NDRDIODE_1 X66 47 61 NDRDIODE_1 X65 47 14 NDRDIODE_1 X64 61 14 NDRDIODE_1 X62 14 61 NDRDIODE_0 X60 14 59 NDRDIODE_1 X59 14 44 NDRDIODE_0 X58 44 59 NDRDIODE_1 X57 13 44 NDRDIODE_1 X56 13 59 NDRDIODE_1 X55 13 58 NDRDIODE_1 X54 13 57 NDRDIODE_0 X53 13 42 NDRDIODE_1 X52 57 42 NDRDIODE_0 X51 12 42 NDRDIODE_1 X50 57 12 NDRDIODE_0 X4 9 12 56 NDRDIODE_1 X48 55 12 NDRDIODE_0 X46 12 55 NDRDIODE_0 X45 12 39 NDRDIODE_0 X44 55 39 NDRDIODE_0 X43 39 54 NDRDIODE_1 X42 53 39 NDRDIODE_1 X41 11 39 NDRDIODE_0 X40 11 53 NDRDIODE_0 X39 37 11 NDRDIODE_0 X38 53 37 NDRDIODE_1 X37 37 52 NDRDIODE_1 X36 6 37 NDRDIODE_0 X35 35 50 NDRDIODE_1 X34 35 34 NDRDIODE_1 X33 50 34 NDRDIODE_0 X32 34 49 NDRDIODE_0 X31 15 34 NDRDIODE_0 X30 32 15 NDRDIODE_0 X29 32 47 NDRDIODE_0 X28 32 14 NDRDZODE_0 X27 32 14 NDRDIODE_0 X21 14 29 NDRDIOD~E_0 X20 29 44 NDRDIODE_1 X19 13 29 NDRDIODE_0 X18 44 13 NDRDIODE_0 X16 13 42 NDRDIODE_0 X15 13 27 NDRDIODE_0 X14 42 27 NDRDIODE_1 X13 27 12 NDRDIODE_0 X12 12 42 NDRDIODE_1 X7 12 24 NDRDIODE_1 X6 12 24 NDRDIODE_1 X5 39 24 NDRDIODE_1 X4 11 24 NDRDIODE_0 .SUBCKT NDRDIODE_1 IN OUT
G1 IN OUT PWL(1) IN OUT -1V,-1n -.8V,-1n -.625V,-760n OV,On .625V,760n .8V,ln lV,ln SMOOTH=1 .ENDS

G1 IN OUT PWL(1) IN OUT -2V,-.8n -1V,-.8n -.75V,-.55n -.5V,-.21n OV,On .5V,.21n .75V,.55n 1V,.8n 2V,.8n SMOOTH=1 .ENDS
END

Nand Netlist Moletronics .OPTIONS RELTOL=.01 ITL4=10 SCALE=1 POST METHOD=Gear DCSTEP=10 .OPTIONS ACCT=0 INGOLD=1 NOMOD PROBE
.TRAM 10000n 100000n ROut1 1 0 1 .PRINT TRAM I(Rout1) C1 1 0 10f VInputB2 2 0 PWL(On,OV 20000n,OV 20001n,0.5V 30000n,0.5V 30001n,2V
40000n,2V
+ 40001n,0.5V 50000n,0.5V 50001n,0.5V 60000n,0.5V
+ 60001n,0.5V 70000n,0.5V 70001n,2V 80000n,2V
+ 80001n,0.5V 90000n,0.5V 90001n,0.5V 100000n,0.5V ) .PRINT TRAM 2 C2 2 0 10f C3 3 0 10f C4 4 0 10f C5 5 0 10f C6 6 0 10f C7 7 0 10f C8 8 0 10f C9 9 0 10f C10 10 0 10f C11 11 0 10f C12 12 0 10f C13 13 0 10f C14 14 0 10f VInputAl5 15 0 PWL(On,OV 20000n,OV 20001n,0.5V 30000n,0.5V
30001n,0.5V 40000n,0.5V
+ 40001n,0.5V 50000n,0.5V 50001n,2V 60000n,2V
+ 60001n,0.5V 70000n,0.5V 70001n,2V 80000n,2V
+ 80001n,0.5V 90000n,0.5V 90001n,0.5V 100000n,0.5V ) .PRTNT TRAM 15 C15 15 0 10f C16 16 0 10f C17 17 0 10f C18 18 0 10f C19 19 0 10f C20 20 0 10f C24 24 0 5f C27 27 0 5f C29 29 0 5f C32 32 0 5f C34 34 0 5f C35 35 0 5f C37 37 0 5f C39 39 0 5f C42 42 0 5f C44 44 0 5f C47 47 0 5f C49 49 0 5f C50 50 0 5f C52 52 0 5f C53 53 0 5f C54 54 0 5f C55 55 0 5f C56 56 0 5f C57 57 0 5f C58 58 0 5f C59 59 0 5f C60 60 0 5f C61 61 0 5f C62 62 0 5f C63 63 0 5f C64 64 0 5f C67 67 0 5f C68 68 0 5f C69 69 0 5f C70 70 0 5f C71 71 0 5f C72 72 0 5f C74 74 0 5f C75 75 0 5f C76 76 0 5f C77 77 0 5f C78 78 0 5f C79 79 0 5f C82 82 0 5f C83 83 0 5f C84 84 0 5f C85 85 0 5f C86 86 0 5f C87 87 0 5f C88 88 0 5f C89 89 0 5f C90 90 0 5f C92 92 0 5f C93 93 0 5f C94 94 0 5f C97 97 0 5f C99 99 0 5f C101 101 0 5f C102 102 0 5f C103 103 0 5f C104 104 0 5f C105 105 0 5f C106 106 0 5f C108 108 0 5f C109 109 0 5f C111 111 0 5f C112 112 0 5f 0113 113 0 5f C114 114 0 5f C11S 115 0 5f C116 116 0 5f C119 119 0 5f C120 120 0 5f C121 121 0 5f C122 122 0 5f C123 123 0 5f C124 124 0 5f C125 125 0 5f C128 128 0 5f C129 129-0 5f C130 130 0 5f C131 131 0 5f C132 132 0 5f C133 133 0 5f C134 134 0 5f C135 135 0 5f C136 136 0 5f C137 137 0 5f C138 138 0 5f C139 139 0 5f C142 142 0 5f C143 143 0 5f C144 144 0 5f C145 145 0 5f C146 146 0 5f C147 147 0 5f C149 149 0 5f C150 150 0 5f C151 151 0 5f C152 152 0 5f C153 153 0 5f C154 154 0 5f C157 157 0 5f C158 158 0 5f C159 159 0 5f C160 160 0 5f C161 161 0 5f C162 162 0 5f C163 163 0 5f C164 164 0 5f C165 165 0 5f C166 166 0 5f C167 167 0 5f C168 168 0 5f C169 169 0 5f C172 172 0 5f C173 173 0 5f C175 175 0 5f C176 176 0 5f 0178 178 0 5f C179 179 0 5f C180 180 0 5f C181 181 0 5f C182 182 0 5f C183 183 0 5f 0184 184 0 5f C186 186 0 5f C187 187 0 5f C188 188 0 5f C190 190 0 5f C191 191 0 5f C192 192 0 5f C193 193 0 5f C194 194 0 5f C195 195 0 5f C196 196 0 5f C197 197 0 5f C198 198 0 5f C199 199 0 5f C200 200 0 5f C202 202 0 5f C203 203 0 5f C204 204 0 5f C205 205 0 5f C206 206 0 5f C207 207 0 5f C208 208 0 5f C209 209 0 5f C210 210 0 5f C212 212 0 5f C214 214 0 5f C217 217 0 5f C219 219 0 5f C222 222 0 5f C224 224 0 5f C229 229 0 5f C231 231 0 5f C232 232 0 5f C234 234 0 5f C237 237 0 5f C239 239 0 5f C242 242 0 5f C244 244 0 5f X512 20 244 NDRDIODE_0 X511 242 20 NDRDIODE_0 X510 19 242 NDRDIODE_0 X508 239 19 NDRDIODE_0 X507 18 239 NDRDIODE_1 X506 237 18 NDRDIODE_1 X505 237 17 NDRDIODE_1 X503 234 17 NDRDIODE_1 X502 234 16 NDRDIODE_0 X501 16 232 NDRDTODE_1 X500 232 231 NDRDIODE_0 X499 5 229 NDRDIODE_0 X498 229 244 NDRDIODE_0 X497 20 229 NDRDIODE_0 X496 20 229 NDRDIODE_0 X490 239 19 NDRDIODE_0 X489 224 19 NDRDIODE_1 X488 224 239 NDRDIODE_1 X487 18 224 NDRDIODE_0 X486 18 239 NDRDIODE_0 X484 18 237 NDRDIODE_1 X483 222 18 NDRDIODE_0 X482 237 222 NDRDIODE_1 X481 222 17 NDRDIODE_0 X480 237 17 NDRDIODE_1 X475 219 17 NDRDIODE_0 X474 219 17 NDRDIODE_1 X473 219 234 NDRDIODE_1 X472 219 16 NDRDTODE_0 X471 16 219 NDRDIODE_0 X469 217 16 NDRDIODE_1 X468 217 16 NDRDIODE_0 X467 217 232 NDRDIODE_0 X466 217 231 NDRDIODE_0 X465 10 231 NDRDIODE_0 X464 10 217 NDRDIODE_0 X462 214 5 NDRDIODE_0 X461 214 5 NDRDIODE_1 X460 214 229 NDRDIODE_1 X459 214 20 NDRDIODE_1 X458 212 20 NDRDIODE_1 X457 212 19 NDRDIODE_1 X456 210 19 NDRDIODE_1 X455 19 210 NDRDIODE_0 X454 210 224 NDRDIODE_0 X453 210 209 NDRDIODE_1 X452 209 224 NDRDIODE_0 X451 209 208 NDRDIODE_0 X450 224 208 NDRDIODE_1 X449 18 208 NDRDIODE_0 X448 222 208 NDRDIODE_1 X447 207 208 NDRDIODE_1 X445 207 206 NDRDIODE~1 X444 206 222 NDRDIODE~_0 X443 206 17 NDRDIODE_0 X442 206 17 NDRDIODE_0 X441 206 205 NDRDIODE_0 X440 205 17 NDRDIODE_0 X439 204 205 NDRDIODE_1 X438 17 204 NDRDIODE_0 X437 204 219 NDRDIODE_0 X436 16 204 NDRDIODE_0 X435 203 204 NDRDIODE_0 X434 203 16 NDRDIODE_0 X433 203 202 NDRDIODE_1 X432 16 202 NDRDIODE_1 X431 217 202 NDRDIODE_0 X430 202 10 NDRDIODE_0 X428 10 202 NDRDIODE_1 X427 200 5 NDRDIODE_0 X426 199 200 NDRDIODE_1 X425 199 5 NDRDIODE_1 X424 199 214 NDRDIODE_1 X423 199 198 NDRDIODE_0 X422 197 198 NDRDIODE_1 X421 212 197 NDRDIODE_0 X420 196 197 NDRDIODE_0 X419 195 196 NDRDIODE_1 X418 195 210 NDRDIODE_1 X417 195 209 NDRDIODE_1 X416 194 195 NDRDIODE_1 X415 194 209 NDRDIODE_0 X414 194 193 NDRDIODE_0 X413 193 209 NDRDIODE_0 X411 207 193 NDRDIODE~_0 X409 207 192 NDRDIODE~O
X408 191 192 NDRDIODE_~0 X406 191 206 NDRDIODE~_1 X404 190 191 NDRDIODE'_1 X403 205 190 NDRDIODE_1 X402 188 203 NDRDIODE_1 X401 188 187 NDRDIODE_1 X399 202 187 NDRDIODE'_0 X397 186 10 NDRDIODE_0 X396 187 186 NDRDIODE_1 X395 200 4 NDRDIODE_0 X394 4 184 NDRDIODE_1 X393 184 200 NDRDIODE_0 X391 184 198 NDRDIODE_1 X389 198 183 NDRDTODE_0 X388 183 182 NDRDIODE_0 X387 182 198 NDRDIODE_0 X386 197 182 NDRDIODE_0 X385 182 196 NDRDIODE_1 X384 182 181 NDRDIODE_0 X383 196 181 NDRDIODE_1 X382 181 180 NDRDIODE_1 X381 196 180 NDRDIODE_1 X379 194 180 NDRDIODE~_0 X378 179 180 NDRDIODE_0 X377 179 194 NDRDIODE_1 X376 179 178 NDRDIODE_1 X375 178 194 NDRDIODE_1 X374 178 193 NDRDIODE_1 X373 192 178 NDRDIODE_0 X372 192 176 NDRDIODE_0 X370 190 176 NDRDIODE_~1 X369 175 176 NDRDTODE_0 X368 190 175 NDRDIODE_0 X366 173 172 NDRDIODE~1 X365 188 172 NDRDIODE_0 X364 172 187 NDRDIODE_0 X363 172 186 NDRDIODE_1 X362 186 9 NDRDIODE_0 X361 9 172 NDRDIODE_1 X359 169 4 NDRDIODE_0 X358 169 4 NDRDIODE_0 X357 184 169 NDRDTODE_1 X356 183 169 NDRDIODE_1 X355 168 169 NDRDTODE_1 X354 183 168 NDRDIODE_1 X353 167 168 NDRDIODE_1 X352 167 183 NDRDIODE_1 X351 167 182 NDRDIODE_1 X350 181 167 NDRDIODE_0 X349 167 166 NDRDIODE_0 X348 181 166 NDRDIODE_0 X347 165 166 NDRDIODE_1 X346 181 1&5 NDRDIODE_1 X344 179 165 NDRDIODE_'1 X343 165 164 NDRDIODE_0 X342 179 164 NDRDIODE_0 X341 164 163 NDRDIODE_0 X340 179 163 NDRDIODE_1 X339 178 163 NDRDIODE_1 X338 162 163 NDRDIODE_0 X337 162 161 NDRDIODE_0 X336 161 176 NDRDIODE_1 X335 161 175 NDRDIODE_0 X334 161 160 NDRDIODE_0 X333 175 160 NDRDIODE_0 X332 160 159 NDRDIODE_0 X331 159 175 NDRDIODE_0 X329 158 159 NDRDIODE_0 X328 158 173 NDRDIODE_0 X327 158 157 NDRDIODE_0 X326 157 173 NDRDIODE_0 X325 157 172 NDRDIODE_1 X324 157 9 NDRDIODE_0 X322 157 9 NDRDIODE_1 X320 3 154 NDRDIODE_0 X319 154 4 NDRDIODE_0 X318 154 169 NDRDIODE_1 X317 168 154 NDRDIODE_1 X316 153 154 NDRDIODE_0 X315 168 153 NDRDIODE_0 X314 152 153 NDRDIODE_0 X313 152 168 NDRDIODE_1 X312 152 167 NDRDIODE_0 X311 152 166 NDRDIODE_1 X310 152 151 NDRDIODE_0 X309 151 166 NDRDIODE_1 X308 150 151 NDRDIODE_0 X307 166 150 NDRDIODE_1 X306 165 150 NDRDIODE_0 X305 164 150 NDRDIODE_1 X304 150 149 NDRDIODE_1 X303 149 164 NDRDIODE_1 X302 147 162 NDRDIODE_1 X301 147 146 NDRDIODE_1 X300 162 146 NDRDIODE_0 X299 146 161 NDRDIODE_0 X298 146 160 NDRDIODE_0 X297 145 146 NDRDIODE_1 X296 145 160 NDRDIODE_0 X295 144 145 NDRDIODE_0 X294 160 144 NDRDIODE_1 X293 144 159 NDRDIODE_0 X292 144 158'NDRDIODE 1 X291 143 144 NDRDIODE_0 X290 158 143 NDRDIODE_0 X289 143 142 NDRDIODE_0 X288 158 142 NDRDIODE_1 X287 157 142 NDRDIODE_0 X286 9 142 NDRDIODE_0 X284 8 142 NDRDIODE_1 X282 139 3 NDRDIODE_1 X281 3 139 NDRDIODE_1 X280 139 154 NDRDIODE_0 X279 139 153 NDRDIODE_1 X278 139 138 NDRDIODE_1 X277 138 153 NDRDIODE_1 X276 137 138 NDRDIODE_1 X275 137 153 NDRDIODE_1 X274 152 137 NDRDIODE_0 X273 151 137 NDRDIODE_0 X272 136 137 NDRDIODE_1 X271 136 151 NDRDIODE_1 X270 136 135 NDRDIODE_0 X269 151 135 NDRDIODE_1 X268 150 135 NDRDIODE_1 X267 149 135 NDRDIODE_1 X266 135 134 NDRDIODE_0 X264 134 133 NDRDIODE_0 X263 133 149 NDRDIODE_0 X262 133 147 NDRDIODE_0 X261 132 133 NDRDIODE_1 X260 147 132 NDRDIODE_1 X259 131 132 NDRDIODE_1 X258 147 131 NDRDIODE_0 X257 146 131 NDRDIODE_1 X256 131 145 NDRDIODE_0 X255 131 130 NDRDIODE_0 X254 145 130 NDRDIODE_0 X253 130 129 NDRDIODE_1 X252 129 145 NDRDIODE_0 X251 129 144 NDRDIODE_1 X250 143 129 NDRDIODE_0 X249 128 129 NDRDIODE_1 X248 143 128 NDRDIODE_1 X246 3 125 NDRDIODE_1 X245 124 125 NDRDIODE_1 X244 3 124 NDRDIODE_1 X243 124 139 NDRDIODE_1 X242 138 124 NDRDIODE_0 X241 124 123 NDRDIODE_0 X240 138 123 NDRDIODE_0 X239 122 123 NDRDIODE_1 X238 122 138 NDRDIODE_1 X237 122 137 NDRDIODE_0 X236 136 122 NDRDIODE_1 X235 121 122 NDRDIODE_1 X233 121 120 NDRDIODE~0 X232 136 120 NDRDIODE_1 X231 120 135 NDRDIODE_1 X230 120 134 NDRDIODE_0 X229 120 119 NDRDIODE_0 X227 115 116 NDRDIODE'_1 X226 115 130 NDRDIODE_0 X225 114 115 NDRDIODE_0 X224 114 130 NDRDIODE_0 X223 129 114 NDRDIODE_0 X222 114 128 NDRDIODE_1 X221 113 114 NDRDIODE_1 X220 113 128 NDRDIODE_0 X219 112 113 NDRDIODE_0 X218 112 128 NDRDIODE_0 X217 112 8 NDRDIODE_1 X216 111 8 NDRDIODE_1 X215 112 111 NDRDIODE_0 X214 2 125 NDRDIODE_1 X213 2 109 NDRDIODE_0 X212 125 109 NDRDIODE_1 X211 109 124 NDRDIODE_0 X210 109 123 NDRDIODE_1 X209 108 109 NDRDIODE_1 X208 123 108 NDRDIODE_0 X207 121 106 NDRDIODE_0 X206 106 105 NDRDIODE_1 X205 121 105 NDRDIODE_1 X204 120 105 NDRDIODE_0 X202 105 104 NDRDIODE_0 X201 119 104 NDRDIODE_0 X200 104 103 NDRDIODE_1 X199 103 119 NDRDIODE_1 X198 102 103 NDRDIODE_1 X197 101 102 NDRDIODE_0 X196 101 116 NDRDIODE_1 X195 115 101 NDRDIODE_0 X194 99 115 NDRDIODE_1 X193 114 99 NDRDIODE_1 X192 113 99 NDRDIODE_0 X191 97 113 NDRDIODE_1 X190 112 97 NDRDIODE_2 X189 111 97 NDRDIODE_0 X188 111 7 NDRDIODE_1 X187 97 7 NDRDIODE_1 X185 2 94 NDRDIODE_1 X184 2 94 NDRDIODE_0 X183 94 109 NDRDIODE_1 X182 94 108 NDRDIODE_1 X181 93 94 NDRDIODE_0 X180 93108 NDRDIODE_1 X179 93 92 NDRDIODE_0 X178 108 92 NDRDIODE_1 X177 106 92 NDRDIODE_0 X176 106 90 NDRDIODE_0 X175 105 90 NDRDIODE_1 X174 90 104 NDRDIODE_0 x173 89 90 NDRDIODE_0 X172 104 89 NDRDIODE_0 X171 89 88 NDRDIODE_0 X170 88 104 NDRDIODE_0 X169 103 88 NDRDIQDE_0 X168 88 102 NDRDIODE_0 X167 87 88 NDRDIODE_0 X166 87 102 NDRDIODE_0 X165 86 87 NDRDIODE_0 X164 86 102 NDRDIODE_0 X163 101 86 NDRDIODE_1 X162 86 85 NDRDIODE_0 X161 84 85 NDRDIODE_1 X160 84 99 NDRDIODE_0 X159 84 83 NDRDIODE_1 X158 83 82 NDRDIODE_1 X157 82 97 NDRDIODE_1 X156 82 7 NDRDIODE_0 X154 7 82 NDRDIODE_0 X152 1 79 NDRDIQDE_1 X151 2 79 NDRDIODE_1 X150 94 79 NDRDIODE_1 X149 93 79 NDRDIODE_0 X148 78 79 NDRDIODE_0 X147 78 93 NDRDIODE_1 X146 78 77 NDRDIODE_0 X145 77 93 NDRDIODE_0 X144 92 77 NDRDIODE_1 X143 77 76 NDRDIODE_0 X142 76 75 NDRDIODE_0 X141 90 75 NDRDIODE_0 X140 75 89 NDRDTODE_0 X138 74 89 NDRDIODE_0 X137 87 72 NDRDIODE_1 X136 72 71 NDRDIODE_1 X135 87 71 NDRDIODE_0 X134 71 86 NDRDIODE_1 X133 71 85 NDRDIODE_0 X132 70 71 NDRDIODE_0 X131 85 70 NDRDIODE_1 X130 70 69 NDRDIODE_1 X129 85 69 NDRDIODE_0 X128 69 84 NDRDIODE_0 X127 69 83 NDRDIODE_1 X126 68 69 NDRDIODE_0 X125 83 68 NDRDIODE_1 X124 68 67 NDRDIODE_0 _ X123 83 67 NDRDIODE_0 X122 67 82 NDRDIODE_0 X121 7 67 NDRDIODE_0 X119 6 67 NDRDIODE_1 X117 64 1 NDRDIODE_1 X116 64 1 NDRDIODE_1 X115 79 64 NDRDIODE_1 X114 64 78 NDRDIODE_1 X113 63 64 NDRDIODE_1 X112 78 63 NDRDIODE_0 X111 63 62 NDRD20DE_0 X110 78 62 NDRDIODE_1 X109 62 77 NDRDIODE_1 X108 62 76 NDRDIODE_0 X107 62 61 NDRDIODE_0 X106 76 61 NDRDIODE_1 X105 60 61 NDRDIODE_0 X104 76 60 NDRDIODE_1 X103 60 75 NDRDTODE_0 X102 74 60 NDRDIODE_0 X101 59 60 NDRDIODE_0 X100 59 74 NDRDIODE_0 X99 59 58 NDRDIODE_0 X97 72 58 NDRDIODE_1 X96 57 58 NDRDIODE_1 X95 72 57 NDRDIODE_1 X94 56 57 NDRDIODE_0 X93 72 56 NDRDIODE_1 X92 56 71 NDRDIODE_0 X91 56 70 NDRDIODE_1 X90 56 55 NDRDIODE_1 X89 55 70 NDRDIODE_1 X88 54 55 NDRDIODE_1 X87 70 54 NDRDIODE_0 X86 69 54 NDRDIODE_0 X85 54 68 NDRDIODE_1 X84 54 53 NDRDIODE_0 X83 68 53 NDRDIODE_1 X82 52 53 NDRDIODE_1 X81 68 52 NDRDIODE_0 X80 67 52 NDRDIODE_1 X79 52 6 NDRDIODE_1 X77 6 52 NDRDIODE_0 X76 1 50 NDRDIODE_1 X73 64 49 NDRDIODE_0 X72 63 49 NDRDIODE_1 X71 15 49 NDRDIODE_0 X70 15 63 NDRDIODE_1 X69 15 47 NDRDIODE_0 X68 63 47 NDRDIODE_0 X67 62 47 NDRDIODE_1 X66 47 61 NDRDIODE_0 X65 47 14 NDRDIODE_0 X64 61 14 NDRDIODE_0 X61 60 14 NDRDIODE~0 X60 14 59 NDRDIODE_1 X59 14 44 NDRDIODE_1 X58 44 59 NDRDIODE_1 X57 13 44 NDRDIODE_1 X56 13 59 NDRDIODE_0 X54 13 57 NDRDIODE'0 X53 13 42 NDRDIODE'_1 X52 57 42 NDRDIODE_1 X51 12 42 NDRDIODE_0 X50 57 12 NDRDIODE_1 X49 12 56 NDRDIODE_1 X48 55 12 NDRDIODE_1 X46 12 55 NDRDIODE_1 X45 12 39 NDRDIODE_1 X44 55 39 NDRDIODE_0 X42 53 39 NDRDIODE~1 X41 11 39 NDRDIODE~_1 X40 11 53 NDRDIODE_1 X39 37 11 NDRDIODE_1 X38 53 37 NDRDIODE_0 X37 37 52 NDRDIODE_0 X36 6 37 NDRDIODE_1 X34 35 34 NDRDIODE~O
X33 50 34 NDRDIODE_1 X32 34 49 NDRDIODE_0 X31 15 34 NDRDIODE_1 X30 32 15 NDRDIODE_1 X29 32 47 NDRDIODE_0 X28 32 14 NDRDIODE_1 X22 44 14 NDRDIODE~_0 X20 29 44 NDRDIODE~_0 X19 13 29 NDRDIODE_0 X18 44 13 NDRDIODE_0 X16 13 42 NDRDIODE_0 X15 13 27 NDRDIODE_0 X14 42 27 NDRDIODE_1 X13 27 12 NDRDIODE_1 X12 12 42 NDRDIODE_0 X6 12 24 NDRDIODE_0 .SUBCKT NDRDIODE_1 IN OUT
G1 IN OUT PWL(1) IN OUT -1V,-1n -.8V,-1n -.625V,-760n OV,On .625V,760n .8V,ln lV,ln SMOOTH=1 .ENDS
.SUBCKT NDRDIODE-0 IN OUT
G1 IN OUT PWL(1) TN OUT -2V,-.8n -1V,-.8n -.75V,-.55n -.5V,-.21n OV,On .5V,.21n .75V,.55n 1V,.8n 2V,.8n SMOOTH=2 .ENDS
END

Inverse Half Adder Netlist Moletronics .OPTIONS RELTOL=.01 ITL4=10 SCALE=1 POST METHOD=Gear DCSTEP=10 .OPTIONS ACCT=0 INGOLD=1 NOMOD PROBE
.TRAM 10000n 100000n ROut1 1 0 1 .PRTNT TRAN I(Rout1) C1 1 0 10f VInputB2 2 0 PWL(On,OV 20000n,OV 20001n,0.5V 30000n,0.5V 30001n,2V
40000n,2V
+ 40001n,0.5V 50000n,0.5V 50001n,0.5V 60000n,0.5V
+ 60001n,0.5V 70000n,0.5V 70001n,2V 80000n,2V
+ 80001n,0.5V 90000n,0.5V 90001n,0.5V 100000n,0.5V ) .PRINT TRAM 2 C2 2 0 10f C3 3 0 10f C4 4 0 10f C5 5 0 10f VInputB6 6 0 PWL(On,OV 20000n,OV 20001n,0.5V 30000n,0.5V 30001n,2V
40000n,2V
+ 40001n,0.5V 50000n,0.5V 50001n,0.5V 60000n,0.5V
+ 60001n,0.5V 70000n,0.5V 70001n,2V 80000n,2V
+ 80001n,0.5V 90000n,0.5V 90001n,0.5V 100000n,0.5V ) .PRINT TRAM 6 C6 6 0 10f C7 7 0 10f ROut2 8 0 1 .PRINT TRAM I(Rout2) C8 8 0 10f C9 9 0 10f VInputAlO 10 0 PWL(On,OV 20000n,OV 20001n,0.5V 30000n,0.5V
30001n,0.5V 40000n,0.5V
+ 40001n,0.5V 50000n,0.5V 50001n,2V 60000n,2V
+ 60001n,0.5V 70000n,0.5V 70001n,2V 80000n,2V
+ 80001n,0.5V 90000n,0.5V 90001n,0.5V 100000n,0.5V ) .PRINT TRAM 10 C10 10 0 10f VDInputAll 11 0 PWL(On,OV 20000n,OV 20001n,2V 30000n,2V 30001n,2V
40000n,2V 40001n,2V 50000n,2V 50001n,0.5V 60000n,0.5V 60001n,2V
70000n,2V 70001n,0.5V 80000n,0.5V 80001n,2V 90000n,2V 90001n,2V
100000n,2V ) .PRINT TRAM 11 C11 11 0 10f C12 12 0 10f C13 13 0 10f C14 14 0 10f VInputAl5 15 0 PWL(On,OV 20000n,OV 20001n,0.5V 30000n,0.5V
30001n,0.5V 40000n,0.5V
+ 40001n,0.5V 50000n,0.5V 50001n,2V 60000n,2V
+ 60001n,0.5V 70000n,0.5V 70001n,2V 80000n,2V
+ 80001n,0.5V 90000n,0.5V 90001n,0.5V 100000n,0.5V ) .PRINT TRAM 15 C15 15 0 10f VDInputBl6 16 0 PWL(On,OV 20000n,OV 20001n,2V 30000n,2V 30001n,0.5V
40000n,0.5V 40001n,2V 50000n,2V 50001n,2V 60000n,2V 60001n,2V
70000n,2V 70001n,0.5V 80000n,0.5V 80001n,2V 90000n,2V 90001n,2V
100000n,2V ) .PRINT TRAM 16 C16 16 0 10f C17 17 0 10f C18 18 0 10f C19 19 0 10f C20 20 0 10f C24 24 0 5f C27 27 0 5f C29 29 0 5f C32 32 0 5f C34 34 0 5f C35 35 0 5f C37 37 0 5f C39 39 0 5f C42 42 0 5f C44 44 0 5f C47 47 0 5f C49 49 0 5f C50 50 0 5f C52 52 0 5f C53 53 0 5f C54 54 0 5f C55 55 0 5f C56 56 0 5f C57 57 0 5f C58 58 0 5f C59 59 0 5f C60 60 0 5f C61 61 0 5f C62 62 0 5f C63 63 0 5f C64 64 0 5f C67 67 0 5f C68 68 0 5f C69 69 0 5f C70 70 0 5f C71 71 0 5f C72 72 0 5f C74 74 0 5f C75 75 0 5f C76 76 0 5f C77 77 0 5f C78 78 0 5f C79 79 0 5f C82 82 0 5f C83 83 0 5f C84 84 0 5f C85 85 0 5f C86 86 0 5f C87 87 0 5f C88 88 0 5f C89 89 0 5f C90 90 0 5f C92 92 0 5f C93 93 0 5f C94 94 0 5f C97 97 0 5f C99 99 0 5f C101 101 0 5f C102 102 0 5f C103 103 0 5f C104 104 0 5f C105 105 0 5f C106 106 0 5f C108 108 0 5f C109 109 0 5f C111 111 0 5f C112 112 0 5f C113 113 0 5f C114 114 0 5f C115 115 0 5f C116 116 0 5f C119 119 0 5f C120 120 0 5f C121 121 0 5f C122 122 0 5f C123 123 0 5f C124 124 0 5f C125 125 0 5f C128 128 0 5f C129 129 0 5f C130 130 0 5f C131 131 0 5f C132 132 0 5f C133 133 0 5f C134 134 0 5f C135 135 0 5f C136 136 0 5f C137 137 0 5f C138 138 0 5f C139 139 0 5f C142 142 0 5f C143 143 0 5f C144 144 0 5f C145 145 0 5f C146 146 0 5f C147 147 0 5f C149 149 0 5f C150 150 0 5f C151 151 0 5f C152 152 0 5f 0153 153 0 5f C154 154 0 5f C157 157 0 5f C158 158 0 5f C159 159 0 5f C160 160 0 5f C161 161 0 5f C162 162 0 5f C163 163 0 5f C164 164 0 5f C165 165 0 5f C166 166 0 5f C167 167 0 5f C168 168 0 5f C169 169 0 5f C172 172 0 5f C173 173 0 5f C175 175 0 5f C176 176 0 5f C178 178 0 5f C179 179 0 5f C180 180 0 5f C181 181 0 5f C182 182 0 5f C183 183 0 5f C184 184 0 5f C186 186 0 5f C187 187 0 5f C188 188 0 5f C190 190 0 5f C191 191 0 5f C192 192 0 5f 0193 193 0 5f C194 194 0 5f C195 195 0 5f 0196 196 0 5f C197 197 0 5f C198 198 0 5f C199 199 0 5f C200 200 0 5f C202 202 0 5f C203 203 0 5f 0204 204 0 5f C205 205 0 5f C206 206 0 5f C207 207 0 5f C208 208 0 5f C209 209 0 5f C210 210 0 5f C212 212 0 5f 0214 214 0 5f C217 217 0 5f 0219 219 0 5f C222 222 0 5f C224 224 0 5f C229 229 0 5f C231 231 0 5f C232 232 0 5f 0234 234 0 5f C237 237 0 5f C239 239 0 5f C242 242 0 5f C244 244 0 5f X512 20 244 NDRDIODE_0 X511 242 20 NDRDIODE_0 X510 19 242 NDRDIODE_1 X508 239 19 NDRDIODE_0 X507 18 239 NDRDIODE_0 X506 237 18 NDRDIODE_0 X503 234 17 NDRDIODE~_0 X502 234 16 NDRDIODE_0 X501 16 232 NDRDIODE_1 X500 232 231 NDRDIODE_1 X499 5 229 NDRDIODE_0 X498 229 244 NDRDIODE_0 X497 20 229 NDRDIODE_0 X496 20 229 NDRDIODE_0 X490 239 19 NDRDIODE_0 X489 224 19 NDRDIODE_1 X488 224 239 NDRDIODE_0 X487 18 224 NDRDIODE_0 X486 18 239 NDRDIODE_0 X483 222 18 NDRDIODE_1 X482 237 222 NDRDIODE_0 X481 222 17 NDRDIODE_0 X480 237 17 NDRDIODE_0 X475 219 17 NDRDIODE_0 X474 219 17 NDRDIODE_1 X473 219 234 NDRDIODE_0 X472 219 16 NDRDIODE_0 X469 217 16 NDRDIODE_0 X468 217 16 NDRDIODE_0 X467 217 232 NDRDTODE_0 X466 217 231 NDRDIODE_0 X465 10 231 NDRDIODE_0 X464 10 217 NDRDIODE_0 X462 214 5 NDRDIODE_1 X461 214 5 NDRDIODE_0 X460 214 229 NDRDIODE_0 X459 214 20 NDRDIODE_0 X458 212 20 NDRDIODE_0 X457 212 19 NDRDIODE_1 X456 210 19 NDRDIODE_1 X455 19 210 NDRDIODE_1 X454 210 224 NDRDIODE_1 X453 210 209 NDRDIODE_1 X452 209 224 NDRDIODE_1 X451 209 208 NDRDIODE_1 X450 224 208 NDRDIODE_1 X449 18 208 NDRDIODE_0 X448 222 208 NDRDIODE_0 X447 207 208 NDRDIODE_0 X446 222 207 NDRDIODE_0 X444 206 222 NDRDIODE_0 X443 206 17 NDRDIODE_1 X442 206 17 NDRDIODE_1 X441 206 205 NDRDIODE_1 X440 205 17 NDRDIODE_0 X439 204 205 NDRDIODE_1 X438 17 204 NDRDIODE_1 X437 204 219 NDRDIODE_1 X436 16 204 NDRDIODE_0 X435 203 204 NDRDIODE_0 X434 203 16 NDRDIODE_1 X433 203 202 NDRDIODE_1 X432 16 202 NDRDIODE_1 X431 217 202 NDRDIODE_1 X430 202 10 NDRDIODE_1.
X428 10 202 NDRDIODE_1 X427 200 5 NDRDIODE_1 X425 199 5 NDRDIODE_1!
X424 199 214 NDRDIODE_0 X423 199 198 NDRDIODE_1 X422 197 198 NDRDIODE_1 X420 196 197 NDRDIODE_0 X419 195 196 NDRDIODE_0 X418 195 210 NDRDIODE_0 X417 195 209 NDRDIODE_0 X416 194 195 NDRDTODE_0 X415 194 209 NDRDIODE_1 X414 194 193 NDRDIODE_0 X413 193 209 NDRDIODE_0 X412 193 208 NDRDIODE_0 X411 207 193 NDRDIODE_0 X410 193 192 NDRDIODE_0 X408 191 192 NDRDIODE~_0 X407 207 191 NDRDIODE_0 X406 191 206 NDRDIODE_0 X405 205 191 NDRDIODE_0 X404 190 191 NDRDIODE_0 X403 205 190 NDRDTODE_1 X402 188 203 NDRDIODE_0 X401 188 187 NDRDIODE_1 X400 187 203 NDRDTODE_0 X399 202 187 NDRDIODE_1 X39810 187 NDRDIODE_0 X397 186 10 NDRDIODE_1 X396 187 186 NDRDIODE_1 X395 200 4 NDRDIODE_1 X394 4 184 NDRDIODE_1 X393 184 200 NDRDIODE_1 X392 184 199 NDRDIODE_0 X391 184 198 NDRDIODE_1 X390 183 184 NDRDIODE_1 X389 198 183 NDRDIODE_1 X388 183 182 NDRDIODE_1 X387 182 198 NDRDIODE_0 X386 197 182 NDRDIODE_0 X385 182 196 NDRDIODE_1 X384 182 181 NDRDIODE_0 X383 196 181 NDRDIODE_0 X382 181 180 NDRDIODE_1 X381 196 180 NDRDIODE_0 X380 195 180 NDRDIODE_0 X379 194 180 NDRDIODE_1 X378 179 180 NDRDIODE_0 X377 179 194 NDRDIODE_1 X376 179 178 NDRDIODE_0 X375 178 194 NDRDIODE_1 X374 178 193 NDRDTODE_1 X373 192 178 NDRDTODE_0 X372 192 176 NDRDIODE_0 X371 191 176 NDRDIODE_1 X370 190 176 NDRDIODE_0 X369 175 176 NDRDIODE_0 X368 190 175 NDRDIODE_0 X367 188 173 NDRDIODE_1 X366 173 172 NDRDTODE_0 X365 188 172 NDRDIODE_1 X364 172 187 NDRDIODE_1 X363 172 186 NDRDIODE_0 X362 186 9 NDRDIODE_0 X361 9 172 NDRDIODE_0 X359 169 4 NDRDIODE_1 X358 169 4 NDRDIODE_0 X357 184 169 NDRDTODE_0 X356 183 169 NDRDIODE_1 X355 168 169 NDRDIODE_0 X353 167 168 NDRDIODE_1 X352 167 183 NDRDIODE_1 X351 167 182 NDRDIODE_0 X350 181 167 NDRDIODE_0 X349 167 166 NDRDIODE_0 X348 181 166 NDRDIODE_1 X347 165 166 NDRDIODE_1 X346 181 165 NDRDIODE_1 X345 165 180 NDRDIODE_0 X344 179 165 NDRDIODE_0 X343 165 164 NDRDIODE_0 X342 179 164 NDRDIODE_0 X341 164 163 NDRDIODE_1 X340 179 163 NDRDIODE_0 X339 178 163 NDRDIODE_0 X338 162 163 NDRDIODE_0 X337 162 161 NDRDIODE_1 X336 161 176 NDRDIODE_1 X335 161 175 NDRDIODE_0 X334 161 160 NDRDIODE_1 X333 175 160 NDRDIODE_1 X332 160 159 NDRDIODE_1 X331 159 175 NDRDIODE_1 X330 173 159 NDRDIODE_0 X329 158 159 NDRDIODE_0 X328 158 173 NDRDIODE_1 X327 158 157 NDRDIODE_1 X326 157 173 NDRDIODE_1 X325 157 172 NDRDIODE_1 X324 157 9 NDRDIODE_0 X322 157 9 NDRDIODE_0 X320 3 154 NDRDIODE_1 X319 154 4 NDRDIODE_0 X318 154 169 NDRDIODE_0 X317 168 154 NDRDTODE_0 X316 153 154 NDRDIODE_0 X315 168 153 NDRDIODE_0 X314 152 153 NDRDIODE_1 X313 152 168 NDRDIODE_1 X312 152 167 NDRDIODE_1 X311 152 166 NDRDIODE_0 X310 152 151 NDRDIODE_1 X309 151 166 NDRDIODE_1 X308 150 151 NDRDIODE_0 X307 166 150 NDRDIODE_1 X306 165 150 NDRDIODE_1 X305 164 150 NDRDIODE_1 X304 150 149 NDRDIODE_0 X303 149 164 NDRDIODE_1 X302 147 162 NDRDIODE_0 X301 147 146 NDRDIODE_0 X300 162 146 NDRDTODE_0 X299 146 161 NDRDIODE_1 X298 146 160 NDRDIODE_0 X297 145 146 NDRDIODE_0 X296 145 160 NDRDIODE_0 X295 144 145 NDRDIODE_0 X294 160 144 NDRDIODE_0 X293 144 159 NDRDIODE_1 X292 144 158 NDRDIODE_1 X290 158 143 NDRDIODE_0 X289 143 142 NDRDIODE_0 X288 158 142 NDRDIODE_1 X287 157 142 NDRDIODE_1 X286 9 142 NDRDIODE_1 X284 8 142 NDRDIODE_1 X282 1393 NDRDIODE_1 X281 3 139 NDRDIODE_1 X280 139 154 NDRDIODE_1 X279 139 153 NDRDTODE_0 X278 139 138 NDRDIODE_1 X277 138 153 NDRDIODE_0 X276 137 138 NDRDIODE_1 X275 137 153 NDRDIODE_0 X274 152 137 NDRDIODE_0 X273 151 137 NDRDIODE_0 X272 136 137 NDRDIODE_1 X271 136 151 NDRDIODE_0 X270 136 135 NDRbIODE_1 X269 151 135 NDRDIODE_1 X268 150 135 NDRDIODE_0 X267 149 135 NDRDIODE_0 X266 135 134 NDRDIODE_0 X265 134 149 NDRDIODE_1 X263 133 149 NDRDIODE'_1 X262 133 147 NDRDIODE_0 X261 132 133 NDRDIODE_1 X260 147 132 NDRDIODE_0 X259 131 132 NDRDIODE_0 X258 147 131 NDRDIODE_1 X257 146 131 NDRDIODE_0 X256 131 145 NDRDIODE_0 X255 131 130 NDRDIODE_1 X254 145 130 NDRDIODE_0 X253 130 129 NDRDIODE_1 X252 129 145 NDRDIODE_0 X251 129 144 NDRDIODE_0 X250 143 129 NDRDIODE_0 X249 128 129 NDRDIODE_1 X248 143 128 NDRDIODE_0 X246 3 125 NDRDIODE_1 X245 124 125 NDRDIODE_1 X244 3 124 NDRDIODE_0 X243 124 139 NDRDIODE_0 X242 138 124 NDRDTODE_0 X240 138 123 NDRDIODE_~1 X239 122 123 NDRDIODE_0 X238 122 138 NDRDIODE_0 X237 122 137 NDRDIODE_0 X236 136 122 NDRDIODE_0 X235 121 122 NDRDIODE_0 X234 121 136 NDRDIODE_1 X233 121 120 NDRDIODE_0 X232 136 120 NDRDIODE_0 X231 120 135 NDRDIODE_1 X230 120 134 NDRDIODE_1 X229 120 119 NDRDIODE_0 X228 134 119 NDRDIODE_0 X226 115 130 NDRDIODE_1 X225 114 115 NDRDIODE_1 X224 114 130 NDRDIODE_0 X223 129 114 NDRDIODE_0 X222 114 128 NDRDIODE_1 X221 113 114 NDRDIODE_1 X220 113 128 NDRDIODE_1 X219 112 113 NDRDIODE_0 X218 112 128 NDRDIODE_1 X217 112 8 NDRDIODE_1 X216 111 8 NDRDIODE_1 X215 112 111 NDRDIODE_0 X214 2 125 NDRDIODE_0 X213 2 109 NDRDIODE_1 X212 125 109 NDRDIODE_1 X211 109 124 NDRDIODE_1 X210 109 123 NDRDIODE_1 X209 108 109 NDRDIODE_0 X208 123 108 NDRDIODE_1 X207 121 106 NDRDIODE_1 X206 106 105 NDRDIODE_1 X205 121 105 NDRDIODE_0 X204 120 105 NDRDIODE_0 X203 119 105 NDRDIODE_1 X202 105 104 NDRDIODE_1 X201 119 104 NDRDIODE_1 X200 104 103 NDRDIODE_0 X199 103 119 NDRDIODE_1 X198 102 103 NDRDIODE_0 X197 101 102 NDRDIODE_0 X196 101 116 NDRDIODE_0 X195 115 101 NDRDIODE_1 X194 99 115 NDRDIODE_0 X193 114 99 NDRDIODE_0 X192 113 99 NDRDIODE_1 X191 97 113 NDRDIODE_0 X190 112 97 NDRDIODE_1 X189 111 97 NDRDIODE_0 X188 111 7 NDRDIODE_0 X187 97 7 NDRDIODE_0 X185 2 94 NDRDIODE_1 X184 2 94 NDRDIODE_0 X183 94 109 NDRDIODE_1 X182 94 108 NDRDIODE_1 X181 93 94 NDRD20DE_1 X180 93 108 NDRDIODE_1 X179 93 92 NDRDIODE_1 X178 108 92 NDRDIODE_0 X177 106 92 NDRDIODE_1 X176 106 90 NDRDIODE_1 X175 105 90 NDRDIODE_0 X174 90 104 NDRDIODE_0 X173 89 90 NDRDIODE_1 X172 104 89 NDRDTODE_0 X171 89 88 NDRDIODE_0 X170 88 104 NDRDIODE_0 X169 103 88 NDRDIODE_0 X168 88 102 NDRDIODE_0 X167 87 88 NDRDIODE_1 X166 87 102 NDRDIODE_1 X164 86 102 NDRDIODE_1 X163 101 86 NDRDIODE_1 X162 86 85 NDRDIODE_1 X161 84 85 NDRDIODE_0 X160 84 99 NDRDIODE_0 X159 84 83 NDRDIODE_0 X158 83 82 NDRDIODE_1 X157 82 97 NDRDIODE_1 X154 7 82 NDRDIODE~1 X152 1 79 NDRDIODE_1 X151 2 79 NDRDIODE_0 X150 94 79 NDRDIODE_1 X149 93 79 NDRDIODE_1 X148 78 79 NDRDIODE_1 X147 78 93 NDRDIODE_1 X146 78 77 NDRDIODE_1 X145 77 93 NDRDIODE_0 X144 92 77 NDRDIODE_0 X143 77 76 NDRDIODE_1 X142 76 75 NDRDIODE_0 X141 90 75 NDRDIODE_1 X140 75 89 NDRDIODE_1 X139 74 75 NDRDIODE_1 X137 87 72 NDRDIODE~0 X136 72 71 NDRDIODE_0 X135 87 71 NDRDIODE_1 X134 71 86 NDRDIODE_1 X133 71 85 NDRDIODE_0 X132 70 71 NDRDIODE_0 X131 85 70 NDRDIODE_1 X130 70 69 NDRDIODE_1 X129 85 69 NDRDIODE_1 X128 69 84 NDRDIODE_1 X127 69 83 NDRDIODE_1 X126 68 69 NDRDIODE_1 X125 83 68 NDRDIODE_0 X124 68 67 NDRDIODE_0 X123 83 67 NDRDIODE_0 X122 67 82 NDRDIODE_0 X121 7 67 NDRDIODE_1 X119 6 67 NDRDIODE_0 X117 64 1 NDRDIODE_1 X116 64 1 NDRDIODE_0 X115 79 64 NDRDIODE_0 X114 64 78 NDRDIODE_0 X113 63 64 NDRDIODE_0 X112 78 63 NDRDIODE_0 X111 63 62 NDRDIODE_0 X110 78 62 NDRDIODE_0 X109 62 77 NDRDIODE_0 X108 62 76 NDRDIODE_0 X107 62 61 NDRDIODE_1 X106 76 61 NDRDIODE_1 X105 60 61 NDRDIODE_0 X104 76 60 NDRDIODE_0 X103 60 75 NDRDIODE_1 X102 74 60 NDRDIODE_0 X101 59 60 NDRDIODE_0 X99 59 58 NDRDIODE_1 X98 58 74 NDRDIODE_1 X97 72 58 NDRDIODE_0 X96 57 58 NDRDIODE_0 X95 72 57 NDRDIODE_0 X94 56 57 NDRDIODE_1 X93 72 56 NDRDIODE_1 X92 56 71 NDRDIODE_0 X91 '56 70 NDRDIODE_1 X90 56 55 NDRDIODE_1 X89 55 70 NDRDIODE_1 X88 54 55 NDRDIODE_0 X87 70 54 NDRDIODE_0 X86 69 54 NDRDIODE_1 X85 54 68 NDRDIODE_0 X84 54 53 NDRDIODE_0 X83 68 53 NDRDIODE_1 X82 52 53 NDRDIODE_1 X81 68 52 NDRDIODE_0 X80 67 52 NDRDIODE_1 X79 52 6 NDRDIODE_1 X77 6 52 NDRDIODE_1 X76 1 50 NDRDIODE_0 X75 50 49 NDRDIODE_0 X74 49 1 NDRDIODE_1 X73 64 49 NDRDIODE_0 X72 63 49 NDRDIODE_1 X71 15 49 NDRDTODE_0 X70 15 63 NDRDIODE_0 X69 15 47 NDRDIODE_1 X68 63 47 NDRDIODE_0 X67 62 47 NDRDIODE_1 X66 47 61 NDRDTODE_0 X65 47 14 NDRDIODE_0 X64 61 14 NDRDIODE_1 X62 14 61 NDRDTODE_1 X61 60 14 NDRDIODE_0 X60 14 59 NDRDIODE_1 X59 14 44 NDRDIODE_1 X58 44 59 NDRDIODE_1 X57 13 44 NDRDIODE_1 X56 13 59 NDRDIODE_0 X55 13 58 NDRDIODE_0 X54 13 57 NDRDIODE_0 X53 13 42 NDRDIODE_0 X52 57 42 NDRDTODE_0 X51 12 42 NDRDIODE_1 X50 57 12 NDRDIODE_1 X49 12 56 NDRDIODE_0 X48 55 12 NDRDIODE_0 X46 12 55 NDRDIODE_0 X45 12 39 NDRDIODE_1 X44 55 39 NDRDIODE_0 X43 39 54 NDRDIODE_1 X42 53 39 NDRDIODE_1 X41 11 39 NDRDIODE_1 X40 11 53 NDRDIODE_0 X39 37 11 NDRDIODE_0 X38 53 37 NDRDIODE_1 X37 37 52 NDRDTODE_0 X35 35 50 NDRDIODE_0 X33 50 34 NDRDIODE_1 X32 34 49 NDRDIODE_1 X31 15 34 NDRDIODE_1 X30 32 15 NDRDTODE_1 X29 32 47 NDRDIODE_0 X28 32 14 NDRDIODE_0 X27 32 14 NDRDIODE_1 X22 44 14 NDRDIODE_1 X21 14 29 NDRDIODE_0 X20 29 44 NDRDIODE_0 X19 13 29 NDRDIODE_0 X18 44 13 NDRDIODE_0 X16 13 42 NDRDIODE_0 X15 13 27 NDRDIODE_1 X14 42 27 NDRDIODE_0 X13 27 12 NDRDIODE_0 X12 12 42 NDRDIODE_0 X7 12 24 NDRDIODE_0 X6 12 24 NDRDIODE_0 X5 39 24 NDRDIODE_1 X4 11 24 NDRDIODE_1 .SUBCKT NDRDIODE_1 IN OUT
G1 IN OUT PWL(1) IN OUT -1V,-1n -.8V,-1n -.625V,-760n OV,On .625V,760n .8V,ln lV,ln SMOOTH=1 .ENDS
.SUBCKT NDRDIODE_0 IN OUT
G1 IN OUT PWL(1) IN OUT -2V,-.8n -1V,-.8n -.75V,-.55n -.5V,-.21n OV,On .5V,.21n .75V,.55n 1V,.8n 2V,.8n SMOOTH=1 .ENDS
.END

Claims (56)

We claim:
1. A programmable molecular device, comprising:
at least one input lead;
at least one output lead; and a nano-network spanning said input lead and said output lead, wherein said nano-network comprises a plurality of molecular circuit components.
2. The programmable molecular device according to claim 1 wherein said nano-network is self assembled.
3. The programmable molecular device according to claim 1 wherein said nano-network is random.
4. The programmable molecular device according to claim 1 wherein said device is programmable by a self-adaptive algorithm for configuring said molecular circuit components.
5. The programmable molecular device according to claim 4 wherein said self-adaptive algorithm is selected from the group consisting of genetic algorithms, simulated annealing algorithms, go with the winner algorithms, temporal difference learning algorithms, reinforcement learning algorithms, and combinations thereof.
6. The programmable molecular device according to claim 4 wherein said molecular circuit components are configurable by applying a voltage across said input lead and said output lead.
7. The programmable molecular device according to claim 1 wherein said device is programmable to function as a logic unit.
8. The programmable molecular device according to claim 7 wherein said logic unit is selected from the group consisting of truth tables supported by said at least one input lead and said at least one output lead.
9. The programmable molecular device according to claim 8 wherein said logic unit is programmable to function as a device selected from the group consisting of an AND, an OR, an XOR, a NAND, a NOT, an Adder, a Half-adder, an Inverse Half-Adder, a Multiplexor, and a Decoder, and combinations thereof.
10. The programmable molecular device according to claim 1 wherein said device is programmable to function as a memory unit.
11. The programmable molecular device according to claim 1 wherein said device is reprogrammable.
12. The programmable molecular device according to claim 1 wherein said molecular circuit components are selected from the group consisting of molecular switches, molecular diodes, molecular wires, molecular rectifiers, resistors, transistors, molecular memory, and combinations thereof.
13. The programmable molecular device according to claim 12 wherein said molecular circuit components comprise molecular switches.
14. The programmable molecular device according to claim 13 wherein said device is programmable by an algorithm for setting said molecular switches.
15. The programmable molecular device according to claim 14 wherein said switches are settable by applying a voltage across said input lead and said output lead.
16. The programmable molecular device according to claim 1 wherein said nano-network further comprises nanoscale components.
17. The programmable molecular device according to claim 16 wherein said nanoscale components are selected from the group consisting of nanotubes, nanoparticles, nanorods, and combinations thereof.
18. The programmable molecular device according to claim 17 wherein said nanoscale circuit components comprise nanoparticles and said molecular circuit components comprise molecular switches and said molecular switches interconnect said nanoparticles.
19. The programmable molecular device according to claim 18 wherein said nanoparticles are randomly arrayed.
20. The programmable molecular device according to claim 18 wherein said molecular switches randomly interconnect said nanoparticles.
21. A method of malting an electronic component, comprising:
(a) providing a self assembled nanocell; and (b) programming the nanocell to function as the electronic component.
22. The method according to claim 21 wherein the nanocell comprises:
at least one input lead;
at least one output lead; and a nano-network spanning the input lead and the output lead, wherein the nano-network comprises a plurality of molecular circuit components.
23. The method according to claim 22 wherein the molecular circuit components are selected from the group consisting of molecular switches, molecular diodes, molecular wires, molecular rectifiers, molecular resistors, molecular transistors, molecular memories and combinations thereof.
24. The method according to claim 23 wherein the molecular circuit components comprises molecular resonant tunneling diodes.
25. The method according to claim 24 wherein the molecular circuit components exhibit negative differential resistance.
26. The method according to claim 22 wherein the nano-network further comprises nanoscale components selected from the group consisting of nanotubes, nanoparticles, nanorods, and combinations thereof.
27. The method according to claim 22 wherein said nano-network is random.
28. The method according to claim 21 wherein step (b) comprises:
(b1) configuring the molecular circuit components.
29. The method according to claim 28 wherein step (b1) comprises:
(b1.i) adjusting a conductivity-affecting property of at least one of the molecular circuit components by applying a voltage across the input lead and the output lead.
30. The method according to claim 29 wherein the conductivity-affecting property is selected from the group consisting of charge, conformational state, electronic state, and combinations thereof.
31. The method according to claim 28 wherein step (b) further comprises:
(b2) testing the performance of the nanocell.
32. The method according to claim 31 wherein step (b) further comprises:
(b3) applying a self-adaptive algorithm to reconfigure the molecular circuit components.
33. The method according to claim 32 wherein the self-adaptive algorithm is selected from the group consisting of genetic algorithms, simulated annealing algorithms, go with the winner algorithms, temporal difference learning learning algorithms, reinforcement learning algorithms, and combinations thereof.
34. The method according to claim 32 further comprising:
(b4) repeating steps (b2) and (b3) until the nanocell functions as the electronic component.
35. The method according to claim 22 wherein the electronic component comprises a logic unit.
36. The method according to claim 35 wherein the logic unit is selected from the group consisting of truth tables supported by the input leads and output leads.
37. The method according to claim 36 wherein the logic unit is selected from the group consisting of an AND, an OR, an XOR, a NOR, an NAND, a NOT, an Adder, a Half-Adder, an Inverse Half-Adder a Multiplexor, a Decoder, and combinations thereof.
38. The method according, to claim 22 wherein the electronic component comprises a memory unit.
39. The method according to claim 22 wherein step (a) comprises:
(a1) allowing a plurality of nanoscale components to self-assemble into a random array;
(a2) allowing the plurality of molecular circuit components to self-assemble into a random molecular interconnect between the nanoscale components; and (a3) bonding the molecular circuit components to the nanoscale components with molecular alligator clips.
40. The method according to claim 39 wherein the molecular alligator clips are selected from the group consisting of sulfur, oxygen, selenium, phosphorous, isonitrile, pyidine, carboxylate, and thiol moieties.
41. The method according to claim 39 wherein the nanoscale components are selected from the group consisting of nanotubes, nanoparticles, nanorods, and combinations thereof.
42. The method according to claim 39 wherein the molecular circuit components are selected from the group consisting of molecular switches, molecular diodes, molecular wires, molecular rectifiers, molecular resistors, molecular transistors and combinations thereof.
43. A molecular computer, comprising:
a plurality of programmable nanocells, each nanocell comprising:
a plurality of nanoparticles; and a plurality of molecular diodes;
wherein said molecular diodes interconnect said nanoparticles; and a plurality of metallic wires;
wherein said metallic wires interconnect said nanocells.
44. The molecular computer according to claim 43 wherein said nanocell is self-assembled.
45. The molecular computer according to claim 43 wherein said nanoparticles are randomly arrayed.
46. The molecular computer according to claim 43 wherein said molecular diodes randomly interconnect said nanoparticles.
47. The molecular computer according to claim 43 wherein each said nanocell comprises a linear dimension of up to about 2 microns.
48. The molecular computer according to claim 43 wherein at least one of said nanocells is programmable to function as a logic unit.
49. The molecular computer according to claim 48 wherein said logic unit is selected from the group consisting of truth tables supported by the wire interconnection.
50. The method according to claim 49 wherein at least one of said nanocells is programmable to function as a device selected from the group consisting of AND, OR, XOR, NOR, NAND, NOT, an Adder, a Half Adder, an Inverse Half Adder, a Multiplexor, a Decoder, and combinations thereof.
51. The molecular computer according to claim 43 wherein at least one of said nanocells is programmable to function as a memory unit.
52. The molecular computer according to claim 43 wherein said nanocell is programmable by an algorithm for configuring said nanocell's molecular diodes.
53. The molecular computer according to claim 43 wherein said said nanocell further comprises:
first and second leads; and wherein said diodes are configurable by applying a voltage to said first and second leads.
54. The molecular computer according to claim 43 wherein at least one of said molecular diode exhibits negative differential resistance.
55. A method of malting a computer, comprising:
(a) providing a plurality of trained self-assembled nanocells;
(b) interconnecting said trained nanocells to a plurality of untrained nanocells;
(c) allowing the trained nanocells to train the untrained nanocells.
56. The method according to claim 53, further comprising:
(d) hierarchically repeating steps (b) and (c).
CA002417462A 2000-07-25 2001-07-25 Programmable molecular device Abandoned CA2417462A1 (en)

Applications Claiming Priority (9)

Application Number Priority Date Filing Date Title
US22079000P 2000-07-25 2000-07-25
US60/220,790 2000-07-25
US22408000P 2000-08-08 2000-08-08
US22364400P 2000-08-08 2000-08-08
US60/223,644 2000-08-08
US60/224,080 2000-08-08
US27338301P 2001-03-05 2001-03-05
US60/273,383 2001-03-05
PCT/US2001/023333 WO2002009117A1 (en) 2000-07-25 2001-07-25 Programmable molecular device

Publications (1)

Publication Number Publication Date
CA2417462A1 true CA2417462A1 (en) 2002-01-31

Family

ID=27499200

Family Applications (1)

Application Number Title Priority Date Filing Date
CA002417462A Abandoned CA2417462A1 (en) 2000-07-25 2001-07-25 Programmable molecular device

Country Status (7)

Country Link
EP (1) EP1319231A4 (en)
JP (1) JP2004505357A (en)
KR (1) KR100808966B1 (en)
CN (1) CN1535466A (en)
AU (1) AU2001280759A1 (en)
CA (1) CA2417462A1 (en)
WO (1) WO2002009117A1 (en)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7203789B2 (en) * 2004-05-10 2007-04-10 Hewlett-Packard Development Company, L.P. Architecture and methods for computing with reconfigurable resistor crossbars
US7479654B2 (en) * 2005-05-09 2009-01-20 Nantero, Inc. Memory arrays using nanotube articles with reprogrammable resistance
US11823032B2 (en) 2019-01-23 2023-11-21 International Business Machines Corporation Tuning local conductances of molecular networks: applications to artificial neural networks

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6569382B1 (en) 1991-11-07 2003-05-27 Nanogen, Inc. Methods apparatus for the electronic, homogeneous assembly and fabrication of devices
US6259277B1 (en) * 1998-07-27 2001-07-10 University Of South Carolina Use of molecular electrostatic potential to process electronic signals
US6128214A (en) 1999-03-29 2000-10-03 Hewlett-Packard Molecular wire crossbar memory
US6518156B1 (en) 1999-03-29 2003-02-11 Hewlett-Packard Company Configurable nanoscale crossbar electronic circuits made by electrochemical reaction
US6198655B1 (en) * 1999-12-10 2001-03-06 The Regents Of The University Of California Electrically addressable volatile non-volatile molecular-based switching devices

Also Published As

Publication number Publication date
JP2004505357A (en) 2004-02-19
AU2001280759A1 (en) 2002-02-05
KR20030064373A (en) 2003-07-31
WO2002009117A1 (en) 2002-01-31
CN1535466A (en) 2004-10-06
KR100808966B1 (en) 2008-03-04
EP1319231A4 (en) 2008-11-19
EP1319231A1 (en) 2003-06-18

Similar Documents

Publication Publication Date Title
Stan et al. Molecular electronics: From devices and interconnect to circuits and architecture
Ziegler et al. CMOS/nano co-design for crossbar-based molecular electronic systems
US20030058697A1 (en) Programmable molecular device
DeHon et al. Hybrid CMOS/nanoelectronic digital circuits: devices, architectures, and design automation
US6777982B2 (en) Molecular scale latch and associated clocking scheme to provide gain, memory and I/O isolation
Han et al. Faults, error bounds and reliability of nanoelectronic circuits
Jiang et al. Graphene nanoribbon based complementary logic gates and circuits
Gayasen et al. Exploring technology alternatives for nano-scale FPGA interconnects
Huang Robust Computing with Nano-scale Devices: Progresses and Challenges
Gholipour et al. Design investigation of nanoelectronic circuits using crossbar-based nanoarchitectures
Ziegler et al. A case for CMOS/nano co-design
CA2417462A1 (en) Programmable molecular device
Jain et al. Comprehensive and Comparative Analysis of QCA-based Circuit Designs for Next-generation Computation
Zheng et al. Complete logic functionality of reconfigurable RTD circuit elements
Zhang et al. A hybrid nano/CMOS dynamically reconfigurable system—Part I: Architecture
Rose et al. Memory arrays based on molecular RTD devices
Agrawal et al. Quantum dot cellular automata based parity generator and detector: A review
Yazdanshenas et al. Designing low power and durable digital blocks using shadow nanoelectromechanical relays
De Micheli Designing robust systems with uncertain information
Chakrabarty et al. Design of Master Slave flip flop in Quantum Dot Cellular Automata (QCA)
Guimarães et al. Digital Circuits and Systems based on Single-Electron Tunneling Technology
Bevara et al. Ultra Low Power Reversible Arithmetic Processor Based on Quantum Dot Cellular Automata
Chilstedt et al. Design and evaluation of a carbon nanotube-based programmable architecture
Chakraborty et al. Low-power hybrid complementary metal-oxide-semiconductor-nano-electro-mechanical systems field programmable gate array: circuit level analysis and defect-aware mapping
Nakata Recent progress in Adiabatic circuits

Legal Events

Date Code Title Description
EEER Examination request
FZDE Discontinued