R/swrad.raster.R

Defines functions swrad.raster

Documented in swrad.raster

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)
}
rforge/microclim documentation built on Feb. 21, 2022, 7:49 a.m.