ANYfeSolver 0.5.0a1__py3-none-any.whl
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.
- anyfesolver/__init__.py +1075 -0
- anyfesolver/_b2_attachment_elimination_dev.py +261 -0
- anyfesolver/_b2_f10_f11_point_attachment.py +163 -0
- anyfesolver/_b2_loaded_point_trace_dev.py +173 -0
- anyfesolver/_b2_physical_flexibility_linear.py +707 -0
- anyfesolver/_b2_physical_linear_batch_dev.py +491 -0
- anyfesolver/_b2_physical_linear_definition.py +415 -0
- anyfesolver/_b2_physical_load_bubbles.py +282 -0
- anyfesolver/_compensated_contractions.py +497 -0
- anyfesolver/_compensated_native.py +437 -0
- anyfesolver/_corotational_batch.py +219 -0
- anyfesolver/_director_trace.py +214 -0
- anyfesolver/_dyadic_bilinear.py +76 -0
- anyfesolver/_dyadic_factor_chain.py +25 -0
- anyfesolver/_ge_beam3_adaptive_arc_program.py +286 -0
- anyfesolver/_ge_beam3_analysis_combined.py +102 -0
- anyfesolver/_ge_beam3_analysis_fibre_translation.py +130 -0
- anyfesolver/_ge_beam3_analysis_modal_snapshot.py +27 -0
- anyfesolver/_ge_beam3_analysis_nodal_program.py +140 -0
- anyfesolver/_ge_beam3_analysis_translation.py +147 -0
- anyfesolver/_ge_beam3_analysis_translation_modal.py +84 -0
- anyfesolver/_ge_beam3_arc_geometry.py +89 -0
- anyfesolver/_ge_beam3_arc_program.py +304 -0
- anyfesolver/_ge_beam3_authoritative_cell_seed.py +25 -0
- anyfesolver/_ge_beam3_cell_identity.py +52 -0
- anyfesolver/_ge_beam3_centered_batched_finite_inertia.py +132 -0
- anyfesolver/_ge_beam3_centered_finite_inertia.py +171 -0
- anyfesolver/_ge_beam3_centered_mixed.py +104 -0
- anyfesolver/_ge_beam3_centered_reference.py +187 -0
- anyfesolver/_ge_beam3_centered_so3_strain.py +76 -0
- anyfesolver/_ge_beam3_complementary_section.py +122 -0
- anyfesolver/_ge_beam3_compliance_snapshot_guard.py +20 -0
- anyfesolver/_ge_beam3_connected_dynamic.py +486 -0
- anyfesolver/_ge_beam3_connected_trajectory.py +258 -0
- anyfesolver/_ge_beam3_conservative_backtrack.py +26 -0
- anyfesolver/_ge_beam3_controlled_fibre_modes.py +105 -0
- anyfesolver/_ge_beam3_coupled_beam_subdomain.py +128 -0
- anyfesolver/_ge_beam3_coupled_modes.py +256 -0
- anyfesolver/_ge_beam3_deterministic_reduction.py +264 -0
- anyfesolver/_ge_beam3_displacement_program.py +255 -0
- anyfesolver/_ge_beam3_durable_coupled.py +251 -0
- anyfesolver/_ge_beam3_dynamic_elastic_state.py +461 -0
- anyfesolver/_ge_beam3_effective_deadline.py +58 -0
- anyfesolver/_ge_beam3_elastic_seed_continuation.py +223 -0
- anyfesolver/_ge_beam3_elastic_seed_modal.py +139 -0
- anyfesolver/_ge_beam3_equilibrium_line_program.py +98 -0
- anyfesolver/_ge_beam3_equilibrium_schur_solver.py +96 -0
- anyfesolver/_ge_beam3_factor_chain_modes.py +103 -0
- anyfesolver/_ge_beam3_fibre_cell.py +408 -0
- anyfesolver/_ge_beam3_fibre_distributed_couples.py +191 -0
- anyfesolver/_ge_beam3_fibre_kinematic_cell.py +75 -0
- anyfesolver/_ge_beam3_fibre_line_program.py +157 -0
- anyfesolver/_ge_beam3_fibre_line_work.py +87 -0
- anyfesolver/_ge_beam3_fibre_reference_modal.py +104 -0
- anyfesolver/_ge_beam3_fibre_schur_solver.py +134 -0
- anyfesolver/_ge_beam3_fibre_section.py +286 -0
- anyfesolver/_ge_beam3_fibre_static_boundary.py +113 -0
- anyfesolver/_ge_beam3_g1_analysis.py +307 -0
- anyfesolver/_ge_beam3_g1_elastic.py +161 -0
- anyfesolver/_ge_beam3_g1_element.py +185 -0
- anyfesolver/_ge_beam3_g1_operator.py +137 -0
- anyfesolver/_ge_beam3_g2_analysis.py +176 -0
- anyfesolver/_ge_beam3_g2_constraints.py +162 -0
- anyfesolver/_ge_beam3_g3_analysis.py +385 -0
- anyfesolver/_ge_beam3_g3_constraints.py +168 -0
- anyfesolver/_ge_beam3_g3b_owner.py +296 -0
- anyfesolver/_ge_beam3_g3b_q4_reference.py +186 -0
- anyfesolver/_ge_beam3_g3b_reference.py +206 -0
- anyfesolver/_ge_beam3_g3b_result_schema.py +107 -0
- anyfesolver/_ge_beam3_g3b_s3_reference.py +185 -0
- anyfesolver/_ge_beam3_g3b_weighted_reference.py +193 -0
- anyfesolver/_ge_beam3_g3c_affine_q4_chart.py +58 -0
- anyfesolver/_ge_beam3_g3c_affine_q4_increment_chart.py +257 -0
- anyfesolver/_ge_beam3_g3c_affine_q4_recovery.py +434 -0
- anyfesolver/_ge_beam3_g3c_affine_q4_registry.py +127 -0
- anyfesolver/_ge_beam3_g3c_b2_physical.py +153 -0
- anyfesolver/_ge_beam3_g3c_b2_physical_adapter.py +160 -0
- anyfesolver/_ge_beam3_g3c_definition.py +117 -0
- anyfesolver/_ge_beam3_g3c_local_beam.py +188 -0
- anyfesolver/_ge_beam3_g3c_local_shell.py +371 -0
- anyfesolver/_ge_beam3_g3c_owner.py +400 -0
- anyfesolver/_ge_beam3_g3c_physical_authority.py +203 -0
- anyfesolver/_ge_beam3_g3c_physical_owner.py +556 -0
- anyfesolver/_ge_beam3_g3c_recovery.py +91 -0
- anyfesolver/_ge_beam3_g3c_so3_numerics.py +81 -0
- anyfesolver/_ge_beam3_g3c_stable/__init__.py +1 -0
- anyfesolver/_ge_beam3_g3c_stable/authority.py +152 -0
- anyfesolver/_ge_beam3_g3c_stable/beam.py +196 -0
- anyfesolver/_ge_beam3_g3c_stable/boundary.py +38 -0
- anyfesolver/_ge_beam3_g3c_stable/chart.py +23 -0
- anyfesolver/_ge_beam3_g3c_stable/compensated.py +46 -0
- anyfesolver/_ge_beam3_g3c_stable/element.py +190 -0
- anyfesolver/_ge_beam3_g3c_stable/fit.py +54 -0
- anyfesolver/_ge_beam3_g3c_stable/joint.py +255 -0
- anyfesolver/_ge_beam3_g3c_stable/line_work.py +92 -0
- anyfesolver/_ge_beam3_g3c_stable/operator.py +147 -0
- anyfesolver/_ge_beam3_g3c_stable/owner.py +415 -0
- anyfesolver/_ge_beam3_g3c_stable/shell.py +358 -0
- anyfesolver/_ge_beam3_g4_completion.py +186 -0
- anyfesolver/_ge_beam3_g4a_station_transaction.py +385 -0
- anyfesolver/_ge_beam3_g5_completion.py +68 -0
- anyfesolver/_ge_beam3_g6_domain.py +354 -0
- anyfesolver/_ge_beam3_generalized_cell.py +172 -0
- anyfesolver/_ge_beam3_generalized_ellipsoid_section.py +215 -0
- anyfesolver/_ge_beam3_generalized_static_boundary.py +233 -0
- anyfesolver/_ge_beam3_lifted_kinetic_factor.py +26 -0
- anyfesolver/_ge_beam3_line_fibre_modes.py +121 -0
- anyfesolver/_ge_beam3_load_program.py +275 -0
- anyfesolver/_ge_beam3_loaded_modal.py +225 -0
- anyfesolver/_ge_beam3_mixed_ad.py +286 -0
- anyfesolver/_ge_beam3_native_analysis.py +484 -0
- anyfesolver/_ge_beam3_native_arc.py +269 -0
- anyfesolver/_ge_beam3_native_arc_adaptive.py +251 -0
- anyfesolver/_ge_beam3_native_arc_restart.py +88 -0
- anyfesolver/_ge_beam3_native_arc_source.py +62 -0
- anyfesolver/_ge_beam3_native_buckling.py +206 -0
- anyfesolver/_ge_beam3_native_combined_couples.py +179 -0
- anyfesolver/_ge_beam3_native_combined_restart.py +205 -0
- anyfesolver/_ge_beam3_native_definition.py +238 -0
- anyfesolver/_ge_beam3_native_distributed_element.py +220 -0
- anyfesolver/_ge_beam3_native_distributed_loading.py +92 -0
- anyfesolver/_ge_beam3_native_distributed_program.py +165 -0
- anyfesolver/_ge_beam3_native_distributed_recovery.py +34 -0
- anyfesolver/_ge_beam3_native_distributed_restart.py +221 -0
- anyfesolver/_ge_beam3_native_dynamic_analysis.py +149 -0
- anyfesolver/_ge_beam3_native_dynamic_restart.py +261 -0
- anyfesolver/_ge_beam3_native_fibre_current_modal.py +104 -0
- anyfesolver/_ge_beam3_native_fibre_recovery.py +34 -0
- anyfesolver/_ge_beam3_native_fibre_restart.py +211 -0
- anyfesolver/_ge_beam3_native_fibre_static_element.py +193 -0
- anyfesolver/_ge_beam3_native_force_adaptation.py +56 -0
- anyfesolver/_ge_beam3_native_generalized_combined_couples.py +188 -0
- anyfesolver/_ge_beam3_native_generalized_combined_restart.py +207 -0
- anyfesolver/_ge_beam3_native_generalized_element.py +222 -0
- anyfesolver/_ge_beam3_native_generalized_factor_modal.py +122 -0
- anyfesolver/_ge_beam3_native_generalized_loading.py +92 -0
- anyfesolver/_ge_beam3_native_generalized_modal.py +274 -0
- anyfesolver/_ge_beam3_native_generalized_paired_modal.py +13 -0
- anyfesolver/_ge_beam3_native_generalized_parameter.py +89 -0
- anyfesolver/_ge_beam3_native_generalized_program.py +196 -0
- anyfesolver/_ge_beam3_native_generalized_recovery.py +34 -0
- anyfesolver/_ge_beam3_native_generalized_restart.py +243 -0
- anyfesolver/_ge_beam3_native_history_profile.py +53 -0
- anyfesolver/_ge_beam3_native_line_loading.py +93 -0
- anyfesolver/_ge_beam3_native_line_program.py +150 -0
- anyfesolver/_ge_beam3_native_line_recovery.py +34 -0
- anyfesolver/_ge_beam3_native_line_restart.py +197 -0
- anyfesolver/_ge_beam3_native_line_static_element.py +220 -0
- anyfesolver/_ge_beam3_native_load_admission.py +37 -0
- anyfesolver/_ge_beam3_native_midpoint.py +1004 -0
- anyfesolver/_ge_beam3_native_multi_shell_contact.py +539 -0
- anyfesolver/_ge_beam3_native_pair_contact.py +236 -0
- anyfesolver/_ge_beam3_native_shell_contact.py +357 -0
- anyfesolver/_ge_beam3_native_spatial_couples.py +176 -0
- anyfesolver/_ge_beam3_native_spatial_restart.py +204 -0
- anyfesolver/_ge_beam3_native_transient.py +467 -0
- anyfesolver/_ge_beam3_native_translation.py +225 -0
- anyfesolver/_ge_beam3_native_translation_restart.py +54 -0
- anyfesolver/_ge_beam3_operator_validation_scope.py +53 -0
- anyfesolver/_ge_beam3_p5/__init__.py +11 -0
- anyfesolver/_ge_beam3_p5/algebra.py +91 -0
- anyfesolver/_ge_beam3_p5/arrays.py +29 -0
- anyfesolver/_ge_beam3_p5/chart.py +45 -0
- anyfesolver/_ge_beam3_p5/codec.py +82 -0
- anyfesolver/_ge_beam3_p5/committed_modal.py +191 -0
- anyfesolver/_ge_beam3_p5/compensated.py +118 -0
- anyfesolver/_ge_beam3_p5/compensated_coordinates.py +44 -0
- anyfesolver/_ge_beam3_p5/core.py +159 -0
- anyfesolver/_ge_beam3_p5/element.py +207 -0
- anyfesolver/_ge_beam3_p5/factors.py +61 -0
- anyfesolver/_ge_beam3_p5/inertia.py +120 -0
- anyfesolver/_ge_beam3_p5/mass.py +70 -0
- anyfesolver/_ge_beam3_p5/mixed.py +256 -0
- anyfesolver/_ge_beam3_p5/reference_modal.py +73 -0
- anyfesolver/_ge_beam3_p5/section.py +139 -0
- anyfesolver/_ge_beam3_p5/typed_schema.py +111 -0
- anyfesolver/_ge_beam3_p5_centered/__init__.py +6 -0
- anyfesolver/_ge_beam3_p5_centered/codec.py +84 -0
- anyfesolver/_ge_beam3_p5_centered/committed_modal.py +192 -0
- anyfesolver/_ge_beam3_p5_centered/core.py +171 -0
- anyfesolver/_ge_beam3_p5_centered/element.py +216 -0
- anyfesolver/_ge_beam3_p5_centered/mass.py +99 -0
- anyfesolver/_ge_beam3_p5_centered/positions.py +34 -0
- anyfesolver/_ge_beam3_p5_centered/reference_modal.py +73 -0
- anyfesolver/_ge_beam3_p5_coordinates/__init__.py +6 -0
- anyfesolver/_ge_beam3_p5_coordinates/codec.py +84 -0
- anyfesolver/_ge_beam3_p5_coordinates/committed_modal.py +192 -0
- anyfesolver/_ge_beam3_p5_coordinates/core.py +163 -0
- anyfesolver/_ge_beam3_p5_coordinates/element.py +213 -0
- anyfesolver/_ge_beam3_p5_coordinates/positions.py +102 -0
- anyfesolver/_ge_beam3_p5_coordinates/reference_modal.py +73 -0
- anyfesolver/_ge_beam3_p5_loads/__init__.py +7 -0
- anyfesolver/_ge_beam3_p5_loads/codec.py +85 -0
- anyfesolver/_ge_beam3_p5_loads/core.py +192 -0
- anyfesolver/_ge_beam3_p5_loads/element.py +243 -0
- anyfesolver/_ge_beam3_p5_loads/state.py +120 -0
- anyfesolver/_ge_beam3_p5_loads/work.py +45 -0
- anyfesolver/_ge_beam3_p5_seeded/__init__.py +9 -0
- anyfesolver/_ge_beam3_p5_seeded/codec.py +87 -0
- anyfesolver/_ge_beam3_p5_seeded/core.py +197 -0
- anyfesolver/_ge_beam3_p5_seeded/element.py +245 -0
- anyfesolver/_ge_beam3_p5_seeded/state.py +122 -0
- anyfesolver/_ge_beam3_p5_seeded/work.py +47 -0
- anyfesolver/_ge_beam3_pose_joint.py +268 -0
- anyfesolver/_ge_beam3_precise_geometric_work.py +147 -0
- anyfesolver/_ge_beam3_reassembled_signed_modes.py +101 -0
- anyfesolver/_ge_beam3_reference_identity.py +92 -0
- anyfesolver/_ge_beam3_refined_fibre_schur_solver.py +104 -0
- anyfesolver/_ge_beam3_refinement_capacity.py +19 -0
- anyfesolver/_ge_beam3_relative_virgin_reference_modes.py +60 -0
- anyfesolver/_ge_beam3_retained_arc.py +350 -0
- anyfesolver/_ge_beam3_retained_arc_geometry.py +66 -0
- anyfesolver/_ge_beam3_retained_arc_modal.py +125 -0
- anyfesolver/_ge_beam3_retained_elastic.py +134 -0
- anyfesolver/_ge_beam3_retained_fibre.py +209 -0
- anyfesolver/_ge_beam3_retained_fibre_control.py +270 -0
- anyfesolver/_ge_beam3_retained_fibre_element.py +58 -0
- anyfesolver/_ge_beam3_retained_fibre_modal.py +155 -0
- anyfesolver/_ge_beam3_retained_fibre_modes.py +189 -0
- anyfesolver/_ge_beam3_retained_fibre_program.py +68 -0
- anyfesolver/_ge_beam3_retained_fibre_state.py +268 -0
- anyfesolver/_ge_beam3_retained_force_program.py +72 -0
- anyfesolver/_ge_beam3_retained_generalized.py +186 -0
- anyfesolver/_ge_beam3_retained_generalized_modal.py +171 -0
- anyfesolver/_ge_beam3_retained_generalized_program.py +63 -0
- anyfesolver/_ge_beam3_retained_generalized_state.py +281 -0
- anyfesolver/_ge_beam3_retained_nodal_loading.py +111 -0
- anyfesolver/_ge_beam3_retained_plastic.py +116 -0
- anyfesolver/_ge_beam3_retained_plastic_modes.py +144 -0
- anyfesolver/_ge_beam3_retained_plastic_program.py +69 -0
- anyfesolver/_ge_beam3_retained_plastic_state.py +165 -0
- anyfesolver/_ge_beam3_retained_state.py +194 -0
- anyfesolver/_ge_beam3_retained_translation_control.py +345 -0
- anyfesolver/_ge_beam3_retained_translation_modal.py +137 -0
- anyfesolver/_ge_beam3_schur_line_program.py +98 -0
- anyfesolver/_ge_beam3_seeded_fibre_control.py +175 -0
- anyfesolver/_ge_beam3_seeded_load_program.py +301 -0
- anyfesolver/_ge_beam3_seeded_loaded_modal.py +226 -0
- anyfesolver/_ge_beam3_seeded_signed_modes.py +150 -0
- anyfesolver/_ge_beam3_shared_kinematic_split.py +53 -0
- anyfesolver/_ge_beam3_shell_joint_state.py +396 -0
- anyfesolver/_ge_beam3_shell_joint_trial.py +217 -0
- anyfesolver/_ge_beam3_signed_loaded_modes.py +140 -0
- anyfesolver/_ge_beam3_spatial_fibre_program.py +113 -0
- anyfesolver/_ge_beam3_spatial_nodal_moments.py +38 -0
- anyfesolver/_ge_beam3_station_resultant_cell.py +235 -0
- anyfesolver/_ge_beam3_variational_shell.py +211 -0
- anyfesolver/_ge_beam3_virgin_reference_modes.py +60 -0
- anyfesolver/_impact_coupling.py +162 -0
- anyfesolver/_native_authority_dag.py +77 -0
- anyfesolver/_native_dyadic_interval_inertia.py +64 -0
- anyfesolver/_native_exact_shift_chain_modes.py +140 -0
- anyfesolver/_native_exact_shift_inertia.py +86 -0
- anyfesolver/_native_factor_chain_modes.py +192 -0
- anyfesolver/_native_guard.cpp +828 -0
- anyfesolver/_native_guard_dispatch.py +140 -0
- anyfesolver/_native_large_factor_chain.py +55 -0
- anyfesolver/_native_material_protocol.py +51 -0
- anyfesolver/_native_midpoint_controller.py +90 -0
- anyfesolver/_native_modal_capacity.py +26 -0
- anyfesolver/_native_paired_factor_chain_modes.py +244 -0
- anyfesolver/_native_reassembled_factor_modes.py +185 -0
- anyfesolver/_native_reference_factor_spectrum.py +102 -0
- anyfesolver/_native_reference_modal.py +180 -0
- anyfesolver/_native_relative_factor_chain_modes.py +204 -0
- anyfesolver/_native_relative_reference_factor_spectrum.py +110 -0
- anyfesolver/_native_retained_step.py +15 -0
- anyfesolver/_native_rotation_state.py +797 -0
- anyfesolver/_native_signed_factor_modes.py +257 -0
- anyfesolver/_native_signed_kinetic_factor_modes.py +279 -0
- anyfesolver/_native_stationary_spectrum.py +79 -0
- anyfesolver/_nonlinear_events.py +150 -0
- anyfesolver/_nonlinear_seed.py +80 -0
- anyfesolver/_paired_modal_arithmetic.py +71 -0
- anyfesolver/_plate_stability_continuation.py +171 -0
- anyfesolver/_q4_assumed_strain_plasticity.py +502 -0
- anyfesolver/_qualified_authority_epoch.py +561 -0
- anyfesolver/_relative_reference_svd.py +44 -0
- anyfesolver/_stiffened_shell_affine_endpoint.py +232 -0
- anyfesolver/_stiffened_shell_algorithmic_pullback.py +38 -0
- anyfesolver/_stiffened_shell_arc_checkpoint.py +422 -0
- anyfesolver/_stiffened_shell_arc_control.py +108 -0
- anyfesolver/_stiffened_shell_arc_metric.py +222 -0
- anyfesolver/_stiffened_shell_arc_publication.py +153 -0
- anyfesolver/_stiffened_shell_arc_trial.py +310 -0
- anyfesolver/_stiffened_shell_b2_affine_resolution.py +101 -0
- anyfesolver/_stiffened_shell_b2_assembly_diagnostics.py +172 -0
- anyfesolver/_stiffened_shell_b2_definition_ownership.py +189 -0
- anyfesolver/_stiffened_shell_b2_experimental.py +153 -0
- anyfesolver/_stiffened_shell_b2_nodal_footprint.py +273 -0
- anyfesolver/_stiffened_shell_b2_physical_rigid_footprint.py +237 -0
- anyfesolver/_stiffened_shell_b2_q4_panel_experimental.py +2447 -0
- anyfesolver/_stiffened_shell_b2_q4_point_experimental.py +251 -0
- anyfesolver/_stiffened_shell_b2_reference_buckling.py +413 -0
- anyfesolver/_stiffened_shell_b3_chart.py +70 -0
- anyfesolver/_stiffened_shell_b3_local_adapter.py +141 -0
- anyfesolver/_stiffened_shell_beam_history.py +107 -0
- anyfesolver/_stiffened_shell_bl5_local_experimental.py +173 -0
- anyfesolver/_stiffened_shell_bl5_native_elastic.py +28 -0
- anyfesolver/_stiffened_shell_branch_event_trial.py +58 -0
- anyfesolver/_stiffened_shell_consumer_capabilities.py +124 -0
- anyfesolver/_stiffened_shell_coordinate_support.py +110 -0
- anyfesolver/_stiffened_shell_displacement_adaptive.py +327 -0
- anyfesolver/_stiffened_shell_displacement_checkpoint.py +360 -0
- anyfesolver/_stiffened_shell_displacement_control.py +326 -0
- anyfesolver/_stiffened_shell_displacement_corrector.py +293 -0
- anyfesolver/_stiffened_shell_displacement_increment.py +121 -0
- anyfesolver/_stiffened_shell_distributing_footprint.py +354 -0
- anyfesolver/_stiffened_shell_distributing_pose.py +267 -0
- anyfesolver/_stiffened_shell_f06_increment_arithmetic.py +205 -0
- anyfesolver/_stiffened_shell_ge_body_load.py +300 -0
- anyfesolver/_stiffened_shell_ge_checkpoint_binary.py +472 -0
- anyfesolver/_stiffened_shell_ge_distributed_load.py +210 -0
- anyfesolver/_stiffened_shell_ge_distributed_programme.py +175 -0
- anyfesolver/_stiffened_shell_ge_distributing_finite.py +242 -0
- anyfesolver/_stiffened_shell_ge_distributing_reference.py +296 -0
- anyfesolver/_stiffened_shell_ge_experimental.py +2454 -0
- anyfesolver/_stiffened_shell_ge_finite_experimental.py +2714 -0
- anyfesolver/_stiffened_shell_ge_mixed_modal_mass.py +33 -0
- anyfesolver/_stiffened_shell_ge_point_buckling.py +723 -0
- anyfesolver/_stiffened_shell_ge_pressure_load.py +366 -0
- anyfesolver/_stiffened_shell_ge_reference_modal.py +580 -0
- anyfesolver/_stiffened_shell_generalized_recovery.py +150 -0
- anyfesolver/_stiffened_shell_increment_control.py +217 -0
- anyfesolver/_stiffened_shell_l1_assembly_experimental.py +420 -0
- anyfesolver/_stiffened_shell_l1_local_experimental.py +284 -0
- anyfesolver/_stiffened_shell_l1_supported_work_experimental.py +146 -0
- anyfesolver/_stiffened_shell_native_distributed_load.py +120 -0
- anyfesolver/_stiffened_shell_native_gravity.py +236 -0
- anyfesolver/_stiffened_shell_nodal_footprint.py +255 -0
- anyfesolver/_stiffened_shell_physical_q4_mass.py +98 -0
- anyfesolver/_stiffened_shell_physical_s3_mass.py +53 -0
- anyfesolver/_stiffened_shell_point_recovery.py +49 -0
- anyfesolver/_stiffened_shell_q4_algorithmic_pullback.py +88 -0
- anyfesolver/_stiffened_shell_q4_material_event.py +114 -0
- anyfesolver/_stiffened_shell_q4_reference.py +65 -0
- anyfesolver/_stiffened_shell_rotation_charts.py +58 -0
- anyfesolver/_stiffened_shell_s3_algorithmic_pullback.py +59 -0
- anyfesolver/_stiffened_shell_s3_conservative_buckling.py +28 -0
- anyfesolver/_stiffened_shell_s3_dead_work_candidate.py +107 -0
- anyfesolver/_stiffened_shell_s3_material_event.py +30 -0
- anyfesolver/_stiffened_shell_same_parent_trial.py +224 -0
- anyfesolver/_stiffened_shell_selected_recovery.py +113 -0
- anyfesolver/_stiffened_shell_staged_load_experimental.py +392 -0
- anyfesolver/_stiffened_shell_stress_free_reference.py +204 -0
- anyfesolver/_wire_types.py +17 -0
- anyfesolver/activity.py +1537 -0
- anyfesolver/algebraic_dynamics.py +2864 -0
- anyfesolver/analysis_session.py +897 -0
- anyfesolver/anystructure_fem_mode.py +1637 -0
- anyfesolver/arc_length.py +2587 -0
- anyfesolver/assembly.py +1830 -0
- anyfesolver/b3_ge.py +179 -0
- anyfesolver/baselines.py +303 -0
- anyfesolver/beam_sections.py +292 -0
- anyfesolver/beam_shell_verification.py +4685 -0
- anyfesolver/beam_validity.py +110 -0
- anyfesolver/benchmarks.py +495 -0
- anyfesolver/boundary.py +1680 -0
- anyfesolver/buckling.py +2136 -0
- anyfesolver/buckling_validity.py +91 -0
- anyfesolver/capacity_workflow.py +431 -0
- anyfesolver/capsule_runtime_guard.py +99 -0
- anyfesolver/cases.py +173 -0
- anyfesolver/composite_strip_verification.py +297 -0
- anyfesolver/concentrated_mass.py +84 -0
- anyfesolver/constraint_audit.py +553 -0
- anyfesolver/contact.py +4785 -0
- anyfesolver/contact_performance.py +301 -0
- anyfesolver/control.py +206 -0
- anyfesolver/corotational.py +1935 -0
- anyfesolver/corotational_performance.py +157 -0
- anyfesolver/current_state_tangent.py +2780 -0
- anyfesolver/cylinder_benchmarks.py +369 -0
- anyfesolver/damage_matrix_performance.py +617 -0
- anyfesolver/dynamics.py +2833 -0
- anyfesolver/e4_pl_element.py +8265 -0
- anyfesolver/e4_pl_enriched.py +194 -0
- anyfesolver/e4_pl_enriched_nonlinear.py +159 -0
- anyfesolver/e4_pl_s3_element.py +9752 -0
- anyfesolver/e4_pl_s3_initial_fields.py +101 -0
- anyfesolver/e4_pl_s3_state.py +4723 -0
- anyfesolver/e4_pl_s3_v2_element.py +1844 -0
- anyfesolver/e4_pl_s3_v2b_element.py +1936 -0
- anyfesolver/e4_pl_s3_v2c_element.py +2196 -0
- anyfesolver/e4_pl_s3_v2d_element.py +2621 -0
- anyfesolver/e4_pl_s3_v2d_state.py +376 -0
- anyfesolver/element_capabilities.py +159 -0
- anyfesolver/element_qualification.py +432 -0
- anyfesolver/elements.py +6327 -0
- anyfesolver/experimental_csr_assembly.py +238 -0
- anyfesolver/external_references.py +1253 -0
- anyfesolver/fe_core.py +832 -0
- anyfesolver/floating_pressure_regions.py +119 -0
- anyfesolver/floating_response.py +486 -0
- anyfesolver/floating_transient.py +1281 -0
- anyfesolver/fracture.py +621 -0
- anyfesolver/ge_beam3_curved_reference.py +725 -0
- anyfesolver/ge_beam3_element.py +885 -0
- anyfesolver/ge_beam3_mixed_element.py +1216 -0
- anyfesolver/ge_beam3_mixed_state.py +814 -0
- anyfesolver/ge_beam3_native.py +129 -0
- anyfesolver/ge_beam3_native_connected_dynamics.py +24 -0
- anyfesolver/ge_beam3_native_dynamics.py +70 -0
- anyfesolver/ge_beam3_state.py +672 -0
- anyfesolver/general_contact/__init__.py +151 -0
- anyfesolver/general_contact/_enriched_multitarget_empty.py +202 -0
- anyfesolver/general_contact/_enriched_multitarget_trial.py +183 -0
- anyfesolver/general_contact/_results_archive_common.py +65 -0
- anyfesolver/general_contact/algebraic_path.py +206 -0
- anyfesolver/general_contact/arc_contact.py +237 -0
- anyfesolver/general_contact/arc_results_archive.py +158 -0
- anyfesolver/general_contact/augmentation.py +157 -0
- anyfesolver/general_contact/automatic_domain.py +621 -0
- anyfesolver/general_contact/beam_chain_consistent.py +357 -0
- anyfesolver/general_contact/beam_chain_end_geometry.py +237 -0
- anyfesolver/general_contact/beam_chain_ends.py +220 -0
- anyfesolver/general_contact/beam_chain_pair.py +416 -0
- anyfesolver/general_contact/beam_curve_end_geometry.py +254 -0
- anyfesolver/general_contact/beam_curve_ends.py +237 -0
- anyfesolver/general_contact/beam_curve_pair.py +794 -0
- anyfesolver/general_contact/beam_curve_pair_static.py +303 -0
- anyfesolver/general_contact/beam_end_radial_geometry.py +221 -0
- anyfesolver/general_contact/beam_end_topology.py +15 -0
- anyfesolver/general_contact/beam_hemisphere_coupled_tool.py +61 -0
- anyfesolver/general_contact/beam_hemisphere_cylinder.py +134 -0
- anyfesolver/general_contact/beam_hemisphere_cylinder_motion.py +89 -0
- anyfesolver/general_contact/beam_hemisphere_cylinder_work.py +216 -0
- anyfesolver/general_contact/beam_hemisphere_plane.py +175 -0
- anyfesolver/general_contact/beam_hemisphere_s3_support.py +152 -0
- anyfesolver/general_contact/beam_hemisphere_sphere.py +135 -0
- anyfesolver/general_contact/beam_hemisphere_sphere_work.py +114 -0
- anyfesolver/general_contact/beam_hemisphere_support.py +211 -0
- anyfesolver/general_contact/beam_pair.py +523 -0
- anyfesolver/general_contact/beam_pair_end_geometry.py +269 -0
- anyfesolver/general_contact/beam_pair_ends.py +222 -0
- anyfesolver/general_contact/beam_plane.py +425 -0
- anyfesolver/general_contact/beam_radial.py +500 -0
- anyfesolver/general_contact/beam_radial_ends.py +223 -0
- anyfesolver/general_contact/beam_s3_directional_rates.py +196 -0
- anyfesolver/general_contact/beam_s3_rotational_transient.py +126 -0
- anyfesolver/general_contact/beam_s3_transient.py +139 -0
- anyfesolver/general_contact/beam_shell.py +648 -0
- anyfesolver/general_contact/beam_shell_patch.py +395 -0
- anyfesolver/general_contact/beam_temporal_bounds.py +230 -0
- anyfesolver/general_contact/capability.py +101 -0
- anyfesolver/general_contact/capped_cylinder.py +618 -0
- anyfesolver/general_contact/contact_search.py +95 -0
- anyfesolver/general_contact/core.py +1769 -0
- anyfesolver/general_contact/curved_s3_q4_work.py +238 -0
- anyfesolver/general_contact/curved_shell_skin.py +520 -0
- anyfesolver/general_contact/d1_interior_profile.py +427 -0
- anyfesolver/general_contact/deformable_beam_s3_caps.py +143 -0
- anyfesolver/general_contact/deformable_beam_s3_line.py +211 -0
- anyfesolver/general_contact/deformable_beam_s3_static.py +152 -0
- anyfesolver/general_contact/descriptor_rates.py +61 -0
- anyfesolver/general_contact/enriched_cold_predictor.py +161 -0
- anyfesolver/general_contact/enriched_moment_batch.py +337 -0
- anyfesolver/general_contact/enriched_multitarget.py +308 -0
- anyfesolver/general_contact/enriched_multitarget_gap.py +156 -0
- anyfesolver/general_contact/enriched_multitarget_moments.py +194 -0
- anyfesolver/general_contact/enriched_multitarget_topology.py +171 -0
- anyfesolver/general_contact/enriched_nonlinear.py +440 -0
- anyfesolver/general_contact/enriched_overlap.py +299 -0
- anyfesolver/general_contact/enriched_path.py +253 -0
- anyfesolver/general_contact/enriched_small_cut.py +310 -0
- anyfesolver/general_contact/enriched_static.py +481 -0
- anyfesolver/general_contact/enriched_union.py +320 -0
- anyfesolver/general_contact/equilibrated_pressure_pivot.py +140 -0
- anyfesolver/general_contact/event_subdivision.py +273 -0
- anyfesolver/general_contact/finite_mixed_state.py +133 -0
- anyfesolver/general_contact/finite_rigid_patch.py +196 -0
- anyfesolver/general_contact/finite_rigid_support.py +129 -0
- anyfesolver/general_contact/finite_rigid_sweep.py +53 -0
- anyfesolver/general_contact/finite_rotation_predictor.py +171 -0
- anyfesolver/general_contact/finite_rotation_skin.py +212 -0
- anyfesolver/general_contact/finite_rotation_state.py +106 -0
- anyfesolver/general_contact/finite_rotation_sweep.py +161 -0
- anyfesolver/general_contact/finite_v2d_state.py +104 -0
- anyfesolver/general_contact/fixed_projection_graph.py +205 -0
- anyfesolver/general_contact/fixed_projection_s3_events.py +235 -0
- anyfesolver/general_contact/free_rigid.py +134 -0
- anyfesolver/general_contact/friction_point.py +378 -0
- anyfesolver/general_contact/gap_extrema.py +119 -0
- anyfesolver/general_contact/guided_pair_transient_geometry.py +138 -0
- anyfesolver/general_contact/initial_contact_seed.py +368 -0
- anyfesolver/general_contact/linearized_pivot.py +595 -0
- anyfesolver/general_contact/material_work_diagnostics.py +159 -0
- anyfesolver/general_contact/moment_batch_ad.py +129 -0
- anyfesolver/general_contact/moment_batch_points.py +75 -0
- anyfesolver/general_contact/moving.py +1031 -0
- anyfesolver/general_contact/multiple_beam_rigid.py +248 -0
- anyfesolver/general_contact/multiple_beam_s3_caps.py +199 -0
- anyfesolver/general_contact/multiple_beam_s3_transient.py +223 -0
- anyfesolver/general_contact/multiple_projected_pairs.py +196 -0
- anyfesolver/general_contact/multiple_shell_planes.py +226 -0
- anyfesolver/general_contact/native_activation_static.py +143 -0
- anyfesolver/general_contact/native_checkpoint_results.py +213 -0
- anyfesolver/general_contact/native_curve_union.py +268 -0
- anyfesolver/general_contact/native_curved_geometry.py +374 -0
- anyfesolver/general_contact/native_curved_pair_partition.py +590 -0
- anyfesolver/general_contact/native_curved_plane_work.py +864 -0
- anyfesolver/general_contact/native_curved_s3_work.py +472 -0
- anyfesolver/general_contact/native_event_polynomial.py +164 -0
- anyfesolver/general_contact/native_fibre_context.py +173 -0
- anyfesolver/general_contact/native_fibre_results.py +74 -0
- anyfesolver/general_contact/native_initial_guess.py +122 -0
- anyfesolver/general_contact/native_material_activation.py +108 -0
- anyfesolver/general_contact/native_material_plane.py +111 -0
- anyfesolver/general_contact/native_material_s3.py +209 -0
- anyfesolver/general_contact/native_multi_s3_static.py +722 -0
- anyfesolver/general_contact/native_normal_angles.py +233 -0
- anyfesolver/general_contact/native_pair_error_budget.py +49 -0
- anyfesolver/general_contact/native_replay_arithmetic.py +103 -0
- anyfesolver/general_contact/native_replay_diagnostics.py +90 -0
- anyfesolver/general_contact/native_retained_body_junction.py +99 -0
- anyfesolver/general_contact/native_retained_body_pair.py +220 -0
- anyfesolver/general_contact/native_retained_body_projection.py +160 -0
- anyfesolver/general_contact/native_retained_body_static.py +62 -0
- anyfesolver/general_contact/native_retained_cell_pair.py +185 -0
- anyfesolver/general_contact/native_retained_curve_cell.py +102 -0
- anyfesolver/general_contact/native_retained_line_plane.py +210 -0
- anyfesolver/general_contact/native_retained_line_s3.py +440 -0
- anyfesolver/general_contact/native_retained_line_s3_work.py +91 -0
- anyfesolver/general_contact/native_retained_pair_static.py +845 -0
- anyfesolver/general_contact/native_retained_s3_static.py +554 -0
- anyfesolver/general_contact/native_retained_static.py +478 -0
- anyfesolver/general_contact/native_retained_station.py +222 -0
- anyfesolver/general_contact/native_retained_whole_pair.py +2120 -0
- anyfesolver/general_contact/native_s3_swept.py +149 -0
- anyfesolver/general_contact/native_shell_static_driver.py +144 -0
- anyfesolver/general_contact/native_surface_activation.py +391 -0
- anyfesolver/general_contact/native_surface_bounds.py +198 -0
- anyfesolver/general_contact/native_surface_contributor.py +121 -0
- anyfesolver/general_contact/native_surface_crossing.py +81 -0
- anyfesolver/general_contact/native_surface_event_sequence.py +320 -0
- anyfesolver/general_contact/native_surface_extrema.py +72 -0
- anyfesolver/general_contact/native_surface_friction_integral.py +1724 -0
- anyfesolver/general_contact/native_surface_front.py +742 -0
- anyfesolver/general_contact/native_surface_front_boundary.py +160 -0
- anyfesolver/general_contact/native_surface_front_precision.py +78 -0
- anyfesolver/general_contact/native_surface_front_work.py +118 -0
- anyfesolver/general_contact/native_surface_history.py +334 -0
- anyfesolver/general_contact/native_surface_normal.py +324 -0
- anyfesolver/general_contact/native_surface_patch.py +213 -0
- anyfesolver/general_contact/native_surface_path.py +348 -0
- anyfesolver/general_contact/native_surface_quadrature.py +212 -0
- anyfesolver/general_contact/native_surface_s3_friction.py +340 -0
- anyfesolver/general_contact/native_surface_support.py +776 -0
- anyfesolver/general_contact/native_surface_transaction.py +198 -0
- anyfesolver/general_contact/native_transient_multi_shell.py +108 -0
- anyfesolver/general_contact/native_transient_pair.py +61 -0
- anyfesolver/general_contact/native_transient_shell.py +44 -0
- anyfesolver/general_contact/normal_s3_skin_path.py +163 -0
- anyfesolver/general_contact/overlap.py +443 -0
- anyfesolver/general_contact/pair.py +466 -0
- anyfesolver/general_contact/patch_broadphase.py +111 -0
- anyfesolver/general_contact/patch_mortar.py +593 -0
- anyfesolver/general_contact/patch_sliding.py +644 -0
- anyfesolver/general_contact/plane_newmark_events.py +278 -0
- anyfesolver/general_contact/pointwise_patch.py +288 -0
- anyfesolver/general_contact/polynomial_roots.py +312 -0
- anyfesolver/general_contact/pressure_basis.py +241 -0
- anyfesolver/general_contact/pressure_diagnostics.py +155 -0
- anyfesolver/general_contact/pressure_overlay.py +182 -0
- anyfesolver/general_contact/pressure_space.py +51 -0
- anyfesolver/general_contact/q4_material_checkpoint.py +276 -0
- anyfesolver/general_contact/q4_overlap_local_bound.py +1111 -0
- anyfesolver/general_contact/q4_q4_overlap_derivatives.py +234 -0
- anyfesolver/general_contact/q4_q4_swept_bound.py +58 -0
- anyfesolver/general_contact/q4_s3_overlap_derivatives.py +1159 -0
- anyfesolver/general_contact/q4_s3_tiny_wedge.py +180 -0
- anyfesolver/general_contact/q4_skin_work.py +87 -0
- anyfesolver/general_contact/q4_source_mortar_energy.py +181 -0
- anyfesolver/general_contact/q4_source_overlap.py +401 -0
- anyfesolver/general_contact/q4_target_overlap.py +181 -0
- anyfesolver/general_contact/request_identity.py +192 -0
- anyfesolver/general_contact/rigid_translation.py +199 -0
- anyfesolver/general_contact/runtime.py +27 -0
- anyfesolver/general_contact/s3_friction_chart_interval.py +104 -0
- anyfesolver/general_contact/s3_friction_coverage.py +165 -0
- anyfesolver/general_contact/s3_friction_dyadic_interval.py +39 -0
- anyfesolver/general_contact/s3_friction_history_path.py +111 -0
- anyfesolver/general_contact/s3_friction_mesh_coverage.py +145 -0
- anyfesolver/general_contact/s3_friction_mesh_gap.py +74 -0
- anyfesolver/general_contact/s3_friction_mesh_monolithic.py +150 -0
- anyfesolver/general_contact/s3_friction_monolithic.py +121 -0
- anyfesolver/general_contact/s3_friction_moving_coverage.py +114 -0
- anyfesolver/general_contact/s3_friction_pair.py +237 -0
- anyfesolver/general_contact/s3_friction_point.py +129 -0
- anyfesolver/general_contact/s3_friction_prepared_path.py +254 -0
- anyfesolver/general_contact/s3_friction_replay.py +1094 -0
- anyfesolver/general_contact/s3_friction_rim_path.py +69 -0
- anyfesolver/general_contact/s3_friction_rim_transaction.py +23 -0
- anyfesolver/general_contact/s3_friction_static.py +267 -0
- anyfesolver/general_contact/s3_friction_swept_gap.py +112 -0
- anyfesolver/general_contact/s3_friction_touch.py +94 -0
- anyfesolver/general_contact/s3_friction_weak_pressure.py +66 -0
- anyfesolver/general_contact/s3_overlap_derivatives.py +220 -0
- anyfesolver/general_contact/s3_overlap_hermite_gap.py +180 -0
- anyfesolver/general_contact/s3_pair_static.py +343 -0
- anyfesolver/general_contact/s3_patch_augmented.py +2056 -0
- anyfesolver/general_contact/s3_patch_mortar_energy.py +545 -0
- anyfesolver/general_contact/s3_patch_static.py +1725 -0
- anyfesolver/general_contact/s3_pressure_hermite_bounds.py +395 -0
- anyfesolver/general_contact/s3_pressure_polygon_bounds.py +73 -0
- anyfesolver/general_contact/s3_q4_gap_resolution.py +191 -0
- anyfesolver/general_contact/s3_q4_overlap_derivatives.py +252 -0
- anyfesolver/general_contact/s3_q4_swept.py +56 -0
- anyfesolver/general_contact/s3_skin_work.py +101 -0
- anyfesolver/general_contact/s3_sliding_friction.py +640 -0
- anyfesolver/general_contact/s3_stable_plane_gap.py +43 -0
- anyfesolver/general_contact/seed_path_vertex_interval.py +323 -0
- anyfesolver/general_contact/semismooth.py +133 -0
- anyfesolver/general_contact/semismooth_block.py +147 -0
- anyfesolver/general_contact/semismooth_path.py +871 -0
- anyfesolver/general_contact/shell_pair_hermite_sweep.py +336 -0
- anyfesolver/general_contact/shell_sphere_temporal_bounds.py +305 -0
- anyfesolver/general_contact/skin_geometry.py +106 -0
- anyfesolver/general_contact/sliding.py +349 -0
- anyfesolver/general_contact/sphere.py +691 -0
- anyfesolver/general_contact/sphere_temporal_bounds.py +241 -0
- anyfesolver/general_contact/static_path.py +2608 -0
- anyfesolver/general_contact/static_results_archive.py +140 -0
- anyfesolver/general_contact/structural_state_bridge.py +196 -0
- anyfesolver/general_contact/supported_schur.py +594 -0
- anyfesolver/general_contact/swept_patch_broadphase.py +160 -0
- anyfesolver/general_contact/transient.py +2921 -0
- anyfesolver/general_contact/transient_results_archive.py +491 -0
- anyfesolver/general_contact/triangle_mortar_energy.py +280 -0
- anyfesolver/general_contact/triangle_pair_energy.py +211 -0
- anyfesolver/general_contact/triangulated_rigid.py +94 -0
- anyfesolver/general_contact/triangulated_rigid_static.py +399 -0
- anyfesolver/general_contact/warped_q4_plane.py +185 -0
- anyfesolver/general_contact/warped_q4_skin.py +302 -0
- anyfesolver/general_contact/warped_q4_static.py +331 -0
- anyfesolver/impact_performance.py +273 -0
- anyfesolver/impact_reduced_assembly.py +294 -0
- anyfesolver/imperfections.py +397 -0
- anyfesolver/inertia_relief.py +676 -0
- anyfesolver/initial_field_state.py +54 -0
- anyfesolver/jit_compiler.py +135 -0
- anyfesolver/kernel_warmup.py +228 -0
- anyfesolver/linalg.py +1002 -0
- anyfesolver/marine_contributions.py +634 -0
- anyfesolver/marine_coupled_equilibrium.py +292 -0
- anyfesolver/marine_equilibrium.py +405 -0
- anyfesolver/marine_hydro_coordinates.py +346 -0
- anyfesolver/marine_linear.py +549 -0
- anyfesolver/marine_link.py +306 -0
- anyfesolver/marine_mechanical.py +923 -0
- anyfesolver/marine_mooring.py +533 -0
- anyfesolver/marine_morison.py +331 -0
- anyfesolver/marine_potential_flow.py +403 -0
- anyfesolver/marine_rigid.py +397 -0
- anyfesolver/marine_seabed.py +122 -0
- anyfesolver/mass_properties.py +352 -0
- anyfesolver/material_curves.py +52 -0
- anyfesolver/materials.py +43 -0
- anyfesolver/matrix_assembly.py +7330 -0
- anyfesolver/mesh_gen.py +904 -0
- anyfesolver/mesh_load_bc_verification.py +612 -0
- anyfesolver/modal.py +2494 -0
- anyfesolver/nonlinear.py +341 -0
- anyfesolver/nonlinear_analysis_diagnostics.py +466 -0
- anyfesolver/nonlinear_element_evaluation.py +126 -0
- anyfesolver/nonlinear_performance.py +2094 -0
- anyfesolver/nonlinear_performance_batch_b.py +1173 -0
- anyfesolver/nonlinear_performance_batch_c.py +850 -0
- anyfesolver/nonlinear_performance_bootstrap.py +164 -0
- anyfesolver/nonlinear_reduced_assembly.py +806 -0
- anyfesolver/nonlinear_restart.py +1708 -0
- anyfesolver/nonlinear_state.py +2800 -0
- anyfesolver/nonlinear_static.py +9407 -0
- anyfesolver/outcomes.py +694 -0
- anyfesolver/plasticity.py +2087 -0
- anyfesolver/plasticity_qualification.py +758 -0
- anyfesolver/prepared_static.py +1129 -0
- anyfesolver/prepared_static_envelopes.py +389 -0
- anyfesolver/prepared_static_loads.py +1180 -0
- anyfesolver/prepared_static_measures.py +18 -0
- anyfesolver/prepared_static_numeric.py +247 -0
- anyfesolver/prepared_static_q4.py +297 -0
- anyfesolver/prepared_static_recovery.py +2068 -0
- anyfesolver/prepared_static_response.py +1013 -0
- anyfesolver/prepared_static_shared.py +226 -0
- anyfesolver/prepared_static_snapshot.py +323 -0
- anyfesolver/prepared_static_vectorized.py +866 -0
- anyfesolver/pressure_regions.py +287 -0
- anyfesolver/production_readiness.py +343 -0
- anyfesolver/quality_control.py +1487 -0
- anyfesolver/quantities.py +1289 -0
- anyfesolver/recovery.py +4217 -0
- anyfesolver/recovery_batches.py +1985 -0
- anyfesolver/recovery_policy.py +205 -0
- anyfesolver/recovery_s4.py +289 -0
- anyfesolver/recovery_shell_frames.py +102 -0
- anyfesolver/reference_cases.py +366 -0
- anyfesolver/result_capsule.py +2175 -0
- anyfesolver/results.py +752 -0
- anyfesolver/runtime.py +9819 -0
- anyfesolver/s3_reference_batch.py +1338 -0
- anyfesolver/s3_v2c_fast_assembly.py +544 -0
- anyfesolver/s3_v2d_fast_assembly.py +447 -0
- anyfesolver/s4_validity.py +354 -0
- anyfesolver/sections.py +67 -0
- anyfesolver/sesam_fem/__init__.py +55 -0
- anyfesolver/sesam_fem/__main__.py +80 -0
- anyfesolver/sesam_fem/diagnostics.py +5 -0
- anyfesolver/sesam_fem/document.py +39 -0
- anyfesolver/sesam_fem/exporter.py +9 -0
- anyfesolver/sesam_fem/importer.py +228 -0
- anyfesolver/sesam_fem/records.py +21 -0
- anyfesolver/sesam_fem/schema.py +35 -0
- anyfesolver/sesam_fem/sif_importer.py +9 -0
- anyfesolver/sesam_fem/validation.py +5 -0
- anyfesolver/sestra_deep_diagnostics.py +173 -0
- anyfesolver/sestra_mixed_verification.py +146 -0
- anyfesolver/sestra_structure_benchmarks.py +270 -0
- anyfesolver/sestra_three_case.py +215 -0
- anyfesolver/sestra_verification.py +523 -0
- anyfesolver/shell_benchmarks.py +367 -0
- anyfesolver/shell_formulations/director_field.py +799 -0
- anyfesolver/shell_formulations/geometry_provenance.py +921 -0
- anyfesolver/shell_formulations/mitc4_plus_d_quality.py +318 -0
- anyfesolver/shell_formulations/mitc4_plus_d_reference.py +837 -0
- anyfesolver/shell_formulations/mitc4_plus_d_scalar.py +209 -0
- anyfesolver/shell_formulations/protocol.py +222 -0
- anyfesolver/shell_formulations/q4_common.py +271 -0
- anyfesolver/shell_formulations/s4_restricted_policy.py +78 -0
- anyfesolver/shell_sections.py +394 -0
- anyfesolver/solid_submodel.py +930 -0
- anyfesolver/static_batch.py +662 -0
- anyfesolver/static_envelopes.py +250 -0
- anyfesolver/stiffened_shell.py +388 -0
- anyfesolver/submodel_transfer.py +1306 -0
- anyfesolver/test_cases.py +610 -0
- anyfesolver/threading_policy.py +431 -0
- anyfesolver/validation.py +719 -0
- anyfesolver/vectorized_beam.py +139 -0
- anyfesolver/vectorized_generalized_shell.py +448 -0
- anyfesolver/vectorized_hill48.py +956 -0
- anyfesolver/vectorized_nonlinear.py +360 -0
- anyfesolver/vectorized_stiffness.py +694 -0
- anyfesolver-0.5.0a1.dist-info/METADATA +374 -0
- anyfesolver-0.5.0a1.dist-info/RECORD +751 -0
- anyfesolver-0.5.0a1.dist-info/WHEEL +5 -0
- anyfesolver-0.5.0a1.dist-info/licenses/COPYRIGHT +1 -0
- anyfesolver-0.5.0a1.dist-info/licenses/LICENSE +373 -0
- anyfesolver-0.5.0a1.dist-info/licenses/THIRD_PARTY_NOTICES.md +32 -0
- anyfesolver-0.5.0a1.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
"""Private six-resultant associated ellipsoid section, not a fibre/J2 adapter."""
|
|
2
|
+
from dataclasses import dataclass
|
|
3
|
+
from decimal import Decimal as D, localcontext
|
|
4
|
+
from hashlib import sha256
|
|
5
|
+
from time import monotonic
|
|
6
|
+
import numpy as np
|
|
7
|
+
from ._ge_beam3_fibre_section import _owned,_number,canonical
|
|
8
|
+
from ._ge_beam3_station_resultant_cell import dec,pair,mv,dot,solve,ident,cholesky
|
|
9
|
+
from ._ge_beam3_effective_deadline import effective_deadline_seconds
|
|
10
|
+
|
|
11
|
+
POLICY='GE_BEAM3_SIX_RESULTANT_ASSOCIATED_ELLIPSOID_HARDENING_V1'
|
|
12
|
+
MEASURE='NATIVE_GENERALIZED_STRAIN_AND_REFERENCE_SECTION_RESULTANT_WORK'
|
|
13
|
+
RECOVERY='RESULTANT_LEVEL_ONLY_NO_FIBRE_STRESSES_SUPPLIED'
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def _pair(x):
|
|
17
|
+
high,low=pair([x]);return high[0],low[0]
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def _parts(values,shape):
|
|
21
|
+
a,b=pair(values)
|
|
22
|
+
return _owned(np.array(a).reshape(shape),shape),_owned(np.array(b).reshape(shape),shape)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def _unpair(value):
|
|
26
|
+
if type(value) is not tuple or len(value)!=2:raise ValueError('exact paired section scalar')
|
|
27
|
+
x=dec(value[0])+dec(value[1])
|
|
28
|
+
if _pair(x)!=value:raise ValueError('normalized paired section scalar')
|
|
29
|
+
return x
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
@dataclass(frozen=True)
|
|
33
|
+
class GeneralizedHistory:
|
|
34
|
+
section_identity: str
|
|
35
|
+
plastic: tuple
|
|
36
|
+
accumulated: tuple
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
@dataclass(frozen=True)
|
|
40
|
+
class GeneralizedResponse:
|
|
41
|
+
origin: GeneralizedHistory
|
|
42
|
+
history: GeneralizedHistory
|
|
43
|
+
strain: np.ndarray
|
|
44
|
+
strain_low: np.ndarray
|
|
45
|
+
resultants: np.ndarray
|
|
46
|
+
resultants_low: np.ndarray
|
|
47
|
+
tangent: np.ndarray
|
|
48
|
+
tangent_low: np.ndarray
|
|
49
|
+
compliance: np.ndarray
|
|
50
|
+
compliance_low: np.ndarray
|
|
51
|
+
dual_potential: tuple
|
|
52
|
+
incremental_potential: tuple
|
|
53
|
+
stored_energy: tuple
|
|
54
|
+
dissipation: tuple
|
|
55
|
+
plastic_increment: tuple
|
|
56
|
+
branch: str
|
|
57
|
+
derivative_kind: str
|
|
58
|
+
section_identity: str
|
|
59
|
+
recovery_status: str=RECOVERY
|
|
60
|
+
production_qualified: bool=False
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class EllipsoidalGeneralizedSection:
|
|
64
|
+
"""C and M are explicit SPD work-coordinate tensors; H and Y are positive.
|
|
65
|
+
|
|
66
|
+
q(s)=sqrt(s.T M s). Flow is dz=dlambda*M*s/q and dp=dlambda.
|
|
67
|
+
The complete complementary incremental potential is
|
|
68
|
+
.5*s.T*C^-1*s + z0.s + max(q-Y-H*p0,0)^2/(2H).
|
|
69
|
+
This is a declared resultant law, never an inferred physical fibre model.
|
|
70
|
+
"""
|
|
71
|
+
__slots__=('elastic','metric','yield_force','hardening','identity','_c','_m','_s','_compiled','_sealed')
|
|
72
|
+
|
|
73
|
+
def __setattr__(self,name,value):
|
|
74
|
+
if getattr(self,'_sealed',False):raise AttributeError('generalized section is immutable')
|
|
75
|
+
object.__setattr__(self,name,value)
|
|
76
|
+
|
|
77
|
+
def __init__(self,elastic,metric,yield_force,hardening):
|
|
78
|
+
self.elastic=_owned(elastic,(6,6));self.metric=_owned(metric,(6,6))
|
|
79
|
+
self.yield_force=_number(yield_force);self.hardening=_number(hardening)
|
|
80
|
+
if self.yield_force<=0 or self.hardening<=0:raise ValueError('positive yield and hardening required')
|
|
81
|
+
if not np.array_equal(self.elastic,self.elastic.T) or not np.array_equal(self.metric,self.metric.T):
|
|
82
|
+
raise ValueError('exact symmetric generalized tensors required')
|
|
83
|
+
with localcontext() as ctx:
|
|
84
|
+
ctx.prec=80
|
|
85
|
+
self._c=tuple(tuple(D.from_float(float(v)) for v in row) for row in self.elastic)
|
|
86
|
+
self._m=tuple(tuple(D.from_float(float(v)) for v in row) for row in self.metric)
|
|
87
|
+
cholesky(self._c);cholesky(self._m)
|
|
88
|
+
self._s=tuple(map(tuple,solve([list(row) for row in self._c],ident(6),lambda:None)))
|
|
89
|
+
self._compiled=(self._c,self._m,self._s)
|
|
90
|
+
self.identity=sha256(canonical(self.descriptor())).hexdigest();self._sealed=True
|
|
91
|
+
|
|
92
|
+
def descriptor(self):
|
|
93
|
+
return dict(policy=POLICY,measure=MEASURE,elastic=self.elastic,metric=self.metric,
|
|
94
|
+
yield_force=self.yield_force,hardening=self.hardening,recovery=RECOVERY)
|
|
95
|
+
|
|
96
|
+
def guard(self):
|
|
97
|
+
if sha256(canonical(self.descriptor())).hexdigest()!=self.identity:raise ValueError('generalized section authority changed')
|
|
98
|
+
if any(a is not b for a,b in zip((self._c,self._m,self._s),self._compiled)):
|
|
99
|
+
raise ValueError('generalized section compiled authority changed')
|
|
100
|
+
|
|
101
|
+
def virgin(self):
|
|
102
|
+
self.guard();return GeneralizedHistory(self.identity,((0.,0.),)*6,(0.,0.))
|
|
103
|
+
|
|
104
|
+
def _origin(self,origin):
|
|
105
|
+
if type(origin) is not GeneralizedHistory or origin.section_identity!=self.identity or type(origin.plastic) is not tuple or len(origin.plastic)!=6:
|
|
106
|
+
raise ValueError('owned six-component section history required')
|
|
107
|
+
z=list(map(_unpair,origin.plastic));p=_unpair(origin.accumulated)
|
|
108
|
+
if p<0:raise ValueError('nonnegative accumulated section increment')
|
|
109
|
+
# This point law permits an explicitly supplied initial plastic offset.
|
|
110
|
+
# Reachability from virgin state belongs to its authenticated history chain.
|
|
111
|
+
return z,p
|
|
112
|
+
|
|
113
|
+
def _dual(self,s,z0,p0):
|
|
114
|
+
h=dec(self.hardening);y=dec(self.yield_force);ms=mv(self._m,s);q=dot(s,ms).sqrt();radius=y+h*p0
|
|
115
|
+
lam=max(D(0),(q-radius)/h);z=z0[:];comp=[list(row) for row in self._s]
|
|
116
|
+
if lam:
|
|
117
|
+
n=[v/q for v in ms];z=[a+lam*b for a,b in zip(z0,n)]
|
|
118
|
+
for i in range(6):
|
|
119
|
+
for j in range(6):comp[i][j]+=n[i]*n[j]/h+lam*(self._m[i][j]-n[i]*n[j])/q
|
|
120
|
+
elastic=mv(self._s,s);e=[a+b for a,b in zip(elastic,z)]
|
|
121
|
+
p=p0+lam;ue=dot(s,elastic)/2
|
|
122
|
+
dual=ue+dot(z0,s)+max(D(0),q-radius)**2/(2*h)
|
|
123
|
+
potential=ue+h*(p*p-p0*p0)/2+y*lam
|
|
124
|
+
branch='PLASTIC' if lam else ('YIELD_BOUNDARY' if q==radius else 'ELASTIC')
|
|
125
|
+
return e,comp,z,p,lam,dual,potential,ue+h*p*p/2,y*lam,branch
|
|
126
|
+
|
|
127
|
+
def response(self,values,*,origin=None,control='strain'):
|
|
128
|
+
self.guard()
|
|
129
|
+
if control not in ('strain','resultant'):raise ValueError('explicit strain or resultant section control')
|
|
130
|
+
data=_owned(values,(6,));origin=self.virgin() if origin is None else origin
|
|
131
|
+
captured=canonical(origin);started=monotonic()
|
|
132
|
+
def check():
|
|
133
|
+
if monotonic()-started>effective_deadline_seconds(15.):raise RuntimeError('generalized section response deadline')
|
|
134
|
+
self.guard()
|
|
135
|
+
with localcontext() as ctx:
|
|
136
|
+
ctx.prec=80;z0,p0=self._origin(origin);v=list(map(lambda x:D.from_float(float(x)),data))
|
|
137
|
+
if control=='resultant':s=v
|
|
138
|
+
else:
|
|
139
|
+
target=[a-b for a,b in zip(v,z0)];s=mv(self._c,target)
|
|
140
|
+
radius=dec(self.yield_force)+dec(self.hardening)*p0;q=dot(s,mv(self._m,s)).sqrt()
|
|
141
|
+
if q>radius:
|
|
142
|
+
left=D(0);right=1/dec(self.hardening)
|
|
143
|
+
for iteration in range(256):
|
|
144
|
+
check();tau=(left+right)/2
|
|
145
|
+
matrix=[[self._s[i][j]+tau*self._m[i][j] for j in range(6)] for i in range(6)]
|
|
146
|
+
s=[row[0] for row in solve(matrix,[[x] for x in target],check)]
|
|
147
|
+
q=dot(s,mv(self._m,s)).sqrt();g=q*(1-dec(self.hardening)*tau)-radius
|
|
148
|
+
if abs(g)<=D('1e-60')*max(D(1),radius):break
|
|
149
|
+
if g>0:left=tau
|
|
150
|
+
else:right=tau
|
|
151
|
+
else:raise RuntimeError('generalized section return-map iteration limit')
|
|
152
|
+
e,comp,z,p,lam,dual,potential,stored,dissipation,branch=self._dual(s,z0,p0)
|
|
153
|
+
if control=='strain' and max(abs(a-b) for a,b in zip(e,v))>D('1e-50')*max(D(1),*(abs(x) for x in v)):
|
|
154
|
+
raise ValueError('generalized section primal return mismatch')
|
|
155
|
+
cholesky(comp);tangent=solve(comp,ident(6),check)
|
|
156
|
+
ep=_parts(e,(6,));sp=_parts(s,(6,))
|
|
157
|
+
cp=_parts([x for row in comp for x in row],(6,6));tp=_parts([x for row in tangent for x in row],(6,6))
|
|
158
|
+
result=GeneralizedResponse(origin,GeneralizedHistory(self.identity,tuple(map(_pair,z)),_pair(p)),*ep,*sp,*tp,*cp,
|
|
159
|
+
_pair(dual),_pair(potential),_pair(stored),_pair(dissipation),_pair(lam),branch,
|
|
160
|
+
'SEMISMOOTH_ELASTIC_SELECTION' if branch=='YIELD_BOUNDARY' else 'CLASSICAL_SMOOTH_BRANCH',self.identity)
|
|
161
|
+
check()
|
|
162
|
+
if canonical(origin)!=captured:raise ValueError('generalized origin changed during response')
|
|
163
|
+
return result
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
@dataclass(frozen=True)
|
|
167
|
+
class SectionProposal:
|
|
168
|
+
token: object
|
|
169
|
+
response: GeneralizedResponse
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
class GeneralizedStation:
|
|
173
|
+
"""Local transaction building block; global beam integration is separate."""
|
|
174
|
+
__slots__=('_section','_history','_epoch','_pending','_accepted')
|
|
175
|
+
|
|
176
|
+
def __init__(self,section):
|
|
177
|
+
if type(section) is not EllipsoidalGeneralizedSection:raise ValueError('exact generalized section')
|
|
178
|
+
self._section=section;self._history=section.virgin();self._epoch=0;self._pending=None;self._accepted=None
|
|
179
|
+
|
|
180
|
+
@property
|
|
181
|
+
def section(self):return self._section
|
|
182
|
+
|
|
183
|
+
@property
|
|
184
|
+
def history(self):return self._history
|
|
185
|
+
|
|
186
|
+
@property
|
|
187
|
+
def epoch(self):return self._epoch
|
|
188
|
+
|
|
189
|
+
def trial(self,strain):
|
|
190
|
+
self._pending=None
|
|
191
|
+
data=_owned(strain,(6,));response=self.section.response(data,origin=self.history)
|
|
192
|
+
proposal=SectionProposal(object(),response);self._pending=(proposal,data,self.history)
|
|
193
|
+
return proposal
|
|
194
|
+
|
|
195
|
+
def discard(self,proposal):
|
|
196
|
+
if self._pending is None or self._pending[0] is not proposal:raise ValueError('foreign or stale section proposal')
|
|
197
|
+
self._pending=None
|
|
198
|
+
|
|
199
|
+
def commit(self,proposal):
|
|
200
|
+
if self._pending is None or self._pending[0] is not proposal:raise ValueError('foreign or stale section proposal')
|
|
201
|
+
_,data,origin=self._pending
|
|
202
|
+
self._pending=None
|
|
203
|
+
if canonical(origin)!=canonical(self.history):raise ValueError('section origin changed before commit')
|
|
204
|
+
response=self.section.response(data,origin=origin)
|
|
205
|
+
if canonical(proposal.response)!=canonical(response):raise ValueError('section proposal response mutated')
|
|
206
|
+
self._history=response.history;self._epoch+=1;self._accepted=(data,origin,response,self.epoch)
|
|
207
|
+
return self.history
|
|
208
|
+
|
|
209
|
+
def replay(self):
|
|
210
|
+
if self._accepted is None:raise ValueError('no accepted generalized section response')
|
|
211
|
+
data,origin,response,epoch=self._accepted
|
|
212
|
+
if self.epoch!=epoch or canonical(self.history)!=canonical(response.history):raise ValueError('accepted section state changed')
|
|
213
|
+
made=self.section.response(data,origin=origin)
|
|
214
|
+
if canonical(made)!=canonical(response):raise ValueError('accepted generalized response replay mismatch')
|
|
215
|
+
return made
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
"""Private static reduction with spatial couples per reference arclength.
|
|
2
|
+
|
|
3
|
+
The physical field is U_cell R0(s). Its spatial virtual rotation is the cell
|
|
4
|
+
rotation variation, so distributed couples act on the internal cell rotations.
|
|
5
|
+
They have no general SO(3) potential. No public element/state route is changed.
|
|
6
|
+
"""
|
|
7
|
+
from dataclasses import dataclass
|
|
8
|
+
from decimal import localcontext
|
|
9
|
+
from math import fsum
|
|
10
|
+
from time import monotonic
|
|
11
|
+
import numpy as np
|
|
12
|
+
from scipy import linalg
|
|
13
|
+
from ._ge_beam3_retained_generalized import RetainedGeneralizedOperator
|
|
14
|
+
from ._ge_beam3_generalized_cell import GeneralizedCellHistory
|
|
15
|
+
from ._ge_beam3_fibre_line_work import evaluate as line_work
|
|
16
|
+
from ._ge_beam3_p5.algebra import rotation, skew
|
|
17
|
+
from ._ge_beam3_p5.arrays import _array, _frames
|
|
18
|
+
from ._ge_beam3_p5.chart import exp_chart_terms
|
|
19
|
+
from ._ge_beam3_p5_seeded.core import sha
|
|
20
|
+
from ._native_reference_modal import _owned
|
|
21
|
+
from ._ge_beam3_effective_deadline import effective_deadline_seconds
|
|
22
|
+
|
|
23
|
+
POLICY = 'GE_BEAM3_GENERALIZED_REFERENCE_SPATIAL_DISTRIBUTED_COUPLE_STATIC_V1'
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
@dataclass(frozen=True)
|
|
27
|
+
class GeneralizedStaticTrial:
|
|
28
|
+
rotations: np.ndarray
|
|
29
|
+
resultants: np.ndarray
|
|
30
|
+
residual: np.ndarray
|
|
31
|
+
spatial_jacobian: np.ndarray
|
|
32
|
+
internal_lift: np.ndarray
|
|
33
|
+
full_residual: np.ndarray
|
|
34
|
+
conservative_residual: np.ndarray
|
|
35
|
+
conservative_hessian: np.ndarray
|
|
36
|
+
full_spatial_jacobian: np.ndarray
|
|
37
|
+
applied_couple: np.ndarray
|
|
38
|
+
history: GeneralizedCellHistory
|
|
39
|
+
conservative_part_value: float
|
|
40
|
+
internal_error: float
|
|
41
|
+
iterations: int
|
|
42
|
+
input_sha256: str
|
|
43
|
+
conservative_potential: bool = False
|
|
44
|
+
conservative_spectral_authority: bool = False
|
|
45
|
+
production_qualified: bool = False
|
|
46
|
+
dynamic_reduction_authorized: bool = False
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def cell_couple_load(operator, spatial_density):
|
|
50
|
+
if type(operator) is not RetainedGeneralizedOperator:
|
|
51
|
+
raise ValueError('exact generalized retained operator required')
|
|
52
|
+
operator.guard()
|
|
53
|
+
density = _array(spatial_density, (3,), 'spatial reference couple density')
|
|
54
|
+
result = np.zeros(42)
|
|
55
|
+
for cell in (0, 1):
|
|
56
|
+
measure = fsum(row[3] for row in operator.stations if row[0] == cell)
|
|
57
|
+
if not np.isfinite(measure) or measure <= 0.:
|
|
58
|
+
raise ValueError('positive distributed couple reference measure')
|
|
59
|
+
with np.errstate(over='ignore', invalid='ignore'):
|
|
60
|
+
result[18+3*cell:21+3*cell] = measure*density
|
|
61
|
+
with np.errstate(over='ignore', invalid='ignore'):
|
|
62
|
+
norm = float(np.linalg.norm(result))
|
|
63
|
+
if not np.isfinite(result).all() or not np.isfinite(norm):
|
|
64
|
+
raise ValueError('distributed couple load exceeds finite norm range')
|
|
65
|
+
operator.guard()
|
|
66
|
+
return _owned(result)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def spatial_jacobian(conservative_residual, conservative_hessian):
|
|
70
|
+
"""Derivative of Rc-G, where G is fixed in spatial residual components.
|
|
71
|
+
|
|
72
|
+
Rc is the conservative material-minus-dead-line-work residual, NOT Rc-G.
|
|
73
|
+
Hc is its Exp-chart Hessian. D G=0 for this reference spatial load policy.
|
|
74
|
+
"""
|
|
75
|
+
residual = _array(conservative_residual, (42,), 'conservative residual')
|
|
76
|
+
jacobian = _array(conservative_hessian, (42, 42), 'conservative Hessian')
|
|
77
|
+
for start in (3, 9, 15, 18, 21):
|
|
78
|
+
jacobian[start:start+3, start:start+3] -= .5*skew(residual[start:start+3])
|
|
79
|
+
return _owned(jacobian)
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def chart_pullback(force, jacobian, increments):
|
|
83
|
+
"""Pull back a general spatial condensed Jacobian, without symmetrizing."""
|
|
84
|
+
force = _array(force, (18,), 'condensed spatial force')
|
|
85
|
+
jacobian = _array(jacobian, (18, 18), 'condensed spatial Jacobian')
|
|
86
|
+
increments = _array(increments, (3, 3), 'nodal rotation chart increments')
|
|
87
|
+
chart = np.eye(18)
|
|
88
|
+
extra = np.zeros((18, 18))
|
|
89
|
+
for node, vector in enumerate(increments):
|
|
90
|
+
start = 6*node+3
|
|
91
|
+
a, da = exp_chart_terms(vector)
|
|
92
|
+
chart[start:start+3, start:start+3] = a
|
|
93
|
+
for k in range(3):
|
|
94
|
+
extra[start:start+3, start+k] = da[:, :, k].T@force[start:start+3]
|
|
95
|
+
result = chart.T@force
|
|
96
|
+
tangent = chart.T@jacobian@chart+extra
|
|
97
|
+
if not np.isfinite(result).all() or not np.isfinite(tangent).all():
|
|
98
|
+
raise ValueError('nonfinite distributed couple chart response')
|
|
99
|
+
return _owned(result), _owned(tangent), _owned(chart)
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def _interior_residual_secant(base, rejected, fraction):
|
|
103
|
+
"""Propose an interior residual-line minimizer; this is NOT acceptance.
|
|
104
|
+
|
|
105
|
+
Both residuals use the same frozen Newton inverse. Common normalization
|
|
106
|
+
avoids overflow in the dot products and leaves the minimizer unchanged.
|
|
107
|
+
There is no empirical damping floor or material-specific coefficient.
|
|
108
|
+
"""
|
|
109
|
+
base = np.asarray(base, dtype=float)
|
|
110
|
+
rejected = np.asarray(rejected, dtype=float)
|
|
111
|
+
if (base.shape != (24,) or rejected.shape != (24,)
|
|
112
|
+
or not np.isfinite(base).all() or not np.isfinite(rejected).all()
|
|
113
|
+
or not np.isfinite(fraction) or not 0. < fraction <= 1.):
|
|
114
|
+
raise ValueError('invalid distributed static secant input')
|
|
115
|
+
scale = max(float(np.max(np.abs(base))), float(np.max(np.abs(rejected))))
|
|
116
|
+
if scale == 0.:
|
|
117
|
+
raise ValueError('degenerate distributed static secant residual')
|
|
118
|
+
z = base/scale
|
|
119
|
+
difference = rejected/scale-z
|
|
120
|
+
denominator = float(difference@difference)
|
|
121
|
+
if denominator == 0.:
|
|
122
|
+
raise ValueError('degenerate distributed static secant direction')
|
|
123
|
+
interior = -float(z@difference)/denominator
|
|
124
|
+
proposed = float(fraction*interior)
|
|
125
|
+
if not np.isfinite(proposed) or not 0. < interior < 1. or not 0. < proposed < fraction:
|
|
126
|
+
raise ValueError('distributed static secant is not strictly interior')
|
|
127
|
+
return proposed
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
def solve_distributed_static(operator, positions, position_low, nodal_frames, *, origin,
|
|
131
|
+
initial_rotations, initial_resultants, spatial_line_force,
|
|
132
|
+
spatial_couple_density, check=None, max_iterations=24):
|
|
133
|
+
if type(operator) is not RetainedGeneralizedOperator or type(origin) is not GeneralizedCellHistory:
|
|
134
|
+
raise ValueError('exact retained operator and explicit accepted cell origin required')
|
|
135
|
+
if type(max_iterations) is not int or not 0 <= max_iterations <= 24:
|
|
136
|
+
raise ValueError('bounded distributed static internal iterations')
|
|
137
|
+
if check is not None and not callable(check):
|
|
138
|
+
raise ValueError('callable distributed static boundary check')
|
|
139
|
+
started = monotonic()
|
|
140
|
+
operator.guard()
|
|
141
|
+
with localcontext() as context:
|
|
142
|
+
context.prec = 80
|
|
143
|
+
operator.cell._origins(origin)
|
|
144
|
+
x = _array(positions, (3, 3), 'distributed static positions')
|
|
145
|
+
low = _array(position_low, (3, 3), 'distributed static low positions')
|
|
146
|
+
q = _frames(nodal_frames, 3, 'distributed static nodal frames')
|
|
147
|
+
u = _frames(initial_rotations, 2, 'distributed static seed rotations').copy()
|
|
148
|
+
p = _array(initial_resultants, (18,), 'distributed static seed resultants').copy()
|
|
149
|
+
load = _array(spatial_line_force, (3,), 'explicit spatial reference line force')
|
|
150
|
+
density = _array(spatial_couple_density, (3,), 'explicit spatial reference couple density')
|
|
151
|
+
applied = cell_couple_load(operator, density)
|
|
152
|
+
identity = sha(dict(policy=POLICY, operator=operator.identity, positions=x, position_low=low,
|
|
153
|
+
nodal_frames=q, origin=origin, line_force=load, couple_density=density,
|
|
154
|
+
applied_couple=applied, initial_rotations=u, initial_resultants=p))
|
|
155
|
+
length = float(np.linalg.norm(operator.reference.coordinates[-1]-operator.reference.coordinates[0]))
|
|
156
|
+
if not np.isfinite(length) or length <= 0.:
|
|
157
|
+
raise ValueError('positive distributed static characteristic length')
|
|
158
|
+
scale = np.r_[np.full(12, length), np.ones(12)]
|
|
159
|
+
|
|
160
|
+
def safe():
|
|
161
|
+
if check is not None:
|
|
162
|
+
check()
|
|
163
|
+
operator.guard()
|
|
164
|
+
if monotonic()-started > effective_deadline_seconds(60.):
|
|
165
|
+
raise RuntimeError('distributed static internal boundary deadline')
|
|
166
|
+
|
|
167
|
+
def evaluate(rotations, forces):
|
|
168
|
+
safe()
|
|
169
|
+
e = operator.evaluate(x, low, q, rotations, forces, origin=origin, check=safe)
|
|
170
|
+
rc = e.residual.copy()
|
|
171
|
+
h = e.hessian+e.hessian_low
|
|
172
|
+
value = e.potential
|
|
173
|
+
if np.any(load):
|
|
174
|
+
w = line_work(operator.reference, x, low, rotations, load, order=operator.order)
|
|
175
|
+
rc -= w.gradient
|
|
176
|
+
h = h-w.hessian
|
|
177
|
+
value -= w.value
|
|
178
|
+
net = rc-applied
|
|
179
|
+
error = float(np.linalg.norm(net[18:]/scale))
|
|
180
|
+
if not np.isfinite(error):
|
|
181
|
+
raise ValueError('nonfinite distributed static residual norm')
|
|
182
|
+
return e, rc, h, net, float(value), error
|
|
183
|
+
|
|
184
|
+
pending_secant = None
|
|
185
|
+
for iteration in range(max_iterations+1):
|
|
186
|
+
e, rc, h, net, value, error = evaluate(u, p)
|
|
187
|
+
if pending_secant is not None:
|
|
188
|
+
old_factor, old_norm = pending_secant
|
|
189
|
+
merit = float(np.linalg.norm(linalg.lu_solve(old_factor, net[18:], check_finite=True)))
|
|
190
|
+
if not np.isfinite(merit) or not (error <= 1e-11 or merit < old_norm):
|
|
191
|
+
raise ValueError('distributed static secant failed actual decrease')
|
|
192
|
+
pending_secant = None
|
|
193
|
+
jac = spatial_jacobian(rc, h)
|
|
194
|
+
if error <= 1e-11:
|
|
195
|
+
lift = -linalg.solve(jac[18:, 18:], jac[18:, :18], assume_a='gen', check_finite=True)
|
|
196
|
+
condensed = jac[:18, :18]+jac[:18, 18:]@lift
|
|
197
|
+
if not np.isfinite(condensed).all():
|
|
198
|
+
raise ValueError('nonfinite distributed static Schur response')
|
|
199
|
+
safe()
|
|
200
|
+
return GeneralizedStaticTrial(_owned(u), _owned(p), _owned(net[:18]), _owned(condensed),
|
|
201
|
+
_owned(lift), _owned(net), _owned(rc), _owned(h), _owned(jac), applied,
|
|
202
|
+
e.history, value, error, iteration, identity)
|
|
203
|
+
if iteration == max_iterations:
|
|
204
|
+
raise ValueError('distributed static internal equilibrium iteration limit')
|
|
205
|
+
factor = linalg.lu_factor(jac[18:, 18:], check_finite=True)
|
|
206
|
+
step = linalg.lu_solve(factor, -net[18:], check_finite=True)
|
|
207
|
+
norm = float(np.linalg.norm(step))
|
|
208
|
+
if not np.isfinite(step).all() or not np.isfinite(norm) or norm == 0.:
|
|
209
|
+
raise ValueError('invalid distributed static internal step')
|
|
210
|
+
angle = max(np.linalg.norm(step[:3]), np.linalg.norm(step[3:6]))
|
|
211
|
+
fraction = min(1., .45*np.pi/max(float(angle), np.finfo(float).tiny))
|
|
212
|
+
for cut in range(9):
|
|
213
|
+
safe()
|
|
214
|
+
delta = step*(fraction*.5**cut)
|
|
215
|
+
trial_u = np.array([rotation(delta[3*c:3*c+3])@u[c] for c in (0, 1)])
|
|
216
|
+
trial_p = p+delta[6:]
|
|
217
|
+
_, _, _, changed, _, metric = evaluate(trial_u, trial_p)
|
|
218
|
+
preconditioned = linalg.lu_solve(factor, changed[18:], check_finite=True)
|
|
219
|
+
merit = float(np.linalg.norm(preconditioned))
|
|
220
|
+
if not np.isfinite(merit):
|
|
221
|
+
raise ValueError('nonfinite distributed static internal merit')
|
|
222
|
+
if metric <= 1e-11 or merit < norm:
|
|
223
|
+
u, p = trial_u, trial_p
|
|
224
|
+
break
|
|
225
|
+
else:
|
|
226
|
+
# The next outer evaluation is already in the existing budget.
|
|
227
|
+
# Keep this proposal private until its actual decrease is checked.
|
|
228
|
+
fraction = _interior_residual_secant(-step, preconditioned, fraction*.5**8)
|
|
229
|
+
delta = step*fraction
|
|
230
|
+
u = np.array([rotation(delta[3*c:3*c+3])@u[c] for c in (0, 1)])
|
|
231
|
+
p = p+delta[6:]
|
|
232
|
+
pending_secant = (factor, norm)
|
|
233
|
+
raise AssertionError('unreachable distributed static state')
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"""Private retained-cell kinetic factor at rest, without a dense mass root.
|
|
2
|
+
|
|
3
|
+
The spatial velocity is I*v - skew(U*lift)*omega, with body components
|
|
4
|
+
in U*R0. These are the preserved lifted-inertia equations; nodal rotation
|
|
5
|
+
traces have exactly zero inertia. No cell condensation or mass floor.
|
|
6
|
+
"""
|
|
7
|
+
import numpy as np
|
|
8
|
+
from ._ge_beam3_p5.arrays import _frames
|
|
9
|
+
from ._ge_beam3_p5.algebra import skew
|
|
10
|
+
from ._ge_beam3_p5_centered.mass import _CenteredRestInertia
|
|
11
|
+
from ._native_reference_modal import _owned
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def current_lifted_kinetic_factor(reference, section_inertia, rotations, *, order):
|
|
15
|
+
cells = _frames(rotations, 2, 'current cell rotations')
|
|
16
|
+
source = _CenteredRestInertia(reference, section_inertia, order=order)
|
|
17
|
+
root = np.linalg.cholesky(source.section_mass).T
|
|
18
|
+
rows = []
|
|
19
|
+
for cell, left, right, t, frame, offset, measure in source._stations:
|
|
20
|
+
q = cells[cell]@frame; lift = cells[cell]@offset
|
|
21
|
+
velocity = np.zeros((6, 24)); slot = slice(18+3*cell, 21+3*cell)
|
|
22
|
+
velocity[:3, 6*left:6*left+3] = (1-t)*np.eye(3)
|
|
23
|
+
velocity[:3, 6*right:6*right+3] = t*np.eye(3)
|
|
24
|
+
velocity[:3, slot] = -skew(lift); velocity[3:, slot] = np.eye(3)
|
|
25
|
+
rows.append(np.sqrt(measure)*root@np.kron(np.eye(2), q).T@velocity)
|
|
26
|
+
return _owned(np.vstack(rows))
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"""Private at-rest spectra of accepted conservative reference-line-load states.
|
|
2
|
+
|
|
3
|
+
Retain the external potential Hessian -lambda W'' of the lifted physical line.
|
|
4
|
+
The accepted load and plastic coordinates are fixed during elastic perturbation.
|
|
5
|
+
No finite-velocity dynamics, follower moments, nonlinear continuation, checkpoint
|
|
6
|
+
conversion or buckling load-factor qualification is provided by this module.
|
|
7
|
+
"""
|
|
8
|
+
from dataclasses import dataclass
|
|
9
|
+
from hashlib import sha256
|
|
10
|
+
from time import monotonic
|
|
11
|
+
import json
|
|
12
|
+
import numpy as np
|
|
13
|
+
from scipy.linalg import block_diag
|
|
14
|
+
|
|
15
|
+
from ._ge_beam3_fibre_line_program import Context
|
|
16
|
+
from ._ge_beam3_fibre_line_work import ReferenceLineForces, evaluate as line_work
|
|
17
|
+
from ._ge_beam3_retained_fibre_modes import (
|
|
18
|
+
FROZEN, ALGORITHMIC, Packet as FibrePacket, Analysis as FibreAnalysis, compliance_factor,
|
|
19
|
+
)
|
|
20
|
+
from ._ge_beam3_lifted_kinetic_factor import current_lifted_kinetic_factor
|
|
21
|
+
from ._native_exact_shift_chain_modes import solve_factor_chain_modes
|
|
22
|
+
from ._native_reference_modal import _owned
|
|
23
|
+
from ._ge_beam3_p5_seeded.core import sha
|
|
24
|
+
from .control import cancellation_safe_point
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
SCHEMA='GE_BEAM3_CONSERVATIVE_LINE_FIBRE_FIXED_LOAD_SPECTRA_V1'
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@dataclass(frozen=True)
|
|
31
|
+
class Packet(FibrePacket):
|
|
32
|
+
external_potential_hessian: np.ndarray | None = None
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def prepare(model,program,checkpoint,section_inertias,*,line_forces,material_policy,
|
|
36
|
+
expected_checkpoint_sha256=None,cancellation_token=None,coordinate_limit=80,max_coordinates=256):
|
|
37
|
+
if type(line_forces) is not ReferenceLineForces: raise ValueError('explicit conservative reference line-force pattern')
|
|
38
|
+
if type(coordinate_limit) is not int or coordinate_limit not in (80,128,256):
|
|
39
|
+
raise ValueError('explicit admitted spectral coordinate limit')
|
|
40
|
+
if type(max_coordinates) is not int or max_coordinates not in (256,512):
|
|
41
|
+
raise ValueError('explicit admitted retained coordinate limit')
|
|
42
|
+
if material_policy not in (FROZEN,ALGORITHMIC): raise ValueError('explicit spectral material policy')
|
|
43
|
+
started=monotonic()
|
|
44
|
+
def local_check():
|
|
45
|
+
cancellation_safe_point(cancellation_token,'line-fibre-modes.construct')
|
|
46
|
+
if monotonic()-started>120.: raise TimeoutError('line-fibre spectral construction deadline')
|
|
47
|
+
local_check()
|
|
48
|
+
if type(checkpoint) is not bytes: raise ValueError('immutable canonical line-force checkpoint')
|
|
49
|
+
context=Context(model,program,line_forces=line_forces,check=local_check,max_coordinates=max_coordinates)
|
|
50
|
+
state,_=context.restore(checkpoint,expected_sha256=expected_checkpoint_sha256)
|
|
51
|
+
parameter=0. if state.completed_targets==0 else program.targets[state.completed_targets-1]
|
|
52
|
+
def guard():
|
|
53
|
+
local_check(); context.guard()
|
|
54
|
+
layout=context.layout; n=layout.nodal_count+6*len(context.probes)
|
|
55
|
+
if n>coordinate_limit: raise ValueError('bounded standalone line-load spectrum required')
|
|
56
|
+
if (type(section_inertias) is not dict or any(type(i) is not int for i in section_inertias)
|
|
57
|
+
or set(section_inertias)!={i for i,_ in layout.elements}):
|
|
58
|
+
raise ValueError('one explicit section inertia per element')
|
|
59
|
+
inertias={i:_owned(v) for i,v in section_inertias.items()}
|
|
60
|
+
forces={row[0]:row[1:] for row in line_forces.rows}
|
|
61
|
+
g=np.zeros((n,n)); external=np.zeros((n,n)); lefts=[]; rights=[]; kinetics=[]
|
|
62
|
+
mechanical=state.mechanical
|
|
63
|
+
for index,((eid,element),probe) in enumerate(zip(layout.elements,context.probes)):
|
|
64
|
+
guard(); nodes=layout.nodes[index]
|
|
65
|
+
response=probe.evaluate(mechanical.positions[nodes],mechanical.position_low[nodes],
|
|
66
|
+
mechanical.nodal_frames[nodes],mechanical.cell_rotations[index],mechanical.resultants[index],
|
|
67
|
+
origin=state.origins[index],check=local_check)
|
|
68
|
+
left=compliance_factor(probe,json.loads(response.material),state.origins[index],state.histories[index],
|
|
69
|
+
mechanical.resultants[index],policy=material_policy,check=local_check)
|
|
70
|
+
slots=list(element.get_dof_mapping(model.mesh))+list(range(layout.nodal_count+6*index,layout.nodal_count+6*index+6))
|
|
71
|
+
j=response.hessian[24:,:24]; right=np.zeros((36,n)); right[:,slots]=np.vstack((j,j))
|
|
72
|
+
g[np.ix_(slots,slots)]+=response.hessian[:24,:24]
|
|
73
|
+
if eid in forces:
|
|
74
|
+
work=line_work(probe.reference,mechanical.positions[nodes],mechanical.position_low[nodes],
|
|
75
|
+
mechanical.cell_rotations[index],forces[eid],order=probe.order)
|
|
76
|
+
external[np.ix_(slots,slots)]-=parameter*work.hessian[:24,:24]
|
|
77
|
+
local=current_lifted_kinetic_factor(probe.reference,inertias[eid],mechanical.cell_rotations[index],order=probe.order)
|
|
78
|
+
kinetic=np.zeros((len(local),n)); kinetic[:,slots]=local
|
|
79
|
+
lefts.append(left); rights.append(right); kinetics.append(kinetic)
|
|
80
|
+
g+=external
|
|
81
|
+
nodal_free=tuple(i for i in range(layout.nodal_count) if i not in layout.fixed)
|
|
82
|
+
free=nodal_free+tuple(range(layout.nodal_count,n)); algebraic=tuple(i for i in nodal_free if i%6>=3)
|
|
83
|
+
left,right,kinetic=block_diag(*lefts),np.vstack(rights),np.vstack(kinetics)
|
|
84
|
+
if np.any(kinetic[:,algebraic]): raise ValueError('nodal rotation traces must have zero inertia')
|
|
85
|
+
if not np.isfinite(g).all() or not np.isfinite(external).all(): raise ValueError('finite total potential Hessian')
|
|
86
|
+
identity=sha(dict(schema=SCHEMA,equilibrium_load_parameter=parameter,line_forces=line_forces.descriptor(),
|
|
87
|
+
perturbation_load_policy='FIXED_ACCEPTED_REFERENCE_ARCLENGTH_SPATIAL_DEAD_FORCE',
|
|
88
|
+
checkpoint_sha256=sha256(checkpoint).hexdigest(),material_policy=material_policy,
|
|
89
|
+
operators=[p.identity for p in context.probes],left=left,right=right,geometric=g,
|
|
90
|
+
external_potential_hessian=external,kinetic=kinetic,free=free,algebraic=algebraic,inertias=inertias,
|
|
91
|
+
spectral_coordinate_limit=coordinate_limit,retained_coordinate_limit=max_coordinates))
|
|
92
|
+
guard()
|
|
93
|
+
return Packet(_owned(left),_owned(right),_owned(g),_owned(kinetic),free,algebraic,identity,material_policy,
|
|
94
|
+
external_potential_hessian=_owned(external)),guard,parameter
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
@dataclass(frozen=True)
|
|
98
|
+
class Analysis(FibreAnalysis):
|
|
99
|
+
equilibrium_load_parameter: float = 0.
|
|
100
|
+
perturbation_load_policy: str = 'FIXED_ACCEPTED_REFERENCE_ARCLENGTH_SPATIAL_DEAD_FORCE'
|
|
101
|
+
external_potential_hessian_included: bool = True
|
|
102
|
+
checkpoint_converted: bool = False
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
def solve_modes(model,program,checkpoint,section_inertias,*,line_forces,material_policy,bounds,
|
|
106
|
+
num_modes=6,root_width=1e-10,expected_checkpoint_sha256=None,cancellation_token=None,
|
|
107
|
+
coordinate_limit=80,exact_dimension_limit=64,max_coordinates=256):
|
|
108
|
+
if type(exact_dimension_limit) is not int or exact_dimension_limit not in (64,96,160):
|
|
109
|
+
raise ValueError('explicit admitted exact-inertia dimension limit')
|
|
110
|
+
packet,guard,parameter=prepare(model,program,checkpoint,section_inertias,line_forces=line_forces,
|
|
111
|
+
material_policy=material_policy,expected_checkpoint_sha256=expected_checkpoint_sha256,
|
|
112
|
+
cancellation_token=cancellation_token,coordinate_limit=coordinate_limit,max_coordinates=max_coordinates)
|
|
113
|
+
modes=solve_factor_chain_modes(packet.left,packet.right,packet.geometric,packet.kinetic,
|
|
114
|
+
packet.free,packet.algebraic,bounds=bounds,num_modes=num_modes,root_width=root_width,
|
|
115
|
+
cancellation_token=cancellation_token,exact_dimension_limit=exact_dimension_limit)
|
|
116
|
+
guard()
|
|
117
|
+
interpretation=('ELASTIC_PERTURBATIONS_WITH_PLASTIC_COORDINATES_FIXED' if material_policy==FROZEN else
|
|
118
|
+
'LAST_INCREMENT_OPERATOR_ONLY_NOT_PHYSICAL_VIBRATION_AUTHORITY')
|
|
119
|
+
return packet,Analysis(material_policy,interpretation,modes.eigenvalues,modes.full_modes,modes.numerical_brackets,
|
|
120
|
+
modes.spectral_residual,modes.original_ritz_residual,modes.full_backward_residual,packet.identity,
|
|
121
|
+
sha256(checkpoint).hexdigest(),equilibrium_load_parameter=parameter)
|