Source code for ansys.dyna.core.keywords.keyword_classes.auto.frequency_domain_ssd_direct

# Copyright (C) 2021 - 2024 ANSYS, Inc. and/or its affiliates.
# SPDX-License-Identifier: MIT
#
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.

"""Module providing the FrequencyDomainSsdDirect class."""
import typing
from ansys.dyna.core.lib.card import Card, Field, Flag
from ansys.dyna.core.lib.keyword_base import KeywordBase

[docs] class FrequencyDomainSsdDirect(KeywordBase): """DYNA FREQUENCY_DOMAIN_SSD_DIRECT keyword""" keyword = "FREQUENCY" subkeyword = "DOMAIN_SSD_DIRECT" def __init__(self, **kwargs): """Initialize the FrequencyDomainSsdDirect class.""" super().__init__(**kwargs) self._cards = [ Card( [ Field( "mdmin", int, 0, 10, 1, **kwargs, ), Field( "mdmax", int, 10, 10, **kwargs, ), Field( "fnmin", float, 20, 10, 0.0, **kwargs, ), Field( "fnmax", float, 30, 10, **kwargs, ), Field( "restmd", int, 40, 10, 0, **kwargs, ), Field( "restdp", int, 50, 10, 0, **kwargs, ), Field( "lcflag", int, 60, 10, 0, **kwargs, ), Field( "relatv", int, 70, 10, 0, **kwargs, ), ], ), Card( [ Field( "dampf", float, 0, 10, 0.0, **kwargs, ), Field( "lcdam", int, 10, 10, 0, **kwargs, ), Field( "lctyp", int, 20, 10, 0, **kwargs, ), Field( "dmpmas", float, 30, 10, 0.0, **kwargs, ), Field( "dmpstf", float, 40, 10, 0.0, **kwargs, ), Field( "dmpflg", int, 50, 10, 0, **kwargs, ), ], ), Card( [ Field( "unused", int, 0, 10, **kwargs, ), Field( "istress", int, 10, 10, **kwargs, ), Field( "memory", int, 20, 10, 0, **kwargs, ), Field( "nerp", int, 30, 10, 0, **kwargs, ), Field( "strtyp", int, 40, 10, 0, **kwargs, ), Field( "nout", int, 50, 10, 0, **kwargs, ), Field( "notyp", int, 60, 10, 0, **kwargs, ), Field( "nova", int, 70, 10, 0, **kwargs, ), ], ), Card( [ Field( "nid", int, 0, 10, **kwargs, ), Field( "ntyp", int, 10, 10, 0, **kwargs, ), Field( "dof", int, 20, 10, 1, **kwargs, ), Field( "vad", int, 30, 10, 0, **kwargs, ), Field( "lc1", int, 40, 10, **kwargs, ), Field( "lc2", int, 50, 10, **kwargs, ), Field( "sf", float, 60, 10, 0, **kwargs, ), Field( "vid", int, 70, 10, 0, **kwargs, ), ], ), ] @property def mdmin(self) -> int: """Get or set the The first mode in modal superposition method (optional). """ # nopep8 return self._cards[0].get_value("mdmin") @mdmin.setter def mdmin(self, value: int) -> None: """Set the mdmin property.""" self._cards[0].set_value("mdmin", value) @property def mdmax(self) -> typing.Optional[int]: """Get or set the The last mode in modal superposition method (optional). """ # nopep8 return self._cards[0].get_value("mdmax") @mdmax.setter def mdmax(self, value: int) -> None: """Set the mdmax property.""" self._cards[0].set_value("mdmax", value) @property def fnmin(self) -> float: """Get or set the The minimum natural frequency in modal superposition method(optional). """ # nopep8 return self._cards[0].get_value("fnmin") @fnmin.setter def fnmin(self, value: float) -> None: """Set the fnmin property.""" self._cards[0].set_value("fnmin", value) @property def fnmax(self) -> typing.Optional[float]: """Get or set the The maximum natural frequency in modal superposition method(optional). """ # nopep8 return self._cards[0].get_value("fnmax") @fnmax.setter def fnmax(self, value: float) -> None: """Set the fnmax property.""" self._cards[0].set_value("fnmax", value) @property def restmd(self) -> int: """Get or set the Restart option. EQ.0: A new modal analysis is performed, EQ.1: Restart with d3eigv, EQ.2: Restart with "modeshp" binary scratch file. """ # nopep8 return self._cards[0].get_value("restmd") @restmd.setter def restmd(self, value: int) -> None: """Set the restmd property.""" if value not in [0, 1, 2, None]: raise Exception("""restmd must be `None` or one of {0,1,2}.""") self._cards[0].set_value("restmd", value) @property def restdp(self) -> int: """Get or set the Restart option. EQ.0: A new run without dumpssd, EQ.1: Restart with dumpssd. """ # nopep8 return self._cards[0].get_value("restdp") @restdp.setter def restdp(self, value: int) -> None: """Set the restdp property.""" if value not in [0, 1, None]: raise Exception("""restdp must be `None` or one of {0,1}.""") self._cards[0].set_value("restdp", value) @property def lcflag(self) -> int: """Get or set the Load Curve definition flag. EQ.0: load curves are given as amplitude / phase angle, EQ.1: load curves are given as real / imaginary components. """ # nopep8 return self._cards[0].get_value("lcflag") @lcflag.setter def lcflag(self, value: int) -> None: """Set the lcflag property.""" if value not in [0, 1, None]: raise Exception("""lcflag must be `None` or one of {0,1}.""") self._cards[0].set_value("lcflag", value) @property def relatv(self) -> int: """Get or set the Flag for displacement, velocity and acceleration results: EQ.0: absolute values are requested, EQ.1: relative values are requested (for VAD = 2, 3 and 4 only). """ # nopep8 return self._cards[0].get_value("relatv") @relatv.setter def relatv(self, value: int) -> None: """Set the relatv property.""" if value not in [0, 1, None]: raise Exception("""relatv must be `None` or one of {0,1}.""") self._cards[0].set_value("relatv", value) @property def dampf(self) -> float: """Get or set the Modal damping coefficient, ζ. """ # nopep8 return self._cards[1].get_value("dampf") @dampf.setter def dampf(self, value: float) -> None: """Set the dampf property.""" self._cards[1].set_value("dampf", value) @property def lcdam(self) -> int: """Get or set the Load Curve ID defining mode dependent modal damping coefficient ζ. """ # nopep8 return self._cards[1].get_value("lcdam") @lcdam.setter def lcdam(self, value: int) -> None: """Set the lcdam property.""" self._cards[1].set_value("lcdam", value) @property def lctyp(self) -> int: """Get or set the Type of load curve defining modal damping coefficient EQ.0: Abscissa value defines frequency, EQ.1: Abscissa value defines mode number. """ # nopep8 return self._cards[1].get_value("lctyp") @lctyp.setter def lctyp(self, value: int) -> None: """Set the lctyp property.""" self._cards[1].set_value("lctyp", value) @property def dmpmas(self) -> float: """Get or set the Mass proportional damping constant α, in Rayleigh damping.. """ # nopep8 return self._cards[1].get_value("dmpmas") @dmpmas.setter def dmpmas(self, value: float) -> None: """Set the dmpmas property.""" self._cards[1].set_value("dmpmas", value) @property def dmpstf(self) -> float: """Get or set the Stiffness proportional damping constant β, in Rayleigh damping. """ # nopep8 return self._cards[1].get_value("dmpstf") @dmpstf.setter def dmpstf(self, value: float) -> None: """Set the dmpstf property.""" self._cards[1].set_value("dmpstf", value) @property def dmpflg(self) -> int: """Get or set the Damping flag: EQ.0: use modal damping coefficient ζ,defined by DAMPF, or LCDAM, or Rayleigh damping defined by DMPMAS and DMPSTF in this card. EQ.1: use damping defined by *DAMPING_PART_MASS and *DAMPING_PART_STIFFNESS. """ # nopep8 return self._cards[1].get_value("dmpflg") @dmpflg.setter def dmpflg(self, value: int) -> None: """Set the dmpflg property.""" if value not in [0, 1, None]: raise Exception("""dmpflg must be `None` or one of {0,1}.""") self._cards[1].set_value("dmpflg", value) @property def istress(self) -> typing.Optional[int]: """Get or set the """ # nopep8 return self._cards[2].get_value("istress") @istress.setter def istress(self, value: int) -> None: """Set the istress property.""" self._cards[2].set_value("istress", value) @property def memory(self) -> int: """Get or set the Memory flag: EQ.0: modal superposition will be performed in-core. This is helpful to speed up the simulation. EQ.1: modal superposition will be performed out-of-core. This is needed for some large scale problems which require huge memory (beyond the memory available). """ # nopep8 return self._cards[2].get_value("memory") @memory.setter def memory(self, value: int) -> None: """Set the memory property.""" if value not in [0, 1, None]: raise Exception("""memory must be `None` or one of {0,1}.""") self._cards[2].set_value("memory", value) @property def nerp(self) -> int: """Get or set the Number of ERP panels """ # nopep8 return self._cards[2].get_value("nerp") @nerp.setter def nerp(self, value: int) -> None: """Set the nerp property.""" self._cards[2].set_value("nerp", value) @property def strtyp(self) -> int: """Get or set the Stress used in fatigue analysis: EQ.0: Von Mises stress, EQ.1: Maximum principal stress, EQ.2: Maximum shear stress. """ # nopep8 return self._cards[2].get_value("strtyp") @strtyp.setter def strtyp(self, value: int) -> None: """Set the strtyp property.""" if value not in [0, 1, 2, None]: raise Exception("""strtyp must be `None` or one of {0,1,2}.""") self._cards[2].set_value("strtyp", value) @property def nout(self) -> int: """Get or set the Part, part set, segment set, or node set ID for response output (use with acoustic computation). See NOTYP below. """ # nopep8 return self._cards[2].get_value("nout") @nout.setter def nout(self, value: int) -> None: """Set the nout property.""" self._cards[2].set_value("nout", value) @property def notyp(self) -> int: """Get or set the Type of NOUT: EQ.0: part set ID (not implemented), EQ.1: part ID (not implemented), EQ.2: segment set ID, EQ.3: node set ID EQ.-2: segment set ID which mismatches with acoustic boundary nodes. Mapping of velocity or acceleration to the acoustic boundary nodes is performed. """ # nopep8 return self._cards[2].get_value("notyp") @notyp.setter def notyp(self, value: int) -> None: """Set the notyp property.""" if value not in [0, 1, 2, 3, -2, None]: raise Exception("""notyp must be `None` or one of {0,1,2,3,-2}.""") self._cards[2].set_value("notyp", value) @property def nova(self) -> int: """Get or set the Response output type: EQ.0: velocity, EQ.1: acceleration. """ # nopep8 return self._cards[2].get_value("nova") @nova.setter def nova(self, value: int) -> None: """Set the nova property.""" if value not in [0, 1, None]: raise Exception("""nova must be `None` or one of {0,1}.""") self._cards[2].set_value("nova", value) @property def nid(self) -> typing.Optional[int]: """Get or set the Node, Node set,Segment set ID for excitation input.See NTYP below. """ # nopep8 return self._cards[3].get_value("nid") @nid.setter def nid(self, value: int) -> None: """Set the nid property.""" self._cards[3].set_value("nid", value) @property def ntyp(self) -> int: """Get or set the Type of NID: EQ.0: node ID, EQ.1: node set ID, EQ.2: segment set ID. """ # nopep8 return self._cards[3].get_value("ntyp") @ntyp.setter def ntyp(self, value: int) -> None: """Set the ntyp property.""" if value not in [0, 1, 2, None]: raise Exception("""ntyp must be `None` or one of {0,1,2}.""") self._cards[3].set_value("ntyp", value) @property def dof(self) -> int: """Get or set the Applicable degrees-of-freedom for excitation input(ignored if VAD=1). EQ. 1: x-translational degree-of-freedom x-rotational degree-of-freedom (for torque excitation, VAD=8), EQ. 2: y-translational degree-of-freedom or y-rotational degree-of-freedom (for torque excitation, VAD=8), EQ. 3: z-translational degree-of-freedom or z-rotational degree-of-freedom (for torque excitation, VAD=8), EQ. 4: translational movement in direction given by vector VID or rotational movement with axis given by vector VID (for torque excitation, VAD=8). """ # nopep8 return self._cards[3].get_value("dof") @dof.setter def dof(self, value: int) -> None: """Set the dof property.""" if value not in [1, 2, 3, 4, None]: raise Exception("""dof must be `None` or one of {1,2,3,4}.""") self._cards[3].set_value("dof", value) @property def vad(self) -> int: """Get or set the Excitation input type: EQ.0: nodal force, EQ.1: pressure EQ.2: base velocity, EQ.3: base acceleration, EQ.4: base displacement, EQ.5: enforced velocity by large mass method (see remark 10), EQ.6: enforced acceleration by large mass method (see remark 10), EQ.7: enforced displacement by large mass method (see remark 10). EQ.8: torque. EQ.9: base angular velocity, EQ.10: base angular acceleration, EQ.11: base angular displacement. EQ.12: enforced velocity (for DIRECT type keyword options only) EQ.13: enforced acceleration (for DIRECT type keyword options only) EQ.14: enforced displacement (for DIRECT type keyword options only) """ # nopep8 return self._cards[3].get_value("vad") @vad.setter def vad(self, value: int) -> None: """Set the vad property.""" if value not in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, None]: raise Exception("""vad must be `None` or one of {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14}.""") self._cards[3].set_value("vad", value) @property def lc1(self) -> typing.Optional[int]: """Get or set the Load Curve ID defining amplitude (LCFLAG=0) or real (in-phase) part (LCFLAG=1) of load as a function of frequency """ # nopep8 return self._cards[3].get_value("lc1") @lc1.setter def lc1(self, value: int) -> None: """Set the lc1 property.""" self._cards[3].set_value("lc1", value) @property def lc2(self) -> typing.Optional[int]: """Get or set the Load Curve ID defining phase angle (LCFLAG=0) or imaginary (out-phase) part (LCFLAG=1) of load as a function of frequency. """ # nopep8 return self._cards[3].get_value("lc2") @lc2.setter def lc2(self, value: int) -> None: """Set the lc2 property.""" self._cards[3].set_value("lc2", value) @property def sf(self) -> float: """Get or set the Scale factor for the load. """ # nopep8 return self._cards[3].get_value("sf") @sf.setter def sf(self, value: float) -> None: """Set the sf property.""" self._cards[3].set_value("sf", value) @property def vid(self) -> int: """Get or set the Vector ID for DOF=4 for excitation input, see *DEFINE_VECTOR. """ # nopep8 return self._cards[3].get_value("vid") @vid.setter def vid(self, value: int) -> None: """Set the vid property.""" self._cards[3].set_value("vid", value)