IPAT - Interferometer Threshold Curve Plotter

This program plots the interference patterns of two and three
Josephson junction interferometers under the assumption that the
junctions are perfect RSJ with no coupled flux.

Within these assumptions, the computation is exact, to within an
iteration tolerance of .1 percent.  The algorithms used have been
discussed in the literature, and are implemented in an efficient
manner which provides rapid computation.

Running IPAT
------------

From a command line, type "ipat".  Any words following "ipat" on the
command line are expected to be a path to a file in the format of the
output file from Jspice3/WRspice operating range analysis.  The pass
or fail points from the file will be plotted along with the
interference pattern (see Load Points below).  A window will appear,
containing some input areas, and graphical areas for the plot and a
schematic.  There is a menu bar along the top, containing a "WR"
button, and File, Options, and Help menus.

If an ".ipatrc" file is found in the current or home directories, the
the values found in the file are used to set some program defaults. 
This file has a very simple format, as seen in the example below.

------- Example .ipatrc file ---------------------------------------

# This is the startup file for IPAT.  It contains three entries:  the
# number of junctions to start with (2 or 3), the control line
# coupling constant, and the printer string, IN THAT ORDER.  This will
# provide the initial values for these parameters.  A line
# with '#' in the first column is a comment and is ignored.  Arbitrary
# text can follow the numbers.  If the third entry is blank (i.e.,
# contains one or more spaces, the print operation will by default
# create an "ipat_plot.ps" file.
#
# Unless you want to change these defaults, don't bother installing
# .ipatrc.  Otherwise, copy this file to your home directory or the
# current directory, and rename it to ".ipatrc".
#
2           Start with two junctions
1.0         Assume perfect coupling (entry must be > 0)
lpr -h

--------------------------------------------------------------------

The gtk user interface provides a set of entry widgets for
specification of component values, and a toolbar that contains menu
entries for various functions to be described.  The display is
automatically updated after each change.

The File menu contains the following selections:

  Save

    The Save button in the File menu brings up a dialog asking for a
    name to save the current data set under.  This name can be any
    name, but it can not start with the character '#', and it can't
    include white space.  The data set will be saved in the file
    ".ipat.data", in the user's home directory.  If the home directory
    can't be determined, such as under Windows if the environment
    variable $HOME is not defined to a directory path, a file named
    ipat.data in the current directory will be used.  In either case
    the file will be created if it does not already exist.  The format
    is very simple:  each line contains the name, followed by the
    number of junctions, followed by the nine values from the input
    entry widgets, top to bottom as on-screen.  Note that some of
    these values are not really used for two junctions, but some
    numeric value must be present in that position as a place-holder. 
    If the given name is already present, the new data set will
    overwrite the old.

  Recall

    Pressing the Recall button in the File menu will produce a menu
    containing the names of all saved parameter sets.  Selecting one of
    the entries will load those values into ipat, and update the display.

  Delete

    The Delete button in the File menu will prompt for a dataset name to
    delete from storage.  The response should be the name of a parameter
    set previously stored.

  Load Points
 
    This allows a "points" file to be read.  The points found in the
    file will be added to the plot.  The file format is the
    Jspice3/WRspice operating range output format.

  Print

    This brings up a pop-up which controls printing the current
    display.

  Quit

    Exit IPAT.

The Options menu contains the following selections:

  Three Junctions

    When set, a three-junction device will be plotted.  When unset, a
    two-junction device will be shown.

  Phase Plot

    When set, a phase plot will be presented.  When unset, a threshold
    plot will be presented.

  Show Negative X

    When set, both positive and negative control currents will be
    shown.  When unset, only positive control currents will be shown.


  Show Negative Y

    When set, both positive and negative threshold voltages will be
    shown.  When unset, only positive threshold voltages will be
    shown.

  Suppress Axes

    When set, the axes and grid points will not be shown.

  Suppress Secondary

    When set, the secondary contours of three-junction devices will not
    be shown.

  Suppress Tertiary

    When set, the tertiary contours of three-junction devices will not
    be shown.

  Plot Fail Points

    If plotting points from a file (Load Points in File Menu) show the
    fail points.

  Show Marker

    Enables a marker and printout of the cursor coordinates.  Retire
    the marker by pressing any key.  The left mouse button marks a
    location which is used as a reference for the coordinate printing,
    which can be deleted with the right button (i.e., go back to
    absolute coordinates).

The Help menu contains the following selections:

  Help

    Bring up a window containing a a description of the program
    features.


Theory
------

Two-junction solution:

  Basic equations:

  (1)  It = Ic1*sin(phi1) + Ic2*sin(phi2)
       (gate current)

  (2)  FLX = phi1 - phi2 + PHI*( L1*Ic1*sin(phi1)  -
           L2*Ic2*sin(phi2) )
       (external flux)

  (3)  1/(Ic1*cos(phi1)) + 1/(Ic2*cos(phi2) + PHI*(L1+L2) = 0
       (The auxiliary condition)
       This expression can be derived by introducing a Lagrange
       multiplier m, and setting I~ = It + m*FLX.  Equating
       dI~/dphi1 = 0 and dI~/dphi2 = 0 yields (3).

  where
    
    It   threshold gate current
    FLX  externally applied flux
     
  There are two junctions, one with phase phi1 and critical current
  Ic1, and similar for the second junction.  The loop inductance is
  split between L1 and L2, whth the gate current driving the
  connection point.  L1 connects to J1, and L2 connects to J2.

  The algorithm is to simply loop over phi1, then again over phi2 to
  better fill in the curve, using (3) to get the other angle. 
  Equations (1) and (2) provide a locus of points which define the
  threshold curve.


Three-junction solution:

  Basic equations:
  sN = IcN*sin(phiN)
  cN = icN*cos(phiN)

  (1)  It = s1 + s2 + s3
          = Il + Ir, Il/It = C  ( C is splitting fraction )
       (gate current)

  (2)  f1 = phi1 - phi2 + PHI*(L1*s1 - L2*(C(s2 + s3) + (C-1)*s1)) + Order1
       (left loop flux)

       f2 = phi2 - phi3 + PHI*(L3*((1-C)*(s1 + s2) - C*s3) - l4*s3) + Order2
       (right loop flux)

  (3)  I~ = It + A*(f1 terms) + B*(f2 terms)
       (lagrange multipliers)

  (4)  Partial derivatives

       phi1:
       c1 +
          A * (1 + PHI*L1*c1 + (1-C)*PHI*L2*c1) +
          B * (1-C)*PHI*L3*c1 = 0

       phi2:
       c2 -
          A * (1 + C*PHI*L2*c2) +
          B * (1 + (1-C)*PHI*L3*c2) = 0

       phi3:
       c3 -
          A * C*PHI*L2*c3 -
          B * (1 + PHI*L4*c3 + C*PHI*L3*c3) = 0

  (5)  FLX = f1 + f2
       (total external flux)

  (6)  (L3+L4)*f1 - (L1+L2)*f2 = 0
       (assume the flux is coupled through the loop inductance)
       A common control line divides the flux between the two loops as
       above.

We loop over phi1, then phi2, and finally phi3, to ensure that the
curves are filled in.  Given one angle, (4) and (6) are used to find
the other two, using a Newton-Rhapson numerical solution algorithm. 
(1) and (5) provide the locus of points which represent the threshold. 
Before plotting, we discard any points where

    PHI*Ic1*cos(phi1)*(L1+L2) < -1, or
    PHI*Ic2*cos(phi3)*(L3+L4) < -1.

These points represent nonphysical solutions.  The above conditions
are not rigorously sufficient to eliminate all such solutions, but in
practice there does not seem to be a problem.

This process is repeated with Order1 set to 2*PI to get the secondary
thresholds (where the two loops differ by one flux quantum), and
Order2 is set to -2*PI and the process is again repeated to get the
third order thresholds (loops differ by two flux quanta).

The best way to learn IPAT, and to learn about interferometers, is to
experiment.  Have fun!

References:
-----------

Won-Tien Tsang and T. Van Duzer, "The analysis of parallel arrays of
two and three Josephson junctions," J. Appl. Phys., Vol. 46, No. 10,
pp. 4573-4580, October 1975.

  Tsang and Van Duzer outline the Lagrange multiplier method of solving
  the interferometer equations, which is the method used in IPAT for
  three junction interferometers.

R. L. Peterson and C. A Hamilton, "Analysis of threshold curves for
superconducting interferometers," J. Appl. Phys., Vol. 50, No. 12,
pp.8135-8142, December 1979.

  Peterson and Hamilton provide a useful approximate screening
  condition for determining which solutions are unstable.

E. O. Schulz-DuBios and P. Wolf, "Static Characteristics of
Josephson Interferometers," Appl. Phys. (Springer-Verlag), Vol. 16,
pp. 317-338, 1978.

  Shulz-DuBois and Wolf provide detailed analysis of the stability
  criteria.

Gregory S. Lee, "A simple physical principle for determining mode
boundaries in superconducting loop circuits," J. Appl. Phys., Vol 66,
No. 6, 15 September 1989.

  Lee shows an interesting connection between the small-signal
  model of an interferometer circuit and the general equations
  governing the threshold behavior.

