ansys / pymapdl

Pythonic interface to MAPDL
https://mapdl.docs.pyansys.com
MIT License
419 stars 118 forks source link

The RPSD command can return an error about passing too many arguments #2682

Closed mikerife closed 5 months ago

mikerife commented 6 months ago

🤓 Before submitting the issue

🔍 Description of the bug

The following example returns a Type Error:

":TypeError: Special.rpsd() takes from 1 to 8 positional arguments but 9 were given"

Using VM19 as an test.

🕵️ Steps To Reproduce

from ansys.mapdl.core import launch_mapdl
mapdl = launch_mapdl(loglevel="WARNING", print_com=True)

mapdl.units("MKS")

L_1 = 10
T_1 = 2
M_1 = 8000
PSD_1 = 10**6

mapdl.prep7()

mapdl.et(1, "BEAM188")
mapdl.keyopt(1, 3, 3)

mapdl.mp("EX", 1, 200E9)  # DEFINE MATERIAL PROPERTIES
mapdl.mp("NUXY", 1, 0.3)
mapdl.mp("DENS", 1, M_1)

mapdl.sectype(1, "BEAM", "RECT")
mapdl.secdata(T_1, T_1)

mapdl.n(1, 0)
mapdl.n(11, L_1)
mapdl.fill()

mapdl.e(1, 2)
mapdl.egen(10, 1, 1)
mapdl.finish()

mapdl.slashsolu()
mapdl.antype("MODAL")
mapdl.mxpand(9, "", "", "YES")
mapdl.modopt("LANB", 9)

mapdl.d(1, "UX", 0, 0, 1, 1, "UY", "UZ", "ROTX")
mapdl.d(11, "UY", 0, 0, 11, 1, "UZ")

mapdl.solve()
frequency_1 = mapdl.get_value("MODE", 1, "FREQ")
mapdl.finish()

mapdl.slashsolu()
mapdl.antype("SPECTR")
mapdl.spopt("PSD", 9, "ON")
mapdl.psdunit(1, "FORCE")
mapdl.dmprat(0.02)

mapdl.f(1, "FY", -PSD_1 / 2)
mapdl.f(11, "FY", -PSD_1 / 2)
mapdl.f(2, "FY", -PSD_1, "", 10, 1)

mapdl.psdfrq(1, 1, 0.1, 70.)
mapdl.psdval(1, 1, 1)
mapdl.pfact(1, "NODE")
mapdl.psdres("DISP", "REL")
mapdl.psdcom()
mapdl.solve()
mapdl.finish()

mapdl.post26()
mapdl.store("PSD", 10)
mapdl.nsol(2, 6, "U", "Y")
mapdl.rpsd(8, 2, 2, 0, 2, "", "", 1.0e-3)
# mapdl.run("rpsd,8, 2, 2, 0, 2, , , 1.0e-3")
mapdl.prtime(frequency_1 - 0.001, frequency_1 + 0.001)
P1 = mapdl.get_value("VARI", 8, "REAL", frequency_1)
PM = P1 * 1_000_000
mapdl.finish()

💻 Which Operating System are you using?

None

🐍 Which Python version are you using?

None

📝 PyMAPDL Report

Show the Report! ```text ------------------------------------------------------------------------------- PyMAPDL Software and Environment Report Packages Requirements ********************* Core packages ------------- ansys.mapdl.core : 0.67.0 numpy : 1.24.2 platformdirs : 3.9.1 scipy : 1.10.1 grpc : Package not found ansys.api.mapdl.v0 : Package not found ansys.mapdl.reader : 0.52.19 google.protobuf : Package not found Optional packages ----------------- matplotlib : 3.7.1 pyvista : 0.42.3 pyiges : 0.3.1 tqdm : 4.65.0 Ansys Installation ****************** Version Location ------------------ 201 C:\Program Files\ANSYS Inc\v201 202 C:\Program Files\ANSYS Inc\v202 211 C:\Program Files\ANSYS Inc\v211 212 C:\Program Files\ANSYS Inc\v212 221 C:\Program Files\ANSYS Inc\v221 222 C:\Program Files\ANSYS Inc\v222 231 C:\Program Files\ANSYS Inc\v231 232 C:\Program Files\ANSYS Inc\v232 Ansys Environment Variables *************************** ANSYS201_DIR C:\Program Files\ANSYS Inc\v201\ANSYS ANSYS202_DIR C:\Program Files\ANSYS Inc\v202\ANSYS ANSYS211_DIR C:\Program Files\ANSYS Inc\v211\ANSYS ANSYS212_DIR C:\Program Files\ANSYS Inc\v212\ANSYS ANSYS221_DIR C:\Program Files\ANSYS Inc\v221\ANSYS ANSYS222_DIR C:\Program Files\ANSYS Inc\v222\ANSYS ANSYS231_DIR C:\Program Files\ANSYS Inc\v231\ANSYS ANSYS232_DIR C:\Program Files\ANSYS Inc\v232\ANSYS ANSYSCLOUDCLI_ROOT C:\Program Files\ANSYS Inc\ANSYS Cloud\ANSYS Cloud CLI\ ANSYSELECTRON_ROOT C:\Program Files\ANSYS Inc\ANSYS Cloud\ANSYS Electron\ ANSYSEM_ROOT231 C:\Program Files\AnsysEM\v231\Win64 ANSYSLIC_DIR C:\Program Files\ANSYS Inc\Shared Files\Licensing ANSYSNCODE221_DIR C:\Program Files\nCode\ANSYS 2022 R1 nCode DesignLife 64-bit ANSYS_SYSDIR winx64 ANSYS_SYSDIR32 win32 AWP_LOCALE201 en-us AWP_LOCALE202 en-us AWP_LOCALE211 en-us AWP_LOCALE212 en-us AWP_LOCALE221 en-us AWP_LOCALE222 en-us AWP_LOCALE231 en-us AWP_LOCALE232 en-us AWP_ROOT201 C:\Program Files\ANSYS Inc\v201 AWP_ROOT202 C:\Program Files\ANSYS Inc\v202 AWP_ROOT211 C:\Program Files\ANSYS Inc\v211 AWP_ROOT212 C:\Program Files\ANSYS Inc\v212 AWP_ROOT221 C:\Program Files\ANSYS Inc\v221 AWP_ROOT222 C:\Program Files\ANSYS Inc\v222 AWP_ROOT231 C:\Program Files\ANSYS Inc\v231 AWP_ROOT232 C:\Program Files\ANSYS Inc\v232 CADOE_LIBDIR201 C:\Program Files\ANSYS Inc\v201\CommonFiles\Language\en-us CADOE_LIBDIR211 C:\Program Files\ANSYS Inc\v211\CommonFiles\Language\en-us CADOE_LIBDIR212 C:\Program Files\ANSYS Inc\v212\CommonFiles\Language\en-us CADOE_LIBDIR221 C:\Program Files\ANSYS Inc\v221\CommonFiles\Language\en-us CADOE_LIBDIR222 C:\Program Files\ANSYS Inc\v222\CommonFiles\Language\en-us CADOE_LIBDIR231 C:\Program Files\ANSYS Inc\v231\CommonFiles\Language\en-us CADOE_LIBDIR232 C:\Program Files\ANSYS Inc\v232\CommonFiles\Language\en-us ICEFLOW_ANSYS_PORT 9600 ```

📝 Installed packages

Show the installed packages! ```text aiofiles==22.1.0 aiohttp==3.8.4 aiosignal==1.3.1 aiosqlite==0.18.0 ansys-api-mapdl==0.5.1 ansys-api-platform-instancemanagement==1.0.0b3 ansys-dpf-core==0.8.1 ansys-dpf-gate==0.3.1 ansys-dpf-gatebin==0.3.1 ansys-grpc-dpf==0.7.1 ansys-mapdl-core==0.67.0 ansys-mapdl-reader==0.52.19 ansys-math-core==0.1.3 ansys-platform-instancemanagement==1.1.1 ansys-tools-path==0.3.1 anyio==3.6.2 appdirs==1.4.4 argon2-cffi==21.3.0 argon2-cffi-bindings==21.2.0 arrow==1.2.3 asttokens==2.2.1 async-lru==2.0.4 async-timeout==4.0.2 attrs==22.2.0 Babel==2.12.1 backcall==0.2.0 beautifulsoup4==4.12.0 bleach==6.0.0 bokeh==3.2.2 cachetools==5.3.1 certifi==2022.12.7 cffi==1.15.1 charset-normalizer==3.1.0 click==8.1.3 cmocean==3.0.3 colorama==0.4.6 colorcet==3.0.1 comm==0.1.4 contourpy==1.0.7 cycler==0.11.0 debugpy==1.6.6 decorator==5.1.1 defusedxml==0.7.1 executing==1.2.0 fastjsonschema==2.16.3 flake8==7.0.0 fonttools==4.39.2 fqdn==1.5.1 frozenlist==1.3.3 geomdl==5.3.1 google-api-core==2.11.1 google-api-python-client==2.92.0 google-auth==2.21.0 google-auth-httplib2==0.1.0 googleapis-common-protos==1.58.0 grpcio==1.51.3 httplib2==0.22.0 idna==3.4 imageio==2.26.1 importlib-metadata==6.1.0 ipycanvas==0.13.1 ipydatawidgets==4.3.5 ipyevents==2.0.2 ipykernel==6.22.0 ipython==8.11.0 ipython-genutils==0.2.0 ipyvtklink==0.2.3 ipywidgets==8.1.1 isoduration==20.11.0 jedi==0.18.2 Jinja2==3.1.2 json5==0.9.11 jsonpointer==2.3 jsonschema==4.17.3 jupyter-events==0.6.3 jupyter-lsp==2.2.0 jupyter-ydoc==0.2.3 jupyter_client==8.1.0 jupyter_core==5.3.0 jupyter_server==2.5.0 jupyter_server_fileid==0.8.0 jupyter_server_proxy==4.1.0 jupyter_server_terminals==0.4.4 jupyter_server_ydoc==0.8.0 jupyterlab==4.0.7 jupyterlab-pygments==0.2.2 jupyterlab-widgets==3.0.9 jupyterlab_server==2.20.0 kiwisolver==1.4.4 linkify-it-py==2.0.2 Markdown==3.5 markdown-it-py==3.0.0 MarkupSafe==2.1.2 matplotlib==3.7.1 matplotlib-inline==0.1.6 mccabe==0.7.0 mdit-py-plugins==0.4.0 mdurl==0.1.2 meshio==5.3.4 mistune==2.0.5 multidict==6.0.4 nbclassic==0.5.3 nbclient==0.7.2 nbconvert==7.2.10 nbformat==5.8.0 nest-asyncio==1.5.6 notebook==6.5.3 notebook_shim==0.2.2 numpy==1.24.2 packaging==23.0 pandas==2.0.2 pandocfilters==1.5.0 panel==1.2.3 param==1.13.0 parso==0.8.3 pickleshare==0.7.5 Pillow==9.4.0 platformdirs==3.9.1 pooch==1.7.0 prometheus-client==0.16.0 prompt-toolkit==3.0.38 protobuf==3.20.3 protoc-gen-swagger==0.1.0 psutil==5.9.4 pure-eval==0.2.2 pyansys-tools-versioning==0.4.0 pyasn1==0.5.0 pyasn1-modules==0.3.0 pycodestyle==2.11.1 pycparser==2.21 pyct==0.5.0 pyflakes==3.2.0 Pygments==2.14.0 pyiges==0.3.1 pyparsing==3.0.9 pyrsistent==0.19.3 python-dateutil==2.8.2 python-json-logger==2.0.7 pythreejs==2.4.2 pytz==2023.3 pyvista==0.42.3 pyviz_comms==3.0.0 pywin32==305 pywinpty==2.0.10 PyYAML==6.0 pyzmq==25.0.2 requests==2.28.2 rfc3339-validator==0.1.4 rfc3986-validator==0.1.1 rich==13.6.0 rsa==4.9 scipy==1.10.1 scooby==0.7.1 Send2Trash==1.8.0 simpervisor==1.0.0 six==1.16.0 sniffio==1.3.0 soupsieve==2.4 stack-data==0.6.2 terminado==0.17.1 tinycss2==1.2.1 tomli==2.0.1 tornado==6.2 tqdm==4.65.0 traitlets==5.9.0 traittypes==0.2.1 trame==3.2.7 trame-client==2.12.6 trame-components==2.1.0 trame-deckgl==2.0.1 trame-markdown==2.0.2 trame-matplotlib==2.0.1 trame-plotly==2.1.0 trame-rca==0.3.0 trame-router==2.0.1 trame-server==2.12.0 trame-simput==2.3.1 trame-vega==2.0.2 trame-vtk==2.5.9 trame-vuetify==2.3.1 typing_extensions==4.8.0 tzdata==2023.3 uc-micro-py==1.0.2 uri-template==1.2.0 uritemplate==4.1.1 urllib3==1.26.15 vtk==9.2.6 wcwidth==0.2.6 webcolors==1.12 webencodings==0.5.1 websocket-client==1.5.1 widgetsnbextension==4.0.9 wslink==1.12.3 xyzservices==2023.10.0 y-py==0.5.9 yarl==1.8.2 ypy-websocket==0.8.2 zipp==3.15.0 ```

📝 Logger output file

Show the logger output file. ```text ```
mikerife commented 6 months ago

mylog.log

Here is the Logger output (was too long to paste).

germa89 commented 6 months ago

Hi @mikerife

it is because one the arguments in mapdl.rpsd is empty:

image

PyMAPDL does skip all the empty arguments. Therefore the function signature:


    def rpsd(
        self,
        ir="",
        ia="",
        ib="",
        itype="",
        datum="",
        name="",
        signif="",
        **kwargs,
    ):
        """Calculates response power spectral density (PSD).

        APDL Command: RPSD

So, if you want it to work, just remove the empty argument.

germa89 commented 6 months ago

This makes me think if that design choice (omitting empty arguments) is a good one.... It is not super compatible with MAPDL.

The converter deal with them by just skipping the conversion of those commands, using mapdl.run.

But then...

Not sure what to think.

Pinging @mikerife @pmaroneh @koubaa @FredAns for feedback.

mikerife commented 5 months ago

Hi @germa89 Interesting question. The "Name" field is not strictly necessary if you test MAPDL. But the MAPDL documentation on RPSD implies that it is necessary. Pretty sure you only need a name for plot legends; everything else that references does so by the "IR" number. My assumption is that anyone using PyMAPDL would create the RSPD plot with matplotlib or the like.

germa89 commented 5 months ago

No no... I mean the "--" argument. 😊

mikerife commented 5 months ago

@german Doh! The empty field, got it. I'd prefer to allow the empty fields. Some of them have hidden options. Some really are empty. And some are empty but could be used in the future. Or maybe my brain is just too hard-wired for APDL and not Python.

koubaa commented 5 months ago

@germa89 @mikerife +1 for including empty arguments. Some of those are placeholders for undocumented arguments that may one day be documented, and by skipping over it PyMAPDL may be signing up for future compatibility breaks. Good thing we are still at 0.x 😃

germa89 commented 5 months ago

In that case, I can close this PR because the current behaviour is the desired one.