NREL / reV

Renewable Energy Potential (reV) Model
https://nrel.github.io/reV/
BSD 3-Clause "New" or "Revised" License
101 stars 24 forks source link

Wind cf_profile > 1 #429

Closed Zoe-Fehlau-ES closed 11 months ago

Zoe-Fehlau-ES commented 11 months ago

I am generating wind shapes for various locations and can successfully run my code. However, looking at the results, I think there is an issue with the cf_profile because I am getting capacity factors in some cases as large as 40, which does not make sense. I change the hub height and system capacity to match the wind unit. I also change wind_farm_losses_percent to turb_generic_loss otherwise I get this: WARNING:reV.SAM.version_checker:It appears old SAM v1 keys are being used. Updated key "wind_farm_losses_percent" to "turb_generic_loss".

Here is my code:

Wind_Locations = {
'Helena Wind Farm (Foxtrot)': [ 268, np.array([[28.63607, -97.95484]])],
'Reading Wind Project (Lyon County)': [ 200.1, np.array([[38.50953, -96.0297]])],
'Triple H Wind Project': [ 250.2, np.array([[44.42812, -99.51779]])],
'Wildwind Project (Wildcat Creek) (ERAWIND)': [ 180.1, np.array([[33.57499, -97.39274]])]
}

year = 2013
hub_ht = 100 #m
Errors = []
for Site, (Wsys_cap, lat_lons) in Wind_Locations.items(): #Capacity is Unit Nameplate Capacity (MW)
    print(f'\nStarting {Site}')
    resource ='windpower'
    res_file = f'/nrel/wtk/conus/wtk_conus_{year}.h5'  # HSDS 'file' path
    sam_file = os.path.join('reV/tests/data', 'SAM/wind_gen_standard_losses_0.json')

    with open(sam_file, 'r') as f:
        sam_config = json.load(f)

    sam_config['system_capacity'] = Wsys_cap
    sam_config['wind_turbine_hub_ht'] = hub_ht

    sam_config['turb_generic_loss'] = sam_config.pop('wind_farm_losses_percent')

    sam_config['turb_generic_loss']= 2.4 #General estimate from research

    sam_fp = rf'_configur\{Wsys_cap}MW_{hub_ht}m_Wgen.json'
    with open(sam_fp, 'w+') as tmp:
        tmp.write(json.dumps(sam_config))

    pp = ProjectPoints.lat_lon_coords(lat_lons, res_file, sam_fp)
    gen = Gen.reV_run(resource, pp, sam_fp, res_file, max_workers=1, out_fpath=None, output_request=(['cf_profile','gen_profile']))

Output: (For Helena Wind):

CF.head()
Out[9]: 
       0
0  2.330
1  2.831
2  2.870
3  4.725
4  2.015
ppinchuk commented 11 months ago

Hey there! Looks like you are updating the 'system_capacity' key in the SAM config to match your turbine rating, but you are not changing any of the power curve values (key 'wind_turbine_powercurve_powerout'). The power curve in the SAM config you are using outputs up to 1620 kW, which explains how you can get CF values > 1. Please update the power curve (either rescale the curve to output the max of each turbine rating or provide your own power curve) and try again

Zoe-Fehlau-ES commented 11 months ago

Hi, That makes a lot of sense. I should have realized that. Would it be simpler to leave the SAM file as is, output the capacity factors, and then multiple by my system capacity to get generation? And change my assumption to 80 m hub height from 100 m?

ppinchuk commented 11 months ago

Yes, that approach should work (it's actually what we do in our supply-curve-aggregation module). Keep in mind that this means you are modeling the particular wind turbine as specified in the SAM file. If you would like to model a different turbine technology, you should update the parameters in the SAM file as necessary, including the hub height.

To answer your question specifically, you could probably leave the hub-height at 100m (this determines the wind resource that is used to compute generation), but be aware that this means you may be modeling some fictional/unrealistic turbine.

Zoe-Fehlau-ES commented 11 months ago

Thank you for the help. That default turbine technology works for my purposes.

One last question I have is if this is the same for pvwattsv5's SAM file: naris_pv_1axis_inv13.json? I don't see anything that would need to be changed in relation to the system_capacity, but I am still new to these variables.

ppinchuk commented 11 months ago

Nothin I can think of like that for solar. The only other thing you may need to watch out for (both wind and solar) is the cost inputs. Those scale up and down with capacity as well. I see in your sample code that you are not extracting cost values, so you should have no problems. If you do ever request LCOE as an output, you will have to be careful with your capital cost input in the SAM config.

ppinchuk commented 11 months ago

@Zoe-Fehlau-ES Do you have any further questions? If not, I will close this issue. Thanks for using reV!