Skip to content

Expose first_solar_spectral_correction in ModelChain and PVSystem #359

@wholmgren

Description

@wholmgren

I suggest the following steps to expose the first_solar_spectral_correction function to ModelChain:

  1. Add a PVSystem.first_solar_spectral_correction(pw, airmass_absolute) method that wraps the atmosphere.first_solar_spectral_correction(pw, airmass_absolute, module_type=None, coefficients=None) function. This is straightforward except for deciding how to handle the keyword arguments. The Sandia module database has a Material key and the CEC database has a Technology key. These keys could be mapped to the allowed module_type arguments. I'm not sure what to do about the coefficients option. Perhaps direct users to put their custom coefficients in module_parameters['fs_spectral_coefficients']?

  2. Implement the stub ModelChain.first_solar_spectral_loss method. Maybe something like:

    def first_solar_spectral_loss(self):
        self.spectral_modifier = self.system.first_solar_spectral_loss(
            self.weather['precipitable_water'], self.airmass['airmass_absolute'])
        return self

I'm guessing that most users don't have PW in their weather dataframes, so this line is going to be a frequent source of errors. We might consider adding a try/except KeyError with a more helpful error message.

  1. Improve ModelChain.infer_spectral_model. This probably amounts to setting mc._spectral_model = mc.first_solar_spectral_loss if a CEC module or a module_parameters['fs_spectral_coefficients'] key is detected on the PVSystem object.

  2. Optional. Add a dewpoint temperature to precipitable water conversion to the ModelChain.prepare_inputs method.

  3. Add tests.

  4. Update documentation.

It's unfortunate that sapm_spectral_loss and first_solar_spectral_correction live in different modules. Fixing that could be step 0, or we could leave it alone.

I'm in no rush to implement this, but I'd help anyone with a pull request.

see also #358

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions