Xyce  6.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
N_DEV_Units.C
Go to the documentation of this file.
1 //-----------------------------------------------------------------------------
2 // Copyright Notice
3 //
4 // Copyright 2002 Sandia Corporation. Under the terms
5 // of Contract DE-AC04-94AL85000 with Sandia Corporation, the U.S.
6 // Government retains certain rights in this software.
7 //
8 // Xyce(TM) Parallel Electrical Simulator
9 // Copyright (C) 2002-2011 Sandia Corporation
10 //
11 // This program is free software: you can redistribute it and/or modify
12 // it under the terms of the GNU General Public License as published by
13 // the Free Software Foundation, either version 3 of the License, or
14 // (at your option) any later version.
15 //
16 // This program is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 // GNU General Public License for more details.
20 //
21 // You should have received a copy of the GNU General Public License
22 // along with this program. If not, see <http://www.gnu.org/licenses/>.
23 //-----------------------------------------------------------------------------
24 
25 //-------------------------------------------------------------------------
26 // Filename : $RCSfile: N_DEV_Units.C,v $
27 //
28 // Purpose :
29 //
30 // Special Notes :
31 //
32 // Creator : David Baur
33 //
34 // Creation Date : 2/6/2013
35 //
36 // Revision Information:
37 // ---------------------
38 //
39 // Revision Number: $Revision: 1.10.2.3 $
40 //
41 // Revision Date : $Date: 2014/03/17 22:19:26 $
42 //
43 // Current Owner : $Author: jcverle $
44 //-------------------------------------------------------------------------
45 
46 
47 #include <cstdlib>
48 
49 #include <N_DEV_Units.h>
50 
51 // ---------- Static data ------------
52 namespace Xyce {
53 namespace Device {
54 namespace Units {
55 
57 {
58  U_NONE, U_METER, "", "--",
59 #ifdef Xyce_DEBUG_UNITS
60  U_UNKNOWN, U_INVALID, "unknown", "unknown",
61 #else
62  U_UNKNOWN, U_INVALID, "---", "---",
63 #endif
64  U_AMP, U_INVALID, "A", "A",
65  U_AMPMM1, U_AMP, "A/m", "A/m",
66  U_AMPMM2, U_AMPMM1, "A/m**2", "A/m$^{2}$",
67  U_AMPVM2, U_INVALID, "A/V**2", "A/V$^{2}$",
68  U_AMPVM3, U_INVALID, "A/V**3", "A/V$^{3}$",
69  U_COULOMB, U_INVALID, "C", "C",
70  U_CM, U_INVALID, "cm", "cm",
71  U_CM2, U_INVALID, "cm**2", "cm$^{2}$",
72  U_CM2VM1SM1, U_INVALID, "cm**2/(V*s)", "cm$^{2}$/(Vs)",
73  U_CMM2, U_INVALID, "1/cm**2", "cm$^{-2}$",
74  U_CMM2VM1SM1, U_MCMM2VM1SM1, "1/(cm**2*V*s)", "1/(Vcm$^{2}$s)",
75  U_CMM3, U_MCMM3, "1/cm**3", "cm$^{-3}$",
76  U_MCMM3, U_M2CMM3, "m/cm**3", "m/cm$^{3}$",
77  U_M2CMM3, U_INVALID, "m**2/cm**3", "m$^{2}$/cm$^{3}$",
78  U_CM6SM1, U_INVALID, "cm**6/s", "cm$^{6}$/s",
79  U_DEGREE, U_INVALID, "degree", "degree",
80  U_DEGC, U_INVALID, "degree C", "$^\\circ$C",
81  U_DEGK, U_INVALID, "degree K", "K",
82  U_DEGCM1, U_INVALID, "1/(degree C)", "$^\\circ$C$^{-1}$",
83  U_DEGCM2, U_INVALID, "1/(degree C)**2", "$^\\circ$C$^{-2}$",
84  U_EV, U_INVALID, "eV", "eV",
85  U_EVDEGKM1, U_INVALID, "eV/K", "eV/K",
86  U_FARAD, U_FARADM, "F", "F",
87  U_FARADM, U_INVALID, "F*m", "Fm",
88  U_FARADMM1, U_FARAD, "F/m", "F/m",
89  U_FARADMM2, U_FARADMM1, "F/m**2", "F/m$^{2}$",
90  U_FHGMHSMVM1, U_FHGMHSMMVM1, "(F/g)**(1/2)*s/mV", "(F/g)$^{1/2}$s/mV",
91  U_FHGMHSMMVM1, U_FHGMHSM2MVM1, "(F/g)**(1/2)*s*m/mV", "(F/g)$^{1/2}$sm/mV",
92  U_FHGMHSM2MVM1, U_INVALID, "(F/g)**(1/2)*s*m**2/mV", "(F/g)$^{1/2}$sm$^{2}$/mV",
93  U_FS2HGMHMM1, U_INVALID, "(Fs**2/g)**(1/2)/m", "(Fs$^2$/g)$^{1/2}$/m",
94  U_FS2HGMHMM1VM1, U_INVALID, "(Fs**2/g)**(1/2)/mV", "(Fs$^2$/g)$^{1/2}$/mV",
95  U_FVM1MM2, U_FVM1MM1, "F/(V*m**2)", "F/(Vm$^{2}$)",
96  U_FVM1MM1, U_FVM1, "F/(V*m)", "F/(Vm)",
97  U_FVM1, U_INVALID, "F/V", "F/V",
98  U_HENRY, U_INVALID, "H", "henry",
99  U_HMM1, U_INVALID, "H/m", "Hm$^{-1}$",
100  U_HOUR, U_INVALID, "hour", "hour",
101  U_HZ, U_INVALID, "hz", "Hz",
102  U_JKM1, U_INVALID, "Joule/(degree K)", "J/K",
103  U_KKGM1JM1, U_INVALID, "(degree K)/(kg*Joule)", "K/(J-kg)",
104  U_JMM3KM1, U_INVALID, "(Joule)/(m**3*degree K)", "$J/(\\mbox{m}^3{}$K)",
105  U_KM1, U_INVALID, "1/(degree K)", "K$^{-1}$",
106  U_KGMM3, U_INVALID, "kg/m**3", "kg/$\\mbox{m}^3$",
107  U_LOGIC, U_INVALID, "logical (T/F)", "logical (T/F)",
108  U_MCMM2VM1SM1, U_M2CMM2VM1SM1, "m/(cm**2*V*s)", "m/(Vcm$^{2}$s)",
109  U_M2CMM2VM1SM1, U_INVALID, "m**2/(cm**2*V*s)", "m$^{2}$/(Vcm$^{2}$s)",
110 #ifdef Xyce_DEBUG_UNITS
111  U_THERMAL, U_INVALID, "unknown thermal", "unknown thermal",
112 #else
113  U_THERMAL, U_INVALID, "---", "---",
114 #endif
115  U_METER, U_METER2, "m", "m",
116  U_METERM1, U_NONE, "1/m", "m$^{-1}$",
117  U_METERM2, U_METERM1, "1/m**2", "m$^{-2}$",
118  U_METERM3, U_METERM2, "1/m**3", "m$^{-3}$",
119  U_METER2, U_METER3, "m**2", "m$^{2}$",
120  U_METER3, U_INVALID, "m**3", "m$^{3}$",
121  U_MEXPLL, U_INVALID, "m**LLN", "m$^{LLN}$",
122  U_MEXPLW, U_INVALID, "m**LWN", "m$^{LWN}$",
123  U_MEXPLLLW, U_INVALID, "m**(LLN+LWN)", "m$^{LLN+LWN}$",
124  U_MEXPWL, U_INVALID, "m**WLN", "m$^{WLN}$",
125  U_MEXPWW, U_INVALID, "m**WWN", "m$^{WWN}$",
126  U_MEXPWLWW, U_INVALID, "m**(WLN+WWN)", "m$^{WLN+WWN}$",
127  U_MHVMH, U_INVALID, "(m/s)**(1/2)", "m$^{1/2}$/V$^{1/2}$",
128  U_MOM1, U_M2OM1, "m/ohm", "m/$\\mathsf{\\Omega}$",
129  U_MSM1, U_M2SM1, "m/s", "m/s",
130  U_MM3SM1, U_INVALID, "1/m**3/s", "m$^{-3}$s$^{-1}$",
131  U_MVMH, U_M2VMH, "m/V**(1/2)", "m/V$^{1/2}$",
132  U_M2VMH, U_M3VMH, "m**2/V**(1/2)", "m$^{2}$/V$^{1/2}$",
133  U_M3VMH, U_INVALID, "m**3/V**(1/2)", "m$^{3}$/V$^{1/2}$",
134  U_MVM1, U_M2VM1, "m/V", "m/V",
135  U_M2VM1, U_M3VM1, "m**2/V", "m$^{2}$/V",
136  U_M2VM1SM1, U_INVALID, "m**2/(Vs)", "m$^{2}$/(Vs)",
137  U_M3VM1, U_INVALID, "m**3/V", "m$^{3}$/V",
138  U_MVM2, U_M2VM2, "m/V**2", "m/V$^{2}$",
139  U_MVM2DEGCM1, U_M2VM2DEGCM1, "m/(degree C * V**2)", "m/($^\\circ$CV$^{2}$)",
140  U_M2OM1, U_INVALID, "m**2/ohm", "m$^{2}$/$\\mathsf{\\Omega}$",
141  U_M2VM2DEGCM1, U_M3VM2DEGCM1, "m**2/(degree C * V**2)", "m$^{2}$/($^\\circ$CV$^{2}$)",
142  U_M3VM2DEGCM1, U_INVALID, "m**3/(degree C * V**2)", "m$^{3}$/($^\\circ$CV$^{2}$)",
143  U_M2SM1, U_M3SM1, "m**2/s", "m$^{2}$/s",
144  U_M3SM1, U_INVALID, "m**3/s", "m$^{3}$/s",
145  U_M2VM2, U_M3VM2, "(m/V)**2", "m$^{2}$/V$^{2}$",
146  U_M3VM2, U_M4VM2, "m**3/V**2", "m$^{3}$/V$^{2}$",
147  U_M4VM2, U_INVALID, "m**4/V**2", "m$^{4}$/V$^{2}$",
148  U_MOLAR, U_INVALID, "mol/L", "mol/L",
149  U_OHM, U_INVALID, "ohm", "$\\mathsf{\\Omega}$",
150  U_OHMM2, U_INVALID, "ohm*m**2", "$\\mathsf{\\Omega}$ m$^{2}$",
151  U_OHMMICRON, U_OHMMICRONM, "ohm*micron", "$\\mathsf{\\Omega}$ $\\mu$m",
152  U_OHMMICRONM, U_OHMMICRONM2, "ohm*micron*m", "$\\mathsf{\\Omega}$ $\\mu$m m",
153  U_OHMMICRONM2, U_INVALID, "ohm*micron*m**2", "$\\mathsf{\\Omega}$ $\\mu$m m$^{2}$",
154  U_OHMM, U_INVALID, "ohm*m", "$\\mathsf{\\Omega}$ m",
155  U_OHMMM1, U_OHM, "ohm/m", "$\\mathsf{\\Omega}/$m",
156  U_OHMMM1SM1, U_INVALID, "Ohm/m**2/s", "$\\mathsf{\\Omega}$ m$^{-1}$ s$^{-1}$",
157  U_OHMMM2SM1, U_INVALID, "ohm/m**2/s", "$\\mathsf{\\Omega}$ m$^{-2}$ s$^{-1}$",
158  U_OHMMM3SM1, U_INVALID, "ohm/m**3/s", "$\\mathsf{\\Omega}$ m$^{-3}$ s$^{-1}$",
159  U_OHMM1, U_MOM1, "1/ohm", "$\\mathsf{\\Omega}^{-1}$",
160  U_OHMM1MM1, U_MOM1, "1/(ohm*m)", "$\\mathsf{\\Omega}^{-1}$ m$^{-1}$",
161  U_OHMM1MM2, U_INVALID, "1/(ohm*m**2)", "$\\mathsf{\\Omega}^{-1}$ m$^{-2}$",
162  U_OHMPV, U_INVALID, "ohm/volt", "$\\mathsf{\\Omega}$ V$^{-1}$",
163  U_OSQM1, U_INVALID, "ohm/square", "$\\mathsf{\\Omega}/\\Box$",
164  U_RAD, U_INVALID, "rad", "rad",
165  U_RADPS, U_INVALID, "rad/s", "rad/s",
166  U_SECOND, U_INVALID, "s", "s",
167  U_SECM1, U_MSM1, "1/s", "s$^{-1}$",
168  U_SQUARES, U_INVALID, "squares", "$\\Box$",
169  U_VKM1, U_INVALID, "V/K", "V/K",
170  U_VHM, U_VHM2, "V**(1/2)*m", "V$^{1/2}$m",
171  U_VHM2, U_VHM3, "V**(1/2)*m**2", "V$^{1/2}$m$^{2}$",
172  U_VHM3, U_INVALID, "V**(1/2)*m**3", "V$^{1/2}$m$^{3}$",
173  U_VM, U_VM2, "V*m", "Vm",
174  U_VM2, U_VM3, "V*m**2", "Vm$^{2}$",
175  U_VM3, U_INVALID, "V*m**3", "Vm$^{3}$",
176  U_VMM1, U_VOLT, "V/m", "V/m",
177  U_VMMH, U_INVALID, "V/m**(1/2)", "V/m$^{1/2}$",
178  U_VOLT, U_VM, "V", "V",
179  U_VOLT3, U_INVALID, "V**3", "V$^3$",
180  U_VOLTH, U_VHM, "V**(1/2)", "V$^{1/2}$",
181  U_VOLTMH, U_MVMH, "V**(-1/2)", "V$^{-1/2}$",
182  U_VOLTM1, U_MVM1, "V**(-1)", "V$^{-1}$",
183  U_VOLTM2, U_MVM2, "V**(-2)", "V$^{-2}$"
184 // U_INVALID, U_INVALID, "", ""
185 };
186 
187 size_t unitTableSize = sizeof(Units::unitTable)/sizeof(Units::unitTable[0]);
188 
190 {
191  // General parameters
192  "IC", U_VOLT, CAT_INITIAL, "Initial voltage drop across device",
193 
194  // Current parameters
195  "DEV_I", U_AMP, CAT_CURRENT, "Device current",
196  "DEV_IB", U_AMP, CAT_CURRENT, "Bulk current",
197  "DEV_ID", U_AMP, CAT_CURRENT, "Drain current",
198  "DEV_IG", U_AMP, CAT_CURRENT, "Gate current",
199  "DEV_IS", U_AMP, CAT_CURRENT, "Source current",
200  "DEV_IE", U_AMP, CAT_CURRENT, "External body current",
201 
202  // Temperature parameters
203  "TEMP", U_DEGC, CAT_TEMP, "Device temperature",
204  "TNOM", U_DEGC, CAT_TEMP, "Nominal device temperature",
205  "TC1", U_DEGCM1, CAT_TEMP, "Linear temperature coefficient",
206  "TC2", U_DEGCM2, CAT_TEMP, "Quadratic temperature coefficient",
207 
208  // Radiation parameters
209  // JCV Note: 10/28/2013 This really belongs with the pulse parameters as far
210  // as a user is concerned, so I changed the category from CAT_RAD to CAT_RADP.
211  "GRORDER", U_NONE, CAT_RADP, "Order of magnitude of radiation generation rate",
212 
213  // Pulsedata parameters
214  "FUNCTIONTYPE", U_NONE, CAT_RADP, "Internal function type for pulse (1-6) or user defined (7)",
215  "PULSEDATA", U_NONE, CAT_RADP, "Expression (in braces {}) or filename (in quotes \\texttt{\" \"}) of (Time,~Value)"
216  " pairs to use instead of internal radiation source (functiontype = 7)",
217  "PULSEV1", U_NONE, CAT_RADP, "Initial value of radiation pulse (functiontype = 1)",
218  "PULSEV2", U_NONE, CAT_RADP, "Maximum value of radiation pulse (functiontype = 1)",
219  "PULSETD", U_SECOND, CAT_RADP, "Time delay of radiation pulse (functiontype = 1)",
220  "PULSETR", U_SECOND, CAT_RADP, "Rise time of radiation pulse (functiontype = 1)",
221  "PULSETF", U_SECOND, CAT_RADP, "Fall time of radiation pulse (functiontype = 1)",
222  "PULSEPW", U_SECOND, CAT_RADP, "Width of radiation pulse (functiontype = 1)",
223  "PULSEPER", U_SECOND, CAT_RADP, "Period of radiation pulse (functiontype = 1)",
224  "SINVO", U_NONE, CAT_RADP, "Offset of sinusoidal radiation source (functiontype = 2)",
225  "SINVA", U_NONE, CAT_RADP, "Amplitude of sinusoidal radiation source (functiontype = 2)",
226  "SINFREQ", U_HZ, CAT_RADP, "Frequency of sinusoidal radiation source (functiontype = 2)",
227  "SINTD", U_SECOND, CAT_RADP, "Delay of sinusoidal radiation source (functiontype = 2)",
228  "SINTHETA", U_SECM1, CAT_RADP, "Inverse of time constant for exponential envelope of sinusoidal"
229  " radiation source (functiontype = 2)",
230  "EXPV1", U_NONE, CAT_RADP, "Initial value of exponential cusp radiation source (functiontype = 3)",
231  "EXPV2", U_NONE, CAT_RADP, "Height of exponential cusp radiation source (functiontype = 3)",
232  "EXPTD1", U_SECOND, CAT_RADP, "Rise delay time of exponential cusp radiation source (functiontype = 3)",
233  "EXPTAU1", U_SECOND, CAT_RADP, "Rise time constant of exponential cusp radiation source (functiontype = 3)",
234  "EXPTD2", U_SECOND, CAT_RADP, "Fall delay time of exponential cusp radiation source (functiontype = 3)",
235  "EXPTAU2", U_SECOND, CAT_RADP, "Fall time constant of exponential cusp radiation source (functiontype = 3)",
236  "SFFMVO", U_NONE, CAT_RADP, "Offset of single frequency FM radiation source (functiontype = 4)",
237  "SFFMVA", U_NONE, CAT_RADP, "Amplitude of single frequency FM radiation source (functiontype = 4)",
238  "SFFMFC", U_HZ, CAT_RADP, "Carrier frequency of single frequency FM radiation source (functiontype = 4)",
239  "SFFMMDI", U_NONE, CAT_RADP, "Modulation index of single frequency FM radiation source (functiontype = 4)",
240  "SFFMFS", U_HZ, CAT_RADP, "Signal frequency of single frequency FM radiation source (functiontype = 4)",
241  "PWLT1", U_SECOND, CAT_RADP, "Time of point 1 of piecewise linear curve radiation source (functiontype = 5)",
242  "PWLT2", U_SECOND, CAT_RADP, "Time of point 2 of piecewise linear curve radiation source (functiontype = 5)",
243  "PWLT3", U_SECOND, CAT_RADP, "Time of point 3 of piecewise linear curve radiation source (functiontype = 5)",
244  "PWLT4", U_SECOND, CAT_RADP, "Time of point 4 of piecewise linear curve radiation source (functiontype = 5)",
245  "PWLT5", U_SECOND, CAT_RADP, "Time of point 5 of piecewise linear curve radiation source (functiontype = 5)",
246  "PWLV1", U_NONE, CAT_RADP, "Value of point 1 of piecewise linear curve radiation source (functiontype = 5)",
247  "PWLV2", U_NONE, CAT_RADP, "Value of point 2 of piecewise linear curve radiation source (functiontype = 5)",
248  "PWLV3", U_NONE, CAT_RADP, "Value of point 3 of piecewise linear curve radiation source (functiontype = 5)",
249  "PWLV4", U_NONE, CAT_RADP, "Value of point 4 of piecewise linear curve radiation source (functiontype = 5)",
250  "PWLV5", U_NONE, CAT_RADP, "Value of point 5 of piecewise linear curve radiation source (functiontype = 5)",
251  "LINET1", U_SECOND, CAT_RADP, "Time of point 1 of linear radiation source (functiontype = 6)",
252  "LINEV1", U_NONE, CAT_RADP, "Value of point 1 of linear radiation source (functiontype = 6)",
253  "LINEK", U_SECM1, CAT_RADP, "Slope of point 1 of linear radiation source (functiontype = 6)"
254 // NULL, U_NONE, CAT_NONE, ""
255 };
256 
258 
259 } // namespace Units
260 } // namespace Device
261 } // namespace Xyce