Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
RoutingPP
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
IPSL
LMD
InTro
RoutingPP
Commits
8e7b5a10
Commit
8e7b5a10
authored
4 years ago
by
POLCHER Jan
Browse files
Options
Downloads
Patches
Plain Diff
Adding some tools to manage the hydrological network file.
parent
5facef9b
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
Tools/AddExtremes.py
+45
-0
45 additions, 0 deletions
Tools/AddExtremes.py
Tools/AddFacDisto.py
+193
-0
193 additions, 0 deletions
Tools/AddFacDisto.py
with
238 additions
and
0 deletions
Tools/AddExtremes.py
0 → 100644
+
45
−
0
View file @
8e7b5a10
#
#
import
numpy
as
np
import
os
from
netCDF4
import
Dataset
#
filename
=
"
routing_MED.nc
"
#
#################################################################################
#
def
ncvarextrema
(
varin
)
:
expval
=
None
for
(
a
,
v
)
in
varin
.
__dict__
.
items
():
if
(
a
==
"
_FillValue
"
)
:
expval
=
v
elif
(
a
==
"
missing_value
"
)
:
expval
=
v
if
expval
==
None
:
minval
=
np
.
min
(
varin
[:,:])
maxval
=
np
.
max
(
varin
[:,:])
else
:
x
=
varin
[:,:]
minval
=
np
.
min
(
x
[
np
.
where
(
x
<
expval
)])
maxval
=
np
.
max
(
x
[
np
.
where
(
x
<
expval
)])
return
minval
,
maxval
#
#
#
def
addextrema
(
varin
,
vmin
,
vmax
)
:
exec
(
'
varin.%s =
"
%s
"'
%
(
'
min
'
,
vmin
))
exec
(
'
varin.%s =
"
%s
"'
%
(
'
max
'
,
vmax
))
#
#
#
nf
=
Dataset
(
filename
,
'
a
'
,
format
=
'
NETCDF4_CLASSIC
'
)
#
vars
=
[
"
basins
"
,
"
topoind_h
"
,
"
topoind
"
,
"
fac
"
,
"
disto
"
]
for
v
in
vars
:
vmin
,
vmax
=
ncvarextrema
(
nf
.
variables
[
v
])
addextrema
(
nf
.
variables
[
v
],
vmin
,
vmax
)
nf
.
close
()
This diff is collapsed.
Click to expand it.
Tools/AddFacDisto.py
0 → 100644
+
193
−
0
View file @
8e7b5a10
#
# Code to add flow accumulation and distance to ocean to the old routing.nc file
#
# fac is probably the accumulation of upstream grid boxes which flow through a given point.
#
import
numpy
as
np
import
os
,
sys
from
netCDF4
import
Dataset
#
rose
=
np
.
array
([[
0
,
0
],[
-
1
,
0
],[
-
1
,
+
1
],[
0
,
+
1
],[
+
1
,
+
1
],[
+
1
,
0
],[
+
1
,
-
1
],[
0
,
-
1
],[
-
1
,
-
1
]])
debug
=
False
FillValue
=
1.0e+20
#
infile
=
"
routing.nc
"
outfile
=
"
routing_GLOB.nc
"
#
# Copy variable
def
copyvar
(
innc
,
outnc
,
var
,
MinMax
=
False
):
#
if
(
debug
)
:
print
(
"
Working
"
,
var
)
shape
=
innc
.
variables
[
var
].
shape
#
# Scalar
#
if
(
len
(
shape
)
==
0
)
:
dtyp
=
innc
.
variables
[
var
].
datatype
outvar
=
outnc
.
createVariable
(
var
,
dtyp
,())
outvar
[
0
]
=
innc
.
variables
[
var
][:]
#
# Vector
#
elif
(
len
(
shape
)
==
1
)
:
dtyp
=
innc
.
variables
[
var
].
datatype
ddim
=
innc
.
variables
[
var
].
dimensions
outvar
=
outnc
.
createVariable
(
var
,
dtyp
,
ddim
)
outvar
[:]
=
innc
.
variables
[
var
][:]
#
# 2D matrix
#
elif
(
len
(
shape
)
==
2
)
:
dtyp
=
innc
.
variables
[
var
].
datatype
ddim
=
innc
.
variables
[
var
].
dimensions
outvar
=
outnc
.
createVariable
(
var
,
dtyp
,
ddim
,
fill_value
=
FillValue
)
x
=
np
.
copy
(
innc
.
variables
[
var
][:,:])
x
[
np
.
greater_equal
(
x
,
FillValue
,
where
=~
np
.
isnan
(
x
))]
=
np
.
nan
outvar
[:,:]
=
x
#
if
MinMax
:
outvar
.
min
=
np
.
nanmin
(
x
)
outvar
.
max
=
np
.
nanmax
(
x
)
#
else
:
print
(
'
A 3D var is not yet foreseen in copyvar
'
)
sys
.
exit
(
2
)
#
# Transfer attributes
#
copyatt
(
innc
.
variables
[
var
],
outvar
)
#
# Corrections to attributes
#
outvar
.
axis
=
"
YX
"
outvar
.
coordinates
=
"
nav_lat, nav_lon
"
#
# Function to copy attributes
#
#################################################################################
# Function to copy attributes
#
#################################################################################
#
# Function which copied the attributes from one file netCDF file to another.
#
def
copyatt
(
varin
,
varout
):
for
(
a
,
v
)
in
varin
.
__dict__
.
items
():
if
(
a
!=
"
_FillValue
"
)
:
if
isinstance
(
v
,
str
)
:
vv
=
v
.
replace
(
'
\n
'
,
''
).
replace
(
'
_
'
,
'
'
)
else
:
vv
=
v
if
(
debug
)
:
print
(
"
Attribute
"
,
a
,
"
--
"
,
vv
)
exec
(
'
varout.%s =
"
%s
"'
%
(
a
,
vv
))
#
# Function to copy global attributes
#
def
copyglobatt
(
innc
,
outnc
):
for
(
a
,
v
)
in
innc
.
__dict__
.
items
():
if
(
a
!=
"
_FillValue
"
)
:
if
isinstance
(
v
,
str
)
:
vv
=
v
.
replace
(
'
\n
'
,
''
).
replace
(
'
_
'
,
'
'
)
else
:
vv
=
v
if
(
debug
)
:
print
(
"
Global Attribute
"
,
a
,
"
--
"
,
vv
,
type
(
vv
))
setattr
(
outnc
,
a
,
vv
)
#
#
###################################################################################
#
#
#
###################################################################################
#
inf
=
Dataset
(
infile
,
'
r
'
)
out
=
Dataset
(
outfile
,
'
w
'
,
format
=
'
NETCDF4_CLASSIC
'
)
#
jdim
,
idim
=
inf
.
variables
[
"
nav_lon
"
].
shape
#
# Creat output dimensions
#
xdim
=
out
.
createDimension
(
'
x
'
,
idim
)
ydim
=
out
.
createDimension
(
'
y
'
,
jdim
)
#
#
#
lon
=
np
.
copy
(
inf
.
variables
[
"
nav_lon
"
][:,:])
copyvar
(
inf
,
out
,
"
nav_lon
"
)
lat
=
np
.
copy
(
inf
.
variables
[
"
nav_lat
"
][:,:])
copyvar
(
inf
,
out
,
"
nav_lat
"
)
#
trip
=
np
.
copy
(
inf
.
variables
[
"
trip
"
][:,:])
copyvar
(
inf
,
out
,
"
trip
"
)
#
basins
=
np
.
copy
(
inf
.
variables
[
"
basins
"
][:,:])
copyvar
(
inf
,
out
,
"
basins
"
,
MinMax
=
True
)
#
topoind
=
np
.
copy
(
inf
.
variables
[
"
topoind
"
][:,:])
copyvar
(
inf
,
out
,
"
topoind
"
,
MinMax
=
True
)
#
hdiff
=
np
.
copy
(
inf
.
variables
[
"
hdiff
"
][:,:])
copyvar
(
inf
,
out
,
"
hdiff
"
,
MinMax
=
True
)
#
riverl
=
np
.
copy
(
inf
.
variables
[
"
riverl
"
][:,:])
copyvar
(
inf
,
out
,
"
riverl
"
,
MinMax
=
True
)
#
orog
=
np
.
copy
(
inf
.
variables
[
"
orog
"
][:,:])
copyvar
(
inf
,
out
,
"
orog
"
,
MinMax
=
True
)
#
varorog
=
np
.
copy
(
inf
.
variables
[
"
varorog
"
][:,:])
copyvar
(
inf
,
out
,
"
varorog
"
,
MinMax
=
True
)
#
#
# Compute the new variables
#
trip
[
np
.
greater_equal
(
trip
,
FillValue
,
where
=~
np
.
isnan
(
trip
))]
=
np
.
nan
fac
=
np
.
zeros
((
jdim
,
idim
))
disto
=
np
.
zeros
((
jdim
,
idim
))
disto
[:,:]
=
np
.
nan
for
i
in
range
(
idim
):
for
j
in
range
(
jdim
):
iflow
=
i
jflow
=
j
distotmp
=
0
while
trip
[
jflow
,
iflow
]
>
0
and
~
np
.
isnan
(
trip
[
jflow
,
iflow
])
and
trip
[
jflow
,
iflow
]
<
97
:
# Add grid to flow accumulation
fac
[
jflow
,
iflow
]
=
fac
[
jflow
,
iflow
]
+
1
distotmp
=
distotmp
+
riverl
[
jflow
,
iflow
]
# Move on
inci
=
rose
[
int
(
trip
[
jflow
,
iflow
])][
1
]
incj
=
rose
[
int
(
trip
[
jflow
,
iflow
])][
0
]
iflow
=
(
iflow
+
inci
)
%
idim
jflow
=
jflow
+
incj
#
# Save distance to ocean
#
if
~
np
.
isnan
(
trip
[
j
,
i
])
:
disto
[
j
,
i
]
=
distotmp
#
# Add new fields to file
#
facnc
=
out
.
createVariable
(
'
fac
'
,
np
.
float
,(
'
y
'
,
'
x
'
),
fill_value
=
FillValue
)
facnc
.
long_name
=
"
Flow accumulation
"
facnc
.
associate
=
"
nav_lat nav_lon
"
facnc
.
coordinates
=
"
nav_lat, nav_lon
"
facnc
.
units
=
""
facnc
.
min
=
np
.
nanmin
(
fac
)
facnc
.
max
=
np
.
nanmax
(
fac
)
facnc
[:,:]
=
fac
[:,:]
distonc
=
out
.
createVariable
(
'
disto
'
,
np
.
float
,(
'
y
'
,
'
x
'
),
fill_value
=
FillValue
)
distonc
.
long_name
=
"
Distance to the ocean
"
distonc
.
associate
=
"
nav_lat nav_lon
"
distonc
.
coordinates
=
"
nav_lat, nav_lon
"
distonc
.
axis
=
"
YX
"
distonc
.
units
=
"
m
"
distonc
.
min
=
np
.
nanmin
(
disto
)
distonc
.
max
=
np
.
nanmax
(
disto
)
distonc
[:,:]
=
disto
[:,:]
#
# Close files
#
inf
.
close
()
out
.
close
()
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment