swrad.raster <-
function(dtm,sw,lat,day,elevation,soltime,localtime,lon,merid=0,dst=0,trans0=0.2,...)
{
if(!missing(localtime)) {
soltime <- solartime(localtime,lat=lat,lon=lon,merid=merid,dst=dst,day=day)
} else if(missing(soltime)) stop("Either localtime or soltime must be specified.")
if(missing(elevation)) elevation <- cellStats(dtm,mean,na.rm=TRUE)
if(is.na(elevation)) elevation <- dtm
if(missing(lat)) {
if (!isLonLat(dtm)) stop("Dimensions of dtm are not specified as latitude & longitude; lat must be supplied.")
lat <- (ymax(dtm) + ymin(dtm)) /2
}
slope <- terrain(dtm, opt='slope') /pi*180
aspect <- terrain(dtm, opt='aspect') /pi*180
alt <- solalt(soltime,day=day,lat=lat)
if(alt < 10) warning("Solar altitude at the time given is less than 10 degrees; results may be unreliable.")
azi <- solazi(soltime,day=day,lat=lat)
beam <- beamrad(day=day,alt=alt,elevation=elevation,...)
diff <- diffuserad(day=day,alt=alt,...)
flux.sw <- beam * sin(alt/180*pi) + diff
trans <- (sw - trans0 * diff) / (flux.sw - trans0 * diff)
slopeflux <- beam * solarindex(slope=slope,aspect=aspect,azi=azi,alt=alt) + diff
swrad <- trans0 * diff + trans * (slopeflux - trans0 * diff)
list(swrad=swrad, trans=trans)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.