Nota
Go to the end to download the full example code.
Análise de modificações do modif.dat
Para realizar a análise do modif.dat será utilizado o módulo plotly
import plotly.express as px
import plotly.io as pio
import pandas as pd
from datetime import datetime
pio.templates.default = "ggplot2"
O modif.dat é principal arquivo de entrada do NEWAVE para alterações cadastrais relacioanadas a usinas hidrelétricas. Também nele são encontradas algumas restrições físicas e operativas das usinas, que frequentemente precisam ser alteradas. Assim, este exemplo contém uma análise e edição nas restrições operativas de uma UHE. O modif.dat é o único arquivo modelado com a abordagem de registros que é exclusivo do modelo NEWAVE e, por isso, sua lógica é diferente dos demais.
from inewave.newave import Modif
arq_modif = Modif.read("./newave/modif.dat")
É possível visualizar todos os registros de um mesmo tipo existentes no arquivo no formato de DataFrame, porém este formato é apenas para visualização.
arq_modif.usina(df=True)
O outro formato para visualização dos registros é a extração dos objetos em si, que é a maneira de se realizar também a edição de seus conteúdos. Desta forma, também é possível aplicar filtros no registro desejado.
arq_modif.vazmint(data_inicio=datetime(2021, 2, 1))
[<inewave.newave.modelos.modif.VAZMINT object at 0x7fd2de9036c0>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2de982580>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2de7613c0>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2de5f0440>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2de5f1080>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2dca5e680>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2dc11e100>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2dc865b40>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2dc8640c0>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2de199d00>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2de199fc0>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2de19a280>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2de1bca00>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2de1bcbc0>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2de1c1040>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2de1c1780>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2de1c1a80>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2de1cd180>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2de1cd900>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2de1cda00>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2de1ce140>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2de1d2040>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2de1df0c0>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2de1e0940>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2de1e5cc0>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2de1ed980>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2de1efc40>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2de1f3940>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2de1f3b00>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2de1f9080>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2de1fb340>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2de1fb500>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2de007740>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2de007d00>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2de0083c0>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2de010700>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2de039680>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2de03ae80>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2de03c980>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fd2de03cac0>]
Para editar o arquivo modif, necessitamos frequentemente de deletar registros existentes e de criar novos registros. Para isto, instanciamos os modelos dos registros existentes no módulo inewave e adicionamos ao objeto do arquivo através dos métodos da classe.
from inewave.newave.modif import TURBMAXT
codigo_usina_modificada = 7
novo_registro = TURBMAXT()
novo_registro.data_inicio = datetime(2021, 2, 1)
novo_registro.turbinamento = 1000.0
arq_modif.data.add_after(
arq_modif.usina(codigo=codigo_usina_modificada),
novo_registro,
)
Podemos conferir se a inserção foi feita com sucesso ao listar os registros da usina em questão:
registros_usinas = arq_modif.modificacoes_usina(codigo_usina_modificada)
print([r for r in registros_usinas if isinstance(r, TURBMAXT)])
[<inewave.newave.modelos.modif.TURBMAXT object at 0x7fd2de04f640>]
Além de edições, podemos visualizar informações contidas no modif. Por exemplo, a variação da cota de montante de JIRAU ao longo do tempo:
from inewave.newave.modif import CMONT
registros_cmont = [
r for r in arq_modif.modificacoes_usina(codigo=285) if isinstance(r, CMONT)
]
datas = [r.data_inicio for r in registros_cmont]
cotas = [r.nivel for r in registros_cmont]
df_cmont = pd.DataFrame(data={"data": datas, "cota": cotas})
fig = px.line(df_cmont, x="data", y="cota")
fig
Total running time of the script: (0 minutes 0.111 seconds)