Skip to content

Crash on plotting elemental data on an imported solid model #717

@roosre

Description

@roosre

🔍 Before submitting the issue

  • I have searched among the existing issues
  • I am using a Python virtual environment

🐞 Description of the bug

Server crashes when visualization elemental mass on an imported solid model. The script below is from one of the examples.

Note: the crash happens randomly. You may have to run the script a few times

Error:
Traceback (most recent call last):
File "C:\Users\rroos\AppData\Local\pypoetry\Cache\virtualenvs\ansys-acp-core-yF5gLrBq-py3.10\lib\site-packages\IPython\core\interactiveshell.py", line 3577, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "", line 139, in
model.elemental_data
File "D:\ANSYSDev\pyacp\src\ansys\acp\core_tree_objects_elemental_or_nodal_data.py", line 457, in getter
response = request_func(
File "C:\Users\rroos\AppData\Local\pypoetry\Cache\virtualenvs\ansys-acp-core-yF5gLrBq-py3.10\lib\site-packages\grpc_channel.py", line 1181, in call
return _end_unary_response_blocking(state, call, False, None)
File "C:\Users\rroos\AppData\Local\pypoetry\Cache\virtualenvs\ansys-acp-core-yF5gLrBq-py3.10\lib\site-packages\grpc_channel.py", line 1006, in _end_unary_response_blocking
raise _InactiveRpcError(state) # pytype: disable=not-instantiable
grpc._channel._InactiveRpcError: <_InactiveRpcError of RPC that terminated with:
status = StatusCode.UNAVAILABLE
details = "IOCP/Socket: Connection reset (An existing connection was forcibly closed by the remote host.
-- 10054)"
debug_error_string = "UNKNOWN:Error received from peer {created_time:"2024-11-28T10:07:15.4849725+00:00", grpc_status:14, grpc_message:"IOCP/Socket: Connection reset (An existing connection was forcibly closed by the remote host.\r\n -- 10054)"}"

📝 Steps to reproduce

import os
import pathlib
import tempfile

import pyvista

from ansys.acp.core import CADGeometry, ImportedPlyOffsetType, PlyType, VirtualGeometry, launch_acp
from ansys.acp.core.extras import ExampleKeys, get_example_file
from ansys.acp.core.material_property_sets import ConstantDensity, ConstantEngineeringConstants

CAMERA_POSITION = [(0.0436, 0.0102, 0.0193), (0.0111, 0.0035, 0.0046), (-0.1685, 0.9827, -0.0773)]

tempdir = tempfile.TemporaryDirectory()
WORKING_DIR = pathlib.Path(tempdir.name)
input_file = get_example_file(ExampleKeys.BASIC_FLAT_PLATE_DAT, WORKING_DIR)

acp = launch_acp()

model = acp.import_model(path=input_file, format="ansys:dat")

engineering_constants_ud = ConstantEngineeringConstants.from_orthotropic_constants(
    E1=5e10, E2=1e10, E3=1e10, nu12=0.28, nu13=0.28, nu23=0.3, G12=5e9, G23=4e9, G31=4e9
)
density_ud = ConstantDensity(rho=2700)

ud_material = model.create_material(
    name="E-Glass UD",
    ply_type=PlyType.REGULAR,
    engineering_constants=engineering_constants_ud,
    density=density_ud,
)

engineering_resin = ConstantEngineeringConstants.from_isotropic_constants(E=5e9, nu=0.3)
density_resin = ConstantDensity(rho=1200)

void_material = model.create_material(
    name="Void material",
    ply_type=PlyType.ISOTROPIC,
    engineering_constants=engineering_resin,
    density=density_resin,
)
filler_material = model.create_material(
    name="Filler material",
    ply_type=PlyType.ISOTROPIC,
    engineering_constants=engineering_resin,
    density=density_resin,
)

fabric = model.create_fabric(name="E-Glass Fabric", material=ud_material, thickness=0.001)


def create_virtual_geometry_from_file(
    example_key: ExampleKeys,
) -> tuple[CADGeometry, VirtualGeometry]:
    """Create a CAD geometry and virtual geometry."""
    geometry_file = get_example_file(example_key, WORKING_DIR)
    geometry_obj = model.create_cad_geometry()
    geometry_obj.refresh(geometry_file)  # upload and load the geometry file
    model.update()
    virtual_geometry = model.create_virtual_geometry(
        name=os.path.basename(geometry_file), cad_components=geometry_obj.root_shapes.values()
    )
    return geometry_obj, virtual_geometry


triangle_surf_cad, triangle_surf_vcad = create_virtual_geometry_from_file(
    ExampleKeys.RULE_GEOMETRY_TRIANGLE
)
top_surf_cad, top_surf_vcad = create_virtual_geometry_from_file(ExampleKeys.SNAP_TO_GEOMETRY)

imported_ply_group = model.create_imported_modeling_group(name="Imported Ply Group")
imported_ply_triangle = imported_ply_group.create_imported_modeling_ply(
    name="Triangle Ply",
    offset_type=ImportedPlyOffsetType.BOTTOM_OFFSET,
    ply_material=fabric,
    mesh_geometry=triangle_surf_vcad,
    ply_angle=0,
    rosettes=[model.rosettes["12"]],
)

imported_ply_top = imported_ply_group.create_imported_modeling_ply(
    name="Triangle Ply",
    offset_type=ImportedPlyOffsetType.MIDDLE_OFFSET,
    ply_material=fabric,
    mesh_geometry=top_surf_vcad,
    ply_angle=45,
    rosettes=[model.rosettes["12"]],
)
model.update()

def plotter_with_all_geometries(cad_geometries):
    colors = ["green", "yellow", "blue", "red"]
    plotter = pyvista.Plotter()
    for index, cad in enumerate(cad_geometries):
        geom_mesh = cad.visualization_mesh.to_pyvista()
        plotter.add_mesh(geom_mesh, color=colors[index], opacity=0.1)
        edges = geom_mesh.extract_feature_edges()
        plotter.add_mesh(edges, color="white", line_width=4)
        plotter.add_mesh(edges, color="black", line_width=2)
    plotter.camera_position = CAMERA_POSITION
    return plotter


# plotter = plotter_with_all_geometries([triangle_surf_cad, top_surf_cad])
# plotter.show()

solid_mesh_file = get_example_file(ExampleKeys.BASIC_FLAT_PLATE_SOLID_MESH_CDB, WORKING_DIR)
imported_solid_model = model.create_imported_solid_model(
    name="Imported Solid Model",
    external_path=solid_mesh_file,
    format="ansys:cdb",
)
imported_solid_model.import_initial_mesh()
# plotter = plotter_with_all_geometries([triangle_surf_cad, top_surf_cad])
# plotter.add_mesh(imported_solid_model.solid_mesh.to_pyvista(), show_edges=True, opacity=0.5)
# plotter.show()

imported_solid_model.create_layup_mapping_object(
    name="Map imported plies",
    use_imported_plies=True,  # enable imported plies
    select_all_plies=True,  # select all plies
    entire_solid_mesh=True,
    scale_ply_thicknesses=False,
    void_material=void_material,
    delete_lost_elements=False,
    filler_material=filler_material,
    rosettes=[model.rosettes["12"]],
)
model.update()

plotter = plotter_with_all_geometries([triangle_surf_cad, top_surf_cad])
for imported_ply in [imported_ply_triangle, imported_ply_top]:
    for pp in imported_ply.imported_production_plies.values():
        for ap in pp.imported_analysis_plies.values():
            plotter.add_mesh(ap.solid_mesh.to_pyvista(), show_edges=True, opacity=1)
# plotter.add_mesh(mesh=imported_solid_model.solid_mesh.to_pyvista(), show_edges=False, opacity=0.2)
#plotter.show()

model.elemental_data
assert model.elemental_data.mass is not None
model.elemental_data.mass.get_pyvista_mesh(mesh=model.solid_mesh).plot(show_edges=True)

💻 Which operating system are you using?

Windows

📀 Which ANSYS version are you using?

No response

🐍 Which Python version are you using?

3.10

📦 Installed packages

accessible-pygments==0.0.5
aiohappyeyeballs==2.4.3
aiohttp==3.11.6
aiosignal==1.3.1
alabaster==1.0.0
-e git+https://github.com/ansys-internal/pyacp.git@ab2a4ce0ba1e73ea64933f841b475738d4484c20#egg=ansys_acp_core
ansys-api-acp==0.2.0
ansys-api-mapdl==0.5.2
ansys-api-mechanical==0.1.2
ansys-api-platform-instancemanagement==1.1.0
ansys-api-tools-filetransfer==0.1.1
ansys-dpf-composites==0.6.1
ansys-dpf-core==0.13.2
ansys-mapdl-core==0.68.6
ansys-mapdl-reader==0.54.1
ansys-math-core==0.2.0
ansys-mechanical-core==0.11.10
ansys-mechanical-env==0.1.8
ansys-mechanical-stubs==0.1.4
ansys-platform-instancemanagement==1.1.2
ansys-pythonnet==3.1.0rc4
ansys-sphinx-theme==1.2.1
ansys-tools-filetransfer==0.1.0
ansys-tools-local-product-launcher==0.1.0
ansys-tools-path==0.7.0
ansys-tools-visualization-interface==0.5.0
anyio==4.6.2.post1
appdirs==1.4.4
argon2-cffi==23.1.0
argon2-cffi-bindings==21.2.0
arrow==1.3.0
asttokens==2.4.1
async-timeout==5.0.1
attrs==24.2.0
babel==2.16.0
backports.entry-points-selectable==1.3.0
beautifulsoup4==4.12.3
black==24.10.0
bleach==6.2.0
cachetools==5.5.0
certifi==2024.8.30
cffi==1.17.1
cfgv==3.4.0
charset-normalizer==3.4.0
click==8.1.7
clr-loader==0.2.6
colorama==0.4.6
comm==0.2.2
contourpy==1.3.1
coverage==7.6.7
cycler==0.12.1
debugpy==1.8.8
decopatch==1.4.10
decorator==5.1.1
defusedxml==0.7.1
distlib==0.3.9
docker==7.1.0
docutils==0.21.2
exceptiongroup==1.2.2
executing==2.1.0
fastjsonschema==2.20.0
filelock==3.16.1
fonttools==4.55.0
fqdn==1.5.1
frozenlist==1.5.0
geomdl==5.3.1
google-api-core==2.23.0
google-api-python-client==2.153.0
google-auth==2.36.0
google-auth-httplib2==0.2.0
googleapis-common-protos==1.66.0
grpcio==1.68.0
grpcio-health-checking==1.62.3
httplib2==0.22.0
hypothesis==6.119.3
identify==2.6.2
idna==3.10
imagesize==1.4.1
importlib_metadata==8.5.0
iniconfig==2.0.0
ipykernel==6.29.5
ipython==8.29.0
ipywidgets==8.1.5
isoduration==20.11.0
jedi==0.19.2
Jinja2==3.1.4
jsonpointer==3.0.0
jsonschema==4.23.0
jsonschema-specifications==2024.10.1
jupyter-events==0.10.0
jupyter_client==8.6.3
jupyter_core==5.7.2
jupyter_server==2.14.2
jupyter_server_proxy==4.4.0
jupyter_server_terminals==0.5.3
jupyterlab_pygments==0.3.0
jupyterlab_widgets==3.0.13
kiwisolver==1.4.7
makefun==1.15.6
MarkupSafe==3.0.2
matplotlib==3.9.2
matplotlib-inline==0.1.7
mistune==3.0.2
more-itertools==10.5.0
msgpack==1.1.0
multidict==6.1.0
mypy==1.13.0
mypy-extensions==1.0.0
nbclient==0.10.0
nbconvert==7.16.4
nbformat==5.10.4
nest-asyncio==1.6.0
networkx==3.4.2
nodeenv==1.9.1
numpy==1.26.4
numpydoc==1.8.0
overrides==7.7.0
packaging==24.2
pandocfilters==1.5.1
parso==0.8.4
pathspec==0.12.1
pdf2image==1.17.0
pillow==11.0.0
platformdirs==4.3.6
pluggy==1.5.0
pooch==1.8.2
pre_commit==4.0.1
prometheus_client==0.21.0
prompt_toolkit==3.0.48
propcache==0.2.0
proto-plus==1.25.0
protobuf==4.25.5
psutil==6.1.0
pure_eval==0.2.3
py-cpuinfo==9.0.0
pyansys-tools-versioning==0.6.0
pyasn1==0.6.1
pyasn1_modules==0.4.1
pycparser==2.22
pydata-sphinx-theme==0.16.0
Pygments==2.18.0
pyiges==0.3.1
pypandoc==1.14
pyparsing==3.2.0
pytest==8.3.3
pytest-benchmark==5.1.0
pytest-cases==3.8.6
pytest-cov==6.0.0
python-dateutil==2.9.0.post0
python-json-logger==2.0.7
pyvista==0.44.1
pywin32==308
pywinpty==2.0.14
PyYAML==6.0.2
pyzmq==26.2.0
referencing==0.35.1
requests==2.32.3
rfc3339-validator==0.1.4
rfc3986-validator==0.1.1
rpds-py==0.21.0
rsa==4.9
scipy==1.14.1
scooby==0.10.0
Send2Trash==1.8.3
simpervisor==1.0.0
six==1.16.0
sniffio==1.3.1
snowballstemmer==2.2.0
sortedcontainers==2.4.0
soupsieve==2.6
Sphinx==8.1.3
sphinx-autodoc-typehints==2.5.0
sphinx-copybutton==0.5.2
sphinx-gallery==0.18.0
sphinx-jinja==2.0.2
sphinx_design==0.6.1
sphinxcontrib-applehelp==2.0.0
sphinxcontrib-devhelp==2.0.0
sphinxcontrib-htmlhelp==2.1.0
sphinxcontrib-jsmath==1.0.1
sphinxcontrib-qthelp==2.0.0
sphinxcontrib-serializinghtml==2.0.0
stack-data==0.6.3
tabulate==0.9.0
terminado==0.18.1
tinycss2==1.4.0
tomli==2.1.0
tornado==6.4.1
tqdm==4.67.0
traitlets==5.14.3
trame==3.7.0
trame-client==3.5.0
trame-server==3.2.3
trame-vtk==2.8.12
trame-vuetify==2.7.2
types-protobuf==5.28.3.20241030
types-python-dateutil==2.9.0.20241003
typing_extensions==4.12.2
uri-template==1.3.0
uritemplate==4.1.1
urllib3==2.2.3
virtualenv==20.27.1
vtk==9.3.1
wcwidth==0.2.13
webcolors==24.11.1
webencodings==0.5.1
websocket-client==1.8.0
websockets==13.1
widgetsnbextension==4.0.13
wslink==2.2.1
yarl==1.17.2
zipp==3.21.0

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions