Solar Lab. Geographic Information Systems (GIS) Sara Lucca Luana Valentini

Size: px
Start display at page:

Download "Solar Lab. Geographic Information Systems (GIS) Sara Lucca Luana Valentini"

Transcription

1 Solar Lab Geographic Information Systems (GIS) Sara Lucca Luana Valentini 1

2 Introduction Energy is becoming one of the most crucial problems. Estimating potential solar energy power, we can evaluate the suitability and the expected advantages of photovoltaic installations enhancing energy planning policy. We will see how to estimate the quantity of potential solar energy that could be produced with solar panels using as input information the territory morphology and the characteristics of building roofs obtainable from LiDAR (Light Detection and Ranging) Digital Surface Models. In GRASS are available commands to process raw LiDAR data to compute the previously mentioned models. Moreover commands to compute the solar irradiation are available. 2

3 Computation of solar irradiation Input data: map 1. the ground albedo map (albedo is the ratio of diffusely reflected to incident electromagnetic radiation), derived from the landuse map 2. the Linke turbidity maps (Linke turbidity factor is a measure of atmospheric turbidity), which are already derived from the landuse map but are specifically computed for each month ( 3. slope and aspect DSM maps The basic GRASS command used is r.sun. The computed result corresponds to beam (direct), diffuse and ground reflected solar irradiation raster maps for a given day, latitude, surface and atmospheric conditions, so they have implemented a script named r.sun.mean that allows the computation of monthly and yearly maps. 3

4 1. Ground Albedo Map This map can be derived from the landuse map by means of reclassification. Landuse map: g.region n= s= w= e= res=2 r.in.gdal input=/home/user/lab_grass/original_data/corine.asc output=corine Each category can be associated with an albedo value: Corine values Albedo value r.mapcalc 'albedo = \ 111, 112, 121, 122, 123, , , 142, if(corine==521,0.05, \ if(corine==111 corine==112 corine==121 corine==122 \ Landuse map corine==123 corine==133,0.1, \ if( corine==322 corine==323,0.2, \ if( corine==141 corine==142 corine==243, \ 0.25, null() ))))' 4

5 2. Linke Maps The landuse is classified into three categories following the rule: Corine values Typology 121, 123, 133 Industrial 111, 112, 122, 141, 142, 521 Urban 243, 322, 323 Rural The Linke map is computed for each month following the correspondences: Typology Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec Industrial Urban Rural

6 To compute the linke maps we use r.mapcalc, reassigning the corine values to the specific values for each month: January r.mapcalc 'Linke.Jan = \ if(corine==123 corine==133 corine==121,4.1,\ if(corine==111 corine==112 corine==122 corine==141 \ corine==142 corine==521,3.1, \ if(corine==243 corine==322 corine==323,2.1, null()))) February r.mapcalc 'Linke.Feb = \ if(corine==123 corine==133 corine==121,4.3,\ if(corine==111 corine==112 corine==122 corine==141 \ corine==142 corine==521,3.2, \ if(corine==243 corine==322 corine==323,2.2, null())))'... and so on Instead of running twelwe times the command, we can use the simple script: cd /home/user/lab_grass/comandi 6./Linke.script

7 As last step we need to compute DSM slope and aspect. Import DSM: r.in.ascii input=/home/user/lab_grass/original_data/dsm.txt output=dsm To perform this task it is enough to use the r.slope.aspect command: r.slope.aspect elevation=dsm slope=slope_dsm aspect=aspect_dsm slope aspect 7

8 Now we are "theoretically" ready to launch the command r.sun.mean. Theoretically" because that computation requires a lot of time (many hours) and therefore we provide you directly the results of the computation. From those results we consider: the twelve mean_jan,..., mean_dec maps, giving the mean monthly value for each square meter; the sum_year map, containing the total solar energy for square meter corresponding to one year. Anyway if you want to repeat by yourself all the computations, the command to be used is the following: r.sun.mean elevin=dsm aspin=aspect_dsm slopein=slope_dsm albedo=albedo linkein=linke -m -y Instead of running the command, we simply copy the map that we have available in the mapset solar_res (map that we already computed): g.copy rast=sum_year@solar_res,sum_year 8

9 Computation of total energy per year for each building Calculate the total irradiation solar map, corresponding to the sum of the three contributes: direct, diffuse and ground reflected. We don't have any direct information about cloudiness, another factor that can strongly influence the global irradiation. Anyway we have available monthly mean average solar irradiation values for the area of interest obtained by ENEA from remote-sensed data (Meteosat - visible band): We consider the mean monthly irradiation values corresponding to period For Olbia we have the following daily mean irradiation values for each month: Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec Data are in [MJ m-2 d-1]; the conversion to [kwh m-2 d-1] is given by: I [kwh m-2 d-1] = (3.6)-1I [MJ m-2 d-1] 9

10 We compare the computed monthly mean solar energy with the mean values estimated by ENEA for the Olbia area, values that consider also cloudiness. To do that, we compute the mean of the values of each map by using the command r.univar. Here is the example for mean_jan map: r.univar mean_jan The results that we obtain are: total null and non-null cells: total null cells: Of the non-null cells: n: minimum: maximum: 7284 range: mean: mean of absolute values: standard deviation: variance: e+06 variation coefficient: % sum:

11 Therefore we can build up a table of comparisons between our statistics and those obtained by ENEA: Month computed (Wh/m2) ENEA (kwh/m2) conversion factor Jan ,972 0,0009 Feb ,778 0,0009 Mar ,111 0,0009 Apr ,056 0,0009 May ,111 0,0009 Jun ,667 0,0009 Jul ,667 0,0010 Aug ,833 0,0009 Sep ,500 0,0009 Oct ,306 0,0009 Nov ,194 0,0009 Dec ,750 0,0009 As we can see, the conversion factor is almost the same for all months (exception only represented by the month of July). The conclusion is that we can use for each month as conversion factor the value and it can also be applied to the yearly energy. 11

12 Considering the mean of the irradiation obtained by r.sun.mean, we can derive the monthly correction factor, that we have to consider in order to account for cloudiness. We recalibrate the monthly maps we obtained multiplying each value of the map by a calibration factor, corresponding to the monthly ratio between the ENEA and GRASS monthly mean irradiation values. (Note that the output of r.sun.mean is given in [Wh m-2 d-1] and therefore a 1000 conversion factor has to be taken into account) The last aspect we have to be aware of is the dimension of the DSM cells. In the Lab case we have a resolution of 2 m x 2m (the same as the DSM), therefore in order to obtain the mean irradiation for each cell, we have to multiply the solar irradiation per square meter by 4. By using the command: r.mapcalc sum_year_cell=sum_year*0.0009*4 we obtain the total energy, recalibrated for cloudiness, corresponding to each individual cell. 12

13 At this point we compute the total energy per year per building, taking into consideration the area of each building: v.in.ogr -o dsn=/home/user/lab_grass/original_data/buildings/ output=buildings layer=buildings g.parser v.sample.class input=buildings raster=sum_year_cell pre=solar mode=sum A new column (attribute) of the building vector map is created containing for each cell the sum of total energy in a year (E build in kwh, corresponding to solar_sum new column). cat AREA solar_sum 1 385, , , , , , , , , ,724243

14 Computation of solar installation parameters We can compute the installation parameters, based on the characteristics of the buildings and evaluate costs and efficiency of the installation. We are mainly interested in a global evaluation, that is in understanding which are the areas of the city or the buidings that are more suitable to be equipped by photovoltaic panels. For such a kind of analysis, we have decided, for each buiding, to consider: 1. the energy provided by the solar installation 2. the installation dimensioning 3. the economic evaluation of the installation 14

15 Energy provided by the solar installation We want to add each building with an attribute (column) containing the energy consumption corresponding to one year. Unfortunately we don't have available such an information. We try to infer that value considering an average situation (data refers to Italy). The only information we have till now is the total area of each building. The annual consumption of electric energy for a residential dwelling is estimated around 2500 kwh and a mean residential dwelling has dimension of about m 2. Therefore the consumption for square meter is kwh. We have decided to round the value, taking as acceptable 30 kwh/m 2. Another approximation is due to the fact that the buildings we have are only in part residential. It means that such a kind of estimate is not true for industrial and rural buildings, which anyway are the minority of our dataset and can be counted out at the end of the process. 15

16 To compute building consumptions (cons), as usual, we add before a new column, named 'cons' in kwh: v.db.addcol map=buildings layer=1 columns=cons DOUBLE and then we fill the new column: v.db.update map=buildings layer=1 column=cons value=area*fl_number*30 cat AREA solar_sum cons 1 385, , , , , , , , , , , , , , ,

17 Moreover solar power is not available at night and less available in cloudy weather conditions: a percentage complementary power system (integration in percentage) is usually adopted. We decided to use 70 %. In the script we will put: integration = 70. The annual electric energy we need is: E cons = cons * integration (given in kwh) At the same time the unitary energy E del (in kwh/m 2 ) that we can produce depends on: the efficiency of the photovoltaic module (eff1 in percentage), that relies on the specific materials the cells are made (amorphous silicon 4-7 %, multicrystalline silicon %,... ) the efficiency of the installation (eff2 in percentage), due to the loss of energy in converting direct current produced by solar cells to alternating current in the distribution grids. 17

18 We propose to use as values those provided by Regione Lombardia eff1 = 12 eff2 = 80 We have already computed the incident energy E build ; to obtain the mean annual energy per square meter for each building it is enough to compute: Now we have: E mean = E build / area (in kwh/m 2 ) E del = E mean * eff1 * eff2 18

19 The installation dimensioning Now we can calculate the installation required surface: surface instal = E cons / E del (in m 2 ) To compute the other installation parameters, we need dimension (dim in m 2 ) and peak power (P in Wp) of a photovoltaic panel. At the website of Regione Lombardia we find: dim = 0.9 (rounding the found value 0.87) P = 110 The number of panels we need and the installation peak power are given by: number = surfaceinst / dim Peak = P * number (in kwp). At this point we can also compute the annual energy delivered by the installation (E inst in kwh/year). Remark: Since solar cell output power depends on multiple factors, for comparison purposes between different cells,panels and installations the measure of watts peak (Wp) is used. It corresponds to: solar irradiance = 1000 W/m², solar reference spectrum AM = 1.5 and cell temperature 19 = 25 C.

20 The economic evaluation of the installation We want to compute the economic profit, which happens when revenue exceeds the total cost. It is interesting to estimate for which buildings there is an economic profit, what is the time of economic profit (given in year) and, in case, the amount of economic profit, hypothesizing a certain installation lifespan. Hereafter we refer to the italian case.in the economic evaluation we consider outflow: capital cost, VAT, operating costs, handling costs and insurance. inflow: discounts on the bill, incentives, sale of electricity. 20

21 Outflow: The capital cost (inst_cost in /kwp) can be obtained from the Regione Lombardia website: inst_cost = The VAT is a percentage of the capital cost: VAT = 10. The operating cost (maint_cost) is usually considered as a percentage of the capital cost and consulting photovoltaic installers we got the value: maint_cost = 1 The handling cost (run_expenses in ) corresponds to administratives expenses (payed to the electricity utilities). In case of "net metering" ( Net_meteringhttp://en.wikipedia.org/wiki/Net_metering): run_expenses = 60 The insurance (insur_cost in /kwp), especially against hail, corresponds to: insur_cost = 35 21

22 Inflow: In Italy electricity rates strictly depend on the annual consumption. We have the following classes, based on min and max consumption: min consuption (kw) max consumption(kw) rate ( /kwh) (source: the largest italian electric utility sportello_online/elettricita/ tariffeelettriche/domest...) In order to run the command to perform the computation we need to prepare a text file containing those values ( consumption_rate.txt ). 0: : : : : :

23 Inflow (1): Moreover we have for some years (incent_length in years) also incentives based on the power installed, that we can summarize in the following table: min power (kw) max power (kw) rate ( /kwh) We prepare a text file ( incentive_rate.txt ) containing the previous data: 0: : : The incentive period is: incent_length = 20. Finally the sale of electricity is not considered in this case because we suppose that a net metering policy is applied. 23

24 Inflow (2): The last factor we can compute with the v.pv command is the total amount of CO 2 that is unemitted by using photovoltaic technology, value that nowadays is not a direct gain for the owner but a global gain for the community. The emission of CO 2 depends on the electric mix. As an example, if the electric energy is obtained from: Coal (50 %) Nuclear (47 %) Natural gas (2 %) Hydro and renewable energy (1 %) the emission corresponds to 0.50 kg CO 2 / kwh. If heavy coal is used the emission corresponds to 0.90 kg CO 2 / kwh. From the website of the Italian Minister for the Environment and the Protection of Land and Sea ( we obtain for the electric mix (electric _mix in kg CO 2 /kwh): electric_mix =

25 Inflow (3): The environmental gain (G),due to unemitted CO2, is given by: G = E inst * electric mix * lifespan where lifespan (in years) is the installation lifespan, which approximately is: lifespan = 25 Now we are ready to run the command v.pv: g.parser v.pv building=buildings total_energy=solar_sum eff1=12 eff2=80 area=area \ output=buildings_pv consumption=cons integration=70 dim=0.9 P=110 \ rate_cons=/home/user/lab_grass/parameter_tables/consumption_rate.txt \ rate_incentive=/home/user/lab_grass/parameter_tables/incentive_rate.txt \ inst_cost=7250 VAT=10 run_expenses=60 maint_cost=1 insur_cost=35 \ inst_lifespan=25 incent_length=20 electric_mix=0.531 To visualize different information from the attribute table of buildings_pv we will use the command r.to.vect 25

26 environmental gain (kgco 2 ): min = max = 2.3 x

27 pay_back (years): min = 8.15, max =