optimShd: Shadows calculation for a set of distances between elements... In solaR: Radiation and Photovoltaic Systems

Description

The optimum distance between trackers or static structures of a PV grid connected plant depends on two main factors: the ground requirement ratio (defined as the ratio of the total ground area to the generator PV array area), and the productivity of the system including shadow losses. Therefore, the optimum separation may be the one which achieves the highest productivity with the lowest ground requirement ratio.

However, this definition is not complete since the terrain characteristics and the costs of wiring or civil works could alter the decision. This function is a help for choosing this distance: it computes the productivity for a set of combinations of distances between the elements of the plant.

Usage

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18``` ```optimShd(lat, modeTrk = 'fixed', modeRad = 'prom', dataRad, sample = 'hour', keep.night = TRUE, sunGeometry = 'michalsky', betaLim = 90, beta = abs(lat)-10, alfa = 0, iS = 2, alb = 0.2, HCPV = FALSE, module = list(), generator = list(), inverter = list(), effSys = list(), modeShd = '', struct = list(), distances = data.frame(), res = 2, prog = TRUE) ```

Arguments

 `lat` numeric, latitude (degrees) of the point of the Earth where calculations are needed. It is positive for locations above the Equator. `modeTrk` character, to be chosen from `'fixed'`, `'two'` or `'horiz'`. When `modeTrk = 'fixed'` the surface is fixed (inclination and azimuth angles are constant). The performance of a two-axis tracker is calculated with `modeTrk = 'two'`, and `modeTrk = 'horiz'` is the option for an horizontal N-S tracker. Its default value is `modeTrk = 'fixed'` `modeRad, dataRad` Information about the source data of the global irradiation. See `calcG0` for details. For this function the option `modeRad = 'bdI'` is not supported. `sample` `character`, containing one of ‘"sec"’, ‘"min"’, ‘"hour"’. This can optionally be preceded by a (positive or negative) integer and a space, or followed by ‘"s"’ (used by `seq.POSIXt`) `keep.night` `logical` When it is TRUE (default) the time series includes the night. `sunGeometry` `character`, method for the sun geometry calculations. See `calcSol`, `fSolD` and `fSolI`. `betaLim, beta, alfa, iS, alb, HCPV` See `calcGef` for details. `module` list of numeric values with information about the PV module, `Vocn`open-circuit voltage of the module at Standard Test Conditions (default value 57.6 volts.) `Iscn`short circuit current of the module at Standard Test Conditions (default value 4.7 amperes.) `Vmn`maximum power point voltage of the module at Standard Test Conditions (default value 46.08 amperes.) `Imn`Maximum power current of the module at Standard Test Conditions (default value 4.35 amperes.) `Ncs`number of cells in series inside the module (default value 96) `Ncp`number of cells in parallel inside the module (default value 1) `CoefVT`coefficient of decrement of voltage of each cell with the temperature (default value 0.0023 volts per celsius degree) `TONC`nominal operational cell temperature, celsius degree (default value 47). `generator` list of numeric values with information about the generator, `Nms`number of modules in series (default value 12) `Nmp`number of modules in parallel (default value 11) `inverter` list of numeric values with information about the DC/AC inverter, `Ki`vector of three values, coefficients of the efficiency curve of the inverter (default c(0.01, 0.025, 0.05)), or a matrix of nine values (3x3) if there is dependence with the voltage (see references). `Pinv`nominal inverter power (W) (default value 25000 watts.) `Vmin, Vmax` minimum and maximum voltages of the MPP range of the inverter (default values 420 and 750 volts) `Gumb` minimum irradiance for the inverter to start (W/m²) (default value 20 W/m²) `effSys` list of numeric values with information about the system losses, `ModQual`average tolerance of the set of modules (%), default value is 3 `ModDisp` module parameter disperssion losses (%), default value is 2 `OhmDC` Joule losses due to the DC wiring (%), default value is 1.5 `OhmAC`Joule losses due to the AC wiring (%), default value is 1.5 `MPP` average error of the MPP algorithm of the inverter (%), default value is 1 `TrafoMT`losses due to the MT transformer (%), default value is 1 `Disp` losses due to stops of the system (%), default value is 0.5 `modeShd` character, defines the type of shadow calculation. In this version of the package the effect of the shadow is calculated as a proportional reduction of the circumsolar diffuse and direct irradiances. This type of approach is selected with `modeShd = 'area'`. In future versions other approaches which relate the geometric shadow and the electrical connections of the PV generator will be available. If `modeTrk = 'horiz'` it is possible to calculate the effect of backtracking with `modeShd = 'bt'`. If `modeShd = c('area','bt')` the backtracking method will be carried out and therefore no shadows will appear. Finally, for two-axis trackers it is possible to select `modeShd = 'prom'` in order to calculate the effect of shadows on an average tracker (see `fSombra6`). The result will include three variables (Gef0, Def0 and Bef0) with the irradiance/irradiation without shadows as a reference. `struct` `list`. When `modeTrk = 'fixed'` or `modeTrk = 'horiz'` only a component named `L`, which is the height (meters) of the tracker, is needed. For two-axis trackers (`modeTrk = 'two'`), an additional component named `W`, the width of the tracker, is required. Moreover, two components named `Nrow` and `Ncol` are included under this list. These components define, respectively, the number of rows and columns of the whole setof trackers in the PV plant. `distances` `list`, whose three components are vectors of length 2: `Lew` (only when `modeTrk = 'horiz'` or `modeTrk = 'two'`), minimum and maximum distance (meters) between horizontal NS and two-axis trackers along the East-West direction. `Lns` (only when `modeTrk = 'two'`), minimum and maximum distance (meters) between two-axis trackers along the North-South direction. `D`(only when `modeTrk = 'fixed'`), minimum and maximum distance (meters) between fixed surfaces. These distances, in meters, are defined between the axis of the trackers. `res` numeric; `optimShd` constructs a sequence from the minimum to the maximum value of `distances`, with `res` as the increment, in meters, of the sequence. `prog` logical, show a progress bar; default value is TRUE

Details

`optimShd` calculates the energy produced for every combination of distances as defined by `distances` and `res`. The result of this function is a `Shade-class` object. A method of `shadeplot` for this class is defined (`shadeplot-methods`), and it shows the graphical relation between the productivity and the distance between trackers or fixed surfaces.

Value

A `Shade` object.

Author(s)

Oscar Perpiñán Lamigueiro

References

`prodGCPV`, `calcShd`
 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53``` ```library(lattice) library(latticeExtra) lat = 37.2; G0dm = c(2766, 3491, 4494, 5912, 6989, 7742, 7919, 7027, 5369, 3562, 2814, 2179) Ta = c(10, 14.1, 15.6, 17.2, 19.3, 21.2, 28.4, 29.9, 24.3, 18.2, 17.2, 15.2) prom = list(G0dm = G0dm, Ta = Ta) ###Two-axis trackers struct2x = list(W = 23.11, L = 9.8, Nrow = 2, Ncol = 3) dist2x = list(Lew = c(30, 45),Lns = c(20, 40)) ShdM2x <- optimShd(lat = lat, dataRad = prom, modeTrk = 'two', modeShd = c('area','prom'), distances = dist2x, struct = struct2x, res = 5) shadeplot(ShdM2x) pLew = xyplot(Yf~GRR,data = ShdM2x,groups = factor(Lew),type = c('l','g'), main = 'Productivity for each Lew value') pLew+glayer(panel.text(x[1], y[1], group.value)) pLns = xyplot(Yf~GRR,data = ShdM2x,groups = factor(Lns),type = c('l','g'), main = 'Productivity for each Lns value') pLns+glayer(panel.text(x[1], y[1], group.value)) ## 1-axis tracker with Backtracking structHoriz = list(L = 4.83); distHoriz = list(Lew = structHoriz\$L * c(2,5)); Shd12HorizBT <- optimShd(lat = lat, dataRad = prom, modeTrk = 'horiz', betaLim = 60, distances = distHoriz, res = 2, struct = structHoriz, modeShd = 'bt') shadeplot(Shd12HorizBT) xyplot(diff(Yf)~GRR[-1],data = Shd12HorizBT,type = c('l','g')) ###Fixed system structFixed = list(L = 5); distFixed = list(D = structFixed\$L*c(1,3)); Shd12Fixed <- optimShd(lat = lat, dataRad = prom, modeTrk = 'fixed', distances = distFixed, res = 2, struct = structFixed, modeShd = 'area') shadeplot(Shd12Fixed) ```