Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

angle is not accepted in curvilinear_make_uniform_on_extension #74

Open
veenstrajelmer opened this issue Jul 5, 2023 · 0 comments
Open
Labels
bug Something isn't working

Comments

@veenstrajelmer
Copy link
Collaborator

veenstrajelmer commented Jul 5, 2023

Describe the bug
When using curvilinear_make_uniform_on_extension instead of curvilinear_make_uniform, angle is not an accepted keyword, it raises: "MeshKernelError: Exception of type 'AlgorithmError' in libs/MeshKernelApi/include/MeshKernelApi/Utils.hpp (375:45) CreateUniformCurvilinearGridOnExtension: When generating an uniform grid on an defined extension, the grid angle must be equal to 0"

Also, when generating a spherical+rotated grid, the orthogonality is quite high (0.039 for this small extent)

To Reproduce

is_geographic = True #True results in non-orthogonal grid (0.039)
on_extension = False #True is not possible with angle!=0

#general settings
lon_min,lon_max = -1,-0.2
lat_min,lat_max = 49.1,49.6
lon_res,lat_res = 0.1,0.1

# Create an instance of MakeGridParameters and set the values
make_grid_parameters = meshkernel.MakeGridParameters()
make_grid_parameters.angle = 10.0
make_grid_parameters.origin_x = lon_min
make_grid_parameters.origin_y = lat_min
if on_extension:
    make_grid_parameters.upper_right_x = lon_max
    make_grid_parameters.upper_right_y = lat_max
else:
    num_x = int(np.ceil((lon_max-lon_min)/lon_res))
    num_y = int(np.ceil((lat_max-lat_min)/lat_res))
    if is_geographic:
        num_y = num_y*2 #TODO: remove *2, necessary to get correct lat grid extent with is_geographic=True
    make_grid_parameters.num_columns = num_x
    make_grid_parameters.num_rows = num_y
make_grid_parameters.block_size_x = lon_res
make_grid_parameters.block_size_y = lat_res

mk2 = meshkernel.MeshKernel(is_geographic=is_geographic)
if on_extension:
    mk2.curvilinear_make_uniform_on_extension(make_grid_parameters)
else:
    mk2.curvilinear_make_uniform(make_grid_parameters)
mk2.curvilinear_convert_to_mesh2d() #convert to ugrid/mesh2d

mesh2d = mk2.mesh2d_get()
fig, ax = plt.subplots()
mesh2d.plot_edges(ax)
print(mk2.mesh2d_get_orthogonality().values.max())

Expected behavior
A rotated grid, also when using curvilinear_make_uniform_on_extension

Version info (please complete the following information):

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant