Sto lavorando con MITgcm per fare alcune simulazioni, specificamente per lavorare con i modelli di onde interne; Ho .nc file con i miei risultati, ma alcune variabili non sono esattamente le stesse coordinate. Mi spiego: voglio lavorare i componenti della velocità, ma, per alcuni motivi numerici che non capiscono fino in fondo, le coordinate di velocità orizzontali sono nella parte sinistra delle cellule e le coordinate verticali sul lato bot delle cellule . Per operare con dati di velocità devo unificare il riferimento di tutte le coordinate.
Ho pensato di fare qualcosa di simile
u (i,j,k) = u(i,j,k) + u(i+1,j,k)
v (i,j,k) = v(i,j,k) + v(i,j+1,k)
Così avrò le mie coordinate tutti nel centro delle cellule e lo stesso riferimento.
Non so come farlo, usando python, modifica di un file NetCDF. Potrei essere felice solo l'estrazione di tutti i u e v dei dati, la modifica come ho detto e la creazione di un nuovo file NetCDF con solo questi due variabili.
È possibile? Come lo posso fare?
Edit: Aggiunte informazioni ncdump
netcdf state.global {
dimensions:
T = UNLIMITED ; // (10001 currently)
Xp1 = 61 ;
Y = 1 ;
Z = 20 ;
X = 60 ;
Yp1 = 2 ;
Zl = 20 ;
variables:
double Xp1(Xp1) ;
Xp1:long_name = X-Coordinate of cell corner ;
Xp1:units = meters ;
double Y(Y) ;
Y:long_name = Y-Coordinate of cell center ;
Y:units = meters ;
double Z(Z) ;
Z:long_name = vertical coordinate of cell center ;
Z:units = meters ;
Z:positive = up ;
double X(X) ;
X:long_name = X-coordinate of cell center ;
X:units = meters ;
double Yp1(Yp1) ;
Yp1:long_name = Y-Coordinate of cell corner ;
Yp1:units = meters ;
double Zl(Zl) ;
Zl:long_name = vertical coordinate of upper cell interface ;
Zl:units = meters ;
Zl:positive = up ;
double T(T) ;
T:long_name = model_time ;
T:units = s ;
int iter(T) ;
iter:long_name = iteration_count ;
double U(T, Z, Y, Xp1) ;
U:units = m/s ;
U:coordinates = XU YU RC iter ;
double V(T, Z, Yp1, X) ;
V:units = m/s ;
V:coordinates = XV YV RC iter ;
double Temp(T, Z, Y, X) ;
Temp:units = degC ;
Temp:long_name = potential_temperature ;
Temp:coordinates = XC YC RC iter ;
double S(T, Z, Y, X) ;
S:long_name = salinity ;
S:coordinates = XC YC RC iter ;
double Eta(T, Y, X) ;
Eta:long_name = free-surface_r-anomaly ;
Eta:units = m ;
Eta:coordinates = XC YC iter ;
double W(T, Zl, Y, X) ;
W:units = m/s ;
W:coordinates = XC YC RC iter ;
// global attributes:
:MITgcm_version = **************** ;
:build_user = ************ ;
:build_host = ************** ;
:build_date = ******************* ;
:MITgcm_URL = *************** ;
:MITgcm_tag_id = ******************* ;
:MITgcm_mnc_ver = 0.9 ;
:sNx = 30 ;
:sNy = 1 ;
:OLx = 2 ;
:OLy = 2 ;
:nSx = 2 ;
:nSy = 1 ;
:nPx = 1 ;
:nPy = 1 ;
:Nx = 60 ;
:Ny = 1 ;
:Nr = 20 ;
}