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

18 statements  

« prev     ^ index     » next       coverage.py v7.9.1, created at 2025-06-30 18:48 +0000

1# The MIT License (MIT) 

2# 

3# Copyright (c) 2018-2025 BeamMe 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.""" 

23 

24import numpy as _np 

25 

26from beamme.core.element_beam import Beam as _Beam 

27 

28 

29def generate_abaqus_beam(beam_type: str): 

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

31 the standard mesh generation functions. 

32 

33 Args 

34 ---- 

35 beam_type: str: 

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

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

38 """ 

39 

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

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

42 

43 n_dim = int(beam_type[1]) 

44 element_type = int(beam_type[2]) 

45 

46 if not n_dim == 3: 

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

48 if element_type == 1: 

49 n_nodes = 2 

50 elif element_type == 2: 

51 n_nodes = 3 

52 elif element_type == 3: 

53 n_nodes = 2 

54 else: 

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

56 

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

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

59 

60 # Create the Abaqus beam class. 

61 return type( 

62 "BeamAbaqus" + beam_type, 

63 (_Beam,), 

64 { 

65 "beam_type": beam_type, 

66 "nodes_create": nodes_create, 

67 "n_dim": n_dim, 

68 }, 

69 )