Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 14 additions & 14 deletions rose-stem/app/generate_weights/bin/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -140,55 +140,55 @@ def ord2_corr(src_field, src_mask, rank_src):
"""calculate lon and lat gradients to correct
destination values for conservative
weights """
#we need
#we need
src_mask_r = np.reshape(src_mask, (rank_src[1], rank_src[0]))
grad_lon = np.zeros((rank_src[0]*rank_src[1], 1), dtype=np.float64)
grad_lat = np.zeros((rank_src[0]*rank_src[1], 1), dtype=np.float64)
#find unique source grid points
#find unique source grid points
for j in range(rank_src[1]):
for i in range(rank_src[0]):
delew = .5
delsn = .5
ipt = j*rank_src[0]+i
if(src_mask_r[j, i]):
#find N,E,S,W points for col[i], use fortran indexing (starts with 1)
#follow scrip approach. Incorrect for NEMO grid for global model!
#find i-1 and i+1
#i-1
#find N,E,S,W points for col[i], use fortran indexing (starts with 1)
#follow scrip approach. Incorrect for NEMO grid for global model!
#find i-1 and i+1
#i-1
ipt_m1 = i - 1
if ipt_m1 < 0:
ipt_m1 = rank_src[0] -1 + ipt_m1
#account for mask i-1
#account for mask i-1
if(src_mask_r[j, ipt_m1] == 0):
ipt_m1 = i
delew = 1.
#i+1
#i+1
ipt_p1 = i + 1
if ipt_p1 > rank_src[0] -1:
ipt_p1 = ipt_p1 - rank_src[1] - 1
#account for mask i+1
#account for mask i+1
if(src_mask_r[j, ipt_p1] == 0):
ipt_p1 = i
delew = 1.
#j+1
#j+1
jpt_p1 = j + 1
if(jpt_p1 > rank_src[1]) - 1:
jpt_p1 = j
delsn = 1.
#account for mask j+1
#account for mask j+1
if src_mask_r[jpt_p1, i] == 0:
jpt_p1 = j
delsn = 1.
#j-1
#j-1
jpt_m1 = j - 1
if jpt_m1 < 0:
jpt_m1 = j
delsn = 1.
#account for mask j-1
#account for mask j-1
if src_mask_r[jpt_m1, i] == 0:
jpt_m1 = j
delsn = 1.
#shift index python (0.0) fortran (1,1)
#shift index python (0.0) fortran (1,1)
ipt_w = j*rank_src[0]+ipt_m1
ipt_e = j*rank_src[0]+ipt_p1
jpt_n = jpt_p1*rank_src[0]+i
Expand Down
6 changes: 6 additions & 0 deletions rose-stem/app/generate_weights/bin/generate_weights.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ def __init__(self):
self.lfric_grid_path = None
self.um_grid_type = None
self.um_grid_path = None
self.um_mask_value = None

def set_regrid_info(self):
'''Set information from environment variables'''
Expand All @@ -40,6 +41,7 @@ def set_regrid_info(self):
self.um_grid_path = os.environ.get('GRID_PATH_UM')
self.lfric_grid_type = os.environ.get('GRID_TYPE_LFRIC')
self.lfric_grid_path = os.environ.get('GRID_PATH_LFRIC')
self.um_mask_value = um_rmdi

def set_arguments_um2lfric(self):
'''Set ESMF regrid command line options'''
Expand All @@ -48,6 +50,8 @@ def set_arguments_um2lfric(self):
options = options + ' --dst_loc center'
options = options + ' --64bit_offset --check -m ' + self.method
options = options + ' --extrap_method neareststod'
options = options + ' --src_missingvalue um_mask_value'
options = options + ' -v mask_b,dst_grid_imask'
if self.um_grid_type == 'regional':
options = options + ' --src_regional '
if self.lfric_grid_type == 'regional':
Expand All @@ -71,6 +75,8 @@ def set_arguments_lfric2um(self):
options = options + ' --src_loc center'
options = options + ' -d ' + self.um_grid_path
options = options + ' --64bit_offset --check -m ' + self.method
options = options + ' -v mask_a,src_grid_imask'
options = options + ' --dst_missingvalue um_mask_value'
if self.um_grid_type == 'regional':
options = options + ' --src_regional '
if self.lfric_grid_type == 'regional':
Expand Down
Loading