Source code for cwatm.hydrological_modules.interception

# -------------------------------------------------------------------------
# Name:        Interception module
# Purpose:
#
# Author:      PB
#
# Created:     01/08/2016
# Copyright:   (c) PB 2016
# -------------------------------------------------------------------------

from cwatm.management_modules.data_handling import *


[docs]class interception(object): """ INTERCEPTION **Global variables** ===================================== ====================================================================== ===== Variable [self.var] Description Unit ===================================== ====================================================================== ===== snowEvap total evaporation from snow for a snow layers m potTranspiration Potential transpiration (after removing of evaporation) m interceptCap interception capacity of vegetation m interceptEvap simulated evaporation from water intercepted by vegetation m minInterceptCap Maximum interception read from file for forest and grassland land cove m interceptStor simulated vegetation interception storage m availWaterInfiltration quantity of water reaching the soil after interception, more snowmelt m twothird 2/3 -- EWRef potential evaporation rate from water surface m SnowMelt total snow melt from all layers m Rain Precipitation less snow m actualET simulated evapotranspiration from soil, flooded area and vegetation m ===================================== ====================================================================== ===== **Functions** """ def __init__(self, model): self.var = model.var self.model = model # noinspection PyTypeChecker
[docs] def dynamic(self,coverType, No): """ Dynamic part of the interception module calculating interception for each land cover class :param coverType: Land cover type: forest, grassland ... :param No: number of land cover type: forest = 0, grassland = 1 ... :return: interception evaporation, interception storage, reduced pot. transpiration """ if coverType in ['forest','grassland']: ## interceptCap Maximum interception read from file for forest and grassland land cover # for specific days of the year - repeated every year if dateVar['newStart'] or dateVar['new10day']: # check if first day of the year self.var.interceptCap[No] = readnetcdf2(coverType + '_interceptCapNC', dateVar['10day'], "10day") self.var.interceptCap[No] = np.maximum(self.var.interceptCap[No], self.var.minInterceptCap[No]) else: self.var.interceptCap[No] = self.var.minInterceptCap[No] if checkOption('calcWaterBalance'): prevState = self.var.interceptStor[No].copy() # Rain instead Pr, because snow is substracted later # assuming that all interception storage is used the other time step throughfall = np.maximum(0.0, self.var.Rain + self.var.interceptStor[No] - self.var.interceptCap[No]) # update interception storage after throughfall self.var.interceptStor[No] = self.var.interceptStor[No] + self.var.Rain - throughfall # availWaterInfiltration Available water for infiltration: throughfall + snow melt self.var.availWaterInfiltration[No] = np.maximum(0.0, throughfall + self.var.SnowMelt + self.var.IceMelt) if coverType in ['forest', 'grassland', 'irrPaddy', 'irrNonPaddy']: mult = divideValues(self.var.interceptStor[No],self.var.interceptCap[No]) ** self.var.twothird # interceptEvap evaporation from intercepted water (based on potTranspiration) self.var.interceptEvap[No] = np.minimum(self.var.interceptStor[No], self.var.potTranspiration[No] * mult) if coverType in ['sealed']: self.var.interceptEvap[No] = np.maximum(np.minimum(self.var.interceptStor[No], self.var.EWRef),globals.inZero) # update interception storage and potTranspiration self.var.interceptStor[No] = self.var.interceptStor[No] - self.var.interceptEvap[No] self.var.potTranspiration[No] = np.maximum(0, self.var.potTranspiration[No] - self.var.interceptEvap[No]) # update actual evaporation (after interceptEvap) # interceptEvap is the first flux in ET, soil evapo and transpiration are added later self.var.actualET[No] = self.var.interceptEvap[No] + self.var.snowEvap + self.var.iceEvap #if (dateVar['curr'] == 15): # ii=1 if checkOption('calcWaterBalance'): self.model.waterbalance_module.waterBalanceCheck( [self.var.Rain, self.var.SnowMelt, self.var.IceMelt], # In [self.var.availWaterInfiltration[No], self.var.interceptEvap[No]], # Out [prevState], # prev storage [self.var.interceptStor[No]], "Interception", False)