Introduction
Solar technologies rely on the collection of solar irradiations to generate electricity with photovoltaic cells (PV) or generate heat by heating a fluid in Solar Thermal Systems (STS) for domestic, residential, and industrial purposes. Also, free harvesting of solar energy is often beneficial in buildings through windows, for direct heat consumption reduction. The variability of uses for solar energy is as vast as electricity or heat needs. In some specific cases, if solar irradiance is concentrated using mirrors, higher temperatures can be reached and this heat can be used in industrial processes (Concentrated Solar Thermal, CST), or to produce electricity via a turbine in Concentrated Solar Power (CSP).
All these technologies call for optically efficient components with complex and sometimes conflicting optical behaviors. In particular, the solar receiver should be highly absorbing in the solar range (0.28–4 µm) to harvest as much solar radiation as possible, but also lowly emissive in the infrared range (1–50 µm) to limit radiative thermal losses [1, 2]. This spectral selectivity can be achieved using multilayered coating architectures, associating low-emission materials (e.g. metals) and high-absorption materials (e.g. dielectric/metal/dielectric multilayers or metal-ceramic composites), that need to be optically designed and optimized in terms of layer thicknesses and compositions, to guarantee their high optical performance [3, 4, 5]. Moreover, new technologies like hybridization of photovoltaic and concentrated solar thermal technologies need specific coatings with many thin layers [6, 7]. A solution for PV/CST hybridization is the “PV mirror” configuration, where PV cells are installed on concentrators to produce electricity, and thermal absorbers are placed at their focus to produce heat. Such “PV mirror” requires advanced coatings, with many thin layers [7, 8, 9, 10]. Other solar applications like antireflective coatings for PV or radiative cooling, self-cleaning coatings, dielectric mirrors, or spectrally selective coatings require thin layer stacks with advanced materials and a number of thin layers.
In summary, harvesting solar energy requires materials with high quality surface properties, which can be provided by thin layer stacks. For these composite structures, multiple design parameters are subject to research, such as the number of thin layers, the materials used, the support material, the collector geometry, or the deposition technique. As solar technology advances, coatings are becoming more sophisticated, with co-functionalities, thus their design optimization is an increasingly crucial topic. Given the number of challenges involved, the solar research community needs a readily accessible software solution to: i) calculate the optical properties of a high number of stacked thin layers in the solar spectral domain; ii) compile optical data from a large variety of materials, including custom materials that can easily be added by the users; iii) optimize the characteristics of these stacks to accommodate a wide range of thin layer combinations and functionalities, thus proposing efficient designs of multilayer stacks. This ideal software should be free, highly versatile, easily tunable and written in a widely recognized programming language, meeting the diverse needs of the solar energy research community.
Modeling and optimization of thin layer stacks
With the increased performances of computers, it is now possible to design thin layer stacks using numerical optimization methods, by defining an objective function linked to the desired optical response. This function is then minimized or maximized using algorithms. The first computer program to automate optical filter design was published by Dobrowolski and Lowe, in 1978 [11]. Through the years, different codes and optimization methods have been proposed, sometimes specific to multilayered optical stacks, as the Needle by Tikhonravov et al. [12]. Global optimization methods, such as Simulated Annealing, Particle Swarm Optimization (PSO), various evolutionary algorithms or more recently supervised machine learning are frequently used [6, 13, 14, 15].
Table 1 shows a review of the existing software for optical thin film coating. Ideally, the solar community needs free software, designed for solar use, ready to use and open source to provide the adaptability necessary for the large panel of solar applications. Although many commercial programs (SCOUT/CODE, Essential MacLeod, FilmStar, OptiLayer and others) show excellent quality, numerous research institutions end up having to create their custom in-house software, even though commercial programs are more user-friendly thanks to their Graphic User Interface (GUI). The main reason is that commercial programs are not open source. Thus, it is not possible to add new functionalities to the code. In-house software is therefore developed by researchers to offer the advantage of swift adjustments in response to emerging issues. Such software can be tailored to precisely match the research’s unique requirements. Recently several solutions for optical coatings have been shared freely within the optical and photonics community, such as PyMoosh (2023), TMM-Fast (2022), Solcore (2018) or OpenFilters (2008) [16, 17, 18, 19]. Although they provide key functions, their use by the solar community would require transforming these specialized programs into a global program adapted to solar energy systems: chiefly, computational speed, pertinent refractive index data and specific objective functions (also known as merit functions or cost functions).
Table 1
Software for optical thin film coating simulation and optimization.
| SOFTWARE | COMMERCIAL STATUS | OPEN SOURCE | GUI | REF |
|---|---|---|---|---|
| SCOUT/CODE | Commercial | No | Yes | [20] |
| Essential MacLeod | Commercial | No | Yes | [21] |
| FilmStar | Commercial | No | Yes | [22] |
| OpenFilters | Free | Yes | Yes | [18, 23] |
| OpTaliX | Commercial | No | Yes | [18] |
| OptiLayer | Commercial | No | Yes | [24] |
| PhaseCODE | Commercial | No | Yes | [20] |
| PyMoosh | Free | Yes | No | [16, 25, 26] |
| TFCalc | Commercial | No | Yes | [24] |
| TMM-Fast | Free | Yes | No | [17, 27] |
| RP-Coating V4 | Commercial | No | Yes | [28] |
| Solcore | Free | Yes | No | [19] |
Working on the development of solar energy coatings since 2014, we have, like many, developed our own in-house code for thin layer stacks, named SolPOC (Solar Performance Optimization Code). The major contributions of this code, compared to existing ones, are to work across a wide spectral range (280 nm–30 µm) and to be ready to use by non-experts, bringing together the advantages of commercial and open-source solutions. This makes SolPOC particularly relevant for research and education in materials for solar applications. In this paper, we have chosen to make our SolPOC freely available to anyone, hoping our code can help the community to easily study, model and optimize thin layer stacks for solar energy.
SolPOC Package Highlights
Solar Performance Optimization Code (SolPOC) is a free, tunable, versatile, and fast code designed for research in the field of solar energy coatings. The code operates within the Python 3 programming environment.
The current version of the code has the following key features:
Fast and stable calculation of spectral reflectivity, transmissivity, and absorptivity of thin layer stacks using a vectorized (with NumPy package) Abélès formalism method [26].
Calculation over a large and tunable spectral range, covering the full solar spectrum and including infrared (typically from 280 nm to 30 µm) [2].
Extensive database of refractive index data measured on experimentally synthesized materials over a large spectral range, found in peer-reviewed papers [29].
Implemented Effective Medium Approximation (EMA) methods to model the optical behavior of material mixtures (dielectric mixtures, metal-dielectric composites, porous materials) [30].
Evaluation of solar-weighted properties and thermo-optical properties of thin layer stacks (solar reflectance, solar transmittance, solar absorptance, thermal emittance, solar-to-heat conversion efficiency), to serve as solar performance criteria (cost function).
Maximization of stack optical performance through the optimization of coatings characteristics, according to a large panel of objective functions, including functions for solar energy systems, building and solar thermal uses.
Six different heuristic optimization methods based on evolutionary algorithms, such as PSO or tuned version of Differential Evolution.
Implementation and architecture
SolPOC has been designed to serve as a readily accessible solution in the field of coatings for solar energy, while adhering to the fundamental principles of Open Science. The choice of Python as the programming language plays a pivotal role: it is a popular programming language, easy-to-use and to learn. Moreover, it is open source and easily extensible through numerous community-contributed packages available via the PyPI repository [31]. Furthermore, platforms like GitHub, which also function as social networks to some extent, coupled with the GNU General Public License, enable us to enhance code accessibility and reusability to the maximum extent possible. Moreover, we provide extensive documentation, a comprehensive User Guide, ready-to-use template scripts and Jupyter Notebooks tutorials available on the GitHub platform for help users clearly understand both the implementation and the architecture of the code.
SolPOC has been thoughtfully crafted to be user-friendly, especially for researchers, experimenters working with coatings and thin films, as well as non-programming users. The architectural design of the code includes a simplified user interface, condensing essential variables into concise lines of code and emulating a graphical user interface. This approach empowers non-expert users to quickly grasp the functionalities of the code and employ it effectively. Even if Python is an object-oriented language, we intentionally strongly minimize using specific object-oriented features to facilitate the comprehension of the code.
Materials database
As input data, SolPOC provides a large database of refractive indices for all types of materials, particularly those suitable for solar energy applications. The current database includes more than 130 different materials, including metals, dielectrics, conductive oxides and semiconductors. This database was carefully selected by the authors, who did a critical review of scientific literature (based on the data gathered on refractiveindex.info website) and technical catalogs (e.g., technical catalogs from the glass industry) [32, 33]. We have preselected the most relevant data: refractive indices measured on thin films rather than bulk materials, experimental measurements rather than modeling, and studies with numerous measurement points to minimize reliance on interpolation and extrapolation made by the code. Also, most studies have been selected because they cover a large spectral domain (solar range 280–2500 nm, and often also in the mid-IR range) necessary for the calculation of solar properties or radiative losses [34, 35]. The complete database is provided with the SolPOC package and can be found within the “Materials” package folder (i.e., in solpoc/Materials), where each material is described by a text file and also online [29]. We have chosen text files to facilitate the addition of new materials. For this purpose, the User Guide describes how to include new materials with text files, making the database easily tuned.
Composite layers, such as cermets (mixtures of dielectric and metal) or porous materials (mixture of air and material), are often used in coating design, and especially in coatings for solar energy [33, 34]. The latter provide relevant optical properties, like low refractive index (e.g., porous SiO2) or high solar absorptance (e.g., W-Al2O3) [34, 35, 36, 37]. To calculate the spectral complex refractive index of these composite materials, Effective Medium Approximation (EMA) methods have been proposed by Bruggeman since 1935 [29]. The most famous ones are Bruggeman, Maxwell-Garnett, Yoldas mixing rules, or Landau-Lifshitz-Looyenga theories [29, 38, 39]. In SolPOC, we have selected Bruggeman theory, as already discussed in previous papers [34, 40, 41, 42]. Such a calculation with an EMA model within the code allows the volume fraction of the materials constituting the composite or porous mixture to be optimized to maximize the performance of the stacks. To designate a composite layer, we follow the common convention found in the literature by separating the two materials with a short hyphen (en dash). For example, “W–Al2O3” refers to a mixture of tungsten and alumina, while “air–SiO2” denotes a layer composed of air and silica, i.e., a porous layer. The complete methodology is described in detail in the code documentation.
Optical properties calculation
The key function in our code is to evaluate the optical response (i.e., spectral reflectivity, transmissivity and absorptivity) of a multilayered structure by solving Maxwell equations with the best ratio between accuracy and rapidity. Since the first contributions of Lord Rayleigh to predict the reflectance of a multilayer stack, different calculation methods have been proposed to provide the required tools for scientists, then industrial applications. If the most common formalism is based on the Transfer Matrix Method (TMM), other formalisms are available with their own advantages and drawbacks, such as the Scattering Matrix, the Abélès formalism (which is different from TMM), the Admittance method or more recently an adaptation called the Dirichlet-to-Neumann maps. A complete in-depth review and comparison of these different formalisms has been provided recently by D. Langevin et al. [16].
Based on their work, we have chosen the Abélès formalism for SolPOC as the best compromise between time and stability, instead of TMM [36]. A comprehensive and well-written review of the Abélès formalism has been provided by Langevin et al [16]. Moreover, similarly to A. Luce et al. with the TMM-Fast program, the Abélès formalism allows a vectorized implementation using the NumPy package, which strongly reduces the calculation time per CPU [17]. We have optimized the code structure around NumPy, in order to maximize computational efficiency. The calculation of characteristic matrices M is voluntarily done in 3D, of shape [2, 2·L, λ], where L is the number of thin layers and λ the number of wavelengths. Users must know that Abélès formalism involves a limit in the number of thin layers, of around 150 layers, to avoid instability. More details are presented in the User Guide [16, 36]. Figure 1 illustrates how the stack optical properties are calculated from refractive indices using Abélès formalism.

Figure 1
SolPOC uses refractive indices selected from peer-reviewed studies, complemented, if necessary, with EMA theory (for composites or porous layers), to create a thin layer stack. The optical properties are calculated with Abélès formalism, using NumPy package for reduced calculation time.
Optimization process
The main aim of the Solar Performance Optimization Code (SolPOC) is to design highly effective thin layer stacks for solar energy systems. In the stack’s architecture, a thin layer is represented by a set of variables to be optimized, i.e., the thickness of a layer, the volume fraction for composite and porous materials, the refractive index for ideal materials. These variables define the space of possible solutions. Defining the range of values allowed for each variable determines a sub-part of this space called the optimization domain. SolPOC can optimize the entire optimization domain, including the different layers compositions in the case of composite or porous layers. Alternatively, it can optimize the refractive indices of the layers, in the case where the materials are assumed to be non-dispersive (i.e. present a refractive index that does not depend on the wavelength). Let us first introduce definitions of the other specific terms used to describe the optimization process.
Objective functions
An objective function is a quantitative estimation of the performance of a given multilayer stack. Depending on the problem, this objective function should be maximized (for instance if the objective function is a yield) or minimized (for instance in the case of a reflectance for an anti-reflective coating). SolPOC allows both.
In this package, objective functions describe and quantify the solar performance of thin layer stacks used in solar energy, for example solar reflectance for solar concentrating mirrors, heliothermal (solar-to-heat conversion) efficiency for thermal absorbers, solar absorptance of a PV cell, or solar transmittance for protective glass [4, 37, 38]. In the current version, 12 different objective functions (quantitative criteria) all described in the User Guide, are present in SolPOC to design efficient coatings for PV, CSP/CST or buildings. These criteria constitute objective functions, as they should be maximized or minimized during the optimization process to improve the multilayer stack. All these functions are dimensionless quantities and must return a value between 0 and 1. Any value outside this range should be considered indicative of a numerical error.
As it is a code designed for solar performance optimization, the ASTM G173-03 AM1.5 reference solar spectra are included in the code and serve as input for calculation [35, 39]. The three different solar spectra of this standard, i.e.) the Direct and Circumsolar (DC) spectrum coming from the solar disk and corona, ii) the Global Tilt (GT) solar spectrum, and iii) the extraterrestrial (ETR) solar spectrum, are present in SolPOC as text files and each can easily be selected by users. If necessary, specific local solar spectra can also be computed from SMARTS or Py-SMARTS and easily added to SolPOC as text files [40, 41, 42]. Other values, for example the normalized relative spectral distribution for the calculation of visible solar transmittance, are also included [38]. Our code is versatile and can also easily incorporate other spectral distributions that can be added by users, for example, but not limited to, the Solar Material Protection Factor (SMPF), the Solar Skin Protection Factor or the Color Rendering Factor (CRF) [43]. Normalized spectral responsivity of reference PV cells and thermal absorbers from our previous studies is already included [4, 44].
Optimization algorithms
To optimize thin film stacks according to an objective function, a total of 6 different optimization algorithms are currently available in SolPOC and are described in detail in the User Guide. We have implemented an in-house Genetic Algorithm (GA) method, Differential Evolution (DE), Particles Swarm Optimization (PSO), simulated annealing method and the (1+1)-ES algorithm [45, 46]. As a comparison, we have also included the optimization algorithm named strangle used in the previous versions of the code on Scilab (named COPS), already published in our previous work [4, 37, 47]. Despite its simplicity, it shows good results with simple stack structures. Particle Swarm Optimization has been used since 1995 for thin layer coatings and shows correct performance [12]. Bennet et al. have shown in their work that the gradient free method Differential Evolution can reach high quality results, even superior to Needle [48, 49].
The Needle method, introduced by Tikhonravov et Trubetskov, often used in the multilayer community, is not yet present in the code [12, 50]. The objective of a global optimization algorithm is to explore a large optimization domain in order to find, if possible, the global optimum of a function. The Needle technique, by adding layers with the iteration steps, constantly extends the size of the optimization domain. At each step of the process, a local optimum is found, then a new layer is added and the search for a local optimum is repeated. The nature of the inverse design method provided by Needle therefore largely differs from the global optimization methods cited above. In consequence, the implementation of a Needle method in SolPOC is kept for future work.
Previous work demonstrates that the current version of Differential Evolution works well for optimizing thin coatings, as proven by our numerous simulations conducted with the code and by specific benchmarks for multilayered photonic structures [49]. However, the “No Free Lunch Theorem in Optimization” states that an optimization method that works well for one specific problem may not work as well for another [51] Users are thus encouraged to test different optimization methods for their specific problems, for instance by using benchmark platforms such as Nevergrad [52, 53, 54].
Consistency comparisons as optimality indicator
The evolutionary algorithms utilized in SolPOC are inherently non-deterministic. Two runs of the same algorithm may not converge to the same optimum, resulting in two different stacks of thin layers with distinct layer thicknesses. Initial efforts should focus on ensuring convergence in each run, tracked automatically by the code throughout the optimization process of the objective function. However, convergence is not sufficient to guarantee that a solution close enough to the global optimum has been reached. Depending on the optimization problem, the solution provided by the algorithm can be a local optimum. In order to assess whether a solution is satisfactory, it is crucial to run the same optimization multiple times, each with different starting points, and then compare the solutions obtained. This practice allows for a comprehensive examination of the reliability of the algorithm and facilitates comparisons between different algorithms or settings. “Consistency curves” are generated by SolPOC to estimate the confidence that can be placed in a solution or make comparisons between algorithms. For each run, the value of the objective function at the end of the optimization is examined, and the consistency across multiple launches is assessed. Ideally, the best objective function values are close or identical, indicating that the same optimum is consistently identified despite different starting points. If different values are obtained (even with each optimization converging), it suggests that the algorithm identifies local minima, raising concerns about the quality of the best solution. In such cases, restarting the optimization algorithm multiple times becomes necessary to identify a more reliable solution. We underline that even this methodology does not allow to prove a solution is the global optimum, something generally considered impossible to demonstrate. All the solutions produced should thus be called optimized, but never optimal.
Despite the potential increase in calculation time, we strongly recommend systematically implementing this approach. Our experience indicates that solar objective functions often involve rich landscapes of local optima, especially in solar thermal applications [4, 55]. To streamline this process, SolPOC automatically generates the consistency curve alongside convergence curves. This is achieved using multiprocessing to execute several independent runs concurrently, ensuring transparency for the user and minimizing the impact on the overall calculation time. Examples of correct optimization using SolPOC are available online [56].
Optical properties calculation time
For many optimization processes, the runtime of the cost function is a critical factor. We therefore compared the execution speed of SolPOC for optical property calculations against three widely used optical packages, TMM-Fast, Solcore, and PyMoosh, using the test case described previously. Each package has specific features that should be highlighted when interpreting runtime comparisons. Solcore offers flexibility to treat incoherent layers, which inevitably impacts computational speed. Both PyMoosh and TMM-Fast compute optical properties for a single polarization at a time; thus, their functions must be executed twice to cover the use case relevant to solar energy applications, where both polarizations are required. In contrast, TMM-Fast provides additional capabilities, such as calculating the optical properties of multiple stacks, incidence angles, and wavelengths in a single function call. Moreover, it is the only package among the three to offer GPU acceleration through PyTorch, as well as an autograd functionality.
Figure 2 illustrates the benchmarking results obtained on a standard laptop without GPU acceleration, equipped with an Intel Core i7-1165G7 processor. This test therefore reflects the situation of a user without access to GPU computation, which is generally less favorable to TMM-Fast. We focus here on our main use case: computing the reflectance, transmittance, and absorptance for both polarizations (TE and TM) of a coherent multilayer stack over the full solar spectrum (280–2500 nm, 5 nm step size) at a given incidence angle. Such a calculation is necessary for the cost functions used in optimization routines that adjust layer thicknesses, material choices, and other stack parameters. Under this scenario, we observe that SolPOC (black curve) achieves the highest number of evaluations per second, followed by PyMoosh (blue curve, on average 7× slower), and then Solcore and TMM-Fast (green and red curves, respectively, both ~30× slower than SolPOC depending on the number of layers). TMM-Fast exhibits a more stable execution time, only weakly affected by the number of layers, which can be advantageous in certain contexts. Similarly, in applications requiring evaluation at multiple incidence angles, TMM-Fast is less affected, since SolPOC requires the calculation to be repeated n times. The curves with star markers represent performance when including 45 incidence angles, a practical discretization. In this case, SolPOC’s speed (black curve with star) is reduced by a factor of 45, yet it remains on average about 3× faster than TMM-Fast under CPU-only execution (green curve, with star). We therefore conclude that SolPOC provides a clear runtime advantage for CPU users performing optical property calculations over two polarizations, across 450 wavelengths, and for 1–45 incidence angles. In other contexts, particularly when GPU acceleration is available, we encourage users to perform their own benchmarks.

Figure 2
Number of optical properties calculation per second on 445 different wavelengths on both polarizations, for different packages, using cpu.
Quality control
The initial version of SolPOC (named COPS) was developed using Scilab during the Ph.D thesis of the main author, successfully defended in March 2018 at the PROMES-CNRS laboratory in France [55]. Between 2018 and 2023, the code remained in active use by the author and PROMES-CNRS. Its effectiveness and user-friendly interface contributed to its widespread adoption within local research teams. The code played a pivotal role in numerous scientific publications concerning antireflective coatings, solar selective absorber coatings and dielectric solar mirrors [4, 37, 41, 47] as well as two book chapters regarding materials for solar thermal [2, 57]. During the same period, SolPOC served as a valuable tool in various Ph.D theses conducted at PROMES-CNRS [5, 58]. Based on the positive feedback and the code evident utility, the decision was made in January 2023 to migrate the code to Python, introduce new functionalities, and release it as open-source software. This led to the current version of SolPOC. SolPOC has been extensively compared with PyMoosh for the calculations of the optical properties, producing numerically equivalent results, and with the combination of PyMoosh and Nevergrad for the optimization process, producing very similar results.
To illustrate the accuracy of SolPOC compared to community-validated codes, we present a test case involving the reflectivity calculation of a 20-period Bragg mirror, an optical structure well-known for achieving reflectivity values close to 0 or 1 across a spectral range. Figure 3 demonstrates that the reflectivity spectra computed independently by SolPOC, TMM-Fast, Solcore and PyMoosh are visually indistinguishable, as evidenced by the perfect overlap of the four curves. We observe a maximum deviation of 1.6.10–12 between SolPOC and PyMoosh (blue curve), reflecting the use of an identical formalism and corresponding in practice to the rounding of the last digit of a floating-point number. Both TMM-Fast and Solcore employ the transfer matrix method, which introduces slightly larger deviations. Specifically, the average relative error between SolPOC and TMM-Fast (green curve) is approximately 2.1.10–8 with even lower errors (below 10–11) in regions of high reflectivity (around 700 nm), and higher errors (up to 10–6) in regions of very low reflectivity. The relative error between SolPOC and Solcore (red curve) is higher, in order of 3.6.10–5 and can reach up to 10–2 at wavelengths with minimal reflectance. Such relative errors in the computation of very low reflectivity values (e.g., 10–5) at monochromatic wavelengths are still entirely acceptable.

Figure 3
Computed reflectivity of 20 layers Bragg mirror with different optical Python package.
Figure 4 illustrates the absolute error in the average reflectivity of the same structure calculated over the 400–1200 nm spectral range. It demonstrates that computational accuracy is maintained across a wide range of stack sizes, from 2 to 50 thin-film layers. We observe results that are strictly identical between SolPOC and PyMoosh, up to numerical precision limits. The average absolute deviation is approximately 2.10–9 when compared to TMM-Fast, and 7.3.10–8 when compared to Solcore. In practical terms, considering the largest absolute error (SolPOC & PyMoosh vs. Solcore) an absolute error of 10–8 means that computed average reflectivity values agree at least up to the seventh decimal place, far exceeding the precision of current experimental characterization techniques. While not all optical structures could be compared due to obvious constraints in time, resources, and scope, we have strong confidence in the reliability of the results. Nevertheless, it is possible that unconventional layer arrangements may reveal numerical instabilities, which we would be happy to investigate and resolve.

Figure 4
Computed average reflectivity of Bragg mirror with different optical Python package, for 2 to 50 thin layers.
Overview
Figure 5 provides an overview of the optimization process in SolPOC, complementing the calculation of optical properties for a thin film stack as depicted in Figure 1. Utilizing the optical properties (spectral reflectivity, transmissivity, and absorptivity) of a stack of thin films, the code uses one of the objective functions implemented in the package, such as solar reflectance for example. To serve as reference input, if necessary, solar spectra or other properties such as the human eye sensitivity or PV cells spectral efficiency are directly embedded. The code then optimizes the stack using one of the six available optimization methods. The operation is repeated multiple times, facilitated by a parallelizable code, enabling the identification of an optimized stack and ensuring confidence in the optimization results.

Figure 5
SolPOC offers a wide range of objective functions suitable for various applications including solar energy, buildings, vision and more. These objective functions can be optimized using various global optimization methods. Thanks to multiprocessing, Consistency Curves are easy to manage to ensure the optimization quality.
Availability
The current version runs under Python 3.14, which makes it available for every system (Windows, Linux, MacOS) capable of handling Python. The code automatically saves the most important results in text files and PNG pictures, thus local writing rights are required. In addition, SolPOC is relevant to use on multicore computers thanks to its ability to handle multiprocessing. The GitHub project includes different tutorials, a User Guide with different documentations and Jupyter NoteBook.
List of contributors
Antoine Grosjean, main author. Wrote the code and the documentation, tested the code. Supervised the whole project since 2016.
Pauline Bennet, beta tested, and quality controlled the code and the documentation, made major contributions to the optimization method (Differential Evolution).
Thalita Drumond, implemented multiprocessing, controlled the code quality, helped writing documentation and GitHub repository.
Amine Mahammou, beta tested the code and contributed to the documentation.
Denis Langevin, quality controlled and contributed to optical theory.
Antoine Moreau contributed to the version of Differential Evolution implemented in the package.
Audrey Soum-Glaude, contributed to optical theory and quality controlled the materials database. Supervised code users at PROMES-CNRS laboratory since 2016.
All the authors contributed to the writing of the article.
Software location
Name: SolPOC
Code repository on GitHub: https://github.com/SolPOCandCo/SolPOC
Code repository on PyPi: https://pypi.org/project/solpoc/0.9.7/
Licence: GNU General Public License v3.0
Publisher: Thalita Drumond
Version published: 0.9.7
Zenodo archive: https://zenodo.org/records/17347238
Date published: 14 October 2025
Language: the repository, software, supporting files and documentation are written in English.
Reuse potential
SolPOC can be used in all scientific domains where light is coming on one or several thin layer stacks deposited on a substrate. Its core functionality is currently among the fastest available for computing the optical properties over the solar spectral range and for both polarizations, particularly for users relying on CPU resources. Like other optical simulation packages, it can be easily interfaced with optimization libraries such as SciPy or Nevergrad to take advantage of advanced optimization algorithms. This makes the software a highly relevant tool relevant for research, development, and education in solar energy, including solar thermal, photovoltaics or eyeglasses [41, 57]. SolPOC has already made a substantial contribution to coatings research for solar technologies, such as solar mirrors, antireflective coatings, and selective coatings designed for solar thermal applications [4, 37, 47]. The code also implements Effective Medium Approximation (EMA) models, which enable the modeling of thin-film stacks containing mixed materials, and allow simultaneous optimization of both layer thicknesses and material compositions with a reduced number of function calls. Given that this code employs a rapid and stable method to calculate spectral reflectivity, transmissivity, and absorptivity within a thin layer stack, we are confident that its utility extends to a wide spectrum of disciplines. Many new examples of optimization or application can be developed simply by writing a new cost function, building on the existing examples, the User Guide, or the Jupyter Notebooks to acquire the necessary expertise. These new examples include, but are not limited to:
advanced reflective coatings, using metallic and/or dielectric layers.
antireflective coatings for human eye vision, PV cells or solar thermal applications.
coatings for optical instruments, such as Bragg mirrors.
radiative cooling coatings.
low-e coatings, solar control glass for building applications or spectral splitting.
selective and absorber coatings for solar thermal applications.
We are sure that SolPOC will continue to be an asset to the solar community and can be readily adapted and applied to other communities in the future.
Examples of use: thin film coatings for solar concentrator
We propose here a series of optimization findings obtained with SolPOC and their corresponding interpretations. We optimize various thin film coatings applied to a parabolic trough solar concentrator used in CSP. The aim of this solar collector is to concentrate the entire solar spectrum (280–2500 nm) through the utilization of solar mirrors showing high solar reflectance. This concentrated solar energy is directed onto a vacuum thermal absorber, facilitating the production of high-temperature heat for industrial processes and electricity generation. The collector configuration encompasses three critical components: i) a reflective coating for the solar mirror; ii) an antireflective coating on the vacuum tube with high solar transmittance, and iii) a spectrally selective coating on the thermal absorber, which exhibits high heliothermal efficiency (high solar absorptance, combined with low thermal emittance giving rise to low radiative thermal losses). Figure 6 illustrates the diverse coatings employed in the system and their associated desired optical properties.

Figure 6
Example of SolPOC capabilities for optimizing all coatings utilized in a solar collector in CSP plant: i) reflective coating, ii) antireflective coating and iii) spectrally selective coating.
To demonstrate the robust performance of our SolPOC package, we deliberately selected sophisticated coatings characterized by a substantial number of thin layers. These complex stacks have been carefully chosen to serve as representative models for the cutting-edge solar coatings that are currently being developed within laboratory settings. Regarding mirrors, most industrial solar mirrors are fabricated using a single thin layer of reflective metal, often silver. In our demonstration, we instead propose enhancing the reflectance of an aluminum layer, a cheaper material, by adding 5 bilayers of SiO2/TiO2 on top [37]. Regarding antireflective coatings, we have transitioned from using a single porous SiO2 layer to a more effective three-layered design, but much more difficult to optimize [47]. Finally, regarding solar absorbers, selective coatings play a crucial role in achieving efficient solar-to-thermal conversion. These coatings typically consist of at least three layers, including a metallic layer, a cermet layer and a dielectric layer, applied to a metallic substrate. A good approximation of a conventional design is the Fe/W/W-Al2O3/Al2O3 stack [4]. In our show case, we present a more complex version featuring three cermet layers and two antireflective coatings, further enhancing the heliothermal efficiency (rH).
The first column of Table 2 provides an overview of the typical structure and performance of industrial solar components, derived from System Advisor Model (SAM) by NREL [59]. The second column gives the theoretical results obtained with SolPOC considering more complex structures. These high-quality results show that, thanks to the use of SolPOC, superior solar performance can be achieved compared to existing products. This underscores the package capability to manage more intricate layer stacks. Despite the substantial number of thin layers involved, the software can effectively handle them and deliver efficient optimized solutions for all selected scenarios. Comprehensive result files and the associate Python scripts are accessible on Zenodo [60].
Table 2
Industrial coating performance values from SAM [59] vs. theoretical examples illustrating SolPOC optimization capabilities.
| SURFACE | INDUSTRIAL SOLAR COMPONENTS | OPTIMIZATION EXAMPLES | ||
|---|---|---|---|---|
| NUMBER OF THIN LAYERS | TYPICAL VALUE | OPTIMIZATION VARIABLES | SOLPOC PERFORMANCE RESULTS | |
| Solar mirror | 1 metallic layer | RS: 0.935 | 11 layers thicknesses | RS: 0.966 |
| Vacuum tube | 1 porous layer | TS: 0.964 | 3 layers thicknesses + 3 porosity rates | TS: 0.994 |
| Thermal absorber | 3 or 4 layers with 1 or 2 cermet(s) | AS: 0.963 E(300°C): 0.08 rH(300°C): 0.953 | 6 layers thicknesses + 3 cermet inclusion rates | AS: 0.975 E(300°C): 0.074 rH(300°C): 0.966 |
The optical properties of each type of optimized coating are presented in Figure 7. For the solar mirror Al/[SiO2/TiO2]5, SolPOC successfully optimizes layer thicknesses to align the reflectance curve (black line) with the solar spectrum (ASTM G173–03, red line), achieving a theoretically expected solar reflectance (RS) of 96.6%. For the protective glass, the code optimizes the thickness and porosity (thanks to the EMA model) of three porous antireflective thin films (BK7/[porous SiO2]3), ensuring near-perfect transmissivity across the entire solar spectrum and resulting in a solar transmittance (TS) of 99.6%. In the case of the six-layered selective coating for the thermal absorber, SolPOC effectively optimizes the six layer thicknesses and the three compositions of the W-Al2O3 cermets, to achieve a reflectance spectrum typical of thermal selective absorbers—low in the solar domain and high in the infrared domain (blackbody emission at 300°C (normalized), orange line in Figure 7). This ensures high solar absorptance (AS) and low thermal emittance (E). This optimization leads to a heliothermal efficiency (rH) value of 96.6%, calculated for an absorber temperature of 300°C.

Figure 7
Reflectivity or transmissivity spectra for each type of coatings after optimization.
Figure 8 illustrates the optimization quality for each case, represented by consistency curves. Each consistency curve represents, for each of the three problems, the values of the objective function (i.e., the result) from 16 distinct optimizations that have converged. For ease of reading, the values are sorted in descending order, with the highest results (as we aim to maximize the objective functions here) to the left of each curve. The criterion here is to look for the presence of a plateau of extrema, indicating that the algorithm has repeatedly found high performance or even identical solutions. In the case of the solar mirror (Figure 8, left) a small plateau of values at 96.66% can be observed on the left: the global optimum is reached 2 times out of 16. The rest of the curve slopes upwards, indicating that each optimization has produced a different result despite the fact that they have converged. This suggests that the problem is rich in local optima, making optimization challenging and indicative of a complex problem. In these instances, it is worthwhile investigating the parameters of the optimization process, increasing the budget (the number of iterations), or benchmark optimization algorithms. In the case of the vacuum tube (Figure 8, middle), the problem is solved, and optimization is highly satisfactory. Each optimization converges to the same optimum, instilling great confidence in the validity of the result. This flat consistency curve is ideal, representing the kind of curve we would seek systematically. For the thermal absorber (Figure 8, right), the optimization produces a similar result 13 times over 16. The slightly increasing trend indicates micro-adjustments to the variables, e.g., below 0.1 nm for thin film thicknesses. The presence of a few sub-optimal values on the right-hand side of the graph indicates some local optima, underscoring the importance of running an optimization problem several times.

Figure 8
Consistency curves for different optimization processes, using DE optimization method.
Discussion
The main differences between SolPOC and other open-source optical modeling codes such as PyMoosh, TMM-Fast, or SolCORE lie in the fact that SolPOC has been specifically designed for the solar energy community, targeting both researchers and engineers who are not primarily programmers. These users often work with MatLab environments and are involved in iterative workflows combining optical modeling, thin-film deposition, and experimental characterization. Our primary goal has therefore been to provide clear, accessible, and ready-to-use tools for this community. In addition to the core computational functions, SolPOC offers a series of template scripts that can be executed directly to address common solar-energy-related cases.
The existence of SolPOC alongside other optical packages can be explained by the genesis of the project, which started in 2018. The TMM-Fast code was proposed later, in 2022, when SolPOC was already in use within our research teams [17]. As its name suggests, TMM-Fast relies on the Transfer Matrix Method, while we chose to implement the Abélès formalism [16]. The benchmark (see section Optical properties calculation time) comparison performed under our typical usage conditions (optimization over the solar spectrum using CPU-based computation) shows that SolPOC achieves shorter computation times than TMM-Fast. At present, we have deliberately decided to remain on CPU computation, as GPU resources have become increasingly limited due to the growing demand from artificial intelligence applications and are not yet integrated into our research infrastructure. Although PyMoosh is a powerful optical and photonic simulation package for research and educational purposes with advanced features, it only integrated a function for rapidly evaluating the optical response across the full solar domain in September 2024, several months after the public release of SolPOC in early 2024.
Currently, SolPOC has become a valuable tool in several ongoing research projects, notably in the design of spectral-splitting surfaces for PV–CST hybridization within the SelHySol and IDEA4Sun projects [61, 62]. Its computational efficiency has been a key factor in these projects, and the direct implementation of a tuned version of the Differential Evolution (DEvol) algorithm has yielded excellent results on several complex optical optimization problems [63, 64]. For this reason, we have chosen to maintain specific in-house optimizers within SolPOC, in addition to providing access to reference methods available in established packages such as SciPy and Nevergrad.
Conclusion
The deployment of renewable energies such as photovoltaics or solar thermal systems requires innovative and highly efficiency surface coatings to efficiently harness and convert the abundant energy from the sun. Industry and academics need a free, easily tunable, and efficient code for modeling and optimizing thin layer stacks for solar energy. After several years of development and internal use in PROMES-CNRS laboratory, we propose to make SolPOC (Solar Performance Optimization Code) freely available to the community. SolPOC is a Python package specifically crafted for studying and designing optical surface coatings for energy applications. The package relies on proven optical theories with different optimization algorithms and objective functions specially designed for solar energy utilization. A full material database is also available, and the package includes an Effective Medium Approximation to easily model cermet of porous layers. SolPOC package is also designed to reduce calculation time, with play an important role in advanced optimization process. We want to emphasize the critical importance of open science, advocating for the transparent sharing of codes and methods, as no similar code exists. This approach stands as the most effective means to surmount the inevitable challenges encountered in the development of advanced coatings for solar energy technologies.
Acknowledgements
The authors express their gratitude to Titouan Fevrier for his work on SolPOC during his internship and Youen Boënnec for his voluntary bug tracking and for providing GPU resources for tests.
Competing Interests
The authors have no competing interests to declare.
