@geotechcli/core 0.4.94 → 0.4.96

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 (40) hide show
  1. package/dist/fem/demo.d.ts +2 -0
  2. package/dist/fem/demo.d.ts.map +1 -1
  3. package/dist/fem/demo.js +517 -0
  4. package/dist/fem/demo.js.map +1 -1
  5. package/dist/fem/engineering-evidence.d.ts +60 -0
  6. package/dist/fem/engineering-evidence.d.ts.map +1 -1
  7. package/dist/fem/engineering-evidence.js +189 -1
  8. package/dist/fem/engineering-evidence.js.map +1 -1
  9. package/dist/fem/ground-model-draft.d.ts.map +1 -1
  10. package/dist/fem/ground-model-draft.js +27 -0
  11. package/dist/fem/ground-model-draft.js.map +1 -1
  12. package/dist/fem/index.d.ts +3 -2
  13. package/dist/fem/index.d.ts.map +1 -1
  14. package/dist/fem/index.js +3 -2
  15. package/dist/fem/index.js.map +1 -1
  16. package/dist/fem/nonlinear-column-solver.d.ts +6 -0
  17. package/dist/fem/nonlinear-column-solver.d.ts.map +1 -0
  18. package/dist/fem/nonlinear-column-solver.js +231 -0
  19. package/dist/fem/nonlinear-column-solver.js.map +1 -0
  20. package/dist/fem/production-readiness.js +5 -5
  21. package/dist/fem/production-readiness.js.map +1 -1
  22. package/dist/fem/routing.d.ts +12 -0
  23. package/dist/fem/routing.d.ts.map +1 -1
  24. package/dist/fem/routing.js +149 -12
  25. package/dist/fem/routing.js.map +1 -1
  26. package/dist/fem/types.d.ts +37 -6
  27. package/dist/fem/types.d.ts.map +1 -1
  28. package/dist/fem/validation.d.ts.map +1 -1
  29. package/dist/fem/validation.js +142 -10
  30. package/dist/fem/validation.js.map +1 -1
  31. package/dist/fem/webgl.js +1 -1
  32. package/dist/ingest/document-evidence-packet.d.ts +16 -16
  33. package/dist/ingest/geotech-document-benchmark.d.ts +1 -0
  34. package/dist/ingest/geotech-document-benchmark.d.ts.map +1 -1
  35. package/dist/ingest/geotech-document-benchmark.js +1 -0
  36. package/dist/ingest/geotech-document-benchmark.js.map +1 -1
  37. package/dist/meta/metadata.json +1 -1
  38. package/dist/verifier/findings.js +18 -9
  39. package/dist/verifier/findings.js.map +1 -1
  40. package/package.json +1 -1
@@ -0,0 +1,231 @@
1
+ import { runDruckerPragerMaterialPoint, runTerzaghiConsolidationTimeStepper, } from './engineering-evidence.js';
2
+ import { runBuiltinStagedSettlementConsolidationDemo } from './demo.js';
3
+ import { validateFemAnalysisCase } from './validation.js';
4
+ function round(value, digits = 6) {
5
+ const factor = 10 ** digits;
6
+ return Math.round(value * factor) / factor;
7
+ }
8
+ function nonNegativeFinite(value, fallback) {
9
+ return Number.isFinite(value) && value >= 0 ? value : fallback;
10
+ }
11
+ function buildUniformAxialStrainIncrements(axialStrain, increments) {
12
+ const step = axialStrain / increments;
13
+ return Array.from({ length: increments }, () => [step, 0, 0]);
14
+ }
15
+ function mobilizedStrengthRatio(materialPoint) {
16
+ const step = materialPoint.finalStep;
17
+ const denominator = Math.max(materialPoint.mapping.rho * step.principalEffectiveStressKpa.reduce((total, value) => total + value, 0) +
18
+ materialPoint.mapping.compressionInterceptKpa, 1e-9);
19
+ return Math.min(1, Math.max(0, step.deviatoricStressNormKpa / denominator));
20
+ }
21
+ function updateEnvelopeDatasets(datasets, updates) {
22
+ if (!datasets)
23
+ return undefined;
24
+ return datasets.map((dataset) => {
25
+ const value = updates[dataset.fieldId];
26
+ if (dataset.source !== 'envelope' || value == null)
27
+ return dataset;
28
+ return {
29
+ ...dataset,
30
+ values: [round(value, 6)],
31
+ };
32
+ });
33
+ }
34
+ function buildMaterialPoint(caseFile, axialStrain, incrementCount, initialPrincipalEffectiveStressKpa, policy) {
35
+ const material = caseFile.materials[0];
36
+ const poissonRatio = material.poissonRatio;
37
+ const columnElasticModulusKpa = material.constrainedModulusKpa
38
+ ? material.constrainedModulusKpa * ((1 + poissonRatio) * (1 - 2 * poissonRatio)) / (1 - poissonRatio)
39
+ : material.elasticModulusKpa;
40
+ return runDruckerPragerMaterialPoint({
41
+ initialPrincipalEffectiveStressKpa,
42
+ principalStrainIncrements: buildUniformAxialStrainIncrements(axialStrain, incrementCount),
43
+ elasticModulusKpa: columnElasticModulusKpa,
44
+ poissonRatio,
45
+ frictionAngleDeg: material.frictionAngleDeg ?? 30,
46
+ cohesionKpa: material.cohesionKpa ?? 0,
47
+ dilationAngleDeg: 0,
48
+ policy,
49
+ });
50
+ }
51
+ function solveLoadControlledColumnStage(input) {
52
+ const { caseFile, targetLoadKpa, initialPrincipalEffectiveStressKpa, incrementCount, policy } = input;
53
+ if (targetLoadKpa <= 0) {
54
+ const materialPoint = buildMaterialPoint(caseFile, 0, incrementCount, initialPrincipalEffectiveStressKpa, policy);
55
+ return { axialStrain: 0, materialPoint, residualRatio: 0, iterations: 0 };
56
+ }
57
+ const material = caseFile.materials[0];
58
+ const modulus = Math.max(material.constrainedModulusKpa ?? material.elasticModulusKpa, 1);
59
+ const targetVerticalStressKpa = initialPrincipalEffectiveStressKpa[0] + targetLoadKpa;
60
+ const maxIterations = policy?.maxIterations ?? 40;
61
+ let lower = 0;
62
+ let upper = Math.max(targetLoadKpa / modulus, 1e-5);
63
+ let upperPoint = buildMaterialPoint(caseFile, upper, incrementCount, initialPrincipalEffectiveStressKpa, policy);
64
+ for (let guard = 0; guard < 16 && upperPoint.finalStep.principalEffectiveStressKpa[0] < targetVerticalStressKpa; guard += 1) {
65
+ upper *= 2;
66
+ upperPoint = buildMaterialPoint(caseFile, upper, incrementCount, initialPrincipalEffectiveStressKpa, policy);
67
+ }
68
+ let bestPoint = upperPoint;
69
+ let bestStrain = upper;
70
+ let bestResidual = Math.abs(upperPoint.finalStep.principalEffectiveStressKpa[0] - targetVerticalStressKpa) /
71
+ Math.max(targetLoadKpa, 1e-9);
72
+ let iterations = 0;
73
+ for (iterations = 1; iterations <= maxIterations; iterations += 1) {
74
+ const mid = (lower + upper) / 2;
75
+ const point = buildMaterialPoint(caseFile, mid, incrementCount, initialPrincipalEffectiveStressKpa, policy);
76
+ const verticalStress = point.finalStep.principalEffectiveStressKpa[0];
77
+ const residual = Math.abs(verticalStress - targetVerticalStressKpa) / Math.max(targetLoadKpa, 1e-9);
78
+ if (residual < bestResidual) {
79
+ bestResidual = residual;
80
+ bestPoint = point;
81
+ bestStrain = mid;
82
+ }
83
+ if (residual <= (policy?.forceBalanceTolerance ?? 1e-3))
84
+ break;
85
+ if (verticalStress < targetVerticalStressKpa) {
86
+ lower = mid;
87
+ }
88
+ else {
89
+ upper = mid;
90
+ }
91
+ }
92
+ return {
93
+ axialStrain: bestStrain,
94
+ materialPoint: bestPoint,
95
+ residualRatio: bestResidual,
96
+ iterations,
97
+ };
98
+ }
99
+ export function runBuiltinNonlinearConsolidationColumnSolver(caseFile, options = {}) {
100
+ const validation = validateFemAnalysisCase(caseFile);
101
+ if (validation.status === 'blocked') {
102
+ throw new Error(`Cannot run nonlinear consolidation column solver: ${validation.findings.map((item) => item.message).join('; ')}`);
103
+ }
104
+ if (caseFile.objective !== 'staged_settlement_consolidation') {
105
+ throw new Error('The nonlinear consolidation column solver only supports staged_settlement_consolidation cases.');
106
+ }
107
+ const consolidation = caseFile.geometry.consolidation;
108
+ const material = caseFile.materials[0];
109
+ if (!consolidation || !material) {
110
+ throw new Error('The nonlinear consolidation column solver requires consolidation geometry and at least one material.');
111
+ }
112
+ const policy = options.policy;
113
+ const phi = material.frictionAngleDeg ?? 30;
114
+ const k0 = Math.max(0.2, Math.min(1.2, 1 - Math.sin((phi * Math.PI) / 180)));
115
+ const initialVerticalEffectiveStressKpa = Math.max(1, material.unitWeightKnM3 * consolidation.layerThicknessM * 0.5);
116
+ const initialPrincipalEffectiveStressKpa = [
117
+ initialVerticalEffectiveStressKpa,
118
+ initialVerticalEffectiveStressKpa * k0,
119
+ initialVerticalEffectiveStressKpa * k0,
120
+ ];
121
+ const incrementCount = Math.max(4, Math.min(80, caseFile.mesh.divisionsZ * 4));
122
+ const stageSolutions = [];
123
+ let cumulativeLoadKpa = 0;
124
+ let cumulativeTimeYears = 0;
125
+ let cumulativeSettlementMm = 0;
126
+ let previousDrainedStrain = 0;
127
+ let maxSolverResidualRatio = 0;
128
+ let maxYieldResidualRatio = 0;
129
+ let solverIterations = 0;
130
+ for (const [stageIndex, stage] of consolidation.stages.entries()) {
131
+ cumulativeLoadKpa += stage.loadKpa;
132
+ cumulativeTimeYears += stage.durationYears;
133
+ const loadSolution = solveLoadControlledColumnStage({
134
+ caseFile,
135
+ targetLoadKpa: cumulativeLoadKpa,
136
+ initialPrincipalEffectiveStressKpa,
137
+ incrementCount,
138
+ policy,
139
+ });
140
+ const drainedSettlementIncrementMm = Math.max(0, (loadSolution.axialStrain - previousDrainedStrain) * consolidation.layerThicknessM * 1000);
141
+ previousDrainedStrain = Math.max(previousDrainedStrain, loadSolution.axialStrain);
142
+ const localTimes = Array.from({ length: 8 }, (_, index) => stage.durationYears * ((index + 1) / 8));
143
+ const consolidationStep = runTerzaghiConsolidationTimeStepper({
144
+ layerThicknessM: consolidation.layerThicknessM,
145
+ drainage: consolidation.drainage,
146
+ coefficientOfConsolidationM2PerYear: material.coefficientOfConsolidationM2PerYear ?? 1,
147
+ initialExcessPorePressureKpa: Math.max(stage.loadKpa, 1e-6),
148
+ primarySettlementMm: drainedSettlementIncrementMm,
149
+ timeStepsYears: localTimes,
150
+ nodeCount: Math.max(21, Math.min(101, caseFile.mesh.divisionsZ * 8 + 1)),
151
+ policy,
152
+ });
153
+ cumulativeSettlementMm += consolidationStep.finalStep.settlementMm;
154
+ const plasticSettlementMm = Math.max(0, loadSolution.materialPoint.plasticStrainPrincipal[0] * consolidation.layerThicknessM * 1000);
155
+ const yieldResidualRatio = loadSolution.materialPoint.finalStep.state === 'plastic'
156
+ ? loadSolution.materialPoint.finalStep.yieldResidualRatio
157
+ : 0;
158
+ maxSolverResidualRatio = Math.max(maxSolverResidualRatio, loadSolution.residualRatio);
159
+ maxYieldResidualRatio = Math.max(maxYieldResidualRatio, yieldResidualRatio);
160
+ solverIterations += loadSolution.iterations;
161
+ stageSolutions.push({
162
+ stageIndex,
163
+ stageId: stage.id,
164
+ cumulativeLoadKpa: round(cumulativeLoadKpa, 6),
165
+ cumulativeTimeYears: round(cumulativeTimeYears, 6),
166
+ axialStrain: round(loadSolution.axialStrain, 10),
167
+ settlementMm: round(cumulativeSettlementMm, 6),
168
+ plasticSettlementMm: round(plasticSettlementMm, 6),
169
+ degreeOfConsolidation: consolidationStep.finalStep.degreeOfConsolidation,
170
+ averageExcessPorePressureKpa: consolidationStep.finalStep.averageExcessPorePressureKpa,
171
+ mobilizedStrengthRatio: round(mobilizedStrengthRatio(loadSolution.materialPoint), 8),
172
+ solverIterations: loadSolution.iterations,
173
+ residualRatio: round(loadSolution.residualRatio, 12),
174
+ yieldResidualRatio: round(yieldResidualRatio, 12),
175
+ materialPoint: loadSolution.materialPoint,
176
+ });
177
+ }
178
+ const finalStage = stageSolutions[stageSolutions.length - 1];
179
+ const totalLoadKn = consolidation.stages.reduce((total, stage) => total + stage.loadKpa * consolidation.surfaceAreaM2, 0);
180
+ const finalSettlementMm = nonNegativeFinite(finalStage?.settlementMm, 0);
181
+ const plasticSettlementMm = Math.max(...stageSolutions.map((stage) => stage.plasticSettlementMm), 0);
182
+ const maxMobilizedStrengthRatio = Math.max(...stageSolutions.map((stage) => stage.mobilizedStrengthRatio), 0);
183
+ const maxExcessPorePressureKpa = Math.max(...stageSolutions.map((stage) => stage.averageExcessPorePressureKpa), 0);
184
+ const baseManifest = runBuiltinStagedSettlementConsolidationDemo(caseFile);
185
+ const envelope = {
186
+ ...baseManifest.envelope,
187
+ maxSettlementMm: round(finalSettlementMm, 3),
188
+ minSettlementMm: 0,
189
+ totalLoadKn: round(totalLoadKn, 4),
190
+ reactionKn: round(totalLoadKn, 4),
191
+ reactionBalanceRatio: 1,
192
+ finalSettlementMm: round(finalSettlementMm, 3),
193
+ plasticSettlementMm: round(plasticSettlementMm, 3),
194
+ finalDegreeOfConsolidation: finalStage?.degreeOfConsolidation ?? 0,
195
+ maxExcessPorePressureKpa: round(maxExcessPorePressureKpa, 4),
196
+ maxMobilizedStrengthRatio: round(maxMobilizedStrengthRatio, 6),
197
+ solverLoadSteps: consolidation.stages.length,
198
+ solverIterations,
199
+ maxSolverResidualRatio: round(maxSolverResidualRatio, 12),
200
+ maxYieldResidualRatio: round(maxYieldResidualRatio, 12),
201
+ nonlinearPlasticStrain: round(finalStage?.materialPoint.finalStep.equivalentPlasticStrain ?? 0, 12),
202
+ };
203
+ return {
204
+ ...baseManifest,
205
+ title: `${baseManifest.title} - nonlinear column solver`,
206
+ backend: {
207
+ id: 'builtin-nonlinear-column-v0',
208
+ label: 'Built-in nonlinear 1D consolidation column solver',
209
+ deterministic: true,
210
+ version: '0.1.0',
211
+ },
212
+ envelope,
213
+ datasets: updateEnvelopeDatasets(baseManifest.datasets, {
214
+ final_settlement: envelope.finalSettlementMm,
215
+ plastic_settlement: envelope.plasticSettlementMm,
216
+ final_degree_of_consolidation: envelope.finalDegreeOfConsolidation,
217
+ max_excess_pore_pressure: envelope.maxExcessPorePressureKpa,
218
+ max_mobilized_strength_ratio: envelope.maxMobilizedStrengthRatio,
219
+ reaction_balance_ratio: envelope.reactionBalanceRatio,
220
+ total_load: envelope.totalLoadKn,
221
+ }),
222
+ limitations: [
223
+ 'Nonlinear 1D column solver preview only; not a production 2D/3D geotechnical FEM design model.',
224
+ 'Solves vertical load-controlled column equilibrium with Drucker-Prager/Mohr-Coulomb-compatible material-point return mapping.',
225
+ 'Uses Terzaghi 1D consolidation for time-rate settlement; no global pore-pressure DOF or Biot matrix coupling is assembled.',
226
+ 'Independent published/commercial solver benchmarks and reviewer approval enforcement are still required before production design use.',
227
+ ...baseManifest.limitations,
228
+ ],
229
+ };
230
+ }
231
+ //# sourceMappingURL=nonlinear-column-solver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nonlinear-column-solver.js","sourceRoot":"","sources":["../../src/fem/nonlinear-column-solver.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: 'A deterministic Mohr-Coulomb triaxial material-point kernel is benchmarked against closed-form yield. Current preview result manifests still use linear elastic materials only.',
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.',
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',
@@ -27,15 +27,15 @@ const FEATURE_REQUIREMENTS = {
27
27
  },
28
28
  consolidation: {
29
29
  status: 'kernel-verified',
30
- currentCoverage: 'A deterministic 1D Terzaghi backward-Euler consolidation kernel is benchmarked against analytical average consolidation. Current preview result manifests do not expose time-dependent consolidation fields.',
30
+ currentCoverage: 'A deterministic 1D Terzaghi backward-Euler consolidation kernel is benchmarked against analytical average consolidation and exposed through a human-reviewed staged-settlement/consolidation preview route. A new nonlinear 1D column backend solves staged vertical equilibrium with Drucker-Prager material-point return mapping, but it is not a full 2D/3D coupled Biot FEM backend.',
31
31
  requiredForAcceptance: [
32
32
  'time-stepping consolidation backend with drainage boundary controls',
33
33
  'Cv, mv/Cc, drainage path, stage duration, and monitoring calibration schema',
34
34
  'settlement-time benchmark fixtures and tolerance envelopes',
35
35
  ],
36
36
  blockedUntil: [
37
- 'consolidation-time-stepping-kernel-coupled-to-fem-route',
38
- 'drainage-boundary-validation-approved',
37
+ '2d-3d-coupled-consolidation-fem-backend-implemented',
38
+ 'drainage-boundary-validation-approved-against-project-conditions',
39
39
  'settlement-time-benchmark-suite-approved-against-published-or-commercial-references',
40
40
  ],
41
41
  },
@@ -55,7 +55,7 @@ const FEATURE_REQUIREMENTS = {
55
55
  },
56
56
  'advanced-staged-construction': {
57
57
  status: 'preview-only',
58
- currentCoverage: 'Excavation preview includes deterministic stage visualization and proxies, but not production construction sequencing or nonlinear path-dependence.',
58
+ currentCoverage: 'Excavation and staged-consolidation previews include deterministic stage visualization and load histories; staged consolidation can also run a nonlinear 1D column backend. Production construction sequencing, activation/deactivation, and 2D/3D nonlinear path-dependence remain unavailable.',
59
59
  requiredForAcceptance: [
60
60
  'construction-stage activation/deactivation model with support installation/removal',
61
61
  'stage-specific boundary, load, groundwater, and material state transitions',
@@ -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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"}
@@ -45,12 +45,19 @@ export interface PrepareFemAnalysisCaseDraftInput {
45
45
  tunnelCenterYM?: number;
46
46
  tunnelVolumeLossPercent?: number;
47
47
  troughWidthParameterK?: number;
48
+ consolidationLayerThicknessM?: number;
49
+ consolidationSurfaceAreaM2?: number;
48
50
  };
49
51
  excavation?: {
50
52
  stageDepthsM?: number[];
51
53
  supportLevelsM?: number[];
52
54
  wallType?: 'diaphragm_wall' | 'secant_pile_wall' | 'soldier_pile_lagging' | 'unsupported_screening';
53
55
  };
56
+ consolidation?: {
57
+ stageLoadsKpa?: number[];
58
+ stageDurationsYears?: number[];
59
+ drainage?: 'single' | 'double';
60
+ };
54
61
  load?: {
55
62
  pressureKpa?: number;
56
63
  };
@@ -58,6 +65,11 @@ export interface PrepareFemAnalysisCaseDraftInput {
58
65
  elasticModulusKpa?: number;
59
66
  poissonRatio?: number;
60
67
  unitWeightKnM3?: number;
68
+ constrainedModulusKpa?: number;
69
+ frictionAngleDeg?: number;
70
+ cohesionKpa?: number;
71
+ coefficientOfConsolidationM2PerYear?: number;
72
+ hydraulicConductivityMPerS?: number;
61
73
  };
62
74
  groundwater?: {
63
75
  condition?: 'not_modelled' | 'below_domain' | 'specified';
@@ -1 +1 @@
1
- {"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../../src/fem/routing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../../src/fem/routing.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { buildExcavationDemoAnalysisCase, buildRaftDemoAnalysisCase, buildTunnelVolumeLossDemoAnalysisCase, } from './demo.js';
1
+ import { buildExcavationDemoAnalysisCase, buildRaftDemoAnalysisCase, buildStagedSettlementConsolidationDemoAnalysisCase, buildTunnelVolumeLossDemoAnalysisCase, } from './demo.js';
2
2
  import { validateFemAnalysisCase } from './validation.js';
3
3
  const CAPABILITIES = [
4
4
  {
@@ -146,19 +146,21 @@ const CAPABILITIES = [
146
146
  {
147
147
  objective: 'staged-settlement-consolidation',
148
148
  label: 'Staged settlement / consolidation preview',
149
- status: 'planned',
150
- executionMode: 'contract-only',
149
+ status: 'implemented-demo',
150
+ executionMode: 'human-reviewed-preview',
151
151
  agentRunAllowed: false,
152
- analysisType: 'time_dependent_settlement_consolidation_screening',
153
- deterministicBackend: null,
154
- description: 'Planned staged loading and consolidation contract for embankment, preload, and settlement-monitoring review.',
152
+ analysisType: 'time_dependent_1d_consolidation',
153
+ deterministicBackend: 'builtin-staged-consolidation-1d',
154
+ description: 'Experimental deterministic 1D staged consolidation preview using Terzaghi time stepping and Mohr-Coulomb material-point strength gates.',
155
155
  requiredEvidence: ['compressibility/consolidation parameters', 'stratigraphy', 'groundwater or drainage condition', 'load/stage evidence', 'settlement monitoring if available'],
156
156
  requiredUserInputs: ['load or fill stages', 'stage durations', 'foundation footprint', 'drainage path assumptions', 'target settlement or monitoring triggers'],
157
- visualizationFields: ['settlement vs time', 'degree of consolidation', 'stage load history', 'monitoring comparison panel'],
158
- reviewGates: ['planned-only', 'consolidation-backend-not-implemented', 'time-rate-review-required', 'not-design-calculation'],
159
- limitations: ['No time-dependent FEM/consolidation backend, creep model, or monitoring calibration solver is available yet.'],
160
- command: 'geotech fem draft staged-settlement-consolidation --input <json>',
161
- draftCommandTemplate: 'geotech fem draft staged-settlement-consolidation --input <json>',
157
+ visualizationFields: ['settlement vs time', 'degree of consolidation envelope', 'stage load history', 'mobilized strength review gate'],
158
+ reviewGates: ['experimental-only', '1d-consolidation-only', 'mohr-coulomb-material-point-only', 'time-rate-review-required', 'not-design-calculation'],
159
+ limitations: ['No 2D/3D coupled Biot FEM, seepage field, embankment geometry, creep, secondary compression, or monitoring calibration solver is available yet.'],
160
+ command: 'geotech fem draft staged-settlement-consolidation --input <json> --case-output <analysis_case.json>',
161
+ demoCommand: 'geotech fem demo consolidation --experimental',
162
+ draftCommandTemplate: 'geotech fem draft staged-settlement-consolidation --input <json> --case-output <analysis_case.json>',
163
+ runCommandTemplate: 'geotech fem run <analysis_case.json> --experimental --reviewed',
162
164
  },
163
165
  ];
164
166
  function finitePositive(value) {
@@ -297,7 +299,8 @@ export function prepareFemAnalysisCaseDraft(input) {
297
299
  }
298
300
  if (capability.objective !== 'foundation-settlement' &&
299
301
  capability.objective !== 'excavation-deformation' &&
300
- capability.objective !== 'tunnel-volume-loss-settlement') {
302
+ capability.objective !== 'tunnel-volume-loss-settlement' &&
303
+ capability.objective !== 'staged-settlement-consolidation') {
301
304
  return {
302
305
  schemaVersion: 'fem-analysis-case-draft.v1',
303
306
  objective: capability.objective,
@@ -313,6 +316,140 @@ export function prepareFemAnalysisCaseDraft(input) {
313
316
  contractReadiness: contractReadinessFor(capability),
314
317
  };
315
318
  }
319
+ if (capability.objective === 'staged-settlement-consolidation') {
320
+ const missing = [];
321
+ const useDemoDefaults = input.useDemoDefaults === true;
322
+ const layerThicknessM = input.geometry?.consolidationLayerThicknessM ?? (useDemoDefaults ? 10 : undefined);
323
+ const surfaceAreaM2 = input.geometry?.consolidationSurfaceAreaM2 ?? (useDemoDefaults ? 200 : undefined);
324
+ const stageLoadsInput = input.consolidation?.stageLoadsKpa ?? (useDemoDefaults ? [45, 35, 20] : undefined);
325
+ const stageDurationsInput = input.consolidation?.stageDurationsYears ?? (useDemoDefaults ? [0.5, 1, 2] : undefined);
326
+ const drainage = input.consolidation?.drainage ?? (useDemoDefaults ? 'double' : undefined);
327
+ const checkedLayerThicknessM = requirePositive(layerThicknessM, 'consolidation layer thickness', missing);
328
+ const checkedSurfaceAreaM2 = requirePositive(surfaceAreaM2, 'consolidation tributary surface area', missing);
329
+ if (!stageLoadsInput)
330
+ missing.push('stage loads');
331
+ if (!stageDurationsInput)
332
+ missing.push('stage durations');
333
+ const stageLoadsKpa = parseOptionalFiniteArray(stageLoadsInput, 'valid stage loads', missing, { positive: true });
334
+ const stageDurationsYears = parseOptionalFiniteArray(stageDurationsInput, 'valid stage durations', missing, { positive: true });
335
+ if (drainage !== 'single' && drainage !== 'double')
336
+ missing.push('drainage condition');
337
+ if (stageLoadsKpa && stageDurationsYears && stageLoadsKpa.length !== stageDurationsYears.length) {
338
+ missing.push('matching stage load and duration counts');
339
+ }
340
+ if (!checkedLayerThicknessM ||
341
+ !checkedSurfaceAreaM2 ||
342
+ !stageLoadsKpa ||
343
+ !stageDurationsYears ||
344
+ stageLoadsKpa.length !== stageDurationsYears.length ||
345
+ (drainage !== 'single' && drainage !== 'double')) {
346
+ return {
347
+ schemaVersion: 'fem-analysis-case-draft.v1',
348
+ objective: capability.objective,
349
+ capability,
350
+ implemented: true,
351
+ canAutoProceed: false,
352
+ recommendedAction: 'collect-inputs',
353
+ missingUserInputs: [...new Set(missing)],
354
+ assumptions: [],
355
+ reviewGates: ['missing-user-inputs', ...capability.reviewGates],
356
+ evidenceRefs: input.evidenceRefs ?? [],
357
+ recommendedCommand: draftCommandFor(capability),
358
+ };
359
+ }
360
+ const analysisCase = buildStagedSettlementConsolidationDemoAnalysisCase();
361
+ analysisCase.caseId = 'staged-settlement-consolidation-draft';
362
+ analysisCase.title = 'Experimental 1D staged settlement consolidation draft';
363
+ analysisCase.createdBy = 'geotechcli-fem-routing';
364
+ analysisCase.evidenceRefs = input.evidenceRefs ?? [];
365
+ analysisCase.materials.forEach((material) => {
366
+ material.evidenceRefs = input.evidenceRefs ?? [];
367
+ });
368
+ if (analysisCase.geometry.consolidation) {
369
+ analysisCase.geometry.consolidation.layerThicknessM = checkedLayerThicknessM;
370
+ analysisCase.geometry.consolidation.surfaceAreaM2 = checkedSurfaceAreaM2;
371
+ analysisCase.geometry.consolidation.drainage = drainage;
372
+ analysisCase.geometry.consolidation.stages = stageLoadsKpa.map((loadKpa, index) => ({
373
+ id: `stage-${index + 1}`,
374
+ label: `Stage ${index + 1} - ${loadKpa.toFixed(1)} kPa for ${stageDurationsYears[index].toFixed(2)} years`,
375
+ loadKpa,
376
+ durationYears: stageDurationsYears[index],
377
+ }));
378
+ }
379
+ analysisCase.geometry.domain.lengthM = input.geometry?.domainLengthM ?? Math.max(24, Math.sqrt(checkedSurfaceAreaM2) * 1.8);
380
+ analysisCase.geometry.domain.widthM = input.geometry?.domainWidthM ?? Math.max(12, Math.sqrt(checkedSurfaceAreaM2) * 0.9);
381
+ analysisCase.geometry.domain.depthM = input.geometry?.domainDepthM ?? Math.max(checkedLayerThicknessM * 1.2, analysisCase.geometry.domain.depthM);
382
+ analysisCase.loads = stageLoadsKpa.map((pressureKpa, index) => ({
383
+ id: `stage-${index + 1}-load`,
384
+ type: 'uniform_pressure',
385
+ target: 'ground_surface',
386
+ pressureKpa,
387
+ evidenceRefs: input.evidenceRefs ?? [],
388
+ assumptions: [
389
+ {
390
+ id: `stage-${index + 1}-load-assumption`,
391
+ parameter: 'staged surface pressure',
392
+ value: pressureKpa,
393
+ unit: 'kPa',
394
+ basis: 'User-provided staged consolidation load for experimental preview.',
395
+ confidence: 'review',
396
+ reviewRequired: true,
397
+ },
398
+ ],
399
+ }));
400
+ const material = analysisCase.materials[0];
401
+ if (finitePositive(input.material?.elasticModulusKpa))
402
+ material.elasticModulusKpa = input.material.elasticModulusKpa;
403
+ if (typeof input.material?.poissonRatio === 'number')
404
+ material.poissonRatio = input.material.poissonRatio;
405
+ if (finitePositive(input.material?.unitWeightKnM3))
406
+ material.unitWeightKnM3 = input.material.unitWeightKnM3;
407
+ if (finitePositive(input.material?.constrainedModulusKpa))
408
+ material.constrainedModulusKpa = input.material.constrainedModulusKpa;
409
+ if (typeof input.material?.frictionAngleDeg === 'number')
410
+ material.frictionAngleDeg = input.material.frictionAngleDeg;
411
+ if (typeof input.material?.cohesionKpa === 'number' && Number.isFinite(input.material.cohesionKpa) && input.material.cohesionKpa >= 0) {
412
+ material.cohesionKpa = input.material.cohesionKpa;
413
+ }
414
+ if (finitePositive(input.material?.coefficientOfConsolidationM2PerYear)) {
415
+ material.coefficientOfConsolidationM2PerYear = input.material.coefficientOfConsolidationM2PerYear;
416
+ }
417
+ if (finitePositive(input.material?.hydraulicConductivityMPerS))
418
+ material.hydraulicConductivityMPerS = input.material.hydraulicConductivityMPerS;
419
+ if (input.groundwater?.condition) {
420
+ analysisCase.groundwater.condition = input.groundwater.condition;
421
+ }
422
+ if (typeof input.groundwater?.depthM === 'number') {
423
+ analysisCase.groundwater.depthM = input.groundwater.depthM;
424
+ }
425
+ if (input.groundwater?.note) {
426
+ analysisCase.groundwater.note = input.groundwater.note;
427
+ }
428
+ const validation = validateFemAnalysisCase(analysisCase);
429
+ const reviewGates = [
430
+ ...capability.reviewGates,
431
+ ...validation.findings
432
+ .filter((finding) => finding.severity !== 'info')
433
+ .map((finding) => finding.code),
434
+ ];
435
+ return {
436
+ schemaVersion: 'fem-analysis-case-draft.v1',
437
+ objective: capability.objective,
438
+ capability,
439
+ implemented: true,
440
+ canAutoProceed: false,
441
+ recommendedAction: actionForValidation(validation),
442
+ missingUserInputs: validation.status === 'blocked' ? validation.findings
443
+ .filter((finding) => finding.severity === 'blocker')
444
+ .map((finding) => finding.code) : [],
445
+ assumptions: analysisCase.assumptions,
446
+ reviewGates: [...new Set(reviewGates)],
447
+ evidenceRefs: analysisCase.evidenceRefs,
448
+ analysisCase,
449
+ validation,
450
+ recommendedCommand: commandForValidation(capability, validation),
451
+ };
452
+ }
316
453
  if (capability.objective === 'tunnel-volume-loss-settlement') {
317
454
  const missing = [];
318
455
  const useDemoDefaults = input.useDemoDefaults === true;