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)
codigo nome
0 1 CAMARGOS
1 2 ITUTINGA
2 6 FURNAS
3 7 M. DE MORAES
4 8 ESTREITO
... ... ...
111 204 CACH.CALDEIRAO
112 283 STA CLARA MG
113 190 B. ESPERANCA
114 115 Capivari Cachoeira
115 48 Piraju

116 rows × 2 columns



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 0x7fcef658b6c0>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef6525800>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef6f07e80>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef611e3c0>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef611c980>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef62f7b40>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef62f61c0>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef615f0c0>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef615f540>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef6198600>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef6198900>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef6198d00>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef619cd40>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef619cf80>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef61a1740>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef61a2000>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef61a2500>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef61afe80>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef61b0900>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef61b0ac0>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef61b13c0>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef61b5480>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef61bf200>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef61c1a00>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef61c7d00>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef61cfa80>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef61d3180>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef61d6f00>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef61d7140>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef61dd380>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef61e0a80>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef61e0c80>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef61e6080>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef61e67c0>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef61e7040>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef61ef5c0>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef6017640>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef6019d80>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef601c880>, <inewave.newave.modelos.modif.VAZMINT object at 0x7fcef601ca40>]

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 0x7fcef6167d00>]

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.163 seconds)

Gallery generated by Sphinx-Gallery