System and Component Models¶
mswh.system.components module¶
-
class
mswh.system.components.
Converter
(params=None, weather=None, sizes=1.0, log_level=10)[source]¶ Bases:
object
Contains energy converter models, such as solar collectors, electric resistance heaters, gas burners, photovoltaic panels, and heat pumps. Depending on the intended usage, the models can be used to determine either a time period of component operation (for example an entire year), or a single timestep of component performance.
Parameters:
- params: pd df
Component performance parameters per project Default: None (default model parameters will get used)
- weather: pd df
Weather data timeseries with columns: amb. temp, solar irradiation. Number of rows equals the number of timesteps. Default: None (constant values will be set - use for a single timestep calculation, or if passing arguments directly to static methods)
- sizes: pd df
Component sizes per project. Default: 1. (see individual components for specifics)
- log_level: None or python logger logging level,
Default: logging.DEBUG This applies for a subset of the class functionality, mostly used to deprecate logger messages for certain calculations. For Example: log_level = logging.ERROR will only throw error messages and ignore INFO, DEBUG and WARNING.
Note:
If more than one of the same component is a part of the system, a separate instance of the converter should be created for each instance of the component.
Each component is also implemented as a static method that can be used outside of this framework.
Examples:
See
mswh.system.tests.test_components
module andscripts/Project Level MSWH System Tool.ipynb
for examples on how to use the methods as stand alone and in a system model simulation.-
electric_resistance
(Q_dem)[source]¶ Electric resistance heater model. Can be used both as an instantaneous electric WH and as an auxiliary heater within the thermal tank.
Parameters:
- Q_dem: float or array like, [W]
Heat demand
Returns:
- res: dict
self.r[‘q_del_bckp’] : float, array - delivered heat rate, [W]
self.r[‘q_el_use’] : float, array - electricity use, [W]
self.r[‘q_unmet’] : float, array - unmet demand heat rate, [W]
-
gas_burner
(Q_dem)[source]¶ Gas burner model. Used both as an instantaneous gas WH and as a gas backup for solar thermal.
Parameters:
- Q_dem: float or array like, W
Heat demand
Returns:
- res: dict
self.r[‘q_del_bckp’] : float, array - delivered heat rate, [W]
self.r[‘q_gas_use’] : float, array - gas use heat rate, [W]
self.r[‘q_unmet’] : float, array - unmet demand heat rate, [W]
Any further unit conversion should be performed using unit_converters.Utility class
-
heat_pump
(T_wet_bulb, T_tank)[source]¶ Returns the current heating performance and electricity usage in the current conditions depending on wet bulb temperature, average tank water temperature, and the rated heating performance.
Rated conditions are: wet bulb = 14 degC, tank = 48.9 degC
Parameters:
- T_wet_bulb: real, array
Inlet air wet bulb temperature [K]
- T_tank: real, array
Water temperature in the storage tank [K]
- C1: real
Coefficient 1, either for normalized COP or heating capacity curve [-]
- C2: real
Coefficient 2, either for normalized COP or heating capacity curve [1/degC]
- C3: real
Coefficient 3, either for normalized COP or heating capacity curve [1/degC2]
- C4: real
Coefficient 4, either for normalized COP or heating capacity curve [1/degC]
- C5: real
Coefficient 5, either for normalized COP or heating capacity curve [1/degC2]
- C6: real
Coefficient 6, either for normalized COP or heating capacity curve [1/degC2]
Returns:
- performance: dict
‘cop’: current Coefficient Of Performance (COP), [-]
‘heat_cap’: current heating capacity of heat pump, [W]
‘el_use’: current electricity use of heat pump [W]
-
photovoltaic
(use_p_peak=True, inc_rad=None)[source]¶ Photovoltaic model
Parameters:
- use_p_peak: boolean
Boolean flag determining if peak power is used for sizing the pv panel (instead of area and efficiency)
Returns:
- self.pv_power: dict of floats
Generated power [W]
‘ac’ : AC
‘dc’ : DC
-
property
size
¶
-
solar_collector
(t_in, t_amb=None, inc_rad=None)[source]¶ Two commonly used empirical instantaneous collector efficiency models based on test data from standard test procedures (SRCC, ISO9806), found in J. A. Duffie and W. A. Beckman, Solar engineering of thermal processes, 3rd ed. Hoboken, N.J: Wiley, 2006., are:
Cooper and Dunkle (CD model, eq 6.17.7)
Hottel-Whillier-Bliss (HWB model, eq 6.16.1, 6.7.6)
Parameters:
- t_in: float, array
Collector inlet temperature (timeseries) [K]
- t_amb: float, array
Ambient temperature (timeseries) [K] Default: None (to use data extracted from the weather df)
- inc_rad: float, array
Incident radiation (timeseries) [W] Default: None (to use data extracted from the weather df)
Returns:
res: dict or floats or arrays
- {‘Q_gain’Solar gains from the gross collector area, [W]
‘eff’ : Efficiency of solar to heat conversion, [-]
-
property
weather
¶
-
class
mswh.system.components.
Distribution
(params=None, sizes=1.0, fluid_medium='water', timestep=1.0, log_level=10)[source]¶ Bases:
object
Describes performance of distribution system components.
- Parameters:
- sizes: pd df
Pandas dataframe with component sizes, or 1.
- fluid_medium: string
Default: ‘water’. No other options implemented
- timestep: float, h
Duration of a single timestep, in hours, defaults to 1.
- log_level: None or python logger logging level,
Default: logging.DEBUG This applies for a subset of the class functionality, mostly used to deprecate logger messages for certain calculations. For Example: log_level = logging.ERROR will only throw error messages and ignore INFO, DEBUG and WARNING.
Note:
Each component is also implemented as a static method that can be used outside of this framework.
Examples:
See
mswh.system.tests.test_components
module and for examples on how to use the methods.-
pipe_losses
(T_in=333.15, T_amb=293.15, V_tap=0.05, max_V_tap=0.1514)[source]¶ Thermal losses from distribution pipes.
Parameters:
- T_in: float, K
Hot water temperature at distribution pipe inlet
- T_amb: float, K
Ambient temperature
- V_tap: float, m3/h
Timestep draw volume
- max_V_tap: float, m3/h
Maximum draw volume, m3/h (design variable)
Returns:
- res: dict
[‘heat_rate’]: Loss heat rate, W
-
pump
(on_array=array([1., 1., 1., ..., 1., 1., 1.]), role='solar')[source]¶ Solar and distribution pump energy use. Assumes a fixed speed pump.
Parameters:
- on_array: array
Pump on/off status for the chosen number of discrete timesteps Default: np.ones(8760) - on for a year in hourly timesteps.
- role: string
‘solar’ : primary (solar collector) loop ‘distribution’ : secondary (distribution) loop
Returns:
en_use: float or array like
-
property
size
¶
-
class
mswh.system.components.
Storage
(params=None, size=1.0, type='sol_tank', timestep=1.0, log_level=10)[source]¶ Bases:
object
Describes performance of storage components, such as solar thermal tank, heat pump thermal tank, conventional gas tank water heater.
Parameters:
- params: pd df
Component performance parameters per project Default: None. See tests and examples on how to structure this input.
- weather: pd df
Weather data timeseeries (amb. temp, solar irradiation) Default: None. See tests and examples on how to structure this input.
- size: pd df or float, m3
Tank size. Default 1. See tests and examples on how to structure this input.
- type: string
Type of storage component. Options:
‘sol_tank’ - indirect tank WH with a coil to circulate fluid heated by a solar collector
‘hp_tank’ - tank with an inbuilt heat pump ‘wham_tank’ - conventional gas tank water heater model based on a WH model from the efficiency standards analysis
‘gas_tank’ - conventional gas tank water heater (currently not implemented)
- log_level: None or python logger logging level,
Default: logging.DEBUG This applies for a subset of the class functionality, mostly used to deprecate logger messages for certain calculations. For Example: log_level = logging.ERROR will only throw error messages and ignore INFO, DEBUG and WARNING.
- timestep: float, h
Duration of a single timestep, in hours, defaults to 1.
Note:
Create a new instance of the class for each storage component.
Examples:
See
mswh.system.tests.test_components
module andscripts/MSWH System Tool.ipynb
for examples on how to use the methods as stand alone and in a system model simulation.-
gas_tank_wh
(V_draw, T_feed, T_amb=291.48)[source]¶ Gas storage water heater model (_gas_tank_wh) wrapper.
Parameters:
- V_draw: float or array like, m3/h
Hourly water draw for a single timestep of an entire analysis period
- T_feed: float or array like, K
Temperature of water heater inlet water for a single timestep of an entire analysis period
- T_amb: float or array like, K
Temperature of space surrounding water heater Default: 65 degF
Returns:
- res: dict
self.r[‘q_del’] : float, array - delivered heat rate, [W]
self.r[‘q_dem’] : float, array - demand heat rate, [W]
self.r[‘q_gas_use’] : float, array - gas use heat rate, [W]
self.r[‘q_unmet’] : float, array - unmet demand, [w]
self.r[‘q_dump’] : float, array - dumped heat, [W]
Note:
Assuming no electricity consumption in this version.
Make sure to size the tank according to the recommended sizing rules, since the WHAM model does not apply to tanks that are not appropriately sized.
-
setup_thermal
(medium='water', split_tank=True, vol_fra_upper=0.5, h_vs_r=6.0, dT_param=2.0, T_max=344.15, T_draw_set=322.04, insul_thickness=0.085, spec_hea_cond=0.04, coil_eff=0.84, tank_re=0.76, dT_err_max=2.0, gas_heater_autosize=False)[source]¶ Sets thermal storage variables related to:
loss calculation
distribution of net gains/losses within two tank volumes (upper and lower)
Parameters:
- medimum: string
Storage medium (for thermal defaults to ‘water’)
- split_tank: boolean
If true, the tank is observed as two volumes, upper and lower tank volume. If false, the tank is observed as a single tank
- vol_fra_upper: float
Fraction of storage volume assigned to the upper tank volume (applies to ‘thermal’ only) If split_tank set to False, the value is ignored
- dT_param: float, K
Used as:
Maximum temperature difference expected to occur between the upper and the lower tank volume while charging
In-tank-coil approach
- h_vs_r: float
Regression parameter - tank height/diameter ratio (based on web scraped data), default: 6.
- T_max: float, K
Maximum allowed fluid temperature in the thermal storage tank, defaults to 344.15 K = 71 degC.
- T_draw_set: float, K
Draw temperature used in the load calculation, defaults to 120 degF = 322.04 K = 48.89 degC
- insul_thickness: float, m
Insulation thickness Default: .04 m (1-2 inch gas, 2-3 inch electric, based on DOE residential water heaters energy efficiency standard (ECS) analysis)
- spec_hea_cond: float, W/mK
Specific heat conductivity of the insulation Default: .04 W/mK (:from library:ModelicaBuidlings)
- coil_eff: float
Simplified efficiency of the coil heat exchanger Used in modeling of indirect coil-in-tank water heaters It excludes the approach temperature and represents the remaining heat transfer inefficiency
- tank_re: float
Recovery efficiency of a gas tank water heater. Used for the Storage.gas_tank_wh model
- dT_err_max: float
Allowed dT error below the minimum tank temperature due to finite timestep length approximation
- gas_heater_autosize: boolean
There is a gas heater in the tank and it will be autosized based on the tank volume
-
property
size
¶
-
tap
(V_draw_load, T_tank, T_feed, dT_loss=0.0, T_draw_min=None)[source]¶ Calculates the water draw volume and heat content drawn from the top of an infinitely large adiabatic tank given the hot water demand, tank temperature and the water main temperature.
It functions somewhat similarly to a thermostatic valve since it regulates the tap flow from the tank as follows:
Limits above if the tank temperature is higher than the nominal draw temperature
Tap flow equals V_draw_load for any tank temperature between T_draw_min and T_draw_nom
Tap flow is zero if tank temperature is below T_draw_min and T_draw_min is provided
The results represent the theoretical limit for the draw. The tank model will check if the full amount can be delivered or only a part of the demand, due to the limited tank volume and thermal losses from the tank, and adjust the values.
Parameters:
- V_draw_load: float, m3/h
Volume of DHW drawn at the nominal end-use load temperature.
- T_tank: float, K
Tank node temperature from which the DHW is being tapped (usually the upper volume)
- T_feed: float or array, K
Temperature of water heater inlet water
- dT_loss: float, K
Distribution loss temperature difference
- T_draw_min: float, K
Minimal temperature that needs to be achieved in the tank in order to allow tapping.
Default: None - tapping is always enabled
Recommended usage - in colder climates where an outdoors tank may be cooler than the water main.
Returns:
- draw: dict
Draw volume: ‘vol’, m3/h
Total demand heat rate: ‘tot_dem’, W
Infinite volume delivered heat rate: ‘heat_rate’, W
Infinite volume unmet heat rate: ‘unmet_heat_rate’, W
-
thermal_tank
(pre_T_amb=293.15, pre_T_feed=291.15, pre_T_upper=328.15, pre_T_lower=323.15, pre_V_tap=0.00757, pre_Q_in=400.0, max_V_tap=0.1514)[source]¶ Model of a thermal storage tank with:
Coil heat exchanger for the solar gains
DHW tap at the top of the tank
Recharge tap at the bottom of the tank
The model can be instantiated as a:
Solar thermal tank
Heat pump tank
Parameters:
- type: string
‘solar’ - solar tank (assumes that heated fluid from a solar collector is circulated through an in-tank-coil)
‘hp’ - heat pump tank (assumes an inbuilt heat pump as a main heat source)
The type will affect output labeling and heat transfer efficiency.
- pre_T_amb: float, K
Ambient temperature
- pre_T_feed: float, K
Temperature of the water that replenishes the tapped volume (e.g. water main temperature)
- pre_T_upper: float, K
Upper tank volume temperature
- pre_T_lower: float, K
Lower tank volume temperature
- pre_Q_in: float, W
Heat gain passed to in-tank coil from solar collector or from a heat pump, depending on the type
- pre_V_tap: float, m3/h
Volume of water tapped from the top of the tank
- max_V_tap: float, m3/h
Annual peak flow
Returns:
- res: dict
Single timestep input and output values for temperatures [K] and heat rates [W]:
>>> {net_gain_label : pre_Q_in_net, self.r['q_loss_low'] : pre_Q_loss_lower, self.r['q_loss_up'] : pre_Q_loss_upper, # demand, delivered and unmet heat # (between tap setpoint and water main) self.r['q_dem'] : tap['net_dem'], self.r['q_dem_tot'] : tap['tot_dem'], self.r['q_del_tank'] : tank[self.r['q_del_tank']], self.r['q_unmet_tank'] : np.round( tank[self.r['q_unmet_tank']] + tap['unmet_heat_rate'], 2), self.r['q_dump'] : tank[self.r['q_dump']], self.r['q_ovrcool_tank'] : tank[self.r['q_ovrcool_tank']], self.r['q_dem_balance'] : np.round(Q_dem_balance), # average temperatures for tank volumes self.r['t_tank_low'] : tank[self.r['t_tank_low']], self.r['t_tank_up'] : tank[self.r['t_tank_up']], self.r['dt_dist'] : dist['dt_dist'], self.r['t_set'] : self.T_draw_set, self.r['q_dist_loss'] : dist['heat_loss'], self.r['flow_on_frac'] : dist['flow_on_frac']} Temperatures in K, heat rates in W
-
thermal_tank_dynamics
(pre_T_amb, pre_T_upper, pre_T_lower, pre_Q_in, pre_Q_loss_upper, pre_Q_loss_lower, pre_T_feed, pre_Q_tap)[source]¶ Partial model of a thermal storage tank. Applies first order forward marching Euler method and updates the tank state for the current timestep based on the enthalpy balance and simplified assumptions about stratification. Thus, all input variables pertain to the previous timestep, while the outputs are solutions for the current timestep.
For example partial model application see thermal_tank method.
See inline comments for detailed explanation of the model.
Parameters:
- pre_T_amb: float, K
Ambient air temperature
- pre_T_upper: float, K
Upper tank volume temperature
- pre_T_lower: float, K
Lower tank volume temperature
It is recommended to set equal initial values for pre_T_upper and pre_T_lower
- pre_Q_in: float, W
Total heat gain (e.g. from a coil heat exchanger, a heating element, etc.)
- pre_Q_loss_upper: float, W
Heat loss from the upper tank volume
- pre_T_lower: float, W
Heat loss from the lower tank volume
- pre_T_feed: float, K
Temperature of the water that replenishes the tapped volume (e.g. water main temperature)
- pre_Q_tap: float, W
Heat loss that would occur if the tank volume at pre_T_upper was infinite
Returns:
- res: dict of floats
Represent averages in a single timestep. Average temperatures for tank volumes:
self.r[self.r[‘t_tank_low’]] : lower, K
self.r[‘t_tank_up’] : upper, K
Heat rates:
‘Q_net’ : expected timestep net gain/loss based on inputs, W self.r[‘q_dump’] : dumped heat, W
‘Q_draw’ : delivered to load W
‘Q_draw_unmet’ : unmet load due to finite tank volume, W self.r[‘q_ovrcool_tank’] : error in balancing due to minimal tank temperature limit assumption in each timestep
Note: ‘Q_draw’ + ‘Q_draw_unmet’ = pre_Q_tap
mswh.system.models module¶
-
class
mswh.system.models.
System
(sys_params=None, backup_params=None, weather=None, sys_sizes=1.0, backup_sizes=1.0, loads=None, timestep=1.0, log_level=10)[source]¶ Bases:
object
Project level system models:
Assembles system configurations
Performs timestep simulation
Returns annual and timestep project and household level results, such as gas and electricity use, heat delivered, unmet demand and solar fraction.
Parameters:
- sys_params: pd df
Main system component performance parameters per project Default: None (default model parameters will get used)
- backup_params: pd df
Backup system performance parameters per project. It should contain a household ID column, otherwise columns identical to params.
- sys_sizes: pd df
Main system component sizes Default: 1. (see individual components for specifics)
- backup_sizes: pd df
Backup system component sizes, contains household id column Default: 1. (see individual components for specifics)
- weather: pd df
Weather data timeseries. Number of rows equals the number of timesteps. Can be generated using the Source.irradiation_and_water_main method
Example:
>>> sourceASource(read_from_input_dataframes = inputs)
Oakland climate zone in CEC weather data is ‘03’:
>>> self.weather = source.irradiation_and_water_main('03', method='isotropic diffuse')
- loads: pd df
A dataframe with loads for all individual household served by the project level system. It should contain 3 columns: household id, occupancy and a column with a load array in m3 for each household.
Example:
>>> loads_com = pd.DataFrame(data = [[1, occ_indiv - 1., 0.8 * load_array],[2, occ_indiv, 1. * load_array],[3, occ_indiv, 1.2 * load_array],[4, occ_indiv + 1., 1.4 * load_array]], columns = [self.c['id'], self.c['occ'], self.c['load_m3']])
- timestep: float, h
Duration of a single timestep, in hours Default: 1. h
- log_level: None or python logger logging level,
Default: logging.DEBUG This applies for a subset of the class functionality, mostly used to deprecate logger messages for certain calculations. For Example: log_level = logging.ERROR will only throw error messages and ignore INFO, DEBUG and WARNING.
Examples:
See
mswh.system.tests.test_components
module andscripts/MSWH System Tool.ipynb
for examples on how to use the methods as stand alone and in a system model simulation.-
conventional_gas_tank
()[source]¶ Basecase conventional gas tank water heater. Make sure to size the tank according to the recommended sizing rules, since the WHAM model does not apply to tanks that are not appropriately sized.
Returns:
- ts_proj: dict of arrays, W
Heat:
self.r[‘q_del’]: delivered
self.r[‘gas_use’]: gas consumed
-
simulate
(type='gas_tank_wh')[source]¶ Runs a 8760. hourly simulation of the provided system type.
Parameters:
- type: string
‘gas_tank_wh’
‘solar_thermal_retrofit’ (gas tank backup at each household)
‘solar_thermal_new’ (gas tankless backup at each household)
‘solar_electric’
Returns:
- en_use: dict
Total energy use for the analysis period:
‘gas’, Wh
‘electricity’, Wh
- sys_res: list
List containing detailed system level output. See dedicated methods for details
-
solar_electric
(backup='electric')[source]¶ Connects the components of the solar electric system and enables simulation.
Parameters:
- backup: string
electric - instantaneous WHs (new installations)
Returns:
- sys_en_use: dict
System level energy use for the analysis period: ‘electricity’, Wh
- sol_fra: dict
Solar fraction. Keys: ‘annual’, ‘monthly’
- ts_res: pd df
Colums populated with state variable timeseries, such as average timstep heat rates and temperatures
- res: dict
Summarizes ts_res. Any heat rates are summed, while the temperatures are averaged for the analysis period (usually one year)
- el_use: dict
Electricity use broken into end uses ‘dist_pump’ - distribution pump, if present
- rel_err: float
Balancing error due to limitations of finite timestep averaging. More precisely, due to selecting minimum tank temperature as the lower between the water main and the ambient.
-
solar_thermal
(backup='gas')[source]¶ Connects the components of the solar thermal system and simulates it in discrete timesteps.
Parameters:
- backup: string
retrofit - pulls from the basecase for each household gas, electric - instantaneous WHs (new installations)
Returns:
- self.cons_total: pd df
Consumer level energy use [W], heat rates [W], average temperatures [K], and solar fraction for the analysis period.
- proj_total: pd series
Project level energy use [W], heat rates [W], average temperatures [K], and solar fraction for the analysis period.
- sol_fra: dict
Solar fraction. Keys: ‘annual’, ‘monthly’
- pump_el_use: dict
Electricity use broken into end uses ‘dist_pump’ - distribution pump, if present ‘sol_pump’ - solar pump
- ts_res: pd df
Timestep project level results for all energy uses [W], heat rates [W], temperatures [K], and the load.
- backup_ts_cons: dict of dicts
Timestep household level results for energy uses [W], and heat rates [W].
- rel_err: float
Balancing error due to limitations of finite timestep averaging.
-
property
weather
¶
mswh.system.source_and_sink module¶
-
class
mswh.system.source_and_sink.
SourceAndSink
(input_dfs=None, random_state=123, log_level=10)[source]¶ Bases:
object
Generates timeseries that are inputs to the simulation model and are known prior to the simulation, such as outdoor air temperature and end use load profiles.
Parameters:
- input_dfs: a dict of pd dfs
Dictionary of input dataframes as read in from the input db by the
Sql
class (see example intest_source_and_sink.SourceAndSinkTests.setUp
)- random_state: numpy random state object or an integer
numpy random state object : if there is a need to maintain the same random seed throughout the analysis.
integer : a new random state object gets instanteated at init
- log_level: None or python logger logging level,
Default: logging.DEBUG This applies for a subset of the class functionality, mostly used to deprecate logger messages for certain calculations. For Example: log_level = logging.ERROR will only throw error messages and ignore INFO, DEBUG and WARNING.
-
static
demand_estimate
(occ)[source]¶ Estimates gal/day demand as provided in the CSI-Thermal Program Handbook, April 2016 for installations with a known occupancy
Parameters:
- occ: float
Number of individual household occupants
-
irradiation_and_water_main
(climate_zone, collector_tilt='latitude', tilt_standard_deviation=None, collector_azimuth=0.0, azimuth_standard_deviation=None, location_ground_reflectance=0.16, solar_constant_Wm2=1367.0, method='isotropic diffuse', weather_data_source='cec', single_row_with_arrays=False)[source]¶ Calculates the hourly total incident radiation on a tilted surface for any climate zone in California. If weather data from the provided database are passed as input_dfs, the user can specify a single climate.
Two separate methods are available for use, with all equations (along with the equation numbers provided in comments) as provided in J. A. Duffie and W. A. Beckman, Solar engineering of thermal processes, 3rd ed. Hoboken, N.J: Wiley, 2006.
Parameters:
- climate_zone: string
String of two digits to indicate the CEC climate zone being analyzed (‘01’ to ‘16’).
- collector_azimuth: float, default: 0.
The deviation of the projection on a horizontal plane of the normal to the collector surface from the local meridian, in degrees. Allowable values are between +/- 180 degrees (inclusive). 0 degrees corresponds to due south, east is negative, and west is positive. Default value is 0 degrees (due south).
- azimuth_standard_deviation: float, default: ‘None’
Final collector azimuth is a value drawn using a normal distribution around the collector_azimuth value with a azimuth_standard_deviation standard deviation. If set to ‘None’ the final collector azimuth equals collector_azimuth
- collector_tilt: float, default: ‘latitude’
The angle between the plane of the collector and the horizontal, in degrees. Allowable values are between 0 and 180 degrees (inclusive), and values greater than 90 degrees mean that the surface has a downward-facing component. If a default flag is left unchanged, the code will assign latitude value to the tilt as a good approximation of a design collector or PV tilt.
- tilt_standard_deviation: float, default: ‘None’
Final collector tilt is a value drawn using a normal distribution around the collector_tilt value with a tilt_standard_deviation standard deviation. If set to ‘None’ the final collector tilt equals collector_tilt
- location_ground_reflectance: float, default: 0.16
The degree of ground reflectance. Allowable values are 0-1 (inclusive), with 0 meaning no reflectance and 1 meaning very high reflectance. For reference, fresh snow has a high ground reflectance of ~ 0.7. Default value is 0.16, which is the annual average surface albedo averaged across the 16 CEC climate zones.
- method: string, default: ‘HDKR anisotropic sky’
Calculation method to use for estimating the total irradiance on the tilted collector surface. See notes below. Default value is ‘HDKR anisotropic sky.’
- solar_constant_Wm2: float, default: 1367.
Energy from the sun per unit time received on a unit area of surface perpendicular to the direction of propagation of the radiation at mean earth-sun distance outside the atmosphere. Default value is 1367 W/m^2.
- weather_data_source: string, default: ‘cec’
The type of weather data being used to analyze the climate zone for solar insolation. Allowable values are ‘cec’ and ‘tmy3.’ Default value is ‘cec.’
- single_row_with_arraysboolean
A flag to reformat the resulting dataframe in a row of data where each resulting 8760 is stored as an array
Returns:
- data: pd df
Weather data frame with appended columns: ‘global_tilt_radiation_Wm2’, ‘water_main_t_F’, ‘water_main_t_C’, ‘dry_bulb_C’, ‘wet_bulb_C’, ‘Tilt’, ‘Azimuth’]
Notes:
The user can select one of two methods to use for this calculation:
- ‘isotropic diffuse’:
This model was derived by Liu and Jordan (1963). All diffuse radiation is assumed to be isotropic. It is the simpler and more conservative model, and it has been widely used.
- ‘HDKR anisotropic sky’:
This model combined methods from Hay and Davies (1980), Klucher (1979), and Reindl, et al. (1990). Diffuse radiation in this model is represented in two parts: isotropic and circumsolar. The model also accounts for horizon brightening. This is also a simple model, but it has been found to be slightly more accurate (and less conservative) than the ‘isotropic diffuse’ model. For collectors tilted toward the equator, this model is suggested.