00001 // SuperMix version 1.0a C++ source file 00002 // 00003 // Copyright (c) 1999 California Institute of Technology. 00004 // All rights reserved. 00005 // 00006 // Redistribution and use in source and binary forms for noncommercial 00007 // purposes are permitted provided that the above copyright notice and 00008 // this paragraph are duplicated in all such forms and that any 00009 // documentation and other materials related to such distribution and 00010 // use acknowledge that the software was developed by California 00011 // Institute of Technology. Redistribution and/or use in source or 00012 // binary forms is not permitted for any commercial purpose. Use of 00013 // this software does not include a permitted use of the Institute's 00014 // name or trademark for any purpose. 00015 // 00016 // DISCLAIMER: 00017 // THIS SOFTWARE AND/OR RELATED MATERIALS ARE PROVIDED "AS-IS" WITHOUT 00018 // WARRANTY OF ANY KIND INCLUDING ANY WARRANTIES OF PERFORMANCE OR 00019 // MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE OR PURPOSE (AS SET 00020 // FORTH IN UCC 23212-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE 00021 // LICENSED PRODUCT, HOWEVER USED. IN NO EVENT SHALL CALTECH/JPL BE 00022 // LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING BUT NOT LIMITED TO 00023 // INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, INCLUDING ECONOMIC 00024 // DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF 00025 // WHETHER CALTECH/JPL SHALL BE ADVISED, HAVE REASON TO KNOW, OR IN 00026 // FACT SHALL KNOW OF THE POSSIBILITY. THE USER BEARS ALL RISK 00027 // RELATING TO QUALITY AND PERFORMANCE OF THE SOFTWARE AND/OR RELATED 00028 // MATERIALS. 00029 // 00030 // ******************************************************************** 00031 // sisdevice.h 00032 // 00033 // Declarations for the sis devices and associated classes 00034 // 00035 // Includes the following class: 00036 // sis_basic_device 00037 // sis_device (synonym for sis_basic_device) 00038 // 00039 // F. Rice 6/22/98 00040 // 00041 // 6/12/00: Added a constructor 00042 // 4/29/00: Changed _Vn to Vn_, etc., part of a Linux bug fix 00043 // 1/25/00: Oops, fixed the RMS v. peak error in sis_basic_device::alpha() 00044 // 1/12/00: Added sis_basic_device::alpha() 00045 // 12/22/98: Added typedef for sis_device 00046 // 7/15/98: Changed junction state vectors to Index_C vice Index_S 00047 // 7/10/98: Characteristics are now parameters vice doubles 00048 // 7/8/98: Updated to support the changes to junction interface 00049 // 7/7/98: Moved ckdata declaration to junction.h 00050 // 00051 // ******************************************************************** 00052 #ifndef SISDEV_H 00053 #define SISDEV_H 00054 00055 #include "global.h" 00056 #include "junction.h" 00057 #include "parameter.h" 00058 00059 00060 // ******************************************************************** 00061 // class sis_basic_device (also sis_device) 00062 // 00063 // sis_basic_device is a junction of type Y_type. 00064 // It has the SIS junction's gap voltage, normal resistance, and 00065 // capacitance as explicit values set by the client. 00066 // 00067 // F. Rice 6/30/98 00068 // ******************************************************************** 00069 00070 class sis_basic_device : public junction 00071 { 00072 public: 00073 00074 // The routine used to set the operating state of the sis junction. 00075 // The input vector is a set (indexed 0..n) of RMS voltages impressed 00076 // on the junction; the function returns a set of large-signal 00077 // currents. Index 0 is the DC component, index n represents the 00078 // signal at n*LO_freq. 00079 00080 const Vector & large_signal( 00081 const Vector & V, // the vector of input voltages 00082 double LO_freq, // the LO frequency 00083 int max_harmonics ) // the max number of harmonics 00084 ; 00085 00086 00087 // The routine that returns the small-signal response. It returns a 00088 // symmetrically-indexed square matrix representing the small-signal 00089 // admittance matrix. The client must call large_signal() before calling 00090 // this routine; it uses the large signal voltages and LO frequency 00091 // arguments to the most recently executed call of large_signal(). 00092 00093 const Matrix & small_signal( 00094 double IF_freq, // the IF frequency 00095 int max_harmonics ) // the max number of harmonics 00096 ; 00097 00098 00099 // The routine that returns the noise correlation matrix. It returns a 00100 // symmetrically-indexed square matrix representing the current noise. The 00101 // client must call large_signal() before calling this routine; it uses the 00102 // large signal voltages and LO frequency arguments to the most recently 00103 // executed call of large_signal(). 00104 00105 const Matrix & noise( 00106 double IF_freq, // the IF frequency 00107 double T, // the temperature 00108 int max_harmonics ) // the max number of harmonics 00109 ; 00110 00111 00112 // This function returns a flag which is nonzero if large_signal() has 00113 // never been called, or has not been called since one of the junction 00114 // parameters below has been changed. 00115 00116 int call_large_signal() const; 00117 00118 00119 // The characteristics of this junction. 00120 00121 sis_basic_device & set_iv(const ivcurve & iv) 00122 { piv = &iv; iv_data_ok = 0; return *this; } 00123 00124 parameter Vn, Rn; // the normalizing voltage and resistance used in the ivcurve 00125 00126 parameter Cap; // the junction capacitance 00127 00128 00129 // Routines to report state data for the sis junction. 00130 // Note that Ck() values are in symmetric-harmonic form (-k..0..k): 00131 00132 const Vector & V() const { return Voltages; } 00133 const Vector & I() const { return Currents; } 00134 const Vector & Ck() const { return C.Ck; } 00135 double alpha() const 00136 { return (LO_freq != 0.0) ? VoltToFreq*RmsToPeak*abs(Voltages.read(1))/LO_freq : 0.0; } 00137 00138 // The constructor sets up the member variables to well-defined values 00139 sis_basic_device(); 00140 00141 private: 00142 const ivcurve *piv; 00143 double Vn_, Rn_, Cap_; // the parameter values used by large_signal 00144 int iv_data_ok; // a flag used by call_large_signal() 00145 Vector Voltages, Currents; // filled by large_signal() 00146 ckdata C; // filled by large_signal() 00147 Vector I_VLO, I_VLO_prime, // temporary values looked up from the ivcurve 00148 I_pVIF, I_mVIF; 00149 Matrix Y, H; // filled by small_signal() and noise() 00150 double LO_freq, IF_freq; // the values used to calculate I_VLO, etc. 00151 }; 00152 00153 typedef sis_basic_device sis_device; 00154 00155 #endif /* SISDEV_H */
Please direct comments and corrections to
supermix@submm.caltech.edu
Go to the supermix home page
Generated by
1.2.7