fix: add abaqus uel wrapper contract
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user