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
163d475a
Commit
163d475a
authored
5 years ago
by
James Harle
Browse files
Options
Download
Email Patches
Plain Diff
Start of tidy up and transition to Python3
parent
c99779e3
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
0 additions
and
148 deletions
+0
-148
pynemo/nemo_bogadons_gauntlet.py
pynemo/nemo_bogadons_gauntlet.py
+0
-148
No files found.
pynemo/nemo_bogadons_gauntlet.py
deleted
100644 → 0
View file @
c99779e3
#
# The loop from nemo_bdy_extr_tm3
#
#
#
from
calendar
import
monthrange
from
datetime
import
datetime
from
netCDF4
import
Dataset
,
netcdftime
class
Enter
:
def
__init__
(
self
,
settings
,
sc_time
,
dir_list
,
dst_cal_type
,
year
,
month
):
var_nam
=
[
'votemper'
,
'vosaline'
]
sc_fields
=
source_fields
#self.setup = settings # dict
# define src/dst cals
sf
,
ed
=
cal_trans
(
sc_time
,
dst_cal_type
,
year
,
month
)
# W
DstCal
=
utime
(
'seconds since %d-1-1'
%
year
,
dst_cal_type
)
dst_start
=
DstCal
.
date2num
(
datetime
(
year
,
month
,
1
))
dst_end
=
DstCal
.
date2num
(
datetime
(
year
,
month
,
ed
,
23
,
59
,
59
))
self
.
S_cal
=
utime
(
sc_time
[
0
][
'units'
],
sc_time
[
0
][
'calendar'
])
self
.
D_cal
=
utime
(
'seconds since %d-1-1'
%
settings
[
'year_000'
],
settings
[
'dst_calendar'
])
for
date
in
sc_time
:
date
[
'date_num'
]
=
DstCal
.
date2num
(
date
[
'date'
])
*
sf
# Get first and last date within range
first_date
,
last_date
=
None
,
None
rev_seq
=
range
(
len_sc_time
)
rev_seq
.
reverse
()
# Multiple values.. might be broken..
for
date
in
rev_seq
:
if
sc_time
[
date
][
'date_num'
]
<
dst_start
:
first_date
=
date
#number..
break
for
date
in
range
(
len_sc_time
):
if
sc_time
[
date
][
'date_num'
]
>
dst_end
:
last_date
=
date
break
for
date
in
range
(
first_date
,
last_date
+
1
):
nc
=
Dataset
(
sc_time
[
date
],
'r'
)
if
key_vec
:
pass
#nc_2 = Dataset
# FIX ME
# We shouldnt have to worry about counters
sc_bdy
=
np
.
zeros
(
nvar
,
sc_z_len
,
source_ind
[
'ind'
].
shape
[
0
],
source_ind
[
'ind'
].
shape
[
1
])
ind_vec
=
{}
# distinctive variable name since it gets lost in the huge loop
for
shoggoth
in
range
(
nvar
):
varid
=
nc
.
variables
[
var_nam
[
shoggoth
]]
i
,
ii
=
source_ind
[
'imin'
],
source_ind
[
'imax'
]
j
,
jj
=
source_ind
[
'jmin'
],
source_ind
[
'jmax'
]
sc_arrays
=
[]
col_sc_arrays
=
[]
if
key_vec
:
varid_2
=
nc_2
.
variables
[
var_nam
[
shoggoth
+
1
]]
if
not
isslab
and
not
key_vec
:
# NOTE: 0 v 1 indexing may problemate
sc_arrays
.
append
(
varid
[
i
-
1
:
ii
,
j
-
1
:
jj
,
:
sc_z_len
,
:
1
])
elif
key_vec
:
sc_arrays
.
append
(
varid
[
i
-
2
:
ii
,
j
-
1
:
jj
,
:
sc_z_len
,
:
1
])
sc_arrays
.
append
(
varid_2
[
i
-
1
:
ii
,
j
-
2
:
jj
,
:
sc_z_len
,
:
1
])
for
x
in
0
,
1
:
# tidy up src array - replace missing val
for
y
in
'mv'
,
'fv'
:
if
not
np
.
isnan
(
sc_fields
[
y
][
x
]):
ind_vec
[
y
]
=
sc_arrays
[
x
]
==
sc_fields
[
y
][
x
]
sc_arrays
[
x
][
ind_vec
[
y
]]
=
0
else
:
sc_arrays
[
x
][
np
.
isnan
(
scarr
)]
=
0
# Adjust for scaling or offsets
if
not
np
.
isnan
(
sc_fields
[
'sf'
][
x
]):
sc_arrays
[
x
]
*=
sc_fields
[
'sf'
][
x
]
if
not
np
.
isnan
(
sc_fields
[
'os'
][
x
]):
sc_arrays
[
x
]
+=
sc_fields
[
'os'
][
x
]
# Colocate velocity points on T grid prior to rotation
axis
=
[
1
,
None
]
col
=
0.5
*
(
sc_arrays
[
x
][:
-
axis
[
0
],:
-
axis
[
1
],:]
+
sc_arrays
[
x
][
axis
[
0
]:,
axis
[
1
]:,:])
col
[
col
==
0
]
=
np
.
NaN
col_sc_arrays
.
append
(
col
)
axis
.
reverse
()
# This is a slab
else
:
sc_arrays
.
append
(
varid
[
i
-
1
:
ii
,
j
-
1
:
jj
,
:
1
])
#query var names
if
msk
and
first
and
shoggoth
==
0
:
pass
# Open another magic file and do stuff
nc3
=
Dataset
(
source_mask
,
'r'
)
varid_3
=
nc3
.
variables
[
'tmaskutil'
]
msk_array
=
varid_3
[
i
-
1
:
ii
,
j
-
1
:
jj
,
:
1
]
if
msk
:
#must be true for msk array ??...
sc_arrays
[
0
][
msk_array
==
0
]
=
np
.
NaN
# Finished reading Source data
#for depth_val in range(sc_z_len):
# tmp_arrays = []
# if not key_vec:
# tmp_arrays.append(sc_arrays[0][:,:depth_val]
def
_fv_mv_to_zero
(
self
,
scarr
,
indvec
,
sc_fields
,
pos
):
for
x
in
'mv'
,
'fv'
:
if
not
np
.
isnan
(
sc_fields
[
x
][
pos
]):
ind_vec
[
x
]
=
scarr
==
sc_fields
[
x
][
pos
]
scarr
[
ind_vec
[
x
]]
=
0
else
:
scarr
[
np
.
isnan
(
scarr
)]
=
0
return
scarr
,
indvec
# Convert numeric date from source to dest
def
convert_date
(
self
,
date
):
val
=
self
.
S_cal
.
num2date
(
date
)
return
self
.
D_cal
.
date2num
(
val
)
def
cal_trans
(
self
,
source
,
dest
,
year
,
month
):
vals
=
{
'gregorian'
:
[
monthrange
(
year
,
month
)[
1
],
31
],
'noleap'
:
[
365.
,
31
],
'360_day'
:
[
360.
,
30
]}
if
source
not
in
vals
.
keys
():
raise
ValueError
(
'Unknown calendar type: %s'
%
source
)
sf
=
val
[
source
][
0
]
/
val
[
dest
][
0
]
return
sf
,
vals
[
dest
][
1
]
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