Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
IPSL
LMD
InTro
RoutingPP
Commits
f3fb2def
Commit
f3fb2def
authored
Jun 13, 2019
by
POLCHER Jan
🚴🏾
Browse files
A first attempt to plot the graph of the river flow.
parent
da8221a4
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
149 additions
and
16 deletions
+149
-16
Diags/plotgraphs.py
Diags/plotgraphs.py
+115
-0
Interface.py
Interface.py
+23
-11
SampleScripts/BuildHTUs.pbs
SampleScripts/BuildHTUs.pbs
+2
-2
diagplots.py
diagplots.py
+7
-1
run.def
run.def
+2
-2
No files found.
Diags/plotgraphs.py
0 → 100644
View file @
f3fb2def
import
matplotlib
matplotlib
.
use
(
'Agg'
)
import
matplotlib.pyplot
as
plt
from
mpl_toolkits.basemap
import
Basemap
,
cm
import
numpy
as
np
from
netCDF4
import
Dataset
NCfile
=
"../MEDCORDEX_test_graph.nc"
GraphicFile
=
"test.png"
title
=
"Test"
#
#####################################################################
#
class
LandGrid
:
def
__init__
(
self
,
land
)
:
nj
,
ni
=
land
.
shape
self
.
indP
=
[]
self
.
nbland
=
0
for
i
in
range
(
ni
)
:
for
j
in
range
(
nj
)
:
if
(
land
[
j
,
i
]
>
0
)
:
self
.
nbland
=
self
.
nbland
+
1
self
.
indP
.
append
([
j
,
i
])
return
def
land2ij
(
self
,
il
)
:
j
,
i
=
self
.
indP
[
il
]
return
j
,
i
#
#####################################################################
#
#
nc
=
Dataset
(
NCfile
,
'r'
)
lon_full
=
nc
.
variables
[
"lon"
][:,:]
lat_full
=
nc
.
variables
[
"lat"
][:,:]
lon_bnd
=
nc
.
variables
[
"lon_bnd"
][:,:,:]
lat_bnd
=
nc
.
variables
[
"lat_bnd"
][:,:,:]
land
=
nc
.
variables
[
"land"
][:,:]
routetogrid
=
nc
.
variables
[
"routetogrid"
][:,:,:]
routetohtu
=
nc
.
variables
[
"routetobasin"
][:,:,:]
cglon
=
nc
.
variables
[
"CG_lon"
][:,:,:]
cglat
=
nc
.
variables
[
"CG_lat"
][:,:,:]
nc
.
close
()
nhtu
,
nj
,
ni
=
routetogrid
.
shape
landindex
=
LandGrid
(
land
)
print
"Nb land points = "
,
landindex
.
nbland
,
'Nb HTU : '
,
nhtu
#
# Get some average size of the grid boxes.
#
lon_res
=
np
.
nanmean
(
np
.
abs
(
np
.
gradient
(
lon_bnd
,
axis
=
0
)))
lat_res
=
np
.
nanmean
(
np
.
abs
(
np
.
gradient
(
lat_bnd
,
axis
=
0
)))
#
#
#
fig
=
plt
.
figure
(
1
)
ax
=
fig
.
add_subplot
(
111
)
ax
.
set_title
(
title
)
ax
.
set_xlabel
(
'Longitude'
,
labelpad
=
20
)
ax
.
set_ylabel
(
'Latitude'
,
labelpad
=
20
)
ax
.
axis
([
0
,
10
,
0
,
10
])
#
m
=
Basemap
(
projection
=
'cyl'
,
resolution
=
'i'
,
\
llcrnrlon
=
np
.
nanmin
(
lon_bnd
)
-
lon_res
,
llcrnrlat
=
np
.
nanmin
(
lat_bnd
)
-
lat_res
,
\
urcrnrlon
=
np
.
nanmax
(
lon_bnd
)
+
lon_res
,
urcrnrlat
=
np
.
nanmax
(
lat_bnd
)
+
lat_res
)
m
.
drawcoastlines
(
linewidth
=
0.5
)
m
.
drawcountries
(
linewidth
=
0.5
)
m
.
drawparallels
(
np
.
arange
(
-
180.
,
180.
,
0.1
),
labels
=
[
1
,
0
,
0
,
0
])
# draw parallels
m
.
drawmeridians
(
np
.
arange
(
-
80.
,
80.
,
0.1
),
labels
=
[
0
,
0
,
0
,
1
])
# draw meridians
#
cmap
=
'RdBu'
cmap
=
'Pastel1'
cmap
=
'prism'
#
#
#
for
i
in
range
(
ni
)
:
for
j
in
range
(
nj
)
:
if
land
[
j
,
i
]
>
0
:
lo
=
np
.
append
(
lon_bnd
[:,
j
,
i
],
lon_bnd
[
0
,
j
,
i
])
la
=
np
.
append
(
lat_bnd
[:,
j
,
i
],
lat_bnd
[
0
,
j
,
i
])
xl
,
yl
=
m
(
lo
,
la
)
plt
.
plot
(
xl
,
yl
,
color
=
"m"
)
#
# Draw the graph
#
for
il
in
range
(
landindex
.
nbland
)
:
j
,
i
=
landindex
.
land2ij
(
il
)
print
il
,
"== routetogrid =="
,
routetogrid
[:,
j
,
i
]
print
il
,
"== routetohtu =="
,
routetohtu
[:,
j
,
i
]
for
ih
in
range
(
nhtu
)
:
lo
=
cglon
[
ih
,
j
,
i
]
la
=
cglat
[
ih
,
j
,
i
]
xl
,
yl
=
m
(
lo
,
la
)
if
int
(
routetohtu
[
ih
,
j
,
i
]
-
1
)
<
nhtu
:
plt
.
plot
(
xl
,
yl
,
marker
=
11
)
else
:
plt
.
plot
(
xl
,
yl
,
marker
=
"o"
)
if
int
(
routetohtu
[
ih
,
j
,
i
]
-
1
)
<
nhtu
:
ile
=
int
(
routetogrid
[
ih
,
j
,
i
]
-
1
)
ie
,
je
=
landindex
.
land2ij
(
ile
)
ihe
=
int
(
routetohtu
[
ih
,
j
,
i
]
-
1
)
loe
=
cglon
[
ihe
,
je
,
ie
]
lae
=
cglat
[
ihe
,
je
,
ie
]
xle
,
yle
=
m
(
loe
,
lae
)
plt
.
plot
([
xl
,
xle
],[
yl
,
yle
],
color
=
"b"
)
#
#
#
plt
.
savefig
(
GraphicFile
,
dpi
=
450
)
plt
.
close
()
Interface.py
View file @
f3fb2def
...
...
@@ -177,6 +177,7 @@ class HydroGraph :
NCFillValue
=
1.0e20
vtyp
=
np
.
float64
cornerind
=
[
0
,
2
,
4
,
6
]
nbcorners
=
len
(
cornerind
)
#
if
part
.
rank
==
0
:
outnf
=
Dataset
(
filename
,
'w'
,
format
=
'NETCDF4_CLASSIC'
)
...
...
@@ -185,7 +186,7 @@ class HydroGraph :
outnf
.
createDimension
(
'y'
,
globalgrid
.
nj
)
outnf
.
createDimension
(
'land'
,
len
(
procgrid
.
area
))
outnf
.
createDimension
(
'htu'
,
self
.
nbasmax
)
outnf
.
createDimension
(
'bnd'
,
4
)
outnf
.
createDimension
(
'bnd'
,
nbcorners
)
#
# Coordinates
#
...
...
@@ -197,11 +198,6 @@ class HydroGraph :
lon
.
title
=
"Longitude"
lon
.
axis
=
"X"
lon
[:,:]
=
longitude
[:,:]
# # Longitude bounds
# lonbnd=outnf.createVariable("lon_bnd", vtyp, ('bnd','y','x'), fill_value=NCFillValue)
# lonbnd.units="grid box corners degrees east"
# lonbnd.title="Longitude Corners"
# lonbnd[:,:] = np.array(procgrid.polyll)[:,cornerind,0]
#
# Latitude
latitude
=
part
.
gather
(
procgrid
.
lat_full
)
...
...
@@ -212,12 +208,28 @@ class HydroGraph :
lat
.
title
=
"Latitude"
lat
.
axis
=
"Y"
lat
[:]
=
latitude
[:,:]
# # Latitude bounds
# latbnd=outnf.createVariable("lat_bnd", vtyp, ('bnd','land'), fill_value=NCFillValue)
# latbnd.units="grid box corners degrees north"
# latbnd.title="Latitude Corners"
# latbnd[:,:] = np.array(procgrid.polyll)[:,cornerind,1]
#
# Bounds of grid box
#
llonpoly
=
np
.
zeros
((
nbcorners
,
procgrid
.
nbland
))
llatpoly
=
np
.
zeros
((
nbcorners
,
procgrid
.
nbland
))
for
i
in
range
(
procgrid
.
nbland
)
:
llonpoly
[:,
i
]
=
[
procgrid
.
polyll
[
i
][
ic
][
0
]
for
ic
in
cornerind
]
llatpoly
[:,
i
]
=
[
procgrid
.
polyll
[
i
][
ic
][
1
]
for
ic
in
cornerind
]
lon_bnd
=
procgrid
.
landscatter
(
llonpoly
)
lat_bnd
=
procgrid
.
landscatter
(
llatpoly
)
if
part
.
rank
==
0
:
lonbnd
=
outnf
.
createVariable
(
"lon_bnd"
,
vtyp
,
(
'bnd'
,
'y'
,
'x'
),
fill_value
=
NCFillValue
)
lonbnd
.
units
=
"grid box corners degrees east"
lonbnd
.
title
=
"Longitude of Corners"
latbnd
=
outnf
.
createVariable
(
"lat_bnd"
,
vtyp
,
(
'bnd'
,
'y'
,
'x'
),
fill_value
=
NCFillValue
)
latbnd
.
units
=
"grid box corners degrees north"
latbnd
.
title
=
"Latitude of Corners"
else
:
lonbnd
=
np
.
zeros
((
1
,
1
,
1
))
latbnd
=
np
.
zeros
((
1
,
1
,
1
))
lonbnd
[:,:,:]
=
part
.
gather
(
lon_bnd
[:,:,:])
latbnd
[:,:,:]
=
part
.
gather
(
lat_bnd
[:,:,:])
#
# Land sea mask
#
...
...
SampleScripts/BuildHTUs.pbs
View file @
f3fb2def
...
...
@@ -5,8 +5,8 @@
#PBS -j oe
#PBS -l nodes=1:ppn=42
#PBS -l walltime=48:00:00
#PBS -l mem=1
2
0gb
#PBS -l vmem=1
2
0gb
#PBS -l mem=1
6
0gb
#PBS -l vmem=1
6
0gb
#
cd
${
PBS_O_WORKDIR
}
/..
...
...
diagplots.py
View file @
f3fb2def
...
...
@@ -5,6 +5,11 @@ import matplotlib.pyplot as plt
from
mpl_toolkits.basemap
import
Basemap
,
cm
import
numpy
as
np
import
getargs
log_master
,
log_world
=
getargs
.
getLogger
()
INFO
,
DEBUG
,
ERROR
=
log_master
.
info
,
log_master
.
debug
,
log_world
.
error
INFO_ALL
,
DEBUG_ALL
=
log_world
.
info
,
log_world
.
debug
inc
=
np
.
zeros
((
8
,
2
),
dtype
=
np
.
int8
)
inc
[
0
,
0
]
=
1
;
inc
[
0
,
1
]
=
0
inc
[
1
,
0
]
=
1
;
inc
[
1
,
1
]
=
1
...
...
@@ -204,7 +209,7 @@ def SUPERMESHPLOT(filename, loninterval, latinterval, hoverlap, hsuper, atmpolys
lat
=
hoverlap
.
lat_bx
basin_sz
=
hsuper
.
basin_sz
basin_pts
=
hsuper
.
basin_pts
outlet
=
hsuper
.
basin_coor
outlet
=
hsuper
.
basin_
out
coor
#
if
np
.
nanmin
(
lon
)
<=
max
(
loninterval
)
and
np
.
nanmax
(
lon
)
>
min
(
loninterval
)
and
\
np
.
nanmin
(
lat
)
<=
max
(
latinterval
)
and
np
.
nanmax
(
lat
)
>
min
(
latinterval
)
:
...
...
@@ -265,6 +270,7 @@ def SUPERMESHPLOT(filename, loninterval, latinterval, hoverlap, hsuper, atmpolys
if
ibo
==
ib
:
# Same grid box
if
hsuper
.
outflow_basin
[
ib
,
iz
]
<
undef_int
:
INFO
(
"hsuper.outflow_basin[ib,iz] = "
+
str
(
hsuper
.
outflow_basin
[
ib
,
iz
]))
ERROR
(
"We cannot be here as we flow into an HTU of the same grid but we do not know the HTU index"
)
else
:
izo
=
hsuper
.
outflow_basin
[
ib
,
iz
]
-
1
...
...
run.def
View file @
f3fb2def
...
...
@@ -24,5 +24,5 @@ GraphFile = MEDCORDEX_test_graph.nc
# Diagnostics
# You need to provide an interval in longitude and Latitude.
#
DiagLon =
3.9
, 3.
9
DiagLat =
40
.0, 40.
0
DiagLon =
2.3
, 3.
5
DiagLat =
39
.0, 40.
1
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment