Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

sisdevice.h

Go to the documentation of this file.
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 doxygen1.2.7