@geotechcli/core 0.4.109 → 0.4.111

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/agents/brain.d.ts.map +1 -1
  2. package/dist/agents/brain.js +31 -2
  3. package/dist/agents/brain.js.map +1 -1
  4. package/dist/agents/fem-tools.js +5 -0
  5. package/dist/agents/fem-tools.js.map +1 -1
  6. package/dist/agents/safety.d.ts +1 -0
  7. package/dist/agents/safety.d.ts.map +1 -1
  8. package/dist/agents/safety.js +62 -0
  9. package/dist/agents/safety.js.map +1 -1
  10. package/dist/fem/demo.d.ts.map +1 -1
  11. package/dist/fem/demo.js +4 -0
  12. package/dist/fem/demo.js.map +1 -1
  13. package/dist/fem/engineering-evidence.d.ts +21 -2
  14. package/dist/fem/engineering-evidence.d.ts.map +1 -1
  15. package/dist/fem/engineering-evidence.js +354 -6
  16. package/dist/fem/engineering-evidence.js.map +1 -1
  17. package/dist/fem/index.d.ts +4 -2
  18. package/dist/fem/index.d.ts.map +1 -1
  19. package/dist/fem/index.js +2 -0
  20. package/dist/fem/index.js.map +1 -1
  21. package/dist/fem/nonlinear-plane-strain-solver.d.ts +10 -0
  22. package/dist/fem/nonlinear-plane-strain-solver.d.ts.map +1 -0
  23. package/dist/fem/nonlinear-plane-strain-solver.js +358 -0
  24. package/dist/fem/nonlinear-plane-strain-solver.js.map +1 -0
  25. package/dist/fem/plane-strain-assembly.d.ts +54 -0
  26. package/dist/fem/plane-strain-assembly.d.ts.map +1 -1
  27. package/dist/fem/plane-strain-assembly.js +277 -46
  28. package/dist/fem/plane-strain-assembly.js.map +1 -1
  29. package/dist/fem/production-readiness.js +5 -5
  30. package/dist/fem/production-readiness.js.map +1 -1
  31. package/dist/fem/support-design.d.ts +124 -0
  32. package/dist/fem/support-design.d.ts.map +1 -0
  33. package/dist/fem/support-design.js +380 -0
  34. package/dist/fem/support-design.js.map +1 -0
  35. package/dist/fem/types.d.ts +68 -3
  36. package/dist/fem/types.d.ts.map +1 -1
  37. package/dist/fem/validation.d.ts.map +1 -1
  38. package/dist/fem/validation.js +346 -13
  39. package/dist/fem/validation.js.map +1 -1
  40. package/dist/ingest/document-evidence-packet.d.ts +30 -30
  41. package/dist/ingest/job-worker.d.ts.map +1 -1
  42. package/dist/ingest/job-worker.js +4 -0
  43. package/dist/ingest/job-worker.js.map +1 -1
  44. package/dist/meta/metadata.json +1 -1
  45. package/package.json +1 -1
@@ -0,0 +1,124 @@
1
+ import type { FemConvergencePolicy } from './engineering-evidence.js';
2
+ import type { FemAssumption } from './types.js';
3
+ export type FemSupportMemberKind = 'strut' | 'brace';
4
+ export type FemSupportDesignStatus = 'accepted' | 'blocked';
5
+ export interface FemSupportDesignUnits {
6
+ length: 'm';
7
+ force: 'kN';
8
+ stress: 'MPa';
9
+ area: 'm2';
10
+ moment: 'kN-m';
11
+ momentOfInertia: 'm4';
12
+ sectionModulus: 'm3';
13
+ utilization: 'ratio';
14
+ }
15
+ export interface FemSupportDemandSource {
16
+ source: 'fem-result-envelope' | 'support-reaction-screening' | 'reviewed-hand-calculation';
17
+ loadCombination: string;
18
+ description: string;
19
+ caseId?: string;
20
+ stageId?: string;
21
+ resultHashSha256?: string;
22
+ }
23
+ export interface FemSupportMemberDemand {
24
+ axialCompressionDemandKn: number;
25
+ bendingMomentDemandKnM?: number;
26
+ source: FemSupportDemandSource;
27
+ }
28
+ export interface FemSupportMemberProperties {
29
+ id: string;
30
+ kind: FemSupportMemberKind;
31
+ label?: string;
32
+ sectionLabel?: string;
33
+ unbracedLengthM: number;
34
+ effectiveLengthFactor: number;
35
+ areaM2: number;
36
+ weakAxisMomentOfInertiaM4: number;
37
+ sectionModulusM3?: number;
38
+ yieldStrengthMpa: number;
39
+ elasticModulusMpa: number;
40
+ }
41
+ export interface FemSupportDesignFactors {
42
+ demandFactor?: number;
43
+ resistanceFactorCompression?: number;
44
+ resistanceFactorFlexure?: number;
45
+ maximumSlendernessRatio?: number;
46
+ }
47
+ export interface FemSupportDesignReviewer {
48
+ name: string;
49
+ licenseId: string;
50
+ jurisdiction: string;
51
+ }
52
+ export interface FemSupportDesignReviewMetadata {
53
+ schemaVersion: 'fem-support-design-review-metadata.v1';
54
+ reviewer: FemSupportDesignReviewer;
55
+ reviewedAt: string;
56
+ assumptions: FemAssumption[];
57
+ limitations: string[];
58
+ }
59
+ export interface FemSupportMemberDesignCheckInput {
60
+ schemaVersion: 'fem-support-member-design-input.v1';
61
+ units: FemSupportDesignUnits;
62
+ member: FemSupportMemberProperties;
63
+ demand: FemSupportMemberDemand;
64
+ factors?: FemSupportDesignFactors;
65
+ review: FemSupportDesignReviewMetadata;
66
+ policy?: FemConvergencePolicy;
67
+ }
68
+ export interface FemSupportMemberDesignInputValidation {
69
+ schemaVersion: 'fem-support-member-design-input-validation.v1';
70
+ status: FemSupportDesignStatus;
71
+ blockerCodes: string[];
72
+ warnings: string[];
73
+ }
74
+ export interface FemSupportMemberLimitState {
75
+ id: 'axial-yield' | 'euler-buckling' | 'flexural-yield' | 'combined-axial-flexure' | 'slenderness';
76
+ demand: number;
77
+ capacity: number;
78
+ unit: 'kN' | 'kN-m' | 'ratio';
79
+ utilization: number;
80
+ status: FemSupportDesignStatus;
81
+ }
82
+ export interface FemSupportMemberConvergenceMetadata {
83
+ schemaVersion: 'fem-support-member-convergence.v1';
84
+ method: 'closed-form-limit-state-evaluation';
85
+ deterministic: true;
86
+ status: 'converged';
87
+ iterations: 1;
88
+ residualRatio: 0;
89
+ tolerance: number;
90
+ }
91
+ export interface FemSupportMemberDesignCheckResult {
92
+ schemaVersion: 'fem-support-member-design-check.v1';
93
+ designScope: 'support-member-limit-state-check-only';
94
+ productionClaim: false;
95
+ method: 'closed-form-yield-buckling-slenderness-interaction';
96
+ status: FemSupportDesignStatus;
97
+ units: FemSupportDesignUnits;
98
+ member: FemSupportMemberProperties & {
99
+ effectiveLengthM: number;
100
+ radiusOfGyrationM: number;
101
+ slendernessRatio: number;
102
+ };
103
+ demand: FemSupportMemberDemand & {
104
+ factoredAxialCompressionDemandKn: number;
105
+ factoredBendingMomentDemandKnM: number;
106
+ };
107
+ factors: Required<FemSupportDesignFactors>;
108
+ capacities: {
109
+ nominalYieldCompressionCapacityKn: number;
110
+ nominalEulerBucklingCapacityKn: number;
111
+ designCompressionCapacityKn: number;
112
+ designFlexuralCapacityKnM?: number;
113
+ };
114
+ limitStates: FemSupportMemberLimitState[];
115
+ controllingLimitState: FemSupportMemberLimitState;
116
+ acceptanceBlockers: string[];
117
+ convergence: FemSupportMemberConvergenceMetadata;
118
+ review: FemSupportDesignReviewMetadata;
119
+ limitations: string[];
120
+ policy: FemConvergencePolicy;
121
+ }
122
+ export declare function validateFemSupportMemberDesignCheckInput(input: unknown): FemSupportMemberDesignInputValidation;
123
+ export declare function runFemSupportMemberDesignCheck(input: FemSupportMemberDesignCheckInput): FemSupportMemberDesignCheckResult;
124
+ //# sourceMappingURL=support-design.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"support-design.d.ts","sourceRoot":"","sources":["../../src/fem/support-design.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,380 @@
1
+ const DEFAULT_SUPPORT_DESIGN_UNITS = {
2
+ length: 'm',
3
+ force: 'kN',
4
+ stress: 'MPa',
5
+ area: 'm2',
6
+ moment: 'kN-m',
7
+ momentOfInertia: 'm4',
8
+ sectionModulus: 'm3',
9
+ utilization: 'ratio',
10
+ };
11
+ const DEFAULT_SUPPORT_DESIGN_FACTORS = {
12
+ demandFactor: 1,
13
+ resistanceFactorCompression: 0.9,
14
+ resistanceFactorFlexure: 0.9,
15
+ maximumSlendernessRatio: 200,
16
+ };
17
+ const DEFAULT_SUPPORT_DESIGN_CONVERGENCE_POLICY = {
18
+ schemaVersion: 'fem-convergence-policy.v1',
19
+ residualTolerance: 1e-6,
20
+ forceBalanceTolerance: 1e-3,
21
+ porePressureMassBalanceTolerance: 1e-3,
22
+ maxIterations: 40,
23
+ minAcceptedSteps: 3,
24
+ };
25
+ function isRecord(value) {
26
+ return typeof value === 'object' && value != null && !Array.isArray(value);
27
+ }
28
+ function isNonEmptyString(value) {
29
+ return typeof value === 'string' && value.trim().length > 0;
30
+ }
31
+ function isFinitePositive(value) {
32
+ return typeof value === 'number' && Number.isFinite(value) && value > 0;
33
+ }
34
+ function isFiniteNonNegative(value) {
35
+ return typeof value === 'number' && Number.isFinite(value) && value >= 0;
36
+ }
37
+ function round(value, digits = 6) {
38
+ const scale = 10 ** digits;
39
+ return Math.round(value * scale) / scale;
40
+ }
41
+ function validatePolicy(policy, blockers) {
42
+ if (policy == null)
43
+ return;
44
+ if (!isRecord(policy)) {
45
+ blockers.push('policy.invalid');
46
+ return;
47
+ }
48
+ if (policy.schemaVersion !== 'fem-convergence-policy.v1') {
49
+ blockers.push('policy.schema-version.unsupported');
50
+ }
51
+ for (const field of [
52
+ 'residualTolerance',
53
+ 'forceBalanceTolerance',
54
+ 'porePressureMassBalanceTolerance',
55
+ ]) {
56
+ if (!isFinitePositive(policy[field])) {
57
+ blockers.push(`policy.${field}.invalid`);
58
+ }
59
+ }
60
+ if (!Number.isInteger(policy.maxIterations) || policy.maxIterations <= 0) {
61
+ blockers.push('policy.maxIterations.invalid');
62
+ }
63
+ if (!Number.isInteger(policy.minAcceptedSteps) || policy.minAcceptedSteps <= 0) {
64
+ blockers.push('policy.minAcceptedSteps.invalid');
65
+ }
66
+ if (Number.isInteger(policy.maxIterations) &&
67
+ Number.isInteger(policy.minAcceptedSteps) &&
68
+ policy.minAcceptedSteps > policy.maxIterations) {
69
+ blockers.push('policy.minAcceptedSteps.exceeds-maxIterations');
70
+ }
71
+ }
72
+ function validateUnits(units, blockers) {
73
+ if (!isRecord(units)) {
74
+ blockers.push('units.missing');
75
+ return;
76
+ }
77
+ for (const [key, expected] of Object.entries(DEFAULT_SUPPORT_DESIGN_UNITS)) {
78
+ if (units[key] !== expected) {
79
+ blockers.push(`units.${key}.unsupported`);
80
+ }
81
+ }
82
+ }
83
+ function validateAssumptions(assumptions, blockers) {
84
+ if (!Array.isArray(assumptions) || assumptions.length === 0) {
85
+ blockers.push('review.assumptions.missing');
86
+ return;
87
+ }
88
+ assumptions.forEach((assumption, index) => {
89
+ if (!isRecord(assumption)) {
90
+ blockers.push(`review.assumptions.${index}.invalid`);
91
+ return;
92
+ }
93
+ for (const field of ['id', 'parameter', 'basis']) {
94
+ if (!isNonEmptyString(assumption[field])) {
95
+ blockers.push(`review.assumptions.${index}.${field}.missing`);
96
+ }
97
+ }
98
+ if (assumption.value == null || (typeof assumption.value === 'string' && !assumption.value.trim())) {
99
+ blockers.push(`review.assumptions.${index}.value.missing`);
100
+ }
101
+ if (assumption.confidence !== 'measured' &&
102
+ assumption.confidence !== 'inferred' &&
103
+ assumption.confidence !== 'review') {
104
+ blockers.push(`review.assumptions.${index}.confidence.invalid`);
105
+ }
106
+ if (typeof assumption.reviewRequired !== 'boolean') {
107
+ blockers.push(`review.assumptions.${index}.reviewRequired.invalid`);
108
+ }
109
+ });
110
+ }
111
+ export function validateFemSupportMemberDesignCheckInput(input) {
112
+ const blockerCodes = [];
113
+ const warnings = [];
114
+ if (!isRecord(input)) {
115
+ return {
116
+ schemaVersion: 'fem-support-member-design-input-validation.v1',
117
+ status: 'blocked',
118
+ blockerCodes: ['input.invalid'],
119
+ warnings,
120
+ };
121
+ }
122
+ if (input.schemaVersion !== 'fem-support-member-design-input.v1') {
123
+ blockerCodes.push('schema-version.unsupported');
124
+ }
125
+ validateUnits(input.units, blockerCodes);
126
+ validatePolicy(input.policy, blockerCodes);
127
+ const member = input.member;
128
+ if (!isRecord(member)) {
129
+ blockerCodes.push('member.missing');
130
+ }
131
+ else {
132
+ if (!isNonEmptyString(member.id))
133
+ blockerCodes.push('member.id.missing');
134
+ if (member.kind !== 'strut' && member.kind !== 'brace')
135
+ blockerCodes.push('member.kind.unsupported');
136
+ for (const field of [
137
+ 'unbracedLengthM',
138
+ 'effectiveLengthFactor',
139
+ 'areaM2',
140
+ 'weakAxisMomentOfInertiaM4',
141
+ 'yieldStrengthMpa',
142
+ 'elasticModulusMpa',
143
+ ]) {
144
+ if (!isFinitePositive(member[field]))
145
+ blockerCodes.push(`member.${field}.invalid`);
146
+ }
147
+ if (member.sectionModulusM3 != null && !isFinitePositive(member.sectionModulusM3)) {
148
+ blockerCodes.push('member.sectionModulusM3.invalid');
149
+ }
150
+ }
151
+ const demand = input.demand;
152
+ if (!isRecord(demand)) {
153
+ blockerCodes.push('demand.missing');
154
+ }
155
+ else {
156
+ if (!isFinitePositive(demand.axialCompressionDemandKn)) {
157
+ blockerCodes.push('demand.axialCompressionDemandKn.invalid');
158
+ }
159
+ if (demand.bendingMomentDemandKnM != null && !isFiniteNonNegative(demand.bendingMomentDemandKnM)) {
160
+ blockerCodes.push('demand.bendingMomentDemandKnM.invalid');
161
+ }
162
+ const source = demand.source;
163
+ if (!isRecord(source)) {
164
+ blockerCodes.push('demand.source.missing');
165
+ }
166
+ else {
167
+ if (source.source !== 'fem-result-envelope' &&
168
+ source.source !== 'support-reaction-screening' &&
169
+ source.source !== 'reviewed-hand-calculation') {
170
+ blockerCodes.push('demand.source.source.unsupported');
171
+ }
172
+ if (!isNonEmptyString(source.loadCombination))
173
+ blockerCodes.push('demand.source.loadCombination.missing');
174
+ if (!isNonEmptyString(source.description))
175
+ blockerCodes.push('demand.source.description.missing');
176
+ if (source.resultHashSha256 != null && !/^[a-f0-9]{64}$/i.test(String(source.resultHashSha256))) {
177
+ blockerCodes.push('demand.source.resultHashSha256.invalid');
178
+ }
179
+ }
180
+ }
181
+ const bendingDemand = isRecord(demand) && typeof demand.bendingMomentDemandKnM === 'number'
182
+ ? demand.bendingMomentDemandKnM
183
+ : 0;
184
+ if (bendingDemand > 0 && (!isRecord(member) || !isFinitePositive(member.sectionModulusM3))) {
185
+ blockerCodes.push('member.sectionModulusM3.required-for-bending');
186
+ }
187
+ const factors = input.factors;
188
+ if (factors != null) {
189
+ if (!isRecord(factors)) {
190
+ blockerCodes.push('factors.invalid');
191
+ }
192
+ else {
193
+ for (const field of [
194
+ 'demandFactor',
195
+ 'resistanceFactorCompression',
196
+ 'resistanceFactorFlexure',
197
+ 'maximumSlendernessRatio',
198
+ ]) {
199
+ if (factors[field] != null && !isFinitePositive(factors[field])) {
200
+ blockerCodes.push(`factors.${field}.invalid`);
201
+ }
202
+ }
203
+ for (const field of ['resistanceFactorCompression', 'resistanceFactorFlexure']) {
204
+ if (typeof factors[field] === 'number' && factors[field] > 1) {
205
+ blockerCodes.push(`factors.${field}.exceeds-one`);
206
+ }
207
+ }
208
+ }
209
+ }
210
+ const review = input.review;
211
+ if (!isRecord(review)) {
212
+ blockerCodes.push('review.missing');
213
+ }
214
+ else {
215
+ if (review.schemaVersion !== 'fem-support-design-review-metadata.v1') {
216
+ blockerCodes.push('review.schema-version.unsupported');
217
+ }
218
+ const reviewer = review.reviewer;
219
+ if (!isRecord(reviewer)) {
220
+ blockerCodes.push('review.reviewer.missing');
221
+ }
222
+ else {
223
+ if (!isNonEmptyString(reviewer.name))
224
+ blockerCodes.push('review.reviewer.name.missing');
225
+ if (!isNonEmptyString(reviewer.licenseId))
226
+ blockerCodes.push('review.reviewer.licenseId.missing');
227
+ if (!isNonEmptyString(reviewer.jurisdiction))
228
+ blockerCodes.push('review.reviewer.jurisdiction.missing');
229
+ }
230
+ if (!isNonEmptyString(review.reviewedAt) || Number.isNaN(Date.parse(review.reviewedAt))) {
231
+ blockerCodes.push('review.reviewedAt.invalid');
232
+ }
233
+ validateAssumptions(review.assumptions, blockerCodes);
234
+ if (!Array.isArray(review.limitations) || review.limitations.length === 0) {
235
+ blockerCodes.push('review.limitations.missing');
236
+ }
237
+ else {
238
+ review.limitations.forEach((limitation, index) => {
239
+ if (!isNonEmptyString(limitation)) {
240
+ blockerCodes.push(`review.limitations.${index}.invalid`);
241
+ }
242
+ });
243
+ }
244
+ }
245
+ const uniqueBlockers = [...new Set(blockerCodes)];
246
+ return {
247
+ schemaVersion: 'fem-support-member-design-input-validation.v1',
248
+ status: uniqueBlockers.length === 0 ? 'accepted' : 'blocked',
249
+ blockerCodes: uniqueBlockers,
250
+ warnings,
251
+ };
252
+ }
253
+ function copyAssumption(assumption) {
254
+ return { ...assumption };
255
+ }
256
+ function copyReviewMetadata(review) {
257
+ return {
258
+ ...review,
259
+ reviewer: { ...review.reviewer },
260
+ assumptions: review.assumptions.map(copyAssumption),
261
+ limitations: [...review.limitations],
262
+ };
263
+ }
264
+ function buildLimitState(id, demand, capacity, unit) {
265
+ const utilization = demand / Math.max(capacity, 1e-12);
266
+ return {
267
+ id,
268
+ demand: round(demand, unit === 'ratio' ? 6 : 4),
269
+ capacity: round(capacity, unit === 'ratio' ? 6 : 4),
270
+ unit,
271
+ utilization: round(utilization, 6),
272
+ status: utilization <= 1 ? 'accepted' : 'blocked',
273
+ };
274
+ }
275
+ export function runFemSupportMemberDesignCheck(input) {
276
+ const inputValidation = validateFemSupportMemberDesignCheckInput(input);
277
+ if (inputValidation.status === 'blocked') {
278
+ throw new Error(`Invalid FEM support member design check input: ${inputValidation.blockerCodes.join(', ')}`);
279
+ }
280
+ const policy = input.policy ?? DEFAULT_SUPPORT_DESIGN_CONVERGENCE_POLICY;
281
+ const factors = {
282
+ ...DEFAULT_SUPPORT_DESIGN_FACTORS,
283
+ ...input.factors,
284
+ };
285
+ const effectiveLengthM = input.member.unbracedLengthM * input.member.effectiveLengthFactor;
286
+ const radiusOfGyrationM = Math.sqrt(input.member.weakAxisMomentOfInertiaM4 / input.member.areaM2);
287
+ const slendernessRatio = effectiveLengthM / radiusOfGyrationM;
288
+ const stressScaleKnPerM2 = 1000;
289
+ const nominalYieldCompressionCapacityKn = input.member.yieldStrengthMpa * stressScaleKnPerM2 * input.member.areaM2;
290
+ const nominalEulerBucklingCapacityKn = (Math.PI ** 2) *
291
+ input.member.elasticModulusMpa *
292
+ stressScaleKnPerM2 *
293
+ input.member.weakAxisMomentOfInertiaM4 /
294
+ (effectiveLengthM ** 2);
295
+ const designYieldCompressionCapacityKn = factors.resistanceFactorCompression * nominalYieldCompressionCapacityKn;
296
+ const designEulerBucklingCapacityKn = factors.resistanceFactorCompression * nominalEulerBucklingCapacityKn;
297
+ const designCompressionCapacityKn = Math.min(designYieldCompressionCapacityKn, designEulerBucklingCapacityKn);
298
+ const factoredAxialCompressionDemandKn = input.demand.axialCompressionDemandKn * factors.demandFactor;
299
+ const factoredBendingMomentDemandKnM = (input.demand.bendingMomentDemandKnM ?? 0) * factors.demandFactor;
300
+ const designFlexuralCapacityKnM = input.member.sectionModulusM3 != null
301
+ ? factors.resistanceFactorFlexure *
302
+ input.member.yieldStrengthMpa *
303
+ stressScaleKnPerM2 *
304
+ input.member.sectionModulusM3
305
+ : undefined;
306
+ const limitStates = [
307
+ buildLimitState('axial-yield', factoredAxialCompressionDemandKn, designYieldCompressionCapacityKn, 'kN'),
308
+ buildLimitState('euler-buckling', factoredAxialCompressionDemandKn, designEulerBucklingCapacityKn, 'kN'),
309
+ buildLimitState('slenderness', slendernessRatio, factors.maximumSlendernessRatio, 'ratio'),
310
+ ];
311
+ if (factoredBendingMomentDemandKnM > 0 && designFlexuralCapacityKnM != null) {
312
+ limitStates.push(buildLimitState('flexural-yield', factoredBendingMomentDemandKnM, designFlexuralCapacityKnM, 'kN-m'));
313
+ }
314
+ const combinedInteraction = (factoredAxialCompressionDemandKn / Math.max(designCompressionCapacityKn, 1e-12)) +
315
+ (factoredBendingMomentDemandKnM > 0 && designFlexuralCapacityKnM != null
316
+ ? factoredBendingMomentDemandKnM / Math.max(designFlexuralCapacityKnM, 1e-12)
317
+ : 0);
318
+ limitStates.push(buildLimitState('combined-axial-flexure', combinedInteraction, 1, 'ratio'));
319
+ const controllingLimitState = limitStates.reduce((controlling, current) => current.utilization > controlling.utilization ? current : controlling);
320
+ const acceptanceBlockers = limitStates
321
+ .filter((limitState) => limitState.status === 'blocked')
322
+ .map((limitState) => `support-member.${limitState.id}`);
323
+ const status = acceptanceBlockers.length === 0 ? 'accepted' : 'blocked';
324
+ const limitations = [
325
+ 'Closed-form member check only; this does not run or approve a full nonlinear FEM model.',
326
+ 'Demand must come from a separately reviewed FEM result envelope, screening calculation, or hand calculation.',
327
+ 'Connections, local buckling, corrosion allowance, seismic detailing, construction tolerance, and jurisdiction-specific code clauses require separate review.',
328
+ ...input.review.limitations,
329
+ ];
330
+ return {
331
+ schemaVersion: 'fem-support-member-design-check.v1',
332
+ designScope: 'support-member-limit-state-check-only',
333
+ productionClaim: false,
334
+ method: 'closed-form-yield-buckling-slenderness-interaction',
335
+ status,
336
+ units: { ...input.units },
337
+ member: {
338
+ ...input.member,
339
+ effectiveLengthM: round(effectiveLengthM, 6),
340
+ radiusOfGyrationM: round(radiusOfGyrationM, 6),
341
+ slendernessRatio: round(slendernessRatio, 6),
342
+ },
343
+ demand: {
344
+ ...input.demand,
345
+ source: { ...input.demand.source },
346
+ factoredAxialCompressionDemandKn: round(factoredAxialCompressionDemandKn, 4),
347
+ factoredBendingMomentDemandKnM: round(factoredBendingMomentDemandKnM, 4),
348
+ },
349
+ factors: {
350
+ demandFactor: round(factors.demandFactor, 6),
351
+ resistanceFactorCompression: round(factors.resistanceFactorCompression, 6),
352
+ resistanceFactorFlexure: round(factors.resistanceFactorFlexure, 6),
353
+ maximumSlendernessRatio: round(factors.maximumSlendernessRatio, 6),
354
+ },
355
+ capacities: {
356
+ nominalYieldCompressionCapacityKn: round(nominalYieldCompressionCapacityKn, 4),
357
+ nominalEulerBucklingCapacityKn: round(nominalEulerBucklingCapacityKn, 4),
358
+ designCompressionCapacityKn: round(designCompressionCapacityKn, 4),
359
+ ...(designFlexuralCapacityKnM != null
360
+ ? { designFlexuralCapacityKnM: round(designFlexuralCapacityKnM, 4) }
361
+ : {}),
362
+ },
363
+ limitStates,
364
+ controllingLimitState,
365
+ acceptanceBlockers,
366
+ convergence: {
367
+ schemaVersion: 'fem-support-member-convergence.v1',
368
+ method: 'closed-form-limit-state-evaluation',
369
+ deterministic: true,
370
+ status: 'converged',
371
+ iterations: 1,
372
+ residualRatio: 0,
373
+ tolerance: policy.forceBalanceTolerance,
374
+ },
375
+ review: copyReviewMetadata(input.review),
376
+ limitations,
377
+ policy,
378
+ };
379
+ }
380
+ //# sourceMappingURL=support-design.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"support-design.js","sourceRoot":"","sources":["../../src/fem/support-design.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { FemConvergencePolicy } from './engineering-evidence.js';
2
2
  export type FemObjective = 'foundation_settlement' | 'excavation_deformation' | 'tunnel_volume_loss_settlement' | 'staged_settlement_consolidation' | 'seepage_groundwater_coupling';
3
- export type FemAnalysisType = 'static_3d_small_strain' | 'static_3d_staged_elastic' | 'empirical_3d_settlement_surface' | 'time_dependent_1d_consolidation' | 'time_dependent_2d_biot_consolidation';
3
+ export type FemAnalysisType = 'static_3d_small_strain' | 'static_3d_staged_elastic' | 'static_2d_plane_strain_drucker_prager' | 'empirical_3d_settlement_surface' | 'time_dependent_1d_consolidation' | 'time_dependent_2d_biot_consolidation';
4
4
  export type FemAssumptionConfidence = 'measured' | 'inferred' | 'review';
5
5
  export type FemFindingSeverity = 'info' | 'review' | 'blocker';
6
6
  export interface FemUnits {
@@ -247,6 +247,17 @@ export interface FemResultEnvelope {
247
247
  maxSolverResidualRatio?: number;
248
248
  maxYieldResidualRatio?: number;
249
249
  nonlinearPlasticStrain?: number;
250
+ planeStrainDofCount?: number;
251
+ planeStrainFreeDofCount?: number;
252
+ planeStrainConstrainedDofCount?: number;
253
+ plasticGaussPointCount?: number;
254
+ maxEquivalentPlasticStrain?: number;
255
+ maxEquivalentPlasticStrainIncrement?: number;
256
+ adaptiveAttemptCount?: number;
257
+ adaptiveAcceptedStepCount?: number;
258
+ adaptiveRejectedAttemptCount?: number;
259
+ adaptiveCutbackCount?: number;
260
+ adaptiveMaxCutbackDepth?: number;
250
261
  timeStepCount?: number;
251
262
  minPorePressureKpa?: number;
252
263
  maxPorePressureKpa?: number;
@@ -279,8 +290,23 @@ export interface FemResultPressureAudit {
279
290
  couplingRateSumM3PerS: number;
280
291
  darcyFlowRateSumM3PerS: number;
281
292
  }
293
+ export interface FemResultBiotTransientAcceptance {
294
+ schemaVersion: 'fem-plane-strain-biot-transient-acceptance.v1';
295
+ accepted: boolean;
296
+ dissipationCheckMode: 'drained-dissipation' | 'prescribed-gradient-relaxation';
297
+ acceptedStepCount: number;
298
+ requiredStepCount: number;
299
+ maxResidualNormRatio: number;
300
+ maxMassBalanceErrorRatio: number;
301
+ maxPressureOvershootKpa: number;
302
+ monotonicAverageFreePressureDissipation: boolean;
303
+ monotonicAverageFreePressureDissipationRequired: boolean;
304
+ monotonicMaxPressureEnvelope: boolean;
305
+ finalPorePressureDissipationRatio: number;
306
+ blockerCodes: string[];
307
+ }
282
308
  export type FemSolverConvergenceStatus = 'converged' | 'nonconverged';
283
- export type FemSolverTerminationReason = 'converged' | 'max_iterations' | 'force_residual_exceeded' | 'yield_residual_exceeded' | 'material_nonconvergence' | 'consolidation_nonconvergence';
309
+ export type FemSolverTerminationReason = 'converged' | 'max_iterations' | 'linear_solver_nonconverged' | 'force_residual_exceeded' | 'yield_residual_exceeded' | 'material_nonconvergence' | 'consolidation_nonconvergence';
284
310
  export interface FemSolverResidualHistoryEntry {
285
311
  iteration: number;
286
312
  residualRatio: number;
@@ -288,6 +314,11 @@ export interface FemSolverResidualHistoryEntry {
288
314
  yieldResidualRatio?: number;
289
315
  residualTolerance?: number;
290
316
  maxFreeResidualKn?: number;
317
+ reactionBalanceRatio?: number;
318
+ maxYieldResidualRatio?: number;
319
+ yieldResidualTolerance?: number;
320
+ maxEquivalentPlasticStrain?: number;
321
+ maxEquivalentPlasticStrainIncrement?: number;
291
322
  axialStrain?: number;
292
323
  verticalStressKpa?: number;
293
324
  converged: boolean;
@@ -297,6 +328,9 @@ export interface FemSolverLoadStepConvergence {
297
328
  stageId?: string;
298
329
  stageLabel?: string;
299
330
  loadFactor?: number;
331
+ requestedLoadFactor?: number;
332
+ cutbackDepth?: number;
333
+ adaptiveCutback?: boolean;
300
334
  cumulativeLoadKpa?: number;
301
335
  iterations: number;
302
336
  residualRatio: number;
@@ -322,16 +356,45 @@ export interface FemSolverConvergenceReport {
322
356
  loadSteps: FemSolverLoadStepConvergence[];
323
357
  failure?: FemSolverConvergenceFailure;
324
358
  }
359
+ export interface FemResultDruckerPragerAdaptiveLoadStepAttemptAudit {
360
+ attempt: number;
361
+ startLoadFactor: number;
362
+ targetLoadFactor: number;
363
+ requestedLoadFactor: number;
364
+ cutbackDepth: number;
365
+ accepted: boolean;
366
+ rollbackApplied: boolean;
367
+ terminationReason: FemSolverTerminationReason;
368
+ committedStateSignatureBefore: string;
369
+ committedStateSignatureAfter: string;
370
+ }
371
+ export interface FemResultDruckerPragerAdaptiveLoadSteppingAudit {
372
+ schemaVersion: 'fem-plane-strain-dp-adaptive-load-stepping.v1';
373
+ enabled: boolean;
374
+ strategy: 'explicit-only' | 'cutback-bisection';
375
+ requestedStepCount: number;
376
+ attemptedStepCount: number;
377
+ acceptedStepCount: number;
378
+ cutbackCount: number;
379
+ maxCutbackDepth: number;
380
+ minLoadFactorIncrement: number;
381
+ requestedLoadFactors: number[];
382
+ acceptedLoadFactors: number[];
383
+ attempts: FemResultDruckerPragerAdaptiveLoadStepAttemptAudit[];
384
+ blockerCodes: string[];
385
+ }
386
+ export type FemResultBackendId = 'builtin-elastic3d-demo' | 'builtin-staged-excavation-demo' | 'builtin-tunnel-volume-loss-demo' | 'builtin-staged-consolidation-1d' | 'builtin-nonlinear-column-v0' | 'builtin-biot-up-plane-strain-v0' | 'builtin-plane-strain-dp-adaptive-v0';
325
387
  export interface FemResultManifest {
326
388
  schemaVersion: 'fem-result-manifest.v0';
327
389
  caseId: string;
328
390
  title: string;
329
391
  generatedAt: string;
330
392
  backend: {
331
- id: 'builtin-elastic3d-demo' | 'builtin-staged-excavation-demo' | 'builtin-tunnel-volume-loss-demo' | 'builtin-staged-consolidation-1d' | 'builtin-nonlinear-column-v0' | 'builtin-biot-up-plane-strain-v0';
393
+ id: FemResultBackendId;
332
394
  label: string;
333
395
  deterministic: true;
334
396
  version: string;
397
+ productionReady?: false;
335
398
  };
336
399
  analysisCase: FemAnalysisCase;
337
400
  validation: FemValidationSummary;
@@ -346,6 +409,8 @@ export interface FemResultManifest {
346
409
  };
347
410
  envelope: FemResultEnvelope;
348
411
  pressureAudit?: FemResultPressureAudit;
412
+ biotTransientAcceptance?: FemResultBiotTransientAcceptance;
413
+ adaptiveLoadStepping?: FemResultDruckerPragerAdaptiveLoadSteppingAudit;
349
414
  solverConvergence?: FemSolverConvergenceReport;
350
415
  visualization: FemVisualizationMesh;
351
416
  resultFields?: FemResultField[];