def solarcalcs(self):
self.dir = self.forc.dir     <EOL>self.dif = self.forc.dif     <EOL>if self.dir + self.dif > <NUM_LIT:0.>:<EOL><INDENT>self.logger.debug("<STR_LIT>".format(__name__))<EOL>self.solarangles()<EOL>self.horSol = max(math.cos(self.zenith)*self.dir, <NUM_LIT:0.0>)            <EOL>self.Kw_term = min(abs(<NUM_LIT:1.>/self.UCM.canAspect*(<NUM_LIT:0.5>-self.critOrient/math.pi)+ <NUM_LIT:1>/math.pi*self.tanzen*(<NUM_LIT:1>-math.cos(self.critOrient))),<NUM_LIT:1.>)<EOL>self.Kr_term = min(abs(<NUM_LIT>*self.critOrient/math.pi- (<NUM_LIT:2>/math.pi*self.UCM.canAspect*self.tanzen)*(<NUM_LIT:1>-math.cos(self.critOrient))), <NUM_LIT:1>-<NUM_LIT:2>*self.UCM.canAspect*self.Kw_term)<EOL>self.bldSol = self.horSol*self.Kw_term + self.UCM.wallConf*self.dif   <EOL>self.roadSol = self.horSol*self.Kr_term + self.UCM.roadConf*self.dif<EOL>if self.simTime.month < self.parameter.vegStart or self.simTime.month > self.parameter.vegEnd:<EOL><INDENT>alb_road = self.UCM.road.albedo<EOL><DEDENT>else:<EOL><INDENT>alb_road = self.UCM.road.albedo*(<NUM_LIT:1.>-self.UCM.road.vegCoverage) + self.parameter.vegAlbedo*self.UCM.road.vegCoverage<EOL><DEDENT>rr = alb_road * self.roadSol<EOL>rw = self.UCM.alb_wall * self.bldSol<EOL>fr = (<NUM_LIT:1.> - (<NUM_LIT:1.> - <NUM_LIT>*self.UCM.wallConf) * self.UCM.alb_wall + (<NUM_LIT:1.> - self.UCM.roadConf)* self.UCM.wallConf * alb_road * self.UCM.alb_wall)<EOL>self.mr = (rr + (<NUM_LIT:1.0>-self.UCM.roadConf) * alb_road * (rw + self.UCM.wallConf * self.UCM.alb_wall * rr)) / fr<EOL>self.mw = (rw + self.UCM.wallConf * self.UCM.alb_wall * rr) / fr<EOL>self.UCM.road.solRec = self.roadSol + (<NUM_LIT:1> - self.UCM.roadConf)*self.mw<EOL>for j in range(len(self.BEM)):<EOL><INDENT>self.BEM[j].roof.solRec = self.horSol + self.dif<EOL>self.BEM[j].wall.solRec = self.bldSol + (<NUM_LIT:1> - <NUM_LIT:2>*self.UCM.wallConf) * self.mw + self.UCM.wallConf * self.mr<EOL><DEDENT>self.rural.solRec = self.horSol + self.dif            <EOL>self.UCM.SolRecRoof = self.horSol + self.dif          <EOL>self.UCM.SolRecRoad = self.UCM.road.solRec            <EOL>self.UCM.SolRecWall = self.bldSol+(<NUM_LIT:1>-<NUM_LIT:2>*self.UCM.wallConf)*self.UCM.road.albedo*self.roadSol    <EOL>self.UCM.treeSensHeat = (<NUM_LIT:1>-self.parameter.vegAlbedo)*(<NUM_LIT:1>-self.parameter.treeFLat)*self.UCM.SolRecRoad<EOL>self.UCM.treeLatHeat = (<NUM_LIT:1>-self.parameter.vegAlbedo)*self.parameter.treeFLat*self.UCM.SolRecRoad<EOL><DEDENT>else:    <EOL><INDENT>self.logger.debug("<STR_LIT>".format(__name__))<EOL>self.UCM.road.solRec = <NUM_LIT:0.><EOL>self.rural.solRec = <NUM_LIT:0.><EOL>for j in range(len(self.BEM)):<EOL><INDENT>self.BEM[j].roof.solRec = <NUM_LIT:0.><EOL>self.BEM[j].wall.solRec = <NUM_LIT:0.><EOL><DEDENT>self.UCM.SolRecRoad = <NUM_LIT:0.>         <EOL>self.UCM.SolRecRoof = <NUM_LIT:0.>         <EOL>self.UCM.SolRecWall = <NUM_LIT:0.>         <EOL>self.UCM.treeSensHeat = <NUM_LIT:0.><EOL>self.UCM.treeLatHeat = <NUM_LIT:0.><EOL><DEDENT>return self.rural, self.UCM, self.BEM<EOL>
Solar Calculation
        Mutates RSM, BEM, and UCM objects based on following parameters:
            UCM         # Urban Canopy - Building Energy Model object
            BEM         # Building Energy Model object
            simTime     # Simulation time bbject
            RSM         # Rural Site & Vertical Diffusion Model Object
            forc        # Forcing object
            parameter   # Geo Param Object
            rural       # Rural road Element object

        Properties
            self.dir   # Direct sunlight
            self.dif # Diffuse sunlight
            self.tanzen
            self.critOrient
            self.horSol
            self.Kw_term
            self.Kr_term
            self.mr
            self.mw