def preSemeio(diaAtual, varDiaAnterior): varDiaAtual = VariaveisBalHidrico( self.parametros) # Receber parametros # Calcula ETP em funcao de decendios varDiaAtual['ETP'] = self.calcularETP(diaAtual) varDiaAtual['Hr'] = varDiaAnterior['Hr'] varDiaAtual['Kc'] = varDiaAnterior['Kc'] #Calcula escoamento superficial em funcao da agua em excesso que entrou no sistema (varDiaAtual['Esc'], varDiaAtual['ik']) = self.calcularEsc(diaAtual, varDiaAnterior) # Calcula Apport como precipitação + irrigação - escoamento superficial varDiaAtual['Apport'] = self.calcularApport( diaAtual, varDiaAtual['Esc']) # Calcula evapotranspiracao maxima como mulch vezes a evapotranspiração potencial varDiaAtual['Etm'] = self.calcularEps(varDiaAtual['ETP']) #varDiaAtual['Eps'] = 0 #REDUNDANTE #varDiaAtual['Epc'] = 0 #REDUNDANTE # St reserva util superficial como o minimo entre valor calculado e tabelado varDiaAtual['StRuSurf'] = min( varDiaAnterior['StRuSurf'] + varDiaAtual['Apport'], self.parametros.RUSURF) # EVS recebe o minimo entre valor de St Reserva Util e seu valor calculado a partir da evapotranspiracao maxima varDiaAtual['Evs'] = min( varDiaAtual['Etm'] * varDiaAtual['StRuSurf'] / self.parametros.RUSURF, varDiaAtual['StRuSurf']) varDiaAtual['Etr'] = varDiaAtual[ 'Evs'] # Evapotranspiracao REAL eh encontrada por EVS # StRu eh ele antigo + apport ou o valor maximo de RU, DR representa a lamina de irrigacao, HUM o maior valor entre StRu e DR (varDiaAtual['StRu'], varDiaAtual['Hum'], varDiaAtual['Dr']) = self.rempliRu(varDiaAtual['Apport'], varDiaAnterior['StRu'], varDiaAnterior['Hum']) varDiaAtual['StRu'] = max(varDiaAtual['StRu'] - varDiaAtual['Etr'], 0) # Diminuir ETR de StRU varDiaAtual['StRuSurf'] = max( varDiaAtual['StRuSurf'] - varDiaAtual['Etr'], 0) # Diminuir ETR de StRU superficial # Atualizando valores varDiaAtual['Vrad'] = varDiaAnterior['Vrad'] varDiaAtual['StRur'] = varDiaAnterior['StRur'] varDiaAtual['StRurMax'] = varDiaAnterior['StRurMax'] varDiaAtual['TP'] = varDiaAnterior['TP'] varDiaAtual['EtrEtm'] = 100 * varDiaAtual['Etr'] / varDiaAtual[ 'Etm'] # ISNA esta feito em porcentagem return varDiaAtual
def posColheita(diaAtual, varDiaAnterior): # Inicializa HUM e St RU com valores do estoque, Kc é 1 e o resto comeca em zero varDiaAtual = VariaveisBalHidrico(self.parametros) varDiaAtual['ETP'] = self.calcularETP( diaAtual) # Calculo por decendio varDiaAtual['Hr'] = 0 varDiaAtual['Kc'] = 1 (varDiaAtual['Esc'], varDiaAtual['ik']) = self.calcularEsc( diaAtual, varDiaAnterior) # Agua atual em excesso que entrou no sistema varDiaAtual['Apport'] = self.calcularApport( diaAtual, varDiaAtual['Esc'] ) # precipitacao + irrigacao - escoamento superficial varDiaAtual['Etm'] = self.calcularEps( varDiaAtual['ETP']) # mulch * ETP varDiaAtual['Epc'] = 0 # Calculo de STRUSURF tem que ser menor do que a tabela varDiaAtual['StRuSurf'] = min( varDiaAnterior['StRuSurf'] + varDiaAtual['Apport'], self.parametros.RUSURF) # Calculo de EVS tem que ser menor que St reserva util superficial varDiaAtual['Evs'] = min( varDiaAtual['Etm'] * varDiaAtual['StRuSurf'] / self.parametros.RUSURF, varDiaAtual['StRuSurf']) varDiaAtual['Etr'] = varDiaAtual['Evs'] # StRU eh atualizado ao somar Apport, Dr recebe a diferenca dele para a tabela de RU e ele recebe o valor tabelado (se ele for maior) #HUM contem sempre o maior valor de reserva util ate o momento (varDiaAtual['StRu'], varDiaAtual['Hum'], varDiaAtual['Dr']) = self.rempliRu(varDiaAtual['Apport'], varDiaAnterior['StRu'], varDiaAnterior['Hum']) varDiaAtual['StRu'] = max(varDiaAtual['StRu'] - varDiaAtual['Etr'], 0) # Subtrai ETR varDiaAtual['StRuSurf'] = max(varDiaAtual['StRuSurf'] - varDiaAtual['Etr'], 0) # Subtrai ETR varDiaAtual['Eps'] = 0 varDiaAtual['Vrad'] = 0 varDiaAtual['StRur'] = varDiaAnterior['StRur'] varDiaAtual['StRurMax'] = varDiaAnterior['StRurMax'] varDiaAtual['TP'] = varDiaAnterior['TP'] varDiaAtual['EtrEtm'] = 100 * varDiaAtual['Etr'] / varDiaAtual[ 'Etm'] # Calculo do ISNA return varDiaAtual
def posColheita(diaAtual, varDiaAnterior): varDiaAtual = VariaveisBalHidrico(self.parametros) varDiaAtual['ETP'] = self.calcularETP(diaAtual) varDiaAtual['Hr'] = 0 varDiaAtual['Kc'] = 1 varDiaAtual['Esc'] = self.calcularEsc(diaAtual) varDiaAtual['Apport'] = self.calcularApport( diaAtual, varDiaAtual['Esc']) varDiaAtual['Etm'] = self.calcularEps(varDiaAtual['ETP']) varDiaAtual['Epc'] = 0 varDiaAtual['StRuSurf'] = min( varDiaAnterior['StRuSurf'] + varDiaAtual['Apport'], self.parametros.RUSURF) varDiaAtual['Evs'] = min( varDiaAtual['Etm'] * varDiaAtual['StRuSurf'] / self.parametros.RUSURF, varDiaAtual['StRuSurf']) varDiaAtual['Etr'] = varDiaAtual['Evs'] (varDiaAtual['StRu'], varDiaAtual['Hum'], varDiaAtual['Dr']) = self.rempliRu(varDiaAtual['Apport'], varDiaAnterior['StRu'], varDiaAnterior['Hum']) varDiaAtual['StRu'] = max(varDiaAtual['StRu'] - varDiaAtual['Etr'], 0) varDiaAtual['StRuSurf'] = max( varDiaAtual['StRuSurf'] - varDiaAtual['Etr'], 0) varDiaAtual['Eps'] = 0 varDiaAtual['Vrad'] = 0 varDiaAtual['StRur'] = varDiaAnterior['StRur'] varDiaAtual['StRurMax'] = varDiaAnterior['StRurMax'] varDiaAtual['TP'] = varDiaAnterior['TP'] varDiaAtual[ 'EtrEtm'] = 100 * varDiaAtual['Etr'] / varDiaAtual['Etm'] return varDiaAtual
def fasesFenologicas(diaAtual, varDiaAnterior, inicioPlantio): # Inicializa HUM e St RU com valores do estoque, Kc é 1 e o resto comeca em zero varDiaAtual = VariaveisBalHidrico(self.parametros) ## Agora as outras variaveis sao determinadas pelas funcoes ja vistas varDiaAtual['ETP'] = self.calcularETP( diaAtual) # decendio para diario (varDiaAtual['Esc'], varDiaAtual['ik']) = self.calcularEsc( diaAtual, varDiaAnterior) # funcao da agua em excesso varDiaAtual['Apport'] = self.calcularApport( diaAtual, varDiaAtual['Esc'] ) # funcao da precipitacao, irrigacao e escoamento if self.cultura.tipoKc == 1: varDiaAtual['Kc'] = self.calcularKc( diaAtual, inicioPlantio ) # Calculado para o dia especifico, com aproximacoes de dados fornecidos varDiaAtual['Eps'] = self.calcularEps( varDiaAtual['ETP']) # mulch * ETP atual varDiaAtual['Etm'] = varDiaAtual['Eps'] varDiaAtual['StRuSurf'] = min( varDiaAnterior['StRuSurf'] + varDiaAtual['Apport'], self.parametros.RUSURF) varDiaAtual['Evs'] = min( varDiaAtual['Eps'] * varDiaAtual['StRuSurf'] / self.parametros.RUSURF, varDiaAtual['StRuSurf']) varDiaAtual['Etr'] = varDiaAtual['Evs'] # StRU eh atualizado ao somar Apport, Dr recebe a diferenca dele para a tabela de RU e ele recebe o valor tabelado (se ele for maior) # HUM contem sempre o maior valor de reserva util ate o momento (varDiaAtual['StRu'], varDiaAtual['Hum'], varDiaAtual['Dr']) = self.rempliRu(varDiaAtual['Apport'], varDiaAnterior['StRu'], varDiaAnterior['Hum']) if diaAtual == inicioPlantio: #Inicializacao varDiaAtual['Vrad'] = varDiaAnterior['Vrad'] varDiaAtual['StRurMax'] = varDiaAnterior['StRurMax'] varDiaAtual['Hr'] = varDiaAnterior['Hr'] varDiaAtual['Epc'] = 0 varDiaAtual['TP'] = varDiaAnterior['TP'] varDiaAtual['StRur'] = varDiaAnterior['StRur'] else: # Vrad eh proporcao de HUM para StRUR máximo sobre o valor tabelado, deltaRUR eh um decimo disso (1 dia do decendio) (varDiaAtual['Vrad'], deltaRur) = self.calcularVrad(varDiaAtual['Hum'], varDiaAnterior['StRurMax']) varDiaAtual['StRurMax'] = varDiaAnterior[ 'StRurMax'] + deltaRur # Atualiza valor do dia a partir de dados decendiais # StRUR eh calculado, mas nao pode ultrapassar StRUR máximo nem StRU varDiaAtual['StRur'] = min( varDiaAnterior['StRur'] + varDiaAtual['Apport'] + deltaRur, varDiaAtual['StRurMax'], varDiaAtual['StRu']) varDiaAtual['Hr'] = self.calcularHr( varDiaAtual['StRur'], varDiaAtual['StRurMax'] ) # umidade relativa = StRUR/StRURMaximo varDiaAtual['Epc'] = varDiaAtual['Kc'] * varDiaAtual[ 'ETP'] # Evapotranspiracao de Cultura (nao leva em conta restricao hidrica) # Calculos fixos e algumas duvidas (varDiaAtual['Etr'], varDiaAtual['Etm'], varDiaAtual['TP']) = self.calcularEtrEtm( varDiaAtual['Epc'], varDiaAtual['ETP'], varDiaAtual['Hr'], varDiaAtual['Evs'], varDiaAtual['StRur'], varDiaAtual['Etm']) varDiaAtual['Eps'] = varDiaAtual['StRurMax'] - varDiaAtual[ 'StRur'] #O QUE EH EPS? varDiaAtual['StRur'] = max(varDiaAtual['StRur'] - varDiaAtual['Etr'], 0) # Subtrai ETR varDiaAtual['StRuSurf'] = max(varDiaAtual['StRuSurf'] - varDiaAtual['Etr'], 0) # Subtrai ETR varDiaAtual['StRu'] = max(varDiaAtual['StRu'] - varDiaAtual['Etr'], 0) # Subtrai ETR varDiaAtual['EtrEtm'] = 100 * varDiaAtual['Etr'] / varDiaAtual[ 'Etm'] # Calculo do ISNA return varDiaAtual
def simularBalancoHidrico(self, inicioSimulTuple, inicioPlantioTuple): def preSemeio(diaAtual, varDiaAnterior): varDiaAtual = VariaveisBalHidrico( self.parametros) # Receber parametros # Calcula ETP em funcao de decendios varDiaAtual['ETP'] = self.calcularETP(diaAtual) varDiaAtual['Hr'] = varDiaAnterior['Hr'] varDiaAtual['Kc'] = varDiaAnterior['Kc'] #Calcula escoamento superficial em funcao da agua em excesso que entrou no sistema (varDiaAtual['Esc'], varDiaAtual['ik']) = self.calcularEsc(diaAtual, varDiaAnterior) # Calcula Apport como precipitação + irrigação - escoamento superficial varDiaAtual['Apport'] = self.calcularApport( diaAtual, varDiaAtual['Esc']) # Calcula evapotranspiracao maxima como mulch vezes a evapotranspiração potencial varDiaAtual['Etm'] = self.calcularEps(varDiaAtual['ETP']) #varDiaAtual['Eps'] = 0 #REDUNDANTE #varDiaAtual['Epc'] = 0 #REDUNDANTE # St reserva util superficial como o minimo entre valor calculado e tabelado varDiaAtual['StRuSurf'] = min( varDiaAnterior['StRuSurf'] + varDiaAtual['Apport'], self.parametros.RUSURF) # EVS recebe o minimo entre valor de St Reserva Util e seu valor calculado a partir da evapotranspiracao maxima varDiaAtual['Evs'] = min( varDiaAtual['Etm'] * varDiaAtual['StRuSurf'] / self.parametros.RUSURF, varDiaAtual['StRuSurf']) varDiaAtual['Etr'] = varDiaAtual[ 'Evs'] # Evapotranspiracao REAL eh encontrada por EVS # StRu eh ele antigo + apport ou o valor maximo de RU, DR representa a lamina de irrigacao, HUM o maior valor entre StRu e DR (varDiaAtual['StRu'], varDiaAtual['Hum'], varDiaAtual['Dr']) = self.rempliRu(varDiaAtual['Apport'], varDiaAnterior['StRu'], varDiaAnterior['Hum']) varDiaAtual['StRu'] = max(varDiaAtual['StRu'] - varDiaAtual['Etr'], 0) # Diminuir ETR de StRU varDiaAtual['StRuSurf'] = max( varDiaAtual['StRuSurf'] - varDiaAtual['Etr'], 0) # Diminuir ETR de StRU superficial # Atualizando valores varDiaAtual['Vrad'] = varDiaAnterior['Vrad'] varDiaAtual['StRur'] = varDiaAnterior['StRur'] varDiaAtual['StRurMax'] = varDiaAnterior['StRurMax'] varDiaAtual['TP'] = varDiaAnterior['TP'] varDiaAtual['EtrEtm'] = 100 * varDiaAtual['Etr'] / varDiaAtual[ 'Etm'] # ISNA esta feito em porcentagem return varDiaAtual def fasesFenologicas(diaAtual, varDiaAnterior, inicioPlantio): # Inicializa HUM e St RU com valores do estoque, Kc é 1 e o resto comeca em zero varDiaAtual = VariaveisBalHidrico(self.parametros) ## Agora as outras variaveis sao determinadas pelas funcoes ja vistas varDiaAtual['ETP'] = self.calcularETP( diaAtual) # decendio para diario (varDiaAtual['Esc'], varDiaAtual['ik']) = self.calcularEsc( diaAtual, varDiaAnterior) # funcao da agua em excesso varDiaAtual['Apport'] = self.calcularApport( diaAtual, varDiaAtual['Esc'] ) # funcao da precipitacao, irrigacao e escoamento if self.cultura.tipoKc == 1: varDiaAtual['Kc'] = self.calcularKc( diaAtual, inicioPlantio ) # Calculado para o dia especifico, com aproximacoes de dados fornecidos varDiaAtual['Eps'] = self.calcularEps( varDiaAtual['ETP']) # mulch * ETP atual varDiaAtual['Etm'] = varDiaAtual['Eps'] varDiaAtual['StRuSurf'] = min( varDiaAnterior['StRuSurf'] + varDiaAtual['Apport'], self.parametros.RUSURF) varDiaAtual['Evs'] = min( varDiaAtual['Eps'] * varDiaAtual['StRuSurf'] / self.parametros.RUSURF, varDiaAtual['StRuSurf']) varDiaAtual['Etr'] = varDiaAtual['Evs'] # StRU eh atualizado ao somar Apport, Dr recebe a diferenca dele para a tabela de RU e ele recebe o valor tabelado (se ele for maior) # HUM contem sempre o maior valor de reserva util ate o momento (varDiaAtual['StRu'], varDiaAtual['Hum'], varDiaAtual['Dr']) = self.rempliRu(varDiaAtual['Apport'], varDiaAnterior['StRu'], varDiaAnterior['Hum']) if diaAtual == inicioPlantio: #Inicializacao varDiaAtual['Vrad'] = varDiaAnterior['Vrad'] varDiaAtual['StRurMax'] = varDiaAnterior['StRurMax'] varDiaAtual['Hr'] = varDiaAnterior['Hr'] varDiaAtual['Epc'] = 0 varDiaAtual['TP'] = varDiaAnterior['TP'] varDiaAtual['StRur'] = varDiaAnterior['StRur'] else: # Vrad eh proporcao de HUM para StRUR máximo sobre o valor tabelado, deltaRUR eh um decimo disso (1 dia do decendio) (varDiaAtual['Vrad'], deltaRur) = self.calcularVrad(varDiaAtual['Hum'], varDiaAnterior['StRurMax']) varDiaAtual['StRurMax'] = varDiaAnterior[ 'StRurMax'] + deltaRur # Atualiza valor do dia a partir de dados decendiais # StRUR eh calculado, mas nao pode ultrapassar StRUR máximo nem StRU varDiaAtual['StRur'] = min( varDiaAnterior['StRur'] + varDiaAtual['Apport'] + deltaRur, varDiaAtual['StRurMax'], varDiaAtual['StRu']) varDiaAtual['Hr'] = self.calcularHr( varDiaAtual['StRur'], varDiaAtual['StRurMax'] ) # umidade relativa = StRUR/StRURMaximo varDiaAtual['Epc'] = varDiaAtual['Kc'] * varDiaAtual[ 'ETP'] # Evapotranspiracao de Cultura (nao leva em conta restricao hidrica) # Calculos fixos e algumas duvidas (varDiaAtual['Etr'], varDiaAtual['Etm'], varDiaAtual['TP']) = self.calcularEtrEtm( varDiaAtual['Epc'], varDiaAtual['ETP'], varDiaAtual['Hr'], varDiaAtual['Evs'], varDiaAtual['StRur'], varDiaAtual['Etm']) varDiaAtual['Eps'] = varDiaAtual['StRurMax'] - varDiaAtual[ 'StRur'] #O QUE EH EPS? varDiaAtual['StRur'] = max(varDiaAtual['StRur'] - varDiaAtual['Etr'], 0) # Subtrai ETR varDiaAtual['StRuSurf'] = max(varDiaAtual['StRuSurf'] - varDiaAtual['Etr'], 0) # Subtrai ETR varDiaAtual['StRu'] = max(varDiaAtual['StRu'] - varDiaAtual['Etr'], 0) # Subtrai ETR varDiaAtual['EtrEtm'] = 100 * varDiaAtual['Etr'] / varDiaAtual[ 'Etm'] # Calculo do ISNA return varDiaAtual def posColheita(diaAtual, varDiaAnterior): # Inicializa HUM e St RU com valores do estoque, Kc é 1 e o resto comeca em zero varDiaAtual = VariaveisBalHidrico(self.parametros) varDiaAtual['ETP'] = self.calcularETP( diaAtual) # Calculo por decendio varDiaAtual['Hr'] = 0 varDiaAtual['Kc'] = 1 (varDiaAtual['Esc'], varDiaAtual['ik']) = self.calcularEsc( diaAtual, varDiaAnterior) # Agua atual em excesso que entrou no sistema varDiaAtual['Apport'] = self.calcularApport( diaAtual, varDiaAtual['Esc'] ) # precipitacao + irrigacao - escoamento superficial varDiaAtual['Etm'] = self.calcularEps( varDiaAtual['ETP']) # mulch * ETP varDiaAtual['Epc'] = 0 # Calculo de STRUSURF tem que ser menor do que a tabela varDiaAtual['StRuSurf'] = min( varDiaAnterior['StRuSurf'] + varDiaAtual['Apport'], self.parametros.RUSURF) # Calculo de EVS tem que ser menor que St reserva util superficial varDiaAtual['Evs'] = min( varDiaAtual['Etm'] * varDiaAtual['StRuSurf'] / self.parametros.RUSURF, varDiaAtual['StRuSurf']) varDiaAtual['Etr'] = varDiaAtual['Evs'] # StRU eh atualizado ao somar Apport, Dr recebe a diferenca dele para a tabela de RU e ele recebe o valor tabelado (se ele for maior) #HUM contem sempre o maior valor de reserva util ate o momento (varDiaAtual['StRu'], varDiaAtual['Hum'], varDiaAtual['Dr']) = self.rempliRu(varDiaAtual['Apport'], varDiaAnterior['StRu'], varDiaAnterior['Hum']) varDiaAtual['StRu'] = max(varDiaAtual['StRu'] - varDiaAtual['Etr'], 0) # Subtrai ETR varDiaAtual['StRuSurf'] = max(varDiaAtual['StRuSurf'] - varDiaAtual['Etr'], 0) # Subtrai ETR varDiaAtual['Eps'] = 0 varDiaAtual['Vrad'] = 0 varDiaAtual['StRur'] = varDiaAnterior['StRur'] varDiaAtual['StRurMax'] = varDiaAnterior['StRurMax'] varDiaAtual['TP'] = varDiaAnterior['TP'] varDiaAtual['EtrEtm'] = 100 * varDiaAtual['Etr'] / varDiaAtual[ 'Etm'] # Calculo do ISNA return varDiaAtual #print('to aqui') ## Começo da função balancoHidrico() if self.ETPsDecendiais.any: #anos=len(self.parametros.anosDadosHistoricos) for ano in self.anosCalculo: #anos+=1 #if ano in self.estacao.dados['data']: # print(self.estacao.dados['data']) #else: #print(self.estacao.dados) #ano=2000 #ano fixo, somente um # Para cada ano desejado, faz-se uma simulacao #jm = self.dadosMeteorologicos.index(inicioSimulTuple[0]) #ano=self.dadosMeteorologicos[:][jm].year #ano in self.limitesDadosHistoricos. #ano=self.limitesDadosHistoricos[0].year inicioSimul = date(ano, inicioSimulTuple[0], inicioSimulTuple[1]) inicioPlantio = date(ano, inicioPlantioTuple[0], inicioPlantioTuple[1]) fimSimul = inicioPlantio #print('Gerei datas') #print(inicioSimul) #print(fimSimul) #print(self.limitesDadosHistoricos) if self.cultura.fases != 0: for fase in self.cultura.fases: fimSimul += timedelta( days=fase ) # Inicio do plantio + dias que sao fase = Data final do plantio #timedelta é uma funcao else: fimSimul = date(fimSimul.year + 1, fimSimul.month, fimSimul.day) diaColheita = fimSimul - timedelta(days=1) # Se a data de inicio esta dentro do desejado if inicioSimul >= self.limitesDadosHistoricos[ 0] and fimSimul <= self.limitesDadosHistoricos[1]: #print('Inicio da simulacao OK') diaAtual = inicioSimul # Inicia dia #print(diaAtual) varDiaAnterior = VariaveisBalHidrico( self.parametros ) # Inicializa variaveis de saida e coloca alguns valores delas # self.valoresDiarios[ano] = {} while diaAtual < inicioPlantio: # Realiza o pre semeio: reserva util, evapotranspiracao, etc varDiaAtual = preSemeio(diaAtual, varDiaAnterior) # Atualizar variaveis de saida a cada dia calculado self.variaveisSaida = self.variaveisSaida.append( VariaveisSaida(varDiaAtual, index=[diaAtual], columns=self.columns)) # self.valoresDiarios[ano][diaAtual] = varDiaAtual #n = diaAtual+timedelta(days=1) #if (n.year != diaAtual.year): # diaAtual.year-=1 diaAtual += timedelta(days=1) varDiaAnterior = varDiaAtual fase = 1 inicioFase = inicioPlantio while diaAtual <= diaColheita: # Para todos os dias eh feita : varDiaAtual = fasesFenologicas(diaAtual, varDiaAnterior, inicioPlantio) if self.cultura.fases != 0: if ( diaAtual.day == (inicioFase + timedelta( days=self.cultura.fases[fase - 1])).day ) and (diaAtual.month == (inicioFase + timedelta( days=self.cultura.fases[fase - 1])).month): fase += 1 inicioFase = diaAtual varDiaAtual['fase'] = fase self.variaveisSaida = self.variaveisSaida.append( VariaveisSaida(varDiaAtual, index=[diaAtual], columns=self.columns)) # self.valoresDiarios[ano][diaAtual] = varDiaAtual diaAtual += timedelta(days=1) varDiaAnterior = varDiaAtual while diaAtual < fimSimul: varDiaAtual = posColheita(diaAtual, varDiaAnterior) self.variaveisSaida = self.variaveisSaida.append( VariaveisSaida(varDiaAtual, index=[diaAtual], columns=self.columns)) # self.valoresDiarios[ano][diaAtual] = varDiaAtual diaAtual += timedelta(days=1) varDiaAnterior = varDiaAtual self.balancoHidricoNormalDF = self.balancoHidricoNormal() if not self.variaveisSaida.empty: return (pd.concat( [self.variaveisSaida, self.dadosMeteorologicos], axis=1), self.balancoHidricoNormalDF, self.anosCalculo) #return self.variaveisSaida, self.balancoHidricoNormalDF return 'Dados insuficientes'