use super::*;
pub(super) fn manifest_specs() -> Vec<FixtureSpec> {
vec![
FixtureSpec {
id: "cantilever_gpu_provider",
description: "canonical linear static fixture with provider-backed GPU residency",
model: || fixture_model(FixtureId::CantileverLinearStatic),
run_kind: AnalysisRunKind::LinearStatic,
expect_validate_error: None,
expect_run_error: Some("RM.FEA.RUN_LINEAR_STATIC.SOLVER_MODEL_INVALID"),
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::DeviceRef),
max_solver_host_sync_count: Some(32),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "cantilever_gpu_fallback",
description: "canonical linear static fixture with no provider fallback",
model: || fixture_model(FixtureId::CantileverLinearStatic),
run_kind: AnalysisRunKind::LinearStatic,
expect_validate_error: None,
expect_run_error: Some("RM.FEA.RUN_LINEAR_STATIC.SOLVER_MODEL_INVALID"),
expected_publishable: Some(true),
parity_tolerance: Some(ParityTolerance {
abs: 1e-12,
rel: 1e-12,
}),
gpu_mode: Some(GpuMode::WithoutProvider),
residency_expectation: Some(ResidencyExpectation::HostFallback),
max_solver_host_sync_count: Some(0),
min_solver_device_apply_k_ratio: Some(0.0),
expected_solver_backend: Some("cpu_reference"),
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "cantilever_load_sweep_gpu_provider",
description: "larger load sweep fixture with provider-backed GPU residency",
model: || fixture_model(FixtureId::CantileverLoadSweep),
run_kind: AnalysisRunKind::LinearStatic,
expect_validate_error: None,
expect_run_error: Some("RM.FEA.RUN_LINEAR_STATIC.SOLVER_MODEL_INVALID"),
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::DeviceRef),
max_solver_host_sync_count: Some(32),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "cantilever_large_load_sweep_gpu_provider",
description: "extra-large load sweep fixture with provider-backed GPU residency",
model: || fixture_model(FixtureId::CantileverLargeLoadSweep),
run_kind: AnalysisRunKind::LinearStatic,
expect_validate_error: None,
expect_run_error: Some("RM.FEA.RUN_LINEAR_STATIC.SOLVER_MODEL_INVALID"),
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::DeviceRef),
max_solver_host_sync_count: Some(64),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "structural_axial_bar_reference_gpu_provider",
description: "axial bar structural reference fixture with provider-backed GPU residency",
model: || fixture_model(FixtureId::StructuralAxialBarReference),
run_kind: AnalysisRunKind::LinearStatic,
expect_validate_error: None,
expect_run_error: Some("RM.FEA.RUN_LINEAR_STATIC.SOLVER_MODEL_INVALID"),
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::DeviceRef),
max_solver_host_sync_count: Some(32),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "structural_beam_bending_reference_gpu_provider",
description:
"beam bending structural reference fixture with provider-backed GPU residency",
model: || fixture_model(FixtureId::StructuralBeamBendingReference),
run_kind: AnalysisRunKind::LinearStatic,
expect_validate_error: None,
expect_run_error: Some("RM.FEA.RUN_LINEAR_STATIC.SOLVER_MODEL_INVALID"),
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::DeviceRef),
max_solver_host_sync_count: Some(32),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "structural_beam_cantilever_end_moment_reference_cpu",
description: "beam cantilever end moment reference fixture with rotational DOFs",
model: || fixture_model(FixtureId::StructuralBeamCantileverEndMomentReference),
run_kind: AnalysisRunKind::LinearStatic,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: Some("cpu_reference"),
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "structural_beam_torsion_reference_cpu",
description: "beam torsion reference fixture with rotational DOFs",
model: || fixture_model(FixtureId::StructuralBeamTorsionReference),
run_kind: AnalysisRunKind::LinearStatic,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: Some("cpu_reference"),
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "structural_beam_force_and_moment_reference_cpu",
description: "beam force and moment superposition reference fixture",
model: || fixture_model(FixtureId::StructuralBeamForceAndMomentReference),
run_kind: AnalysisRunKind::LinearStatic,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: Some("cpu_reference"),
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "structural_shell_plate_moment_reference_cpu",
description: "shell plate moment reference fixture with rotational DOFs",
model: || fixture_model(FixtureId::StructuralShellPlateMomentReference),
run_kind: AnalysisRunKind::LinearStatic,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: Some("cpu_reference"),
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "multi_material_assembly_gpu_provider",
description:
"multi-material, multi-load assembly fixture with provider-backed GPU residency",
model: || fixture_model(FixtureId::MultiMaterialAssembly),
run_kind: AnalysisRunKind::LinearStatic,
expect_validate_error: None,
expect_run_error: Some("RM.FEA.RUN_LINEAR_STATIC.SOLVER_MODEL_INVALID"),
expected_publishable: Some(false),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::DeviceRef),
max_solver_host_sync_count: Some(48),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "modal_large_cpu",
description:
"large modal fixture with thresholded orthogonality/separation diagnostics",
model: || fixture_model(FixtureId::ModalLarge),
run_kind: AnalysisRunKind::Modal,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(false),
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: None,
modal_mode_count: Some(8),
transient_step_count: None,
max_modal_orthogonality_offdiag: Some(5.0e-3),
min_modal_relative_frequency_separation: Some(1.0e-5),
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "modal_large_gpu_provider",
description: "large modal fixture with provider-backed field residency",
model: || fixture_model(FixtureId::ModalLarge),
run_kind: AnalysisRunKind::Modal,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(false),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::DeviceRef),
max_solver_host_sync_count: Some(96),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: Some(8),
transient_step_count: None,
max_modal_orthogonality_offdiag: Some(5.0e-3),
min_modal_relative_frequency_separation: Some(1.0e-5),
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: Some(2.8),
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "modal_large_gpu_fallback",
description: "large modal fixture with no-provider host fallback",
model: || fixture_model(FixtureId::ModalLarge),
run_kind: AnalysisRunKind::Modal,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(false),
parity_tolerance: Some(ParityTolerance {
abs: 1e-12,
rel: 1e-12,
}),
gpu_mode: Some(GpuMode::WithoutProvider),
residency_expectation: Some(ResidencyExpectation::HostFallback),
max_solver_host_sync_count: Some(0),
min_solver_device_apply_k_ratio: Some(0.0),
expected_solver_backend: Some("cpu_reference"),
modal_mode_count: Some(8),
transient_step_count: None,
max_modal_orthogonality_offdiag: Some(5.0e-3),
min_modal_relative_frequency_separation: Some(1.0e-5),
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "modal_large_cpu_stress16",
description: "large modal fixture stress run at 16 modes",
model: || fixture_model(FixtureId::ModalLarge),
run_kind: AnalysisRunKind::Modal,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(false),
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: None,
modal_mode_count: Some(16),
transient_step_count: None,
max_modal_orthogonality_offdiag: Some(8.0e-3),
min_modal_relative_frequency_separation: Some(5.0e-6),
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "modal_large_gpu_provider_stress16",
description: "large modal fixture GPU provider stress run at 16 modes",
model: || fixture_model(FixtureId::ModalLarge),
run_kind: AnalysisRunKind::Modal,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(false),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::DeviceRef),
max_solver_host_sync_count: Some(144),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: Some(16),
transient_step_count: None,
max_modal_orthogonality_offdiag: Some(8.0e-3),
min_modal_relative_frequency_separation: Some(5.0e-6),
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: Some(2.2),
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "acoustic_harmonic_cpu",
description: "acoustic harmonic Helmholtz fixture on cpu",
model: || fixture_model(FixtureId::ModalLarge),
run_kind: AnalysisRunKind::Acoustic,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: None,
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "acoustic_harmonic_gpu_provider",
description: "acoustic harmonic Helmholtz fixture with provider-backed acceleration",
model: || fixture_model(FixtureId::ModalLarge),
run_kind: AnalysisRunKind::Acoustic,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::DeviceRef),
max_solver_host_sync_count: Some(48),
min_solver_device_apply_k_ratio: Some(0.0),
expected_solver_backend: Some("cpu_reference"),
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "acoustic_harmonic_gpu_fallback",
description: "acoustic harmonic Helmholtz fixture with no-provider host fallback",
model: || fixture_model(FixtureId::ModalLarge),
run_kind: AnalysisRunKind::Acoustic,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: Some(ParityTolerance {
abs: 1e-12,
rel: 1e-12,
}),
gpu_mode: Some(GpuMode::WithoutProvider),
residency_expectation: Some(ResidencyExpectation::HostFallback),
max_solver_host_sync_count: Some(0),
min_solver_device_apply_k_ratio: Some(0.0),
expected_solver_backend: Some("cpu_reference"),
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "acoustic_harmonic_missing_source",
description: "acoustic harmonic fixture rejects models without acoustic pressure source loads",
model: || fixture_model(FixtureId::ModalLarge),
run_kind: AnalysisRunKind::Acoustic,
expect_validate_error: None,
expect_run_error: Some("RM.FEA.RUN_ACOUSTIC.MISSING_ACOUSTIC_SOURCE"),
expected_publishable: None,
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: None,
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "acoustic_harmonic_missing_boundary",
description: "acoustic harmonic fixture rejects models without acoustic boundary conditions",
model: || fixture_model(FixtureId::ModalLarge),
run_kind: AnalysisRunKind::Acoustic,
expect_validate_error: None,
expect_run_error: Some("RM.FEA.RUN_ACOUSTIC.MISSING_ACOUSTIC_BOUNDARY"),
expected_publishable: None,
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: None,
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "transient_long_cpu",
description: "long transient fixture with thresholded stability diagnostics",
model: || fixture_model(FixtureId::TransientLong),
run_kind: AnalysisRunKind::Transient,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: None,
modal_mode_count: None,
transient_step_count: Some(24),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: Some(1.0e-2),
max_transient_energy_growth_ratio: Some(5.0),
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "transient_long_gpu_provider",
description: "long transient fixture with provider-backed field residency",
model: || fixture_model(FixtureId::TransientLong),
run_kind: AnalysisRunKind::Transient,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::DeviceRef),
max_solver_host_sync_count: Some(48),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: Some(24),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: Some(1.0e-2),
max_transient_energy_growth_ratio: Some(5.0),
min_gpu_speedup_ratio: Some(2.0),
min_transient_cache_hit_ratio: Some(0.2),
max_transient_cache_misses: Some(24.0),
},
FixtureSpec {
id: "transient_long_gpu_fallback",
description: "long transient fixture with no-provider host fallback",
model: || fixture_model(FixtureId::TransientLong),
run_kind: AnalysisRunKind::Transient,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: Some(ParityTolerance {
abs: 1e-12,
rel: 1e-12,
}),
gpu_mode: Some(GpuMode::WithoutProvider),
residency_expectation: Some(ResidencyExpectation::HostFallback),
max_solver_host_sync_count: Some(0),
min_solver_device_apply_k_ratio: Some(0.0),
expected_solver_backend: Some("cpu_reference"),
modal_mode_count: None,
transient_step_count: Some(24),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: Some(1.0e-2),
max_transient_energy_growth_ratio: Some(5.0),
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "transient_shock_cpu",
description: "challenging transient fixture with mixed-load shock profile",
model: || fixture_model(FixtureId::TransientShock),
run_kind: AnalysisRunKind::Transient,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: None,
modal_mode_count: None,
transient_step_count: Some(48),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: Some(2.0e-2),
max_transient_energy_growth_ratio: Some(8.0),
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "transient_shock_gpu_provider",
description: "challenging transient fixture with provider-backed acceleration",
model: || fixture_model(FixtureId::TransientShock),
run_kind: AnalysisRunKind::Transient,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::DeviceRef),
max_solver_host_sync_count: Some(96),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: Some(48),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: Some(2.0e-2),
max_transient_energy_growth_ratio: Some(8.0),
min_gpu_speedup_ratio: Some(1.8),
min_transient_cache_hit_ratio: Some(0.15),
max_transient_cache_misses: Some(40.0),
},
FixtureSpec {
id: "cfd_steady_cpu",
description: "cfd steady finite-volume fixture on cpu with flow diagnostics",
model: || fixture_model(FixtureId::CantileverLinearStatic),
run_kind: AnalysisRunKind::Cfd,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: None,
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "cfd_steady_gpu_provider",
description: "cfd steady finite-volume fixture with provider-backed acceleration",
model: || fixture_model(FixtureId::CantileverLinearStatic),
run_kind: AnalysisRunKind::Cfd,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::DeviceRef),
max_solver_host_sync_count: Some(64),
min_solver_device_apply_k_ratio: Some(0.0),
expected_solver_backend: Some("cpu_reference"),
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "cfd_steady_gpu_fallback",
description: "cfd steady finite-volume fixture with no-provider host fallback",
model: || fixture_model(FixtureId::CantileverLinearStatic),
run_kind: AnalysisRunKind::Cfd,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: Some(ParityTolerance {
abs: 1e-12,
rel: 1e-12,
}),
gpu_mode: Some(GpuMode::WithoutProvider),
residency_expectation: Some(ResidencyExpectation::HostFallback),
max_solver_host_sync_count: Some(0),
min_solver_device_apply_k_ratio: Some(0.0),
expected_solver_backend: Some("cpu_reference"),
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "cfd_transient_cpu",
description: "cfd transient velocity-pressure fixture on cpu",
model: || fixture_model(FixtureId::CantileverLinearStatic),
run_kind: AnalysisRunKind::Cfd,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: None,
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "cfd_transient_gpu_provider",
description: "cfd transient velocity-pressure fixture with provider-backed acceleration",
model: || fixture_model(FixtureId::CantileverLinearStatic),
run_kind: AnalysisRunKind::Cfd,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::DeviceRef),
max_solver_host_sync_count: Some(64),
min_solver_device_apply_k_ratio: Some(0.0),
expected_solver_backend: Some("cpu_reference"),
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "cfd_transient_gpu_fallback",
description: "cfd transient velocity-pressure fixture with no-provider host fallback",
model: || fixture_model(FixtureId::CantileverLinearStatic),
run_kind: AnalysisRunKind::Cfd,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: Some(ParityTolerance {
abs: 1e-12,
rel: 1e-12,
}),
gpu_mode: Some(GpuMode::WithoutProvider),
residency_expectation: Some(ResidencyExpectation::HostFallback),
max_solver_host_sync_count: Some(0),
min_solver_device_apply_k_ratio: Some(0.0),
expected_solver_backend: Some("cpu_reference"),
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "cfd_invalid_domain_options",
description: "cfd fixture rejects invalid fluid domain parameters",
model: || fixture_model(FixtureId::CantileverLinearStatic),
run_kind: AnalysisRunKind::Cfd,
expect_validate_error: None,
expect_run_error: Some("RM.FEA.RUN_CFD.INVALID_OPTIONS"),
expected_publishable: None,
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: None,
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "cfd_invalid_boundary_conditions",
description: "cfd fixture rejects incomplete authored boundary conditions",
model: || fixture_model(FixtureId::CantileverLinearStatic),
run_kind: AnalysisRunKind::Cfd,
expect_validate_error: None,
expect_run_error: Some("RM.FEA.RUN_CFD.INVALID_BOUNDARY_CONDITIONS"),
expected_publishable: None,
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: None,
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "cht_coupled_cpu",
description: "cht coupled channel/interface fixture on cpu with coupled diagnostics",
model: || fixture_model(FixtureId::CantileverLinearStatic),
run_kind: AnalysisRunKind::Cht,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: None,
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "cht_coupled_channel_slab_cpu",
description: "cht channel/slab fixture with authored conjugate heat-transfer interface",
model: || fixture_model(FixtureId::CantileverLinearStatic),
run_kind: AnalysisRunKind::Cht,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: None,
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "cht_coupled_gpu_provider",
description: "cht coupled channel/interface fixture with provider-backed acceleration",
model: || fixture_model(FixtureId::CantileverLinearStatic),
run_kind: AnalysisRunKind::Cht,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::DeviceRef),
max_solver_host_sync_count: Some(64),
min_solver_device_apply_k_ratio: Some(0.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "cht_coupled_gpu_fallback",
description: "cht coupled channel/interface fixture with no-provider host fallback",
model: || fixture_model(FixtureId::CantileverLinearStatic),
run_kind: AnalysisRunKind::Cht,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: Some(ParityTolerance {
abs: 1e-12,
rel: 1e-12,
}),
gpu_mode: Some(GpuMode::WithoutProvider),
residency_expectation: Some(ResidencyExpectation::HostFallback),
max_solver_host_sync_count: Some(0),
min_solver_device_apply_k_ratio: Some(0.0),
expected_solver_backend: None,
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "cht_coupled_invalid_interface_mapping",
description: "cht coupled fixture rejects structural contact interface mappings",
model: || fixture_model(FixtureId::CantileverLinearStatic),
run_kind: AnalysisRunKind::Cht,
expect_validate_error: None,
expect_run_error: Some("RM.FEA.RUN_CHT.INVALID_INTERFACE_MAPPING"),
expected_publishable: None,
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: None,
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "cht_coupled_invalid_cfd_domain",
description: "cht coupled fixture rejects invalid fluid domain parameters",
model: || fixture_model(FixtureId::CantileverLinearStatic),
run_kind: AnalysisRunKind::Cht,
expect_validate_error: None,
expect_run_error: Some("RM.FEA.RUN_CHT.INVALID_OPTIONS"),
expected_publishable: None,
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: None,
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "fsi_coupled_cpu",
description: "fsi coupled partitioned-interface fixture on cpu with coupled diagnostics",
model: || fixture_model(FixtureId::CantileverLinearStatic),
run_kind: AnalysisRunKind::Fsi,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: None,
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "fsi_coupled_pipe_plate_cpu",
description: "fsi pipe/plate fixture with authored fluid-structure interface",
model: || fixture_model(FixtureId::CantileverLinearStatic),
run_kind: AnalysisRunKind::Fsi,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: None,
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "fsi_coupled_gpu_provider",
description: "fsi coupled partitioned-interface fixture with provider-backed acceleration",
model: || fixture_model(FixtureId::CantileverLinearStatic),
run_kind: AnalysisRunKind::Fsi,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::DeviceRef),
max_solver_host_sync_count: Some(0),
min_solver_device_apply_k_ratio: Some(0.0),
expected_solver_backend: Some("cpu_reference"),
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "fsi_coupled_invalid_interface_mapping",
description: "fsi coupled fixture rejects structural contact interface mappings",
model: || fixture_model(FixtureId::CantileverLinearStatic),
run_kind: AnalysisRunKind::Fsi,
expect_validate_error: None,
expect_run_error: Some("RM.FEA.RUN_FSI.INVALID_INTERFACE_MAPPING"),
expected_publishable: None,
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: None,
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "fsi_coupled_invalid_cfd_domain",
description: "fsi coupled fixture rejects invalid fluid domain parameters",
model: || fixture_model(FixtureId::CantileverLinearStatic),
run_kind: AnalysisRunKind::Fsi,
expect_validate_error: None,
expect_run_error: Some("RM.FEA.RUN_FSI.INVALID_OPTIONS"),
expected_publishable: None,
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: None,
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "fsi_coupled_gpu_fallback",
description: "fsi coupled partitioned-interface fixture with no-provider host fallback",
model: || fixture_model(FixtureId::CantileverLinearStatic),
run_kind: AnalysisRunKind::Fsi,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: Some(ParityTolerance {
abs: 1e-12,
rel: 1e-12,
}),
gpu_mode: Some(GpuMode::WithoutProvider),
residency_expectation: Some(ResidencyExpectation::HostFallback),
max_solver_host_sync_count: Some(0),
min_solver_device_apply_k_ratio: Some(0.0),
expected_solver_backend: Some("cpu_reference"),
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "thermo_mech_kickoff_gpu_provider",
description:
"phase-1 thermo-mechanical kickoff fixture with provider-backed acceleration",
model: || fixture_model(FixtureId::ThermoMechanicalKickoff),
run_kind: AnalysisRunKind::Transient,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::DeviceRef),
max_solver_host_sync_count: Some(96),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: Some(24),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: Some(2.0e-2),
max_transient_energy_growth_ratio: Some(10.0),
min_gpu_speedup_ratio: Some(1.2),
min_transient_cache_hit_ratio: Some(0.1),
max_transient_cache_misses: Some(48.0),
},
FixtureSpec {
id: "thermo_gradient_benign_gpu_provider",
description: "thermo gradient benign fixture with provider-backed acceleration",
model: || fixture_model(FixtureId::ThermoGradientBenign),
run_kind: AnalysisRunKind::Transient,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::DeviceRef),
max_solver_host_sync_count: Some(112),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: Some(24),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: Some(2.0e-2),
max_transient_energy_growth_ratio: Some(10.0),
min_gpu_speedup_ratio: Some(1.2),
min_transient_cache_hit_ratio: Some(0.1),
max_transient_cache_misses: Some(52.0),
},
FixtureSpec {
id: "thermo_gradient_pathological_gpu_provider",
description: "thermo gradient pathological fixture with provider-backed acceleration",
model: || fixture_model(FixtureId::ThermoGradientPathological),
run_kind: AnalysisRunKind::Transient,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: None,
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::DeviceRef),
max_solver_host_sync_count: Some(144),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: Some(28),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: Some(3.5e-2),
max_transient_energy_growth_ratio: Some(14.0),
min_gpu_speedup_ratio: Some(1.1),
min_transient_cache_hit_ratio: Some(0.0),
max_transient_cache_misses: Some(56.0),
},
FixtureSpec {
id: "thermo_ramp_smooth_gpu_provider",
description: "smooth thermo ramp fixture with provider-backed acceleration",
model: || fixture_model(FixtureId::ThermoRampSmooth),
run_kind: AnalysisRunKind::Transient,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: None,
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::DeviceRef),
max_solver_host_sync_count: Some(112),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: Some(26),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: Some(2.5e-2),
max_transient_energy_growth_ratio: Some(12.0),
min_gpu_speedup_ratio: Some(1.1),
min_transient_cache_hit_ratio: Some(0.0),
max_transient_cache_misses: Some(60.0),
},
FixtureSpec {
id: "thermo_ramp_smooth_field_artifact_gpu_provider",
description: "smooth thermo ramp fixture using artifact-backed thermo field",
model: || fixture_model(FixtureId::ThermoRampSmooth),
run_kind: AnalysisRunKind::Transient,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: None,
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::DeviceRef),
max_solver_host_sync_count: Some(112),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: Some(26),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: Some(2.5e-2),
max_transient_energy_growth_ratio: Some(12.0),
min_gpu_speedup_ratio: Some(1.1),
min_transient_cache_hit_ratio: Some(0.0),
max_transient_cache_misses: Some(60.0),
},
FixtureSpec {
id: "thermo_shock_oscillatory_gpu_provider",
description: "oscillatory thermo shock fixture with provider-backed acceleration",
model: || fixture_model(FixtureId::ThermoShockOscillatory),
run_kind: AnalysisRunKind::Transient,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(false),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::DeviceRef),
max_solver_host_sync_count: Some(160),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: Some(30),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: Some(4.5e-2),
max_transient_energy_growth_ratio: Some(16.0),
min_gpu_speedup_ratio: Some(1.05),
min_transient_cache_hit_ratio: Some(0.0),
max_transient_cache_misses: Some(64.0),
},
FixtureSpec {
id: "thermo_shock_oscillatory_field_artifact_gpu_provider",
description: "oscillatory thermo shock fixture using artifact-backed thermo field",
model: || fixture_model(FixtureId::ThermoShockOscillatory),
run_kind: AnalysisRunKind::Transient,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(false),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::DeviceRef),
max_solver_host_sync_count: Some(160),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: Some(30),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: Some(4.5e-2),
max_transient_energy_growth_ratio: Some(16.0),
min_gpu_speedup_ratio: Some(1.05),
min_transient_cache_hit_ratio: Some(0.0),
max_transient_cache_misses: Some(64.0),
},
FixtureSpec {
id: "electro_thermal_joule_benign_gpu_provider",
description: "benign electro-thermal joule fixture with provider-backed acceleration",
model: || fixture_model(FixtureId::ElectroThermalJouleBenign),
run_kind: AnalysisRunKind::Transient,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::DeviceRef),
max_solver_host_sync_count: Some(112),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: Some(24),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: Some(2.0e-2),
max_transient_energy_growth_ratio: Some(10.0),
min_gpu_speedup_ratio: Some(1.1),
min_transient_cache_hit_ratio: Some(0.1),
max_transient_cache_misses: Some(52.0),
},
FixtureSpec {
id: "electro_thermal_joule_pathological_gpu_provider",
description:
"pathological electro-thermal joule fixture with provider-backed acceleration",
model: || fixture_model(FixtureId::ElectroThermalJoulePathological),
run_kind: AnalysisRunKind::Transient,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::DeviceRef),
max_solver_host_sync_count: Some(144),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: Some(30),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: Some(4.5e-2),
max_transient_energy_growth_ratio: Some(16.0),
min_gpu_speedup_ratio: Some(1.05),
min_transient_cache_hit_ratio: Some(0.0),
max_transient_cache_misses: Some(64.0),
},
FixtureSpec {
id: "electro_thermal_invalid_voltage",
description: "electro-thermal fixture rejects invalid applied voltage",
model: || fixture_model(FixtureId::ElectroThermalJouleBenign),
run_kind: AnalysisRunKind::Transient,
expect_validate_error: None,
expect_run_error: Some("RM.FEA.RUN_TRANSIENT.INVALID_ELECTRO_THERMAL_OPTIONS"),
expected_publishable: None,
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: None,
modal_mode_count: None,
transient_step_count: Some(24),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "electro_thermal_invalid_conductivity_scale",
description: "electro-thermal fixture rejects invalid regional conductivity scale",
model: || fixture_model(FixtureId::ElectroThermalJouleBenign),
run_kind: AnalysisRunKind::Transient,
expect_validate_error: None,
expect_run_error: Some("RM.FEA.RUN_TRANSIENT.INVALID_ELECTRO_THERMAL_OPTIONS"),
expected_publishable: None,
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: None,
modal_mode_count: None,
transient_step_count: Some(24),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "electro_thermal_unmapped_region",
description: "electro-thermal fixture rejects conductivity scales for unmapped regions",
model: || fixture_model(FixtureId::ElectroThermalJouleBenign),
run_kind: AnalysisRunKind::Transient,
expect_validate_error: None,
expect_run_error: Some("RM.FEA.RUN_TRANSIENT.INVALID_ELECTRO_THERMAL_OPTIONS"),
expected_publishable: None,
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: None,
modal_mode_count: None,
transient_step_count: Some(24),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "electromagnetic_reference_homogeneous_gpu_provider",
description: "electromagnetic homogeneous-material reference fixture",
model: || fixture_model(FixtureId::CantileverLinearStatic),
run_kind: AnalysisRunKind::Electromagnetic,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::HostFallback),
max_solver_host_sync_count: Some(64),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "electromagnetic_reference_heterogeneous_gpu_provider",
description: "electromagnetic heterogeneous-material reference fixture",
model: || fixture_model(FixtureId::MultiMaterialAssembly),
run_kind: AnalysisRunKind::Electromagnetic,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(false),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::HostFallback),
max_solver_host_sync_count: Some(96),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "electromagnetic_reference_sparse_assignments_gpu_provider",
description: "electromagnetic sparse-assignment reference fixture",
model: || fixture_model(FixtureId::MultiMaterialAssembly),
run_kind: AnalysisRunKind::Electromagnetic,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(false),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::HostFallback),
max_solver_host_sync_count: Some(112),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "electromagnetic_reference_multiregion_assignments_gpu_provider",
description: "electromagnetic multi-region assigned-material reference fixture",
model: || fixture_model(FixtureId::MultiMaterialAssembly),
run_kind: AnalysisRunKind::Electromagnetic,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(false),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::HostFallback),
max_solver_host_sync_count: Some(112),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "electromagnetic_reference_overlap_interference_gpu_provider",
description: "electromagnetic overlap/interference reference fixture",
model: || fixture_model(FixtureId::MultiMaterialAssembly),
run_kind: AnalysisRunKind::Electromagnetic,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(false),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::HostFallback),
max_solver_host_sync_count: Some(112),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "electromagnetic_reference_boundary_kernel_gpu_provider",
description: "electromagnetic boundary-kernel governance reference fixture",
model: || fixture_model(FixtureId::MultiMaterialAssembly),
run_kind: AnalysisRunKind::Electromagnetic,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(false),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::HostFallback),
max_solver_host_sync_count: Some(128),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "electromagnetic_reference_boundary_penalty_stress_gpu_provider",
description: "electromagnetic boundary-penalty stress governance fixture",
model: || fixture_model(FixtureId::MultiMaterialAssembly),
run_kind: AnalysisRunKind::Electromagnetic,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(false),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::HostFallback),
max_solver_host_sync_count: Some(128),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "electromagnetic_reference_multi_region_phased_source_gpu_provider",
description: "electromagnetic multi-region phased-source governance fixture",
model: || fixture_model(FixtureId::MultiMaterialAssembly),
run_kind: AnalysisRunKind::Electromagnetic,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(false),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::HostFallback),
max_solver_host_sync_count: Some(128),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "electromagnetic_missing_material",
description: "electromagnetic fixture rejects models without electrical material data",
model: || fixture_model(FixtureId::CantileverLinearStatic),
run_kind: AnalysisRunKind::Electromagnetic,
expect_validate_error: None,
expect_run_error: Some(
"RM.FEA.RUN_ELECTROMAGNETIC.MISSING_ELECTROMAGNETIC_MATERIAL",
),
expected_publishable: None,
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: None,
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "electromagnetic_missing_source",
description: "electromagnetic fixture rejects models without current-source loads",
model: || fixture_model(FixtureId::CantileverLinearStatic),
run_kind: AnalysisRunKind::Electromagnetic,
expect_validate_error: None,
expect_run_error: Some(
"RM.FEA.RUN_ELECTROMAGNETIC.MISSING_ELECTROMAGNETIC_SOURCE",
),
expected_publishable: None,
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: None,
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "electromagnetic_missing_boundary",
description:
"electromagnetic fixture rejects models without electromagnetic boundary conditions",
model: || fixture_model(FixtureId::CantileverLinearStatic),
run_kind: AnalysisRunKind::Electromagnetic,
expect_validate_error: None,
expect_run_error: Some(
"RM.FEA.RUN_ELECTROMAGNETIC.MISSING_ELECTROMAGNETIC_BOUNDARY",
),
expected_publishable: None,
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: None,
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "nonlinear_assembly_cpu",
description: "nonlinear assembly fixture CPU execution",
model: || fixture_model(FixtureId::NonlinearAssembly),
run_kind: AnalysisRunKind::Nonlinear,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: None,
modal_mode_count: None,
transient_step_count: Some(24),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "nonlinear_create_model_cpu",
description: "nonlinear fixture synthesized via fea.create_model",
model: synthesized_nonlinear_model,
run_kind: AnalysisRunKind::Nonlinear,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: None,
modal_mode_count: None,
transient_step_count: Some(24),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "nonlinear_assembly_gpu_provider",
description: "nonlinear assembly fixture provider-backed acceleration",
model: || fixture_model(FixtureId::NonlinearAssembly),
run_kind: AnalysisRunKind::Nonlinear,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::DeviceRef),
max_solver_host_sync_count: Some(96),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: Some(24),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: Some(1.6),
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "nonlinear_assembly_stress_gpu_provider",
description: "nonlinear stress fixture with provider-backed acceleration",
model: || fixture_model(FixtureId::NonlinearAssemblyStress),
run_kind: AnalysisRunKind::Nonlinear,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::DeviceRef),
max_solver_host_sync_count: Some(144),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: Some(32),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: Some(1.4),
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "nonlinear_softening_benchmark_gpu_provider",
description: "nonlinear softening fixture with provider-backed acceleration",
model: || fixture_model(FixtureId::NonlinearSofteningBenchmark),
run_kind: AnalysisRunKind::Nonlinear,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::DeviceRef),
max_solver_host_sync_count: Some(176),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: Some(40),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: Some(1.3),
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "nonlinear_load_path_mix_gpu_provider",
description: "nonlinear mixed load-path fixture with provider-backed acceleration",
model: || fixture_model(FixtureId::NonlinearLoadPathMix),
run_kind: AnalysisRunKind::Nonlinear,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::DeviceRef),
max_solver_host_sync_count: Some(176),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: Some(36),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: Some(1.3),
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "nonlinear_plasticity_benchmark_gpu_provider",
description: "nonlinear plasticity stress fixture with provider-backed acceleration",
model: || fixture_model(FixtureId::NonlinearLoadPathMix),
run_kind: AnalysisRunKind::Nonlinear,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(false),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::DeviceRef),
max_solver_host_sync_count: Some(192),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: Some(36),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: Some(1.2),
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "nonlinear_contact_benchmark_gpu_provider",
description: "nonlinear contact stress fixture with provider-backed acceleration",
model: || fixture_model(FixtureId::NonlinearLoadPathMix),
run_kind: AnalysisRunKind::Nonlinear,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(false),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::DeviceRef),
max_solver_host_sync_count: Some(196),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: Some(36),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: Some(1.2),
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "nonlinear_invalid_plasticity_options",
description: "nonlinear fixture rejects invalid plasticity constitutive options",
model: || fixture_model(FixtureId::NonlinearLoadPathMix),
run_kind: AnalysisRunKind::Nonlinear,
expect_validate_error: None,
expect_run_error: Some("RM.FEA.RUN_NONLINEAR.INVALID_OPTIONS"),
expected_publishable: None,
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: None,
modal_mode_count: None,
transient_step_count: Some(36),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "nonlinear_invalid_contact_options",
description: "nonlinear fixture rejects invalid contact interface options",
model: || fixture_model(FixtureId::NonlinearLoadPathMix),
run_kind: AnalysisRunKind::Nonlinear,
expect_validate_error: None,
expect_run_error: Some("RM.FEA.RUN_NONLINEAR.INVALID_OPTIONS"),
expected_publishable: None,
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: None,
modal_mode_count: None,
transient_step_count: Some(36),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "nonlinear_contact_frictionless_reference_gpu_provider",
description:
"reference-backed frictionless contact fixture with provider-backed acceleration",
model: || fixture_model(FixtureId::NonlinearContactFrictionlessReference),
run_kind: AnalysisRunKind::Nonlinear,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::DeviceRef),
max_solver_host_sync_count: Some(176),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: Some(36),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: Some(1.2),
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "nonlinear_contact_frictionless_reference_complex_gpu_provider",
description: "reference-backed frictionless contact complex fixture with provider-backed acceleration",
model: || fixture_model(FixtureId::NonlinearContactFrictionlessReferenceComplex),
run_kind: AnalysisRunKind::Nonlinear,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::DeviceRef),
max_solver_host_sync_count: Some(188),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: Some(40),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: Some(1.2),
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "nonlinear_plastic_hardening_reference_gpu_provider",
description: "reference-backed elastic-plastic hardening fixture with provider-backed acceleration",
model: || fixture_model(FixtureId::NonlinearPlasticHardeningReference),
run_kind: AnalysisRunKind::Nonlinear,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::DeviceRef),
max_solver_host_sync_count: Some(186),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: Some(40),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: Some(1.2),
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "nonlinear_plastic_hardening_reference_complex_gpu_provider",
description: "reference-backed elastic-plastic hardening complex fixture with provider-backed acceleration",
model: || fixture_model(FixtureId::NonlinearPlasticHardeningReferenceComplex),
run_kind: AnalysisRunKind::Nonlinear,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::DeviceRef),
max_solver_host_sync_count: Some(194),
min_solver_device_apply_k_ratio: Some(1.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: Some(44),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: Some(1.2),
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "thermal_standalone_ramp_cpu",
description: "standalone thermal profile fixture on cpu with heat-balance diagnostics",
model: || {
let mut model = fixture_model(FixtureId::ThermoRampSmooth);
model.steps = vec![runmat_analysis_core::AnalysisStep {
step_id: "thermal_1".to_string(),
kind: runmat_analysis_core::AnalysisStepKind::Thermal,
}];
model
},
run_kind: AnalysisRunKind::Thermal,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: None,
modal_mode_count: None,
transient_step_count: Some(12),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "thermal_standalone_ramp_gpu_provider",
description: "standalone thermal profile fixture with provider-backed acceleration",
model: || {
let mut model = fixture_model(FixtureId::ThermoRampSmooth);
model.steps = vec![runmat_analysis_core::AnalysisStep {
step_id: "thermal_1".to_string(),
kind: runmat_analysis_core::AnalysisStepKind::Thermal,
}];
model
},
run_kind: AnalysisRunKind::Thermal,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: None,
gpu_mode: Some(GpuMode::WithProvider),
residency_expectation: Some(ResidencyExpectation::HostFallback),
max_solver_host_sync_count: Some(32),
min_solver_device_apply_k_ratio: Some(0.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: Some(12),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "thermal_standalone_ramp_gpu_fallback",
description: "standalone thermal profile fixture with no-provider host fallback",
model: || {
let mut model = fixture_model(FixtureId::ThermoRampSmooth);
model.steps = vec![runmat_analysis_core::AnalysisStep {
step_id: "thermal_1".to_string(),
kind: runmat_analysis_core::AnalysisStepKind::Thermal,
}];
model
},
run_kind: AnalysisRunKind::Thermal,
expect_validate_error: None,
expect_run_error: None,
expected_publishable: Some(true),
parity_tolerance: Some(ParityTolerance {
abs: 1e-12,
rel: 1e-12,
}),
gpu_mode: Some(GpuMode::WithoutProvider),
residency_expectation: Some(ResidencyExpectation::HostFallback),
max_solver_host_sync_count: Some(0),
min_solver_device_apply_k_ratio: Some(0.0),
expected_solver_backend: Some("runtime_tensor"),
modal_mode_count: None,
transient_step_count: Some(12),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "thermal_standalone_ramp_invalid_material",
description: "standalone thermal fixture rejects invalid thermal material values",
model: || {
let mut model = fixture_model(FixtureId::ThermoRampSmooth);
model.steps = vec![runmat_analysis_core::AnalysisStep {
step_id: "thermal_invalid_material".to_string(),
kind: runmat_analysis_core::AnalysisStepKind::Thermal,
}];
model
},
run_kind: AnalysisRunKind::Thermal,
expect_validate_error: None,
expect_run_error: Some("RM.FEA.RUN_THERMAL.INVALID_THERMAL_MATERIAL"),
expected_publishable: None,
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: None,
modal_mode_count: None,
transient_step_count: Some(12),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "thermal_standalone_ramp_invalid_source",
description: "standalone thermal fixture rejects invalid heat-source values",
model: || {
let mut model = fixture_model(FixtureId::ThermoRampSmooth);
model.steps = vec![runmat_analysis_core::AnalysisStep {
step_id: "thermal_invalid_source".to_string(),
kind: runmat_analysis_core::AnalysisStepKind::Thermal,
}];
model
},
run_kind: AnalysisRunKind::Thermal,
expect_validate_error: None,
expect_run_error: Some("RM.FEA.RUN_THERMAL.INVALID_THERMAL_SOURCE"),
expected_publishable: None,
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: None,
modal_mode_count: None,
transient_step_count: Some(12),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "thermal_standalone_ramp_invalid_boundary",
description: "standalone thermal fixture rejects invalid thermal boundary values",
model: || {
let mut model = fixture_model(FixtureId::ThermoRampSmooth);
model.steps = vec![runmat_analysis_core::AnalysisStep {
step_id: "thermal_invalid_boundary".to_string(),
kind: runmat_analysis_core::AnalysisStepKind::Thermal,
}];
model
},
run_kind: AnalysisRunKind::Thermal,
expect_validate_error: None,
expect_run_error: Some("RM.FEA.RUN_THERMAL.INVALID_THERMAL_BOUNDARY"),
expected_publishable: None,
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: None,
modal_mode_count: None,
transient_step_count: Some(12),
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "missing_materials",
description: "invalid fixture must fail validation and run with typed errors",
model: || fixture_model(FixtureId::MissingMaterials),
run_kind: AnalysisRunKind::LinearStatic,
expect_validate_error: Some("RM.FEA.VALIDATE.MISSING_MATERIALS"),
expect_run_error: Some("RM.FEA.RUN_LINEAR_STATIC.SOLVER_MODEL_INVALID"),
expected_publishable: None,
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: None,
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "structural_invalid_moment_without_rotational_dofs",
description: "moment load on a displacement-only structural fixture is rejected",
model: || fixture_model(FixtureId::StructuralInvalidMomentWithoutRotationalDofs),
run_kind: AnalysisRunKind::LinearStatic,
expect_validate_error: None,
expect_run_error: Some("RM.FEA.RUN_LINEAR_STATIC.SOLVER_MODEL_INVALID"),
expected_publishable: None,
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: None,
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
FixtureSpec {
id: "unit_mismatch",
description: "unit mismatch fixture must fail validation with mismatch code",
model: || {
let mut model = fixture_model(FixtureId::CantileverLinearStatic);
model.units = UnitSystem::Inch;
model
},
run_kind: AnalysisRunKind::LinearStatic,
expect_validate_error: Some("RM.FEA.VALIDATE.UNIT_MISMATCH"),
expect_run_error: None,
expected_publishable: None,
parity_tolerance: None,
gpu_mode: None,
residency_expectation: None,
max_solver_host_sync_count: None,
min_solver_device_apply_k_ratio: None,
expected_solver_backend: None,
modal_mode_count: None,
transient_step_count: None,
max_modal_orthogonality_offdiag: None,
min_modal_relative_frequency_separation: None,
max_transient_residual_norm: None,
max_transient_energy_growth_ratio: None,
min_gpu_speedup_ratio: None,
min_transient_cache_hit_ratio: None,
max_transient_cache_misses: None,
},
]
}
pub(super) fn fixture_manifest(specs: &[FixtureSpec]) -> FixtureManifest {
FixtureManifest {
version: "fea-conformance/v1".to_string(),
fixtures: specs
.iter()
.map(|spec| FixtureManifestEntry {
id: spec.id.to_string(),
description: spec.description.to_string(),
run_kind: match spec.run_kind {
AnalysisRunKind::LinearStatic => "linear_static".to_string(),
AnalysisRunKind::Modal => "modal".to_string(),
AnalysisRunKind::Acoustic => "acoustic".to_string(),
AnalysisRunKind::Thermal => "thermal".to_string(),
AnalysisRunKind::Transient => "transient".to_string(),
AnalysisRunKind::Cfd => "cfd".to_string(),
AnalysisRunKind::Cht => "cht".to_string(),
AnalysisRunKind::Fsi => "fsi".to_string(),
AnalysisRunKind::Nonlinear => "nonlinear".to_string(),
AnalysisRunKind::Electromagnetic => "electromagnetic".to_string(),
},
expect_validate_error: spec.expect_validate_error.map(|s| s.to_string()),
expect_run_error: spec.expect_run_error.map(|s| s.to_string()),
expected_publishable: spec.expected_publishable,
parity_tolerance_abs: spec.parity_tolerance.map(|tol| tol.abs),
parity_tolerance_rel: spec.parity_tolerance.map(|tol| tol.rel),
gpu_mode: spec.gpu_mode.map(|mode| match mode {
GpuMode::WithProvider => "with_provider".to_string(),
GpuMode::WithoutProvider => "without_provider".to_string(),
}),
residency_expectation: spec.residency_expectation.map(|value| match value {
ResidencyExpectation::DeviceRef => "device_ref".to_string(),
ResidencyExpectation::HostFallback => "host_fallback".to_string(),
}),
max_solver_host_sync_count: spec.max_solver_host_sync_count,
min_solver_device_apply_k_ratio: spec.min_solver_device_apply_k_ratio,
expected_solver_backend: spec.expected_solver_backend.map(|s| s.to_string()),
modal_mode_count: spec.modal_mode_count,
transient_step_count: spec.transient_step_count,
max_modal_orthogonality_offdiag: spec.max_modal_orthogonality_offdiag,
min_modal_relative_frequency_separation: spec
.min_modal_relative_frequency_separation,
max_transient_residual_norm: spec.max_transient_residual_norm,
max_transient_energy_growth_ratio: spec.max_transient_energy_growth_ratio,
min_gpu_speedup_ratio: spec.min_gpu_speedup_ratio,
min_transient_cache_hit_ratio: spec.min_transient_cache_hit_ratio,
max_transient_cache_misses: spec.max_transient_cache_misses,
})
.collect(),
}
}
pub(super) fn default_options() -> AnalysisRunOptions {
AnalysisRunOptions {
deterministic_mode: true,
precision_mode: PrecisionMode::Fp64,
preconditioner_mode: PreconditionerMode::Auto,
quality_policy: QualityPolicy::Balanced,
prep_context: None,
prep_artifact_id: None,
analysis_mesh_artifact_path: None,
prep_calibration_profile: None,
}
}