matplotlib: no window
The problem
No window is opened when a script is run from a command line. Running the script in an interactive IDE is fine.
What happens
The module matplotlib closes all windows when unloaded. This happens immediately after the script terminates if it is run from a command line. When run inside a IDE, then the module stays loaded, keeping windows opened.
How to fix
A quick solution is wait for an input from a user at the end of the script. The following code, when added at the end of the script, opens an extra window asking to press any key:
The function waitforbuttonpress() waits for a mouse click or a key being pressed and returns respectively False or True. The loop makes it sure that the program exists only in the second situation, so that you can interact with the windows using your mouse.
Note: the program stops only when a key is pressed while the extra window is active. This allows to interact with other windows without limitation.
ngsolve.webgui.Draw() does not show a picture
The problem
The command Draw(...) prints BaseWebGuiScene instead of showing a graphics
What happens
The WebGUI extension used by NGSolve has not been integrated with Jupyter, so that the notebook does not know what to do with them.
How to solve
Install the WebGUI extension with the following commands:
pip3 install webgui_jupyter_widgets jupyter nbextension install --user --py widgetsnbextension jupyter nbextension enable --user --py widgetsnbextension jupyter nbextension install --user --py webgui_jupyter_widgets jupyter nbextension enable --user --py webgui_jupyter_widgets
ngsolve/netgen: RuntimeError: std::bad_cast
The problem
Importing netgen.gui opens a separate NGSolve window. After the window is closed, any Python code using ngsolve ends with RuntimeError: std::bad_cast.
What happens
NGSolve is not written entirely in Python, but instead it delegates computation to external libraries written in C/C++. In order for this to work, netgen.gui loads the libraries in a separate window and then it communicates with it. Once the window is closed, the libraries are no longer in the memory and ngsolve/netgen functions fail to access them.
How to solve
Keep the window opened by netgen.gui opened all the time. In case the window was closed, please reopen it with
1 netgen.gui.StartGUI()
Note: the ngsolve libraries should be loaded in a background without opening the window. Currently we are not aware why this is not the case.