@geotechcli/core 0.4.122 → 0.4.124
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/fem-tools.js +55 -5
- package/dist/agents/fem-tools.js.map +1 -1
- package/dist/agents/tool-normalization.d.ts.map +1 -1
- package/dist/agents/tool-normalization.js +144 -0
- package/dist/agents/tool-normalization.js.map +1 -1
- package/dist/fem/engineering-evidence.d.ts.map +1 -1
- package/dist/fem/engineering-evidence.js +118 -3
- package/dist/fem/engineering-evidence.js.map +1 -1
- package/dist/fem/index.d.ts +1 -1
- package/dist/fem/index.d.ts.map +1 -1
- package/dist/fem/index.js +1 -1
- package/dist/fem/index.js.map +1 -1
- package/dist/fem/nonlinear-plane-strain-solver.d.ts +6 -0
- package/dist/fem/nonlinear-plane-strain-solver.d.ts.map +1 -1
- package/dist/fem/nonlinear-plane-strain-solver.js +251 -3
- package/dist/fem/nonlinear-plane-strain-solver.js.map +1 -1
- package/dist/fem/production-readiness.js +1 -1
- package/dist/fem/production-readiness.js.map +1 -1
- package/dist/fem/routing.d.ts +1 -1
- package/dist/fem/routing.d.ts.map +1 -1
- package/dist/fem/routing.js +165 -6
- package/dist/fem/routing.js.map +1 -1
- package/dist/fem/types.d.ts +19 -1
- package/dist/fem/types.d.ts.map +1 -1
- package/dist/fem/validation.d.ts.map +1 -1
- package/dist/fem/validation.js +271 -10
- package/dist/fem/validation.js.map +1 -1
- package/dist/meta/metadata.json +1 -1
- package/package.json +1 -1
|
@@ -159,6 +159,21 @@ const DEFAULT_EXTERNAL_BENCHMARK_REFERENCES = [
|
|
|
159
159
|
retrievedAt: '2026-06-04',
|
|
160
160
|
},
|
|
161
161
|
},
|
|
162
|
+
{
|
|
163
|
+
id: 'opengeosys-liquid-flow-vogel-massmann-benchmarks',
|
|
164
|
+
sourceType: 'open-source-solver',
|
|
165
|
+
label: 'OpenGeoSys Liquid Flow Vogel/Massmann verification benchmark reference',
|
|
166
|
+
citation: 'OpenGeoSys Documentation, Liquid Flow verification examples by Vogel and Maßmann, including the h1_1Dsteady saturated groundwater-flow benchmark against analytical solutions.',
|
|
167
|
+
referenceSolver: {
|
|
168
|
+
name: 'OpenGeoSys',
|
|
169
|
+
version: '6.5.7 documentation',
|
|
170
|
+
vendor: 'OpenGeoSys project',
|
|
171
|
+
analysisProcedure: 'LIQUID_FLOW saturated single-phase Darcy flow verification',
|
|
172
|
+
elementType: 'Liquid Flow finite elements',
|
|
173
|
+
url: 'https://www.opengeosys.org/6.5.7/docs/benchmarks/liquid-flow/liquid_flow-bgr/',
|
|
174
|
+
retrievedAt: '2026-06-04',
|
|
175
|
+
},
|
|
176
|
+
},
|
|
162
177
|
];
|
|
163
178
|
function degToRad(degrees) {
|
|
164
179
|
return (degrees * Math.PI) / 180;
|
|
@@ -712,7 +727,9 @@ function buildDefaultExternalBenchmarkComparisonResults(input) {
|
|
|
712
727
|
.find((requirement) => requirement.id === 'consolidation-settlement-time-curve');
|
|
713
728
|
const biotRequirement = DEFAULT_EXTERNAL_BENCHMARK_REQUIRED_QUANTITIES
|
|
714
729
|
.find((requirement) => requirement.id === 'biot-pore-pressure-dissipation');
|
|
715
|
-
|
|
730
|
+
const seepageRequirement = DEFAULT_EXTERNAL_BENCHMARK_REQUIRED_QUANTITIES
|
|
731
|
+
.find((requirement) => requirement.id === 'seepage-head-flux-gradient');
|
|
732
|
+
if (!consolidationRequirement || !biotRequirement || !seepageRequirement) {
|
|
716
733
|
throw new Error('Default FEM external benchmark quantity requirements are missing.');
|
|
717
734
|
}
|
|
718
735
|
const consolidationPoints = input.consolidation.steps.map((step) => ({
|
|
@@ -868,6 +885,60 @@ function buildDefaultExternalBenchmarkComparisonResults(input) {
|
|
|
868
885
|
quantity: biotRequirement.quantity,
|
|
869
886
|
}) &&
|
|
870
887
|
seriesSummarySatisfiesRequirementTolerance(ogsSeries, biotRequirement);
|
|
888
|
+
const seepageDeltaHeadM = input.openGeoSysLiquidFlowUpstreamHeadM - input.openGeoSysLiquidFlowDownstreamHeadM;
|
|
889
|
+
const seepagePoints = input.openGeoSysLiquidFlowSeepage.nodes
|
|
890
|
+
.map((node) => ({
|
|
891
|
+
x: node.xM,
|
|
892
|
+
actual: node.headM,
|
|
893
|
+
expected: input.openGeoSysLiquidFlowUpstreamHeadM -
|
|
894
|
+
seepageDeltaHeadM * (node.xM / input.openGeoSysLiquidFlowDomainLengthM),
|
|
895
|
+
}))
|
|
896
|
+
.sort((left, right) => left.x - right.x || left.actual - right.actual);
|
|
897
|
+
const seepageSeries = buildFemExternalBenchmarkSeriesSummary({
|
|
898
|
+
xQuantity: 'horizontal coordinate',
|
|
899
|
+
xUnit: 'm',
|
|
900
|
+
yQuantity: 'hydraulic head',
|
|
901
|
+
yUnit: 'm',
|
|
902
|
+
points: seepagePoints,
|
|
903
|
+
notes: [
|
|
904
|
+
'Quad4 plane-strain steady Darcy seepage head profile compared with the OpenGeoSys Liquid Flow h1_1Dsteady analytical verification class.',
|
|
905
|
+
'Boundary flux, hydraulic gradient, and head profile are checked together; commercial solver comparison remains missing.',
|
|
906
|
+
],
|
|
907
|
+
});
|
|
908
|
+
const seepageActual = input.openGeoSysLiquidFlowSeepage.totalPositiveBoundaryFluxM3PerS;
|
|
909
|
+
const seepageExpected = input.openGeoSysLiquidFlowExpectedBoundaryFluxM3PerS;
|
|
910
|
+
const seepageEvidencePayload = {
|
|
911
|
+
schemaVersion: 'fem-external-benchmark-evidence.v1',
|
|
912
|
+
caseId: 'opengeosys-liquid-flow-h1-1dsteady-head-flux-gradient',
|
|
913
|
+
sourceId: 'opengeosys-liquid-flow-vogel-massmann-benchmarks',
|
|
914
|
+
method: input.openGeoSysLiquidFlowSeepage.method,
|
|
915
|
+
headDofCount: input.openGeoSysLiquidFlowSeepage.headDofCount,
|
|
916
|
+
freeHeadDofCount: input.openGeoSysLiquidFlowSeepage.freeHeadDofCount,
|
|
917
|
+
constrainedHeadDofCount: input.openGeoSysLiquidFlowSeepage.constrainedHeadDofCount,
|
|
918
|
+
massBalanceErrorRatio: input.openGeoSysLiquidFlowSeepage.massBalanceErrorRatio,
|
|
919
|
+
upstreamHeadM: input.openGeoSysLiquidFlowUpstreamHeadM,
|
|
920
|
+
downstreamHeadM: input.openGeoSysLiquidFlowDownstreamHeadM,
|
|
921
|
+
expectedBoundaryFluxM3PerS: seepageExpected,
|
|
922
|
+
seriesHashSha256: seepageSeries.seriesHashSha256,
|
|
923
|
+
};
|
|
924
|
+
const seepageResultPayload = {
|
|
925
|
+
actual: seepageActual,
|
|
926
|
+
expected: seepageExpected,
|
|
927
|
+
massBalanceErrorRatio: input.openGeoSysLiquidFlowSeepage.massBalanceErrorRatio,
|
|
928
|
+
maxAbsoluteError: seepageSeries.maxAbsoluteError,
|
|
929
|
+
maxRelativeError: seepageSeries.maxRelativeError,
|
|
930
|
+
resultSeriesHashSha256: seepageSeries.seriesHashSha256,
|
|
931
|
+
};
|
|
932
|
+
const seepageAccepted = input.openGeoSysLiquidFlowSeepage.converged &&
|
|
933
|
+
externalBenchmarkFinalAccepted({
|
|
934
|
+
actual: seepageActual,
|
|
935
|
+
expected: seepageExpected,
|
|
936
|
+
tolerance: seepageRequirement.tolerance,
|
|
937
|
+
toleranceType: seepageRequirement.toleranceType,
|
|
938
|
+
unit: seepageRequirement.unit,
|
|
939
|
+
quantity: seepageRequirement.quantity,
|
|
940
|
+
}) &&
|
|
941
|
+
seriesSummarySatisfiesRequirementTolerance(seepageSeries, seepageRequirement);
|
|
871
942
|
return [
|
|
872
943
|
{
|
|
873
944
|
id: 'published-terzaghi-1d-consolidation-tv-0-197',
|
|
@@ -966,6 +1037,45 @@ function buildDefaultExternalBenchmarkComparisonResults(input) {
|
|
|
966
1037
|
'This adds open-source cross-solver evidence but does not satisfy the required commercial-solver production benchmark gate.',
|
|
967
1038
|
],
|
|
968
1039
|
},
|
|
1040
|
+
{
|
|
1041
|
+
id: 'opengeosys-liquid-flow-h1-1dsteady-head-flux-gradient',
|
|
1042
|
+
quantityRequirementId: seepageRequirement.id,
|
|
1043
|
+
referenceId: 'opengeosys-liquid-flow-vogel-massmann-benchmarks',
|
|
1044
|
+
caseId: 'opengeosys-liquid-flow-h1-1dsteady-head-flux-gradient',
|
|
1045
|
+
comparisonKind: 'series-summary',
|
|
1046
|
+
metricName: 'steadyDarcyHeadFluxGradient',
|
|
1047
|
+
quantity: seepageRequirement.quantity,
|
|
1048
|
+
unit: seepageRequirement.unit,
|
|
1049
|
+
actual: round(seepageActual, 12),
|
|
1050
|
+
expected: round(seepageExpected, 12),
|
|
1051
|
+
tolerance: seepageRequirement.tolerance,
|
|
1052
|
+
toleranceType: seepageRequirement.toleranceType,
|
|
1053
|
+
accepted: seepageAccepted,
|
|
1054
|
+
candidateSolver: {
|
|
1055
|
+
name: 'geotechCLI FEM evidence suite',
|
|
1056
|
+
version: 'strong-beta',
|
|
1057
|
+
solverType: 'geotechcli-kernel',
|
|
1058
|
+
analysisProcedure: 'Quad4 plane-strain steady Darcy seepage head solve',
|
|
1059
|
+
elementType: 'Quad4 plane-strain hydraulic-head evidence mesh',
|
|
1060
|
+
runId: 'opengeosys-liquid-flow-h1-1dsteady-head-flux-gradient',
|
|
1061
|
+
},
|
|
1062
|
+
referenceSolver: {
|
|
1063
|
+
name: 'OpenGeoSys',
|
|
1064
|
+
version: '6.5.7 documentation',
|
|
1065
|
+
vendor: 'OpenGeoSys project',
|
|
1066
|
+
solverType: 'open-source-solver',
|
|
1067
|
+
analysisProcedure: 'LIQUID_FLOW h1_1Dsteady analytical verification benchmark',
|
|
1068
|
+
elementType: 'Liquid Flow finite elements',
|
|
1069
|
+
runId: 'LiquidFlow/Vogel-Massmann/h1_1Dsteady',
|
|
1070
|
+
},
|
|
1071
|
+
evidenceHashSha256: hashFemBenchmarkPayload(seepageEvidencePayload),
|
|
1072
|
+
resultHashSha256: hashFemBenchmarkPayload(seepageResultPayload),
|
|
1073
|
+
seriesSummary: seepageSeries,
|
|
1074
|
+
notes: [
|
|
1075
|
+
'Generated open-source solver comparison record against the OpenGeoSys Liquid Flow saturated Darcy verification class.',
|
|
1076
|
+
'This partially covers seepage head/flux/gradient evidence but does not satisfy the required published-source or commercial-solver production benchmark gates.',
|
|
1077
|
+
],
|
|
1078
|
+
},
|
|
969
1079
|
];
|
|
970
1080
|
}
|
|
971
1081
|
export function evaluateFemTolerance(quantity, actual, expected, absoluteTolerance, options = {}) {
|
|
@@ -2032,8 +2142,8 @@ export function runFemEngineeringEvidenceSuite(policy = DEFAULT_FEM_CONVERGENCE_
|
|
|
2032
2142
|
const seepage2dMesh = buildPlaneStrainRectangularMesh({
|
|
2033
2143
|
widthM: 20,
|
|
2034
2144
|
heightM: 5,
|
|
2035
|
-
divisionsX:
|
|
2036
|
-
divisionsY:
|
|
2145
|
+
divisionsX: 8,
|
|
2146
|
+
divisionsY: 2,
|
|
2037
2147
|
materialId: 'soil',
|
|
2038
2148
|
});
|
|
2039
2149
|
const seepage2d = runPlaneStrainSteadySeepage({
|
|
@@ -2532,6 +2642,11 @@ export function runFemEngineeringEvidenceSuite(policy = DEFAULT_FEM_CONVERGENCE_
|
|
|
2532
2642
|
openGeoSysConsolidation,
|
|
2533
2643
|
openGeoSysConsolidationDimensionlessTime,
|
|
2534
2644
|
openGeoSysConsolidationLoadKpa,
|
|
2645
|
+
openGeoSysLiquidFlowSeepage: seepage2d,
|
|
2646
|
+
openGeoSysLiquidFlowDomainLengthM: 20,
|
|
2647
|
+
openGeoSysLiquidFlowUpstreamHeadM: 10,
|
|
2648
|
+
openGeoSysLiquidFlowDownstreamHeadM: 6,
|
|
2649
|
+
openGeoSysLiquidFlowExpectedBoundaryFluxM3PerS: seepage2dExpectedFlow,
|
|
2535
2650
|
}),
|
|
2536
2651
|
});
|
|
2537
2652
|
return {
|