source: tags/ORCHIDEE_OL/Utilitaire/Regrid_restart/ajoute_bords.py @ 6

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

import first tag equivalent to CVS orchidee_1_9_5 + OOL_1_9_5

File size: 5.2 KB
Line 
1#!/bin/env cdat
2# -*- coding: iso-8859-15 -*-
3
4# python system
5import os, sys, gc, getopt, time
6#import string
7import re
8import Numeric
9
10
11# CDAT/CDMS
12import cdms, MV
13#, cdutil
14from cdms.axis import TransientAxis
15from cdms.coord import TransientVirtualAxis
16from dataproc.utils import cdat
17
18def usage():
19    """Display usage information."""
20   
21    man = """
22    This script with corrected the mask of a restart.
23    It will get file_to_modify datas and the mask of file_to_add file
24    and make a new file_out. The missing datas in file_to_modify will be simply
25    replaced by the same points in file_to_add file.
26   
27Usage :
28    prompt> cdat ajoute_bords.py file_to_add file_to_modify file_out [variable]
29    Add some points defines in file_to_add for all variables (or just one) of file_to_modify to file_out.
30   
31    examples :
32    > ajoute_bords.py CM1414A_20001231_sechiba_rest.nc regrid_CF_CM5PIRC11_29901231_sechiba_rest.nc grille_regrid_CF_CM5PIRC11_29901231_sechiba_rest.nc
33    > ajoute_bords.py CM1414A_20001231_stomate_rest.nc regrid_CF_CM5PIRC11_29901231_stomate_rest.nc grille_regrid_CF_CM5PIRC11_29901231_stomate_rest.nc
34    > ajoute_bords.py CM5PIRC8_26601231_stomate_rest.nc regrid_CF_OOL-CTRLPI-1_9_5_SPIN_v2ORC_43_01001231_stomate_rest.nc grille_regrid_CF_OOL-CTRLPI-1_9_5_SPIN_v2ORC_43_01001231_stomate_rest.nc
35
36"""
37    print man
38
39
40options = [
41    "help",
42    "version" ]
43
44
45
46# Extract arguments from the command line
47try:
48    myopts, myargs = getopt.getopt(sys.argv[1:], 'Vh', longopts = options)
49except getopt.GetoptError:
50    print 'getopt error'
51    usage()
52    sys.exit(1)
53
54if (len(myargs) < 3):
55    print 'I need at least three files.'
56    usage()
57    sys.exit(1)
58else:
59    FileIn = myargs[0]
60    print "file_to_add : ",FileIn
61    if (os.path.exists(FileIn)==False):
62        print 'file ',FileIn,' doesn''t exist !' 
63        sys.exit(1)
64    else:
65        fin=cdms.open(FileIn, 'r')
66
67    FileOut = myargs[1]
68    print "file_to_modify : ",FileOut
69    if (os.path.exists(FileOut)==False):
70        print 'file ',FileOut,' doesn''t exist !' 
71        sys.exit(1)
72    else:
73        fout=cdms.open(FileOut, 'r')
74
75    FileNew = myargs[2]
76    print "file_out : ",FileNew
77    fnew=cdms.open(FileNew, 'w')
78
79    if (len(myargs) > 3):
80        varlist = [myargs[3]]
81        print 'Only one variable :',varlist
82    else:
83        varlist = fin.listvariables()
84        #varlist = [varlist[0]]
85        print "Liste des variables de "+FileIn,varlist
86       
87# Affichage des variables : fixe la limite max
88MV.set_print_limit(1700)
89
90var0=fin(varlist[0])
91missing = var0.missing_value
92missing_ = var0.missing_value - 1.
93print missing, missing_
94
95for var in varlist:
96    print "-----"
97    print "Variable : ",var,"------"
98
99    if (var in ["nav_lon","nav_lat","nav_lev","time_steps","time",
100                "lat","lon","lev","day_counter",
101                "dt_days", "routingcounter", "veget_year", "date" ]):
102        var1=fin(var)
103        fnew.write(var1,attributes=cdat.getAttributes(var1), axes=var1.getAxisList(), id=var1.id)
104        print "remplace."
105        continue
106    if (var in ["bounds_lat","bounds_lon","routingcounter","routingarea","routetogrid","routetobasin",
107                "basinid","topoindex","fastres","slowres","streamres","lakeres","previous_outflow",
108                "lakeinflow","returnflow","riverflow","coastalflow","hydrographs","runoff_route",
109                "drainage_route","evapot_route","precip_route","humrel_route","totnobio_route","vegtot_route"]):
110        print "supprime."
111        continue
112
113    var0 = fin(var)
114    var0m = MV.getmaskarray(var0)
115
116    #var0_notmissing=(var0 < missing_)
117    var0_notmissing=(var0m == 0)
118
119    var1 = fout(var)
120
121    var1m = MV.getmaskarray(var1)
122    #var1_missing=(var1 > missing_)
123    var1_missing=(var1m == 1)
124#    var1or = MV.logical_or(var1,var1m)
125
126    #test = MV.logical_and(var0_notmissing,var1or)
127    test = MV.logical_and(var0_notmissing,var1_missing)
128#     if ( var in ["temp_sol"] ):
129#         fnew.write(var0m,attributes=cdat.getAttributes(var1), axes=var1.getAxisList(), id="var0m")
130#         fnew.write(var0_notmissing,attributes=cdat.getAttributes(var1), axes=var1.getAxisList(), id="var0_notmissing")
131#         fnew.write(var1_missing,attributes=cdat.getAttributes(var1), axes=var1.getAxisList(), id="var1_missing")
132#         fnew.write(var1m,attributes=cdat.getAttributes(var1), axes=var1.getAxisList(), id="var1m")
133#         fnew.write(var1or,attributes=cdat.getAttributes(var1), axes=var1.getAxisList(), id="var1or")
134#         fnew.write(test,attributes=cdat.getAttributes(var1), axes=var1.getAxisList(), id="test")
135
136    var1b = MV.where( test , var0, var1)
137   
138#     var1w = cdms.createVariable(var1b,
139#                                fill_value = missing,
140#                                attributes = cdat.getAttributes(var1),
141#                                id = var,
142#                                axes = var1.getAxisList())
143#     print var1w
144
145#     var1w = cdms.createVariable(var1b,
146#                                 attributes = cdat.getAttributes(var1),
147#                                 id = var,
148#                                 axes = [var1.getAxis(0), var1.getAxis(1), var1.getAxis(2)])
149#     print var1w,cdat.getAttributes(var1w),
150
151    fnew.write(var1b,attributes=cdat.getAttributes(var1), axes=var1.getAxisList(), id=var1.id)
152
153fnew.close()
Note: See TracBrowser for help on using the repository browser.