About PC3D

For questions about how to apply PC3D to specific problems, to report bugs, or to offer suggestions, address email to:


Simple requests will be answered promptly by the author (Paul Basore) as a public service.

PC3D was initially developed in 2019 as an effort to combine the best user-interface features of PC1D and PC2D in a program that could efficiently model silicon solar cells in three dimensions and provide an effective visual means of exploring the resulting solution. Microsoft Excel provides the user interface for PC3D, but all calculations are performed in code rather than in spreadsheet formulas for faster solutions. Pre-release testing at a few select sites was conducted starting in July 2019. The first public release was version 1.3 late in October 2019. The program code is fully open-source and available free of charge. The author asks only that the program be cited in any resulting publications, e.g. P. A. Basore, PC3D 2019 [Online] http:// www.pc3d.info {append the date that the program was downloaded}.

PC3D implements a conductive boundary model with a uniformly doped quasi-neutral bulk. Quasi-neutrality means that the excess electron and hole density are essentially equal to each other at each location and are treated as such in the drift-diffusion equations, while acknowledging that a very small difference is present as needed to ensure that the divergence of total current density is zero everywhere. This approach efficiently handles the large disparity in silicon solar cells between the shallow doping and texturing at the surfaces and the much thicker wafer. Specifically, the surfaces are treated as thin-sheet boundary conditions, both optically and electronically. This allows PC3D to use three-dimensional Fourier-series solutions of the governing differential equations for both optical and electronic calculations, with bulk non-linearity accommodated through iteration.

The optical model assumes that the surfaces can be represented as a mix of planar and Lambertian components. Unlike PC1D and most other programs, Lambertian light absorption in PC3D is not approximated by a single effective path angle. Rather, in PC3D the distribution of path angles changes with the distance traversed and is unique for each wavelength.

The electronic model assumes that the doping density and the electron and hole mobilities (diffusivities) are uniform throughout the wafer, but it places no restrictions on carrier injection level. There is, however, a limit on the intensity of illumination, with the maximum illumination for a given device depending on the wafer doping density and applied voltage. For solar cells under one-sun illumination, there is a minimum wafer doping density for which the solution will converge. When the doping is close to this threshold, the solution may not converge at low bias voltage but will converge when sufficient bias voltage is applied. This can result in partial IV curves that are missing points at low bias voltages.

The Models sheet supplies additional models that are useful for specific types of investigation. When the Temperature model is Enabled, then any subsequent change in the device temperature on the Device sheet modifies the values of several key device parameters. The intrinsic concentration is adjusted using the model parameters, independent of what value was previously entered for intrinsic concentration on the Recombination sheet. The absorption and recombination models behave differently, by adjusting the previously entered values. When the Doping model is enabled, then any subsequent change to the bulk doping on the Device sheet modifies the recombination lifetime in the bulk and the Jo1 at undoped surfaces. The Circuit model is always enabled, and serves two functions. You can enter values for the elements of a two-diode circuit model and PC3D will calculate the Pmax and Voc. Or, when you scan an IV curve (light or dark), PC3D will find the element values that provide a least-squares best-fit to the IV data. When fitting Dark IV or SunsVoc, the squared errors at each bias voltage are weighted inversely to the current. This ensures a good visual fit to the data when viewed on a logarithmic current scale. After an IV scan, you can modify the circuit element values to see the impact they have on Pmax and Voc. The Free Energy Loss Analysis (FELA) model is populated each time a solution is completed. The FELA approach was first published by Rolf Brendel and associates at ISFH, who also originated the conductive-boundary solution method used in PC3D. For a dark-bias solution, the sum of the loss components equals the total power dissipation in the device. For an illuminated-bias solution, the free-energy generation minus the sum of the loss components equals the output power of the device. FELA can provide useful insight into what is limiting the efficiency of a given solar cell design.

To gain access to the program code for PC3D, you will need to enable Excel's Developer tab if you have not previously done so:

  • For Windows, go to File > Options > Customize Ribbon.

  • For Mac, go to Excel > Preferences... > Ribbon & Toolbar.

  • Then, in the Customize the Ribbon section, under Main Tabs, check the Developer check box, and press OK.

Click on the Developer tab in Excel, then select Visual Basic. You will need to open the Modules folder if you have not previously done so. GlobalVariables is a good place to start gaining familiarity. Code is executed when the user presses buttons in the spreadsheet, with the main code entry points being Solve, MacroIV, MacroEQE, LoadFile, SaveFile, CreateImage, ResetAll, and the various Plot subroutines. Code is also executed when certain cells in the spreadsheet are modified. These changes are handled by the system code modules labeled Sheet1 through Sheet8. Note the Boolean flag bEnableChangeHandlers, which is used to avoid infinite loops. Also note the flag bMac, which is necessary to cause a few routines to execute differently on Mac than on Windows. If you change any of the code, it will automatically recompile the next time that subroutine is called. A good way to gain initial confidence in your ability to modify the code is to insert the following line at the start of the Solve routine located in the Solver module: MsgBox("Hello world!"), then press the Solve button.

More details about PC3D are available in the published papers that can be downloaded from the Archive page of this website.