# -*- coding: utf-8 -*- # ====================================================================================================== # SLALOM - Open-Source Solar Cell Multivariate Optimizer # Copyright(C) 2012-2019 Sidi OULD SAAD HAMADY (1,2,*), Nicolas FRESSENGEAS (1,2). All rights reserved. # (1) Université de Lorraine, Laboratoire Matériaux Optiques, Photonique et Systèmes, Metz, F-57070, France # (2) Laboratoire Matériaux Optiques, Photonique et Systèmes, CentraleSupélec, Université Paris-Saclay, Metz, F-57070, France # (*) sidi.hamady@univ-lorraine.fr # SLALOM source code is available to download from: # https://github.com/sidihamady/SLALOM # https://hal.archives-ouvertes.fr/hal-01897934 # http://www.hamady.org/photovoltaics/slalom_source.zip # Cite as: S Ould Saad Hamady and N Fressengeas, EPJ Photovoltaics, 9:13, 2018. # See Copyright Notice in COPYRIGHT # ====================================================================================================== # ------------------------------------------------------------------------------------------------------ # File: slalomSimulator.py # Type: Class # Use: slalomSimulator is used by slalomCore.py # it includes the solar cell simulators interface... # ...and can be easily extended to include any simulator that can be launched... # ...from the command line and output results in text files # ...(as for any well-designed simulator) # ------------------------------------------------------------------------------------------------------ import os import sys from slalomCore import * class slalomSimulator(object): """ the SLALOM interface class for solar cell simulators """ def __init__(self, name): """ slalomSimulator constructor """ self.__version__ = slalomVersion # list of supported simulators self.supported = ["atlas", "tibercad"] self.command = list() self.update("atlas") # end __init__ def update(self, name, inputFilename = None, currentDir = None, outputDir = None, verboseFilename = None): """ slalomSimulator constructor """ self.name = "atlas" if (name is None) else name if self.name not in self.supported: dispError("Unknown simulator engine '%s'" % str(self.name), doExit = True) # end if del self.command[:] self.command = list() if (outputDir is not None): if (os.name == "nt"): self.command.append("@echo off") self.command.append("cd " + outputDir) else: self.command.append("#!/bin/sh") self.command.append("cd " + outputDir) # end if # end if if (self.name == "atlas"): self.header = "v ATLAS" self.error = "ERROR:" self.error = [("ERROR:","Atlas error"),("SCI System Error:","Silvaco C interpreter error")] self.filedecl = ["outfile=\"%s\"", "outf=\"%s\"", "datafile=\"%s\"", "dataf=\"%s\""] self.vardeclpre = "set %s" self.vardecl = "set %s=%g" self.dataSeparator = " " if (inputFilename is not None) and (verboseFilename is not None): self.command.append("deckbuild -run " + inputFilename + " -outfile " + verboseFilename + " -noplot") # end if elif (self.name == "tibercad"): self.header = "v ATLAS" self.error = [("ERROR:","Atlas error"),("SCI System Error:","Silvaco C interpreter error")] self.filedecl = ["outfile=\"%s\"", "outf=\"%s\"", "datafile=\"%s\"", "dataf=\"%s\""] self.vardeclpre = "set %s" self.vardecl = "set %s=%g" self.dataSeparator = " " if (inputFilename is not None) and (verboseFilename is not None): self.command.append("deckbuild -ascii -run " + inputFilename + " -outfile " + verboseFilename + " -noplot") # end if else: dispError("Unknown simulator engine '%s'" % str(self.name), doExit = True) # end if if (currentDir is not None): if (os.name == "nt"): self.command.append("cd " + currentDir) self.command.append("exit") else: self.command.append("cd " + currentDir) self.command.append("exit 0") # end if # end if # end update # end slalomSimulator