Skip to content

angle is not accepted in curvilinear_make_uniform_on_extension #74

@veenstrajelmer

Description

@veenstrajelmer

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

import meshkernel
import numpy as np
import matplotlib.pyplot as plt
plt.close("all")

projection = meshkernel.ProjectionType.SPHERICAL #SPERICAL 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 projection == meshkernel.ProjectionType.SPHERICAL:
        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(projection=projection)
if on_extension:
    mk2.curvilinear_compute_rectangular_grid_on_extension(make_grid_parameters)
else:
    mk2.curvilinear_compute_rectangular_grid(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):

Registered also under: https://issuetracker.deltares.nl/browse/GRIDEDIT-1859

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions