#-------------------------------------------------------------------------------
# Descrição: Plota velocidade de corrente superficial da simulação global 
#            GLB025 no EGEON.
#
# Desenvolvido por: Laboratório de Oceanografia Física (LOF/COPPE)
#                   Universidade Federal do Rio de Janeiro (UFRJ)
#
# Data de criação: 20/07/2020
# Última modificação: 21/09/2024
#
# Autor: Fernando Dix, fernandodix@gmail.com
#           
# -------------------------------------------------------------------------------

# Corrige grade OSTIA
import os
import sys
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import griddata
import matplotlib.pylab as pylab
import pandas as pd
import scipy.io as sio
from netCDF4 import Dataset
from scipy import interpolate
import matplotlib.gridspec as gridspec
import pickle

# INFORMAÇÕES DA EXTRAÇÃO
diaini=1 # dia inicial definido no acesso direto
inter=1 #intervalo de extracao do acesso direto
cam=1 #camada extraida

# DEFININDO PARAMETROS DO MODELO
IDM=1500 #numeros de pontod idm
JDM=1100 #numeros de pontos jdm
KDM=32  #numeros total de camadas
IJDM=IDM*JDM
npad=4096-(IJDM%4096) # 2^12
data_type = np.dtype(np.float32).newbyteorder ('>') # '>' é ieee-be #arquivo binário

# LENDO GRID DO MODELO
grid_fid=open('/home/fernandix/Dropbox/Documentos/Fernando/GruPO/TOPO/GLBa025/regional.grid.a',mode='rb'); # endereco do regional grid
lon = np.fromfile (grid_fid,dtype=data_type,count=IJDM)
plon=lon.reshape(JDM,IDM)
grid_fid.seek(4*(npad+IJDM),0)
lat = np.fromfile (grid_fid,dtype=data_type,count=IJDM)
plat=lat.reshape(JDM,IDM)

# LENDO BATIMETRIA DO MODELO
depth_fid=open('/home/fernandix/Dropbox/Documentos/Fernando/GruPO/TOPO/GLBa025/regional.depth.a',mode='rb'); # endereco do regional grid
bat = np.fromfile (depth_fid,dtype=data_type,count=IJDM)
bat=np.where(bat > 1e10, np.nan,bat) 
bat = bat.reshape(JDM,IDM)

# CRIANDO MESHGRID PARA INTERPOLAR SAIDA DO MODELO
lonn=np.arange(np.min(np.min(plon)), np.max(np.max(plon)), 1/4)
latn=np.arange(np.min(np.min(plat)), np.max(np.max(plat)), 1/4)
lonn1,latn1=np.meshgrid(lonn,latn)
			
## ------------------------------------------------------------------------------------------------
#teste 06 v3EG.2.3 - EGEON

u2016_t6v3EG=[]
v2016_t6v3EG=[]

ano1=2016
anoend=2016
#for ano in range(ano1,anoend+1):
for ano in range(ano1,anoend+1):

	# LENDO ACESSO DIRETO
	
	
	if ano == 2016:
	    diaend=366  # dia final definido no acesso direto (ano bissexto)
	else:
	    diaend=365
	ntot=((diaend-diaini)/inter)+1 #número total de dados extraidos
	 Uinterp_GLB025_t1_global_0050m_2016.a
	dire='/home/fernandix/Dropbox/modelo_global/acessodireto/teste06_EGEON/' #diretorio do acessodireto - arquivo .a
	f=open(dire+"Uinterp_GLB025_t1_global_0050m_2016.a", mode='rb')
	
	for INDEX in range(diaini,diaend): # loop de leitura do arquivo gerado pelo acesso direto - março
		f.seek((INDEX-1)*4*(npad+IJDM),0)
		var = np.fromfile (f,dtype=data_type,count=IJDM)
		var=np.where(var > 1e10, np.nan,var) # tirando espúrios
		#lt=np.divide(var,9806) # no caso de camadas - para encontrar valor em metros
		t = var.reshape(JDM,IDM)
		if ano == 2016:
			u2016_t6v3EG.append(t)
            
#for ano in range(ano1,anoend+1):
for ano in range(ano1,anoend+1):
	ntot=((diaend-diaini)/inter)+1 #número total de dados extraidos
	 
	f=open(dire+"Vinterp_GLB025_t1_global_0050m_2016.a", mode='rb')
	
	for INDEX in range(diaini,diaend): # loop de leitura do arquivo gerado pelo acesso direto - março
		f.seek((INDEX-1)*4*(npad+IJDM),0)
		var = np.fromfile (f,dtype=data_type,count=IJDM)
		var=np.where(var > 1e10, np.nan,var) # tirando espúrios
		#lt=np.divide(var,9806) # no caso de camadas - para encontrar valor em metros
		t = var.reshape(JDM,IDM)
		if ano == 2016:
			v2016_t6v3EG.append(t)
			

## ------------------------------------------------------------------------------------------------
#LINHA DE COSTA
lc=pd.read_csv('/home/fernandix/Dropbox/Documentos/Fernando/GruPO/batimetria_e_LC/Estados_Linhas_de_Costa/costa_globo.txt', 
	sep='\t',names=["lon", "lat"],header=None)
#lc=baia.replace(to_replace='nan', value='NaN', regex=True)
lc['lon'] = pd.to_numeric(lc['lon'],errors='coerce') # para transformar o que nao estava sendo reconhecido como número para NaN

## ------------------------------------------------------------------------------------------------
#TEMP plot

for jj in range(diaini,diaend):
	grd_u2016_t6v3EG = griddata((plon.ravel(),plat.ravel()),u2016_t6v3EG[jj-1].ravel(),(lonn1, latn1), method='nearest') # grida o resultado (acesso direto) de cada dia para lon/lat criadas

	grd_v2016_t6v3EG = griddata((plon.ravel(),plat.ravel()),v2016_t6v3EG[jj-1].ravel(),(lonn1, latn1), method='nearest') # grida o resultado (acesso direto) de cada dia para lon/lat criadas
	mag=np.sqrt((grd_u2016_t6v3EG)**2+(grd_v2016_t6v3EG)**2)
	
	plt.pcolormesh(lonn1,latn1,mag, cmap='jet',shading='gouraud',vmin=0, vmax=1)
	plt.plot(lc['lon'],lc['lat'],color='k')
	plt.plot(lc['lon']+360,lc['lat'],color='k')
	#plt.set_xlim([np.min(np.min(plon)), np.max(np.max(plon))])
	#plt.set_title('Teste 6v3',fontsize=15)
	#ax1[1].set_title('Teste 6v3EG',fontsize=15)

	#fig.suptitle('TSM - 2016 - dia '+str(jj), fontsize=20, fontweight='bold')
	#cbar_ax = fig.add_axes([0.11, 0.06, 0.8, 0.02])
	#cbar=fig.colorbar(im, orientation="horizontal",cax=cbar_ax)
	#cbar.set_label('T(°C)')
	#plt.show()

	figs='/home/fernandix/Dropbox/modelo_global/figuras/teste06_v3_Egeon/'
	plt.savefig(figs+'temp_2016_dia_'+str(jj))
	
#plt.close('all')





