source: tags/ORCHIDEE_1_9_5/ORCHIDEE_OL/Utilitaire/Regrid_restart/CF_restart.py @ 8

Last change on this file since 8 was 8, checked in by orchidee, 14 years ago

import first tag equivalent to CVS orchidee_1_9_5 + OOL_1_9_5

File size: 3.5 KB
Line 
1#!/usr/bin/env cdat
2# -*- coding: iso-8859-15 -*-
3
4import os, sys, getopt, time
5import cdms, cdutil, MV
6from cdms.axis import TransientAxis
7from cdms.coord import TransientVirtualAxis
8
9from dataproc.utils import cdat
10
11import string
12
13from Numeric import ones
14
15import fonctions_orchidee
16
17import vcs
18
19def usage():
20    """convert a restart file in CF convention."""
21   
22    man = """
23Usage : creation of a CF_'restart_file'.nc
24    prompt> CF_restart.py restart_file.nc
25   
26    exemples : CF_restart.py sechiba_rest_out.nc
27    """
28    print man
29
30options = [
31    "help",
32    "version" ]
33
34check_test = 0
35
36
37# Extract arguments from the command line
38try:
39    myopts, myargs = getopt.getopt(sys.argv[1:], 'Vh', longopts = options)
40except getopt.GetoptError:
41    print 'getopt error'
42    usage()
43    sys.exit(1)
44
45if (len(myargs) < 1):
46    print 'I need at least 1 file.'
47    usage()
48    sys.exit(1)
49else:
50    fich = myargs[0]
51    if (os.path.exists(fich)==False):
52        print 'file ',fich,' doesn''t exist !' 
53        sys.exit(1)
54
55# Affichage des variables : fixe la limite max
56MV.set_print_limit(320)
57
58# travail sur le fichier d'entrée
59f=cdms.open(fich)
60listev = f.listvariables()
61print "Liste des variables de "+fich,listev
62
63
64# Write result file
65file_out = "CF_"+fich
66print '\nWriting to file : ', file_out
67fout = cdms.open(file_out, 'w')
68
69# recuperation des axes :
70# lon et lat
71VarLon=f('nav_lon')
72VarLat=f('nav_lat')
73axisLon = VarLon.getAxis(0)
74axisLat = VarLon.getAxis(1)
75
76# tailles des axes
77jjm = len(axisLon)
78iim = len(axisLat)
79print "Tailles (iim,jjm) = ",iim,jjm
80
81lon=VarLon[0,:]
82lat=VarLat[:,0]
83
84att_lon = cdat.getAttributes(VarLon)
85att_lon['name']='lon'
86ax_lon = TransientAxis(lon, bounds=None, id='lon', attributes=att_lon, copy=1)
87
88att_lat = cdat.getAttributes(VarLat)
89att_lat['name']='lat'
90ax_lat = TransientAxis(lat, bounds=None, id='lat', attributes=att_lat, copy=1)
91if (check_test): print "Axes lon, lat : \n", ax_lon,"\n", ax_lat
92
93level=f('nav_lev')
94att_lev = cdat.getAttributes(level)
95ax_lev = TransientAxis(level, bounds=None, id='lev', attributes=att_lev, copy=1)
96
97# Boucle sur les variables
98for var in listev:
99    print "*=*==*=*=*=*=*=*=*=*=*=*=*=*=*=**==*"
100    print "Variable : ",var
101    var0=f(var)
102   
103    copyattributes = cdat.getAttributes(var0)
104    if (check_test): print var,' ; attributs : ',copyattributes
105    v0shape = var0.shape
106    if (check_test): print "Tailles de "+var+" : ",v0shape
107    if (check_test): print "(min / max) de ",var," = ", cdms.MV.minimum(var0),cdms.MV.maximum(var0)
108
109
110    axes = var0.getAxisList()
111    nl = len(axes)
112
113       
114    if (check_test): print "Liste des axes de la variable "+var+" : "
115    if (check_test): print axes
116
117    listeaxes=[]
118    for ax in axes:
119        if (check_test): print ax
120        if (check_test): print "Attributes de ax : ",ax.attributes
121        if  (ax.id == 'x'):
122            listeaxes.append(ax_lon)
123        elif (ax.id == 'y'):
124            listeaxes.append(ax_lat)
125        elif (ax.id == 'z' or ax.id == 'lev' or ax.id == 'level'):
126            listeaxes.append(ax_lev)
127        else:
128            listeaxes.append(ax)
129
130    if (check_test): print "liste des axes : ",listeaxes
131           
132    wvar = cdms.createVariable(var0,
133                               axes = listeaxes)
134    fout.write(wvar)
135    fout.sync()
136    print '..... fin du traitement de ',var
137
138
139# #     div=MV.where(var0_mask<1e-15,1,var0_mask)
140       
141f.close()
142fout.close()
143print '...............finished writing.'
144# Plus à faire !
145# fonctions_orchidee.filtre_dump(file_out)
146print '...............finished rewriting.'
147
Note: See TracBrowser for help on using the repository browser.