<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Jiapeng Chen · AlexanderChan on AlexanderChan's Blog</title><link>https://alexchan114.github.io/en/</link><description>Recent content in Jiapeng Chen · AlexanderChan on AlexanderChan's Blog</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Mon, 19 Oct 2026 00:00:00 +0800</lastBuildDate><atom:link href="https://alexchan114.github.io/en/index.xml" rel="self" type="application/rss+xml"/><item><title>Jone Gorman AI Learning Guide: From Foundations to Agents, Physical AI, and RSI</title><link>https://alexchan114.github.io/en/post/2026/10/19/jone-gorman-ai-guide/</link><pubDate>Mon, 19 Oct 2026 00:00:00 +0800</pubDate><guid>https://alexchan114.github.io/en/post/2026/10/19/jone-gorman-ai-guide/</guid><description>&lt;p&gt;Expensive courses, unfamiliar terminology, and a constant stream of new technology can make getting started with AI feel overwhelming. This guide begins from the perspective of a learner with a limited budget and little computing experience, breaking “I want to learn AI” into manageable steps.&lt;/p&gt;&#10;&lt;p&gt;From understanding a computer to writing a first Python script, reproducing a model, and finishing a small project, each step can leave you with code and notes of your own. Courses provide an entry point; hands-on work connects the ideas.&lt;/p&gt;</description></item><item><title>From a Connector Simulation to a Traceable Batch Boundary Search</title><link>https://alexchan114.github.io/en/post/2026/10/18/connector-simulation-boundary/</link><pubDate>Sun, 18 Oct 2026 00:00:00 +0000</pubDate><guid>https://alexchan114.github.io/en/post/2026/10/18/connector-simulation-boundary/</guid><description>&lt;article class="cae-article"&gt;&#10;&lt;p class="article-downloads"&gt;&lt;a href="https://alexchan114.github.io/articles/connector-simulation/connector-simulation.en.pdf"&gt;English PDF&lt;/a&gt; · &lt;a href="https://alexchan114.github.io/articles/connector-simulation/connector-simulation.pdf"&gt;Chinese PDF&lt;/a&gt; · &lt;a href="https://alexchan114.github.io/articles/connector-simulation/connector-simulation-sources-bilingual.zip"&gt;Bilingual LaTeX and figure sources&lt;/a&gt;&lt;/p&gt;&lt;nav class="article-toc" aria-label="Article contents"&gt;&lt;details&gt;&lt;summary&gt;Contents&lt;/summary&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="#three-requirements-before-scaling-up"&gt;Three requirements before scaling up&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="#the-problem-is-a-family-of-models"&gt;The problem is a family of models&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="#reduce-the-repeated-work-with-substructures"&gt;Reduce the repeated work with substructures&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="#parameterization-starts-with-a-successful-gui-operation"&gt;Parameterization starts with a successful GUI operation&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="#four-sampling-methods-one-bounded-probability-mapping"&gt;Four sampling methods, one bounded probability mapping&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="#interfaces-amplify-modeling-mistakes-during-automation"&gt;Interfaces amplify modeling mistakes during automation&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="#split-execution-into-recoverable-stages"&gt;Split execution into recoverable stages&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="#define-contact-performance-before-ranking-it"&gt;Define contact performance before ranking it&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="#search-an-operating-boundary-not-only-a-worst-sample"&gt;Search an operating boundary, not only a worst sample&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="#acceptance-checks-for-the-complete-system"&gt;Acceptance checks for the complete system&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="#build-interpretability-into-automation"&gt;Build interpretability into automation&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="#reproducibility-and-public-materials"&gt;Reproducibility and public materials&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/details&gt;&lt;/nav&gt;&lt;blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;What this article covers.&lt;/strong&gt; The difficulty in connector finite element analysis is not simply solving one model. It is making the same physical model generate many reliable samples and explaining when those samples lose contact performance. This article follows an engineering route through reduction, parameterization, scheduling, postprocessing, and boundary search.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Public scope.&lt;/strong&gt; Customer, product, and loading details are anonymized. This article contains no actual models, original tolerance vectors, unpublished contact-force data, or performance figures. The sampling plot is an independently generated method demonstration; the other figures are schematic. The added coupled search has passed offline code and coordinate checks. Actual failure boundaries still require complete solves with the matching model.&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;h2 class="unnumbered" id="three-requirements-before-scaling-up"&gt;Three requirements before scaling up&lt;/h2&gt;&#10;&lt;p&gt;A usable batch simulation system must satisfy three distinct requirements: &lt;strong&gt;physical interpretability, numerical checks, and recoverable execution.&lt;/strong&gt; Reducing solve time is only the first step. If samples use different contact settings, tolerance application contaminates the baseline, or a solver interruption is counted as contact failure, faster computation does not produce a credible operating boundary.&lt;/p&gt;&#10;&lt;p&gt;Figure &lt;a href="#fig-workflow"&gt;1&lt;/a&gt; summarizes the route: substructures reduce repeated computation; explicit variable mappings produce samples; and consistent contact metrics connect batch statistics to pose search. Each stage retains the identity and provenance of its inputs.&lt;/p&gt;&#10;&lt;figure data-latex-placement="H" id="fig-workflow"&gt;&#10;&lt;a href="https://alexchan114.github.io/articles/connector-simulation/fig01_workflow.png" rel="noopener" target="_blank"&gt;&lt;img alt="Overall method schematic. Every sample follows the same execution chain. Search changes initial pose while the manufacturing-tolerance vector can remain fixed. No actual product geometry or performance data are shown." decoding="async" loading="lazy" src="https://alexchan114.github.io/articles/connector-simulation/fig01_workflow.png" style="width:100%;height:auto"/&gt;&lt;/a&gt;&#10;&lt;figcaption&gt;Overall method schematic. Every sample follows the same execution chain. Search changes initial pose while the manufacturing-tolerance vector can remain fixed. No actual product geometry or performance data are shown.&lt;/figcaption&gt;&#10;&lt;/figure&gt;&#10;&lt;h2 id="the-problem-is-a-family-of-models"&gt;The problem is a family of models&lt;/h2&gt;&#10;&lt;p&gt;Connector mating is a nonlinear contact problem. Geometry, local stiffness, initial gaps, and the loading path jointly determine the final contact state. One analysis of nominal geometry answers a question about a single configuration. Manufacturing deviations introduce a family of responses; assembly offsets and angular misalignment add further conditioning variables.&lt;/p&gt;&#10;&lt;p&gt;The problem can be written as &lt;math display="block" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi mathvariant="bold-italic"&gt;𝒚&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi mathvariant="script"&gt;𝒮&lt;/mi&gt;&lt;mo form="prefix" stretchy="false"&gt;(&lt;/mo&gt;&lt;mi mathvariant="bold-italic"&gt;𝝃&lt;/mi&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;mi mathvariant="bold-italic"&gt;𝒒&lt;/mi&gt;&lt;mo&gt;;&lt;/mo&gt;&lt;mi mathvariant="bold-italic"&gt;𝜼&lt;/mi&gt;&lt;mo form="postfix" stretchy="false"&gt;)&lt;/mo&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;\begin{equation}&#10;\mathbf{y}=\mathcal{S}(\boldsymbol{\xi},\mathbf{q};\boldsymbol{\eta}),&#10;\end{equation}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; where &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mi mathvariant="bold-italic"&gt;𝝃&lt;/mi&gt;&lt;annotation encoding="application/x-tex"&gt;\boldsymbol{\xi}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; is the manufacturing-tolerance vector, &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mi mathvariant="bold-italic"&gt;𝒒&lt;/mi&gt;&lt;annotation encoding="application/x-tex"&gt;\mathbf{q}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; is the initial assembly pose, and &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mi mathvariant="bold-italic"&gt;𝜼&lt;/mi&gt;&lt;annotation encoding="application/x-tex"&gt;\boldsymbol{\eta}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; contains physical settings such as materials, friction, prepress, and insertion path. The operator &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mi mathvariant="script"&gt;𝒮&lt;/mi&gt;&lt;annotation encoding="application/x-tex"&gt;\mathcal{S}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; represents finite element modeling, assembly, and solving. Outputs &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mi mathvariant="bold-italic"&gt;𝒚&lt;/mi&gt;&lt;annotation encoding="application/x-tex"&gt;\mathbf{y}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; include contact-force curves and endpoint metrics.&lt;/p&gt;&#10;&lt;p&gt;This formulation separates &lt;strong&gt;manufacturing tolerances, assembly pose, sampling design, and physical settings&lt;/strong&gt;. A comparison of sampling methods holds pose and physical settings fixed. A pose-boundary search holds the same manufacturing-tolerance vector fixed. Otherwise, changes in the response cannot be attributed clearly.&lt;/p&gt;&#10;&lt;p&gt;The work therefore has two layers. First, deterministic analysis must be efficient enough to support batch execution. Second, the same foundation introduces tolerances and automated failure-boundary search. The focus here is the engineering connection between these layers rather than adding a separate predictive model.&lt;/p&gt;&#10;&lt;h2 id="reduce-the-repeated-work-with-substructures"&gt;Reduce the repeated work with substructures&lt;/h2&gt;&#10;&lt;h3 id="what-core-and-sub-mean"&gt;What CORE and SUB mean&lt;/h3&gt;&#10;&lt;p&gt;The finite element method (FEM) discretizes a continuum into nodes and elements. Here, &lt;strong&gt;CORE&lt;/strong&gt; names the retained nonlinear contact region, and &lt;strong&gt;SUB&lt;/strong&gt; names a region suitable for condensation. These are engineering partition names, not material types or specific solver element names.&lt;/p&gt;&#10;&lt;p&gt;Figure &lt;a href="#fig-sub"&gt;2&lt;/a&gt; illustrates the partition with an abstract mesh. Contact and local deformation remain in CORE, while the more distant structure transfers loads through retained interface nodes. Element count alone cannot determine the partition: contact might enter the reduced region, material nonlinearity may matter there, and the interface must retain the correct motion degrees of freedom.&lt;/p&gt;&#10;&lt;figure data-latex-placement="H" id="fig-sub"&gt;&#10;&lt;a href="https://alexchan114.github.io/articles/connector-simulation/fig02_substructure.png" rel="noopener" target="_blank"&gt;&lt;img alt="Schematic partition and condensation. The full mesh is on the left; the usage-level model retains interface and core detail on the right. Dots represent interface degrees of freedom. Rectangles are not actual connector geometry." decoding="async" loading="lazy" src="https://alexchan114.github.io/articles/connector-simulation/fig02_substructure.png" style="width:100%;height:auto"/&gt;&lt;/a&gt;&#10;&lt;figcaption&gt;Schematic partition and condensation. The full mesh is on the left; the usage-level model retains interface and core detail on the right. Dots represent interface degrees of freedom. Rectangles are not actual connector geometry.&lt;/figcaption&gt;&#10;&lt;/figure&gt;&#10;&lt;h3 id="why-static-condensation-reduces-repeated-work"&gt;Why static condensation reduces repeated work&lt;/h3&gt;&#10;&lt;p&gt;Partition a linear substructure into internal degrees of freedom &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;annotation encoding="application/x-tex"&gt;i&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; and retained degrees of freedom &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;annotation encoding="application/x-tex"&gt;b&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;: &lt;math display="block" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mrow&gt;&lt;mo form="prefix" stretchy="true"&gt;[&lt;/mo&gt;&lt;mtable&gt;&lt;mtr&gt;&lt;mtd columnalign="center" style="text-align: center"&gt;&lt;msub&gt;&lt;mi&gt;K&lt;/mi&gt;&lt;mrow&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;/mtd&gt;&lt;mtd columnalign="center" style="text-align: center"&gt;&lt;msub&gt;&lt;mi&gt;K&lt;/mi&gt;&lt;mrow&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;mtr&gt;&lt;mtd columnalign="center" style="text-align: center"&gt;&lt;msub&gt;&lt;mi&gt;K&lt;/mi&gt;&lt;mrow&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;/mtd&gt;&lt;mtd columnalign="center" style="text-align: center"&gt;&lt;msub&gt;&lt;mi&gt;K&lt;/mi&gt;&lt;mrow&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;/mtable&gt;&lt;mo form="postfix" stretchy="true"&gt;]&lt;/mo&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mo form="prefix" stretchy="true"&gt;[&lt;/mo&gt;&lt;mtable&gt;&lt;mtr&gt;&lt;mtd columnalign="center" style="text-align: center"&gt;&lt;msub&gt;&lt;mi&gt;u&lt;/mi&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;/msub&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;mtr&gt;&lt;mtd columnalign="center" style="text-align: center"&gt;&lt;msub&gt;&lt;mi&gt;u&lt;/mi&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;/msub&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;/mtable&gt;&lt;mo form="postfix" stretchy="true"&gt;]&lt;/mo&gt;&lt;/mrow&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mrow&gt;&lt;mo form="prefix" stretchy="true"&gt;[&lt;/mo&gt;&lt;mtable&gt;&lt;mtr&gt;&lt;mtd columnalign="center" style="text-align: center"&gt;&lt;msub&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;/msub&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;mtr&gt;&lt;mtd columnalign="center" style="text-align: center"&gt;&lt;msub&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;/msub&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;/mtable&gt;&lt;mo form="postfix" stretchy="true"&gt;]&lt;/mo&gt;&lt;/mrow&gt;&lt;mi&gt;.&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;\begin{equation}&#10;\begin{bmatrix}K_{ii}&amp;amp;K_{ib}\\K_{bi}&amp;amp;K_{bb}\end{bmatrix}&#10;\begin{bmatrix}u_i\\u_b\end{bmatrix}&#10;=\begin{bmatrix}f_i\\f_b\end{bmatrix}.&#10;\end{equation}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; Eliminating the internal degrees of freedom gives &lt;math display="block" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mtable&gt;&lt;mtr&gt;&lt;mtd columnalign="right" style="text-align: right; padding-right: 0"&gt;&lt;msub&gt;&lt;mover&gt;&lt;mi&gt;K&lt;/mi&gt;&lt;mo accent="true"&gt;¯&lt;/mo&gt;&lt;/mover&gt;&lt;mrow&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;/mtd&gt;&lt;mtd columnalign="left" style="text-align: left; padding-left: 0"&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;K&lt;/mi&gt;&lt;mrow&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;K&lt;/mi&gt;&lt;mrow&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;msubsup&gt;&lt;mi&gt;K&lt;/mi&gt;&lt;mrow&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;−&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;/msubsup&gt;&lt;msub&gt;&lt;mi&gt;K&lt;/mi&gt;&lt;mrow&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;mtr&gt;&lt;mtd columnalign="right" style="text-align: right; padding-right: 0"&gt;&lt;msub&gt;&lt;mover&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;mo accent="true"&gt;¯&lt;/mo&gt;&lt;/mover&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;/msub&gt;&lt;/mtd&gt;&lt;mtd columnalign="left" style="text-align: left; padding-left: 0"&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;/msub&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;K&lt;/mi&gt;&lt;mrow&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;msubsup&gt;&lt;mi&gt;K&lt;/mi&gt;&lt;mrow&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;−&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;/msubsup&gt;&lt;msub&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;/msub&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;mspace width="2.0em"&gt;&lt;/mspace&gt;&lt;msub&gt;&lt;mover&gt;&lt;mi&gt;K&lt;/mi&gt;&lt;mo accent="true"&gt;¯&lt;/mo&gt;&lt;/mover&gt;&lt;mrow&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;msub&gt;&lt;mi&gt;u&lt;/mi&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msub&gt;&lt;mover&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;mo accent="true"&gt;¯&lt;/mo&gt;&lt;/mover&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;/msub&gt;&lt;mi&gt;.&lt;/mi&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;/mtable&gt;&lt;annotation encoding="application/x-tex"&gt;\begin{align}&#10;\overline K_{bb}&amp;amp;=K_{bb}-K_{bi}K_{ii}^{-1}K_{ib},\\&#10;\overline f_b&amp;amp;=f_b-K_{bi}K_{ii}^{-1}f_i,\qquad&#10;\overline K_{bb}u_b=\overline f_b.&#10;\end{align}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; The inverse is mathematical notation. Implementations normally solve linear systems rather than explicitly constructing the entire inverse. Reduction happens during substructure generation; the usage stage assembles the resulting library with CORE.&lt;/p&gt;&#10;&lt;p&gt;The benefit comes from reuse, not deleting a region of the model. Multiple samples that change only CORE can reuse a verified library when the substructure and its interface definition remain applicable. Changes to substructure geometry, materials, retained degrees of freedom, or generation conditions invalidate that assumption, even when the filename stays the same.&lt;/p&gt;&#10;&lt;h3 id="files-form-a-consistent-set"&gt;Files form a consistent set&lt;/h3&gt;&#10;&lt;p&gt;An input deck, usually &lt;code&gt;.inp&lt;/code&gt;, records the mesh, sets, and keywords. Substructure-related &lt;code&gt;.sim&lt;/code&gt;, &lt;code&gt;.sup&lt;/code&gt;, and output database (ODB, &lt;code&gt;.odb&lt;/code&gt;) files have different purposes. They cannot be replaced independently merely by matching extensions. They must originate from a compatible generation job and agree on interface labels.&lt;/p&gt;&#10;&lt;p&gt;Library provenance is therefore an input: generation files, retained sets, model identity, and validation results are recorded. Batch assembly creates interface sets from labels instead of guessing nearest coordinate points in a large model. Abaqus documentation &lt;a href="#ref-abaqus-sub"&gt;[1]&lt;/a&gt; describes the underlying method; suitability must still be checked for the current model.&lt;/p&gt;&#10;&lt;h2 id="parameterization-starts-with-a-successful-gui-operation"&gt;Parameterization starts with a successful GUI operation&lt;/h2&gt;&#10;&lt;h3 id="record-the-working-operation-then-wrap-it"&gt;Record the working operation, then wrap it&lt;/h3&gt;&#10;&lt;p&gt;A correct graphical user interface (GUI) operation is a reliable starting point for automation. HyperMesh command history records the corresponding Tool Command Language (Tcl) instructions. The process begins by completing the desired operation in the GUI, then extracting the required commands rather than guessing API arguments from panel names.&lt;/p&gt;&#10;&lt;p&gt;History cleanup removes view and selection-panel operations unrelated to the physical result. Explicit entity selection, shape application, and export remain; paths, amplitudes, and output names become parameters. Python manages samples, files, and processes. Tcl executes native HyperMesh operations. Notebooks are interactive entry points, while reusable logic remains in Python modules callable from the command line.&lt;/p&gt;&#10;&lt;p&gt;Application programming interfaces (APIs) can differ between software releases. Installed-runtime behavior and recorded commands provide the working reference. A function appearing in newer documentation does not guarantee that an older installation supports it.&lt;/p&gt;&#10;&lt;h3 id="a-shape-amplitude-is-not-a-length-in-millimeters"&gt;A shape amplitude is not a length in millimeters&lt;/h3&gt;&#10;&lt;p&gt;Mesh morphing parameterizes predefined shape perturbations. For shapes stored as nodal perturbations, a useful representation is &lt;math display="block" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi mathvariant="bold-italic"&gt;𝒙&lt;/mi&gt;&lt;mo form="prefix" stretchy="false"&gt;(&lt;/mo&gt;&lt;mi mathvariant="bold-italic"&gt;𝜶&lt;/mi&gt;&lt;mo form="postfix" stretchy="false"&gt;)&lt;/mo&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msub&gt;&lt;mi mathvariant="bold-italic"&gt;𝒙&lt;/mi&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;munderover&gt;&lt;mo&gt;∑&lt;/mo&gt;&lt;mrow&gt;&lt;mi&gt;j&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;msub&gt;&lt;mi&gt;d&lt;/mi&gt;&lt;mi&gt;g&lt;/mi&gt;&lt;/msub&gt;&lt;/munderover&gt;&lt;msub&gt;&lt;mi&gt;α&lt;/mi&gt;&lt;mi&gt;j&lt;/mi&gt;&lt;/msub&gt;&lt;mspace width="0.167em"&gt;&lt;/mspace&gt;&lt;mi mathvariant="normal"&gt;Δ&lt;/mi&gt;&lt;msub&gt;&lt;mi mathvariant="bold-italic"&gt;𝒙&lt;/mi&gt;&lt;mi&gt;j&lt;/mi&gt;&lt;/msub&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;\begin{equation}&#10;\mathbf{x}(\boldsymbol{\alpha})=\mathbf{x}_0+&#10;\sum_{j=1}^{d_g}\alpha_j\,\Delta\mathbf{x}_j,&#10;\end{equation}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; where &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;msub&gt;&lt;mi&gt;α&lt;/mi&gt;&lt;mi&gt;j&lt;/mi&gt;&lt;/msub&gt;&lt;annotation encoding="application/x-tex"&gt;\alpha_j&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; is dimensionless and &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;Δ&lt;/mi&gt;&lt;msub&gt;&lt;mi mathvariant="bold-italic"&gt;𝒙&lt;/mi&gt;&lt;mi&gt;j&lt;/mi&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;\Delta\mathbf{x}_j&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; is the nodal displacement field stored in the baseline model. If unit amplitude changes a feature dimension by &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;msub&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mi&gt;j&lt;/mi&gt;&lt;/msub&gt;&lt;annotation encoding="application/x-tex"&gt;s_j&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;, its dimensional change is &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;Δ&lt;/mi&gt;&lt;msub&gt;&lt;mi&gt;L&lt;/mi&gt;&lt;mi&gt;j&lt;/mi&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mi&gt;j&lt;/mi&gt;&lt;/msub&gt;&lt;msub&gt;&lt;mi&gt;α&lt;/mi&gt;&lt;mi&gt;j&lt;/mi&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;\Delta L_j=s_j\alpha_j&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;. Direction, units, calibration scale, and shape name must be recorded together.&lt;/p&gt;&#10;&lt;p&gt;What the saved nodal perturbation contains matters more than the number entered in a GUI field. Shapes involving handles, morph volumes, or constraint updates can have additional recomputation semantics. Stable combinations require checking the storage form, individual and combined application, and actual coordinates. The superposition above describes explicitly saved nodal perturbations; it does not assert that all interactive morph operations are linear or commutative.&lt;/p&gt;&#10;&lt;h3 id="one-vector-can-contain-several-tolerance-types"&gt;One vector can contain several tolerance types&lt;/h3&gt;&#10;&lt;p&gt;Parameters can also control component pre-lift or local position. The input vector can be grouped as &lt;math display="block" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi mathvariant="bold-italic"&gt;𝝃&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mo form="prefix" maxsize="120%" minsize="120%" stretchy="true"&gt;[&lt;/mo&gt;&lt;msub&gt;&lt;mi mathvariant="bold-italic"&gt;𝜶&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;s&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;h&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;a&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;p&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;e&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;mspace width="0.278em"&gt;&lt;/mspace&gt;&lt;msub&gt;&lt;mi mathvariant="bold-italic"&gt;𝜶&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;p&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;r&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;e&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;l&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;i&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;f&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;t&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;mspace width="0.278em"&gt;&lt;/mspace&gt;&lt;msub&gt;&lt;mi mathvariant="bold-italic"&gt;𝜶&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;l&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;o&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;c&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;a&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;l&lt;/mi&gt;&lt;mspace width="0.222em"&gt;&lt;/mspace&gt;&lt;mi mathvariant="normal"&gt;o&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;f&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;f&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;s&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;e&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;t&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo form="postfix" maxsize="120%" minsize="120%" stretchy="true"&gt;]&lt;/mo&gt;&lt;mi&gt;.&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;\begin{equation}&#10;\boldsymbol{\xi}=\bigl[\boldsymbol{\alpha}_{\mathrm{shape}},\;&#10;\boldsymbol{\alpha}_{\mathrm{prelift}},\;&#10;\boldsymbol{\alpha}_{\mathrm{local\ offset}}\bigr].&#10;\end{equation}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; Geometry variables map to nodes; pre-lift variables map to separate control points and loading boundaries; local-offset variables map to explicitly identified components. A shared record does not require every group to use morphing. This retains vector-level traceability without turning a simple rigid translation into an unnecessary deformation operation.&lt;/p&gt;&#10;&lt;h2 id="four-sampling-methods-one-bounded-probability-mapping"&gt;Four sampling methods, one bounded probability mapping&lt;/h2&gt;&#10;&lt;h3 id="define-the-distribution-before-choosing-a-design"&gt;Define the distribution before choosing a design&lt;/h3&gt;&#10;&lt;p&gt;An ordinary normal distribution has no finite bounds. If amplitudes must lie in &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mo form="prefix" stretchy="false"&gt;[&lt;/mo&gt;&lt;mi&gt;−&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo form="postfix" stretchy="false"&gt;]&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;[-1,1]&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;, untruncated normal draws cannot be assumed to remain inside that interval. Clipping out-of-range draws to the endpoints is different: it creates point masses at the bounds and changes the distribution.&lt;/p&gt;&#10;&lt;p&gt;The method uses a conditionally truncated normal distribution. With standard-normal CDF &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mi mathvariant="normal"&gt;Φ&lt;/mi&gt;&lt;annotation encoding="application/x-tex"&gt;\Phi&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;, density &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mi&gt;ϕ&lt;/mi&gt;&lt;annotation encoding="application/x-tex"&gt;\phi&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;, and &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;u&lt;/mi&gt;&lt;mo&gt;∈&lt;/mo&gt;&lt;mo form="prefix" stretchy="false"&gt;(&lt;/mo&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo form="postfix" stretchy="false"&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;u\in(0,1)&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;, &lt;math display="block" id="eq-inverse" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;α&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;μ&lt;/mi&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mi&gt;σ&lt;/mi&gt;&lt;msup&gt;&lt;mi mathvariant="normal"&gt;Φ&lt;/mi&gt;&lt;mrow&gt;&lt;mi&gt;−&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;mspace width="-0.167em"&gt;&lt;/mspace&gt;&lt;mrow&gt;&lt;mo form="prefix" stretchy="true"&gt;[&lt;/mo&gt;&lt;mi mathvariant="normal"&gt;Φ&lt;/mi&gt;&lt;mspace width="-0.167em"&gt;&lt;/mspace&gt;&lt;mrow&gt;&lt;mo form="prefix" stretchy="true"&gt;(&lt;/mo&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mi&gt;μ&lt;/mi&gt;&lt;/mrow&gt;&lt;mi&gt;σ&lt;/mi&gt;&lt;/mfrac&gt;&lt;mo form="postfix" stretchy="true"&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mi&gt;u&lt;/mi&gt;&lt;mrow&gt;&lt;mo form="prefix" stretchy="true"&gt;{&lt;/mo&gt;&lt;mi mathvariant="normal"&gt;Φ&lt;/mi&gt;&lt;mspace width="-0.167em"&gt;&lt;/mspace&gt;&lt;mrow&gt;&lt;mo form="prefix" stretchy="true"&gt;(&lt;/mo&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mi&gt;μ&lt;/mi&gt;&lt;/mrow&gt;&lt;mi&gt;σ&lt;/mi&gt;&lt;/mfrac&gt;&lt;mo form="postfix" stretchy="true"&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mi mathvariant="normal"&gt;Φ&lt;/mi&gt;&lt;mspace width="-0.167em"&gt;&lt;/mspace&gt;&lt;mrow&gt;&lt;mo form="prefix" stretchy="true"&gt;(&lt;/mo&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mi&gt;μ&lt;/mi&gt;&lt;/mrow&gt;&lt;mi&gt;σ&lt;/mi&gt;&lt;/mfrac&gt;&lt;mo form="postfix" stretchy="true"&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;mo form="postfix" stretchy="true"&gt;}&lt;/mo&gt;&lt;/mrow&gt;&lt;mo form="postfix" stretchy="true"&gt;]&lt;/mo&gt;&lt;/mrow&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;mspace width="1.0em"&gt;&lt;/mspace&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;−&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;mspace width="0.278em"&gt;&lt;/mspace&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mi&gt;.&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;\begin{equation}&#10;\label{eq:inverse}&#10;\alpha=\mu+\sigma\Phi^{-1}\!\left[&#10;\Phi\!\left(\frac{a-\mu}{\sigma}\right)+u&#10;\left\{\Phi\!\left(\frac{b-\mu}{\sigma}\right)&#10;-\Phi\!\left(\frac{a-\mu}{\sigma}\right)\right\}\right],&#10;\quad a=-1,\;b=1.&#10;\end{equation}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; All four methods first generate points in the unit hypercube, then use the same inverse mapping &lt;a href="#eq-inverse"&gt;(7)&lt;/a&gt; for each variable. This separates finite point placement from the probability distribution assigned to a variable.&lt;/p&gt;&#10;&lt;p&gt;The parameters &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mi&gt;μ&lt;/mi&gt;&lt;annotation encoding="application/x-tex"&gt;\mu&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; and &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mi&gt;σ&lt;/mi&gt;&lt;annotation encoding="application/x-tex"&gt;\sigma&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; describe the &lt;strong&gt;underlying distribution before truncation&lt;/strong&gt;. The resulting sample standard deviation need not equal &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mi&gt;σ&lt;/mi&gt;&lt;annotation encoding="application/x-tex"&gt;\sigma&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;, especially with narrow bounds. Identical marginal mappings also do not establish independence between manufacturing variables. Without correlation evidence, independence is an explicit modeling assumption.&lt;/p&gt;&#10;&lt;h3 id="what-each-sampling-method-provides"&gt;What each sampling method provides&lt;/h3&gt;&#10;&lt;p&gt;&lt;strong&gt;Monte Carlo (MC)&lt;/strong&gt; uses independent pseudorandom points and is a straightforward baseline. Local clusters and gaps are normal in finite samples. A fixed seed reproduces the same design.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Latin hypercube sampling (LHS)&lt;/strong&gt; takes one point from each equal-probability stratum of every marginal distribution, then pairs coordinates across dimensions. This provides marginal stratification; it does not ensure uniform coverage of every high-dimensional combination or reproduce the true manufacturing correlations.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Sobol and Halton sequences&lt;/strong&gt; are low-discrepancy designs used in quasi-Monte Carlo (QMC). Sobol designs are commonly generated in sizes &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;msup&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;/msup&gt;&lt;annotation encoding="application/x-tex"&gt;2^m&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; to retain their design properties. Scrambling avoids relying on a single fixed deterministic pattern. A neat low-dimensional plot alone does not prove greater accuracy for the current high-dimensional nonlinear-contact problem. References &lt;a href="#ref-mckay"&gt;[3]&lt;/a&gt;,&lt;a href="#ref-sobol"&gt;[4]&lt;/a&gt;,&lt;a href="#ref-halton"&gt;[5]&lt;/a&gt;,&lt;a href="#ref-scipy-qmc"&gt;[6]&lt;/a&gt; describe the methods.&lt;/p&gt;&#10;&lt;figure data-latex-placement="H" id="fig-sampling"&gt;&#10;&lt;a href="https://alexchan114.github.io/articles/connector-simulation/fig03_sampling.png" rel="noopener" target="_blank"&gt;&lt;img alt="Independent sampling illustration: n = 256 n=256 per method, seed 20261018. Top panels show unit-square designs before mapping; bottom panels show the first mapped marginal. The orange curve is the density of N ( 0 , 1 ) N(0,1) conditioned on [ − 1 , 1 ] [-1,1] . These are neither original project samples nor a simulation-performance comparison." decoding="async" loading="lazy" src="https://alexchan114.github.io/articles/connector-simulation/fig03_sampling.png" style="width:100%;height:auto"/&gt;&lt;/a&gt;&#10;&lt;figcaption&gt;Independent sampling illustration: &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;256&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;n=256&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; per method, seed 20261018. Top panels show unit-square designs before mapping; bottom panels show the first mapped marginal. The orange curve is the density of &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;N&lt;/mi&gt;&lt;mo form="prefix" stretchy="false"&gt;(&lt;/mo&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo form="postfix" stretchy="false"&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;N(0,1)&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; conditioned on &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mo form="prefix" stretchy="false"&gt;[&lt;/mo&gt;&lt;mi&gt;−&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo form="postfix" stretchy="false"&gt;]&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;[-1,1]&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;. These are neither original project samples nor a simulation-performance comparison.&lt;/figcaption&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;Figure &lt;a href="#fig-sampling"&gt;3&lt;/a&gt; separates finite design coverage from the common inverse-distribution mapping. Comparisons record sample size, seed or scrambling settings, variable order, bounds, physical scale factors, and correlation assumptions. Estimation-error comparisons require appropriate repeated designs and uncertainty analysis; a smoother histogram is not sufficient evidence.&lt;/p&gt;&#10;&lt;h2 id="interfaces-amplify-modeling-mistakes-during-automation"&gt;Interfaces amplify modeling mistakes during automation&lt;/h2&gt;&#10;&lt;h3 id="a-deformation-boundary-cannot-stop-abruptly"&gt;A deformation boundary cannot stop abruptly&lt;/h3&gt;&#10;&lt;p&gt;Moving a local region while the neighboring mesh or constraints remain fixed can concentrate deformation in a thin layer of elements. Obvious overlap may be absent, yet elements can become severely compressed and develop Jacobian or volume problems. A numerically small tolerance cannot replace a mesh-quality check. The relevant quantity is the deformation gradient relative to local mesh size and transition length.&lt;/p&gt;&#10;&lt;p&gt;Fixed interface constraints, transition regions, and post-deformation mesh checks are therefore part of the model definition. A valid baseline does not make all extreme samples valid. Extreme amplitudes and combinations are checked before scaling the batch.&lt;/p&gt;&#10;&lt;h3 id="local-manufacturing-offsets-differ-from-assembly-pose"&gt;Local manufacturing offsets differ from assembly pose&lt;/h3&gt;&#10;&lt;p&gt;Figure &lt;a href="#fig-pose"&gt;4&lt;/a&gt; distinguishes two superficially similar operations. Moving only one terminal’s CORE while its substructure stays fixed is a local manufacturing-deviation choice and creates a nonconforming interface. Moving the entire male side relative to the female side is an initial assembly pose: male CORE and its substructure must move together.&lt;/p&gt;&#10;&lt;figure data-latex-placement="H" id="fig-pose"&gt;&#10;&lt;a href="https://alexchan114.github.io/articles/connector-simulation/fig04_pose.png" rel="noopener" target="_blank"&gt;&lt;img alt="Different physical meanings of local and whole-side motion. Dashed outlines show original positions and solid outlines show modified positions. Offsets and angles are schematic, not to scale. Assembly misalignment must not introduce an artificial internal male-side interface gap." decoding="async" loading="lazy" src="https://alexchan114.github.io/articles/connector-simulation/fig04_pose.png" style="width:100%;height:auto"/&gt;&lt;/a&gt;&#10;&lt;figcaption&gt;Different physical meanings of local and whole-side motion. Dashed outlines show original positions and solid outlines show modified positions. Offsets and angles are schematic, not to scale. Assembly misalignment must not introduce an artificial internal male-side interface gap.&lt;/figcaption&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;A tie constraint can connect a nonconforming interface. Increasing position tolerance changes which nodes or surfaces may enter that constraint; it is &lt;strong&gt;not a justification for repairing arbitrary geometric mismatch&lt;/strong&gt;. Adjustment may undo an intended offset. Disabling adjustment instead requires checking actual tied coverage and its mechanical meaning. Abaqus documentation &lt;a href="#ref-abaqus-tie"&gt;[2]&lt;/a&gt; explains these behaviors.&lt;/p&gt;&#10;&lt;p&gt;At minimum, code checks distances between corresponding labeled nodes, tolerance coverage, and whether the assembly input preserves the intended offset. The solver’s actual constraint establishment must still be verified. A large universal tolerance spanning nearby terminals makes automation more hazardous rather than more robust.&lt;/p&gt;&#10;&lt;h2 id="split-execution-into-recoverable-stages"&gt;Split execution into recoverable stages&lt;/h2&gt;&#10;&lt;h3 id="a-stage-matters-more-than-one-return-code"&gt;A stage matters more than one return code&lt;/h3&gt;&#10;&lt;p&gt;Batch execution requires more than calling a solver in a loop. Each case is divided into recorded stages:&lt;/p&gt;&#10;&lt;div class="center"&gt;&#10;&lt;p&gt;Prepare input &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mo&gt;→&lt;/mo&gt;&lt;annotation encoding="application/x-tex"&gt;\longrightarrow&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; Assemble &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mo&gt;→&lt;/mo&gt;&lt;annotation encoding="application/x-tex"&gt;\longrightarrow&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; Datacheck &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mo&gt;→&lt;/mo&gt;&lt;annotation encoding="application/x-tex"&gt;\longrightarrow&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; Solve &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mo&gt;→&lt;/mo&gt;&lt;annotation encoding="application/x-tex"&gt;\longrightarrow&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; Postprocess.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Passing datacheck does not mean a complete analysis has run. A successful outer process does not prove solver success. Logs, lock-file state, completion markers, and required steps and results in the ODB are checked together.&lt;/p&gt;&#10;&lt;p&gt;Each attempt has its own directory so old output cannot masquerade as a new result. Records identify inputs, selected tolerance row, substructure library, application release, CPU and memory settings, stage times, and failure locations. These records often carry more meaning than an isolated result CSV.&lt;/p&gt;&#10;&lt;h3 id="concurrency-cores-per-job-and-memory-are-separate-controls"&gt;Concurrency, cores per job, and memory are separate controls&lt;/h3&gt;&#10;&lt;p&gt;CPU cores per job differ from the number of concurrent cases. If each solve uses &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;annotation encoding="application/x-tex"&gt;c&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; cores and up to &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;annotation encoding="application/x-tex"&gt;p&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; heavy jobs run together, at least &lt;math display="block" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mspace width="0.167em"&gt;&lt;/mspace&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mo&gt;≤&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;C&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;a&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;v&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;a&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;i&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;l&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;a&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;b&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;l&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;e&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;mspace width="2.0em"&gt;&lt;/mspace&gt;&lt;munder&gt;&lt;mo&gt;∑&lt;/mo&gt;&lt;mrow&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;mo&gt;∈&lt;/mo&gt;&lt;mi mathvariant="script"&gt;𝒜&lt;/mi&gt;&lt;/mrow&gt;&lt;/munder&gt;&lt;msub&gt;&lt;mi&gt;M&lt;/mi&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;/msub&gt;&lt;mo&gt;≤&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;M&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;b&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;u&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;d&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;g&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;e&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;t&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;\begin{equation}&#10;p\,c\le C_{\mathrm{available}},\qquad&#10;\sum_{k\in\mathcal{A}} M_k\le M_{\mathrm{budget}},&#10;\end{equation}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; where &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mi mathvariant="script"&gt;𝒜&lt;/mi&gt;&lt;annotation encoding="application/x-tex"&gt;\mathcal{A}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; is the active-job set and &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;msub&gt;&lt;mi&gt;M&lt;/mi&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;/msub&gt;&lt;annotation encoding="application/x-tex"&gt;M_k&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; is a scheduling memory budget. A solver memory percentage is a configuration cap, not a measured peak or physical memory already reserved by the operating system. Preprocessing, postprocessing, mesh export, and filesystem caches also require headroom.&lt;/p&gt;&#10;&lt;p&gt;Python threads may coordinate external processes, while separate native solver processes perform the finite element work. Creating a large thread pool for every search path multiplies concurrency. A shared queue instead applies separate limits to mesh export, substructure generation, and full solves.&lt;/p&gt;&#10;&lt;h3 id="recovery-is-not-deleting-a-lock-file"&gt;Recovery is not deleting a lock file&lt;/h3&gt;&#10;&lt;p&gt;Interrupting a notebook kernel can leave external solvers running. Recovery must establish whether prior jobs are alive before resubmission. A state file or deletion of &lt;code&gt;.lck&lt;/code&gt; alone is insufficient. Completed cases are reused; failures and unknown states require explicit retry choices.&lt;/p&gt;&#10;&lt;p&gt;Configuration changes need separate treatment. A scheduling-concurrency change can retain the same physical results after a safe stop. Changing friction, insertion endpoint, tolerances, model, or relevant code identity cannot silently mix new outputs into an old batch. Input hashes and frozen configuration make that distinction enforceable instead of relying on operator memory.&lt;/p&gt;&#10;&lt;h2 id="define-contact-performance-before-ranking-it"&gt;Define contact performance before ranking it&lt;/h2&gt;&#10;&lt;p&gt;The metric concerns normal contact performance rather than treating a total reaction as the force in a specific contact pair. For pair &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;annotation encoding="application/x-tex"&gt;i&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;, let &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;msubsup&gt;&lt;mi mathvariant="bold-italic"&gt;𝑭&lt;/mi&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;n&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;o&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;r&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;m&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;a&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;l&lt;/mi&gt;&lt;/mrow&gt;&lt;/msubsup&gt;&lt;annotation encoding="application/x-tex"&gt;\mathbf{F}^{\mathrm{normal}}_i&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; be its total normal-contact-force vector. This implementation takes its global Y component: &lt;math display="block" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;F&lt;/mi&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;/msub&gt;&lt;mo form="prefix" stretchy="false"&gt;(&lt;/mo&gt;&lt;mi&gt;u&lt;/mi&gt;&lt;mo form="postfix" stretchy="false"&gt;)&lt;/mo&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mrow&gt;&lt;mo form="prefix" stretchy="true"&gt;|&lt;/mo&gt;&lt;msubsup&gt;&lt;mi mathvariant="bold-italic"&gt;𝑭&lt;/mi&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;n&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;o&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;r&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;m&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;a&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;l&lt;/mi&gt;&lt;/mrow&gt;&lt;/msubsup&gt;&lt;mo form="prefix" stretchy="false"&gt;(&lt;/mo&gt;&lt;mi&gt;u&lt;/mi&gt;&lt;mo form="postfix" stretchy="false"&gt;)&lt;/mo&gt;&lt;mo&gt;⋅&lt;/mo&gt;&lt;msub&gt;&lt;mi mathvariant="bold-italic"&gt;𝒆&lt;/mi&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;/msub&gt;&lt;mo form="postfix" stretchy="true"&gt;|&lt;/mo&gt;&lt;/mrow&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mo form="prefix" stretchy="false"&gt;|&lt;/mo&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;C&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;F&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;N&lt;/mi&gt;&lt;mn mathvariant="normal"&gt;2&lt;/mn&gt;&lt;/mrow&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;/msub&gt;&lt;mo form="prefix" stretchy="false"&gt;(&lt;/mo&gt;&lt;mi&gt;u&lt;/mi&gt;&lt;mo form="postfix" stretchy="false"&gt;)&lt;/mo&gt;&lt;mo form="prefix" stretchy="false"&gt;|&lt;/mo&gt;&lt;mi&gt;.&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;\begin{equation}&#10;F_i(u)=\left|\mathbf{F}^{\mathrm{normal}}_i(u)\cdot\mathbf{e}_y\right|&#10;=|\mathrm{CFN2}_i(u)|.&#10;\end{equation}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; The output &lt;code&gt;CFN2&lt;/code&gt; is the second coordinate component of the normal-contact-force resultant. It is neither nodal contact pressure nor, in general, the vector’s magnitude. Changes in initial angle require checking that this global component still matches the engineering criterion. A component and a vector norm are not interchangeable.&lt;/p&gt;&#10;&lt;p&gt;At the specified final insertion displacement &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;msub&gt;&lt;mi&gt;u&lt;/mi&gt;&lt;mo&gt;⋆&lt;/mo&gt;&lt;/msub&gt;&lt;annotation encoding="application/x-tex"&gt;u_\star&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;, define &lt;math display="block" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;F&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;min&lt;/mi&gt;&lt;/msub&gt;&lt;mo form="prefix" stretchy="false"&gt;(&lt;/mo&gt;&lt;mi mathvariant="bold-italic"&gt;𝒒&lt;/mi&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;mi mathvariant="bold-italic"&gt;𝝃&lt;/mi&gt;&lt;mo form="postfix" stretchy="false"&gt;)&lt;/mo&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;munder&gt;&lt;mi mathvariant="normal"&gt;min&lt;/mi&gt;&lt;mrow&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo&gt;≤&lt;/mo&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;mo&gt;≤&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;/munder&gt;&lt;msub&gt;&lt;mi&gt;F&lt;/mi&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;/msub&gt;&lt;mo form="prefix" stretchy="false"&gt;(&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;u&lt;/mi&gt;&lt;mo&gt;⋆&lt;/mo&gt;&lt;/msub&gt;&lt;mo form="postfix" stretchy="false"&gt;)&lt;/mo&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;mspace width="2.0em"&gt;&lt;/mspace&gt;&lt;mi&gt;g&lt;/mi&gt;&lt;mo form="prefix" stretchy="false"&gt;(&lt;/mo&gt;&lt;mi mathvariant="bold-italic"&gt;𝒒&lt;/mi&gt;&lt;mo&gt;;&lt;/mo&gt;&lt;mi mathvariant="bold-italic"&gt;𝝃&lt;/mi&gt;&lt;mo form="postfix" stretchy="false"&gt;)&lt;/mo&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;F&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;min&lt;/mi&gt;&lt;/msub&gt;&lt;mo form="prefix" stretchy="false"&gt;(&lt;/mo&gt;&lt;mi mathvariant="bold-italic"&gt;𝒒&lt;/mi&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;mi mathvariant="bold-italic"&gt;𝝃&lt;/mi&gt;&lt;mo form="postfix" stretchy="false"&gt;)&lt;/mo&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;F&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;c&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;r&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;i&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;t&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mi&gt;.&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;\begin{equation}&#10;F_{\min}(\mathbf q,\boldsymbol\xi)=\min_{1\le i\le n_c}F_i(u_\star),\qquad&#10;g(\mathbf q;\boldsymbol\xi)=F_{\min}(\mathbf q,\boldsymbol\xi)-F_{\mathrm{crit}}.&#10;\end{equation}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; Here, &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;msub&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;/msub&gt;&lt;annotation encoding="application/x-tex"&gt;n_c&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; is the number of required contact pairs and &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;msub&gt;&lt;mi&gt;F&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;c&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;r&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;i&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;t&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;annotation encoding="application/x-tex"&gt;F_{\mathrm{crit}}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; is the configured engineering threshold. A negative margin &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;g&lt;/mi&gt;&lt;mo&gt;&amp;lt;&lt;/mo&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;g&amp;lt;0&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; means at least one pair is below threshold. A nonnegative margin &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;g&lt;/mi&gt;&lt;mo&gt;≥&lt;/mo&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;g\ge0&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; means every required pair reaches the threshold at the verified endpoint. Actual project thresholds, insertion endpoints, and dimensional calibration values are not disclosed.&lt;/p&gt;&#10;&lt;p&gt;Each case is ranked by its own minimum before minima are compared across cases. The weakest pair can change with tolerance or pose; a search cannot fix one pair in advance and ignore the rest. CSV outputs retain curves for all channels, endpoint values, and the weakest-pair identity so changes in rank can be inspected.&lt;/p&gt;&#10;&lt;p&gt;The endpoint must actually have been reached. The final step, step time, insertion displacement, and required channel count are checked. A low force from an interrupted solve cannot enter ordinary physical-failure ranking. Missing channels are not filled with zeros.&lt;/p&gt;&#10;&lt;h2 id="search-an-operating-boundary-not-only-a-worst-sample"&gt;Search an operating boundary, not only a worst sample&lt;/h2&gt;&#10;&lt;h3 id="change-the-initial-pose-before-insertion"&gt;Change the initial pose before insertion&lt;/h3&gt;&#10;&lt;p&gt;An initially tilted insertion differs from applying a rotation after full insertion: their contact paths are different. For a fixed manufacturing-tolerance vector &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mi mathvariant="bold-italic"&gt;𝝃&lt;/mi&gt;&lt;annotation encoding="application/x-tex"&gt;\boldsymbol\xi&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;, the coordinate convention is &lt;math display="block" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi mathvariant="bold-italic"&gt;𝒙&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;p&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;o&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;s&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;e&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi mathvariant="bold-italic"&gt;𝒄&lt;/mi&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mi&gt;R&lt;/mi&gt;&lt;mo form="prefix" stretchy="false"&gt;(&lt;/mo&gt;&lt;mi&gt;θ&lt;/mi&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;mi mathvariant="bold-italic"&gt;𝒂&lt;/mi&gt;&lt;mo form="postfix" stretchy="false"&gt;)&lt;/mo&gt;&lt;mo form="prefix" maxsize="120%" minsize="120%" stretchy="true"&gt;(&lt;/mo&gt;&lt;msub&gt;&lt;mi mathvariant="bold-italic"&gt;𝒙&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;t&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;o&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;l&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;e&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;r&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;a&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;n&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;c&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;e&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mi mathvariant="bold-italic"&gt;𝒄&lt;/mi&gt;&lt;mo form="postfix" maxsize="120%" minsize="120%" stretchy="true"&gt;)&lt;/mo&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mi&gt;d&lt;/mi&gt;&lt;mspace width="0.167em"&gt;&lt;/mspace&gt;&lt;mi mathvariant="bold-italic"&gt;𝒗&lt;/mi&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;\begin{equation}&#10;\mathbf{x}_{\mathrm{posed}}=&#10;\mathbf{c}+R(\theta,\mathbf a)&#10;\bigl(\mathbf{x}_{\mathrm{tolerance}}-\mathbf{c}\bigr)&#10;+d\,\mathbf v,&#10;\end{equation}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; where &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mi mathvariant="bold-italic"&gt;𝒄&lt;/mi&gt;&lt;annotation encoding="application/x-tex"&gt;\mathbf c&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; is the rotation center, &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mi mathvariant="bold-italic"&gt;𝒂&lt;/mi&gt;&lt;annotation encoding="application/x-tex"&gt;\mathbf a&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; the unit rotation axis, &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mi&gt;θ&lt;/mi&gt;&lt;annotation encoding="application/x-tex"&gt;\theta&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; the initial angle, &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mi mathvariant="bold-italic"&gt;𝒗&lt;/mi&gt;&lt;annotation encoding="application/x-tex"&gt;\mathbf v&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; a global unit translation direction, and &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mi&gt;d&lt;/mi&gt;&lt;annotation encoding="application/x-tex"&gt;d&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; a signed offset. The prescribed insertion follows. Rotation and translation order is part of the model because they generally do not commute.&lt;/p&gt;&#10;&lt;p&gt;Existing local manufacturing offsets rotate with the entire male side. Its substructure and CORE move together, while the female stays fixed. Reference points, coupling control points, and interface nodes must be included in coordinate checks, not just the visible solid mesh.&lt;/p&gt;&#10;&lt;h3 id="offset-only-search-coarse-scan-then-refine-crossings"&gt;Offset-only search: coarse scan, then refine crossings&lt;/h3&gt;&#10;&lt;p&gt;After a verified zero-pose baseline, positive and negative offsets are scanned in parallel within the configured range. Completed points are ordered by offset magnitude. Adjacent points whose &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mi&gt;g&lt;/mi&gt;&lt;annotation encoding="application/x-tex"&gt;g&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; values have opposite signs bracket a sampled crossing. Refinement can divide a bracket into &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;annotation encoding="application/x-tex"&gt;k&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; parts and submit up to &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;k-1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; interior points together instead of evaluating only one bisection midpoint at a time.&lt;/p&gt;&#10;&lt;p&gt;The method does not assume that force decreases monotonically with offset. If a coarse scan passes, fails, and passes again, it retains multiple crossings and refines their intervals. The primary result is the first sampled failure boundary encountered from the origin, with all observed crossings retained.&lt;/p&gt;&#10;&lt;p&gt;Search stops when a discovered crossing bracket meets the offset resolution or a range limit, computation budget, or unresolved error is reached. The result is a pair of verified pass/fail points, not an interpolated exact limit. If failure is not found within the configured range, that absence is reported; the search bound is not relabeled as the actual mechanical limit.&lt;/p&gt;&#10;&lt;h3 id="coupled-offset-and-angle-one-queue-across-slices"&gt;Coupled offset and angle: one queue across slices&lt;/h3&gt;&#10;&lt;p&gt;In a two-dimensional slice &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mo form="prefix" stretchy="false"&gt;(&lt;/mo&gt;&lt;mi&gt;d&lt;/mi&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;mi&gt;θ&lt;/mi&gt;&lt;mo form="postfix" stretchy="false"&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;(d,\theta)&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;, selected initial angles each receive positive- and negative-offset searches. Slices share one queue, so other paths can progress while one awaits a solve. Intermediate angles are added when angular gaps are large or boundary location, weakest-pair identity, or slice status changes substantially.&lt;/p&gt;&#10;&lt;p&gt;Figure &lt;a href="#fig-search"&gt;5&lt;/a&gt; illustrates this &lt;strong&gt;batched adaptive bracketing&lt;/strong&gt; process. It is not reinforcement learning. A threshold-proximity curve such as &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;−&lt;/mi&gt;&lt;mo form="prefix" stretchy="false"&gt;|&lt;/mo&gt;&lt;mi&gt;g&lt;/mi&gt;&lt;mo form="prefix" stretchy="false"&gt;|&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;-|g|&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; can help visualize progress, but that auxiliary score does not replace the mechanical criterion or imply a learned policy or value function.&lt;/p&gt;&#10;&lt;figure data-latex-placement="H" id="fig-search"&gt;&#10;&lt;a href="https://alexchan114.github.io/articles/connector-simulation/fig05_search.png" rel="noopener" target="_blank"&gt;&lt;img alt="Parallel boundary-search decisions. Completed samples update crossing brackets, and rules refine angular slices. Unknown points are not represented as safe. No actual contact-force or critical-angle results are shown." decoding="async" loading="lazy" src="https://alexchan114.github.io/articles/connector-simulation/fig05_search.png" style="width:100%;height:auto"/&gt;&lt;/a&gt;&#10;&lt;figcaption&gt;Parallel boundary-search decisions. Completed samples update crossing brackets, and rules refine angular slices. Unknown points are not represented as safe. No actual contact-force or critical-angle results are shown.&lt;/figcaption&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;At a fixed angle, translating the entire assembly side leaves the substructure’s internal stiffness relationship unchanged. A verified library for that angle may therefore be reused with instance translation at the usage level &lt;a href="#ref-abaqus-sub"&gt;[1]&lt;/a&gt;. The current implementation generates a male-side library once per distinct angle and shares a read-only cache across offsets. Cache provenance and artifact completeness must be checked; files left by a failed generation job do not make a usable library.&lt;/p&gt;&#10;&lt;h3 id="state-what-a-boundary-map-does-not-cover"&gt;State what a boundary map does not cover&lt;/h3&gt;&#10;&lt;p&gt;A slice of X translation and rotation about Y is not the full pose boundary with every translation and rotation varying simultaneously. The worst boundary for one fixed tolerance vector is not a reliability boundary for the random manufacturing population. Probability claims require a separate sampling design, coverage definition, and statistical uncertainty analysis over manufacturing variables and pose.&lt;/p&gt;&#10;&lt;p&gt;A finite coarse grid can miss a failure island narrower than its spacing. Two adjacent passing points do not prove that every intermediate point passes. Plots therefore retain pass/fail bracket bands, coarse-scan scale, refinement rules, and unknown regions rather than coloring everything beyond a smooth line as guaranteed safe. This is the conclusion supported by the algorithm’s actual coverage.&lt;/p&gt;&#10;&lt;h2 id="acceptance-checks-for-the-complete-system"&gt;Acceptance checks for the complete system&lt;/h2&gt;&#10;&lt;div aria-label="Data table; scroll horizontally if needed" class="table-scroll" role="region" tabindex="0"&gt;&lt;table&gt;&#10;&lt;caption&gt;Layered acceptance checks for batch simulation and boundary search.&lt;/caption&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th style="text-align: left;"&gt;Layer&lt;/th&gt;&#10;&lt;th style="text-align: left;"&gt;Questions to resolve&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td style="text-align: left;"&gt;Geometry and interfaces&lt;/td&gt;&#10;&lt;td style="text-align: left;"&gt;Is the baseline unchanged? Are coordinates, fixed regions, control points, and interfaces correct?&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td style="text-align: left;"&gt;Physics and numerics&lt;/td&gt;&#10;&lt;td style="text-align: left;"&gt;Are materials, contact, prepress, and insertion consistent? Do distortion or unintended ties affect results?&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td style="text-align: left;"&gt;Execution and recovery&lt;/td&gt;&#10;&lt;td style="text-align: left;"&gt;Did datacheck pass and solving complete? Could a retry duplicate a still-running job?&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td style="text-align: left;"&gt;Postprocessing&lt;/td&gt;&#10;&lt;td style="text-align: left;"&gt;Are pair identities and global components correct? Did final time and displacement reach their endpoints?&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td style="text-align: left;"&gt;Search and interpretation&lt;/td&gt;&#10;&lt;td style="text-align: left;"&gt;Do completed points support the brackets? Are unknowns, budget, resolution, and coverage recorded?&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&lt;/div&gt;&#10;&lt;p&gt;Development checks can use known functions to test sampling, out-of-order parallel completion, bracket convergence, and recovery. Small artificial meshes test transformations and interfaces; real exported meshes test moved and fixed nodes. &lt;strong&gt;These checks establish software behavior, not a connector’s physical limit.&lt;/strong&gt; Deployment still needs complete small-scale baseline, offset-only, and coupled offset–angle solves before expanding the search.&lt;/p&gt;&#10;&lt;p&gt;The implemented code connects sample generation through batch postprocessing and provides a parallel pose-search entry point with caching, budgets, and recovery state. The new whole-side-offset and coupled paths still require real-solver acceptance in a matching environment. No unverified critical angles, failure probabilities, or speedup factors are reported.&lt;/p&gt;&#10;&lt;h2 class="unnumbered" id="build-interpretability-into-automation"&gt;Build interpretability into automation&lt;/h2&gt;&#10;&lt;p&gt;What makes simulation scalable is a sequence of explicit agreements: how regions and retained degrees of freedom are selected, how amplitude becomes dimensional change, which inputs remain fixed during comparison, what counts as completed solving, and which parameter subspace a boundary curve represents.&lt;/p&gt;&#10;&lt;p&gt;Substructures reduce repeated work. Recorded Tcl turns known GUI actions into parameterized operations. Bounded sampling makes probability assumptions reproducible. A shared queue and persistent state make batches manageable. Consistent contact metrics connect the samples to an interpretable boundary question. &lt;strong&gt;Every curve should lead back to its inputs, and every failure should have an explicit category.&lt;/strong&gt; A smooth-looking plot alone is insufficient.&lt;/p&gt;&#10;&lt;h2 class="unnumbered" id="reproducibility-and-public-materials"&gt;Reproducibility and public materials&lt;/h2&gt;&#10;&lt;p&gt;Independent Python/Matplotlib scripts generate the figures, which are checked and exported through Tavotto and inserted as vector PDFs into the XeLaTeX text. Published sources contain only anonymized method descriptions and demonstration sampling; they do not read actual engineering files. The public website repository records the published source history.&lt;/p&gt;&#10;&lt;h2 id="references"&gt;References&lt;/h2&gt;&lt;ol&gt;&#10;&lt;li id="ref-abaqus-sub"&gt;&lt;p&gt;Dassault Systèmes. &lt;em&gt;Using Substructures&lt;/em&gt;. Abaqus documentation. &lt;a class="uri" href="https://docs.software.vt.edu/abaqusv2025/English/SIMACAEANLRefMap/simaanl-c-superelements.htm"&gt;https://docs.software.vt.edu/abaqusv2025/English/SIMACAEANLRefMap/simaanl-c-superelements.htm&lt;/a&gt;. Method reference; APIs must be checked against the installed runtime separately.&lt;/p&gt;&lt;/li&gt;&#10;&lt;li id="ref-abaqus-tie"&gt;&lt;p&gt;Dassault Systèmes. &lt;em&gt;Mesh Tie Constraints&lt;/em&gt;. Abaqus documentation. &lt;a class="uri" href="https://docs.software.vt.edu/abaqusv2025/English/SIMACAECSTRefMap/simacst-c-tiedconstraint.htm"&gt;https://docs.software.vt.edu/abaqusv2025/English/SIMACAECSTRefMap/simacst-c-tiedconstraint.htm&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#10;&lt;li id="ref-mckay"&gt;&lt;p&gt;McKay, M. D., Beckman, R. J., Conover, W. J. (1979). A Comparison of Three Methods for Selecting Values of Input Variables in the Analysis of Output from a Computer Code. &lt;em&gt;Technometrics&lt;/em&gt;, 21(2), 239–245. &lt;a class="uri" href="https://doi.org/10.1080/00401706.1979.10489755"&gt;https://doi.org/10.1080/00401706.1979.10489755&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#10;&lt;li id="ref-sobol"&gt;&lt;p&gt;Sobol’, I. M. (1967). On the distribution of points in a cube and the approximate evaluation of integrals. &lt;em&gt;USSR Computational Mathematics and Mathematical Physics&lt;/em&gt;, 7(4), 86–112. &lt;a class="uri" href="https://doi.org/10.1016/0041-5553(67)90144-9"&gt;https://doi.org/10.1016/0041-5553(67)90144-9&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#10;&lt;li id="ref-halton"&gt;&lt;p&gt;Halton, J. H. (1960). On the efficiency of certain quasi-random sequences of points in evaluating multi-dimensional integrals. &lt;em&gt;Numerische Mathematik&lt;/em&gt;, 2, 84–90. &lt;a class="uri" href="https://doi.org/10.1007/BF01386213"&gt;https://doi.org/10.1007/BF01386213&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#10;&lt;li id="ref-scipy-qmc"&gt;&lt;p&gt;SciPy. &lt;em&gt;Quasi-Monte Carlo submodule: scipy.stats.qmc&lt;/em&gt;. &lt;a class="uri" href="https://docs.scipy.org/doc/scipy/reference/stats.qmc.html"&gt;https://docs.scipy.org/doc/scipy/reference/stats.qmc.html&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#10;&lt;li id="ref-tavotto"&gt;&lt;p&gt;Tavotto. &lt;em&gt;Technology: script, editable figure, replay and export&lt;/em&gt;. &lt;a class="uri" href="https://www.tavotto.com/technology/"&gt;https://www.tavotto.com/technology/&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p class="article-downloads"&gt;&lt;a href="https://alexchan114.github.io/articles/connector-simulation/connector-simulation.en.pdf"&gt;English PDF&lt;/a&gt; · &lt;a href="https://alexchan114.github.io/articles/connector-simulation/connector-simulation.pdf"&gt;Chinese PDF&lt;/a&gt; · &lt;a href="https://alexchan114.github.io/articles/connector-simulation/connector-simulation-sources-bilingual.zip"&gt;Bilingual LaTeX and figure sources&lt;/a&gt;&lt;/p&gt;&lt;/article&gt;</description></item><item><title>An Agent-Driven CAE Toolchain: HyperMesh, Abaqus, and ParaView</title><link>https://alexchan114.github.io/en/post/2026/10/18/cae-mcp/</link><pubDate>Sun, 18 Oct 2026 00:00:00 +0800</pubDate><guid>https://alexchan114.github.io/en/post/2026/10/18/cae-mcp/</guid><description>&lt;article class="cae-article"&gt;&#10;&lt;p class="article-downloads"&gt;&lt;a href="https://alexchan114.github.io/assets/cae-mcp/cae-mcp.en.pdf"&gt;English PDF&lt;/a&gt; · &lt;a href="https://alexchan114.github.io/assets/cae-mcp/cae-mcp-sources-bilingual.zip"&gt;LaTeX / Tavotto sources and data&lt;/a&gt; · &lt;a href="https://alexchan114.github.io/assets/cae-mcp/engineering-query.en.txt"&gt;Portable task query&lt;/a&gt; · &lt;a href="https://alexchan114.github.io/assets/cae-mcp/task_metrics.csv"&gt;Task metrics CSV&lt;/a&gt;&lt;/p&gt;&lt;blockquote&gt;&#10;&lt;p&gt;Can an agent take a terminal model and two loading steps, inspect the model, allocate computing resources, complete a solve, and return verifiable curves and contour plots? This project connects HyperMesh, Abaqus, and ParaView through three MCP services. All three independent sessions completed a real terminal contact case. The session with MCP tools and engineering procedures took 21.82 minutes and produced 108 frames, with a peak actuator force of approximately 1.434141 N.&lt;/p&gt;&#10;&lt;/blockquote&gt;&lt;nav class="article-toc" aria-label="Article contents"&gt;&lt;details&gt;&lt;summary&gt;Contents (12 sections)&lt;/summary&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="#start-with-a-loading-request"&gt;Start with a loading request&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="#three-mcp-services-and-54-tools"&gt;Three MCP services and 54 tools&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="#long-tasks-need-persistent-state-and-real-files"&gt;Long tasks need persistent state and real files&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="#an-independent-c-odb-converter"&gt;An independent C++ ODB converter&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="#choosing-computing-resources-automatically"&gt;Choosing computing resources automatically&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="#read-failure-evidence-before-generating-a-repair"&gt;Read failure evidence before generating a repair&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="#material-and-section-records-and-the-role-of-a-skill"&gt;Material and section records, and the role of a Skill&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="#the-terminal-case-preprocessing-through-postprocessing"&gt;The terminal case: preprocessing through postprocessing&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="#three-independent-sessions-all-completed-with-different-paths"&gt;Three independent sessions: all completed, with different paths&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="#engineering-facts-that-remain-after-completion"&gt;Engineering facts that remain after completion&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="#inputs-query-and-inspectable-evidence"&gt;Inputs, query, and inspectable evidence&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="#native-interface-references"&gt;Native interface references&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/details&gt;&lt;/nav&gt;&#10;&lt;h2 id="start-with-a-loading-request"&gt;Start with a loading request&lt;/h2&gt;&#10;&lt;p&gt;CAE automation often begins with a script: import a model, define sets, submit a job, and extract results. Agents make script generation easier, but many engineering difficulties lie between these operations. Which region does “the right end” identify? Does an application process exiting mean the solve succeeded? Can an extrapolated nodal stress be compared directly with integration-point stress? What changed after a failure, and which output should the next operation read?&lt;/p&gt;&#10;&lt;p&gt;This project makes those questions part of the tool interface. The agent interprets the goal and selects actions. Tools validate inputs, execute native applications, retain logs, and return actual artifacts. The focus is execution reliability and traceability. The engineering measurements described here were collected on October 12, 2026.&lt;/p&gt;&#10;&lt;p&gt;The terminal task retains the existing materials, sections, and mesh. The male roots and shield root are fixed. The plate first moves &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;0.3348&lt;/mn&gt;&lt;mspace width="0.167em"&gt;&lt;/mspace&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;m&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;m&lt;/mi&gt;&lt;/mrow&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;0.3348\,\mathrm{mm}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; along global &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;+&lt;/mi&gt;&lt;mi&gt;Y&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;+Y&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;, then moves with the female terminal by &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;10&lt;/mn&gt;&lt;mspace width="0.167em"&gt;&lt;/mspace&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;m&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;m&lt;/mi&gt;&lt;/mrow&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;10\,\mathrm{mm}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; along global &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;−&lt;/mi&gt;&lt;mi&gt;Z&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;-Z&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;. The friction coefficient is 0.13. Regions, directions, and sets were confirmed before execution. For new ambiguous descriptions such as “left” or “down,” the agent presents candidate regions and a coordinate interpretation before changing the loading conditions.&lt;/p&gt;&#10;&lt;h2 id="three-mcp-services-and-54-tools"&gt;Three MCP services and 54 tools&lt;/h2&gt;&#10;&lt;p&gt;MCP is the protocol through which an agent calls tools. The project separates the native applications into three services with a shared execution layer: HyperMesh for geometry and mesh, Abaqus for models, solving, and ODB access, and ParaView for result inspection and visualization.&lt;/p&gt;&#10;&lt;figure data-latex-placement="H"&gt;&#10;&lt;a href="https://alexchan114.github.io/assets/cae-mcp/architecture.png" target="_blank" rel="noopener" aria-label="Open full-size figure: Agent, application MCP services, and the shared dispatcher"&gt;&lt;img src="https://alexchan114.github.io/assets/cae-mcp/architecture.png" width="1980" height="1144" loading="lazy" decoding="async" alt="Agent, application MCP services, and the shared dispatcher"&gt;&lt;/a&gt;&#10;&lt;figcaption&gt;Application-specific tool boundaries with shared task state, input snapshots, and artifact records. The editable figure scripts were executed, composed, and exported through Tavotto.&lt;/figcaption&gt;&#10;&lt;/figure&gt;&#10;&lt;div class="table-scroll" role="region" tabindex="0" aria-label="Data table; scroll horizontally if needed"&gt;&lt;table&gt;&#10;&lt;caption&gt;Implemented service capabilities&lt;/caption&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th style="text-align: left;"&gt;Service&lt;/th&gt;&#10;&lt;th style="text-align: right;"&gt;Tools&lt;/th&gt;&#10;&lt;th style="text-align: left;"&gt;Capabilities&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td style="text-align: left;"&gt;HyperMesh&lt;/td&gt;&#10;&lt;td style="text-align: right;"&gt;13&lt;/td&gt;&#10;&lt;td style="text-align: left;"&gt;STEP import, HM inspection, partitioning, tetrahedral mesh, INP export, Tcl.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td style="text-align: left;"&gt;Abaqus&lt;/td&gt;&#10;&lt;td style="text-align: right;"&gt;29&lt;/td&gt;&#10;&lt;td style="text-align: left;"&gt;Materials, regions, loading, resources, solve, diagnosis, repair, ODB conversion.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td style="text-align: left;"&gt;ParaView&lt;/td&gt;&#10;&lt;td style="text-align: right;"&gt;12&lt;/td&gt;&#10;&lt;td style="text-align: left;"&gt;Array/frame inspection, rendering, slices, line sampling, images, Python.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&lt;/div&gt;&#10;&lt;p&gt;Each service includes six common management tools: capabilities, job status, job listing, artifacts, logs, and cancellation. The total of 54 includes these application-specific management interfaces; it does not represent 54 separate analysis algorithms. The full catalog is included in the article source archive.&lt;/p&gt;&#10;&lt;p&gt;Scripts execute in the appropriate application runtime: Tcl in HyperMesh 2017, Python or the C++ SDK in Abaqus 2025, and &lt;code&gt;pvpython&lt;/code&gt; in ParaView 6.1. The general Python service handles protocol, scheduling, and input checks instead of mixing proprietary binary APIs and interpreters.&lt;/p&gt;&#10;&lt;p&gt;Three services retain the distinct input contracts, runtimes, and failure modes of preprocessing, solving, and postprocessing. Resource management belongs to the Abaqus service so different services do not independently reserve the same solver budget. The ODB2VTK executable also works directly without MCP.&lt;/p&gt;&#10;&lt;h2 id="long-tasks-need-persistent-state-and-real-files"&gt;Long tasks need persistent state and real files&lt;/h2&gt;&#10;&lt;p&gt;A tool accepts a long operation and returns a &lt;code&gt;job_id&lt;/code&gt;. An independent background dispatcher manages execution while the client polls persistent state. Only &lt;code&gt;succeeded&lt;/code&gt; permits passing the returned artifact paths downstream. Neither &lt;code&gt;queued&lt;/code&gt; nor &lt;code&gt;running&lt;/code&gt; means completion.&lt;/p&gt;&#10;&lt;p&gt;Each job retains its request, settings snapshot, native script, logs, state, and result index. INP dependencies are copied recursively through INCLUDE files and recorded with SHA256 hashes. Resource plans bind to the same input closure. If inputs change while a job waits, the old plan cannot silently authorize the new files. Sources remain read-only, and repairs produce new inputs.&lt;/p&gt;&#10;&lt;p&gt;A complete Abaqus success check requires the native completion marker, both steps reaching their prescribed endpoints, and a nonempty, closed, newly generated ODB. An existing ODB or one converged increment is insufficient. ParaView then checks actual arrays, frame counts, and ranges rather than returning an image as the only evidence.&lt;/p&gt;&#10;&lt;p&gt;An independent dispatcher also addresses process lifetime on Windows, where closing a client can terminate descendant processes. Accepted solves should survive an individual tool connection. This is local execution management, not a replacement for an operating system or cluster scheduler.&lt;/p&gt;&#10;&lt;h2 id="an-independent-c-odb-converter"&gt;An independent C++ ODB converter&lt;/h2&gt;&#10;&lt;p&gt;ODB2VTK uses the official Abaqus C++ ODB API and its &lt;a href="https://docs.software.vt.edu/abaqusv2025/English/SIMACAECMDRefMap/simacmd-c-odbintrobulkdatacpp.htm"&gt;&lt;code&gt;bulkDataBlocks()&lt;/code&gt;&lt;/a&gt; interface for contiguous field reads. It avoids accessing each FieldValue object separately. Mesh data, label mappings, and section assignments are built once and reused across frames. Binary VTU files store results, and a PVD file indexes the selected frames.&lt;/p&gt;&#10;&lt;p&gt;The CLI offers &lt;code&gt;inspect&lt;/code&gt;, &lt;code&gt;menu&lt;/code&gt;, and &lt;code&gt;convert&lt;/code&gt;. When options are omitted, it detects the last step containing frames, its final frame, all nonempty instances, and available &lt;code&gt;U&lt;/code&gt; and &lt;code&gt;S:MISES&lt;/code&gt;. Explicit options select multiple steps, frame lists or ranges, section points, output position, deformation scale, and real or imaginary complex components.&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;.\native\odb2vtk\odb2vtk.cmd inspect --odb &amp;quot;input.odb&amp;quot;&#10;.\native\odb2vtk\odb2vtk.cmd menu --odb &amp;quot;input.odb&amp;quot;&#10;.\native\odb2vtk\odb2vtk.cmd convert --odb &amp;quot;input.odb&amp;quot; --step all --frames all --fields &amp;quot;U,S:MISES&amp;quot; --avg 75 --regions section --output &amp;quot;exports\terminal&amp;quot;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;Exports include per-frame VTU files, &lt;code&gt;collection.pvd&lt;/code&gt;, and &lt;code&gt;manifest.json&lt;/code&gt;. ODB access is read-only. Missing values remain NaN, unsupported elements fail by default, and older ODBs are not silently upgraded. The Windows launcher sets the Abaqus DLL search path for its process; another machine still requires compatible native runtime libraries.&lt;/p&gt;&#10;&lt;h3 id="avg-75-depends-on-regions-and-operation-order"&gt;Avg 75 depends on regions and operation order&lt;/h3&gt;&#10;&lt;p&gt;Following the &lt;a href="https://docs.software.vt.edu/abaqusv2025/English/SIMACAECAERefMap/simacae-c-resconceptaverage.htm"&gt;Abaqus/CAE default region definition&lt;/a&gt;, averaging regions follow actual &lt;strong&gt;section assignments&lt;/strong&gt;. Matching material or section names do not merge two assignments. Elements without an assignment are isolated and reported rather than assigned an invented common region.&lt;/p&gt;&#10;&lt;p&gt;For a scalar such as Mises stress, the converter extrapolates the tensor to element nodes, computes the scalar, and then applies the region and threshold test. Relative variation at a node is &lt;math display="block" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;v&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;100&lt;/mn&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;max&lt;/mi&gt;&lt;/msub&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;min&lt;/mi&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;S&lt;/mi&gt;&lt;mrow&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;max&lt;/mi&gt;&lt;mo&gt;&amp;#8289;&lt;/mo&gt;&lt;/mrow&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;mi&gt;R&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;S&lt;/mi&gt;&lt;mrow&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;min&lt;/mi&gt;&lt;mo&gt;&amp;#8289;&lt;/mo&gt;&lt;/mrow&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;mi&gt;R&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;/mfrac&gt;&lt;mi&gt;.&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;v=100\frac{s_{\max}-s_{\min}}{S_{\max,R}-S_{\min,R}}.&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; The numerator uses contributions at that node; the denominator uses the range of all valid extrapolated contributions in the current averaging region. For a nondegenerate region, &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;v&lt;/mi&gt;&lt;mo&gt;&amp;lt;&lt;/mo&gt;&lt;mn&gt;75&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;v&amp;lt;75&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; permits an equal-weight average. Equality with the threshold retains discontinuities. If the regional range is zero and contributions are identical, a positive threshold permits averaging. A threshold of 0 or off disables it.&lt;/p&gt;&#10;&lt;figure data-latex-placement="H"&gt;&#10;&lt;a href="https://alexchan114.github.io/assets/cae-mcp/averaging.png" target="_blank" rel="noopener" aria-label="Open full-size figure: Extrapolate tensors, compute scalars, then apply section-assignment Avg75"&gt;&lt;img src="https://alexchan114.github.io/assets/cae-mcp/averaging.png" width="1980" height="759" loading="lazy" decoding="async" alt="Extrapolate tensors, compute scalars, then apply section-assignment Avg75"&gt;&lt;/a&gt;&#10;&lt;figcaption&gt;Compute the scalar before testing the threshold. Assignment boundaries and rejected averages retain separate coincident points, while NodeLabel preserves the original ODB node identity.&lt;/figcaption&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;Arrays expose &lt;code&gt;S_MISES_Avg&lt;/code&gt;, variation percentage, whether averaging was actually applied, and &lt;code&gt;SectionAssignmentId&lt;/code&gt;. No subsequent Clean/Merge Points or Cell Data to Point Data operation is inserted: either could erase the discontinuities deliberately preserved by the export.&lt;/p&gt;&#10;&lt;p&gt;This implements scalar-before-average within section assignments. It does not reproduce additional shell/membrane feature-edge boundaries or tensor-after-average modes. Stored integration-point and extrapolated nodal values must also remain distinct: the final-frame maximum integration-point Mises is approximately 644.00 MPa, while the Avg 75 extrapolated nodal display reaches approximately 1355.07 MPa. These are different output locations.&lt;/p&gt;&#10;&lt;h2 id="choosing-computing-resources-automatically"&gt;Choosing computing resources automatically&lt;/h2&gt;&#10;&lt;p&gt;The resource tool scans INP files, INCLUDE dependencies, and assembly instances for node counts, element types, procedures, contact, and NLGEOM. Repeated instances contribute their actual assembly multiplicity. For this solid mesh, &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;msub&gt;&lt;mi&gt;N&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;n&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;o&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;d&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;e&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;3N_{\mathrm{node}}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; is a sizing proxy for degrees of freedom. A factor of 1.5 accounts for the presence of contact, producing a weighted size &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mi&gt;D&lt;/mi&gt;&lt;annotation encoding="application/x-tex"&gt;D&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;. This is not the solver’s equation count after constraint elimination.&lt;/p&gt;&#10;&lt;p&gt;The initial CPU tier is &lt;math display="block" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/msub&gt;&lt;mo stretchy="false" form="prefix"&gt;(&lt;/mo&gt;&lt;mi&gt;D&lt;/mi&gt;&lt;mo stretchy="false" form="postfix"&gt;)&lt;/mo&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mrow&gt;&lt;mo stretchy="true" form="prefix"&gt;{&lt;/mo&gt;&lt;mtable&gt;&lt;mtr&gt;&lt;mtd columnalign="left" style="text-align: left"&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;/mtd&gt;&lt;mtd columnalign="left" style="text-align: left"&gt;&lt;mi&gt;D&lt;/mi&gt;&lt;mo&gt;&amp;lt;&lt;/mo&gt;&lt;mn&gt;50&lt;/mn&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;mn&gt;000&lt;/mn&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;mtr&gt;&lt;mtd columnalign="left" style="text-align: left"&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;/mtd&gt;&lt;mtd columnalign="left" style="text-align: left"&gt;&lt;mn&gt;50&lt;/mn&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;mn&gt;000&lt;/mn&gt;&lt;mo&gt;≤&lt;/mo&gt;&lt;mi&gt;D&lt;/mi&gt;&lt;mo&gt;&amp;lt;&lt;/mo&gt;&lt;mn&gt;200&lt;/mn&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;mn&gt;000&lt;/mn&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;mtr&gt;&lt;mtd columnalign="left" style="text-align: left"&gt;&lt;mn&gt;4&lt;/mn&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;/mtd&gt;&lt;mtd columnalign="left" style="text-align: left"&gt;&lt;mn&gt;200&lt;/mn&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;mn&gt;000&lt;/mn&gt;&lt;mo&gt;≤&lt;/mo&gt;&lt;mi&gt;D&lt;/mi&gt;&lt;mo&gt;&amp;lt;&lt;/mo&gt;&lt;mn&gt;750&lt;/mn&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;mn&gt;000&lt;/mn&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;mtr&gt;&lt;mtd columnalign="left" style="text-align: left"&gt;&lt;mn&gt;8&lt;/mn&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;/mtd&gt;&lt;mtd columnalign="left" style="text-align: left"&gt;&lt;mi&gt;D&lt;/mi&gt;&lt;mo&gt;≥&lt;/mo&gt;&lt;mn&gt;750&lt;/mn&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;mn&gt;000&lt;/mn&gt;&lt;mi&gt;.&lt;/mi&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;/mtable&gt;&lt;/mrow&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;c_0(D)=\begin{cases}&#10;1,&amp;amp;D&amp;lt;50{,}000,\\&#10;2,&amp;amp;50{,}000\le D&amp;lt;200{,}000,\\&#10;4,&amp;amp;200{,}000\le D&amp;lt;750{,}000,\\&#10;8,&amp;amp;D\ge750{,}000.&#10;\end{cases}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; Physical cores, project budgets, user limits, and any configured license allowance further constrain the result. Memory caps start at 15%, 30%, or 50%, then respect available memory and shared budgets. &lt;code&gt;abaqus_plan_resources&lt;/code&gt; creates the plan; &lt;code&gt;abaqus_submit_job&lt;/code&gt; consumes it and revalidates the inputs at startup.&lt;/p&gt;&#10;&lt;figure data-latex-placement="H"&gt;&#10;&lt;a href="https://alexchan114.github.io/assets/cae-mcp/resources.png" target="_blank" rel="noopener" aria-label="Open full-size figure: Weighted-DOF resource tiers and budget reservation"&gt;&lt;img src="https://alexchan114.github.io/assets/cae-mcp/resources.png" width="1980" height="748" loading="lazy" decoding="async" alt="Weighted-DOF resource tiers and budget reservation"&gt;&lt;/a&gt;&#10;&lt;figcaption&gt;The left panel evaluates a sizing rule, not measured parallel speedup. The right panel shows input binding, budget reservation, and native execution.&lt;/figcaption&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;This case uses 2 CPUs and a 15% memory cap. All comparison groups received the same caps and pure-thread configuration so resource differences would not be confused with tool differences. Shared reservations constrain the aggregate CPU and memory budgets of solves started by these tools. Jobs wait when the budget is unavailable and release reservations after completion.&lt;/p&gt;&#10;&lt;p&gt;These are transparent initial sizing rules, not calibrated optimal configurations from repeated multi-scale CPU sweeps. Under the &lt;a href="https://docs.software.vt.edu/abaqusv2025/English/SIMACAEEXCRefMap/simaexc-c-analysisproc.htm"&gt;Abaqus execution parameter definitions&lt;/a&gt;, Standard memory is an allocation cap; the same interpretation does not cap the actual Explicit analysis phase. The service does not control externally launched solves or claim that a configured license limit is a live license-pool query.&lt;/p&gt;&#10;&lt;h2 id="read-failure-evidence-before-generating-a-repair"&gt;Read failure evidence before generating a repair&lt;/h2&gt;&#10;&lt;p&gt;&lt;code&gt;abaqus_diagnose_job&lt;/code&gt; reads actual &lt;code&gt;.dat&lt;/code&gt;, &lt;code&gt;.msg&lt;/code&gt;, &lt;code&gt;.sta&lt;/code&gt;, and log files. It returns bounded original context, file hashes, classifications, and eligible repairs. Unknown failures remain unknown rather than receiving a guessed universal fix.&lt;/p&gt;&#10;&lt;p&gt;The automatic scope of &lt;code&gt;abaqus_repair_job&lt;/code&gt; is deliberately narrow. Evidence-supported changes can reduce the initial static increment or raise the maximum increment count. A new INP, diff, and change record are retained before replanning and datacheck. Total loading, materials, friction, fixed regions, and total step duration are preserved. Physical-condition changes require explicit confirmation.&lt;/p&gt;&#10;&lt;p&gt;The product session’s first datacheck actually found an empty node-based surface definition. Using native diagnostics, the agent established that the surface was unused, commented out that definition and removed a blank line through an advanced script, retained the diff, and then passed datacheck and solved. This demonstrates diagnostic tools working with native scripting; it does not mean the restricted numerical repair tool handles every syntax failure.&lt;/p&gt;&#10;&lt;h2 id="material-and-section-records-and-the-role-of-a-skill"&gt;Material and section records, and the role of a Skill&lt;/h2&gt;&#10;&lt;p&gt;Existing definitions may come from INP, CAE, or HyperMesh models. Library tools stage a preview before committing imports and retain original keywords, declared units, provenance, and revisions. Updates require &lt;code&gt;expected_revision&lt;/code&gt;; sections reference a specific material revision. Export binds definitions to an explicit ELSET, and units are never silently converted.&lt;/p&gt;&#10;&lt;p&gt;The tetrahedral loading template supports homogeneous solid sections within its stated scope. Composite sections, unknown keywords, and unresolved orientation definitions are rejected or reported. The terminal model keeps its original materials and sections, with no invented demonstration elasticity.&lt;/p&gt;&#10;&lt;p&gt;A Skill supplies orchestration procedures: check units and sets, confirm ambiguous spatial descriptions, wait for long tasks to succeed, consume real artifacts, preserve averaging boundaries, interpret native warnings, and retain failed attempts. Deterministic validation stays in MCP tools. The product group enabled both MCP and engineering procedures; the comparison does not isolate the Skill’s contribution.&lt;/p&gt;&#10;&lt;h2 id="the-terminal-case-preprocessing-through-postprocessing"&gt;The terminal case: preprocessing through postprocessing&lt;/h2&gt;&#10;&lt;p&gt;Inputs are an already-meshed single-pair terminal INP and an HM companion extracted from a larger assembly. The model contains one female terminal, two male blades, a shield, and a prepress plate. The INP is authoritative for labels, materials, sections, and eight contact pairs. HM supports native model inspection; its node labels do not replace INP labels.&lt;/p&gt;&#10;&lt;p&gt;The model has 11,240 C3D10M elements. Each male-root set contains 21 nodes, and the shield-root set contains 159, for 201 fixed root nodes. A 72-node region controls the female through an RP. The plate node surface has 1061 nodes and couples to a separate RP.&lt;/p&gt;&#10;&lt;div class="table-scroll" role="region" tabindex="0" aria-label="Data table; scroll horizontally if needed"&gt;&lt;table&gt;&#10;&lt;caption&gt;Confirmed conditions, in mm–N–MPa and global coordinates&lt;/caption&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th style="text-align: left;"&gt;Setting&lt;/th&gt;&#10;&lt;th style="text-align: left;"&gt;Definition&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td style="text-align: left;"&gt;Prepress&lt;/td&gt;&#10;&lt;td style="text-align: left;"&gt;Plate &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;U&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;+&lt;/mi&gt;&lt;mn&gt;0.3348&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;U_2=+0.3348&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; mm, &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;U&lt;/mi&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;U_3=0&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;; female remains stationary.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td style="text-align: left;"&gt;Insertion&lt;/td&gt;&#10;&lt;td style="text-align: left;"&gt;Retain plate &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;msub&gt;&lt;mi&gt;U&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;annotation encoding="application/x-tex"&gt;U_2&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;; plate and female simultaneously reach &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;U&lt;/mi&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;−&lt;/mi&gt;&lt;mn&gt;10&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;U_3=-10&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; mm.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td style="text-align: left;"&gt;Contact&lt;/td&gt;&#10;&lt;td style="text-align: left;"&gt;Friction 0.13, hard contact, finite sliding, NLGEOM=YES.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td style="text-align: left;"&gt;Static controls&lt;/td&gt;&#10;&lt;td style="text-align: left;"&gt;Initial increment 0.01, duration 1, minimum &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;msup&gt;&lt;mn&gt;10&lt;/mn&gt;&lt;mrow&gt;&lt;mi&gt;−&lt;/mi&gt;&lt;mn&gt;8&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;annotation encoding="application/x-tex"&gt;10^{-8}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;, maximum 0.05, 10000 increments.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td style="text-align: left;"&gt;Other constraints&lt;/td&gt;&#10;&lt;td style="text-align: left;"&gt;Fix RP rotations and non-driven translations; fix male/shield root translations.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&lt;/div&gt;&#10;&lt;p&gt;The execution sequence is native HM inspection, INP mesh and region checks, preparation of two new loading steps, a resource plan, datacheck, evidence-based error handling, and a complete solve. The agent then reads control-point histories, energies, and original integration-point results from the new ODB, converts all steps and frames, and checks and renders the data in ParaView.&lt;/p&gt;&#10;&lt;figure data-latex-placement="H"&gt;&#10;&lt;a href="https://alexchan114.github.io/assets/cae-mcp/terminal_states.png" target="_blank" rel="noopener" aria-label="Open full-size figure: Actual ParaView contours at prepress and insertion endpoints"&gt;&lt;img src="https://alexchan114.github.io/assets/cae-mcp/terminal_states.png" width="1980" height="2552" loading="lazy" decoding="async" alt="Actual ParaView contours at prepress and insertion endpoints"&gt;&lt;/a&gt;&#10;&lt;figcaption&gt;Two endpoints from the product group’s new solve, rendered in native ParaView and composed in Tavotto. Deformation scale is 1. Each panel retains its actual color scale. Presentation camera work is excluded from task timing.&lt;/figcaption&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;This case retains the existing mesh. Preprocessing covers model and region checks, coupling, and loading preparation. STEP import, partitioning, and tetrahedral meshing are implemented tools, but this experiment does not start with automatic CAD remeshing and reconstruction of every contact definition. The two steps cover prepress and insertion, with no added withdrawal step.&lt;/p&gt;&#10;&lt;h3 id="define-results-numerically"&gt;Define results numerically&lt;/h3&gt;&#10;&lt;p&gt;Insertion force combines the two moving RPs’ global reactions and projects them onto the insertion direction: &lt;math display="block" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;F&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;i&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;n&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;s&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;−&lt;/mi&gt;&lt;mo stretchy="false" form="prefix"&gt;(&lt;/mo&gt;&lt;mi&gt;R&lt;/mi&gt;&lt;msub&gt;&lt;mi&gt;F&lt;/mi&gt;&lt;mrow&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;f&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;e&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;m&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;a&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;l&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;e&lt;/mi&gt;&lt;/mrow&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mi&gt;R&lt;/mi&gt;&lt;msub&gt;&lt;mi&gt;F&lt;/mi&gt;&lt;mrow&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;mo&gt;,&lt;/mo&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;p&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;l&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;a&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;t&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;e&lt;/mi&gt;&lt;/mrow&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo stretchy="false" form="postfix"&gt;)&lt;/mo&gt;&lt;mi&gt;.&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;F_{\mathrm{ins}}=-(RF_{3,\mathrm{female}}+RF_{3,\mathrm{plate}}).&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; This avoids adding internal forces from both sides of contact. The new product ODB contains 25 Prepress frames and 83 Insertion frames, totaling 108. Both steps reach their endpoints, and stored control displacements match the specified values.&lt;/p&gt;&#10;&lt;div class="table-scroll" role="region" tabindex="0" aria-label="Data table; scroll horizontally if needed"&gt;&lt;table&gt;&#10;&lt;caption&gt;Independently read results from the product group’s new ODB&lt;/caption&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th style="text-align: left;"&gt;Metric&lt;/th&gt;&#10;&lt;th style="text-align: right;"&gt;Value&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td style="text-align: left;"&gt;Final prepress plate &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;msub&gt;&lt;mi&gt;U&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;annotation encoding="application/x-tex"&gt;U_2&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; (mm)&lt;/td&gt;&#10;&lt;td style="text-align: right;"&gt;0.334800005&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td style="text-align: left;"&gt;Final insertion female / plate &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;msub&gt;&lt;mi&gt;U&lt;/mi&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;/msub&gt;&lt;annotation encoding="application/x-tex"&gt;U_3&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; (mm)&lt;/td&gt;&#10;&lt;td style="text-align: right;"&gt;&lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;−&lt;/mi&gt;&lt;mn&gt;10&lt;/mn&gt;&lt;mi&gt;/&lt;/mi&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;10&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;-10 / -10&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td style="text-align: left;"&gt;Peak actuator force (N)&lt;/td&gt;&#10;&lt;td style="text-align: right;"&gt;1.434141&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td style="text-align: left;"&gt;Final actuator force (N)&lt;/td&gt;&#10;&lt;td style="text-align: right;"&gt;0.974671&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td style="text-align: left;"&gt;Final maximum integration-point Mises (MPa)&lt;/td&gt;&#10;&lt;td style="text-align: right;"&gt;644.000061&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td style="text-align: left;"&gt;Final maximum PEEQ&lt;/td&gt;&#10;&lt;td style="text-align: right;"&gt;0.009152083&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td style="text-align: left;"&gt;Maximum absolute final stored RF component sum (N)&lt;/td&gt;&#10;&lt;td style="text-align: right;"&gt;&lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;1.95&lt;/mn&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;msup&gt;&lt;mn&gt;10&lt;/mn&gt;&lt;mrow&gt;&lt;mi&gt;−&lt;/mi&gt;&lt;mn&gt;6&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;1.95\times10^{-6}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&lt;/div&gt;&#10;&lt;figure data-latex-placement="H"&gt;&#10;&lt;a href="https://alexchan114.github.io/assets/cae-mcp/force_energy.png" target="_blank" rel="noopener" aria-label="Open full-size figure: Independently extracted product-session actuator and energy histories"&gt;&lt;img src="https://alexchan114.github.io/assets/cae-mcp/force_energy.png" width="1980" height="836" loading="lazy" decoding="async" alt="Independently extracted product-session actuator and energy histories"&gt;&lt;/a&gt;&#10;&lt;figcaption&gt;Independently extracted actuator and energy histories from the product group’s new ODB, retaining stored samples. Static step time is a load-path parameter, not a specified physical insertion speed.&lt;/figcaption&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;Selected final energies are approximately ALLWK 3.4821 Nmm, ALLSE 1.5564 Nmm, ALLPD 0.2456 Nmm, and ALLFD 1.6753 Nmm. The visible remainder after subtracting the latter three from external work is approximately 0.138% of ALLWK. This checks only these stored quantities, not every solver energy term.&lt;/p&gt;&#10;&lt;p&gt;PVD uses sequential indices 0–107 because step-boundary time values can repeat. Original step names, frame values, and physical total time remain in the manifest and data. Sequence index 107 is not 107 seconds. If exported coordinates already include displacement, ParaView does not apply a second Warp.&lt;/p&gt;&#10;&lt;h2 id="three-independent-sessions-all-completed-with-different-paths"&gt;Three independent sessions: all completed, with different paths&lt;/h2&gt;&#10;&lt;p&gt;All groups received the same inputs, engineering request, and resource caps. Each had to produce a new ODB and could read vendor documentation, write scripts, and use the same standalone C++ converter. Groups could not share scripts, historical solutions, or results. Solves ran serially, without an imposed overall time limit.&lt;/p&gt;&#10;&lt;div class="table-scroll" role="region" tabindex="0" aria-label="Data table; scroll horizontally if needed"&gt;&lt;table&gt;&#10;&lt;caption&gt;Comparison conditions. A and B share a model and reasoning setting; C changes both model and client host.&lt;/caption&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th style="text-align: left;"&gt;Group&lt;/th&gt;&#10;&lt;th style="text-align: left;"&gt;Tools&lt;/th&gt;&#10;&lt;th style="text-align: left;"&gt;Distinguishing conditions&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td style="text-align: left;"&gt;A&lt;/td&gt;&#10;&lt;td style="text-align: left;"&gt;Three CAE MCPs and procedures&lt;/td&gt;&#10;&lt;td style="text-align: left;"&gt;Requires actual MCP calls and a new solve.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td style="text-align: left;"&gt;B&lt;/td&gt;&#10;&lt;td style="text-align: left;"&gt;Native file and terminal tools&lt;/td&gt;&#10;&lt;td style="text-align: left;"&gt;Writes native scripts; no CAE MCP; used generic planning procedures.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td style="text-align: left;"&gt;C&lt;/td&gt;&#10;&lt;td style="text-align: left;"&gt;Native file and terminal tools&lt;/td&gt;&#10;&lt;td style="text-align: left;"&gt;Different model and host; not a single-factor comparison.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&lt;/div&gt;&#10;&lt;p&gt;An independent evaluator reopens every new ODB to read displacements, reactions, energies, and integration-point results, and checks native success markers, mesh data, VTK files, and images. The 100-point artifact checklist assigns 5 for input preservation, 10 for model-definition preservation, 25 for a complete new solve, 15 for control displacements, 10 for reaction/energy checks, 10 for native preprocessing, 10 for 108 frames and regional averaging, 5 for images and curves, and 10 for resource records and datacheck. It is neither a general success rate nor a design-validation score.&lt;/p&gt;&#10;&lt;div class="table-scroll" role="region" tabindex="0" aria-label="Data table; scroll horizontally if needed"&gt;&lt;table&gt;&#10;&lt;caption&gt;Engineering-task measurements, one session per group&lt;/caption&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th style="text-align: left;"&gt;Group&lt;/th&gt;&#10;&lt;th style="text-align: right;"&gt;Checklist&lt;/th&gt;&#10;&lt;th style="text-align: right;"&gt;Minutes&lt;/th&gt;&#10;&lt;th style="text-align: right;"&gt;Tool calls&lt;/th&gt;&#10;&lt;th style="text-align: right;"&gt;MCP calls&lt;/th&gt;&#10;&lt;th style="text-align: right;"&gt;Peak (N)&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td style="text-align: left;"&gt;A&lt;/td&gt;&#10;&lt;td style="text-align: right;"&gt;100/100&lt;/td&gt;&#10;&lt;td style="text-align: right;"&gt;21.82&lt;/td&gt;&#10;&lt;td style="text-align: right;"&gt;109&lt;/td&gt;&#10;&lt;td style="text-align: right;"&gt;47&lt;/td&gt;&#10;&lt;td style="text-align: right;"&gt;1.434141&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td style="text-align: left;"&gt;B&lt;/td&gt;&#10;&lt;td style="text-align: right;"&gt;100/100&lt;/td&gt;&#10;&lt;td style="text-align: right;"&gt;27.24&lt;/td&gt;&#10;&lt;td style="text-align: right;"&gt;81&lt;/td&gt;&#10;&lt;td style="text-align: right;"&gt;0&lt;/td&gt;&#10;&lt;td style="text-align: right;"&gt;1.434141&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td style="text-align: left;"&gt;C&lt;/td&gt;&#10;&lt;td style="text-align: right;"&gt;100/100&lt;/td&gt;&#10;&lt;td style="text-align: right;"&gt;56.13&lt;/td&gt;&#10;&lt;td style="text-align: right;"&gt;243&lt;/td&gt;&#10;&lt;td style="text-align: right;"&gt;0&lt;/td&gt;&#10;&lt;td style="text-align: right;"&gt;1.434150&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&lt;/div&gt;&#10;&lt;p&gt;A’s client wall time was approximately 19.9% lower than B’s in this experiment. Final native analyses took 647, 700, and 637 seconds. Remaining task times were approximately 662, 935, and 2731 seconds, including preparation, checking, diagnosis, postprocessing, network operations, and waiting. They are not isolated model-inference times. Much of the observed difference lies in engineering coordination rather than solver acceleration.&lt;/p&gt;&#10;&lt;figure data-latex-placement="H"&gt;&#10;&lt;a href="https://alexchan114.github.io/assets/cae-mcp/task_effort.png" target="_blank" rel="noopener" aria-label="Open full-size figure: Three task sessions: elapsed time, tokens, and tool calls"&gt;&lt;img src="https://alexchan114.github.io/assets/cae-mcp/task_effort.png" width="1980" height="1540" loading="lazy" decoding="async" alt="Three task sessions: elapsed time, tokens, and tool calls"&gt;&lt;/a&gt;&#10;&lt;figcaption&gt;Engineering-task sessions only: elapsed time, ordinary input/output tokens, cached input reads, and tool calls. A uses MCP and engineering procedures; B and C use native tools. All complete the task.&lt;/figcaption&gt;&#10;&lt;/figure&gt;&#10;&lt;div class="table-scroll" role="region" tabindex="0" aria-label="Data table; scroll horizontally if needed"&gt;&lt;table&gt;&#10;&lt;caption&gt;Client-reported cumulative tokens, with ordinary and cached input separated&lt;/caption&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th style="text-align: left;"&gt;Group&lt;/th&gt;&#10;&lt;th style="text-align: right;"&gt;Ordinary input&lt;/th&gt;&#10;&lt;th style="text-align: right;"&gt;Cache reads&lt;/th&gt;&#10;&lt;th style="text-align: right;"&gt;Output&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td style="text-align: left;"&gt;A&lt;/td&gt;&#10;&lt;td style="text-align: right;"&gt;119970&lt;/td&gt;&#10;&lt;td style="text-align: right;"&gt;5048320&lt;/td&gt;&#10;&lt;td style="text-align: right;"&gt;22840&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td style="text-align: left;"&gt;B&lt;/td&gt;&#10;&lt;td style="text-align: right;"&gt;121289&lt;/td&gt;&#10;&lt;td style="text-align: right;"&gt;3867776&lt;/td&gt;&#10;&lt;td style="text-align: right;"&gt;35711&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td style="text-align: left;"&gt;C&lt;/td&gt;&#10;&lt;td style="text-align: right;"&gt;132141&lt;/td&gt;&#10;&lt;td style="text-align: right;"&gt;47289728&lt;/td&gt;&#10;&lt;td style="text-align: right;"&gt;242125&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&lt;/div&gt;&#10;&lt;p&gt;Repeated context across turns contributes to these totals; they are not unique query lengths. An input counter can include or exclude cache reads depending on the client, so categories are separated. Reasoning tokens already counted within output are not added again. Cross-provider tokenizers and routing counters were not independently calibrated, and these figures do not establish equivalent compute or actual billing.&lt;/p&gt;&#10;&lt;p&gt;The measurement window spans submission of each engineering request through task completion and client exit, using only that task client’s final usage report. Article writing, LaTeX compilation, Tavotto figures, experiment setup, independent evaluation, presentation camera work, and publication are excluded.&lt;/p&gt;&#10;&lt;h3 id="failure-traces-explain-more-than-one-total-score"&gt;Failure traces explain more than one total score&lt;/h3&gt;&#10;&lt;p&gt;A completed with structured inspection and one evidence-supported input repair. B organized native scripts and delivered the same required artifacts. C repeatedly built diagnostic inputs around contact and coupling keyword layout, then completed after CAE import and export normalized the keywords.&lt;/p&gt;&#10;&lt;p&gt;The groups retained 1, 1, and 15 distinct datacheck data files containing errors. These counts represent diagnostic files, not 15 failed full solves. The request limited evidence-supported failed modifications to two; native groups performed more diagnostic attempts. This process deviation remains documented and is not included in the 100-point artifact checklist.&lt;/p&gt;&#10;&lt;figure data-latex-placement="H"&gt;&#10;&lt;a href="https://alexchan114.github.io/assets/cae-mcp/consistency.png" target="_blank" rel="noopener" aria-label="Open full-size figure: Insertion-force curves and differences from a numerical reference"&gt;&lt;img src="https://alexchan114.github.io/assets/cae-mcp/consistency.png" width="1980" height="814" loading="lazy" decoding="async" alt="Insertion-force curves and differences from a numerical reference"&gt;&lt;/a&gt;&#10;&lt;figcaption&gt;Independently extracted insertion-force curves and differences from a numerical reference. Their close agreement supports consistency for this model and loading; the reference is not experimental ground truth.&lt;/figcaption&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;C’s peak differs from the numerical reference by approximately 0.000623%, and its normalized curve RMSE is approximately 0.000656%. All groups can complete the professional task, making execution path, context growth, and recovery behavior useful comparison targets. One case, one session per group, and simultaneous use of MCP and a Skill cannot establish a general capability ranking or isolate their causal contributions.&lt;/p&gt;&#10;&lt;h2 id="engineering-facts-that-remain-after-completion"&gt;Engineering facts that remain after completion&lt;/h2&gt;&#10;&lt;p&gt;The product group’s native records contain 6 dat warnings and 73 msg warnings, including 23 negative-eigenvalue warnings. They identify 618 distorted elements. C’s normalized-input inspection reports 620 distorted elements in its own context; this cannot be presented as a mesh-quality improvement.&lt;/p&gt;&#10;&lt;p&gt;Negative eigenvalues in nonlinear contact may accompany tangent-stiffness changes, but convergence alone cannot rule out instability or constraint problems. Distortion, material definitions, contact regions, and mesh sensitivity still affect physical credibility. This case establishes tool execution, result extraction, and traceable delivery for a specified model and confirmed conditions. It does not establish experimental correlation, lifetime performance, a complete insertion–withdrawal hysteresis loop, or industry-company endorsement.&lt;/p&gt;&#10;&lt;h2 id="inputs-query-and-inspectable-evidence"&gt;Inputs, query, and inspectable evidence&lt;/h2&gt;&#10;&lt;p&gt;The measured INP is 3,460,015 bytes and the HM companion is 2,313,685 bytes. Their SHA256 fingerprints are included in provenance data. Published attachments contain measured statistics, curves, a portable query, LaTeX, and editable Tavotto sources; engineering models and large solver databases are not released.&lt;/p&gt;&#10;&lt;p&gt;The following summarizes the portable editorial adaptation of the original task. Local absolute paths and experiment-directory isolation wording are removed, with engineering conditions preserved. The full portable query and original query fingerprint are provided with the attachments.&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;Inspect terminal_pair.hm and terminal_pair.inp. Retain existing mesh, materials, sections, and eight contact pairs. Fix the confirmed male and shield root sets and couple the female and plate control regions to RPs. Prepress: plate moves 0.3348 mm along global &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;+&lt;/mi&gt;&lt;mi&gt;Y&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;+Y&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;. Insertion: retain prepress while plate and female move 10 mm along global &lt;math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;−&lt;/mi&gt;&lt;mi&gt;Z&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding="application/x-tex"&gt;-Z&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;. Use friction 0.13, hard contact, finite sliding, NLGEOM, and exactly two steps. Record a resource choice capped at 2 CPUs and 15% memory, run datacheck, then submit a new solve. Read stored RP displacements and reactions, energies, and original integration-point stresses. Convert all steps and 108 frames using section-assignment Avg 75. Inspect the data in ParaView and return endpoint contours, state files, and the actuator curve. Retain native errors and input diffs without changing physics to force convergence.&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;h2 id="native-interface-references"&gt;Native interface references&lt;/h2&gt;&#10;&lt;p&gt;Vendor documentation describes bulk ODB access, averaging regions, and job-execution parameters. The implementation scope is stated beside each capability.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;p&gt;&lt;a href="https://docs.software.vt.edu/abaqusv2025/English/SIMACAECMDRefMap/simacmd-c-odbintrobulkdatacpp.htm"&gt;Abaqus: C++ bulk data access&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;p&gt;&lt;a href="https://docs.software.vt.edu/abaqusv2025/English/SIMACAECAERefMap/simacae-c-resconceptaverage.htm"&gt;Abaqus/CAE: averaging and result regions&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;p&gt;&lt;a href="https://docs.software.vt.edu/abaqusv2025/English/SIMACAEEXCRefMap/simaexc-c-analysisproc.htm"&gt;Abaqus: analysis execution parameters&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;p&gt;&lt;a href="https://modelcontextprotocol.io/"&gt;Model Context Protocol&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p class="article-downloads"&gt;&lt;a href="https://alexchan114.github.io/assets/cae-mcp/cae-mcp.en.pdf"&gt;English PDF&lt;/a&gt; · &lt;a href="https://alexchan114.github.io/assets/cae-mcp/cae-mcp-sources-bilingual.zip"&gt;LaTeX / Tavotto sources and data&lt;/a&gt; · &lt;a href="https://alexchan114.github.io/assets/cae-mcp/engineering-query.en.txt"&gt;Portable task query&lt;/a&gt; · &lt;a href="https://alexchan114.github.io/assets/cae-mcp/task_metrics.csv"&gt;Task metrics CSV&lt;/a&gt;&lt;/p&gt;&lt;/article&gt;</description></item><item><title>Hello World</title><link>https://alexchan114.github.io/en/post/2026/07/14/hello-world/</link><pubDate>Tue, 14 Jul 2026 00:00:00 +0000</pubDate><guid>https://alexchan114.github.io/en/post/2026/07/14/hello-world/</guid><description>&lt;p&gt;This is the first placeholder post on the site.&lt;/p&gt;&#10;&lt;p&gt;The blog now uses the original Hugo XMin theme. Future posts can be added as Markdown files without changing the layout.&lt;/p&gt;&#10;&lt;pre&gt;&lt;code class="language-text"&gt;Keep it simple.&#10;Write things down.&#10;Improve them later.&#10;&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>A Short Note</title><link>https://alexchan114.github.io/en/note/2026/07/13/a-short-note/</link><pubDate>Mon, 13 Jul 2026 00:00:00 +0000</pubDate><guid>https://alexchan114.github.io/en/note/2026/07/13/a-short-note/</guid><description>&lt;p&gt;A short note can hold an idea before it becomes a longer article.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;one question;&lt;/li&gt;&#10;&lt;li&gt;one useful reference;&lt;/li&gt;&#10;&lt;li&gt;one result to verify later.&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>About</title><link>https://alexchan114.github.io/en/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alexchan114.github.io/en/about/</guid><description>&lt;p&gt;Hi, I am AlexanderChan. I write about programming, machine learning, engineering simulation, and the experiments behind these projects.&lt;/p&gt;&#10;&lt;p&gt;You can find my public work on &lt;a href="https://github.com/Alexchan114"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;</description></item></channel></rss>