@geotechcli/core 0.4.54 → 0.4.56
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.
- package/dist/agents/fem-tools.d.ts +2 -0
- package/dist/agents/fem-tools.d.ts.map +1 -0
- package/dist/agents/fem-tools.js +157 -0
- package/dist/agents/fem-tools.js.map +1 -0
- package/dist/agents/provider-operating-contract.js +3 -2
- package/dist/agents/provider-operating-contract.js.map +1 -1
- package/dist/agents/runtime-bootstrap.d.ts +1 -0
- package/dist/agents/runtime-bootstrap.d.ts.map +1 -1
- package/dist/agents/runtime-bootstrap.js +1 -0
- package/dist/agents/runtime-bootstrap.js.map +1 -1
- package/dist/agents/swarm-planner.js +3 -3
- package/dist/agents/swarm-planner.js.map +1 -1
- package/dist/agents/swarm.d.ts.map +1 -1
- package/dist/agents/swarm.js +8 -0
- package/dist/agents/swarm.js.map +1 -1
- package/dist/fem/demo.d.ts +4 -0
- package/dist/fem/demo.d.ts.map +1 -0
- package/dist/fem/demo.js +274 -0
- package/dist/fem/demo.js.map +1 -0
- package/dist/fem/index.d.ts +6 -0
- package/dist/fem/index.d.ts.map +1 -0
- package/dist/fem/index.js +6 -0
- package/dist/fem/index.js.map +1 -0
- package/dist/fem/routing.d.ts +62 -0
- package/dist/fem/routing.d.ts.map +1 -0
- package/dist/fem/routing.js +202 -0
- package/dist/fem/routing.js.map +1 -0
- package/dist/fem/types.d.ts +154 -0
- package/dist/fem/types.d.ts.map +1 -0
- package/dist/fem/types.js +2 -0
- package/dist/fem/types.js.map +1 -0
- package/dist/fem/validation.d.ts +4 -0
- package/dist/fem/validation.d.ts.map +1 -0
- package/dist/fem/validation.js +195 -0
- package/dist/fem/validation.js.map +1 -0
- package/dist/fem/webgl.d.ts +3 -0
- package/dist/fem/webgl.d.ts.map +1 -0
- package/dist/fem/webgl.js +120 -0
- package/dist/fem/webgl.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/ingest/document-evidence-packet.d.ts +32 -32
- package/dist/meta/metadata.json +1 -1
- package/dist/verifier/findings.d.ts +1 -1
- package/dist/verifier/findings.d.ts.map +1 -1
- package/dist/verifier/findings.js +46 -0
- package/dist/verifier/findings.js.map +1 -1
- package/package.json +1 -1
package/dist/fem/demo.js
ADDED
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import { validateFemAnalysisCase } from './validation.js';
|
|
2
|
+
const DEFAULT_UNITS = {
|
|
3
|
+
length: 'm',
|
|
4
|
+
force: 'kN',
|
|
5
|
+
stress: 'kPa',
|
|
6
|
+
density: 'kN/m3',
|
|
7
|
+
displacement: 'mm',
|
|
8
|
+
};
|
|
9
|
+
function round(value, digits = 3) {
|
|
10
|
+
const factor = 10 ** digits;
|
|
11
|
+
return Math.round(value * factor) / factor;
|
|
12
|
+
}
|
|
13
|
+
function settlementColor(t) {
|
|
14
|
+
const stops = [
|
|
15
|
+
[43, 62, 154],
|
|
16
|
+
[47, 107, 205],
|
|
17
|
+
[56, 170, 210],
|
|
18
|
+
[80, 200, 120],
|
|
19
|
+
[235, 210, 75],
|
|
20
|
+
[220, 83, 44],
|
|
21
|
+
[170, 25, 55],
|
|
22
|
+
];
|
|
23
|
+
const scaled = Math.min(Math.max(t, 0), 1) * (stops.length - 1);
|
|
24
|
+
const left = Math.floor(scaled);
|
|
25
|
+
const right = Math.min(left + 1, stops.length - 1);
|
|
26
|
+
const local = scaled - left;
|
|
27
|
+
return [0, 1, 2].map((index) => {
|
|
28
|
+
const value = stops[left][index] + (stops[right][index] - stops[left][index]) * local;
|
|
29
|
+
return round(value / 255, 4);
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
export function buildRaftDemoAnalysisCase(now = new Date('2026-05-16T00:00:00.000Z')) {
|
|
33
|
+
const assumptions = [
|
|
34
|
+
{
|
|
35
|
+
id: 'linear-elastic-screening',
|
|
36
|
+
parameter: 'soil constitutive behavior',
|
|
37
|
+
value: 'linear elastic, drained, small strain',
|
|
38
|
+
basis: 'Experimental offline demonstration for WebGL/FEM workflow validation.',
|
|
39
|
+
confidence: 'review',
|
|
40
|
+
reviewRequired: true,
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
id: 'poisson-ratio',
|
|
44
|
+
parameter: 'nu',
|
|
45
|
+
value: 0.3,
|
|
46
|
+
unit: '-',
|
|
47
|
+
basis: 'Typical preliminary drained elastic screening value.',
|
|
48
|
+
confidence: 'review',
|
|
49
|
+
reviewRequired: true,
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
id: 'groundwater-not-modelled',
|
|
53
|
+
parameter: 'groundwater',
|
|
54
|
+
value: 'not modelled',
|
|
55
|
+
basis: 'Phase 0 FEM demo excludes pore pressure and consolidation coupling.',
|
|
56
|
+
confidence: 'review',
|
|
57
|
+
reviewRequired: true,
|
|
58
|
+
},
|
|
59
|
+
];
|
|
60
|
+
return {
|
|
61
|
+
schemaVersion: 'fem-analysis-case.v0',
|
|
62
|
+
caseId: 'raft-settlement-demo',
|
|
63
|
+
title: 'Experimental 3D FEM raft settlement demo',
|
|
64
|
+
createdBy: 'geotechcli-fem-demo',
|
|
65
|
+
createdAt: now.toISOString(),
|
|
66
|
+
experimental: true,
|
|
67
|
+
objective: 'foundation_settlement',
|
|
68
|
+
analysisType: 'static_3d_small_strain',
|
|
69
|
+
units: DEFAULT_UNITS,
|
|
70
|
+
geometry: {
|
|
71
|
+
domain: {
|
|
72
|
+
type: 'box',
|
|
73
|
+
lengthM: 24,
|
|
74
|
+
widthM: 24,
|
|
75
|
+
depthM: 12,
|
|
76
|
+
},
|
|
77
|
+
raft: {
|
|
78
|
+
type: 'raft',
|
|
79
|
+
lengthM: 8,
|
|
80
|
+
widthM: 8,
|
|
81
|
+
thicknessM: 0.6,
|
|
82
|
+
centerXM: 0,
|
|
83
|
+
centerYM: 0,
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
materials: [
|
|
87
|
+
{
|
|
88
|
+
id: 'soil-1',
|
|
89
|
+
name: 'Representative elastic soil',
|
|
90
|
+
model: 'linear_elastic',
|
|
91
|
+
elasticModulusKpa: 50000,
|
|
92
|
+
poissonRatio: 0.3,
|
|
93
|
+
unitWeightKnM3: 18,
|
|
94
|
+
evidenceRefs: [],
|
|
95
|
+
assumptions,
|
|
96
|
+
},
|
|
97
|
+
],
|
|
98
|
+
loads: [
|
|
99
|
+
{
|
|
100
|
+
id: 'raft-pressure',
|
|
101
|
+
type: 'uniform_pressure',
|
|
102
|
+
target: 'raft',
|
|
103
|
+
pressureKpa: 150,
|
|
104
|
+
evidenceRefs: [],
|
|
105
|
+
assumptions: [
|
|
106
|
+
{
|
|
107
|
+
id: 'service-pressure',
|
|
108
|
+
parameter: 'raft service pressure',
|
|
109
|
+
value: 150,
|
|
110
|
+
unit: 'kPa',
|
|
111
|
+
basis: 'Representative load for the experimental demo.',
|
|
112
|
+
confidence: 'review',
|
|
113
|
+
reviewRequired: true,
|
|
114
|
+
},
|
|
115
|
+
],
|
|
116
|
+
},
|
|
117
|
+
],
|
|
118
|
+
boundaryConditions: [
|
|
119
|
+
{
|
|
120
|
+
id: 'base-fixed',
|
|
121
|
+
type: 'fixed_base',
|
|
122
|
+
description: 'Base nodes fixed in all translations.',
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
id: 'side-rollers',
|
|
126
|
+
type: 'side_rollers',
|
|
127
|
+
description: 'Side boundaries use normal-displacement rollers.',
|
|
128
|
+
},
|
|
129
|
+
],
|
|
130
|
+
mesh: {
|
|
131
|
+
elementType: 'hex8',
|
|
132
|
+
divisionsX: 12,
|
|
133
|
+
divisionsY: 12,
|
|
134
|
+
divisionsZ: 6,
|
|
135
|
+
},
|
|
136
|
+
groundwater: {
|
|
137
|
+
condition: 'not_modelled',
|
|
138
|
+
note: 'Groundwater and pore-pressure coupling are not included in this experimental demo.',
|
|
139
|
+
reviewRequired: true,
|
|
140
|
+
},
|
|
141
|
+
assumptions,
|
|
142
|
+
evidenceRefs: [],
|
|
143
|
+
limitations: [
|
|
144
|
+
'Experimental screening demo only; not a design model.',
|
|
145
|
+
'Linear elastic small-strain response only.',
|
|
146
|
+
'No plasticity, consolidation, pore-pressure coupling, or construction staging.',
|
|
147
|
+
'Settlement field is generated by a deterministic built-in elastic influence approximation for viewer and workflow validation.',
|
|
148
|
+
],
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
function buildVisualizationMesh(caseFile, maxSettlementMm) {
|
|
152
|
+
const { domain, raft } = caseFile.geometry;
|
|
153
|
+
const nx = caseFile.mesh.divisionsX;
|
|
154
|
+
const ny = caseFile.mesh.divisionsY;
|
|
155
|
+
const base = [];
|
|
156
|
+
const disp = [];
|
|
157
|
+
const color = [];
|
|
158
|
+
const tri = [];
|
|
159
|
+
const edge = [];
|
|
160
|
+
const sigma = Math.max(raft.lengthM, raft.widthM) * 0.62;
|
|
161
|
+
for (let iy = 0; iy <= ny; iy += 1) {
|
|
162
|
+
const y = -domain.widthM / 2 + (domain.widthM * iy) / ny;
|
|
163
|
+
for (let ix = 0; ix <= nx; ix += 1) {
|
|
164
|
+
const x = -domain.lengthM / 2 + (domain.lengthM * ix) / nx;
|
|
165
|
+
const dx = x - raft.centerXM;
|
|
166
|
+
const dy = y - raft.centerYM;
|
|
167
|
+
const radial = Math.sqrt(dx * dx + dy * dy);
|
|
168
|
+
const edgeBoost = Math.abs(dx) <= raft.lengthM / 2 && Math.abs(dy) <= raft.widthM / 2 ? 1 : 0.88;
|
|
169
|
+
const settlementMm = maxSettlementMm * Math.exp(-(radial * radial) / (2 * sigma * sigma)) * edgeBoost;
|
|
170
|
+
const normalized = settlementMm / maxSettlementMm;
|
|
171
|
+
const [r, g, b] = settlementColor(normalized);
|
|
172
|
+
base.push(round(x), round(y), 0);
|
|
173
|
+
disp.push(0, 0, round(-settlementMm / 1000, 6));
|
|
174
|
+
color.push(r, g, b);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
const idx = (ix, iy) => iy * (nx + 1) + ix;
|
|
178
|
+
for (let iy = 0; iy < ny; iy += 1) {
|
|
179
|
+
for (let ix = 0; ix < nx; ix += 1) {
|
|
180
|
+
const a = idx(ix, iy);
|
|
181
|
+
const b = idx(ix + 1, iy);
|
|
182
|
+
const c = idx(ix + 1, iy + 1);
|
|
183
|
+
const d = idx(ix, iy + 1);
|
|
184
|
+
tri.push(a, b, c, a, c, d);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
for (let iy = 0; iy <= ny; iy += 1) {
|
|
188
|
+
for (let ix = 0; ix < nx; ix += 1) {
|
|
189
|
+
edge.push(idx(ix, iy), idx(ix + 1, iy));
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
for (let ix = 0; ix <= nx; ix += 1) {
|
|
193
|
+
for (let iy = 0; iy < ny; iy += 1) {
|
|
194
|
+
edge.push(idx(ix, iy), idx(ix, iy + 1));
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
const z = 0.03;
|
|
198
|
+
const halfL = raft.lengthM / 2;
|
|
199
|
+
const halfW = raft.widthM / 2;
|
|
200
|
+
return {
|
|
201
|
+
base,
|
|
202
|
+
disp,
|
|
203
|
+
color,
|
|
204
|
+
tri,
|
|
205
|
+
edge,
|
|
206
|
+
outlineBase: [
|
|
207
|
+
-halfL, -halfW, z,
|
|
208
|
+
halfL, -halfW, z,
|
|
209
|
+
halfL, halfW, z,
|
|
210
|
+
-halfL, halfW, z,
|
|
211
|
+
],
|
|
212
|
+
outlineDisp: new Array(12).fill(0),
|
|
213
|
+
outlineIdx: [0, 1, 1, 2, 2, 3, 3, 0],
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
export function runBuiltinElasticRaftDemo(caseFile = buildRaftDemoAnalysisCase()) {
|
|
217
|
+
const validation = validateFemAnalysisCase(caseFile);
|
|
218
|
+
const material = caseFile.materials[0];
|
|
219
|
+
const load = caseFile.loads[0];
|
|
220
|
+
if (!material || !load) {
|
|
221
|
+
throw new Error('Raft demo requires one material and one pressure load.');
|
|
222
|
+
}
|
|
223
|
+
if (validation.status === 'blocked') {
|
|
224
|
+
throw new Error(`FEM case is blocked: ${validation.findings.map((item) => item.message).join('; ')}`);
|
|
225
|
+
}
|
|
226
|
+
const raft = caseFile.geometry.raft;
|
|
227
|
+
const loadedArea = raft.lengthM * raft.widthM;
|
|
228
|
+
const totalLoadKn = load.pressureKpa * loadedArea;
|
|
229
|
+
const stiffnessSettlementM = (load.pressureKpa * Math.min(raft.lengthM, raft.widthM) * (1 - material.poissonRatio ** 2)) /
|
|
230
|
+
material.elasticModulusKpa;
|
|
231
|
+
const maxSettlementMm = round(stiffnessSettlementM * 1000 * 0.82, 3);
|
|
232
|
+
const visualization = buildVisualizationMesh(caseFile, maxSettlementMm);
|
|
233
|
+
const surfaceSettlements = visualization.disp
|
|
234
|
+
.filter((_, index) => index % 3 === 2)
|
|
235
|
+
.map((value) => Math.abs(value * 1000));
|
|
236
|
+
const minSettlementMm = round(Math.min(...surfaceSettlements), 3);
|
|
237
|
+
return {
|
|
238
|
+
schemaVersion: 'fem-result-manifest.v0',
|
|
239
|
+
caseId: caseFile.caseId,
|
|
240
|
+
title: caseFile.title,
|
|
241
|
+
generatedAt: new Date().toISOString(),
|
|
242
|
+
backend: {
|
|
243
|
+
id: 'builtin-elastic3d-demo',
|
|
244
|
+
label: 'Built-in experimental elastic 3D screening demo',
|
|
245
|
+
deterministic: true,
|
|
246
|
+
version: '0.1.0',
|
|
247
|
+
},
|
|
248
|
+
analysisCase: caseFile,
|
|
249
|
+
validation,
|
|
250
|
+
mesh: {
|
|
251
|
+
nodes: (caseFile.mesh.divisionsX + 1) * (caseFile.mesh.divisionsY + 1) * (caseFile.mesh.divisionsZ + 1),
|
|
252
|
+
elements: caseFile.mesh.divisionsX * caseFile.mesh.divisionsY * caseFile.mesh.divisionsZ,
|
|
253
|
+
elementType: caseFile.mesh.elementType,
|
|
254
|
+
divisions: [caseFile.mesh.divisionsX, caseFile.mesh.divisionsY, caseFile.mesh.divisionsZ],
|
|
255
|
+
visualizationNodes: visualization.base.length / 3,
|
|
256
|
+
visualizationTriangles: visualization.tri.length / 3,
|
|
257
|
+
visualizationEdges: visualization.edge.length / 2,
|
|
258
|
+
},
|
|
259
|
+
envelope: {
|
|
260
|
+
maxSettlementMm,
|
|
261
|
+
minSettlementMm,
|
|
262
|
+
totalLoadKn: round(totalLoadKn, 3),
|
|
263
|
+
reactionKn: round(totalLoadKn, 3),
|
|
264
|
+
reactionBalanceRatio: 1,
|
|
265
|
+
},
|
|
266
|
+
visualization,
|
|
267
|
+
assumptions: [
|
|
268
|
+
...caseFile.assumptions,
|
|
269
|
+
...caseFile.loads.flatMap((item) => item.assumptions),
|
|
270
|
+
],
|
|
271
|
+
limitations: caseFile.limitations,
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=demo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demo.js","sourceRoot":"","sources":["../../src/fem/demo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export * from './types.js';
|
|
2
|
+
export { buildRaftDemoAnalysisCase, runBuiltinElasticRaftDemo } from './demo.js';
|
|
3
|
+
export { getFemCapability, listFemCapabilities, prepareFemAnalysisCaseDraft, type FemAnalysisCaseDraft, type FemCapability, type FemCapabilityStatus, type FemRouteObjective, } from './routing.js';
|
|
4
|
+
export { validateFemAnalysisCase, validateFemResultManifest } from './validation.js';
|
|
5
|
+
export { renderFemWebglHtml } from './webgl.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fem/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AACjF,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,2BAA2B,EAC3B,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,GACvB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export * from './types.js';
|
|
2
|
+
export { buildRaftDemoAnalysisCase, runBuiltinElasticRaftDemo } from './demo.js';
|
|
3
|
+
export { getFemCapability, listFemCapabilities, prepareFemAnalysisCaseDraft, } from './routing.js';
|
|
4
|
+
export { validateFemAnalysisCase, validateFemResultManifest } from './validation.js';
|
|
5
|
+
export { renderFemWebglHtml } from './webgl.js';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fem/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AACjF,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,2BAA2B,GAK5B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { FemAnalysisCase, FemAssumption, FemEvidenceRef, FemValidationSummary } from './types.js';
|
|
2
|
+
export type FemRouteObjective = 'foundation-settlement' | 'excavation-deformation' | 'shaft-deformation' | 'tunnel-volume-loss-settlement' | 'pile-group-elastic-interaction';
|
|
3
|
+
export type FemCapabilityStatus = 'implemented-demo' | 'contract-draft' | 'planned';
|
|
4
|
+
export interface FemCapability {
|
|
5
|
+
objective: FemRouteObjective;
|
|
6
|
+
label: string;
|
|
7
|
+
status: FemCapabilityStatus;
|
|
8
|
+
analysisType: string;
|
|
9
|
+
deterministicBackend: string | null;
|
|
10
|
+
description: string;
|
|
11
|
+
requiredEvidence: string[];
|
|
12
|
+
requiredUserInputs: string[];
|
|
13
|
+
visualizationFields: string[];
|
|
14
|
+
reviewGates: string[];
|
|
15
|
+
limitations: string[];
|
|
16
|
+
command?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface PrepareFemAnalysisCaseDraftInput {
|
|
19
|
+
objective: FemRouteObjective;
|
|
20
|
+
useDemoDefaults?: boolean;
|
|
21
|
+
geometry?: {
|
|
22
|
+
raftLengthM?: number;
|
|
23
|
+
raftWidthM?: number;
|
|
24
|
+
raftThicknessM?: number;
|
|
25
|
+
domainLengthM?: number;
|
|
26
|
+
domainWidthM?: number;
|
|
27
|
+
domainDepthM?: number;
|
|
28
|
+
};
|
|
29
|
+
load?: {
|
|
30
|
+
pressureKpa?: number;
|
|
31
|
+
};
|
|
32
|
+
material?: {
|
|
33
|
+
elasticModulusKpa?: number;
|
|
34
|
+
poissonRatio?: number;
|
|
35
|
+
unitWeightKnM3?: number;
|
|
36
|
+
};
|
|
37
|
+
groundwater?: {
|
|
38
|
+
condition?: 'not_modelled' | 'below_domain' | 'specified';
|
|
39
|
+
depthM?: number;
|
|
40
|
+
note?: string;
|
|
41
|
+
};
|
|
42
|
+
evidenceRefs?: FemEvidenceRef[];
|
|
43
|
+
}
|
|
44
|
+
export interface FemAnalysisCaseDraft {
|
|
45
|
+
schemaVersion: 'fem-analysis-case-draft.v1';
|
|
46
|
+
objective: FemRouteObjective;
|
|
47
|
+
capability: FemCapability;
|
|
48
|
+
implemented: boolean;
|
|
49
|
+
canAutoProceed: false;
|
|
50
|
+
recommendedAction: 'run-experimental-demo' | 'collect-inputs' | 'contract-only';
|
|
51
|
+
missingUserInputs: string[];
|
|
52
|
+
assumptions: FemAssumption[];
|
|
53
|
+
reviewGates: string[];
|
|
54
|
+
evidenceRefs: FemEvidenceRef[];
|
|
55
|
+
analysisCase?: FemAnalysisCase;
|
|
56
|
+
validation?: FemValidationSummary;
|
|
57
|
+
recommendedCommand?: string;
|
|
58
|
+
}
|
|
59
|
+
export declare function listFemCapabilities(objective?: FemRouteObjective): FemCapability[];
|
|
60
|
+
export declare function getFemCapability(objective: FemRouteObjective): FemCapability | undefined;
|
|
61
|
+
export declare function prepareFemAnalysisCaseDraft(input: PrepareFemAnalysisCaseDraftInput): FemAnalysisCaseDraft;
|
|
62
|
+
//# sourceMappingURL=routing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../../src/fem/routing.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,eAAe,EACf,aAAa,EACb,cAAc,EACd,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAGpB,MAAM,MAAM,iBAAiB,GACzB,uBAAuB,GACvB,wBAAwB,GACxB,mBAAmB,GACnB,+BAA+B,GAC/B,gCAAgC,CAAC;AAErC,MAAM,MAAM,mBAAmB,GAAG,kBAAkB,GAAG,gBAAgB,GAAG,SAAS,CAAC;AAEpF,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,iBAAiB,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,mBAAmB,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gCAAgC;IAC/C,SAAS,EAAE,iBAAiB,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE;QACT,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,IAAI,CAAC,EAAE;QACL,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,WAAW,CAAC,EAAE;QACZ,SAAS,CAAC,EAAE,cAAc,GAAG,cAAc,GAAG,WAAW,CAAC;QAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,YAAY,CAAC,EAAE,cAAc,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,4BAA4B,CAAC;IAC5C,SAAS,EAAE,iBAAiB,CAAC;IAC7B,UAAU,EAAE,aAAa,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,KAAK,CAAC;IACtB,iBAAiB,EAAE,uBAAuB,GAAG,gBAAgB,GAAG,eAAe,CAAC;IAChF,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,WAAW,EAAE,aAAa,EAAE,CAAC;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,YAAY,CAAC,EAAE,eAAe,CAAC;IAC/B,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAClC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAiFD,wBAAgB,mBAAmB,CAAC,SAAS,CAAC,EAAE,iBAAiB,GAAG,aAAa,EAAE,CAElF;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,iBAAiB,GAAG,aAAa,GAAG,SAAS,CAExF;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,gCAAgC,GAAG,oBAAoB,CAsHzG"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { buildRaftDemoAnalysisCase, } from './demo.js';
|
|
2
|
+
import { validateFemAnalysisCase } from './validation.js';
|
|
3
|
+
const CAPABILITIES = [
|
|
4
|
+
{
|
|
5
|
+
objective: 'foundation-settlement',
|
|
6
|
+
label: 'Foundation / raft settlement preview',
|
|
7
|
+
status: 'implemented-demo',
|
|
8
|
+
analysisType: 'static_3d_small_strain',
|
|
9
|
+
deterministicBackend: 'builtin-elastic3d-demo',
|
|
10
|
+
description: 'Experimental deterministic 3D elastic settlement preview for a uniformly loaded raft.',
|
|
11
|
+
requiredEvidence: ['GroundModel strata', 'elastic modulus or SPT/lab correlation basis', 'unit weight', 'groundwater assumption'],
|
|
12
|
+
requiredUserInputs: ['raft length', 'raft width', 'service pressure', 'foundation level / embedment'],
|
|
13
|
+
visualizationFields: ['vertical displacement', 'settlement basin', 'mesh wireframe', 'load patch'],
|
|
14
|
+
reviewGates: ['experimental-only', 'linear-elastic-only', 'groundwater-not-coupled', 'not-design-calculation'],
|
|
15
|
+
limitations: ['No plasticity, consolidation, construction staging, or pore pressure coupling.'],
|
|
16
|
+
command: 'geotech fem demo raft --experimental',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
objective: 'excavation-deformation',
|
|
20
|
+
label: 'Staged excavation deformation preview',
|
|
21
|
+
status: 'contract-draft',
|
|
22
|
+
analysisType: 'static_3d_staged_elastic',
|
|
23
|
+
deterministicBackend: null,
|
|
24
|
+
description: 'Planned staged excavation preview for settlement trough, wall deflection proxy, and support reaction review.',
|
|
25
|
+
requiredEvidence: ['stratigraphy', 'groundwater condition', 'wall geometry', 'support levels', 'elastic stiffness basis'],
|
|
26
|
+
requiredUserInputs: ['excavation length', 'excavation width', 'final depth', 'stage depths', 'wall/support assumptions'],
|
|
27
|
+
visualizationFields: ['surface settlement', 'horizontal displacement', 'wall deflection proxy', 'stage slider', 'support overlays'],
|
|
28
|
+
reviewGates: ['contract-only', 'unsupported-wall-design', 'groundwater-coupling-required-review', 'not-basal-heave-verification'],
|
|
29
|
+
limitations: ['No wall design, basal heave design, seepage, consolidation, or nonlinear soil response.'],
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
objective: 'shaft-deformation',
|
|
33
|
+
label: 'Shaft / pit deformation preview',
|
|
34
|
+
status: 'planned',
|
|
35
|
+
analysisType: 'static_3d_staged_elastic',
|
|
36
|
+
deterministicBackend: null,
|
|
37
|
+
description: 'Planned circular or polygonal shaft deformation preview using the staged excavation contract.',
|
|
38
|
+
requiredEvidence: ['shaft geometry', 'stratigraphy', 'groundwater condition', 'support assumptions'],
|
|
39
|
+
requiredUserInputs: ['shaft diameter/shape', 'final depth', 'support sequence', 'groundwater handling'],
|
|
40
|
+
visualizationFields: ['radial ground movement', 'surface settlement', 'support reaction proxy'],
|
|
41
|
+
reviewGates: ['planned-only', 'not-design-calculation'],
|
|
42
|
+
limitations: ['No production solver or code acceptance check is available yet.'],
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
objective: 'tunnel-volume-loss-settlement',
|
|
46
|
+
label: 'Tunnel volume-loss settlement preview',
|
|
47
|
+
status: 'planned',
|
|
48
|
+
analysisType: 'empirical_3d_settlement_surface',
|
|
49
|
+
deterministicBackend: null,
|
|
50
|
+
description: 'Planned deterministic 3D settlement surface from prescribed tunnel volume loss.',
|
|
51
|
+
requiredEvidence: ['tunnel geometry', 'cover depth', 'ground class', 'volume-loss assumption'],
|
|
52
|
+
requiredUserInputs: ['diameter', 'axis depth', 'alignment', 'volume loss', 'trough width parameter'],
|
|
53
|
+
visualizationFields: ['settlement trough', 'building influence corridor', 'alignment overlay'],
|
|
54
|
+
reviewGates: ['planned-only', 'volume-loss-assumption-review', 'not-fem-solver'],
|
|
55
|
+
limitations: ['Empirical preview only; not a tunnel lining or ground loss design model.'],
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
objective: 'pile-group-elastic-interaction',
|
|
59
|
+
label: 'Pile group elastic interaction preview',
|
|
60
|
+
status: 'planned',
|
|
61
|
+
analysisType: 'static_3d_soil_structure_screening',
|
|
62
|
+
deterministicBackend: null,
|
|
63
|
+
description: 'Planned pile group displacement and interaction preview after pile/soil spring contracts are stable.',
|
|
64
|
+
requiredEvidence: ['pile layout', 'pile geometry', 'stratigraphy', 'stiffness/capacity basis'],
|
|
65
|
+
requiredUserInputs: ['pile diameter', 'pile length', 'pile spacing', 'load case', 'pile head condition'],
|
|
66
|
+
visualizationFields: ['pile head settlement', 'interaction contours', 'load share proxy'],
|
|
67
|
+
reviewGates: ['planned-only', 'pile-soil-interface-review', 'not-design-calculation'],
|
|
68
|
+
limitations: ['No pile group solver or code acceptance check is available yet.'],
|
|
69
|
+
},
|
|
70
|
+
];
|
|
71
|
+
function finitePositive(value) {
|
|
72
|
+
return typeof value === 'number' && Number.isFinite(value) && value > 0;
|
|
73
|
+
}
|
|
74
|
+
function requirePositive(value, label, missing) {
|
|
75
|
+
if (finitePositive(value))
|
|
76
|
+
return value;
|
|
77
|
+
missing.push(label);
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
export function listFemCapabilities(objective) {
|
|
81
|
+
return CAPABILITIES.filter((capability) => objective == null || capability.objective === objective);
|
|
82
|
+
}
|
|
83
|
+
export function getFemCapability(objective) {
|
|
84
|
+
return CAPABILITIES.find((capability) => capability.objective === objective);
|
|
85
|
+
}
|
|
86
|
+
export function prepareFemAnalysisCaseDraft(input) {
|
|
87
|
+
const capability = getFemCapability(input.objective);
|
|
88
|
+
if (!capability) {
|
|
89
|
+
return {
|
|
90
|
+
schemaVersion: 'fem-analysis-case-draft.v1',
|
|
91
|
+
objective: input.objective,
|
|
92
|
+
capability: {
|
|
93
|
+
objective: input.objective,
|
|
94
|
+
label: 'Unknown FEM route',
|
|
95
|
+
status: 'planned',
|
|
96
|
+
analysisType: 'unknown',
|
|
97
|
+
deterministicBackend: null,
|
|
98
|
+
description: 'The requested FEM route is not registered in geotechCLI.',
|
|
99
|
+
requiredEvidence: [],
|
|
100
|
+
requiredUserInputs: [],
|
|
101
|
+
visualizationFields: [],
|
|
102
|
+
reviewGates: ['unknown-fem-route'],
|
|
103
|
+
limitations: ['No FEM contract exists for this route.'],
|
|
104
|
+
},
|
|
105
|
+
implemented: false,
|
|
106
|
+
canAutoProceed: false,
|
|
107
|
+
recommendedAction: 'contract-only',
|
|
108
|
+
missingUserInputs: ['supported FEM objective'],
|
|
109
|
+
assumptions: [],
|
|
110
|
+
reviewGates: ['unknown-fem-route'],
|
|
111
|
+
evidenceRefs: input.evidenceRefs ?? [],
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
if (capability.objective !== 'foundation-settlement') {
|
|
115
|
+
return {
|
|
116
|
+
schemaVersion: 'fem-analysis-case-draft.v1',
|
|
117
|
+
objective: capability.objective,
|
|
118
|
+
capability,
|
|
119
|
+
implemented: false,
|
|
120
|
+
canAutoProceed: false,
|
|
121
|
+
recommendedAction: 'contract-only',
|
|
122
|
+
missingUserInputs: capability.requiredUserInputs,
|
|
123
|
+
assumptions: [],
|
|
124
|
+
reviewGates: capability.reviewGates,
|
|
125
|
+
evidenceRefs: input.evidenceRefs ?? [],
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
const missing = [];
|
|
129
|
+
const useDemoDefaults = input.useDemoDefaults === true;
|
|
130
|
+
const raftLengthM = input.geometry?.raftLengthM ?? (useDemoDefaults ? 8 : undefined);
|
|
131
|
+
const raftWidthM = input.geometry?.raftWidthM ?? (useDemoDefaults ? 8 : undefined);
|
|
132
|
+
const pressureKpa = input.load?.pressureKpa ?? (useDemoDefaults ? 150 : undefined);
|
|
133
|
+
const checkedRaftLengthM = requirePositive(raftLengthM, 'raft length', missing);
|
|
134
|
+
const checkedRaftWidthM = requirePositive(raftWidthM, 'raft width', missing);
|
|
135
|
+
const checkedPressureKpa = requirePositive(pressureKpa, 'service pressure', missing);
|
|
136
|
+
if (!checkedRaftLengthM || !checkedRaftWidthM || !checkedPressureKpa) {
|
|
137
|
+
return {
|
|
138
|
+
schemaVersion: 'fem-analysis-case-draft.v1',
|
|
139
|
+
objective: capability.objective,
|
|
140
|
+
capability,
|
|
141
|
+
implemented: true,
|
|
142
|
+
canAutoProceed: false,
|
|
143
|
+
recommendedAction: 'collect-inputs',
|
|
144
|
+
missingUserInputs: missing,
|
|
145
|
+
assumptions: [],
|
|
146
|
+
reviewGates: ['missing-user-inputs', ...capability.reviewGates],
|
|
147
|
+
evidenceRefs: input.evidenceRefs ?? [],
|
|
148
|
+
recommendedCommand: capability.command,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
const analysisCase = buildRaftDemoAnalysisCase();
|
|
152
|
+
analysisCase.caseId = 'raft-settlement-draft';
|
|
153
|
+
analysisCase.title = 'Experimental 3D FEM raft settlement draft';
|
|
154
|
+
analysisCase.createdBy = 'geotechcli-fem-routing';
|
|
155
|
+
analysisCase.geometry.raft.lengthM = checkedRaftLengthM;
|
|
156
|
+
analysisCase.geometry.raft.widthM = checkedRaftWidthM;
|
|
157
|
+
analysisCase.geometry.raft.thicknessM = input.geometry?.raftThicknessM ?? analysisCase.geometry.raft.thicknessM;
|
|
158
|
+
analysisCase.geometry.domain.lengthM = input.geometry?.domainLengthM ?? Math.max(checkedRaftLengthM * 3, analysisCase.geometry.domain.lengthM);
|
|
159
|
+
analysisCase.geometry.domain.widthM = input.geometry?.domainWidthM ?? Math.max(checkedRaftWidthM * 3, analysisCase.geometry.domain.widthM);
|
|
160
|
+
analysisCase.geometry.domain.depthM = input.geometry?.domainDepthM ?? Math.max(checkedRaftLengthM, checkedRaftWidthM, analysisCase.geometry.domain.depthM);
|
|
161
|
+
analysisCase.loads[0].pressureKpa = checkedPressureKpa;
|
|
162
|
+
analysisCase.evidenceRefs = input.evidenceRefs ?? [];
|
|
163
|
+
analysisCase.materials[0].evidenceRefs = input.evidenceRefs ?? [];
|
|
164
|
+
if (finitePositive(input.material?.elasticModulusKpa))
|
|
165
|
+
analysisCase.materials[0].elasticModulusKpa = input.material.elasticModulusKpa;
|
|
166
|
+
if (typeof input.material?.poissonRatio === 'number')
|
|
167
|
+
analysisCase.materials[0].poissonRatio = input.material.poissonRatio;
|
|
168
|
+
if (finitePositive(input.material?.unitWeightKnM3))
|
|
169
|
+
analysisCase.materials[0].unitWeightKnM3 = input.material.unitWeightKnM3;
|
|
170
|
+
if (input.groundwater?.condition) {
|
|
171
|
+
analysisCase.groundwater.condition = input.groundwater.condition;
|
|
172
|
+
}
|
|
173
|
+
if (typeof input.groundwater?.depthM === 'number') {
|
|
174
|
+
analysisCase.groundwater.depthM = input.groundwater.depthM;
|
|
175
|
+
}
|
|
176
|
+
if (input.groundwater?.note) {
|
|
177
|
+
analysisCase.groundwater.note = input.groundwater.note;
|
|
178
|
+
}
|
|
179
|
+
const validation = validateFemAnalysisCase(analysisCase);
|
|
180
|
+
const reviewGates = [
|
|
181
|
+
...capability.reviewGates,
|
|
182
|
+
...validation.findings
|
|
183
|
+
.filter((finding) => finding.severity !== 'info')
|
|
184
|
+
.map((finding) => finding.code),
|
|
185
|
+
];
|
|
186
|
+
return {
|
|
187
|
+
schemaVersion: 'fem-analysis-case-draft.v1',
|
|
188
|
+
objective: capability.objective,
|
|
189
|
+
capability,
|
|
190
|
+
implemented: true,
|
|
191
|
+
canAutoProceed: false,
|
|
192
|
+
recommendedAction: 'run-experimental-demo',
|
|
193
|
+
missingUserInputs: [],
|
|
194
|
+
assumptions: analysisCase.assumptions,
|
|
195
|
+
reviewGates: [...new Set(reviewGates)],
|
|
196
|
+
evidenceRefs: analysisCase.evidenceRefs,
|
|
197
|
+
analysisCase,
|
|
198
|
+
validation,
|
|
199
|
+
recommendedCommand: capability.command,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=routing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing.js","sourceRoot":"","sources":["../../src/fem/routing.ts"],"names":[],"mappings":"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"}
|