Sign in

What’s new in Axomek 0.2.6

In short

Axomek 0.2.6 is about the whole project: seeing the machine in one piece, finding and comparing your designs, and handing them on as a finished report.

  • Assembly in 3D. The whole project in one view: every shaft where its gears and belts put it, the gears in mesh and the bearings in their seats, coloured by their checks. Click a part to open it. The new Two-stage helical gearbox example opens there.
  • Overview. One page for the project: checks passed and failed, the checks closest to their limits with what helps, what changed since the last save, the power flow and a parts list.
  • Projects. All your projects on one screen, on this computer and in the cloud: search by what is in them (parts, materials), preview them in 3D, and compare two of them: the inputs that differ, the checks that flipped, the results that moved. Cloud projects keep their earlier saves, and a deleted project waits in the trash for 30 days.
  • Starting a project. A New project dialog (Ctrl+N) starts from a blank project, an example or one of your own templates. An example now always starts a new project of its own. Ctrl+P switches between recent projects, and in the desktop app a project can open in a window of its own.
  • Reports. Choose and order the sections and modules, add document control (report number, revisions, sign-off), and show what changed since an earlier revision. Every page has a header and "Page X of Y". Export to Word as well as PDF, save your own report templates, and the desktop app’s PDF carries the project file inside it. The report opens with Ctrl+Shift+P.
  • The command line. axm check solves many projects at once and fails a build when a check fails; axm diff shows what differs between two designs. axm history and axm undo take a change back, axm watch solves again on every save, and axm summary and axm parts sum a project up. Agents get the same as MCP tools.
  • Calculations. The unbalance response finds its peaks exactly instead of on a grid of speeds, and an FKM duty cycle finds the place of most damage when its load cases differ. The technical notes below say which results move, and by how much.
  • Feedback. Now and then the app asks one short question where you are working; you can always skip it, or choose Don’t ask again.

Changes in detail

Results that change when a saved project is solved again:

  • A hollow shaft's strength check (DIN 743 and FKM) takes the bore as entered, as the beam model does: it used to take at most 0.95 of the outer diameter (of a groove's root), so a thin wall was assessed as a thicker one. A Ø40/39 mm tube under 180 N·m of reversed bending (Rm 600 MPa) had 154.4 MPa and DIN 743 fatigue safety 1.725 (FKM degree of utilisation 0.833), both passing; it now has 297.4 MPa, safety 0.896 and utilisation 1.604, both failing, and the design search no longer finds such a bore feasible. FKM's plastic section factors take the entered bore ratio too (they stopped at 0.99), and a notch root radius or depth below 0.01 mm is no longer raised to it. A groove whose root reaches the bore, or a cross bore that leaves no net section (bending modulus π(d⁴ − di⁴)/(32d) − r(d³ − di³)/(3d) at or below zero, so r below 3π(d⁴ − di⁴)/(32(d³ − di³)); 0.2945·d for a solid shaft), is refused with the limit. Templates and saved test files have no such shafts, so the snapshots do not change.
  • A hollow ball screw's critical speed and buckling take the bore as entered: they used to take at most 0.99 of the root diameter. The 32 × 10 screw with a Ø27.5 mm root and a Ø27.45 mm bore, 1100 mm fixed–supported under 1000 N, had a buckling load of 3802.5 N (utilisation 0.526, pass); it now has 4.49341²·E·I/L² = 699.9 N (utilisation 2.857, fail). The bore is checked (0 to below the root) with or without the ball geometry. Other entered geometry that was quietly replaced is refused with its limit instead: a ball screw groove at least twice its conformity deep (its edge angle was held at 180°) or turns that hold no ball (one was counted); a bolt's negative boreDiameter (taken as solid), a basicSolidDiameter D′A below the bearing diameter dW (taken as dW) or an engagement.outerDiameter below 1.4·d (C1 of VDI 2230 Eq. 201 was taken at 1.4·d); a face-hobbing cutter radius below m_mn·z0/2 (ν0 was taken as 90°); and a housing rib or rib end lower than 0.05 of the wall (the mesh made it that high; a gusset's end of 0 still tapers). No template or saved test file has any of these, so the snapshots do not change.
  • An extension spring shorter than it can be made is refused: inside the hooks it is at least its close-wound body (n_t + 1)·d and, with German or English hooks, two loops' openings 2r₁ − d (EN 13906-2; hook "none" adds nothing). The spring of d 2.5, D 20 and 8.5 coils with English hooks at a free length of 1 mm, worked at 1 and 2 mm, used to pass its three checks; it is now refused at freeLength with its least length, 58.75 mm (body 23.75 mm and two 17.5 mm loops). A torsion spring wound until its coils close (α₂ at least 360°·n·(D − d)/d) is refused at angle2. A spring's errors are now located at the field they name (springs.SP1.freeLength, springs.SP1.length2), not at the spring, and the working-length errors of compression and extension springs each name their own length with its limit. The templates' springs are long enough, so the snapshots do not change.
  • A torsion spring's wire length and mass include both legs, as straight wire of their entered lengths (no end form is entered): they counted the coils only. The spring of d 2, D 16, 6 coils and two 100 mm legs had 301.59 mm of wire and 7.438 g; it now has 501.59 mm and 12.370 g, in its result, its summary and the parts list. The spring-set template's lid spring (two 25 mm legs): 301.59 → 351.59 mm, 7.438 → 8.671 g. The snapshots hold no spring masses and do not change.
  • A bolted joint with a negative transverseLoad (or transverseTorque) is solved, with the magnitude as the engine already took it: the M12 joint with −3000 N across was refused with "bolts.J1.axialLoad: loads must not be negative" (no checks, axm check exit 3); it now passes its six checks as with +3000 N. A negative axialLoad or minClampLoad is refused at that field, each with its own hint. Other validation errors name the field that is wrong: a gear with too few teeth at wheelTeeth when it is the wheel, a minWorkingMoment without eccentric at minWorkingMoment, a thread outside the table at the diameter missing (holeDiameter when only that is), a torus contact body at radius when that is the zero one, and a rotor stack longer than its shaft at stackLength (one off the shaft at position, with the range its centre can take).
  • A press fit with a speed: the design search's and axm diff's fits.<id>.slipSafety and torqueCapacity are the values at speed, as the slip check takes them, not the standstill ones; the overview's joint pressure and torque capacity, the fit's transmissible torque, the report's slip safety and axm solve's torque say so too ("at speed", "turning"), and the report adds a "Turning" row. The fit's report gains governing, the values its checks go by, and atSpeed gains axialCapacity. For example the shrink-fit template at 30 000 rpm (its hub grows 38 µm loose, more than the 11.6 µm smallest interference): maximising torqueCapacity with slipSafety ≥ 1.5 used to find 439 N·m and slip safety 1.76 feasible; it now finds 0 and no feasible design. Fits at standstill are unchanged.
  • A shaft with a duty cycle: the design search's and axm diff's shaft.minFatigueSafety and shaft.minStaticSafety are the safeties the strength checks go by, those of the worst load case (or FKM's damage accumulation over them), not those of the shaft as entered; the report's summary names that safety and its load case. For example the drive-shaft template: 10.46 (as entered) → 6.546 (load case Peak), as its fatigue check. Shafts without load cases are unchanged.
  • A shaft with a duty cycle: the solve report's strength gains governing, the fatigue and static safety its checks go by (safety, for FKM also the utilisation, the label of the place and the load case, "as entered" or empty for FKM's damage accumulation), and the app's results panel shows them, with the shaft as entered as a second line: for the drive-shaft template fatigue safety 6.55 "in load case Peak" and "10.5 as entered", where it showed 10.5 beside a check that takes 6.55.
  • A gear pair with a load spectrum: the design search's and axm diff's gears.<id>.contactSafety and bendingSafety are the lowest of the safeties its checks take, at the nominal torque and over the spectrum, and the report's summary names them. For example the gear-pair template with a fifth of its life at 1.8 times the torque: contact safety 1.377 → 1.152. Pairs without a spectrum are unchanged.
  • A parallel key's flank pressure is taken on the heights the key bears in the shaft groove and in the hub, from the keyway: t1 − c − s and h − t1 + c − s, with c = d/2 − √(d²/4 − b²/4) the drop of the shaft's circle at the key's flanks and s the key's chamfer (r1 at its largest), instead of 0.45·h whatever the groove depth (DIN 6892 method C's approximation). The shaft, hub and key safeties and the torque capacity follow, and the results add shaftFlankHeight, hubFlankHeight, shaftPressure and hubPressure (pressure is the higher, which the key carries). A custom shaftDepth now counts: on Ø50 a 14 × 9 key in an 8.9 mm groove (the hub keeps 0.5 mm of it) at 300 N·m used to give hub safety 8.63 and 2588 N·m capacity, and now 1.065 and 319.5 N·m (400 MPa on the hub); a depth that leaves no flank in the shaft or the hub is refused with the depth to use. For the DIN 6885-1 keyways the change is a few per cent: the keyed-joints template's key 12 × 8 on Ø40 bears 3.479 mm in the shaft and 3.321 mm in the hub (3.6 mm before), hub safety 3.108 → 2.867, key 3.137 → 2.894, shaft 4.29 → 4.146, capacity 932.4 → 860.2 N·m; the drive-shaft template's K1 hub 2.317 → 2.298, key 3.321 → 3.102, shaft 8.341 → 7.792, and K2 hub 13.77 → 12.99, key 5.481 → 5.172, shaft 13.77 → 14.27.
  • A bolted joint with a negative transverseTorque or transverseLoad gives the results of the same load the other way round. The automatic embedding took the torque's sign: M12 8.8 through two 15 mm plates with MY −71 120 N·mm at a 20 mm friction radius chose the axial 9.5 µm instead of the transverse 11 µm, so its slip safety was 1.019 and every check passed; it is now 0.99994 and the preload and slip checks fail, as with +71 120 N·mm. A negative transverse load asked no clamp load and had no shear check; it now counts with its magnitude.
  • The calculation report's summary page lists a belt or chain drive's governing check, and a report that leaves a drive out (exclude drives or drives.D1) leaves its checks out of the verdict's count too. A drive's failing slip check used to be counted in "1 of 1 checks fail" while the summary said "No design limits set", and stayed in the count of a report without the drive.
  • axm check --json (and MCP axm_check, and axm watch's rows) give an infinite worst.utilisation as "inf", as axm solve gives the same check, instead of null ("not computed"); the table shows inf instead of "unlimited". axm sweep, axm optimize and axm verify (and their MCP tools) write infinite results as "inf" too, instead of null: an unloaded bearing's life in a sweep row, an optimiser candidate's infinite metric, objective or violation.
  • The report's summary gives a bearing's static safety s₀ over the duty cycle (the worst load case, as its check), not at the loads as entered, as it already gave the life.
  • A command or design search request with a field it does not have is refused, at any depth, instead of being read with that field's default: {"op": "setLoadCases", "cases": [{"name": "Peak", "share": 100, "sclae": 10}]} used to store a scale of 1 (turning a failing fatigue check into a passing one), and an optimiser constraint {"metric": "shaft.maxDeflection", "maxx": 0.000001} bounded nothing. Both now fail with code invalid, the exact path (cases[0].sclae, constraints[0].maxx) and a hint naming the field meant, through axm apply, axm optimize --request, MCP and the app's engine alike. A constraint with neither min nor max is refused too (constraints[0]). Project files are unchanged: one with fields this version does not know still opens, read-only.
  • Commands that save over a project file (edits, axm set, axm apply, axm optimize --apply, axm new --force, and the MCP tools) now keep the version they replace in the user's data folder first, for axm history and axm undo. The file itself is written as before; if the history cannot be written, the command still saves and warns (historyNotSaved). A refused concurrent save preserves the successful writer's Undo history.
  • A bearing catalogue (axm bearing import, Import CSV in the app) reads header names written with spaces, underscores or hyphens between their words (contact angle, contact_angle for contactAngle); such a column used to be left out without a word, and the value estimated instead. A column the import does not read (a mass, a misspelt name) is still left out, now named in the outcome's message ("columns not read: mass") and, from axm, in a warning columnsNotRead with the columns.
  • axm verify --reference names its bearing group "Bearings: the reference bearing solver" (its title in --json and on the verification page), and the help, the agent guide and the report's method notes call the solver the bearing module was ported from the reference solver; the cases and results are the same.
  • axm's text output is coloured when it goes to a terminal, and long solves and searches show a progress line on stderr there. Output into a pipe or file and --json are unchanged, byte for byte; --color never or NO_COLOR keeps a terminal plain too.
  • The unbalance response resolves its peaks. Its speeds were an even grid of 120 steps to 1.3 times the highest critical speed with 25 closer ones round each non-rotating critical speed, and the reported peak was the largest sample, so it depended on the grid: lightly damped rotors and rotors whose gyroscopic parts move the resonance away from the non-rotating critical speed had their peak stepped over. The synchronous critical speeds that unbalance excites now join the grid, and round every peak of every point's curve the two intervals beside it are halved until the speeds on either side are within 1e-4 of it (the grid's speeds are all kept; a peak adds about ten to thirty speeds, so speeds is no longer evenly spaced near a resonance). Against the Jeffcott rotor's closed form (with the app's structural damping) the peak now matches within 1.3e-5 on any grid, where the even grid alone missed it by 2 % at a damping ratio of 0.02 and by 49 % at 0.002. Peaks rise slightly and move to the forward whirl: the simple template with an 8 kg, 100 g·mm part peaks at 257.7 µm at 15 774 rpm (was 255.9 µm at 15 736 rpm, the non-rotating critical speed, which the old grid sampled exactly while the shaft's own polar inertia stiffens the forward whirl 0.24 % above it); the gearbox shaft's 8 kg, 507 g·mm gear peaks at 1268 µm at 32 289 rpm (was 1256 µm at 32 200 rpm). The help pages say so. No template carries an unbalance, so the snapshots do not change.
  • FKM damage accumulation over a duty cycle finds the plain section of most damage. It took a plain section only where every load case put its own at the same place with the same label, and each case puts its automatic plain section where its own fatigue safety is lowest (since 0.2.5), so with loads that differ between the cases the duty cycle had no plain section at all and its fatigue check could miss the governing place (or, without notches, report no damage). The damage is now accumulated at every place a case could put its plain section (every element end, each side of a node, and under the shaft's weight inside an element at each case's place of lowest fatigue safety and at the place of highest accumulated utilisation), and the place of most damage is spectrum.points "Plain section". Projects with a duty cycle and FKM cycles whose cases' plain sections differed report it now, and minFatigueSafety and spectrum.maxFatigueLabel follow it when it governs; projects whose cases agreed are unchanged unless another place gathers more damage. Notches are matched as before. A place is left to a notch or an explicit plain section only where it assesses the same place, section and forces in every case, as in a single case since 0.2.5: one beside a concentrated moment does not hide the place of most damage. No template or saved test file has such a duty cycle, so the snapshots do not change.
  • A press fit's negative speed is refused (fits.<id>.speed: "must be 0 or more rpm"), as the other modules' speeds are. It was accepted and read as standstill, for only a positive speed loosened the hub and grew a linked housing: the shrink-fit template at -30 000 rpm passed with a slip safety of 1.72 where 30 000 rpm loses 0.038 mm of interference and fails with slip safety 0. Such a project now has an error to fix.
  • A STEP solid's automatic element size follows the file's length unit. It took the coordinates as millimetres, while Netgen reads them in the file's unit (SI_UNIT with its prefix, or a conversion-based unit such as the inch) and meshes in millimetres: the wall fixture written in micrometres (0.2 mm long) was meshed at 10 mm, 563 tetrahedra, and is now meshed at 0.01 mm, 3130 tetrahedra, as with that size given. Files in millimetres are unchanged.
  • A rotor's air-gap check (rotors.<id>.maxGapUse) takes the largest deflection over the whole stack, both planes and the shaft's tilt under the stack included, and the rotor's results say where it is (deflectionPosition; centreDeflection keeps the stack centre's). It took the deflection at the stack's centre only: a 160 mm stack centred on the right bearing of a Ø40 × 500 mm shaft with 6000 N at its overhung end passed with 0 % of its 0.5 mm gap while the stack's outer end moved 0.541 mm (108 %); it now fails, largest at 330 mm, the stack's right end. A stack between its bearings, as in the electric-motor template, is deflected most at its centre and keeps its result (7.511 µm, 1.502 % of the gap), so the snapshots do not change.
  • A fit with a hub (hubDiameter) is analysed as a press fit for any tolerance pair. A pair with no possible interference at room temperature (a clearance fit) dropped the analysis and with it its checks: the shrink-fit template with only the shaft class changed from s6 to g6 (9…50 µm clearance, 250 N·m, minimum slip safety 1.5) had no checks and axm check passed it. Now its slip safety is 0 and fails, with "the fit has clearance (0.009…0.05 mm), so it transmits no torque by friction", and its yield checks pass with no stress. A clearance pair that the operating temperatures tighten (a hot shaft in a cooler hub) now has its stresses checked at the operating interference, and its slip safety, from the looser state as for any fit, is 0. A slip safety of 0 now says why (clearance, smoothing, the operating temperatures or the hub turning loose). A hub of such a fit that is not larger than the joint is now an error. Templates and saved test files have interference fits only, so the snapshots do not change.
  • The power loss says what it includes. On the two-stage gearbox the Overview's totals gave 98.04 % and 179 W, its power flow 98.5 % and 137 W, both referred to the same 9.111 kW in: only the totals counted the six bearings' 42 W of friction, and neither said so. Both now give both figures, labelled: the power flow "gear and drive efficiency" with a line "with the bearings' friction", the totals "all losses, bearings included" with the gears and drives alone. powerLoss adds bearingLoss, transmissionLoss and transmissionEfficiency, each power flow train bearingLoss and overallEfficiency; axm solve and the calculation report split the total the same way. No number changes.
  • No calculation result changes. The calculation report of an existing project reads as before, with page furniture added: every printed page has a running header (the report's number and revision when the project has them, else the project's name; the company, else "Calculation report") and a footer with the date, the project's fingerprint (the first 12 hex digits of the SHA-256 of its canonical JSON, without writtenBy and report) and "Page X of Y". The top and bottom page margins grow from 12 to 16 mm to hold them, so a long report can take a page more, and the closing footer names the fingerprint. A PDF saved by the desktop app or axm report --pdf carries the project file as an attachment. Everything else (document control, summary page, contents, cover, accent, the parts and modules left out) appears only when chosen.
  • A planetary set's applicationFactor below 1 (or not a number) is refused at planetaries.<id>.applicationFactor, as a gear pair's is: it scaled the tooth loads down. The 21/33/87 stage with 3 planets, m 3, b 40 and 5000 N·m on the sun fails both tooth checks at KA = 1 (contact safety 0.505, root safety 0.417); at KA = 0.001 it passed them (8.961 and 74.74), and at KA = 0 it had no tooth stresses and unlimited safeties. The engine refuses it too, for every caller of the shared tooth rating. The templates' factors are at least 1, so the snapshots do not change.
  • A negative required life is refused at its field (gears.<id>.lifeHours, and the same for planetary sets and bevel pairs): its negative load cycles were read as a short life with the highest permissible stresses. The 20/60 pair (m 3, b 30, 500 N·m, KA 1.25) fails 3 of its 4 checks at 20000 h (pitting safeties 0.777 and 0.838); at −100 h it had −9·10⁶ pinion cycles and passed all 4 (1.251, 1.349, 3.096 and 3.652). Zero stays allowed: no cycles, the static rating; with a loadSpectrum, which shares out the life, it is refused (every bin had no cycles and an unlimited safety). The other load factors and lives that let an out-of-range value through are refused at their field too: the applicationFactor of worm pairs, plastic gears and keys and a linear guide's loadFactor fW below 1 (they refused 0 and below only, at the element), a weld's fatigue.loadFactor γFf below 1, a gear pair's or planetary set's entered faceLoadFactor KHβ below 1 (it was raised to 1 without a word), the shaft strength's peakFactor below 1 (0 was allowed and left the static check without load), a bolt's loadCycles of 0 or below (taken as the endurance limit) and a negative limits.minLifeHours of bearings, linear guides and ball screws (it passed every life). The engines refuse the same. No template or saved test file has any of these, so the snapshots do not change.
  • A Hertz point contact near a line is solved with its actual curvature: the relative curvature difference F(ρ) was capped at 0.999999, which shortened the ellipse and raised the pressure. The ellipticity now comes from the complement 1 − F(ρ), which the curvatures give without cancellation, through 1 − F = 2(K − E)/((κ² − 1)·E) with K and E of the complementary parameter 1/κ². Two steel cylinders of r 0.1 mm crossed at 0.05° under 600 N (F = 0.99999962) had κ 4177, a 16.30 mm and 4503 MPa, failing 4200 MPa (utilisation 1.072); they now have κ 6964.6, a 22.92 mm and 3797.5 MPa, passing (0.904), as an independent solution of the same identity gives. Rollers crossed so nearly parallel that the relative curvature along the contact is below 10⁻⁹ of the sum are refused at contacts.<id>.angle with the line contact (angle 0) as the fix: they were refused as if neither body were a cylinder. Contacts with F(ρ) up to 0.999999, which includes every template and bearing, change only in the last digits, so the snapshots do not change.
  • The bearing seat check takes the bearings of a pair or set where they sit, each on its own stretch of the shaft, not as one bearing over the gap between them. A back-to-back 7207B pair (bore 35, 17 mm each) with pairSpacing 200 mm at 200 mm on a shaft of Ø35 at 0–120 and 280–400 mm and Ø50 between sits at 91.5–108.5 and 291.5–308.5 mm, both on Ø35: it failed supports.B1.bearingSeat (value 50 mm against 35, utilisation 1.429, "spans 91.5–308.5 mm, across a diameter step"); it now passes, and fits where B1 stands at 188.5–211.5 mm. The app's seat guide while a bearing is dragged draws both seats, and the seat's need and fits gain spans and stretches. Bearings that touch or overlap (every template's) are checked as before, so the snapshots do not change.
  • No calculation result changes. A report of the inputs only keeps the model of linear guides, ball screws, housings, planetary sets, bevel and worm pairs, springs, weld groups, plastic gears and contacts: their facts were all filed as results, so it dropped each such module's heading and its geometry, ratings and loads while still counting its checks (a project of one linear guide: "All 2 checks pass", with nothing of the guide shown). Their input facts (a guide's arrangement, carriage ratings and table load; a weld group's lines, loads at the centroid and strength; a planetary set's gears; …) are now inputs, the rest results. The full report holds the same facts in the same order; a module whose inputs and results alternate shows them as consecutive tables.
  • No calculation result changes. A planetary set's and a worm pair's report (and axm solve text) list their materials, input torque and speed, application factor and required life as inputs, after the geometry: an inputs-only report gave the gears or the pair alone. A planetary set states the sun, planet and ring materials with σHlim and σFlim and the sun's torque and speed ("300 N·m at 1500 rpm on the sun"); a worm pair the case-hardened steel worm (its modulus) and the wheel's material, and the wheel torque T₂N with the worm speed n₁. Torques show in lbf·ft and stresses in ksi in US customary units. The rows there before keep their order.
  • A bolted joint's minAxialLoad FA,min outside 0 … axialLoad is refused at bolts.<id>.minAxialLoad: the engine clamped it into that range, solving another load range without a word (−1 N as 0, 6000 N with an FA,max of 5000 N as a steady 5000 N, without an alternating stress). Joints within the range are unchanged, so the snapshots do not change.
  • An extension spring's wire length and mass include its two hooks, each a full loop of mean radius r₁ (2π·r₁) and, for an English hook, its lead to the centre over D/2 (hook "none" adds nothing): they counted the coils only, as the torsion spring's legs were left out before. The spring of d 2.5, D 20 and 8.5 coils with English hooks (r₁ 10 mm) had 534.07 mm of wire and 20.58 g; it now has 679.73 mm and 26.19 g, in its result, its summary and the parts list. The spring-set template's door spring (d 2, D 16, 20 coils, English hooks): 1005.31 → 1121.84 mm, 24.79 → 27.67 g. The snapshots hold no spring masses and do not change.
  • No calculation result changes. A shaft with a strength check whose hollow section has a wall below 0.05·D gets a warning at sections.<id>.innerDiameter (the Ø40/39 mm tube: a 0.5 mm wall against 2 mm): DIN 743 and FKM rate it as a beam and cover neither the local buckling nor the ovalisation of a thin tube. It is solved and checked as before; no template has such a wall.
  • A notch right at a load step (a node between two elements under different forces) keeps each criterion's worse side: both sides were assessed, but only the side with the lower of its two safeties was kept, so with an axial force on one side the side governing fatigue could be dropped. Now a side is left out only when the other is at least as low in both the fatigue and the static safety; otherwise both are reported, each with its side (left, right), and FKM's damage accumulation over a duty cycle accumulates each side on its own. The Ø40 mm shaft with a keyway at 200 mm under Fx −255 kN and Fy −5.1 kN there (Rm 600 MPa, required fatigue safety 1.5): fatigue 1.5436 (pass) → 1.4764 (fail), static 1.3457 unchanged. Grooves, ring grooves, cross bores and press fits likewise. Templates and saved test files have no notch at a load step where the sides disagree, so the snapshots do not change.
  • A worm pair's overall efficiency with the wheel driving, efficiencyReverse, is power over the wheel's input: the worm gets η′_z·P₂ less the idling, bearing and seal losses, (η′_z·P₂ − P_V0 − P_VLP − P_VD)/P₂. It took the mesh loss of an output P₂, P₂·(1/η′_z − 1), off the input, which shows a pair that drives back as 0. The worm-pair starter at friction 0.10 (P₂ 2962.8 W, η′_z 0.4902, 287.3 W of other losses): 0 → 0.3932; at 0.14: 0 → 0.1948; at 0.17: 0 → 0.0481. The mesh efficiencies, the losses with the worm driving and every check are unchanged; the snapshots hold no reverse efficiency.
  • A negative or non-finite rotor mass is refused at rotors.<id>.mass, and a negative load mass, polarInertia or diametralInertia at loads.<id>.<field>, each with a hint; 0 stays "no mass". They were taken as massless: the electric-motor template with its rotor at −20 kg and a 40000 rpm minimum critical speed passed all 14 checks at 55713.7 rpm, where at 20 kg it fails at 29023.5 rpm. Valid projects solve as before.
  • The parts list (axm parts, the Overview) counts every bearing a bearing component stands for: two in a pair, one at each of its positions, one in every planet of the planetary set whose planet bearing it is; knownMass with them. A preset that is a matched pair (7207 B DB, 30207 DB, whose mass is the pair's) is one set. A 7207 B (0.2822 kg estimated) as an O pair: quantity 1 → 2, 0.2822 → 0.5643 kg; at three positions: 1 → 3, 0.8465 kg; a 6207 linked as the planet bearing of a three-planet set: 1 → 3. Among the templates only the spindle's two O pairs change, 1 → 2 each (no preset designation, so no mass). No result or check changes.
  • A fillet weld below the size EN 1993-1-8 lets carry load is refused where it is, with a hint, instead of getting a passing strength check under the standard's name: a throat below 3 mm (4.5.2(2)) at welds.<id>.lines[i].throat, an effective length below max(30 mm, 6a) (4.5.1(2)) at welds.<id>.lines[i]. Fillet lines joined end to end are one weld for the length, so a curved weld drawn as short lines keeps working; butt welds are unchanged. A lone S355 fillet under 1000 N: 100 × 1 mm (utilisation 0.0382, pass), 20 × 3 mm (0.0637, pass) and 40 × 8 mm (0.0119, pass) are now refused; 100 × 3 mm still passes at 0.0127. Templates and saved test files have no such welds.
  • Every numeric input of every module that cannot be negative, or zero, is refused at its own path with its meaning as the hint ("must be greater than 0 MPa", "must be 0 or more kg"). Of the 733 numeric fields of the project file, 429 were not: 204 took the wrong sign without a word (a required safety of −1 that every design meets, a negative roughness, hardness, modulus, density, case depth or spring bore, a negative unbalance, an S–N strength of a plastic at 0), 225 were refused only as an error of the whole element. Loads, positions, coordinates, angles, temperatures, profile shifts and interferences keep either sign. The templates and saved test files keep to every sign and solve as before; a file with such an input is now refused where it was rated.
  • axm --units imperial reads a bare number of every field in the unit its text output shows, also the compound ones: an area in ft² (from m²) or in² (mm²), a second moment of area in in⁴, a spring's or an oil's density in lb/in³ (kg/dm³) and a rating distance in mi (km); these units written out (1 ft², 0.28 lb/in³) are read too. Such a number used to be stored as the metric unit and the imperial unit refused: a worm (2/41 teeth, mx 4 mm, q 10, b 32 mm, 400 N·m at 1450 rpm, heat balance with k* 20 W/(m²·K)) set to cooling.housingArea 1 got 1 m², a 51.2 °C sump and thermal safety 1.95 (pass); it now gets 1 ft², 356 °C and 0.281 (fail). A field's unit is now the one its help gives it everywhere, so axm set also reads a contact's or a torsion spring's angle in ° or rad and a planet carrier's torsional stiffness in N·mm/rad or lbf·in/rad, which it refused. JSON and MCP stay metric.
  • An imported housing's reduced mass (housings[].reduced.mass) is checked as its stiffness is: a value for every lower-triangle entry of its dofs, each finite, and no negative mass or inertia (positive semidefinite; couplings of either sign and massless dofs are kept). A mass of the wrong length used to be ignored and a negative one dropped in the critical speeds, both as a housing without mass: the Ø40 × 400 mm shaft on two seats of K = 100 000 N/mm each had 33 445 rpm and passed a 25 000 rpm limit with −0.02 t or a one-value mass, where 0.02 t gives 20 108 rpm and fails. Such a mass is now refused at housings.<id>.reduced.mass with a hint, and the solve is incomplete. An omitted mass is still a housing without mass.
  • A reduced mass is judged dof by dof: a negative diagonal is refused beyond the rounding of its own row, a massless dof must have no couplings, and the rest is tested scaled by its own diagonal. One huge unrelated diagonal used to set the scale of every dof, so that the same housing with a fifth, uncoupled dof of 10¹⁶ t passed −0.02 t at each seat as rounding, and the shaft again had 33 445 rpm and passed. Such a mass is now refused as negative, and a mass whose diagonal spans more than 10¹² (there 0.02 to 10¹⁶ t), too wide to tell its small masses from the rounding of its large ones, is refused with what to do. The mass at the seats is checked as well before the critical speeds use it.
  • The app's assistant sees a change of order in a list whose order is part of the design: the sections (of each shaft), the supports, the shafts, the planetary sets and the bearings (the last four pick a load case's input speed). Sections reordered from S1/S2/S3 to S3/S1/S2 while the assistant planned S2/S1/S3 compared as unchanged, and its stale plan undid the newer order; it is now refused until the assistant reads the project again. Reordering loads or other lists blocks nothing.
  • A check of one revision only is "no longer checked" (a limit cleared, an item removed) or a "new check" in the report's "Changes since revision", in axm diff and in the app's comparisons. The simple shaft fails its 0.1 mm deflection limit (0.1892 mm); with the limit cleared the report's row read "now passes", axm diff "FAIL → (none)" and the app "Fail → none". "Now passes" and "now fails" are kept for a check in both.
  • axm set (and sweep, optimize) reads a power in a unit in every spelling for every quantity: ft³, ft3 and ft^3. A density (of a material, a fit's parts, a bearing's elements or lubricant, a housing) refused lb/ft^3, lb/in^3, kg/m^3 and g/cm^3, which the other compound units read; nothing wrong was stored.
  • An imported mesh's seat given by its cylindrical patch alone ({"patch": 5}) is solved again: it takes its centre, diameter and width from the patch, but the sign rules refused its own diameter and width, left at 0, and withheld the housing. The starter housing's solid wall (20 divisions, held at its feet) with its seat on the bore's patch (Ø72 × 20 mm) now has 743 007 N/mm sideways and 3 260 735 N/mm down, as with the same seat entered in full. A seat without a patch must still have a diameter and a width above 0.
  • A negative mass of a rotor, a mounted gear or a pulley is refused once, at its mass: the electric-motor template's rotor at −20 kg had four errors, the mass twice and the inertias that follow from it at rotors.R1.polarInertia and diametralInertia, fields a rotor does not have (a gear's and a pulley's inertias the same, a rotor's stack length also at rotors.R1.length). Every validation error now names an input of the project file.
  • The field help (the guide's field lists, axm schema fields, the app's tips and the refusals' hints) has the units the app shows: a linear guide's cyclesPerMinute in /min, not h (from "the life in hours" of its description; axm set … 60/min was refused), a mesh seat's diameter and width in mm, with descriptions that say a patch gives them, a bevel pair's flankHardness in HB and a ball screw's hardness in HV10; a reduced stiffness matrix of mixed units has none (it said N). The app's flank-relief amount, roll length and start diameter show their own tips, not the Kv tip relief's.
  • US customary reports and axm --units imperial text show the thermal, inertia, unbalance and flow units as the app does, with its factors: W/(m²·K) in BTU/(h·ft²·°F), W/(m·K) in BTU/(h·ft·°F), W/K in BTU/(h·°F), kg·m² in lb·ft², g·mm in oz·in, l/min in gal/min and a temperature difference in K as °F of difference (×1.8, no offset): a worm's heat transfer coefficient of 20 W/(m²·K) is 3.522 BTU/(h·ft²·°F), a 30 K rise 54 °F. They were shown metric while the app converted them. With --units imperial a bare number of such a field is read in that unit, as the app's fields read it (axm set … worms.W1.cooling.heatTransfer 3.522 is 20 W/(m²·K)); written with its metric unit it reads as before. Metric text, JSON and MCP do not change.
  • A shaft that takes stiffness or loads from a refused element (errors at its path) is no longer rated: the housing its supports sit in, a support of its own refused where the shaft solve does not look (linked to a bearing that does not exist), a gear pair, rotor or belt or chain drive on it, or a bearing on it when coupled or cross-located. It was solved on what was left (a refused housing's seats as rigid) and its checks passed while the project was only incomplete. The housing-seats template with its wall's thickness at −5 mm passed its shaft and bearing checks; it now has no shaft results and shaftError "Not rated: housing H1 is refused (see its errors); the shaft would be solved on rigid seats", an error at shaft (shafts.<id>) whose hint says how to fix it, and its bearings have error shaftUnsolved naming the housing. The app's results panel, the overview, the report and axm solve say "not rated" with why; axm check exits 3 as before. A saved project with such an element that showed a pass now shows "Not rated" until the element is fixed. Projects without refused elements are unchanged.
  • A bearing with an invalid limit (a negative limits.minLifeHours, a permissibleTemperature at or below the ambient) or another validation error its solver does not see (linked to more than one support) is no longer rated: a required life of −1 h passed every life, and the overhung-pulley template's BR1 with it passed its four checks. It now has no results nor checks, and error invalid with the errors at bearings.<id> and a hint to fix them; the shaft and the other bearings are rated as before (unless coupled to it, see above).
  • In the browser, Save no longer writes over a file another tab saved since this tab opened or saved it: the tab shows the file as it is now, its own change one Undo away, then Save saves it over that or Save as keeps it apart. Leaving the project then asks first, also after "Save changes?" › Save. A file a newer Axomek saved keeps the change here, unsaved, for Save as. An edit made while opening or agreeing to leave stays here until leaving is agreed again.
  • A second launch of a file whose window went Home, or failed to open it, opens it again; it only brought that window forward. Number fields take powers with a caret (kg/m^3), as axm does.
  • Settings changes that cannot be saved remain pending for Retry under their original account. Without secure browser locking, local settings are read-only.