Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
thopri
PyNEMO
Commits
429b84b5
Commit
429b84b5
authored
5 years ago
by
thopri
Browse files
Options
Download
Email Patches
Plain Diff
added test script folder and added output data folder to git ignore
parent
f4fb9959
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
221 additions
and
2 deletions
+221
-2
.gitignore
.gitignore
+1
-0
inputs/namelist_remote.bdy
inputs/namelist_remote.bdy
+2
-2
pynemo/tests/bdy_coords.py
pynemo/tests/bdy_coords.py
+157
-0
test_scripts/bdy_coords_plot.py
test_scripts/bdy_coords_plot.py
+61
-0
No files found.
.gitignore
View file @
429b84b5
...
...
@@ -24,6 +24,7 @@ wheels/
.installed.cfg
*.egg
MANIFEST
outputs
# PyInstaller
# Usually these files are written by a python script from a template
...
...
This diff is collapsed.
Click to expand it.
inputs/namelist_remote.bdy
View file @
429b84b5
...
...
@@ -40,8 +40,8 @@
!------------------------------------------------------------------------------
! I/O
!------------------------------------------------------------------------------
sn_src_dir = '
.
/PyNEMO/inputs/src_data_remote.ncml' ! src_files/'
sn_dst_dir = '
.
/outputs'
sn_src_dir = '
/Users/thopri/Projects
/PyNEMO/inputs/src_data_remote.ncml' ! src_files/'
sn_dst_dir = '
/Users/thopri/Projects/PyNEMO
/outputs'
sn_fn = 'NNA_R12' ! prefix for output files
nn_fv = -1e20 ! set fill value for output files
nn_src_time_adj = 0 ! src time adjustment
...
...
This diff is collapsed.
Click to expand it.
pynemo/tests/bdy_coords.py
0 → 100755
View file @
429b84b5
'''
###
## This is a subset of pynemo for Robinson. It should be able to read a mask
## file and produce a coordinates.bdy.nc file (jdha@noc.ac.uk)
###
'''
# pylint: disable=E1103
# pylint: disable=no-name-in-module
#External imports
from
time
import
clock
import
numpy
as
np
import
logging
#local imports
from
pynemo
import
nemo_bdy_setup
as
setup
from
pynemo
import
nemo_bdy_gen_c
as
gen_grid
from
pynemo
import
nemo_coord_gen_pop
as
coord
from
pynemo
import
nemo_bdy_source_coord
as
source_coord
from
pynemo
import
nemo_bdy_dst_coord
as
dst_coord
from
pynemo
import
nemo_bdy_ice
from
pynemo
import
pynemo_settings_editor
from
pynemo.utils
import
Constants
from
pynemo.gui.nemo_bdy_mask
import
Mask
as
Mask_File
from
PyQt4.QtGui
import
QMessageBox
#import pickle
logger
=
logging
.
getLogger
(
__name__
)
def
process_bdy
(
setup_filepath
=
0
,
mask_gui
=
False
):
""" Main entry to the processing of the bdy
Keyword arguments:
setup_filepath -- file path to bdy file
mask_gui -- whether gui to select the mask file needs to be poped up
"""
#Logger
logger
.
info
(
'START'
)
start
=
clock
()
SourceCoord
=
source_coord
.
SourceCoord
()
DstCoord
=
dst_coord
.
DstCoord
()
logger
.
info
(
clock
()
-
start
)
start
=
clock
()
Setup
=
setup
.
Setup
(
setup_filepath
)
# default settings file
settings
=
Setup
.
settings
logger
.
info
(
clock
()
-
start
)
ice
=
settings
[
'ice'
]
logger
.
info
(
'ice = %s'
,
ice
)
logger
.
info
(
'Done Setup'
)
# default file, region settingas
start
=
clock
()
bdy_msk
=
_get_mask
(
Setup
,
mask_gui
)
logger
.
info
(
clock
()
-
start
)
logger
.
info
(
'Done Mask'
)
DstCoord
.
bdy_msk
=
bdy_msk
==
1
reload
(
gen_grid
)
start
=
clock
()
logger
.
info
(
'start bdy_t'
)
grid_t
=
gen_grid
.
Boundary
(
bdy_msk
,
settings
,
't'
)
logger
.
info
(
clock
()
-
start
)
start
=
clock
()
logger
.
info
(
'start bdy_u'
)
grid_u
=
gen_grid
.
Boundary
(
bdy_msk
,
settings
,
'u'
)
logger
.
info
(
'start bdy_v'
)
logger
.
info
(
clock
()
-
start
)
start
=
clock
()
grid_v
=
gen_grid
.
Boundary
(
bdy_msk
,
settings
,
'v'
)
logger
.
info
(
'start bdy_f'
)
logger
.
info
(
clock
()
-
start
)
start
=
clock
()
grid_f
=
gen_grid
.
Boundary
(
bdy_msk
,
settings
,
'f'
)
logger
.
info
(
'done bdy t,u,v,f'
)
logger
.
info
(
clock
()
-
start
)
start
=
clock
()
if
ice
:
grid_ice
=
nemo_bdy_ice
.
BoundaryIce
()
grid_ice
.
grid_type
=
't'
grid_ice
.
bdy_r
=
grid_t
.
bdy_r
bdy_ind
=
{
't'
:
grid_t
,
'u'
:
grid_u
,
'v'
:
grid_v
,
'f'
:
grid_f
}
for
k
in
bdy_ind
.
keys
():
logger
.
info
(
'bdy_ind %s %s %s'
,
k
,
bdy_ind
[
k
].
bdy_i
.
shape
,
bdy_ind
[
k
].
bdy_r
.
shape
)
start
=
clock
()
co_set
=
coord
.
Coord
(
settings
[
'dst_dir'
]
+
'/coordinates.bdy.nc'
,
bdy_ind
)
logger
.
info
(
'done coord gen'
)
logger
.
info
(
clock
()
-
start
)
start
=
clock
()
logger
.
info
(
settings
[
'dst_hgr'
])
co_set
.
populate
(
settings
[
'dst_hgr'
])
logger
.
info
(
'done coord pop'
)
logger
.
info
(
clock
()
-
start
)
# may need to rethink grid info
# tracer 3d frs over rw
# tracer 2d frs over rw (i.e. ice)
# dyn 2d over 1st rim of T grid (i.e. ssh)
# dyn 2d over 1st rim
# dyn 2d frs over rw
# dyn 3d over 1st rim
# dyn 3d frs over rw
def
_get_mask
(
Setup
,
mask_gui
):
""" This method reads the mask information from the netcdf file or opens a gui
to create a mask depending on the mask_gui input. return the mask data. The default mask
data is using bathymetry and applying a 1px halo
Keyword arguments:
Setup -- settings for bdy
mask_gui -- boolean to open mask gui.
"""
bdy_msk
=
None
if
mask_gui
:
#Open the gui to create a mask
_
,
mask
=
pynemo_settings_editor
.
open_settings_dialog
(
Setup
)
bdy_msk
=
mask
.
data
Setup
.
refresh
()
else
:
try
:
#mask filename and mask file flag is set
if
Setup
.
bool_settings
[
'mask_file'
]
and
Setup
.
settings
[
'mask_file'
]
is
not
None
:
mask
=
Mask_File
(
mask_file
=
Setup
.
settings
[
'mask_file'
])
bdy_msk
=
mask
.
data
elif
Setup
.
bool_settings
[
'mask_file'
]:
logger
.
error
(
"Mask file is not given"
)
return
else
:
#no mask file specified then use default 1px halo mask
logger
.
warning
(
"Using default mask with bathymetry!!!!"
)
mask
=
Mask_File
(
Setup
.
settings
[
'bathy'
])
mask
.
apply_border_mask
(
Constants
.
DEFAULT_MASK_PIXELS
)
bdy_msk
=
mask
.
data
except
ValueError
:
# why is this except here? as there is an else: statement TODO
print
'something wrong?'
return
if
np
.
amin
(
bdy_msk
)
==
0
:
# Mask is not set throw a warning message and set border to 1px.
logger
.
warning
(
"Setting the mask to 1px border"
)
QMessageBox
.
warning
(
None
,
"pyNEMO"
,
"Mask is not set, setting a 1 pixel border mask"
)
if
bdy_msk
is
not
None
and
1
<
bdy_msk
.
shape
[
0
]
and
1
<
bdy_msk
.
shape
[
1
]:
tmp
=
np
.
ones
(
bdy_msk
.
shape
,
dtype
=
bool
)
tmp
[
1
:
-
1
,
1
:
-
1
]
=
False
bdy_msk
[
tmp
]
=
-
1
return
bdy_msk
This diff is collapsed.
Click to expand it.
test_scripts/bdy_coords_plot.py
0 → 100755
View file @
429b84b5
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Created on Thu Oct 24 11:28:04 2019
@author: thopri
"""
# Must be run from the PyNEMO main folder. Otherwise permission errors abound
import
matplotlib.pyplot
as
plt
from
netCDF4
import
Dataset
import
numpy
as
np
from
mpl_toolkits.basemap
import
Basemap
from
pynemo.tests
import
bdy_coords
as
bdc
bdc
.
process_bdy
(
'/Users/thopri/Projects/PyNEMO/inputs/namelist_remote.bdy'
,
False
)
rootgrp
=
Dataset
(
'/Users/thopri/Projects/PyNEMO/outputs/NNA_R12_bdyT_y1979m11.nc'
,
"r"
,
format
=
"NETCDF4"
)
bdy_msk
=
np
.
squeeze
(
rootgrp
.
variables
[
'bdy_msk'
][:])
-
1
bdy_lon
=
np
.
squeeze
(
rootgrp
.
variables
[
'nav_lon'
][:])
bdy_lat
=
np
.
squeeze
(
rootgrp
.
variables
[
'nav_lat'
][:])
rootgrp
.
close
()
rootgrp
=
Dataset
(
'/Users/thopri/Projects/PyNEMO/outputs/coordinates.bdy.nc'
,
"r"
,
format
=
"NETCDF4"
)
bdy_it
=
np
.
squeeze
(
rootgrp
.
variables
[
'nbit'
][:])
bdy_jt
=
np
.
squeeze
(
rootgrp
.
variables
[
'nbjt'
][:])
bdy_rt
=
np
.
squeeze
(
rootgrp
.
variables
[
'nbrt'
][:])
rootgrp
.
close
()
bdy_msk
=
np
.
ma
.
masked_where
(
bdy_msk
<
0
,
bdy_msk
)
for
f
in
range
(
len
(
bdy_it
)):
bdy_msk
[
bdy_jt
[
f
,],
bdy_it
[
f
,]]
=
bdy_rt
[
f
,]
# Plot to check output
fig
=
plt
.
figure
(
figsize
=
(
12
,
12
))
ax
=
fig
.
add_subplot
(
111
)
map
=
Basemap
(
llcrnrlat
=
41.
,
urcrnrlat
=
65.
,
\
llcrnrlon
=-
22.
,
urcrnrlon
=
25.
,
\
rsphere
=
(
6378137.00
,
6356752.3142
),
\
resolution
=
'l'
,
projection
=
'lcc'
,
\
lat_1
=
57.
,
lon_0
=-
12.5
)
map
.
drawcoastlines
()
map
.
drawcountries
()
map
.
fillcontinents
(
color
=
'grey'
)
map
.
drawmeridians
(
np
.
arange
(
-
25.
,
25.
,
2
),
labels
=
[
0
,
0
,
0
,
1
])
map
.
drawparallels
(
np
.
arange
(
40.
,
66.
,
2
),
labels
=
[
1
,
0
,
0
,
0
])
cmap
=
plt
.
cm
.
get_cmap
(
'jet'
,
10
)
cmaplist
=
[
cmap
(
i
)
for
i
in
range
(
cmap
.
N
)]
cmaplist
[
0
]
=
(.
7
,.
7
,.
7
,
1.0
)
cmap
=
cmap
.
from_list
(
'Custom cmap'
,
cmaplist
,
cmap
.
N
)
x1
,
y1
=
map
(
bdy_lon
[:,:],
bdy_lat
[:,:])
im
=
map
.
pcolormesh
(
x1
,
y1
,
bdy_msk
,
cmap
=
cmap
,
vmin
=-
0.5
,
vmax
=
9.5
)
cb
=
plt
.
colorbar
(
orientation
=
'vertical'
,
shrink
=
0.75
,
aspect
=
30
,
fraction
=
0.1
,
pad
=
0.05
)
cb
.
set_label
(
'RimWidth Number'
)
cb
.
set_ticks
(
np
.
arange
(
10
))
th
=
plt
.
title
((
'BDY Points'
),
fontweight
=
'bold'
)
\ No newline at end of file
This diff is collapsed.
Click to expand it.
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