Coverage for src/meshpy/abaqus/beam.py: 78%

18 statements  

« prev     ^ index     » next       coverage.py v7.8.0, created at 2025-04-28 04:21 +0000

1# The MIT License (MIT) 

2# 

3# Copyright (c) 2018-2025 MeshPy Authors 

4# 

5# Permission is hereby granted, free of charge, to any person obtaining a copy 

6# of this software and associated documentation files (the "Software"), to deal 

7# in the Software without restriction, including without limitation the rights 

8# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 

9# copies of the Software, and to permit persons to whom the Software is 

10# furnished to do so, subject to the following conditions: 

11# 

12# The above copyright notice and this permission notice shall be included in 

13# all copies or substantial portions of the Software. 

14# 

15# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 

16# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 

17# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 

18# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 

19# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 

20# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 

21# THE SOFTWARE. 

22"""This file provides functions to create Abaqus beam element classes to be 

23used with MeshPy.""" 

24 

25import numpy as _np 

26 

27from meshpy.core.element_beam import Beam as _Beam 

28 

29 

30def generate_abaqus_beam(beam_type: str): 

31 """Return a class representing a beam in Abaqus. This class can be used in 

32 the standard MeshPy mesh generation functions. 

33 

34 Args 

35 ---- 

36 beam_type: str: 

37 Abaqus identifier for this beam element. For more details, have a look 

38 at the Abaqus manual on "Choosing a beam element" 

39 """ 

40 

41 if not beam_type[0].lower() == "b": 

42 raise TypeError("Could not identify the given Abaqus beam element") 

43 

44 n_dim = int(beam_type[1]) 

45 element_type = int(beam_type[2]) 

46 

47 if not n_dim == 3: 

48 raise ValueError("Currently only 3D beams in Abaqus are supported") 

49 if element_type == 1: 

50 n_nodes = 2 

51 elif element_type == 2: 

52 n_nodes = 3 

53 elif element_type == 3: 

54 n_nodes = 2 

55 else: 

56 raise ValueError(f"Got unexpected element_type {element_type}") 

57 

58 # Define the class variable responsible for creating the nodes. 

59 nodes_create = _np.linspace(-1, 1, num=n_nodes) 

60 

61 # Create the Abaqus beam class. 

62 return type( 

63 "BeamAbaqus" + beam_type, 

64 (_Beam,), 

65 { 

66 "beam_type": beam_type, 

67 "nodes_create": nodes_create, 

68 "n_dim": n_dim, 

69 }, 

70 )