Home Examples Screenshots User manual Bluesky logo
OghmaNano Simulate organic/Perovskite Solar Cells, OFETs, and OLEDs DOWNLOAD

Large-Area Perovskite Module Tutorial Part C: Edit the geometry and upscale your own device

In Part A and Part B you opened the example, built the circuit mesh, ran the simulation, and inspected the outputs. In this final part we will edit the geometry of the device and see how module-level behaviour changes. The key idea is that the module is a 3D circuit model with photogeneration: there is nothing “magical” about it being a perovskite, beyond the optical properties you assign to the active region.

Step 1: Open the Object editor

In the 3D view, right-click on the device as shown in ??, then click Edit object. This opens the Object editor shown in ??.

Right-click context menu in the 3D view showing the Edit object option.
Right-click on the device and select Edit object.
Object editor window showing an Active object, offsets, xyz sizes, number of objects, and optical material selection.
The Object editor. This is where you edit geometry (offsets/sizes/replication) and key material assignments.

Step 2: Optical material and photon efficiency

In the Optical section of the Object editor (??), you will see the current Optical material assignment. In this example it is set to perovskites/std_perovskite.

This “standard perovskite” material is intended to be representative: in practice, reported optical constants for MAPI/MAPbI3-type materials vary across the literature (different processing, measurement methods, fitting approaches, etc.). Using an averaged/representative absorption spectrum gives a sensible default behaviour without committing to one particular dataset.

You can change the optical material by clicking the ... button next to the optical material field. Note that although this is a “perovskite module” example, the simulation engine here is fundamentally a circuit model + photogeneration. If you change the absorption coefficients, there is nothing stopping you from turning this into a different device class (e.g. an organic absorber) and exploring how it behaves when upscaled.

🧪 Task: Swap the absorber material

  1. Open the Object editor (??).
  2. In the Optical material field click ... and select an organic absorber from your materials database.
  3. Rebuild the circuit mesh (Circuit diagram tab → refresh icon) and rerun the simulation.
  4. Compare the JV curves to the original perovskite material. What changes most strongly: \(J_\mathrm{SC}\), \(V_\mathrm{OC}\), or the curve shape?

Step 3: What the key geometry fields mean

The Object editor provides a compact set of parameters that define both geometry and how it participates in the electrical mesh:

In this example, the absorber region is replicated so that the module has five fingers. If you change the number of objects from 5 → 4, the 3D view should update to show one fewer repeated region (after rebuilding the mesh / refreshing the view as needed).

Step 4: Reduce the module from five fingers to three

Now we will make a controlled geometry change: reduce the number of fingers from five to three. This is a good “stress test” because it forces you to edit both the geometry and the contacts, then validate that the circuit mesh is still connected.

The target outcome is a mesh that looks like ??.

Circuit mesh view of a three-finger module showing connected links between contacts and the three repeated cell regions.
Example circuit mesh after reducing the module to three fingers.

Step 5: Debugging mesh connectivity (what can go wrong)

Once you start editing geometry, it is very easy to create a subtle connectivity problem: a gap, a missing overlap, or a region that is not actually linked into the circuit. An example of this kind of problem is shown in ??, where there is a visible gap and therefore no link path from one region of the device to another.

Circuit mesh showing a clear gap between regions indicating missing connectivity; no complete current path exists between contacts.
Example failure mode: a gap in the circuit mesh means there is no continuous path from one contact to the other. This often produces convergence problems or nonsensical outputs.

The important point is that if you have created a disconnected circuit, the solver may still try to iterate and you may see odd convergence behaviour, but the results will not be physically meaningful. The fastest way to debug this is simply: rebuild the mesh and inspect it visually. If the mesh is connected and the contacts are where you think they are, the simulation is usually fine.

💡 Debug rule: if the circuit mesh is correct, the solve is usually fine. If the circuit mesh is wrong, the solve is not worth interpreting. Always inspect the mesh carefully after geometry edits.

What to do next

You now have the core workflow: start from a small-device parameter set (materials + resistances), build a module geometry, generate the circuit mesh, run, and inspect JV/contact currents and mesh connectivity.

👉 Next step: Try upscaling your own device

Find parameters from one of your own small-area devices (e.g. sheet resistances of electrodes/contacts, diode parameters, and absorber optical constants), put them into the model, and run the same module geometry. Then ask: what becomes the limiting factor when you scale up? In many cases it is not the intrinsic “cell efficiency”, but module-scale effects such as lateral conductivity of electrodes, contact resistances, or geometry-dependent current crowding.

Well done! You’ve completed the perovskite module tutorial — including editing geometry, rebuilding the circuit mesh, and validating connectivity 🎉