Files
AbaqusSubroutineDev/scripts/test_uel_3d_euler_beam_uel.py
T
2026-06-12 09:08:25 +09:00

100 lines
2.6 KiB
Python

import re
import unittest
from pathlib import Path
ROOT = Path(__file__).resolve().parent.parent
WRAPPER = ROOT / "src" / "fortran" / "uel_3d_euler_beam_uel.for"
def normalized_source() -> str:
if not WRAPPER.exists():
raise AssertionError(f"missing Abaqus UEL wrapper: {WRAPPER}")
return re.sub(r"\s+", " ", WRAPPER.read_text(encoding="utf-8").upper())
class Uel3dEulerBeamWrapperContractTests(unittest.TestCase):
def test_wrapper_file_exists(self):
self.assertTrue(WRAPPER.exists(), f"missing Abaqus UEL wrapper: {WRAPPER}")
def test_wrapper_preserves_manual_uel_signature(self):
text = normalized_source()
self.assertIn("SUBROUTINE UEL(", text)
self.assertIn("INCLUDE 'ABA_PARAM.INC'", text)
for token in (
"RHS",
"AMATRX",
"SVARS",
"ENERGY",
"NDOFEL",
"NRHS",
"NSVARS",
"PROPS",
"NPROPS",
"COORDS",
"MCRD",
"NNODE",
"U",
"DU",
"V",
"A",
"JTYPE",
"TIME",
"DTIME",
"KSTEP",
"KINC",
"JELEM",
"PARAMS",
"NDLOAD",
"JDLTYP",
"ADLMAG",
"PREDEF",
"NPREDF",
"LFLAGS",
"MLVARX",
"DDLMAG",
"MDLOAD",
"PNEWDT",
"JPROPS",
"NJPROP",
"PERIOD",
):
self.assertRegex(text, rf"\b{token}\b")
signature = text.split("INCLUDE 'ABA_PARAM.INC'", 1)[0]
self.assertNotRegex(signature, r"\bSTATUS\b")
def test_wrapper_uses_abaqus_dimensions_and_thin_adapter_call(self):
text = normalized_source()
for shape in (
"RHS(MLVARX,*)",
"AMATRX(NDOFEL,NDOFEL)",
"SVARS(*)",
"ENERGY(8)",
"PROPS(*)",
"COORDS(MCRD,NNODE)",
"U(NDOFEL)",
"DU(MLVARX,*)",
"V(NDOFEL)",
"A(NDOFEL)",
"TIME(2)",
"PARAMS(*)",
"JDLTYP(MDLOAD,*)",
"ADLMAG(MDLOAD,*)",
"DDLMAG(MDLOAD,*)",
"PREDEF(2,NPREDF,NNODE)",
"LFLAGS(*)",
"JPROPS(*)",
):
self.assertIn(shape, text)
self.assertIn("USE UEL_3D_EULER_BEAM_ABI_ADAPTER", text)
self.assertIn("CALL UEL3DEB_ABI_STATIC", text)
self.assertIn("CALL XIT", text)
if __name__ == "__main__":
unittest.main()