100 lines
2.6 KiB
Python
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()
|