9
Refining the Finite Difference Method

In this chapter we’ll refine and expand the finite difference solution technique and its applications. We’ll look at refined grids for better accuracy in high-field regions (regions with rapidly changing voltage), mixed dielectrics, other coordinate systems, multielectrode structures, and magnetic wall boundary conditions, including calculation of symmetric structures. We’ll show how, in many cases, we can calculate both upper and lower bounds on our estimates of C (and for transmission line cross sections L and Z0). We’ll take a brief look at solving three-dimensional (3d) problems.

9.1 Refined Grids

Regions such as outer corners of electrodes have very high electric fields as compared to other regions in a structure. Saying that the field magnitude is high is equivalent to saying that the voltage in that region changes rapidly with position. In such a situation we want to reduce the value of h to ensure that a significant portion of the voltage variation does not take place within one cell. The brute-force approach to this is to simply increase the value of h throughout by, say, a factor of 100 in both axes. This will, of course, increase the number of nodes by a factor of 10,000 (assuming a simple rectangular box geometry). If we had started out with a 50 × 250 = 12,500-node system, then increasing the number of nodes by a factor of 10,000 would not seem too practical. An alternative approach is to decrease h only where (we think) this increase is necessary. Before looking at examples of this, however, we need to recast the finite difference approximation to Laplace’s equation in terms of different size values of h.

Referring to Figure 8.1, let the h value separating nodes V0 and V1 be h1, the value separating nodes V0 and V2 be h2, and so on. The Taylor expansions from Chapter 8 are now

(9.1)images
(9.2)images

Multiplying the equation (9.1) by h3, (9.2) by h1, adding these two equations together and updating the notation a bit, we obtain

(9.3)images

Following the same procedure for V2 and V4, we get

(9.4)images

Solving for the second derivatives, adding the equations together, and setting the results to zero, we get

(9.5)images

Our first example of using equation (9.5) is to modify the stripline problem of Chapter 8, for two reasons: (1) to increase the resolution near the edge of the center strip electrode, as discussed above; and (2) to allow for a study of finite-thickness center strip electrode (the zero-thickness electrode was a good starting approximation, but we can do better).

Unfortunately, detailed structures take more involved descriptions than do simple structures and there is really no way around this annoyance. Figure 9.1 shows the detail of the new grid layout. Taking advantage of the symmetry of the structure, only the upper right quadrant of the layout is shown.

c9-fig-0001

FIGURE 9.1 Stripline example with a refined grid layout.

c9-fig-0002

FIGURE 9.2 (a) hi and (b) hj grid layouts for example program.

Figure 9.2 shows the grid layout used. Important properties of these layouts are as follows:

  1. The sum of the hi values is 40. This is the total width of the box.
  2. The sum of the hj values is 8. This is the total height of the box.
  3. Node separation hi is the distance between nodes (i, j) and (i + 1, j) for all j. The graph of hi in Figure 9.2 is therefore not perfectly centered — it is moved one node to the left; hj has the same property.
  4. Height hi is laid out so that there is moderate resolution (1) near x = 0, high resolution (0.1) centered about the edges of the center conductor, and then steadily increasing resolution out to the right and left edges.
  5. Height hj is laid out so that there is high resolution (0.1) near y = 0 and then steadily increasing resolution out to the top and bottom edges.
  6. The center conductor runs from i = -2 to i = +2 (this is not shown in the figure). This sets the center conductor width at 1.2.

Here are three programs related to this topic:

  • [Program fd4.m] — modified fd2.m script using adjustable hi and hj:
    %fd4.m   fd2 repeated with non-uniform hi and hj values
    clear
    ns = 5;           % scaling factor for resolution studies
    
    % Make Sure Jc1 and Jc2 settings in get_grid.m are what is desired -
    %  these setting do not scale with ns
    
    [Imin, Imax, Jmin, Jmax, Ic1, Ic2, Jc1, Jc2, hi, hj] = get_grid(ns);
    
    [i,j,Kmax] = get_ijk(Imin,Imax,Jmin, Imax,Jmax,0); % number of variables
    
    a = sparse(Kmax,Kmax);  % zeros(Kmax);  % allocate the coefficient array
    b = zeros(Kmax,1); % allocate the bcs array
    
    % initialize a as if every variable is free
    h1 = 0; h2 = 0; h3 = 0; h4 = 0;  % Terms using these will drop out
    for j = Jmin: Jmax
     j1 = j - Jmin + 1;
     if j < Jmax, h2 = hj(j1); end;
     if j > Jmin, h4 = hj(j1-1); end;
     for i = Imin : Imax
      i1 = i - Imin + 1;
      if i < Imax, h1 = hi(i1); end;
      if i > Imin, h3 = hi(i1-1); end;
      [i,j,k0] = get_ijk(Imin,Imax,Jmin, i,j,0);
      a(k0,k0) = -1/h1/h3 - 1/h2/h4;
      if k0 < Kmax, a(k0,k0 + 1) = 1/h1/(h1 + h3); end
      if k0 > 1,     a(k0,k0-1) = 1/h3/(h1 + h3); end
      k1 = k0 + (Imax-Imin) + 1;
      if k1 < = Kmax, a(k0,k1) = 1/h2/(h2 + h4); end
      k2 = k0 - (Imax-Imin) - 1;
      if k2 > 0, a(k0,k2) = 1/h4/(h2 + h4); end
     end
    end
    
    % Perimeter (v = 0) bcs
    for i = Imin : Imax
     [i,j,k] = get_ijk(Imin,Imax,Jmin, i,Jmin,0);
     a(k,:) = 0; a(k,k) = 1;
     [i,j,k] = get_ijk(Imin,Imax,Jmin, i,Jmax,0);
     a(k,:) = 0; a(k,k) = 1;
    end
    for j = Jmin + 1 : Jmax - 1
     [i,j,k] = get_ijk(Imin,Imax,Jmin, Imin,j,0);
     a(k,:) = 0; a(k,k) = 1;
     [i,j,k] = get_ijk(Imin,Imax,Jmin, Imax,j,0);
     a(k,:) = 0; a(k,k) = 1;
    end
    
    % inner strip (v = 1) bcs
    for i = Ic1 : Ic2
     for j = Jc1 : Jc2
       [i,j,k] = get_ijk(Imin,Imax,Jmin, i,j,0);
       a(k,:) = 0;
       a(k,k) = 1;
       b(k) = 1;
      end
    end
    
    % solve for voltages
    v = a;
    
    % list non-zero voltages by row, column, & variable nrs
    fprintf (' i  j  k  Volts  
      
    ')
    for k = 1 : Kmax
     volts = v(k);
     if volts > 0
      [i,j,k] = get_ijk(Imin,Imax,Jmin, 0,0,k);
      fprintf ('%3d  %3d  %3d  %8.3f  
    ',  i,  j,  k,  volts)
     end
    end
    
    % we’ll need an xy voltage array for ongoing calcs
    Sx = Imax - Imin + 1; Sy = Jmax - Jmin + 1;
    Volts = zeros(Sx,Sy);
    for ii = Imin:Imax
     i = ii - Imin + 1;
     for jj = Jmin:Jmax
      j = jj - Jmin + 1;
      [ii,jj,k] = get_ijk(Imin,Imax,Jmin, ii,jj,0);
      Volts(i,j) = v(k);
     end
    end
    
    C = C_Energy2(Volts, hi, hj)
    
  • [Program get_grid.m] — function for generating hi and hj lists:
    function [Imin, Imax, Jmin, Jmax, Ic1, Ic2, Jc1, Jc2, hi, hj] = get_grid(ns)
    
    % get_grid.m    developing the non-uniform grid
    
    nx = 20*ns; ny = 4*ns;
    i_vec = [-nx : nx]; Ic1 = -2*ns; Ic2 = 2*ns;
    j_vec = [-ny : ny];
    Jc1 = 0; Jc2 = 0;
    Imin = i_vec(1); Imax = i_vec(end); Jmin = j_vec(1); Jmax = j_vec(end);
    hi = ones(1,ns); % inner x low resolution region (rhs only)
    hi = [hi, .2*ones(1,10*ns)]; % x high resolution region
    rem_len = nx - length(hi);
    addon = [1:rem_len]; addon = addon*(nx-sum(hi))/sum(addon); % tapered region
    hi = [hi,addon];
    hi = [fliplr(hi),hi];   % lhs
    
    hj = [.1*ones(1,2*ns)];  % y high resolution region (top only)
    rem_len = ny - length(hj);
    addon = [1:rem_len]; addon = addon*(ny-sum(hj))/sum(addon); % tapered region
    hj = [hj,addon];
    hj = [fliplr(hj),hj]; % bottom
    
    end
    
  • [Program C_Energy2.m] — modified C_energy.m function using adjustable hi and hj:
    function C = C_Energy2(V, hi, hj)
    %   C_energy routine modified to accept hi and hj arrays
    
      [Sx,Sy] = size(V);
       eps0 = 8.854;
    
       Utot = 0;
       for i = 1 : Sx - 1
         for j = 1 : Sy - 1
         a = V(i,j); b = V(i+1,j); c = V(i+1,j+1); d = V(i,j+1);
         Utot = Utot ...
           + hj(j)/hi(i)*((a-b)^2 + (d-c)^2 + (a-b)*(d-c))...
           + hi(i)/hj(j)*((a-d)^2 + (b-c)^2 + (a-d)*(b-c));
       end
      end
    
       C = Utot*eps0/3;
    end
    

MATLAB script fd4.m is fd2.m upgraded to allow for user-defined grids. The function get_grid.m defines the grids shown in Figure 9.2. The function C_Energy2.m is C_energy.m upgraded to allow for user defined grids.

The results of this program are very similar to the results of fd2.m shown in Figure 8.8. The accuracy is improved at ns = 1 but as expected, the improvement decreases as ns is increased. The accuracies easily available from such a simple numerical analysis are good enough to surpass the tolerance and dielectric accuracies of all except laboratory-grade fabricated devices.

The fd4.m program offers other useful capabilities; for ns = 10, hj near y = 0 is 0.1, while the the sum of all hj is 80. This means that scaling to a total thickness of 4, each (y direction) grid step near y = 0 is 0.005. Keeping the center conductor centered in the box, we can therefore vary the thickness of the center conductor in 0.01 increments.

c9-fig-0003

FIGURE 9.3 Stripline capacitance for various center conductor thicknesses.

Figure 9.3 shows the results of calculating the capacitance for several different center conductor thicknesses (ns = 10). Published values1 are shown for the same calculation. The excellent absolute error and even better relative error (incremental change in capacitance as conductor thickness is changed) is apparent.

The y-direction location of the center conductor can also be varied in small steps about y = 0 just as easily as the center conductor’s thickness was varied. The data resulting from doing this are very useful for establishing tolerances on the location of the center conductor when the required tolerance values on the capacitance are known. In many cases the relative error is more important than the absolute error because the latter can be minimized experimentally. Then, knowing the variation to expect due to manufacturing tolerances is important information.

9.2 Arbitrary Conductor Shapes

Equation (9.5) is also useful when one is confronted with boundary conditions that don't lend themselves to falling along rectangular grids. Figure 9.4, for example, shows a circular (actually the cross section of a long cylinder) metal conductor. It does not matter whether this conductor is solid or hollow — electrostatically the entire region is at the same potential as the surface. The × tickmarks are points on the surface of the circle that lie along the grid connecting the voltage node points (grid not shown).

c9-fig-0004

FIGURE 9.4 A boundary condition circle on a square grid.

The shaded region of Figure 9.4 shows a central node adjacent to four other nodes, one of which lies on the circle boundary. The h values for calculating the voltage at this node are shown. The definitions shown refer to equation (9.5). This procedure is extended to all nodes for which a tickmark × is located between the V0 node and a node interior to the circle.

As an example, consider a stripline with a circular center conductor centered (in y) between the strip electrodes. The ratio of the strip separation to the circle diameter is 20 : 1. This number is the same as in the last example in Chapter 5.

The program fd5.m implements this technique, with the function get_grid_circle.m setting up the proper h values. In get_grid_circle.m, the radius of the circle is artificially increased by 0.001 to prevent the circle from passing through nodes (this is only a programming convenience; nothing in the analysis demands this maneuver as long as the boundary conditions and h values are correctly handled):

  • [Program fd5.m here] — MATLAB script for a circle in a (wide) box:
    %fd5.m    fd4.m with a circular center conductor
    clear
    ns = 1;  % scaling factor for resolution studies
    
    [Imin, Imax, Jmin, Jmax, hi,hj, bc_nodes] = prob9_1(ns);
    
    [i,j,Kmax] = get_ijk(Imin,Imax,Jmin, Imax,Jmax,0); % number of variables
    
    a = sparse(Kmax,Kmax); % zeros(Kmax); % allocate the coefficient array
    b = zeros(Kmax,1); % allocate the bcs array
    
    % initialize a as if every variable is free
    h1 = 0; h2 = 0; h3 = 0; h4 = 0; % Terms using these will drop out
    for j = Jmin: Jmax
     j1 = j - Jmin + 1;
     if j < Jmax, h2 = hj(j1); end;
     if j > Jmin, h4 = hj(j1-1); end;
     for i = Imin : Imax
      i1 = i - Imin + 1;
      if i < Imax, h1 = hi(i1); end;
      if i > Imin, h3 = hi(i1-1); end;
      [i,j,k0] = get_ijk(Imin,Imax,Jmin, i,j,0);
      a(k0,k0) = -1/h1/h3 - 1/h2/h4;
      if k0 < Kmax, a(k0,k0 + 1) = 1/h1/(h1 + h3); end
      if k0 > 1, a(k0,k0-1) = 1/h3/(h1 + h3); end
      k1 = k0 + (Imax-Imin) + 1;
      if k1 < = Kmax, a(k0,k1) = 1/h2/(h2 + h4); end
      k2 = k0 - (Imax-Imin) - 1;
      if k2 > 0, a(k0,k2) = 1/h4/(h2 + h4); end
     end
    end
    
    % Perimeter (v = 0) bcs
    for i = Imin : Imax
     [i,j,k] = get_ijk(Imin,Imax,Jmin, i,Jmin,0);
     a(k,:) = 0; a(k,k) = 1;
     [i,j,k] = get_ijk(Imin,Imax,Jmin, i,Jmax,0);
     a(k,:) = 0; a(k,k) = 1;
    end
    for j = Jmin + 1 : Jmax - 1
     [i,j,k] = get_ijk(Imin,Imax,Jmin, Imin,j,0);
     a(k,:) = 0; a(k,k) = 1;
     [i,j,k] = get_ijk(Imin,Imax,Jmin, Imax,j,0);
     a(k,:) = 0; a(k,k) = 1;
    end
    
    % circle (v = 1) bcs
    for k = 1 : Kmax
     if bc_nodes(k) == 1
      a(k,:) = 0;
      a(k,k) = 1;
      b(k) = 1;
     end
    end
    
    % solve for voltages
    v = a;
    
    % list non-zero voltages by row, column, & variable nrs
    fprintf (' i j k Volts 
     
    ')
    for k = 1 : Kmax
     volts = v(k);
     if volts > 0
      [i,j,k] = get_ijk(Imin,Imax,Jmin, 0,0,k);
      fprintf ('%3d %3d %3d %8.3f 
    ', i, j, k, volts)
     end
    end
    
    % we’ll need an xy voltage array for ongoing calcs
    
    Sx = Imax - Imin + 1; Sy = Jmax - Jmin + 1;
    Volts = zeros(Sx,Sy);
    for ii = Imin:Imax
     i = ii - Imin + 1;
     for jj = Jmin:Jmax
      j = jj - Jmin + 1;
      [ii,jj,k] = get_ijk(Imin,Imax,Jmin, ii,jj,0);
      Volts(i,j) = v(k);
     end
    end
    
    C1 = C_Gauss_box(Volts)
    C = C_Energy2(Volts, hi, hj)
    
  • [Program get_grid_circle.m]:
    function [Imin, Imax, Jmin, Jmax, hi, hj, bc_nodes] = get_grid_circle(ns)
    
    % developing the non-uniform grid
    % This version generates the circle boundary conditions
    % The circle radius is 2.  Note that nx and ny have been
    % changed from previous programs
    % This function returns hi and hj and a list of bc nodes
    
     nx = 100*ns; ny = 20*ns;
     rad = 2*ns + .001; % Circle radius, circle centered at (i,j) = (0,0)
    
     Imin = -nx; Imax = nx; Jmin = -ny; Jmax = ny;   % box parameters
     [i,j,Kmax] = get_ijk(Imin,Imax,Jmin, Imax,Jmax,0); % number of variables
    
    % Initialize arrays to their correct sizes
     hi = ones(1,2*nx); hj = ones(1,2*ny);
     bc_nodes = zeros(1,Kmax);
    
    % Walk through the whole array except the outer box
     for i = Imin + 1 : Imax-2
      for j = Jmin + 1 : Jmax - 2
       r_pt_sq = i^2 + j^2;
       if (r_pt_sq < rad^2)
        [~,~,k] = get_ijk(Imin,Imax,Jmin, i,j,0);
        bc_nodes(k) = 1;
       end
      end
     end
    
    % Below could have been kept inside previous nested loops but it should
    %  be easier to follow this way
    % We now know which nodes are inside the circle, we want h values
     for k = 2 : Kmax-1
      if bc_nodes(k) == 1
       [i,j,~] = get_ijk(Imin,Imax,Jmin, i,j,k);
       j1 = j-Jmin + 1; i1 = i-Imin + 1;
       if bc_nodes(k-1) == 0 % look to the left
        x = sqrt(rad^2 - j^2);
        hi(i1-1) = -x-(i-1);
       elseif bc_nodes(k + 1) == 0 % look to the right
        x = sqrt(rad^2 - j^2);
        hi(i1) = x-i;
       elseif bc_nodes(k + Imax-Imin + 1) == 0  %   look up
        y = sqrt(rad^2 - i^2);
        hj(j1) = y-j;
       elseif bc_nodes(k - (Imax-Imin + 1)) == 0  %   look down
        y = sqrt(rad^2 - i^2);
        hj(j1-1) = -y-(j-1);
       end
      end
     end
    
    end
    

Figure 9.5 shows the results produced by this program and the result from the calculation in Chapter 5. The stored energy calculation, unlike calculations in previous examples, does not fall with increasing resolution (ns). This is because, in this situation, the calculation is not correct. Referring to Figure 9.4, many of the cells near the circle are not complete rectangles; they are rectangles with a piece sliced off by the circle. This fact has not been considered in the stored energy calculation. The stored energy calculation could be rewritten to correct this problem, but writing a general-purpose program to do this is very difficult.

c9-fig-0005

FIGURE 9.5 Capacitance of a circular conductor in a square box.

(Note: Automatically correctly handling this issue will be one of the advantages of the finite element technique.)

Returning to our example, the total charge calculation, using a Gaussian surface just inside the outer box, as was done in Chapter 8, is still correct. The results of this calculation do not change monotonically with ns. This is because changing ns changes not only the resolution, but also the number of points on the circle that become boundary conditions, and as a result the capacitance meanders a bit. Overall, the results of the calculation agree well with the result produced in Chapter 5.

9.3 Mixed Dielectric Regions and a New Derivation of the Finite Difference Equation

The results to be shown in this section are presented, for now, without derivation. The results are easy to apply to existing and upcoming examples, and including them at this point is convenient and reasonable. The derivation of these results follows very easily and logically from the energy-minimization-based derivation to be presented in Chapters 12, 15, and 16 (and the FD and FEM results for this topic are identical). The derivation will therefore be postponed until discussion of the finite element method.

Figure 9.6 shows a square grid with the voltage node references presented (in Chapter 8).

c9-fig-0006

FIGURE 9.6 Square grid shows dielectric surface.

When solving Laplace’s equation using the FD technique, the only places where the existence of the dielectric is relevant is at the dielectric interface (Jint in the figure).

The a matrix coefficient terms are modified to include the dielectric constant at each node; the dielectric constant at an interface node is the average of the dielectric constants. For the air dielectric interface shown in Figure 9.6, therefore, we obtain

(9.6)images

In calculating the total energy stored in the electric field, we sum over all of the rectangular “cells” in the structure. We refer to the cell by the node number of the lower left-hand node. Previously, since the structures being studied had a uniform dielectric constant (k = 1), we multiplied the entire expression by the permittivity of free space. This must now be modified so that each cell's contribution can be multiplied by its own permittivity.

9.4 Example: Structure with a Dielectric Interface

Figure 9.7 shows the boxed stripline of Figure 8.4, now called a microstripline because the center conductor is sitting on a dielectric. Figure 9.7 shows only the right-hand side of the symmetric left-to-right structure.

c9-fig-0007

FIGURE 9.7 Boxed microstrip transmission line.

The dielectric constant in this example is K = 9.7. (This 9.7 value is the dielectric constant of alumina, also termed amorphous aluminum oxide, a common microwave frequency dielectric substrate material.

The results of this calculation, for a zero-thickness conductor, is that the capacitance predicted by fd2.m increases by a factor of ~5.3. In other words, the effective relative dielectric constant of the structure is 5.35.

The modifications of fd2.m used to perform this calculation are

  1. Define er = 9.7 at or near the top of the program.
  2. At the bottom of the loops where the a values are initialized, add
    if j == 0;
     a(k0,k0) = -2*(1 + er_diel);
     a(k0,k0 + 1) = (er_diel + 1)/2;
     a(k0,k0-1) = (er_diel + 1)/2;
     a(k0,k2) = er_diel;
    end
    
  3. Pass the er value to the capacitance calculation function along with the voltage array.
  4. Inside the capacitance calculation function, near the top, define the j interface value

     j_interface = ceil(Sy/2);
    
  5. Modify the calculation of the total energy to read

     term = Uxsq + Uysq;
     if j < j_interface, term = term*er_diel; end;
     Utot = Utot + term;
    

If different center conductor thicknesses are to be considered, the center conductor typically is not symmetric in y — the practical situation is that the center conductor sits “on” the dielectric material.

An example of a nonuniform dielectric structure will be presented in Section 9.5.

9.5 Axisymmetric Cylindrical Coordinates

In three-dimensional (3d) cylindrical coordinates, in order to emphasize that there are three terms — one for each spatial direction — Laplace’s equation is typically written as follows:

(9.7)images

For our purposes, it is useful to expand the first term:

(9.8)images

We will consider only problems that are axisymmetric, that is, in which there is no φ dependence. The step sizes in i and j are hi and hJ, respectively. When r is not 0, quoting earlier results, we obtain

(9.9)images

where ri is the conventional (cylindrical coordinate) radial distance from the axis (0,j) to the point (i, j).

This formula becomes problematic at r = 0. However, since we are dealing only with situations that are axially symmetric, the derivative of V with respect to r at r = 0 must be 0, and L’Hospital’s rule applies. In the limit as r goes to 0, we have

(9.10)images

and therefore for r = 0, we get

(9.11)images

The numerical equations to be solved are as follows: (1) for ri = 0

(9.12)images

and (2) for ri≠ 0

Figure 9.8 shows two parallel circular electrodes, 500 units apart. The bottom electrode has a conical metal tip sitting on it. The tip is centered at r = 0. If we set hr = hz = 1, the tip is 20 units wide at its base and 10 units high. Setting the tip dimensions to these numbers is convenient because the boundary condition of the tip surface passes through node points (10,0), (9,1), …, (0,10). The two electrodes are set to 1 V apart, with the tip at the potential of the bottom electrode.

c9-fig-0008

FIGURE 9.8 Conical metal tip between parallel metal plates.

The boundary condition shown at the perimeter of the circular electrodes has not been discussed thus far. The voltage is specified as a linear gradation with y between the voltages at the two electrodes. If we had only two parallel plates with lateral dimensions much larger than their separation, we would expect to find this voltage distribution, equivalent to a uniform vertical electric field of value images (volts per length unit), near r = 0. Since there is a small tip sitting at r = 0 on the bottom electrode, here we should expect some change from this simple uniform voltage distribution in this tip in this region. However, moderately far from this region, with very large (even infinitely large) parallel plates, the distribution will be extremely close to the uniform distribution. In other words, this boundary condition is an approximation of infinite parallel plates.

MATLAB program fd7.m — which presents an example of cylindrical coordinates with a sharp tip between parallel plates — sets up and runs this simulation.

%fd7.m   Small tip between two plates, cylindrical coordinates
close; clear

hi = 2;  hj = 1;  % r and z step sizes
Itip = 20;
Jtip = Itip; % tip dimensions
Imin = 1; Imax = 100; Jmin = 1; Jmax = 250;  % ultimately 250 and 500
[i,j,Kmax] = get_ijk(Imin,Imax,Jmin, Imax,Jmax,0); % number of variables

a = sparse(Kmax,Kmax); % zeros(Kmax); % allocate the coefficient array
b = zeros(Kmax,1); % allocate the bcs array

% initialize a as if every variable is free
for j = 1 : Jmax
 for i = 1 : Imax
  [i,j,k0] = get_ijk(Imin,Imax,Imin, i,j,0);
  if i == 1
   a(k0,k0) = -2*(2/hi^2 + 1/hj^2);
   a(k0,k0 + 1) = 4/hi^2;
   if j < Jmax, a(k0,k0 + Imax) = 1/hj^2; end;
   if j > 1, a(k0,k0-Imax) = 1/hj^2; end;
  else
   r = (i-1)*hi;
   a(k0,k0) = -2*(1/hi^2 + 1/hj^2);
   if k0 < Kmax, a(k0,k0 + 1) = 1/hi^2 + 2/r/hi; end;
   if k0 > 1, a(k0,k0-1) = 1/hi^2 - 2/r/hi; end;
   if j < Jmax, a(k0,k0 + Imax) = 1/hj^2; end;
   if j > 1, a(k0,k0-Imax) = 1/hj^2; end;
  end
 end
end

% bottom plate bc (v = 0), top plate bc (v = 1)
for i = 1 : Imax
 [i,j,k] = get_ijk(Imin,Imax,Jmin, i,1,0);
 a(k,:) = 0; a(k,k) = 1;
 [i,j,k] = get_ijk(Imin,Imax,Jmin, i,Jmax,0);
 a(k,:) = 0; a(k,k) = 1;
 b(k) = 1;
end

% tip bc (V = 0)
for i = 1 : Itip
 for j = 1 : Jtip - i +1
  [i,j,k] = get_ijk(Imin,Imax,Jmin, i,j,0);
  a(k,:) = 0; a(k,k) = 1;
 end
end

% perimeter bc (v = y/Jmax)

i = Imax
for j = 1 : Jmax
  [i,j,k] = get_ijk(Imin,Imax,Jmin, i,j,0);
  a(k,:) = 0; a(k,k) = 1;
  b(k) = (j-1)/(Jmax-1);
end

% solve for voltages
v = a;

% xy voltage array for ongoing calcs

Volts = zeros(Imax,Jmax);
for i = 1 : Imax
 for j = 1 : Jmax
  [i,j,k] = get_ijk(Imin,Imax,Jmin, i,j,0);
  Volts(i,j) = v(k);
 end
end

% Plot the region near the tip
Isize = Imax/2; Jsize = Isize;
Volts2 = Volts(1:Isize,1:Jsize);
[r,z] = meshgrid(1:Jsize, 1:Isize);
contour (z,r,Volts2,[.025:.025:.15],'k')
hold on
%set (H, 'color', [0,0,0])
x_tri = [1, Itip, 1]; y_tri = [1, 1, Jtip];
fill (x_tri, y_tri, [.8,.8,.8])
axis ([1 50 1 50])
text (35,9,'0.025 volts')
text (35,15,'0.050 volts')
text (35,21,'0.075 volts')
text (35,27,'0.100 volts')
xlabel ('r')
ylabel ('z')
text (5,7, 'tip')

% Some E field information
E0 = Volts(1,Jmax) - Volts(1,Jmax-1)
Etip = Volts(1,Jtip + 1)
Emult = Etip/E0

Figure 9.9 shows several equipotential surfaces near the “tip of the tip” (ToT). These surfaces are equally spaced in terms of voltage, 0.025 V apart. Away from the ToT, in any direction, they are also equally spaced geometrically, and the simple calculation Ez = V(i,j + 1) – V(i,j) = 0.004 gives the expected result of the value of the applied voltage (1 V) divided by the number of gridpoints in y (250).

c9-fig-0009

FIGURE 9.9 Equipotential surfaces near the sharp tip.

Near the ToT, however, the equipotential surfaces bunch together. This means that the electric field peaks near the ToT. The same simple Ez calculation as found above at the ToT yields 0.058 V, a factor of 14.5 greater than 0.004.

The effect on tip sharpness on peak electric field can easily be investigated by changing the sharpness of the tip. We could do this, in fd7.m, by changing either the Itip or Jtip value, but this would be an inconvenient approach because then the surface of the tip structure would not pass through gridpoints and we'd have to upgrade the program to properly handle the boundary conditions. An easier solution would be to change hi and/or hj. Changing hi to 0.5, for example, increases the peak field multiplication factor to 18.5; changing hi to 2.0 decreases the factor to 7.7. Note that the axes of the contour plot generated by fd7.m (Figure 9.9) do not scale with these changes.

These results point out a basic property of electric fields — they peak at sharp points; the sharper the point, the higher the degree of peak of the field. This is very bad news when materials breakdown is a concern, but it is very useful news when you want a localized high electric field. At very a high electric field (of the correct polarity), electrons tunnel through the surface of a metal electrode and launch themselves (typically into a vacuum).2 This is a useful way to get electrons into a vacuum for devices such as a scanning electron microscope, as discussed in Chapter 2.

Two typical methods for building a field emission device: (1) using the Spindt tip structure3 and (2) placing a long needle protruding from the base electrode.

The important characteristics of the Spindt tip structure (method 1) are shown in Figure 9.10. A tip as described in the previous figure is “grown” on an electrode in a circular well in a dielectric layer, typically about 1 µm deep. A common dielectric material is silicondioxide with a relative dielectric constant of 4.0. An additional metal layer, the gate, is deposited onto the surface of the dielectric layer. Geometries and voltage are arranged so that the voltage on the upper layer (the anode) is not sufficient to create field emission. The local field due to the gate voltage, which is much lower than the anode voltage, is used to create the field emission and modulate the current flow.

c9-fig-0010

FIGURE 9.10 Spindt tip field emitter structure.

Since this structure will be modeled using cylindrical coordinates, the region shown shaded in Figure 9.10 does not appear explicitly in the calculations.

In this structure, the only dielectric air interface is at the sides of the well. Therefore, the only change needed is that for i = itip and j < jgate = jtip, equation (9.13) must become

(9.14)images

MATLAB program fd8.m — describing the FD Spindt tip model — sets up and solves the cylindrical coordinate, dielectric interface, structure described above.

%fd8.m   fd7  modified to a Spindt Tip structure
close

hi = 1; hj = 1; % r and z step sizes
Itip = 20;
Jtip = Itip; % tip dimensions
Imin = 1; Imax = 100; Jmin = 1; Jmax = 250; % ultimately 250 and 500
[i,j,Kmax] = get_ijk(Imin,Imax,Jmin, Imax,Jmax,0); % number of variables
Jgate = Jtip;
Vanode = 1000; Vgate = 100; % Anode and gate voltages
Krel = 4.0; % dielectric constant

a = sparse(Kmax,Kmax); % zeros(Kmax); % allocate the coefficient array
b = zeros(Kmax,1); % allocate the bcs array

% initialize a as if every variable is free
for j = 1 : Jmax
 for i = 1 : Imax
  [i,j,k0] = get_ijk(Imin,Imax,Imin, i,j,0);
  if i == 1
   a(k0,k0) = -2*(2/hi^2 + 1/hj^2);
   a(k0,k0 + 1) = 4/hi^2;
   if j < Jmax, a(k0,k0 + Imax) = 1/hj^2; end;
   if j > 1, a(k0,k0-Imax) = 1/hj^2; end;
  else
   r = (i-1)*hi;
   a(k0,k0) = -2*(1/hi^2 + 1/hj^2);
   if i < Imax, a(k0,k0 + 1) = 1/hi^2 + 2/r/hi; end;
   a(k0,k0-1) = 1/hi^2 - 2/r/hi;
   if j < Jmax, a(k0,k0 + Imax) = 1/hj^2; end;
   if j > 1, a(k0,k0-Imax) = 1/hj^2; end;
   if (i == Itip) & (j < Jtip) % dielectric interface
    a(k0,k0) = a(k0,k0)*(1 + Krel)/2;
    if i < Imax, a(k0,k0 + 1) = a(k0,k0 + 1)*Krel; end;
    a(k0,k0 + Imax) = a(k0,k0 + Imax)*(Krel + 1)/2;
    if j > 1, a(k0,k0-Imax) = a(k0,k0-Imax)*(Krel + 1)/2; end;
   end
  end
 end
end

% bottom plate bc (V = 0), top plate bc (V = 1)
for i = 1 : Imax
 [i,j,k] = get_ijk(Imin,Imax,Jmin, i,1,0);
 a(k,:) = 0; a(k,k) = 1;
 [i,j,k] = get_ijk(Imin,Imax,Jmin, i,Jmax,0);
 a(k,:) = 0; a(k,k) = 1;
 b(k) = Vanode;
end

% tip bc (V = 0)
for i = 1 : Itip
 for j = 1 : Jtip - i +1
  [i,j,k] = get_ijk(Imin,Imax,Jmin, i,j,0);
  a(k,:) = 0; a(k,k) = 1;
 end
end

% gate bc (V = Vgate)
j = Jtip;
for i = Itip : Imax*.8
 [i,j,k] = get_ijk(Imin,Imax,Jmin, i,j,0);
 a(k,:) = 0; a(k,k) = 1;
 b(k) = Vgate;
end

% perimeter bc (V = Vanode*y/Jmax)
i = Imax;
for j = 1 : Jmax
 [i,j,k] = get_ijk(Imin,Imax,Jmin, i,j,0);
 a(k,:) = 0; a(k,k) = 1;
 b(k) = (j-1)/(Jmax-1)*Vanode;
end

% solve for voltages
v = a;
% xy voltage array for ongoing calcs
Volts = zeros(Imax,Jmax);
for i = 1 : Imax
 for j = 1 : Jmax
  [i,j,k] = get_ijk(Imin,Imax,Jmin, i,j,0);
  Volts(i,j) = v(k);
 end
end

% Some E field information
Etip = Volts(1,Jtip + 1:Jtip + 21) - Volts(1,Jtip:Jtip + 20)
plot([1:21],Etip)
%axis([1 21 0 .08])

Figure 9.11 shows (some of) the output of this program for Vanode = 1 V, Vgate = 0.0, and 0.1 V.

c9-fig-0011

FIGURE 9.11 Ez near ToT of a Spindt tip structure.

Figure 9.11 shows that the gate voltage has significant control over the electric field at the ToT. The peak field quickly falls back to the background field as z increases (away from) the ToT. Note that the background field is slightly higher when Vg = 0.0 than when Vg = 0.1 because this field is determined by the voltage difference Va - Vg.

In typical applications, a Spindt tip structure's anode will be the ~10 mm away from the tip, while the tip itself is about 1 µm high and wide. Scaling Va to keep the same background field as in this example, we quickly approach the situation where Va can be thousands of volts while Vg is typically ~100 V. This latter voltage is determined by the diameter of the gate well and the physical properties of the gate material. There is tremendous circuital advantage to controlling electron emission by modulating 100 V as compared to modulating, say, 5000 V. Selection of the anode voltage level is based on the application — this is the energy that the electrons will have when they arrive at the anode.

Method 2, mentioned above, consists in building a field emission tip by simply placing a long (relative to width) needle sticking up from the base electrode. This structure has been implemented with fine wires and more recently with carbon nanotube;4 it is typically used when only one emitter — rather than an array of emitters (e.g., in a scanning electron microscope) — is needed.

Figure 9.12 shows the same tip as used in the previous two examples, but now it is sitting on a circular pedestal of the same diameter as that of the base of the tip. The peak field at the tip is now 0.132 (V/m). Wresting the ToT away from the base electrode is clearly an important factor in ensuring a high electric field.

c9-fig-0012

FIGURE 9.12 Sharp needle tip between two electrodes.

Modifying fd8.m to model this structure is very simple. Remove all references to a dielectric interface; remove the gate boundary condition and replace it with a simple pedestal boundary condition.

Figure 9.13 shows the relationship between post height, post diameter, and peak Ez.

c9-fig-0013

FIGURE 9.13 Peak field versus post height and post diameter for a sharp tip.

The way to achieve a high peak field is clearly to use a higher, narrower, post. As Figure 9.13 shows, the field nearly doubles when the post height doubles. This cannot simply be attributed to the tip’s closer proximity to the anode — the sharp tip is distorting the field near it and creating the high field condition.

In the tip examples in this section, the actual details of the ToT were glossed over and an ideal (0 curvature of radius) tip was assumed. This simplification becomes problematic on close proximity to the ToT (close proximity is a relative term here, difficult to define because it is usually measured in comparison to the radius of curvature).

9.6 Symmetry Boundary Condition

Figure 9.14 shows a situation where existing geometric symmetry can be utilized to create a boundary condition that reduces the extent of the problem to be solved.

c9-fig-0014

FIGURE 9.14 Symmetry example with row of nodes on the line of symmetry.

The dashed vertical line in the figure is clearly an axis of symmetry. By inspection, then, V3 = V1 and so forth. We can solve for all the node voltages by just finding the voltages on the left side of the symmetry line up to and including the voltages of the nodes on the symmetry line. For the node shown, we obtain

(9.15)images

Figure 9.15 shows a second example of a structure with a line of symmetry. In this case, however, the line of symmetry passes through two lines of nodes rather than a single line of nodes.

c9-fig-0015

FIGURE 9.15 Symmetry example with line of symmetry between rows of nodes.

In this case, for the node shown the symmetry dictates that, V1 = V 0, so that

(9.16)images

Examples of establishing symmetry boundary conditions in FD models are presented in Section 9.7.

9.7 Duality, and Upper and Lower Bounds to Solutions for Transmission Lines

As explained in Chapter 9, the capacitance calculated using the stored energy calculation will always exceed the exact capacitance; that is, it is an upper bound to the estimate of the capacitance. This is why we typically see capacitance falling as we increase the resolution of a calculation — the higher resolution solution results in a more accurate description of V(x,y).

In a transmission line structure, as shown in Chapter 2, the capacitance (per unit length) of a transmission line is related to the inductance (per unit length) of the same line by

where, for an air dielectric system, v0 is the speed of light.

If we had a technique for calculating the inductance of the transmission line that produced an inductance estimate that is an upper bound to the exact inductance, then, using equation (9.17), we would obtain a capacitance that is a lower bound to the exact capacitance. We wouldn't know exactly where in between these two bounds the exact capacitance lies, but by averaging the two, we would get an estimate that is more accurate than either of the bounds.

Fortunately, such a technique exists for many practical geometries, and it is hardly more difficult to implement than was the original capacitance calculation.

Figure 9.16 is the cross section of a square transmission line, shown on a very low- resolution grid.

c9-fig-0016

FIGURE 9.16 Cross section of a square transmission line on a low-resolution grid.

Figure 9.17a shows the upper right quarter of the same line. All four such quarters of the line are symmetric, and the dashed line edges shown are the symmetry boundary conditions discussed in Section 9.6. These edges are also called magnetic walls. This means that, if there were a current flowing through the line, the magnetic fields (which are normal to the electric fields) would be normal to these edges. This is directly analogous to the electric fields because the applied voltage is normal to the electric walls: the solid lines in Figure 9.17a.

c9-fig-0017

FIGURE 9.17 Upper right quarter of structure in Figure 9.16; (a) imagesth of original line; (b) dual of (a).

The edges of the structure are labeled E1 – E6 in Figure 9.17a,b. The individual labels have no particular physical or mathematical significance; this is merely for convenience in matching edges to the computer code to be presented below.

The principle of duality in electrostatics states that if we take a structure such as the one shown in Figure 19.17a, interchange the electric and the magnetic walls, and drive the system with a current at the (new) electric walls, we will get a solution that will enable us to calculate the energy stored in the magnetic rather than the electric field of the original system.5

Interchanging the electric and magnetic walls (Figure 9.17b), we get only this dual structure If we apply V′ to this structure as shown in the figure and solve for the voltage distribution vij, we would find the total stored energy now located in the magnetic field, which is the dual of the electric field:

The summation is over all the cells, and the integral is over the area of each cell — this is identical to the formula for finding the energy stored in the electric field in Chapter 8. The multiplier 4 in the numerator to gives us the total energy (per unit length) of the line; the structure shown occupies imagesth only the line. This multiplier is also placed in the original line energy equation if only imagesth of the structure is in use or under study.

The 16 in the denominator of equation (9.18) is unique to the Um equation, it doesn't show up in the Ue equation. When working with the original line, the applied voltage is identically applied to all four quarter sections and the energy calculated is correct. In the dual case, however, V′ is really a current. Applying a current of 1 to a quarter of the structure means that we're applying a total current of 4 to the entire structure.

Going back to the original line, we have

(9.19)images

Since, for convenience, we have previously always set one electrode voltage at 0 and the other electrode voltage at 1, the voltage difference V = 1 never appeared explicitly in the calculations.

In the case of the magnetic field, however, V′ = 1 in this example means a current of 4, and hence we must normalize the energy by placing the 42 = 16 in the denominator of the RHS of equation (9.18).

Once we know Um, we obtain

(9.20)images
(9.21)images

We now have the bounded approximation for the exact value of C that we want:

(9.22)images

Performing the calculations using the nodes shown in Figure 19.17a,b, we get the results shown in Figure 9.18.

c9-fig-0018

FIGURE 9.18 High and low boundary capacitances for the square transmission line.

This problem can be solved analytically using a conformal transformation,6 yielding 90.612 pF.7 For ns = 1, while both the high and low capacitances are a few percent away from the exact answer, the average of these two capacitances is lightly less than 0.5% away from the exact answer. As ns is increased, both the high and low capacitances converge to the exact answer, and for ns ~ >4, the averages are almost exact.

Program fd10.m — describing an example of high and low bounding capacitance calculation — performs the calculations used to generate Figure 9.18:

%fd10.m  A very simple FD example with adjustable resolution
% showing upper and lower bounded capacitance solutions

eps0 = 8.854;
ns = 6; % scaling factor for resolution studies
Imax = 4*ns + 1 ; Jmax = 4*ns + 1; % definition of array
Ic = 2*ns + 1; Jc = 2*ns + 1; % inner edges
[i,j,Kmax] = get_ijk(1,Imax,1, Imax,Jmax,0);  % number of variables

a = sparse(Kmax,Kmax); % allocate the coefficient array
b = zeros(Kmax,1);     % allocate the bcs array

% First solve the physical structure ------------------------------
% initialize a as if every variable is free
for j = 1 : Jmax
 for i = 1 : Imax
[i,j,k0] = get_ijk(1,Imax,1, i,j,0);
  a(k0,k0) = -4;
  if i < Imax, a(k0,k0 + 1) = 1; end
  if i > 1,  a(k0,k0-1) = 1; end
  k1 = k0 + Imax;
  if j < Jmax, a(k0,k1) = 1; end
  k2 = k0-Imax;
  if j > 1, a(k0,k2) = 1; end
 end
end

% bcs:
% If electrical, clean out the appropriate row, replace it w/ 1 on diagonal,
% replace with 0 or 1 in b array as appropriate
% If magnetic, correct appropriate off-diagonal term.

%E1 - Electrical, V = 1
j = Jmax;
for i = 1 : Imax
 [i,j,k] = get_ijk(1,Imax,1, i,j,0);
 a(k,:) = 0; a(k,k) = 1;
 b(k) = 1;
end

%E2 - Electrical, V = 1
i = Imax;
for j = 1 : Jmax
 [i,j,k] = get_ijk(1,Imax,1, i,j,0);
 a(k,:) = 0; a(k,k) = 1;
 b(k) = 1;
end

%E3 - Magnetic, down facing
j = 1;
for i = Ic + 1 : Imax - 1
 [i,j,k] = get_ijk(1,Imax,1, i,j,0);
 a(k,k + Imax) = 2;
end

%E4 - Electric, V = 0
i = Ic;
for j = 1 : Jc
 [i,j,k] = get_ijk(1,Imax,1, i,j,0);
 a(k,:) = 0; a(k,k) = 1;
end

%E5 - Electric, V = 0
j = Jc;
for i = 1 : Ic
 [i,j,k] = get_ijk(1,Imax,1, i,j,0);
 a(k,:) = 0; a(k,k) = 1;
end

%6 - Magnetic, left facing
i = 1;
for j = Jc + 1 : Jmax - 1
 [i,j,k] = get_ijk(1,Imax,1, i,j,0);
 a(k,k + 1) = 2;
end

% solve for voltages
v = a;

% We’ll need an xy voltage array for ongoing calcs

Volts = zeros(Imax,Jmax);
for i = 1:Imax
 for j = 1:Jmax
  [i,j,k] = get_ijk(1,Imax,1, i,j,0);
  Volts(i,j) = v(k);
 end
end

C_high = 4*C_Dual(Volts, Ic, Jc, eps0)
% Now solve the dual structure ----------------------------------

a = sparse(Kmax,Kmax);  % allocate the coefficient array
b = zeros(Kmax,1);  % allocate the bcs array

% initialize a as if every variable is free
for j = 1 : Jmax
 for i = 1 : Imax
  [i,j,k0] = get_ijk(1,Imax,1, i,j,0);
  a(k0,k0) = -4;
  if i < Imax, a(k0,k0 + 1) = 1; end
  if i > 1,    a(k0,k0-1) = 1; end
  k1 = k0 + Imax;
  if j < Jmax, a(k0,k1) = 1; end
  k2 = k0-Imax;
  if j > 1, a(k0,k2) = 1; end
 end
end

%E1 - Magnetic, looking up
j = Jmax;
for i = 2 : Imax
 [i,j,k] = get_ijk(1,Imax,1, i,j,0);
 a(k,k-Imax) = 2;
end

%E2 - Magnetic, looking right
i = Imax;
for j = 2 : Jmax
 [i,j,k] = get_ijk(1,Imax,1, i,j,0);
 a(k,k-1) = 2;
end

%E3 - Electric, V = 0
j = 1;
for i = Ic : Imax
 [i,j,k] = get_ijk(1,Imax,1, i,j,0);
 a(k,:) = 0; a(k,k) = 1;
end

%E4 - Magnetic, looking left
i = Ic;
for j = 2 : Jc-1
 [i,j,k] = get_ijk(1,Imax,1, i,j,0);
 a(k,k + 1) = 2;
end

%E5 - Magnetic, looking down
j = Jc;
for i = 2 : Ic-1
 [i,j,k] = get_ijk(1,Imax,1, i,j,0);
 a(k,k + Imax) = 2;
end

%6 - Electric, V = 1
i = 1;
for j = Jc : Jmax
 [i,j,k] = get_ijk(1,Imax,1, i,j,0);
 a(k,:) = 0; a(k,k) = 1;
 b(k) = 1;
end

% zero out the cut away region - not efficient, but easy this way
for i = 1 : Ic-1
 for j = 1 : Jc - 1
  [i,j,k] = get_ijk(1,Imax,1, i,j,0);
  a(k,:) = 0; a(:,k) = 0; a(k,k) = 1;
 end
end
% solve for voltages
v = a;

% We’ll need an xy voltage array for ongoing calcs

Volts = zeros(Imax,Jmax);
for i = 1:Imax
 for j = 1:Jmax
  [i,j,k] = get_ijk(1,Imax,1, i,j,0);
  Volts(i,j) = v(k);
 end
end

C_low = eps0/(4*C_Dual(Volts, Ic, Jc, eps0)/16/eps0)
C_avg = (C_high + C_low)/2

• Program C_dual.m is also useful here:

function C = C_Dual(V, Ic, Jc, eps0)
% Calculate C in a rectangular box using Stored Energy
 [Sx,Sy] = size(V);
 eps0 = 8.854;

 Utot = 0;
 for i = 1 : Sx - 1
  for j = 1 : Sy - 1
   if (i > = Ic) | (j > = Jc)
    a = V(i,j); b = V(i + 1,j); c = V(i + 1,j + 1); d = V(i,j + 1);
    Uxsq = 1./3.*((a - b)^2 + (d - c)^2 + (a - b)*(d - c));
    Uysq = 1./3.*((a - d)^2 + (b - c)^2 + (a - d)*(b - c));
    Utot = Utot + Uxsq + Uysq;
%     fprintf ('%d %d %f %f %f %f
', i, j, a,b,c,d)
   end
  end
 end

 C = Utot*eps0;
end

Program fd10.m is written to explicitly show how each boundary condition is handled for both the physical structure and its dual. Consequently there are very many lines of code for a relatively simple job. Note also that the capacitance calculation C_dual.m had to be modified from its previous version to avoid acquisition of spurious numbers from the hole in the center of the line. Also, the integrals used to calculate the stored energy are shown without scaling factors ε or μ. As such, they are not dimensionally electric or magnetic field energies. The program performs all the proper scalings.

MATLAB program fd10.m can be used to repeat the example of Chapter 8. In fd10.m simply set, we obtain Imax = 20*ns + 1; in line 6 and Jc = 1; in line 7.

The resulting program, as a result of the latter change, is now carrying some baggage that it doesn't actually need, but the calculations are correct.

Figure 9.19 shows the result of this exercise. The high capacitance results are, of course, a repeat of the results in Chapter 8. They were calculated much more quickly this time because the program took advantage of the symmetries of the structure. The average of the high and low capacitances in this example barely change with increase in ns, demonstrating the capability of this technique to predict structural capacitances accurately at very modest grid resolutions.

c9-fig-0019

FIGURE 9.19 Repeat of example from Chapter 8.

Daly presents a number of similar examples, showing in detail how to set up the dual boundary conditions.7

9.8 Extrapolation

Calculation of capacitance (and transmission line properties) using the dual network technique works so well that we'd like to use it all the time. Unfortunately, in certain situations it doesn't work. For transmission line cross sections, we must be able to specify magnetic walls. When there are no axes of symmetry, this cannot be done easily, if at all. Figure 9.20 illustrates such a situation.

c9-fig-0020

FIGURE 9.20 Transmission line cross section with no symmetry axes.

Another situation that won't work is described in the example presented in Section 9.9: a three-dimensional (3d) problem with an electrode structure positioned somewhere in a box. We cannot draw a dual structure because we cannot describe a current path. Stating this another way, while we can define a capacitance between the inner conductor(s) and the box, we cannot define an inductance.

Working only with the electrical (physical) circuit capacitance, all we know is that we get asymptotically closer to the exact answer as we increase the grid size.

MATLAB program fd12.m performs a fit to the function

(9.23)images

This program and a related one are shown here:

  • Program myfit.m:
    function [ fit ] = myfit( params, Input, Actual)
    % Trial fitting function for extrapolating capacitance data
    
     c1 = params(1); c2 = params(2); c3 = params(3);
     Fit_Curve = c1 + c2./Input.^c3;
     Err_Vec = Fit_Curve - Actual;
     fit = sum(Err_Vec.^2);
    
    end
    
  • Program fd12.m—curve fit program for extrapolating capacitance value:
    % Extrapolation curve fitting example
    close
    
    % data from stripline program
    %ns = [1 : 6];
    %C = [35.35 34.28 33.92 33.75 33.64 33.57];
    
    ns = [1 : 3];
    C = [69.73 64.43 62.76]
    
    Starting = [60 5 1];
    %Starting = [33, 3, 1]; % Guess at a fit
    
    options = []; % Accept the default optins
    
    Fits = fminsearch(@myfit, Starting, options, ns, C)
    
    plot (ns, C, 'kx') % Data
    hold on
    
    x = [1 : .1 : 6];
    plot (x, Fits(1) + Fits(2)./x.^Fits(3), 'k') %Fit
    xlabel ('ns')
    ylabel ('C')
    H = line ([5 6], [Fits(1), Fits(1)])
    set (H, 'color', 'k')
    text (3.5, Fits(1), 'Extrapolated Value')
    
    fit_errs = (C - (Fits(1) + Fits(2)./ns.^Fits(3)))./C
    

Program fd12.m uses the MATLAB function fminsearch.m to perform a downhill simplex fit.8 For the dataset shown in Figure 9.19 (Chigh data), the program produces

(9.24)images

This predicted curve and the original data are shown in Figure 9.21.

c9-fig-0021

FIGURE 9.21 Results of extrapolation curve fit.

The resulting fit agrees with the (six) data points to four significant figures. It extrapolates (letting n go to infinity) a capacitance of 33.22 pF/m. This is approximately 0.2% different from the mean value predicted by the upper-and-lower bound calculations (at ns = 6).

Unfortunately, there's no formal way to determine the best curve fitting function or to know whether the resolutions chosen are optimum; there's some art involved here. Three rules of thumb are that (1) there must be enough data points, (2) the highest resolution for these points is high enough for the capacitance–resolution curve to plateau, and (3) the fit to the existing data should be very good. One empirical caveat from experience — don't include very low-resolution data in the curve fit. Use at least three values that (and again, this is an experience judgment call) describe the geometry adequately.

9.9 Three-Dimensional Grids

Figure 9.22 shows a square plate (1 × 1 m) centered 0.5 m above the bottom electrode of a cubic box. The box is 20 × 20 × 20 m high. The intent here is to ensure that the sidewalls and topwalls are far enough away from the square plate that they do not contribute meaningfully to the plate-to-box capacitance. This assumption will be checked.

c9-fig-0022

FIGURE 9.22 Square plate in a cubic box.

Writing Laplace’s equation on a 3d grid is a simple extension of writing it on a 2d grid:

(9.25)images

In three dimensions, the number of gridpoints can be very large and it is worthwhile to look for symmetries. This example has symmetry about the X and Y axes. Working in the right left quadrant of the X–Y plane, there are symmetry planes at x = 0 and y = 0.

In two dimensions we didn't have to worry about scaling. If we wanted to change the resolution of our problem, we would simply multiply all dimensions by an integer. For example, a 5-unit-wide strip sitting in a 10 × 20 box would become a 20-unit-wide strip sitting in a 40 × 80 box. Since only the y : x ratio determined capacitance, the results would not change. The voltage distribution would adjust itself properly and electric fields calculated based on the (1 × 1) voltage cell would be correct.

In three dimensions this automatic scaling does not work. Consider, for example, a parallel plate capacitor and its ideal parallel plate capacitance. If the electrode dimensions are 1 × 1 m with a 1 m separation, then

(9.26)images

Now, suppose that we scale all dimensions by n:

(9.27)images

When scaling a geometry from its original dimensions, we must divide the new calculated capacitance by the scaling factor, assuming that the grid node separations are kept constant. This simple derivation can be repeated formally using the stored electric field integral and the electric field calculation; the conclusion will, of course, be the same.

The stored energy (in a cell) expression is very lengthy. It is derived by rewriting the voltage interpolation function in Chapter 8 for three dimensions and then following the same procedure that was shown in that chapter. The reader who needs this expression can copy it directly from the source code listing for this example. Here are three lated programs:

  • Program fd13.m — plate in a 3d box:
    %fd13.m  3d example, taking advantage of symmetry
    clc
    
    ns = 3; % scaling factor for resolution studies
    Imin = 0; Imax = 10*ns ; Jmin = 0; Jmax = 10*ns; % definition of array
    Mmin = -2*ns; Mmax = 10*ns;
    Ic1 = 0; Ic2 = 2*ns; Jc1 = 0; Jc2 = 2*ns; % inner conductor
    Mc = 0;
    
    getk = build_ketk(Imin, Imax, Jmin, Jmax, Mmin, Mmax);
    
    [i,j,m,Kmax] = get_ijkm(Imin,Imax,Jmin,Jmax,Mmin, Imax,Jmax,Mmax,0); % number of variables
    a = spalloc(Kmax, Kmax, 6*Kmax); % allocate the coefficient array
    b = zeros(Kmax,1); % allocate the bcs array
    
    tic
    % initialize a as if every variable is free
    for m = Mmin : Mmax
     for j = Jmin : Jmax
      for i = Imin : Imax
       [i,j,m,k0] = get_ijkm(Imin,Imax,Jmin,Jmax,Mmin, i,j,m,0);
       a(k0,k0) = -6;
       if i < Imax, a(k0,k0 + 1) = 1; end
       if i > Imin, a(k0,k0-1) = 1; end
       if j < Jmax
        k1 = k0 + (Imax-Imin) + 1;
        a(k0,k1) = 1;
       end
       if j > Imin
        k2 = k0 - (Imax-Imin) - 1;
        a(k0,k2) = 1;
       end
       if m < Mmax
        k3 = k0 + (Imax-Imin + 1)*(Jmax-Jmin + 1);
        a(k0,k3) = 1;
       end
       if m > Mmin
        k4 = k0 - (Imax-Imin + 1)*(Jmax-Jmin + 1);
        a(k0,k4) = 1;
       end
      end
     end
    end
    toc
    
    % bcs
    tic
    
    i = Imax; % right wall
    for j = Jmin : Jmax
     for m = Mmin: Mmax
      [i,j,m,k] = get_ijkm(Imin,Imax,Jmin,Jmax,Mmin, i,j,m,0);
      a(k,:) = 0; a(k,k) = 1;
     end
    end
    
    j = Jmax; % back wall
    for i = Imin: Imax
     for m = Mmin : Mmax
      [i,j,m,k] = get_ijkm(Imin,Imax,Jmin,Jmax,Mmin, i,j,m,0);
      a(k,:) = 0; a(k,k) = 1;
     end
    end
    
    % top and bottom walls
    for i = Imin : Imax
     for j = Jmin : Jmax
      [i,j,m,k] = get_ijkm(Imin,Imax,Jmin,Jmax,Mmin, i,j,Mmin,0);
      a(k,:) = 0; a(k,k) = 1;
      [i,j,m,k] = get_ijkm(Imin,Imax,Jmin,Jmax,Mmin, i,j,Mmax,0);
      a(k,:) = 0; a(k,k) = 1;
        end
    end
    
    % i image
    i = Imin;
     for j = Jmin : Jmax-1;
      for m = Mmin + 1 : Mmax-1;
       [i,j,m,k] = get_ijkm(Imin,Imax,Jmin,Jmax,Mmin, i,j,m,0);
       a(k,k + 1) = 2;
     end
    end
    
    % j image
    j = Jmin;
    for i = Imin : Imax-1
     for m = Mmin + 1 : Mmax-1
      [i,j,m,k] = get_ijkm(Imin,Imax,Jmin,Jmax,Mmin, i,j,m,0);
      a(k, k + Imax-Imin + 1) = 2;
     end
    end
    
    m = Mc; % center conductor
    for i = Ic1 : Ic2
     for j = Jc1 : Jc2
      [i,j,m,k] = get_ijkm(Imin,Imax,Jmin,Jmax,Mmin, i,j,m,0);
      a(k,:) = 0; a(k,k) = 1; b(k) = 1;
     end
    end
    toc
    % solve for voltages
    v = a;
    
    % we’ll need an xy voltage array for ongoing calcs
    
    Sx = Imax - Imin + 1; Sy = Jmax - Jmin + 1;
    Sz = Jmax - Jmin + 1;
    Volts = zeros(Sx,Sy,Sz);
    for i = Imin : Imax;
     for j = Jmin : Jmax
      for m = Mmin : Mmax
       [i,j,m,k] = get_ijkm(Imin,Imax,Jmin,Jmax,Mmin, i,j,m,0);
       Volts(i-Imin + 1,j-Jmin + 1,m-Mmin + 1) = v(k);
      end
     end
    end
    
    C = C_Energy_3d(Volts, ns)
    
  • Program get_ijkm.m:
    function [ i_out, j_out, m_out, k ] = get_ijkm( Imin, Imax, Jmin, …
      Jmax, Mmin, i, j, m, k )
    % This is a 3-dimensional version of get_ijk. For consistency of notation,
    %  k is kept as the node number, the position indices are (i,j,m)
    
     if k == 0 % get k
      i_out = i; j_out = j; m_out = m;
      i = i-Imin; j = j-Jmin; m = m-Mmin;
      k = i + 1 + j*(Imax-Imin + 1) + m*(Imax-Imin + 1)*(Jmax-Jmin + 1);
     else
      m_out = ceil(k/(Imax-Imin + 1)/(Jmax-Jmin + 1)) + Mmin - 1; % + Mmin;
      k_mid = k - (m_out-Mmin)*(Imax-Imin + 1)*(Jmax-Jmin + 1);
      j = ceil(k_mid/(Imax-Imin + 1)) - 1;  % get i, j and m
      i = k_mid - 1 - j*(Imax-Imin + 1);
      j_out = j + Jmin;
      i_out = i + Imin;
     end
    
    end
    
  • Program C_energy_3d.m:
    function C = C_Energy_3d(V, ns)
    % Calculate C in a rectangular box using Stored Energy
      [Sx,Sy,Sz] = size(V);
      eps0 = 8.854;
    
       Utot = 0;
       for i = 1 : Sx - 1
      for j = 1 : Sy - 1
       for m = 1: Sz - 1
        a = V(i,j,m); b = V(i + 1,j,m); c = V(i + 1,j + 1,m); d = V(i,j + 1,m);
        e = V(i,j,m + 1); f = V(i + 1,j,m + 1); g = V(i + 1,j + 1,m + 1); h = V(i,j + 1,m + 1);
    
        term = (2*a^2 + 2.*b^2 + 2*c^2 + 2.*d^2 - c*e - d*e …
         + 2*e^2 - c*f - d*f + 2*f^2 - d*g - e*g + 2*g^2 …
         - c*h - f*h + 2*h^2 - b*(d + e + g + h) - a*(c + f + g + h))/6;
        Utot = Utot + term;
    
    %      fprintf ('%d %d %f %f %f %f
    ', i, j, a,b,c,d)
       end
      end
     end
    
     C = Utot*eps0/ns;
    end
    

These programs are a straightforward extension of previous programs. The functions get_ijkm.m and C_energy_3d.m are 3d versions of their 2d counterparts. The predicted capacitance values are 70.06, 64.72, 62.99, and 62.14 pF/m for ns = 1, 2, 3, and 4, respectively. Using fd12.m again, this capacitance extrapolates to 59.73 pF.

If the sidewalls and topwalls of the box are far enough away from each other so as to not influence the capacitance meaningfully, then the structure is effectively modeling a square plate over an infinite ground plane. The problem was run again at ns = 3, and the sidewalls and topwalls were slowly receded. The change from, say, Lmax = 12 and Lmax = 13, is < 0.1%. Rerunning several values of ns at Lmax = 13, for instance, we find that the resultant curve fit predicts a capacitance of 59.8 pF.

If we replace the (effectively) infinite ground plane with a second square electrode 2 units below the ground plane's location, we have created a parallel plate capacitor whose capacitance is half of the value calculated above: 29.9 pF. This agrees well with the MoM calculation in Chapter 4. The fact that a structure's capacitance is the same when calculated using two different methods is, of course, reasonable and expected, and is also reassuring.

Some final notes:

  1. The problem could have been further simplified (and execution time significantly shortened) by further utilization of the symmetry of the structure (see Figure 9.23).
  2. In fd13.m, the sparse matrix allocation statement was replaced by a spalloc statement (line 14). This improves the execution time noticeably. This same change could have been made in all of the FD examples, but since execution time in those programs was not an issue, the difference hardly matters. If further use of this type of program is planned, one should consider vectorizing and otherwise improving the program, particularly in the boundary condition establishment. The tic-toc statements included in the listing point out the opportunity areas for improvement.
  3. Applications of a geometry such as that used in this example for many practical situations (misaligning the electrodes, using two electrodes of slightly different sizes, adding feeder lines to each of the electrodes, etc.) are clearly more easily implemented using the MoM technique than using a grid-based approach.
  4. The FD approach is easy to implement, computer programs execute efficiently, and the accuracy of the results can be excellent. Why should we look for a better approach? We should do this for same reason that prompted us to go from square to triangular cells in the MoM technique: the ability to accommodate nonrectangular structures and boundary conditions.
c9-fig-0023

FIGURE 9.23 Symmetry choice used (a) and a possible better choice (b).

Figure 9.24 illustrates an issue that limits the FD technique ability to handle boundary conditions.

c9-fig-0024

FIGURE 9.24 Illustration of boundary condition ambiguity in FD technique.

Suppose that our actual boundary condition is the meandering (dashed) line shown. There is no way of differentiating this boundary condition from that of the straight line passing through the meandering line. We could make things better by increasing the resolution, but this approach becomes impractical very quickly because there is no way to localize a high-resolution grid in both x and y (and z if we have a 3d structure).

Problems

  1. 9.1 Set up a coaxial cable (concentric cylinders) using a rectangular grid and approximate boundary conditions and solve for the voltage grid. Use outer and inner radii of 10 and 5, respectively. Approximate the capacitance and compare it to the known exact solution. Note that this is not a good approach to this problem; it is merely an exercise in setting up the boundary conditions.
  2. 9.2 Figure P9.1 shows a structure consisting of two parallel plates in a box and a rectangular dielectric slab. The two parallel plates are set to two (different) voltages, and the rectangular box is floating. The dielectric slab may be moved in the X direction; its (X) center is Ic. Calculate the stored energy in the system as a function of Ic, and comment on the electrostatic forces on the dielectric slab.
  3. 9.3 Consider the example of Figure 9.10 and calculations of fd8.m. The (peak) field at the tip may be written as
(9.28)images
  1. where Vg and Va are the gate and anode voltages, respectively, and K1 and K2 are constants dependent on the geometry. Using fd8.m, find these two constants for the geometry of the structure in fd8.m. This structure is a form of an electron vacuum tube triode. The results given above should show that, about a bias point of Vg = 100 V and Va = 1000 V, the peak field is principally determined by the gate voltage. The current emitted by the tip may be calculated using the Fowler–Nordheim equation:
(9.29)images
  1. Where, a and b are functions of the geometry and the tip material. Reasonable values for the structure shown with a molybdenum tip are a = 1 × 10-16 and b = 5 × 1010 with units such that E is in V/µm and I is in μA. Calculate I for the gate and anode voltages shown above, and then, using these values as a bias point, calculate the transconductance of the structure for small variations about this bias point:
(9.30)images
  1. The units of gm are μA/V = μΩ. Can you describe how this device could function as a voltage-controlled current source and then be used as a linear power amplifier?
  1. 9.4 This problem is an exercise in demonstrating the importance of the ability to calculate upper and lower bounds on a transmission line capacitance. Consider the example of Section 9.7, shown in Figures 9.16 and 9.17. Repeat the calculations of this example using the simplest approximate voltage functions that you can imagine (they must meet all boundary conditions for all electric and magnetic walls). Calculate the high- and low-capacitance estimates, average them, and compare the results to those of the example in Section 9.7 No computer is necessary here — this is a paper-and-pencil numerical analysis exercise.
  2. 9.5 Figure P9.3 shows a sequence of identical center conductors evenly spaced between two plates. This is a section of an infinite structure or a region near the center of a “very large” structure. The boundary conditions on one of the sections are called periodic boundary conditions – they repeat periodically.
  3. The (triangular) shape of the center conductor has no particular significance; it was chosen for this problem to emphasize that we are not talking about symmetric (image) structures here. Note that a periodic structure can have symmetric section boundary conditions, but this is not a necessary condition and again, is not the case in this problem. Now, modify fd2.m to describe this problem and find the voltage distribution. Show the voltage distribution along j = 0.
image

FIGURE P9.1 Two parallel plates inside a box and a rectangular dielectric slab.

image

FIGURE P9.3 A periodic structure.

References

  1. 1. www.wheeler.com/technology/equations/index.html.
  2. 2. G. Fursey, Field Emission in Vacuum Microelectronics, Springer, 2011.
  3. 3. C. A. Spindt, A thin-file field-emission cathode, J. App. Phys. 39(7):3504–3505 (1968).
  4. 4. W. A. de Heer, A. Chatelain, and D. Ugarte, A carbon nanotube field-emission electron source, Science 270(5239):1179–1180 (Nov. 17, 1995).
  5. 5. C. T. Carson and G. K. Cambrell, Upper and lower bounds on the characteristic impedance of TEM mode transmission lines, IEEE Trans. Microwave Theory Tech. MTT-14: 497 (Oct. 1966).
  6. 6. L. N. Dworsky, Modern Transmission Line Theory and Applications, Wiley, New York, 1979.
  7. 7. P. Daly, Dual potential problems in transmission lines with limited or no symmetry, IEE Proc. (Pt. H) 132(6): (Oct. 1985).
  8. 8. W. H. Press, S. A. Teukolsky, W. T. Vettering and B. P. Flannery, Numerical Recipes in C, Cambridge University Press, Section 10.5 [there are many editions of this excellent book, and several versions (e.g., Numerical Recipes in Fortran); some of the earlier versions are available online].
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.137.184.90