@geotechcli/core 0.4.96 → 0.4.98

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/fem/engineering-evidence.d.ts +1 -1
  2. package/dist/fem/engineering-evidence.d.ts.map +1 -1
  3. package/dist/fem/engineering-evidence.js +59 -1
  4. package/dist/fem/engineering-evidence.js.map +1 -1
  5. package/dist/fem/index.d.ts +1 -0
  6. package/dist/fem/index.d.ts.map +1 -1
  7. package/dist/fem/index.js +1 -0
  8. package/dist/fem/index.js.map +1 -1
  9. package/dist/fem/plane-strain-assembly.d.ts +84 -0
  10. package/dist/fem/plane-strain-assembly.d.ts.map +1 -0
  11. package/dist/fem/plane-strain-assembly.js +400 -0
  12. package/dist/fem/plane-strain-assembly.js.map +1 -0
  13. package/dist/fem/production-readiness.js +2 -2
  14. package/dist/fem/production-readiness.js.map +1 -1
  15. package/dist/ingest/document-evidence-packet.d.ts +42 -42
  16. package/dist/ingest/job-worker.d.ts.map +1 -1
  17. package/dist/ingest/job-worker.js +4 -0
  18. package/dist/ingest/job-worker.js.map +1 -1
  19. package/dist/llm/providers/anthropic.d.ts.map +1 -1
  20. package/dist/llm/providers/anthropic.js +3 -2
  21. package/dist/llm/providers/anthropic.js.map +1 -1
  22. package/dist/llm/providers/hosted-beta.d.ts.map +1 -1
  23. package/dist/llm/providers/hosted-beta.js +3 -8
  24. package/dist/llm/providers/hosted-beta.js.map +1 -1
  25. package/dist/llm/providers/huggingface.d.ts.map +1 -1
  26. package/dist/llm/providers/huggingface.js +3 -2
  27. package/dist/llm/providers/huggingface.js.map +1 -1
  28. package/dist/llm/providers/openai-compatible.d.ts.map +1 -1
  29. package/dist/llm/providers/openai-compatible.js +3 -2
  30. package/dist/llm/providers/openai-compatible.js.map +1 -1
  31. package/dist/llm/providers/response-json.d.ts +6 -0
  32. package/dist/llm/providers/response-json.d.ts.map +1 -0
  33. package/dist/llm/providers/response-json.js +27 -0
  34. package/dist/llm/providers/response-json.js.map +1 -0
  35. package/dist/llm/providers/zhipu.d.ts.map +1 -1
  36. package/dist/llm/providers/zhipu.js +3 -2
  37. package/dist/llm/providers/zhipu.js.map +1 -1
  38. package/dist/meta/metadata.json +1 -1
  39. package/dist/vision/geotech-document.d.ts.map +1 -1
  40. package/dist/vision/geotech-document.js +4 -0
  41. package/dist/vision/geotech-document.js.map +1 -1
  42. package/dist/vision/index.d.ts.map +1 -1
  43. package/dist/vision/index.js +4 -0
  44. package/dist/vision/index.js.map +1 -1
  45. package/package.json +1 -1
@@ -0,0 +1,400 @@
1
+ import { DEFAULT_FEM_CONVERGENCE_POLICY } from './engineering-evidence.js';
2
+ const GAUSS_POINTS = [
3
+ [-1 / Math.sqrt(3), -1 / Math.sqrt(3), 1],
4
+ [1 / Math.sqrt(3), -1 / Math.sqrt(3), 1],
5
+ [1 / Math.sqrt(3), 1 / Math.sqrt(3), 1],
6
+ [-1 / Math.sqrt(3), 1 / Math.sqrt(3), 1],
7
+ ];
8
+ const MAX_DENSE_DOF_COUNT = 800;
9
+ function assertFinite(value, label) {
10
+ if (!Number.isFinite(value))
11
+ throw new Error(`${label} must be finite.`);
12
+ }
13
+ function assertFinitePositive(value, label) {
14
+ if (!Number.isFinite(value) || value <= 0)
15
+ throw new Error(`${label} must be a finite positive number.`);
16
+ }
17
+ function assertFiniteNonNegative(value, label) {
18
+ if (!Number.isFinite(value) || value < 0)
19
+ throw new Error(`${label} must be a finite non-negative number.`);
20
+ }
21
+ function assertPositiveInteger(value, label) {
22
+ if (!Number.isFinite(value) || !Number.isInteger(value) || value < 1) {
23
+ throw new Error(`${label} must be a finite positive integer.`);
24
+ }
25
+ return value;
26
+ }
27
+ function assertArray(value, label) {
28
+ if (!Array.isArray(value))
29
+ throw new Error(`${label} must be an array.`);
30
+ }
31
+ function assertNonEmptyId(value, label) {
32
+ if (typeof value !== 'string' || value.trim().length === 0) {
33
+ throw new Error(`${label} id must be a non-empty string.`);
34
+ }
35
+ }
36
+ function assertUniqueIds(items, label) {
37
+ const seen = new Set();
38
+ for (const item of items) {
39
+ assertNonEmptyId(item.id, label);
40
+ if (seen.has(item.id))
41
+ throw new Error(`Duplicate ${label} id: ${item.id}.`);
42
+ seen.add(item.id);
43
+ }
44
+ }
45
+ function validateConvergencePolicy(policy) {
46
+ if (policy.schemaVersion !== 'fem-convergence-policy.v1') {
47
+ throw new Error('policy.schemaVersion must be fem-convergence-policy.v1.');
48
+ }
49
+ assertFinitePositive(policy.residualTolerance, 'policy.residualTolerance');
50
+ assertFinitePositive(policy.forceBalanceTolerance, 'policy.forceBalanceTolerance');
51
+ assertFinitePositive(policy.porePressureMassBalanceTolerance, 'policy.porePressureMassBalanceTolerance');
52
+ assertPositiveInteger(policy.maxIterations, 'policy.maxIterations');
53
+ assertPositiveInteger(policy.minAcceptedSteps, 'policy.minAcceptedSteps');
54
+ if (policy.minAcceptedSteps > policy.maxIterations) {
55
+ throw new Error('policy.minAcceptedSteps must be less than or equal to policy.maxIterations.');
56
+ }
57
+ }
58
+ function round(value, digits = 10) {
59
+ const factor = 10 ** digits;
60
+ return Math.round(value * factor) / factor;
61
+ }
62
+ function dofIndex(nodeIndex, dof) {
63
+ return nodeIndex * 2 + (dof === 'ux' ? 0 : 1);
64
+ }
65
+ function planeStrainD(material) {
66
+ assertFinitePositive(material.elasticModulusKpa, `material ${material.id} elasticModulusKpa`);
67
+ if (!Number.isFinite(material.poissonRatio) || material.poissonRatio < 0 || material.poissonRatio >= 0.5) {
68
+ throw new Error(`material ${material.id} poissonRatio must be finite and between 0 and 0.5.`);
69
+ }
70
+ const e = material.elasticModulusKpa;
71
+ const nu = material.poissonRatio;
72
+ const factor = e / ((1 + nu) * (1 - 2 * nu));
73
+ return [
74
+ [factor * (1 - nu), factor * nu, 0],
75
+ [factor * nu, factor * (1 - nu), 0],
76
+ [0, 0, factor * (1 - 2 * nu) / 2],
77
+ ];
78
+ }
79
+ function shapeDerivativesNatural(xi, eta) {
80
+ return [
81
+ [-(1 - eta) / 4, -(1 - xi) / 4],
82
+ [(1 - eta) / 4, -(1 + xi) / 4],
83
+ [(1 + eta) / 4, (1 + xi) / 4],
84
+ [-(1 + eta) / 4, (1 - xi) / 4],
85
+ ];
86
+ }
87
+ function solveDenseLinearSystem(matrix, rhs) {
88
+ const n = rhs.length;
89
+ const a = matrix.map((row, index) => [...row, rhs[index]]);
90
+ for (let pivot = 0; pivot < n; pivot += 1) {
91
+ let pivotRow = pivot;
92
+ let pivotAbs = Math.abs(a[pivot][pivot]);
93
+ for (let row = pivot + 1; row < n; row += 1) {
94
+ const candidate = Math.abs(a[row][pivot]);
95
+ if (candidate > pivotAbs) {
96
+ pivotRow = row;
97
+ pivotAbs = candidate;
98
+ }
99
+ }
100
+ if (pivotAbs <= 1e-14)
101
+ throw new Error('Plane-strain global stiffness matrix is singular after boundary conditions.');
102
+ if (pivotRow !== pivot) {
103
+ const tmp = a[pivot];
104
+ a[pivot] = a[pivotRow];
105
+ a[pivotRow] = tmp;
106
+ }
107
+ const divisor = a[pivot][pivot];
108
+ for (let col = pivot; col <= n; col += 1)
109
+ a[pivot][col] /= divisor;
110
+ for (let row = 0; row < n; row += 1) {
111
+ if (row === pivot)
112
+ continue;
113
+ const factor = a[row][pivot];
114
+ if (factor === 0)
115
+ continue;
116
+ for (let col = pivot; col <= n; col += 1) {
117
+ a[row][col] -= factor * a[pivot][col];
118
+ }
119
+ }
120
+ }
121
+ return a.map((row) => row[n]);
122
+ }
123
+ function matVec(matrix, vector) {
124
+ return matrix.map((row) => row.reduce((sum, value, index) => sum + value * vector[index], 0));
125
+ }
126
+ function dot(a, b) {
127
+ return a.reduce((sum, value, index) => sum + value * b[index], 0);
128
+ }
129
+ function elementMatrices(input) {
130
+ const { nodes, material, thicknessM } = input;
131
+ const d = planeStrainD(material);
132
+ const k = Array.from({ length: 8 }, () => new Array(8).fill(0));
133
+ const gauss = [];
134
+ let areaM2 = 0;
135
+ for (const [xi, eta, weight] of GAUSS_POINTS) {
136
+ const derivatives = shapeDerivativesNatural(xi, eta);
137
+ let j11 = 0;
138
+ let j12 = 0;
139
+ let j21 = 0;
140
+ let j22 = 0;
141
+ for (let i = 0; i < 4; i += 1) {
142
+ j11 += derivatives[i][0] * nodes[i].xM;
143
+ j12 += derivatives[i][0] * nodes[i].yM;
144
+ j21 += derivatives[i][1] * nodes[i].xM;
145
+ j22 += derivatives[i][1] * nodes[i].yM;
146
+ }
147
+ const detJ = j11 * j22 - j12 * j21;
148
+ if (!Number.isFinite(detJ) || detJ <= 0) {
149
+ throw new Error('Plane-strain quad4 element has non-positive Jacobian; check node order and geometry.');
150
+ }
151
+ const invJ = [
152
+ [j22 / detJ, -j12 / detJ],
153
+ [-j21 / detJ, j11 / detJ],
154
+ ];
155
+ const b = Array.from({ length: 3 }, () => new Array(8).fill(0));
156
+ for (let i = 0; i < 4; i += 1) {
157
+ const dNdx = invJ[0][0] * derivatives[i][0] + invJ[0][1] * derivatives[i][1];
158
+ const dNdy = invJ[1][0] * derivatives[i][0] + invJ[1][1] * derivatives[i][1];
159
+ b[0][2 * i] = dNdx;
160
+ b[1][2 * i + 1] = dNdy;
161
+ b[2][2 * i] = dNdy;
162
+ b[2][2 * i + 1] = dNdx;
163
+ }
164
+ const dB = d.map((row) => b[0].map((_, col) => row.reduce((sum, value, r) => sum + value * b[r][col], 0)));
165
+ for (let row = 0; row < 8; row += 1) {
166
+ for (let col = 0; col < 8; col += 1) {
167
+ const value = b.reduce((sum, bRow, r) => sum + bRow[row] * dB[r][col], 0);
168
+ k[row][col] += value * detJ * weight * thicknessM;
169
+ }
170
+ }
171
+ areaM2 += detJ * weight;
172
+ gauss.push({ xi, eta, detJ, b });
173
+ }
174
+ return { stiffness: k, areaM2, gauss };
175
+ }
176
+ export function buildPlaneStrainRectangularMesh(input) {
177
+ assertFinitePositive(input.widthM, 'widthM');
178
+ assertFinitePositive(input.heightM, 'heightM');
179
+ const divisionsX = assertPositiveInteger(input.divisionsX, 'divisionsX');
180
+ const divisionsY = assertPositiveInteger(input.divisionsY, 'divisionsY');
181
+ const materialId = input.materialId ?? 'soil';
182
+ const nodes = [];
183
+ const elements = [];
184
+ const nodeId = (ix, iy) => `n-${ix}-${iy}`;
185
+ for (let iy = 0; iy <= divisionsY; iy += 1) {
186
+ for (let ix = 0; ix <= divisionsX; ix += 1) {
187
+ nodes.push({
188
+ id: nodeId(ix, iy),
189
+ xM: (input.widthM * ix) / divisionsX,
190
+ yM: (input.heightM * iy) / divisionsY,
191
+ });
192
+ }
193
+ }
194
+ for (let iy = 0; iy < divisionsY; iy += 1) {
195
+ for (let ix = 0; ix < divisionsX; ix += 1) {
196
+ elements.push({
197
+ id: `e-${ix}-${iy}`,
198
+ materialId,
199
+ nodeIds: [
200
+ nodeId(ix, iy),
201
+ nodeId(ix + 1, iy),
202
+ nodeId(ix + 1, iy + 1),
203
+ nodeId(ix, iy + 1),
204
+ ],
205
+ });
206
+ }
207
+ }
208
+ return { nodes, elements };
209
+ }
210
+ export function runPlaneStrainQuad4Assembly(model) {
211
+ if (model.schemaVersion !== 'fem-plane-strain-model.v1') {
212
+ throw new Error('Only fem-plane-strain-model.v1 is supported.');
213
+ }
214
+ assertArray(model.nodes, 'nodes');
215
+ assertArray(model.elements, 'elements');
216
+ assertArray(model.materials, 'materials');
217
+ assertArray(model.boundaryConditions, 'boundaryConditions');
218
+ if (model.nodes.length < 4)
219
+ throw new Error('Plane-strain model requires at least four nodes.');
220
+ if (model.elements.length < 1)
221
+ throw new Error('Plane-strain model requires at least one element.');
222
+ if (model.materials.length < 1)
223
+ throw new Error('Plane-strain model requires at least one material.');
224
+ if (model.defaultThicknessM != null)
225
+ assertFinitePositive(model.defaultThicknessM, 'defaultThicknessM');
226
+ if (model.nodalLoads != null)
227
+ assertArray(model.nodalLoads, 'nodalLoads');
228
+ assertUniqueIds(model.nodes, 'node');
229
+ assertUniqueIds(model.materials, 'material');
230
+ assertUniqueIds(model.elements, 'element');
231
+ const policy = model.policy ?? DEFAULT_FEM_CONVERGENCE_POLICY;
232
+ validateConvergencePolicy(policy);
233
+ const nodeIndexById = new Map(model.nodes.map((node, index) => [node.id, index]));
234
+ const materialById = new Map(model.materials.map((material) => [material.id, material]));
235
+ const dofCount = model.nodes.length * 2;
236
+ if (dofCount > MAX_DENSE_DOF_COUNT) {
237
+ throw new Error(`Plane-strain dense assembly is capped at ${MAX_DENSE_DOF_COUNT} DOFs for benchmark-scale evidence runs.`);
238
+ }
239
+ const stiffness = Array.from({ length: dofCount }, () => new Array(dofCount).fill(0));
240
+ const loads = new Array(dofCount).fill(0);
241
+ const elementResults = [];
242
+ for (const node of model.nodes) {
243
+ assertFinite(node.xM, `node ${node.id} xM`);
244
+ assertFinite(node.yM, `node ${node.id} yM`);
245
+ }
246
+ for (const material of model.materials) {
247
+ planeStrainD(material);
248
+ if (material.unitWeightKnM3 != null) {
249
+ assertFiniteNonNegative(material.unitWeightKnM3, `material ${material.id} unitWeightKnM3`);
250
+ }
251
+ }
252
+ for (const load of model.nodalLoads ?? []) {
253
+ const nodeIndex = nodeIndexById.get(load.nodeId);
254
+ if (nodeIndex == null)
255
+ throw new Error(`Unknown nodal load node: ${load.nodeId}.`);
256
+ const fxKn = load.fxKn ?? 0;
257
+ const fyKn = load.fyKn ?? 0;
258
+ assertFinite(fxKn, `nodal load ${load.nodeId}.fxKn`);
259
+ assertFinite(fyKn, `nodal load ${load.nodeId}.fyKn`);
260
+ loads[dofIndex(nodeIndex, 'ux')] += fxKn;
261
+ loads[dofIndex(nodeIndex, 'uy')] += fyKn;
262
+ }
263
+ const elementGaussCache = [];
264
+ for (const element of model.elements) {
265
+ if (!Array.isArray(element.nodeIds) || element.nodeIds.length !== 4) {
266
+ throw new Error(`Plane-strain element ${element.id} must reference exactly four nodes.`);
267
+ }
268
+ if (new Set(element.nodeIds).size !== 4) {
269
+ throw new Error(`Plane-strain element ${element.id} has duplicate node references.`);
270
+ }
271
+ assertNonEmptyId(element.materialId, `element ${element.id} material`);
272
+ const nodeIndices = element.nodeIds.map((id) => {
273
+ const index = nodeIndexById.get(id);
274
+ if (index == null)
275
+ throw new Error(`Unknown element node: ${id}.`);
276
+ return index;
277
+ });
278
+ const material = materialById.get(element.materialId);
279
+ if (!material)
280
+ throw new Error(`Unknown element material: ${element.materialId}.`);
281
+ const thicknessM = element.thicknessM ?? model.defaultThicknessM ?? 1;
282
+ assertFinitePositive(thicknessM, `element ${element.id} thicknessM`);
283
+ const nodes = nodeIndices.map((index) => model.nodes[index]);
284
+ const elementData = elementMatrices({ nodes, material, thicknessM });
285
+ const globalDofs = nodeIndices.flatMap((index) => [dofIndex(index, 'ux'), dofIndex(index, 'uy')]);
286
+ for (let localRow = 0; localRow < 8; localRow += 1) {
287
+ for (let localCol = 0; localCol < 8; localCol += 1) {
288
+ stiffness[globalDofs[localRow]][globalDofs[localCol]] += elementData.stiffness[localRow][localCol];
289
+ }
290
+ }
291
+ elementGaussCache.push({
292
+ element,
293
+ globalDofs,
294
+ gauss: elementData.gauss,
295
+ areaM2: elementData.areaM2,
296
+ thicknessM,
297
+ });
298
+ }
299
+ const prescribed = new Map();
300
+ for (const bc of model.boundaryConditions) {
301
+ const nodeIndex = nodeIndexById.get(bc.nodeId);
302
+ if (nodeIndex == null)
303
+ throw new Error(`Unknown boundary-condition node: ${bc.nodeId}.`);
304
+ if (bc.dof !== 'ux' && bc.dof !== 'uy') {
305
+ throw new Error(`Boundary condition ${bc.nodeId} dof must be ux or uy.`);
306
+ }
307
+ const index = dofIndex(nodeIndex, bc.dof);
308
+ const value = bc.valueM ?? 0;
309
+ assertFinite(value, `boundary condition ${bc.nodeId}.${bc.dof}`);
310
+ const existing = prescribed.get(index);
311
+ if (existing != null && Math.abs(existing - value) > 1e-12) {
312
+ throw new Error(`Conflicting boundary condition for ${bc.nodeId}.${bc.dof}.`);
313
+ }
314
+ prescribed.set(index, value);
315
+ }
316
+ if (prescribed.size === 0)
317
+ throw new Error('Plane-strain model requires at least one displacement boundary condition.');
318
+ const constrainedNodeIds = new Set(model.boundaryConditions.map((bc) => bc.nodeId));
319
+ const hasUxConstraint = model.boundaryConditions.some((bc) => bc.dof === 'ux');
320
+ const hasUyConstraint = model.boundaryConditions.some((bc) => bc.dof === 'uy');
321
+ if (prescribed.size < 3 || constrainedNodeIds.size < 2 || !hasUxConstraint || !hasUyConstraint) {
322
+ throw new Error('Plane-strain model has insufficient displacement constraints to restrain rigid-body modes.');
323
+ }
324
+ const freeDofs = Array.from({ length: dofCount }, (_, index) => index).filter((index) => !prescribed.has(index));
325
+ const displacement = new Array(dofCount).fill(0);
326
+ for (const [index, value] of prescribed)
327
+ displacement[index] = value;
328
+ if (freeDofs.length > 0) {
329
+ const reducedK = freeDofs.map((row) => freeDofs.map((col) => stiffness[row][col]));
330
+ const reducedF = freeDofs.map((row) => loads[row] - [...prescribed.entries()]
331
+ .reduce((sum, [col, value]) => sum + stiffness[row][col] * value, 0));
332
+ const solved = solveDenseLinearSystem(reducedK, reducedF);
333
+ for (const [index, dof] of freeDofs.entries())
334
+ displacement[dof] = solved[index];
335
+ }
336
+ const internal = matVec(stiffness, displacement);
337
+ const residual = internal.map((value, index) => value - loads[index]);
338
+ const maxFreeResidualKn = freeDofs.length > 0
339
+ ? Math.max(...freeDofs.map((index) => Math.abs(residual[index])))
340
+ : 0;
341
+ const loadNorm = Math.max(Math.hypot(...loads), Math.hypot(...internal), Math.hypot(...Array.from(prescribed.keys()).map((index) => residual[index])), 1);
342
+ const residualNormRatio = maxFreeResidualKn / loadNorm;
343
+ const externalLoadSumX = loads.filter((_, index) => index % 2 === 0).reduce((sum, value) => sum + value, 0);
344
+ const externalLoadSumY = loads.filter((_, index) => index % 2 === 1).reduce((sum, value) => sum + value, 0);
345
+ const reactionSumX = Array.from(prescribed.keys())
346
+ .filter((index) => index % 2 === 0)
347
+ .reduce((sum, index) => sum + residual[index], 0);
348
+ const reactionSumY = Array.from(prescribed.keys())
349
+ .filter((index) => index % 2 === 1)
350
+ .reduce((sum, index) => sum + residual[index], 0);
351
+ const balanceError = Math.hypot(reactionSumX + externalLoadSumX, reactionSumY + externalLoadSumY);
352
+ const balanceScale = Math.max(Math.hypot(reactionSumX, reactionSumY), Math.hypot(externalLoadSumX, externalLoadSumY), 1);
353
+ const reactionBalanceRatio = 1 - balanceError / balanceScale;
354
+ const elementOutputs = elementGaussCache.map((entry) => {
355
+ const material = materialById.get(entry.element.materialId);
356
+ const d = planeStrainD(material);
357
+ const elementDisplacement = entry.globalDofs.map((index) => displacement[index]);
358
+ const gaussPoints = entry.gauss.map((point, index) => {
359
+ const strain = point.b.map((row) => row.reduce((sum, value, col) => sum + value * elementDisplacement[col], 0));
360
+ const stress = d.map((row) => row.reduce((sum, value, col) => sum + value * strain[col], 0));
361
+ return {
362
+ elementId: entry.element.id,
363
+ gaussPoint: index + 1,
364
+ xi: round(point.xi, 10),
365
+ eta: round(point.eta, 10),
366
+ detJ: round(point.detJ, 10),
367
+ strain: [round(strain[0], 12), round(strain[1], 12), round(strain[2], 12)],
368
+ stressKpa: [round(stress[0], 8), round(stress[1], 8), round(stress[2], 8)],
369
+ };
370
+ });
371
+ return {
372
+ id: entry.element.id,
373
+ areaM2: round(entry.areaM2, 10),
374
+ thicknessM: round(entry.thicknessM, 10),
375
+ gaussPoints,
376
+ };
377
+ });
378
+ return {
379
+ schemaVersion: 'fem-plane-strain-assembly-result.v1',
380
+ method: 'quad4-plane-strain-linear-elastic-global-assembly',
381
+ nodes: model.nodes.map((node, index) => ({
382
+ ...node,
383
+ uxM: round(displacement[dofIndex(index, 'ux')], 12),
384
+ uyM: round(displacement[dofIndex(index, 'uy')], 12),
385
+ rxnXKn: round(residual[dofIndex(index, 'ux')], 8),
386
+ rxnYKn: round(residual[dofIndex(index, 'uy')], 8),
387
+ })),
388
+ elements: elementOutputs,
389
+ dofCount,
390
+ freeDofCount: freeDofs.length,
391
+ constrainedDofCount: prescribed.size,
392
+ maxFreeResidualKn: round(maxFreeResidualKn, 12),
393
+ residualNormRatio: round(residualNormRatio, 12),
394
+ reactionBalanceRatio: round(reactionBalanceRatio, 12),
395
+ strainEnergyKnM: round(0.5 * dot(displacement, internal), 12),
396
+ converged: residualNormRatio <= policy.forceBalanceTolerance,
397
+ policy,
398
+ };
399
+ }
400
+ //# sourceMappingURL=plane-strain-assembly.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plane-strain-assembly.js","sourceRoot":"","sources":["../../src/fem/plane-strain-assembly.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,7 @@ const ALL_PRODUCTION_FEATURES = [
13
13
  const FEATURE_REQUIREMENTS = {
14
14
  'nonlinear-plasticity': {
15
15
  status: 'kernel-verified',
16
- currentCoverage: 'Deterministic nonlinear material-point coverage now includes a Mohr-Coulomb triaxial strength cap plus a Drucker-Prager/Mohr-Coulomb-compatible principal-stress return-mapping kernel with yield residual and plastic strain state checks. It is not coupled to a global 2D/3D plasticity solver or plastic strain field.',
16
+ currentCoverage: 'Deterministic nonlinear material-point coverage now includes a Mohr-Coulomb triaxial strength cap plus a Drucker-Prager/Mohr-Coulomb-compatible principal-stress return-mapping kernel with yield residual and plastic strain state checks. A linear Quad4 plane-strain global assembly evidence kernel is also patch-tested, but nonlinear constitutive updates are not coupled to a global 2D/3D plasticity solver or plastic strain field.',
17
17
  requiredForAcceptance: [
18
18
  'constitutive models accepted for geotechnical use, such as Mohr-Coulomb/Hardening Soil or equivalent',
19
19
  'stress-path, yield, plastic strain, and convergence validation fixtures',
@@ -97,7 +97,7 @@ const FEATURE_REQUIREMENTS = {
97
97
  },
98
98
  'independent-benchmark-validation': {
99
99
  status: 'preview-only',
100
- currentCoverage: 'Current fixtures verify deterministic preview envelopes and monotonic trends, not full production benchmark equivalence.',
100
+ currentCoverage: 'Current fixtures verify deterministic preview envelopes, monotonic trends, material-point closed forms, and a Quad4 plane-strain affine patch/global-equilibrium fixture. They do not yet prove full production benchmark equivalence against published or commercial solver references.',
101
101
  requiredForAcceptance: [
102
102
  'published analytical and numerical benchmark corpus by route',
103
103
  'tolerance envelopes for displacement, pore pressure, reaction, and settlement-time curves',
@@ -1 +1 @@
1
- {"version":3,"file":"production-readiness.js","sourceRoot":"","sources":["../../src/fem/production-readiness.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"production-readiness.js","sourceRoot":"","sources":["../../src/fem/production-readiness.ts"],"names":[],"mappings":"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"}