@geotechcli/core 0.4.110 → 0.4.112
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/brain.d.ts.map +1 -1
- package/dist/agents/brain.js +31 -2
- package/dist/agents/brain.js.map +1 -1
- package/dist/agents/fem-tools.js +5 -0
- package/dist/agents/fem-tools.js.map +1 -1
- package/dist/agents/safety.d.ts +1 -0
- package/dist/agents/safety.d.ts.map +1 -1
- package/dist/agents/safety.js +62 -0
- package/dist/agents/safety.js.map +1 -1
- package/dist/fem/engineering-evidence.d.ts +21 -2
- package/dist/fem/engineering-evidence.d.ts.map +1 -1
- package/dist/fem/engineering-evidence.js +257 -6
- package/dist/fem/engineering-evidence.js.map +1 -1
- package/dist/fem/index.d.ts +3 -2
- package/dist/fem/index.d.ts.map +1 -1
- package/dist/fem/index.js +1 -0
- package/dist/fem/index.js.map +1 -1
- package/dist/fem/nonlinear-plane-strain-solver.d.ts +10 -0
- package/dist/fem/nonlinear-plane-strain-solver.d.ts.map +1 -0
- package/dist/fem/nonlinear-plane-strain-solver.js +358 -0
- package/dist/fem/nonlinear-plane-strain-solver.js.map +1 -0
- package/dist/fem/plane-strain-assembly.d.ts +37 -0
- package/dist/fem/plane-strain-assembly.d.ts.map +1 -1
- package/dist/fem/plane-strain-assembly.js +209 -43
- package/dist/fem/plane-strain-assembly.js.map +1 -1
- package/dist/fem/production-readiness.js +2 -2
- package/dist/fem/production-readiness.js.map +1 -1
- package/dist/fem/types.d.ts +52 -3
- package/dist/fem/types.d.ts.map +1 -1
- package/dist/fem/validation.d.ts.map +1 -1
- package/dist/fem/validation.js +281 -10
- package/dist/fem/validation.js.map +1 -1
- package/dist/ingest/document-evidence-packet.d.ts +6 -6
- package/dist/ingest/geotech-document.d.ts +2 -1
- package/dist/ingest/geotech-document.d.ts.map +1 -1
- package/dist/ingest/geotech-document.js +2 -1
- package/dist/ingest/geotech-document.js.map +1 -1
- package/dist/ingest/geotech-extract.d.ts +2 -1
- package/dist/ingest/geotech-extract.d.ts.map +1 -1
- package/dist/ingest/geotech-extract.js +2 -1
- package/dist/ingest/geotech-extract.js.map +1 -1
- package/dist/ingest/job-worker.d.ts.map +1 -1
- package/dist/ingest/job-worker.js +48 -6
- package/dist/ingest/job-worker.js.map +1 -1
- package/dist/meta/metadata.json +1 -1
- package/package.json +1 -1
package/dist/fem/types.d.ts
CHANGED
|
@@ -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;
|
|
@@ -295,7 +306,7 @@ export interface FemResultBiotTransientAcceptance {
|
|
|
295
306
|
blockerCodes: string[];
|
|
296
307
|
}
|
|
297
308
|
export type FemSolverConvergenceStatus = 'converged' | 'nonconverged';
|
|
298
|
-
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';
|
|
299
310
|
export interface FemSolverResidualHistoryEntry {
|
|
300
311
|
iteration: number;
|
|
301
312
|
residualRatio: number;
|
|
@@ -303,6 +314,11 @@ export interface FemSolverResidualHistoryEntry {
|
|
|
303
314
|
yieldResidualRatio?: number;
|
|
304
315
|
residualTolerance?: number;
|
|
305
316
|
maxFreeResidualKn?: number;
|
|
317
|
+
reactionBalanceRatio?: number;
|
|
318
|
+
maxYieldResidualRatio?: number;
|
|
319
|
+
yieldResidualTolerance?: number;
|
|
320
|
+
maxEquivalentPlasticStrain?: number;
|
|
321
|
+
maxEquivalentPlasticStrainIncrement?: number;
|
|
306
322
|
axialStrain?: number;
|
|
307
323
|
verticalStressKpa?: number;
|
|
308
324
|
converged: boolean;
|
|
@@ -312,6 +328,9 @@ export interface FemSolverLoadStepConvergence {
|
|
|
312
328
|
stageId?: string;
|
|
313
329
|
stageLabel?: string;
|
|
314
330
|
loadFactor?: number;
|
|
331
|
+
requestedLoadFactor?: number;
|
|
332
|
+
cutbackDepth?: number;
|
|
333
|
+
adaptiveCutback?: boolean;
|
|
315
334
|
cumulativeLoadKpa?: number;
|
|
316
335
|
iterations: number;
|
|
317
336
|
residualRatio: number;
|
|
@@ -337,16 +356,45 @@ export interface FemSolverConvergenceReport {
|
|
|
337
356
|
loadSteps: FemSolverLoadStepConvergence[];
|
|
338
357
|
failure?: FemSolverConvergenceFailure;
|
|
339
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';
|
|
340
387
|
export interface FemResultManifest {
|
|
341
388
|
schemaVersion: 'fem-result-manifest.v0';
|
|
342
389
|
caseId: string;
|
|
343
390
|
title: string;
|
|
344
391
|
generatedAt: string;
|
|
345
392
|
backend: {
|
|
346
|
-
id:
|
|
393
|
+
id: FemResultBackendId;
|
|
347
394
|
label: string;
|
|
348
395
|
deterministic: true;
|
|
349
396
|
version: string;
|
|
397
|
+
productionReady?: false;
|
|
350
398
|
};
|
|
351
399
|
analysisCase: FemAnalysisCase;
|
|
352
400
|
validation: FemValidationSummary;
|
|
@@ -362,6 +410,7 @@ export interface FemResultManifest {
|
|
|
362
410
|
envelope: FemResultEnvelope;
|
|
363
411
|
pressureAudit?: FemResultPressureAudit;
|
|
364
412
|
biotTransientAcceptance?: FemResultBiotTransientAcceptance;
|
|
413
|
+
adaptiveLoadStepping?: FemResultDruckerPragerAdaptiveLoadSteppingAudit;
|
|
365
414
|
solverConvergence?: FemSolverConvergenceReport;
|
|
366
415
|
visualization: FemVisualizationMesh;
|
|
367
416
|
resultFields?: FemResultField[];
|
package/dist/fem/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/fem/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/fem/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/fem/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EAEjB,oBAAoB,EACrB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/fem/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EAEjB,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAooBpB,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,eAAe,GAAG,oBAAoB,CAslBvF;AA63BD,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,oBAAoB,CA8K3F"}
|
package/dist/fem/validation.js
CHANGED
|
@@ -21,6 +21,8 @@ const FEM_WEBGL_UINT16_INDEX_LIMIT = 65_535;
|
|
|
21
21
|
const FEM_MAX_PREVIEW_MESH_NODES = FEM_WEBGL_UINT16_INDEX_LIMIT + 1;
|
|
22
22
|
const FEM_MIN_BIOT_TRANSIENT_STEPS = 3;
|
|
23
23
|
const FEM_MAX_BIOT_TIME_STEP_GROWTH_RATIO = 8;
|
|
24
|
+
const FEM_PLANE_STRAIN_DP_ADAPTIVE_BACKEND_ID = 'builtin-plane-strain-dp-adaptive-v0';
|
|
25
|
+
const FEM_PLANE_STRAIN_DP_ANALYSIS_TYPE = 'static_2d_plane_strain_drucker_prager';
|
|
24
26
|
function expectedMeshCounts(mesh) {
|
|
25
27
|
if (mesh.elementType === 'quad4_plane_strain') {
|
|
26
28
|
return {
|
|
@@ -223,6 +225,22 @@ function validateOptionalResultMetadata(findings, manifest, nodeCount, outlineNo
|
|
|
223
225
|
['max_mobilized_strength_ratio', manifest.envelope.maxMobilizedStrengthRatio],
|
|
224
226
|
['drainage_path', manifest.envelope.drainagePathM],
|
|
225
227
|
['consolidation_duration', manifest.envelope.consolidationDurationYears],
|
|
228
|
+
['solver_load_steps', manifest.envelope.solverLoadSteps],
|
|
229
|
+
['solver_iterations', manifest.envelope.solverIterations],
|
|
230
|
+
['max_solver_residual_ratio', manifest.envelope.maxSolverResidualRatio],
|
|
231
|
+
['max_yield_residual_ratio', manifest.envelope.maxYieldResidualRatio],
|
|
232
|
+
['nonlinear_plastic_strain', manifest.envelope.nonlinearPlasticStrain],
|
|
233
|
+
['plane_strain_dof_count', manifest.envelope.planeStrainDofCount],
|
|
234
|
+
['plane_strain_free_dof_count', manifest.envelope.planeStrainFreeDofCount],
|
|
235
|
+
['plane_strain_constrained_dof_count', manifest.envelope.planeStrainConstrainedDofCount],
|
|
236
|
+
['plastic_gauss_point_count', manifest.envelope.plasticGaussPointCount],
|
|
237
|
+
['max_equivalent_plastic_strain', manifest.envelope.maxEquivalentPlasticStrain],
|
|
238
|
+
['max_equivalent_plastic_strain_increment', manifest.envelope.maxEquivalentPlasticStrainIncrement],
|
|
239
|
+
['adaptive_attempt_count', manifest.envelope.adaptiveAttemptCount],
|
|
240
|
+
['adaptive_accepted_step_count', manifest.envelope.adaptiveAcceptedStepCount],
|
|
241
|
+
['adaptive_rejected_attempt_count', manifest.envelope.adaptiveRejectedAttemptCount],
|
|
242
|
+
['adaptive_cutback_count', manifest.envelope.adaptiveCutbackCount],
|
|
243
|
+
['adaptive_max_cutback_depth', manifest.envelope.adaptiveMaxCutbackDepth],
|
|
226
244
|
['time_step_count', manifest.envelope.timeStepCount],
|
|
227
245
|
['min_pore_pressure', manifest.envelope.minPorePressureKpa],
|
|
228
246
|
['max_pore_pressure', manifest.envelope.maxPorePressureKpa],
|
|
@@ -562,6 +580,7 @@ export function validateFemAnalysisCase(caseFile) {
|
|
|
562
580
|
]);
|
|
563
581
|
}
|
|
564
582
|
const { domain, raft, excavation, tunnel, consolidation, biot } = caseFile.geometry;
|
|
583
|
+
const isPlaneStrainDruckerPragerAnalysis = caseFile.analysisType === FEM_PLANE_STRAIN_DP_ANALYSIS_TYPE;
|
|
565
584
|
if (caseFile.schemaVersion !== 'fem-analysis-case.v0') {
|
|
566
585
|
findings.push(finding('blocker', 'schema.unsupported', 'Only fem-analysis-case.v0 is supported.'));
|
|
567
586
|
}
|
|
@@ -586,7 +605,9 @@ export function validateFemAnalysisCase(caseFile) {
|
|
|
586
605
|
if (caseFile.objective === 'foundation_settlement' && caseFile.analysisType !== 'static_3d_small_strain') {
|
|
587
606
|
findings.push(finding('blocker', 'analysis.unsupported', `Unsupported analysis type: ${caseFile.analysisType}.`));
|
|
588
607
|
}
|
|
589
|
-
if (caseFile.objective === 'excavation_deformation' &&
|
|
608
|
+
if (caseFile.objective === 'excavation_deformation' &&
|
|
609
|
+
caseFile.analysisType !== 'static_3d_staged_elastic' &&
|
|
610
|
+
!isPlaneStrainDruckerPragerAnalysis) {
|
|
590
611
|
findings.push(finding('blocker', 'analysis.unsupported', `Unsupported analysis type: ${caseFile.analysisType}.`));
|
|
591
612
|
}
|
|
592
613
|
if (caseFile.objective === 'tunnel_volume_loss_settlement' && caseFile.analysisType !== 'empirical_3d_settlement_surface') {
|
|
@@ -696,7 +717,9 @@ export function validateFemAnalysisCase(caseFile) {
|
|
|
696
717
|
if (previousDepth !== excavation.finalDepthM) {
|
|
697
718
|
findings.push(finding('review', 'stages.final-depth-review', 'Last excavation stage does not exactly match the final depth; staging requires review.'));
|
|
698
719
|
}
|
|
699
|
-
findings.push(
|
|
720
|
+
findings.push(isPlaneStrainDruckerPragerAnalysis
|
|
721
|
+
? finding('review', 'excavation.plane-strain-dp-preview', 'Excavation preview uses experimental plane-strain Drucker-Prager plasticity and still excludes retaining wall design, basal heave, seepage, consolidation, and production design acceptance.')
|
|
722
|
+
: finding('review', 'excavation.design-excluded', 'Excavation preview excludes retaining wall design, basal heave, seepage, consolidation, and nonlinear soil response.'));
|
|
700
723
|
}
|
|
701
724
|
}
|
|
702
725
|
if (caseFile.objective === 'tunnel_volume_loss_settlement') {
|
|
@@ -886,6 +909,16 @@ export function validateFemAnalysisCase(caseFile) {
|
|
|
886
909
|
pushFiniteNumberFinding(findings, material.hydraulicConductivityMPerS, `${prefix}.hydraulic-conductivity`, 'Hydraulic conductivity', { positive: true });
|
|
887
910
|
}
|
|
888
911
|
}
|
|
912
|
+
if (isPlaneStrainDruckerPragerAnalysis) {
|
|
913
|
+
if (material.model !== 'mohr_coulomb') {
|
|
914
|
+
findings.push(finding('blocker', `${prefix}.plane-strain-dp-model-required`, 'Plane-strain Drucker-Prager previews require mohr_coulomb material strength parameters for Drucker-Prager mapping.'));
|
|
915
|
+
}
|
|
916
|
+
const frictionAngleDeg = material.frictionAngleDeg;
|
|
917
|
+
if (!isFiniteNumber(frictionAngleDeg) || frictionAngleDeg <= 0 || frictionAngleDeg >= 50) {
|
|
918
|
+
findings.push(finding('blocker', `${prefix}.plane-strain-dp-friction-angle-invalid`, 'Plane-strain Drucker-Prager previews require a finite Mohr-Coulomb friction angle between 0 and 50 degrees.'));
|
|
919
|
+
}
|
|
920
|
+
pushFiniteNumberFinding(findings, material.cohesionKpa, `${prefix}.plane-strain-dp-cohesion`, 'Plane-strain Drucker-Prager cohesion', { nonNegative: true });
|
|
921
|
+
}
|
|
889
922
|
if (caseFile.objective === 'seepage_groundwater_coupling') {
|
|
890
923
|
if (material.model !== 'linear_elastic') {
|
|
891
924
|
findings.push(finding('blocker', `${prefix}.biot-model-required`, 'Biot u-p preview requires a linear_elastic material with hydraulic coupling parameters.'));
|
|
@@ -973,10 +1006,13 @@ export function validateFemAnalysisCase(caseFile) {
|
|
|
973
1006
|
if (caseFile.mesh.elementType !== 'hex8' && caseFile.mesh.elementType !== 'quad4_plane_strain') {
|
|
974
1007
|
findings.push(finding('blocker', 'mesh.element-type-invalid', `Unsupported mesh element type: ${String(caseFile.mesh.elementType)}.`));
|
|
975
1008
|
}
|
|
976
|
-
|
|
977
|
-
|
|
1009
|
+
const requiresQuad4PlaneStrainMesh = caseFile.objective === 'seepage_groundwater_coupling' || isPlaneStrainDruckerPragerAnalysis;
|
|
1010
|
+
if (requiresQuad4PlaneStrainMesh && caseFile.mesh.elementType !== 'quad4_plane_strain') {
|
|
1011
|
+
findings.push(finding('blocker', isPlaneStrainDruckerPragerAnalysis ? 'mesh.element-type-plane-strain-dp-required' : 'mesh.element-type-biot-required', isPlaneStrainDruckerPragerAnalysis
|
|
1012
|
+
? 'Plane-strain Drucker-Prager previews require quad4_plane_strain mesh elements.'
|
|
1013
|
+
: 'Biot u-p seepage previews require quad4_plane_strain mesh elements.'));
|
|
978
1014
|
}
|
|
979
|
-
if (
|
|
1015
|
+
if (!requiresQuad4PlaneStrainMesh && caseFile.mesh.elementType !== 'hex8') {
|
|
980
1016
|
findings.push(finding('blocker', 'mesh.element-type-hex8-required', 'Non-Biot FEM preview cases require hex8 mesh elements.'));
|
|
981
1017
|
}
|
|
982
1018
|
if (!Number.isInteger(divisionsX) ||
|
|
@@ -1141,7 +1177,7 @@ function validateNonlinearSolverConvergenceReport(findings, manifest, expectedLo
|
|
|
1141
1177
|
const fallback = { forceBalanceTolerance: 1e-3, residualTolerance: 1e-6 };
|
|
1142
1178
|
const report = manifest.solverConvergence;
|
|
1143
1179
|
if (!isRecord(report)) {
|
|
1144
|
-
findings.push(finding('blocker', 'result.solver-convergence.missing', 'Nonlinear
|
|
1180
|
+
findings.push(finding('blocker', 'result.solver-convergence.missing', 'Nonlinear solver manifests must include explicit convergence policy and load-step residual history.'));
|
|
1145
1181
|
return fallback;
|
|
1146
1182
|
}
|
|
1147
1183
|
if (report.schemaVersion !== 'fem-solver-convergence-report.v1') {
|
|
@@ -1151,7 +1187,7 @@ function validateNonlinearSolverConvergenceReport(findings, manifest, expectedLo
|
|
|
1151
1187
|
findings.push(finding('blocker', 'result.solver-convergence.status-invalid', 'Solver convergence status must be converged or nonconverged.'));
|
|
1152
1188
|
}
|
|
1153
1189
|
if (report.status === 'nonconverged') {
|
|
1154
|
-
findings.push(finding('blocker', 'result.solver-convergence.nonconverged', 'Nonlinear
|
|
1190
|
+
findings.push(finding('blocker', 'result.solver-convergence.nonconverged', 'Nonlinear solver did not satisfy its configured convergence policy.'));
|
|
1155
1191
|
}
|
|
1156
1192
|
const policy = report.policy;
|
|
1157
1193
|
let forceBalanceTolerance = fallback.forceBalanceTolerance;
|
|
@@ -1181,12 +1217,13 @@ function validateNonlinearSolverConvergenceReport(findings, manifest, expectedLo
|
|
|
1181
1217
|
findings.push(finding('blocker', 'result.solver-convergence.load-steps.invalid', 'Solver convergence loadSteps must be an array.'));
|
|
1182
1218
|
return { forceBalanceTolerance, residualTolerance };
|
|
1183
1219
|
}
|
|
1184
|
-
if (report.loadSteps.length !== expectedLoadSteps) {
|
|
1185
|
-
findings.push(finding('blocker', 'result.solver-convergence.load-steps.count-mismatch', 'Solver convergence load steps must match
|
|
1220
|
+
if (expectedLoadSteps != null && report.loadSteps.length !== expectedLoadSteps) {
|
|
1221
|
+
findings.push(finding('blocker', 'result.solver-convergence.load-steps.count-mismatch', 'Solver convergence load steps must match the expected accepted load-step count.'));
|
|
1186
1222
|
}
|
|
1187
1223
|
const validTerminationReasons = new Set([
|
|
1188
1224
|
'converged',
|
|
1189
1225
|
'max_iterations',
|
|
1226
|
+
'linear_solver_nonconverged',
|
|
1190
1227
|
'force_residual_exceeded',
|
|
1191
1228
|
'yield_residual_exceeded',
|
|
1192
1229
|
'material_nonconvergence',
|
|
@@ -1205,6 +1242,24 @@ function validateNonlinearSolverConvergenceReport(findings, manifest, expectedLo
|
|
|
1205
1242
|
if (step.stageId != null && !isNonEmptyString(step.stageId)) {
|
|
1206
1243
|
findings.push(finding('blocker', `${prefix}.stage-id.invalid`, 'Solver convergence stageId must be a non-empty string when present.'));
|
|
1207
1244
|
}
|
|
1245
|
+
if (step.loadFactor != null) {
|
|
1246
|
+
const loadFactorOk = pushFiniteNumberFinding(findings, step.loadFactor, `${prefix}.load-factor`, 'Solver convergence load factor', { positive: true });
|
|
1247
|
+
if (loadFactorOk && step.loadFactor > 1 + 1e-9) {
|
|
1248
|
+
findings.push(finding('blocker', `${prefix}.load-factor.range-invalid`, 'Solver convergence load factor must not exceed 1.0.'));
|
|
1249
|
+
}
|
|
1250
|
+
}
|
|
1251
|
+
if (step.requestedLoadFactor != null) {
|
|
1252
|
+
const requestedOk = pushFiniteNumberFinding(findings, step.requestedLoadFactor, `${prefix}.requested-load-factor`, 'Solver convergence requested load factor', { positive: true });
|
|
1253
|
+
if (requestedOk && step.requestedLoadFactor > 1 + 1e-9) {
|
|
1254
|
+
findings.push(finding('blocker', `${prefix}.requested-load-factor.range-invalid`, 'Solver convergence requested load factor must not exceed 1.0.'));
|
|
1255
|
+
}
|
|
1256
|
+
}
|
|
1257
|
+
if (step.cutbackDepth != null && (!Number.isInteger(step.cutbackDepth) || step.cutbackDepth < 0)) {
|
|
1258
|
+
findings.push(finding('blocker', `${prefix}.cutback-depth.invalid`, 'Solver convergence cutback depth must be a non-negative integer when present.'));
|
|
1259
|
+
}
|
|
1260
|
+
if (step.adaptiveCutback != null && typeof step.adaptiveCutback !== 'boolean') {
|
|
1261
|
+
findings.push(finding('blocker', `${prefix}.adaptive-cutback.invalid`, 'Solver convergence adaptiveCutback must be boolean when present.'));
|
|
1262
|
+
}
|
|
1208
1263
|
if (!Number.isInteger(step.iterations) || step.iterations < 0) {
|
|
1209
1264
|
findings.push(finding('blocker', `${prefix}.iterations.invalid`, 'Solver convergence iterations must be a non-negative integer.'));
|
|
1210
1265
|
}
|
|
@@ -1266,6 +1321,196 @@ function validateNonlinearSolverConvergenceReport(findings, manifest, expectedLo
|
|
|
1266
1321
|
}
|
|
1267
1322
|
return { forceBalanceTolerance, residualTolerance };
|
|
1268
1323
|
}
|
|
1324
|
+
function validatePlaneStrainDpAdaptiveAcceptance(findings, manifest, solverTolerances) {
|
|
1325
|
+
const { envelope } = manifest;
|
|
1326
|
+
const adaptive = manifest.adaptiveLoadStepping;
|
|
1327
|
+
if (!isRecord(adaptive)) {
|
|
1328
|
+
findings.push(finding('blocker', 'result.dp-adaptive.missing', 'Plane-strain Drucker-Prager manifests must include adaptive load-stepping metadata.'));
|
|
1329
|
+
return;
|
|
1330
|
+
}
|
|
1331
|
+
if (adaptive.schemaVersion !== 'fem-plane-strain-dp-adaptive-load-stepping.v1') {
|
|
1332
|
+
findings.push(finding('blocker', 'result.dp-adaptive.schema.unsupported', 'Unsupported plane-strain Drucker-Prager adaptive load-stepping schema.'));
|
|
1333
|
+
}
|
|
1334
|
+
if (adaptive.enabled !== true) {
|
|
1335
|
+
findings.push(finding('blocker', 'result.dp-adaptive.enabled-required', 'Plane-strain Drucker-Prager adaptive load stepping must be enabled for this backend.'));
|
|
1336
|
+
}
|
|
1337
|
+
if (adaptive.strategy !== 'cutback-bisection') {
|
|
1338
|
+
findings.push(finding('blocker', 'result.dp-adaptive.strategy.invalid', 'Plane-strain Drucker-Prager adaptive load stepping must use cutback-bisection strategy.'));
|
|
1339
|
+
}
|
|
1340
|
+
const requestedStepCountOk = pushFiniteNumberFinding(findings, adaptive.requestedStepCount, 'result.dp-adaptive.requested-step-count', 'DP adaptive requested step count', { positive: true });
|
|
1341
|
+
const attemptedStepCountOk = pushFiniteNumberFinding(findings, adaptive.attemptedStepCount, 'result.dp-adaptive.attempted-step-count', 'DP adaptive attempted step count', { positive: true });
|
|
1342
|
+
const acceptedStepCountOk = pushFiniteNumberFinding(findings, adaptive.acceptedStepCount, 'result.dp-adaptive.accepted-step-count', 'DP adaptive accepted step count', { positive: true });
|
|
1343
|
+
const cutbackCountOk = pushFiniteNumberFinding(findings, adaptive.cutbackCount, 'result.dp-adaptive.cutback-count', 'DP adaptive cutback count', { nonNegative: true });
|
|
1344
|
+
const maxCutbackDepthOk = pushFiniteNumberFinding(findings, adaptive.maxCutbackDepth, 'result.dp-adaptive.max-cutback-depth', 'DP adaptive max cutback depth', { nonNegative: true });
|
|
1345
|
+
pushFiniteNumberFinding(findings, adaptive.minLoadFactorIncrement, 'result.dp-adaptive.min-load-factor-increment', 'DP adaptive minimum load-factor increment', { positive: true });
|
|
1346
|
+
for (const [ok, value, code, label] of [
|
|
1347
|
+
[requestedStepCountOk, adaptive.requestedStepCount, 'requested-step-count', 'requested step count'],
|
|
1348
|
+
[attemptedStepCountOk, adaptive.attemptedStepCount, 'attempted-step-count', 'attempted step count'],
|
|
1349
|
+
[acceptedStepCountOk, adaptive.acceptedStepCount, 'accepted-step-count', 'accepted step count'],
|
|
1350
|
+
[cutbackCountOk, adaptive.cutbackCount, 'cutback-count', 'cutback count'],
|
|
1351
|
+
[maxCutbackDepthOk, adaptive.maxCutbackDepth, 'max-cutback-depth', 'max cutback depth'],
|
|
1352
|
+
]) {
|
|
1353
|
+
if (ok && !Number.isInteger(value)) {
|
|
1354
|
+
findings.push(finding('blocker', `result.dp-adaptive.${code}.integer`, `DP adaptive ${label} must be an integer.`));
|
|
1355
|
+
}
|
|
1356
|
+
}
|
|
1357
|
+
if (!Array.isArray(adaptive.requestedLoadFactors) || adaptive.requestedLoadFactors.length === 0) {
|
|
1358
|
+
findings.push(finding('blocker', 'result.dp-adaptive.requested-load-factors.invalid', 'DP adaptive requestedLoadFactors must be a non-empty array.'));
|
|
1359
|
+
}
|
|
1360
|
+
else {
|
|
1361
|
+
if (requestedStepCountOk && adaptive.requestedLoadFactors.length !== adaptive.requestedStepCount) {
|
|
1362
|
+
findings.push(finding('blocker', 'result.dp-adaptive.requested-load-factors.count-mismatch', 'DP adaptive requested load factors must match requestedStepCount.'));
|
|
1363
|
+
}
|
|
1364
|
+
for (const [index, loadFactor] of adaptive.requestedLoadFactors.entries()) {
|
|
1365
|
+
const ok = pushFiniteNumberFinding(findings, loadFactor, `result.dp-adaptive.requestedLoadFactors.${index}`, 'DP adaptive requested load factor', { positive: true });
|
|
1366
|
+
if (ok && loadFactor > 1 + 1e-9) {
|
|
1367
|
+
findings.push(finding('blocker', `result.dp-adaptive.requestedLoadFactors.${index}.range-invalid`, 'DP adaptive requested load factors must not exceed 1.0.'));
|
|
1368
|
+
}
|
|
1369
|
+
}
|
|
1370
|
+
}
|
|
1371
|
+
if (!Array.isArray(adaptive.acceptedLoadFactors) || adaptive.acceptedLoadFactors.length === 0) {
|
|
1372
|
+
findings.push(finding('blocker', 'result.dp-adaptive.accepted-load-factors.invalid', 'DP adaptive acceptedLoadFactors must be a non-empty array.'));
|
|
1373
|
+
}
|
|
1374
|
+
else {
|
|
1375
|
+
if (acceptedStepCountOk && adaptive.acceptedLoadFactors.length !== adaptive.acceptedStepCount) {
|
|
1376
|
+
findings.push(finding('blocker', 'result.dp-adaptive.accepted-load-factors.count-mismatch', 'DP adaptive accepted load factors must match acceptedStepCount.'));
|
|
1377
|
+
}
|
|
1378
|
+
let previous = 0;
|
|
1379
|
+
for (const [index, loadFactor] of adaptive.acceptedLoadFactors.entries()) {
|
|
1380
|
+
const ok = pushFiniteNumberFinding(findings, loadFactor, `result.dp-adaptive.acceptedLoadFactors.${index}`, 'DP adaptive accepted load factor', { positive: true });
|
|
1381
|
+
if (ok) {
|
|
1382
|
+
if (loadFactor <= previous + 1e-12) {
|
|
1383
|
+
findings.push(finding('blocker', `result.dp-adaptive.acceptedLoadFactors.${index}.not-increasing`, 'DP adaptive accepted load factors must be strictly increasing.'));
|
|
1384
|
+
}
|
|
1385
|
+
if (loadFactor > 1 + 1e-9) {
|
|
1386
|
+
findings.push(finding('blocker', `result.dp-adaptive.acceptedLoadFactors.${index}.range-invalid`, 'DP adaptive accepted load factors must not exceed 1.0.'));
|
|
1387
|
+
}
|
|
1388
|
+
previous = loadFactor;
|
|
1389
|
+
}
|
|
1390
|
+
}
|
|
1391
|
+
const finalLoadFactor = adaptive.acceptedLoadFactors.at(-1);
|
|
1392
|
+
if (isFiniteNumber(finalLoadFactor) && Math.abs(finalLoadFactor - 1) > 1e-9) {
|
|
1393
|
+
findings.push(finding('blocker', 'result.dp-adaptive.accepted-load-factors.final-load-mismatch', 'DP adaptive accepted load factors must reach full load factor 1.0.'));
|
|
1394
|
+
}
|
|
1395
|
+
}
|
|
1396
|
+
if (!Array.isArray(adaptive.attempts) || adaptive.attempts.length === 0) {
|
|
1397
|
+
findings.push(finding('blocker', 'result.dp-adaptive.attempts.invalid', 'DP adaptive attempts must be a non-empty array.'));
|
|
1398
|
+
}
|
|
1399
|
+
else {
|
|
1400
|
+
if (attemptedStepCountOk && adaptive.attempts.length !== adaptive.attemptedStepCount) {
|
|
1401
|
+
findings.push(finding('blocker', 'result.dp-adaptive.attempts.count-mismatch', 'DP adaptive attempts must match attemptedStepCount.'));
|
|
1402
|
+
}
|
|
1403
|
+
const acceptedAttempts = adaptive.attempts.filter((attempt) => isRecord(attempt) && attempt.accepted === true);
|
|
1404
|
+
const rejectedAttempts = adaptive.attempts.filter((attempt) => isRecord(attempt) && attempt.accepted === false);
|
|
1405
|
+
if (acceptedStepCountOk && acceptedAttempts.length !== adaptive.acceptedStepCount) {
|
|
1406
|
+
findings.push(finding('blocker', 'result.dp-adaptive.attempts.accepted-count-mismatch', 'DP adaptive accepted attempt count must match acceptedStepCount.'));
|
|
1407
|
+
}
|
|
1408
|
+
if (isFiniteNumber(envelope.adaptiveRejectedAttemptCount) && rejectedAttempts.length !== envelope.adaptiveRejectedAttemptCount) {
|
|
1409
|
+
findings.push(finding('blocker', 'result.dp-adaptive.attempts.rejected-count-mismatch', 'DP adaptive rejected attempt count must match the envelope.'));
|
|
1410
|
+
}
|
|
1411
|
+
for (const [index, attempt] of adaptive.attempts.entries()) {
|
|
1412
|
+
const prefix = `result.dp-adaptive.attempts.${index}`;
|
|
1413
|
+
if (!isRecord(attempt)) {
|
|
1414
|
+
findings.push(finding('blocker', `${prefix}.shape-invalid`, 'DP adaptive attempt must be an object.'));
|
|
1415
|
+
continue;
|
|
1416
|
+
}
|
|
1417
|
+
if (!Number.isInteger(attempt.attempt) || attempt.attempt !== index + 1) {
|
|
1418
|
+
findings.push(finding('blocker', `${prefix}.attempt.sequence-invalid`, 'DP adaptive attempts must be sequentially numbered.'));
|
|
1419
|
+
}
|
|
1420
|
+
pushFiniteNumberFinding(findings, attempt.startLoadFactor, `${prefix}.start-load-factor`, 'DP adaptive attempt start load factor', { nonNegative: true });
|
|
1421
|
+
pushFiniteNumberFinding(findings, attempt.targetLoadFactor, `${prefix}.target-load-factor`, 'DP adaptive attempt target load factor', { positive: true });
|
|
1422
|
+
pushFiniteNumberFinding(findings, attempt.requestedLoadFactor, `${prefix}.requested-load-factor`, 'DP adaptive attempt requested load factor', { positive: true });
|
|
1423
|
+
if (!Number.isInteger(attempt.cutbackDepth) || attempt.cutbackDepth < 0) {
|
|
1424
|
+
findings.push(finding('blocker', `${prefix}.cutback-depth.invalid`, 'DP adaptive attempt cutbackDepth must be a non-negative integer.'));
|
|
1425
|
+
}
|
|
1426
|
+
if (typeof attempt.accepted !== 'boolean') {
|
|
1427
|
+
findings.push(finding('blocker', `${prefix}.accepted.invalid`, 'DP adaptive attempt accepted must be boolean.'));
|
|
1428
|
+
}
|
|
1429
|
+
if (typeof attempt.rollbackApplied !== 'boolean') {
|
|
1430
|
+
findings.push(finding('blocker', `${prefix}.rollback-applied.invalid`, 'DP adaptive attempt rollbackApplied must be boolean.'));
|
|
1431
|
+
}
|
|
1432
|
+
if (!isNonEmptyString(attempt.committedStateSignatureBefore) || !isNonEmptyString(attempt.committedStateSignatureAfter)) {
|
|
1433
|
+
findings.push(finding('blocker', `${prefix}.state-signature.missing`, 'DP adaptive attempts must include committed state signatures before and after.'));
|
|
1434
|
+
}
|
|
1435
|
+
if (attempt.accepted === false) {
|
|
1436
|
+
if (attempt.rollbackApplied !== true) {
|
|
1437
|
+
findings.push(finding('blocker', `${prefix}.rollback-required`, 'Rejected DP adaptive attempts must apply rollback.'));
|
|
1438
|
+
}
|
|
1439
|
+
if (isNonEmptyString(attempt.committedStateSignatureBefore) &&
|
|
1440
|
+
isNonEmptyString(attempt.committedStateSignatureAfter) &&
|
|
1441
|
+
attempt.committedStateSignatureAfter !== attempt.committedStateSignatureBefore) {
|
|
1442
|
+
findings.push(finding('blocker', `${prefix}.rollback-state-mutated`, 'Rejected DP adaptive attempts must preserve the committed state signature.'));
|
|
1443
|
+
}
|
|
1444
|
+
}
|
|
1445
|
+
if (attempt.accepted === true && attempt.terminationReason !== 'converged') {
|
|
1446
|
+
findings.push(finding('blocker', `${prefix}.accepted-not-converged`, 'Accepted DP adaptive attempts must terminate with converged.'));
|
|
1447
|
+
}
|
|
1448
|
+
}
|
|
1449
|
+
}
|
|
1450
|
+
if (!Array.isArray(adaptive.blockerCodes)) {
|
|
1451
|
+
findings.push(finding('blocker', 'result.dp-adaptive.blocker-codes.invalid', 'DP adaptive blockerCodes must be an array.'));
|
|
1452
|
+
}
|
|
1453
|
+
else if (adaptive.blockerCodes.length > 0) {
|
|
1454
|
+
findings.push(finding('blocker', 'result.dp-adaptive.blocker-codes-not-empty', 'Accepted DP adaptive metadata must not include blocker codes.'));
|
|
1455
|
+
}
|
|
1456
|
+
const solverLoadStepsOk = pushFiniteNumberFinding(findings, envelope.solverLoadSteps, 'result.envelope.dp.solver-load-steps', 'DP envelope solver load steps', { positive: true });
|
|
1457
|
+
const solverIterationsOk = pushFiniteNumberFinding(findings, envelope.solverIterations, 'result.envelope.dp.solver-iterations', 'DP envelope solver iterations', { nonNegative: true });
|
|
1458
|
+
const solverResidualOk = pushFiniteNumberFinding(findings, envelope.maxSolverResidualRatio, 'result.envelope.dp.max-solver-residual-ratio', 'DP envelope max solver residual ratio', { nonNegative: true });
|
|
1459
|
+
const yieldResidualOk = pushFiniteNumberFinding(findings, envelope.maxYieldResidualRatio, 'result.envelope.dp.max-yield-residual-ratio', 'DP envelope max yield residual ratio', { nonNegative: true });
|
|
1460
|
+
pushFiniteNumberFinding(findings, envelope.nonlinearPlasticStrain, 'result.envelope.dp.nonlinear-plastic-strain', 'DP envelope nonlinear plastic strain', { nonNegative: true });
|
|
1461
|
+
const dofCountOk = pushFiniteNumberFinding(findings, envelope.planeStrainDofCount, 'result.envelope.dp.dof-count', 'DP envelope DOF count', { positive: true });
|
|
1462
|
+
const freeDofCountOk = pushFiniteNumberFinding(findings, envelope.planeStrainFreeDofCount, 'result.envelope.dp.free-dof-count', 'DP envelope free DOF count', { positive: true });
|
|
1463
|
+
const constrainedDofCountOk = pushFiniteNumberFinding(findings, envelope.planeStrainConstrainedDofCount, 'result.envelope.dp.constrained-dof-count', 'DP envelope constrained DOF count', { positive: true });
|
|
1464
|
+
const plasticGaussPointCountOk = pushFiniteNumberFinding(findings, envelope.plasticGaussPointCount, 'result.envelope.dp.plastic-gauss-point-count', 'DP envelope plastic Gauss-point count', { nonNegative: true });
|
|
1465
|
+
pushFiniteNumberFinding(findings, envelope.maxEquivalentPlasticStrain, 'result.envelope.dp.max-equivalent-plastic-strain', 'DP envelope max equivalent plastic strain', { nonNegative: true });
|
|
1466
|
+
pushFiniteNumberFinding(findings, envelope.maxEquivalentPlasticStrainIncrement, 'result.envelope.dp.max-equivalent-plastic-strain-increment', 'DP envelope max equivalent plastic strain increment', { nonNegative: true });
|
|
1467
|
+
const adaptiveAttemptCountOk = pushFiniteNumberFinding(findings, envelope.adaptiveAttemptCount, 'result.envelope.dp.adaptive-attempt-count', 'DP envelope adaptive attempt count', { positive: true });
|
|
1468
|
+
const adaptiveAcceptedStepCountOk = pushFiniteNumberFinding(findings, envelope.adaptiveAcceptedStepCount, 'result.envelope.dp.adaptive-accepted-step-count', 'DP envelope adaptive accepted step count', { positive: true });
|
|
1469
|
+
const adaptiveRejectedAttemptCountOk = pushFiniteNumberFinding(findings, envelope.adaptiveRejectedAttemptCount, 'result.envelope.dp.adaptive-rejected-attempt-count', 'DP envelope adaptive rejected attempt count', { nonNegative: true });
|
|
1470
|
+
const adaptiveCutbackCountOk = pushFiniteNumberFinding(findings, envelope.adaptiveCutbackCount, 'result.envelope.dp.adaptive-cutback-count', 'DP envelope adaptive cutback count', { nonNegative: true });
|
|
1471
|
+
const adaptiveMaxCutbackDepthOk = pushFiniteNumberFinding(findings, envelope.adaptiveMaxCutbackDepth, 'result.envelope.dp.adaptive-max-cutback-depth', 'DP envelope adaptive max cutback depth', { nonNegative: true });
|
|
1472
|
+
for (const [ok, value, code, label] of [
|
|
1473
|
+
[solverLoadStepsOk, envelope.solverLoadSteps, 'solver-load-steps', 'solver load steps'],
|
|
1474
|
+
[solverIterationsOk, envelope.solverIterations, 'solver-iterations', 'solver iterations'],
|
|
1475
|
+
[dofCountOk, envelope.planeStrainDofCount, 'dof-count', 'DOF count'],
|
|
1476
|
+
[freeDofCountOk, envelope.planeStrainFreeDofCount, 'free-dof-count', 'free DOF count'],
|
|
1477
|
+
[constrainedDofCountOk, envelope.planeStrainConstrainedDofCount, 'constrained-dof-count', 'constrained DOF count'],
|
|
1478
|
+
[plasticGaussPointCountOk, envelope.plasticGaussPointCount, 'plastic-gauss-point-count', 'plastic Gauss-point count'],
|
|
1479
|
+
[adaptiveAttemptCountOk, envelope.adaptiveAttemptCount, 'adaptive-attempt-count', 'adaptive attempt count'],
|
|
1480
|
+
[adaptiveAcceptedStepCountOk, envelope.adaptiveAcceptedStepCount, 'adaptive-accepted-step-count', 'adaptive accepted step count'],
|
|
1481
|
+
[adaptiveRejectedAttemptCountOk, envelope.adaptiveRejectedAttemptCount, 'adaptive-rejected-attempt-count', 'adaptive rejected attempt count'],
|
|
1482
|
+
[adaptiveCutbackCountOk, envelope.adaptiveCutbackCount, 'adaptive-cutback-count', 'adaptive cutback count'],
|
|
1483
|
+
[adaptiveMaxCutbackDepthOk, envelope.adaptiveMaxCutbackDepth, 'adaptive-max-cutback-depth', 'adaptive max cutback depth'],
|
|
1484
|
+
]) {
|
|
1485
|
+
if (ok && !Number.isInteger(value)) {
|
|
1486
|
+
findings.push(finding('blocker', `result.envelope.dp.${code}.integer`, `DP envelope ${label} must be an integer.`));
|
|
1487
|
+
}
|
|
1488
|
+
}
|
|
1489
|
+
if (solverLoadStepsOk && acceptedStepCountOk && envelope.solverLoadSteps !== adaptive.acceptedStepCount) {
|
|
1490
|
+
findings.push(finding('blocker', 'result.envelope.dp.solver-load-steps-adaptive-mismatch', 'DP envelope solver load steps must match adaptive acceptedStepCount.'));
|
|
1491
|
+
}
|
|
1492
|
+
if (adaptiveAttemptCountOk && attemptedStepCountOk && envelope.adaptiveAttemptCount !== adaptive.attemptedStepCount) {
|
|
1493
|
+
findings.push(finding('blocker', 'result.envelope.dp.adaptive-attempt-count-mismatch', 'DP envelope adaptive attempt count must match adaptive metadata.'));
|
|
1494
|
+
}
|
|
1495
|
+
if (adaptiveAcceptedStepCountOk && acceptedStepCountOk && envelope.adaptiveAcceptedStepCount !== adaptive.acceptedStepCount) {
|
|
1496
|
+
findings.push(finding('blocker', 'result.envelope.dp.adaptive-accepted-step-count-mismatch', 'DP envelope adaptive accepted step count must match adaptive metadata.'));
|
|
1497
|
+
}
|
|
1498
|
+
if (adaptiveCutbackCountOk && cutbackCountOk && envelope.adaptiveCutbackCount !== adaptive.cutbackCount) {
|
|
1499
|
+
findings.push(finding('blocker', 'result.envelope.dp.adaptive-cutback-count-mismatch', 'DP envelope adaptive cutback count must match adaptive metadata.'));
|
|
1500
|
+
}
|
|
1501
|
+
if (adaptiveMaxCutbackDepthOk && maxCutbackDepthOk && envelope.adaptiveMaxCutbackDepth !== adaptive.maxCutbackDepth) {
|
|
1502
|
+
findings.push(finding('blocker', 'result.envelope.dp.adaptive-max-cutback-depth-mismatch', 'DP envelope adaptive max cutback depth must match adaptive metadata.'));
|
|
1503
|
+
}
|
|
1504
|
+
if (dofCountOk && freeDofCountOk && constrainedDofCountOk && envelope.planeStrainFreeDofCount + envelope.planeStrainConstrainedDofCount !== envelope.planeStrainDofCount) {
|
|
1505
|
+
findings.push(finding('blocker', 'result.envelope.dp.dof-count-mismatch', 'DP free and constrained DOF counts must sum to the total DOF count.'));
|
|
1506
|
+
}
|
|
1507
|
+
if (solverResidualOk && envelope.maxSolverResidualRatio > solverTolerances.forceBalanceTolerance) {
|
|
1508
|
+
findings.push(finding('blocker', 'result.envelope.dp.solver-residual-too-large', 'DP solver residual exceeds the force-balance tolerance.'));
|
|
1509
|
+
}
|
|
1510
|
+
if (yieldResidualOk && envelope.maxYieldResidualRatio > solverTolerances.residualTolerance) {
|
|
1511
|
+
findings.push(finding('blocker', 'result.envelope.dp.yield-residual-too-large', 'DP yield residual exceeds the material return-map tolerance.'));
|
|
1512
|
+
}
|
|
1513
|
+
}
|
|
1269
1514
|
function validateResultEnvelopeSemantics(findings, manifest) {
|
|
1270
1515
|
const { envelope, analysisCase } = manifest;
|
|
1271
1516
|
const maxSettlementOk = pushFiniteNumberFinding(findings, envelope.maxSettlementMm, 'result.envelope.max-settlement', 'Envelope max settlement', { nonNegative: true });
|
|
@@ -1278,7 +1523,7 @@ function validateResultEnvelopeSemantics(findings, manifest) {
|
|
|
1278
1523
|
}
|
|
1279
1524
|
const expectedBackendByObjective = new Map([
|
|
1280
1525
|
['foundation_settlement', ['builtin-elastic3d-demo']],
|
|
1281
|
-
['excavation_deformation', ['builtin-staged-excavation-demo']],
|
|
1526
|
+
['excavation_deformation', ['builtin-staged-excavation-demo', FEM_PLANE_STRAIN_DP_ADAPTIVE_BACKEND_ID]],
|
|
1282
1527
|
['tunnel_volume_loss_settlement', ['builtin-tunnel-volume-loss-demo']],
|
|
1283
1528
|
['staged_settlement_consolidation', ['builtin-staged-consolidation-1d', 'builtin-nonlinear-column-v0']],
|
|
1284
1529
|
['seepage_groundwater_coupling', ['builtin-biot-up-plane-strain-v0']],
|
|
@@ -1295,6 +1540,18 @@ function validateResultEnvelopeSemantics(findings, manifest) {
|
|
|
1295
1540
|
findings.push(finding('blocker', 'result.biot-transient-acceptance.unexpected', 'Biot transient acceptance metadata is only valid for Biot u-p seepage result manifests.'));
|
|
1296
1541
|
}
|
|
1297
1542
|
}
|
|
1543
|
+
const isPlaneStrainDpAdaptiveManifest = manifest.backend.id === FEM_PLANE_STRAIN_DP_ADAPTIVE_BACKEND_ID;
|
|
1544
|
+
if (!isPlaneStrainDpAdaptiveManifest && manifest.adaptiveLoadStepping != null) {
|
|
1545
|
+
findings.push(finding('blocker', 'result.dp-adaptive.unexpected', 'Drucker-Prager adaptive metadata is only valid for plane-strain DP adaptive result manifests.'));
|
|
1546
|
+
}
|
|
1547
|
+
if (isPlaneStrainDpAdaptiveManifest) {
|
|
1548
|
+
if (analysisCase.analysisType !== FEM_PLANE_STRAIN_DP_ANALYSIS_TYPE) {
|
|
1549
|
+
findings.push(finding('blocker', 'result.dp-adaptive.analysis-type-mismatch', 'Plane-strain DP adaptive manifests require static_2d_plane_strain_drucker_prager analysis cases.'));
|
|
1550
|
+
}
|
|
1551
|
+
if (analysisCase.mesh.elementType !== 'quad4_plane_strain') {
|
|
1552
|
+
findings.push(finding('blocker', 'result.dp-adaptive.mesh-type-mismatch', 'Plane-strain DP adaptive manifests require quad4_plane_strain mesh cases.'));
|
|
1553
|
+
}
|
|
1554
|
+
}
|
|
1298
1555
|
if (analysisCase.objective === 'foundation_settlement') {
|
|
1299
1556
|
const raft = analysisCase.geometry.raft;
|
|
1300
1557
|
if (!raft)
|
|
@@ -1344,6 +1601,13 @@ function validateResultEnvelopeSemantics(findings, manifest) {
|
|
|
1344
1601
|
if (maxSettlementOk && maxSurfaceOk) {
|
|
1345
1602
|
pushApproximateMatchFinding(findings, envelope.maxSettlementMm, maxSurfaceSettlementMm, 'result.envelope.excavation-max-settlement-mismatch', 'Excavation max settlement', 0.001);
|
|
1346
1603
|
}
|
|
1604
|
+
if (isPlaneStrainDpAdaptiveManifest) {
|
|
1605
|
+
const expectedDpLoadSteps = Number.isInteger(envelope.solverLoadSteps) && envelope.solverLoadSteps > 0
|
|
1606
|
+
? envelope.solverLoadSteps
|
|
1607
|
+
: undefined;
|
|
1608
|
+
const solverTolerances = validateNonlinearSolverConvergenceReport(findings, manifest, expectedDpLoadSteps);
|
|
1609
|
+
validatePlaneStrainDpAdaptiveAcceptance(findings, manifest, solverTolerances);
|
|
1610
|
+
}
|
|
1347
1611
|
return;
|
|
1348
1612
|
}
|
|
1349
1613
|
if (analysisCase.objective === 'tunnel_volume_loss_settlement') {
|
|
@@ -1607,6 +1871,7 @@ export function validateFemResultManifest(manifest) {
|
|
|
1607
1871
|
'builtin-staged-consolidation-1d',
|
|
1608
1872
|
'builtin-nonlinear-column-v0',
|
|
1609
1873
|
'builtin-biot-up-plane-strain-v0',
|
|
1874
|
+
FEM_PLANE_STRAIN_DP_ADAPTIVE_BACKEND_ID,
|
|
1610
1875
|
]);
|
|
1611
1876
|
if (!validBackendIds.has(manifest.backend.id)) {
|
|
1612
1877
|
findings.push(finding('blocker', 'result.backend.id-invalid', `Unsupported FEM result backend: ${String(manifest.backend.id)}.`));
|
|
@@ -1620,6 +1885,12 @@ export function validateFemResultManifest(manifest) {
|
|
|
1620
1885
|
if (!isNonEmptyString(manifest.backend.version)) {
|
|
1621
1886
|
findings.push(finding('blocker', 'result.backend.version.missing', 'Result backend version must be a non-empty string.'));
|
|
1622
1887
|
}
|
|
1888
|
+
if (manifest.productionReady === true) {
|
|
1889
|
+
findings.push(finding('blocker', 'result.production-ready.overclaim', 'FEM result manifests must not claim productionReady true in strong-beta preview mode.'));
|
|
1890
|
+
}
|
|
1891
|
+
if (manifest.backend.productionReady === true) {
|
|
1892
|
+
findings.push(finding('blocker', 'result.backend.production-ready.overclaim', 'FEM result backends must not claim productionReady true in strong-beta preview mode.'));
|
|
1893
|
+
}
|
|
1623
1894
|
for (const [key, value] of Object.entries(manifest.envelope)) {
|
|
1624
1895
|
if (!Number.isFinite(value)) {
|
|
1625
1896
|
findings.push(finding('blocker', `result.envelope.${key}.non-finite`, `Envelope value ${key} must be finite.`));
|