Learn R Programming

solaR (version 0.37)

A7_optimShd: Shadows calculation for a set of distances between elements of a PV grid connected plant.

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

optimShd(lat,
         modeTrk='fixed',
         modeRad='prom',
         dataRad,
         prev, prom, mapa, bd,
         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 <
modeRad, dataRad, prom, mapa, bd
Information about the source data of the global irradiation. See calcG0 for details. For this function the option modeRad='bdI' is not supported.
prev
Deprecated, dataRad should be used instead. A G0 object (or something that can be coerced to a G0 object). It is used when modeRad='prev'.
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
numeric, maximum value of the inclination angle for a tracking surface. Its default value is 90 (no limitation))
beta
numeric, inclination angle of the surface (degrees). It is only needed when modeTrk='fixed'.
alfa
numeric, azimuth angle of the surface (degrees). It is positive to the West. It is only needed when modeTrk='fixed'. Its default value is alfa=0
iS
integer, degree of dirtiness. Its value must be included in the set (1,2,3,4). iS=1 corresponds to a clean surface while iS=4 is the selection for a dirty surface. Its default value is 2
alb
numeric, albedo reflection coefficient. Its default value is 0.2
HCPV
logical, if TRUE the diffuse and albedo components of the effective irradiance are set to zero. HCPV is the acronym of High Concentration PV system.
module
list of numeric values with information about the PV module, [object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
generator
list of numeric values with information about the generator, [object Object],[object Object]
inverter
list of numeric values with information about the DC/AC inverter, [object Object],[object Object],[object Object],[object Object]
effSys
list of numeric values with information about the system losses, [object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
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
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 addition
distances
list, whose three components are vectors of length 2: [object Object],[object Object],[object Object] 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

Value

  • A Shade object.

encoding

UTF-8

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.

References

  • Perpiñán, O.: Grandes Centrales Fotovoltaicas: producción, seguimiento y ciclo de vida. PhD Thesis, UNED, 2008.http://e-spacio.uned.es/fez/view.php?pid=bibliuned:20080.
  • Perpiñán, O, Energía Solar Fotovoltaica, 2012. (http://procomun.wordpress.com/documentos/libroesf/)
  • Perpiñán, O. (2012), "solaR: Solar Radiation and Photovoltaic Systems with R", Journal of Statistical Software, 50(9), 1-32,http://www.jstatsoft.org/v50/i09/

See Also

prodGCPV, calcShd

Examples

Run this code
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=8)
dist2x=list(Lew=c(30,50),Lns=c(20,50))

#Monthly averages
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))

###Horizontal axis tracker
structHoriz=list(L=4.83);
distHoriz=list(Lew=structHoriz$L*c(2,5));

#Without backtracking
Shd12Horiz<-optimShd(lat=lat, dataRad=prom,
        modeTrk='horiz',
        betaLim=60,
        distances=distHoriz, res=2,
        struct=structHoriz,
        modeShd='area')

shadeplot(Shd12Horiz)

xyplot(diff(Yf)~GRR[-1],data=Shd12Horiz,type=c('l','g'))

#with Backtracking
Shd12HorizBT<-optimShd(lat=lat, dataRad=prom,
        modeTrk='horiz',
        betaLim=60,
        distances=distHoriz, res=1,
        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=1,
        struct=structFixed,
        modeShd='area')
shadeplot(Shd12Fixed)

Run the code above in your browser using DataLab