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.
Files changed (751) hide show
  1. anyfesolver/__init__.py +1075 -0
  2. anyfesolver/_b2_attachment_elimination_dev.py +261 -0
  3. anyfesolver/_b2_f10_f11_point_attachment.py +163 -0
  4. anyfesolver/_b2_loaded_point_trace_dev.py +173 -0
  5. anyfesolver/_b2_physical_flexibility_linear.py +707 -0
  6. anyfesolver/_b2_physical_linear_batch_dev.py +491 -0
  7. anyfesolver/_b2_physical_linear_definition.py +415 -0
  8. anyfesolver/_b2_physical_load_bubbles.py +282 -0
  9. anyfesolver/_compensated_contractions.py +497 -0
  10. anyfesolver/_compensated_native.py +437 -0
  11. anyfesolver/_corotational_batch.py +219 -0
  12. anyfesolver/_director_trace.py +214 -0
  13. anyfesolver/_dyadic_bilinear.py +76 -0
  14. anyfesolver/_dyadic_factor_chain.py +25 -0
  15. anyfesolver/_ge_beam3_adaptive_arc_program.py +286 -0
  16. anyfesolver/_ge_beam3_analysis_combined.py +102 -0
  17. anyfesolver/_ge_beam3_analysis_fibre_translation.py +130 -0
  18. anyfesolver/_ge_beam3_analysis_modal_snapshot.py +27 -0
  19. anyfesolver/_ge_beam3_analysis_nodal_program.py +140 -0
  20. anyfesolver/_ge_beam3_analysis_translation.py +147 -0
  21. anyfesolver/_ge_beam3_analysis_translation_modal.py +84 -0
  22. anyfesolver/_ge_beam3_arc_geometry.py +89 -0
  23. anyfesolver/_ge_beam3_arc_program.py +304 -0
  24. anyfesolver/_ge_beam3_authoritative_cell_seed.py +25 -0
  25. anyfesolver/_ge_beam3_cell_identity.py +52 -0
  26. anyfesolver/_ge_beam3_centered_batched_finite_inertia.py +132 -0
  27. anyfesolver/_ge_beam3_centered_finite_inertia.py +171 -0
  28. anyfesolver/_ge_beam3_centered_mixed.py +104 -0
  29. anyfesolver/_ge_beam3_centered_reference.py +187 -0
  30. anyfesolver/_ge_beam3_centered_so3_strain.py +76 -0
  31. anyfesolver/_ge_beam3_complementary_section.py +122 -0
  32. anyfesolver/_ge_beam3_compliance_snapshot_guard.py +20 -0
  33. anyfesolver/_ge_beam3_connected_dynamic.py +486 -0
  34. anyfesolver/_ge_beam3_connected_trajectory.py +258 -0
  35. anyfesolver/_ge_beam3_conservative_backtrack.py +26 -0
  36. anyfesolver/_ge_beam3_controlled_fibre_modes.py +105 -0
  37. anyfesolver/_ge_beam3_coupled_beam_subdomain.py +128 -0
  38. anyfesolver/_ge_beam3_coupled_modes.py +256 -0
  39. anyfesolver/_ge_beam3_deterministic_reduction.py +264 -0
  40. anyfesolver/_ge_beam3_displacement_program.py +255 -0
  41. anyfesolver/_ge_beam3_durable_coupled.py +251 -0
  42. anyfesolver/_ge_beam3_dynamic_elastic_state.py +461 -0
  43. anyfesolver/_ge_beam3_effective_deadline.py +58 -0
  44. anyfesolver/_ge_beam3_elastic_seed_continuation.py +223 -0
  45. anyfesolver/_ge_beam3_elastic_seed_modal.py +139 -0
  46. anyfesolver/_ge_beam3_equilibrium_line_program.py +98 -0
  47. anyfesolver/_ge_beam3_equilibrium_schur_solver.py +96 -0
  48. anyfesolver/_ge_beam3_factor_chain_modes.py +103 -0
  49. anyfesolver/_ge_beam3_fibre_cell.py +408 -0
  50. anyfesolver/_ge_beam3_fibre_distributed_couples.py +191 -0
  51. anyfesolver/_ge_beam3_fibre_kinematic_cell.py +75 -0
  52. anyfesolver/_ge_beam3_fibre_line_program.py +157 -0
  53. anyfesolver/_ge_beam3_fibre_line_work.py +87 -0
  54. anyfesolver/_ge_beam3_fibre_reference_modal.py +104 -0
  55. anyfesolver/_ge_beam3_fibre_schur_solver.py +134 -0
  56. anyfesolver/_ge_beam3_fibre_section.py +286 -0
  57. anyfesolver/_ge_beam3_fibre_static_boundary.py +113 -0
  58. anyfesolver/_ge_beam3_g1_analysis.py +307 -0
  59. anyfesolver/_ge_beam3_g1_elastic.py +161 -0
  60. anyfesolver/_ge_beam3_g1_element.py +185 -0
  61. anyfesolver/_ge_beam3_g1_operator.py +137 -0
  62. anyfesolver/_ge_beam3_g2_analysis.py +176 -0
  63. anyfesolver/_ge_beam3_g2_constraints.py +162 -0
  64. anyfesolver/_ge_beam3_g3_analysis.py +385 -0
  65. anyfesolver/_ge_beam3_g3_constraints.py +168 -0
  66. anyfesolver/_ge_beam3_g3b_owner.py +296 -0
  67. anyfesolver/_ge_beam3_g3b_q4_reference.py +186 -0
  68. anyfesolver/_ge_beam3_g3b_reference.py +206 -0
  69. anyfesolver/_ge_beam3_g3b_result_schema.py +107 -0
  70. anyfesolver/_ge_beam3_g3b_s3_reference.py +185 -0
  71. anyfesolver/_ge_beam3_g3b_weighted_reference.py +193 -0
  72. anyfesolver/_ge_beam3_g3c_affine_q4_chart.py +58 -0
  73. anyfesolver/_ge_beam3_g3c_affine_q4_increment_chart.py +257 -0
  74. anyfesolver/_ge_beam3_g3c_affine_q4_recovery.py +434 -0
  75. anyfesolver/_ge_beam3_g3c_affine_q4_registry.py +127 -0
  76. anyfesolver/_ge_beam3_g3c_b2_physical.py +153 -0
  77. anyfesolver/_ge_beam3_g3c_b2_physical_adapter.py +160 -0
  78. anyfesolver/_ge_beam3_g3c_definition.py +117 -0
  79. anyfesolver/_ge_beam3_g3c_local_beam.py +188 -0
  80. anyfesolver/_ge_beam3_g3c_local_shell.py +371 -0
  81. anyfesolver/_ge_beam3_g3c_owner.py +400 -0
  82. anyfesolver/_ge_beam3_g3c_physical_authority.py +203 -0
  83. anyfesolver/_ge_beam3_g3c_physical_owner.py +556 -0
  84. anyfesolver/_ge_beam3_g3c_recovery.py +91 -0
  85. anyfesolver/_ge_beam3_g3c_so3_numerics.py +81 -0
  86. anyfesolver/_ge_beam3_g3c_stable/__init__.py +1 -0
  87. anyfesolver/_ge_beam3_g3c_stable/authority.py +152 -0
  88. anyfesolver/_ge_beam3_g3c_stable/beam.py +196 -0
  89. anyfesolver/_ge_beam3_g3c_stable/boundary.py +38 -0
  90. anyfesolver/_ge_beam3_g3c_stable/chart.py +23 -0
  91. anyfesolver/_ge_beam3_g3c_stable/compensated.py +46 -0
  92. anyfesolver/_ge_beam3_g3c_stable/element.py +190 -0
  93. anyfesolver/_ge_beam3_g3c_stable/fit.py +54 -0
  94. anyfesolver/_ge_beam3_g3c_stable/joint.py +255 -0
  95. anyfesolver/_ge_beam3_g3c_stable/line_work.py +92 -0
  96. anyfesolver/_ge_beam3_g3c_stable/operator.py +147 -0
  97. anyfesolver/_ge_beam3_g3c_stable/owner.py +415 -0
  98. anyfesolver/_ge_beam3_g3c_stable/shell.py +358 -0
  99. anyfesolver/_ge_beam3_g4_completion.py +186 -0
  100. anyfesolver/_ge_beam3_g4a_station_transaction.py +385 -0
  101. anyfesolver/_ge_beam3_g5_completion.py +68 -0
  102. anyfesolver/_ge_beam3_g6_domain.py +354 -0
  103. anyfesolver/_ge_beam3_generalized_cell.py +172 -0
  104. anyfesolver/_ge_beam3_generalized_ellipsoid_section.py +215 -0
  105. anyfesolver/_ge_beam3_generalized_static_boundary.py +233 -0
  106. anyfesolver/_ge_beam3_lifted_kinetic_factor.py +26 -0
  107. anyfesolver/_ge_beam3_line_fibre_modes.py +121 -0
  108. anyfesolver/_ge_beam3_load_program.py +275 -0
  109. anyfesolver/_ge_beam3_loaded_modal.py +225 -0
  110. anyfesolver/_ge_beam3_mixed_ad.py +286 -0
  111. anyfesolver/_ge_beam3_native_analysis.py +484 -0
  112. anyfesolver/_ge_beam3_native_arc.py +269 -0
  113. anyfesolver/_ge_beam3_native_arc_adaptive.py +251 -0
  114. anyfesolver/_ge_beam3_native_arc_restart.py +88 -0
  115. anyfesolver/_ge_beam3_native_arc_source.py +62 -0
  116. anyfesolver/_ge_beam3_native_buckling.py +206 -0
  117. anyfesolver/_ge_beam3_native_combined_couples.py +179 -0
  118. anyfesolver/_ge_beam3_native_combined_restart.py +205 -0
  119. anyfesolver/_ge_beam3_native_definition.py +238 -0
  120. anyfesolver/_ge_beam3_native_distributed_element.py +220 -0
  121. anyfesolver/_ge_beam3_native_distributed_loading.py +92 -0
  122. anyfesolver/_ge_beam3_native_distributed_program.py +165 -0
  123. anyfesolver/_ge_beam3_native_distributed_recovery.py +34 -0
  124. anyfesolver/_ge_beam3_native_distributed_restart.py +221 -0
  125. anyfesolver/_ge_beam3_native_dynamic_analysis.py +149 -0
  126. anyfesolver/_ge_beam3_native_dynamic_restart.py +261 -0
  127. anyfesolver/_ge_beam3_native_fibre_current_modal.py +104 -0
  128. anyfesolver/_ge_beam3_native_fibre_recovery.py +34 -0
  129. anyfesolver/_ge_beam3_native_fibre_restart.py +211 -0
  130. anyfesolver/_ge_beam3_native_fibre_static_element.py +193 -0
  131. anyfesolver/_ge_beam3_native_force_adaptation.py +56 -0
  132. anyfesolver/_ge_beam3_native_generalized_combined_couples.py +188 -0
  133. anyfesolver/_ge_beam3_native_generalized_combined_restart.py +207 -0
  134. anyfesolver/_ge_beam3_native_generalized_element.py +222 -0
  135. anyfesolver/_ge_beam3_native_generalized_factor_modal.py +122 -0
  136. anyfesolver/_ge_beam3_native_generalized_loading.py +92 -0
  137. anyfesolver/_ge_beam3_native_generalized_modal.py +274 -0
  138. anyfesolver/_ge_beam3_native_generalized_paired_modal.py +13 -0
  139. anyfesolver/_ge_beam3_native_generalized_parameter.py +89 -0
  140. anyfesolver/_ge_beam3_native_generalized_program.py +196 -0
  141. anyfesolver/_ge_beam3_native_generalized_recovery.py +34 -0
  142. anyfesolver/_ge_beam3_native_generalized_restart.py +243 -0
  143. anyfesolver/_ge_beam3_native_history_profile.py +53 -0
  144. anyfesolver/_ge_beam3_native_line_loading.py +93 -0
  145. anyfesolver/_ge_beam3_native_line_program.py +150 -0
  146. anyfesolver/_ge_beam3_native_line_recovery.py +34 -0
  147. anyfesolver/_ge_beam3_native_line_restart.py +197 -0
  148. anyfesolver/_ge_beam3_native_line_static_element.py +220 -0
  149. anyfesolver/_ge_beam3_native_load_admission.py +37 -0
  150. anyfesolver/_ge_beam3_native_midpoint.py +1004 -0
  151. anyfesolver/_ge_beam3_native_multi_shell_contact.py +539 -0
  152. anyfesolver/_ge_beam3_native_pair_contact.py +236 -0
  153. anyfesolver/_ge_beam3_native_shell_contact.py +357 -0
  154. anyfesolver/_ge_beam3_native_spatial_couples.py +176 -0
  155. anyfesolver/_ge_beam3_native_spatial_restart.py +204 -0
  156. anyfesolver/_ge_beam3_native_transient.py +467 -0
  157. anyfesolver/_ge_beam3_native_translation.py +225 -0
  158. anyfesolver/_ge_beam3_native_translation_restart.py +54 -0
  159. anyfesolver/_ge_beam3_operator_validation_scope.py +53 -0
  160. anyfesolver/_ge_beam3_p5/__init__.py +11 -0
  161. anyfesolver/_ge_beam3_p5/algebra.py +91 -0
  162. anyfesolver/_ge_beam3_p5/arrays.py +29 -0
  163. anyfesolver/_ge_beam3_p5/chart.py +45 -0
  164. anyfesolver/_ge_beam3_p5/codec.py +82 -0
  165. anyfesolver/_ge_beam3_p5/committed_modal.py +191 -0
  166. anyfesolver/_ge_beam3_p5/compensated.py +118 -0
  167. anyfesolver/_ge_beam3_p5/compensated_coordinates.py +44 -0
  168. anyfesolver/_ge_beam3_p5/core.py +159 -0
  169. anyfesolver/_ge_beam3_p5/element.py +207 -0
  170. anyfesolver/_ge_beam3_p5/factors.py +61 -0
  171. anyfesolver/_ge_beam3_p5/inertia.py +120 -0
  172. anyfesolver/_ge_beam3_p5/mass.py +70 -0
  173. anyfesolver/_ge_beam3_p5/mixed.py +256 -0
  174. anyfesolver/_ge_beam3_p5/reference_modal.py +73 -0
  175. anyfesolver/_ge_beam3_p5/section.py +139 -0
  176. anyfesolver/_ge_beam3_p5/typed_schema.py +111 -0
  177. anyfesolver/_ge_beam3_p5_centered/__init__.py +6 -0
  178. anyfesolver/_ge_beam3_p5_centered/codec.py +84 -0
  179. anyfesolver/_ge_beam3_p5_centered/committed_modal.py +192 -0
  180. anyfesolver/_ge_beam3_p5_centered/core.py +171 -0
  181. anyfesolver/_ge_beam3_p5_centered/element.py +216 -0
  182. anyfesolver/_ge_beam3_p5_centered/mass.py +99 -0
  183. anyfesolver/_ge_beam3_p5_centered/positions.py +34 -0
  184. anyfesolver/_ge_beam3_p5_centered/reference_modal.py +73 -0
  185. anyfesolver/_ge_beam3_p5_coordinates/__init__.py +6 -0
  186. anyfesolver/_ge_beam3_p5_coordinates/codec.py +84 -0
  187. anyfesolver/_ge_beam3_p5_coordinates/committed_modal.py +192 -0
  188. anyfesolver/_ge_beam3_p5_coordinates/core.py +163 -0
  189. anyfesolver/_ge_beam3_p5_coordinates/element.py +213 -0
  190. anyfesolver/_ge_beam3_p5_coordinates/positions.py +102 -0
  191. anyfesolver/_ge_beam3_p5_coordinates/reference_modal.py +73 -0
  192. anyfesolver/_ge_beam3_p5_loads/__init__.py +7 -0
  193. anyfesolver/_ge_beam3_p5_loads/codec.py +85 -0
  194. anyfesolver/_ge_beam3_p5_loads/core.py +192 -0
  195. anyfesolver/_ge_beam3_p5_loads/element.py +243 -0
  196. anyfesolver/_ge_beam3_p5_loads/state.py +120 -0
  197. anyfesolver/_ge_beam3_p5_loads/work.py +45 -0
  198. anyfesolver/_ge_beam3_p5_seeded/__init__.py +9 -0
  199. anyfesolver/_ge_beam3_p5_seeded/codec.py +87 -0
  200. anyfesolver/_ge_beam3_p5_seeded/core.py +197 -0
  201. anyfesolver/_ge_beam3_p5_seeded/element.py +245 -0
  202. anyfesolver/_ge_beam3_p5_seeded/state.py +122 -0
  203. anyfesolver/_ge_beam3_p5_seeded/work.py +47 -0
  204. anyfesolver/_ge_beam3_pose_joint.py +268 -0
  205. anyfesolver/_ge_beam3_precise_geometric_work.py +147 -0
  206. anyfesolver/_ge_beam3_reassembled_signed_modes.py +101 -0
  207. anyfesolver/_ge_beam3_reference_identity.py +92 -0
  208. anyfesolver/_ge_beam3_refined_fibre_schur_solver.py +104 -0
  209. anyfesolver/_ge_beam3_refinement_capacity.py +19 -0
  210. anyfesolver/_ge_beam3_relative_virgin_reference_modes.py +60 -0
  211. anyfesolver/_ge_beam3_retained_arc.py +350 -0
  212. anyfesolver/_ge_beam3_retained_arc_geometry.py +66 -0
  213. anyfesolver/_ge_beam3_retained_arc_modal.py +125 -0
  214. anyfesolver/_ge_beam3_retained_elastic.py +134 -0
  215. anyfesolver/_ge_beam3_retained_fibre.py +209 -0
  216. anyfesolver/_ge_beam3_retained_fibre_control.py +270 -0
  217. anyfesolver/_ge_beam3_retained_fibre_element.py +58 -0
  218. anyfesolver/_ge_beam3_retained_fibre_modal.py +155 -0
  219. anyfesolver/_ge_beam3_retained_fibre_modes.py +189 -0
  220. anyfesolver/_ge_beam3_retained_fibre_program.py +68 -0
  221. anyfesolver/_ge_beam3_retained_fibre_state.py +268 -0
  222. anyfesolver/_ge_beam3_retained_force_program.py +72 -0
  223. anyfesolver/_ge_beam3_retained_generalized.py +186 -0
  224. anyfesolver/_ge_beam3_retained_generalized_modal.py +171 -0
  225. anyfesolver/_ge_beam3_retained_generalized_program.py +63 -0
  226. anyfesolver/_ge_beam3_retained_generalized_state.py +281 -0
  227. anyfesolver/_ge_beam3_retained_nodal_loading.py +111 -0
  228. anyfesolver/_ge_beam3_retained_plastic.py +116 -0
  229. anyfesolver/_ge_beam3_retained_plastic_modes.py +144 -0
  230. anyfesolver/_ge_beam3_retained_plastic_program.py +69 -0
  231. anyfesolver/_ge_beam3_retained_plastic_state.py +165 -0
  232. anyfesolver/_ge_beam3_retained_state.py +194 -0
  233. anyfesolver/_ge_beam3_retained_translation_control.py +345 -0
  234. anyfesolver/_ge_beam3_retained_translation_modal.py +137 -0
  235. anyfesolver/_ge_beam3_schur_line_program.py +98 -0
  236. anyfesolver/_ge_beam3_seeded_fibre_control.py +175 -0
  237. anyfesolver/_ge_beam3_seeded_load_program.py +301 -0
  238. anyfesolver/_ge_beam3_seeded_loaded_modal.py +226 -0
  239. anyfesolver/_ge_beam3_seeded_signed_modes.py +150 -0
  240. anyfesolver/_ge_beam3_shared_kinematic_split.py +53 -0
  241. anyfesolver/_ge_beam3_shell_joint_state.py +396 -0
  242. anyfesolver/_ge_beam3_shell_joint_trial.py +217 -0
  243. anyfesolver/_ge_beam3_signed_loaded_modes.py +140 -0
  244. anyfesolver/_ge_beam3_spatial_fibre_program.py +113 -0
  245. anyfesolver/_ge_beam3_spatial_nodal_moments.py +38 -0
  246. anyfesolver/_ge_beam3_station_resultant_cell.py +235 -0
  247. anyfesolver/_ge_beam3_variational_shell.py +211 -0
  248. anyfesolver/_ge_beam3_virgin_reference_modes.py +60 -0
  249. anyfesolver/_impact_coupling.py +162 -0
  250. anyfesolver/_native_authority_dag.py +77 -0
  251. anyfesolver/_native_dyadic_interval_inertia.py +64 -0
  252. anyfesolver/_native_exact_shift_chain_modes.py +140 -0
  253. anyfesolver/_native_exact_shift_inertia.py +86 -0
  254. anyfesolver/_native_factor_chain_modes.py +192 -0
  255. anyfesolver/_native_guard.cpp +828 -0
  256. anyfesolver/_native_guard_dispatch.py +140 -0
  257. anyfesolver/_native_large_factor_chain.py +55 -0
  258. anyfesolver/_native_material_protocol.py +51 -0
  259. anyfesolver/_native_midpoint_controller.py +90 -0
  260. anyfesolver/_native_modal_capacity.py +26 -0
  261. anyfesolver/_native_paired_factor_chain_modes.py +244 -0
  262. anyfesolver/_native_reassembled_factor_modes.py +185 -0
  263. anyfesolver/_native_reference_factor_spectrum.py +102 -0
  264. anyfesolver/_native_reference_modal.py +180 -0
  265. anyfesolver/_native_relative_factor_chain_modes.py +204 -0
  266. anyfesolver/_native_relative_reference_factor_spectrum.py +110 -0
  267. anyfesolver/_native_retained_step.py +15 -0
  268. anyfesolver/_native_rotation_state.py +797 -0
  269. anyfesolver/_native_signed_factor_modes.py +257 -0
  270. anyfesolver/_native_signed_kinetic_factor_modes.py +279 -0
  271. anyfesolver/_native_stationary_spectrum.py +79 -0
  272. anyfesolver/_nonlinear_events.py +150 -0
  273. anyfesolver/_nonlinear_seed.py +80 -0
  274. anyfesolver/_paired_modal_arithmetic.py +71 -0
  275. anyfesolver/_plate_stability_continuation.py +171 -0
  276. anyfesolver/_q4_assumed_strain_plasticity.py +502 -0
  277. anyfesolver/_qualified_authority_epoch.py +561 -0
  278. anyfesolver/_relative_reference_svd.py +44 -0
  279. anyfesolver/_stiffened_shell_affine_endpoint.py +232 -0
  280. anyfesolver/_stiffened_shell_algorithmic_pullback.py +38 -0
  281. anyfesolver/_stiffened_shell_arc_checkpoint.py +422 -0
  282. anyfesolver/_stiffened_shell_arc_control.py +108 -0
  283. anyfesolver/_stiffened_shell_arc_metric.py +222 -0
  284. anyfesolver/_stiffened_shell_arc_publication.py +153 -0
  285. anyfesolver/_stiffened_shell_arc_trial.py +310 -0
  286. anyfesolver/_stiffened_shell_b2_affine_resolution.py +101 -0
  287. anyfesolver/_stiffened_shell_b2_assembly_diagnostics.py +172 -0
  288. anyfesolver/_stiffened_shell_b2_definition_ownership.py +189 -0
  289. anyfesolver/_stiffened_shell_b2_experimental.py +153 -0
  290. anyfesolver/_stiffened_shell_b2_nodal_footprint.py +273 -0
  291. anyfesolver/_stiffened_shell_b2_physical_rigid_footprint.py +237 -0
  292. anyfesolver/_stiffened_shell_b2_q4_panel_experimental.py +2447 -0
  293. anyfesolver/_stiffened_shell_b2_q4_point_experimental.py +251 -0
  294. anyfesolver/_stiffened_shell_b2_reference_buckling.py +413 -0
  295. anyfesolver/_stiffened_shell_b3_chart.py +70 -0
  296. anyfesolver/_stiffened_shell_b3_local_adapter.py +141 -0
  297. anyfesolver/_stiffened_shell_beam_history.py +107 -0
  298. anyfesolver/_stiffened_shell_bl5_local_experimental.py +173 -0
  299. anyfesolver/_stiffened_shell_bl5_native_elastic.py +28 -0
  300. anyfesolver/_stiffened_shell_branch_event_trial.py +58 -0
  301. anyfesolver/_stiffened_shell_consumer_capabilities.py +124 -0
  302. anyfesolver/_stiffened_shell_coordinate_support.py +110 -0
  303. anyfesolver/_stiffened_shell_displacement_adaptive.py +327 -0
  304. anyfesolver/_stiffened_shell_displacement_checkpoint.py +360 -0
  305. anyfesolver/_stiffened_shell_displacement_control.py +326 -0
  306. anyfesolver/_stiffened_shell_displacement_corrector.py +293 -0
  307. anyfesolver/_stiffened_shell_displacement_increment.py +121 -0
  308. anyfesolver/_stiffened_shell_distributing_footprint.py +354 -0
  309. anyfesolver/_stiffened_shell_distributing_pose.py +267 -0
  310. anyfesolver/_stiffened_shell_f06_increment_arithmetic.py +205 -0
  311. anyfesolver/_stiffened_shell_ge_body_load.py +300 -0
  312. anyfesolver/_stiffened_shell_ge_checkpoint_binary.py +472 -0
  313. anyfesolver/_stiffened_shell_ge_distributed_load.py +210 -0
  314. anyfesolver/_stiffened_shell_ge_distributed_programme.py +175 -0
  315. anyfesolver/_stiffened_shell_ge_distributing_finite.py +242 -0
  316. anyfesolver/_stiffened_shell_ge_distributing_reference.py +296 -0
  317. anyfesolver/_stiffened_shell_ge_experimental.py +2454 -0
  318. anyfesolver/_stiffened_shell_ge_finite_experimental.py +2714 -0
  319. anyfesolver/_stiffened_shell_ge_mixed_modal_mass.py +33 -0
  320. anyfesolver/_stiffened_shell_ge_point_buckling.py +723 -0
  321. anyfesolver/_stiffened_shell_ge_pressure_load.py +366 -0
  322. anyfesolver/_stiffened_shell_ge_reference_modal.py +580 -0
  323. anyfesolver/_stiffened_shell_generalized_recovery.py +150 -0
  324. anyfesolver/_stiffened_shell_increment_control.py +217 -0
  325. anyfesolver/_stiffened_shell_l1_assembly_experimental.py +420 -0
  326. anyfesolver/_stiffened_shell_l1_local_experimental.py +284 -0
  327. anyfesolver/_stiffened_shell_l1_supported_work_experimental.py +146 -0
  328. anyfesolver/_stiffened_shell_native_distributed_load.py +120 -0
  329. anyfesolver/_stiffened_shell_native_gravity.py +236 -0
  330. anyfesolver/_stiffened_shell_nodal_footprint.py +255 -0
  331. anyfesolver/_stiffened_shell_physical_q4_mass.py +98 -0
  332. anyfesolver/_stiffened_shell_physical_s3_mass.py +53 -0
  333. anyfesolver/_stiffened_shell_point_recovery.py +49 -0
  334. anyfesolver/_stiffened_shell_q4_algorithmic_pullback.py +88 -0
  335. anyfesolver/_stiffened_shell_q4_material_event.py +114 -0
  336. anyfesolver/_stiffened_shell_q4_reference.py +65 -0
  337. anyfesolver/_stiffened_shell_rotation_charts.py +58 -0
  338. anyfesolver/_stiffened_shell_s3_algorithmic_pullback.py +59 -0
  339. anyfesolver/_stiffened_shell_s3_conservative_buckling.py +28 -0
  340. anyfesolver/_stiffened_shell_s3_dead_work_candidate.py +107 -0
  341. anyfesolver/_stiffened_shell_s3_material_event.py +30 -0
  342. anyfesolver/_stiffened_shell_same_parent_trial.py +224 -0
  343. anyfesolver/_stiffened_shell_selected_recovery.py +113 -0
  344. anyfesolver/_stiffened_shell_staged_load_experimental.py +392 -0
  345. anyfesolver/_stiffened_shell_stress_free_reference.py +204 -0
  346. anyfesolver/_wire_types.py +17 -0
  347. anyfesolver/activity.py +1537 -0
  348. anyfesolver/algebraic_dynamics.py +2864 -0
  349. anyfesolver/analysis_session.py +897 -0
  350. anyfesolver/anystructure_fem_mode.py +1637 -0
  351. anyfesolver/arc_length.py +2587 -0
  352. anyfesolver/assembly.py +1830 -0
  353. anyfesolver/b3_ge.py +179 -0
  354. anyfesolver/baselines.py +303 -0
  355. anyfesolver/beam_sections.py +292 -0
  356. anyfesolver/beam_shell_verification.py +4685 -0
  357. anyfesolver/beam_validity.py +110 -0
  358. anyfesolver/benchmarks.py +495 -0
  359. anyfesolver/boundary.py +1680 -0
  360. anyfesolver/buckling.py +2136 -0
  361. anyfesolver/buckling_validity.py +91 -0
  362. anyfesolver/capacity_workflow.py +431 -0
  363. anyfesolver/capsule_runtime_guard.py +99 -0
  364. anyfesolver/cases.py +173 -0
  365. anyfesolver/composite_strip_verification.py +297 -0
  366. anyfesolver/concentrated_mass.py +84 -0
  367. anyfesolver/constraint_audit.py +553 -0
  368. anyfesolver/contact.py +4785 -0
  369. anyfesolver/contact_performance.py +301 -0
  370. anyfesolver/control.py +206 -0
  371. anyfesolver/corotational.py +1935 -0
  372. anyfesolver/corotational_performance.py +157 -0
  373. anyfesolver/current_state_tangent.py +2780 -0
  374. anyfesolver/cylinder_benchmarks.py +369 -0
  375. anyfesolver/damage_matrix_performance.py +617 -0
  376. anyfesolver/dynamics.py +2833 -0
  377. anyfesolver/e4_pl_element.py +8265 -0
  378. anyfesolver/e4_pl_enriched.py +194 -0
  379. anyfesolver/e4_pl_enriched_nonlinear.py +159 -0
  380. anyfesolver/e4_pl_s3_element.py +9752 -0
  381. anyfesolver/e4_pl_s3_initial_fields.py +101 -0
  382. anyfesolver/e4_pl_s3_state.py +4723 -0
  383. anyfesolver/e4_pl_s3_v2_element.py +1844 -0
  384. anyfesolver/e4_pl_s3_v2b_element.py +1936 -0
  385. anyfesolver/e4_pl_s3_v2c_element.py +2196 -0
  386. anyfesolver/e4_pl_s3_v2d_element.py +2621 -0
  387. anyfesolver/e4_pl_s3_v2d_state.py +376 -0
  388. anyfesolver/element_capabilities.py +159 -0
  389. anyfesolver/element_qualification.py +432 -0
  390. anyfesolver/elements.py +6327 -0
  391. anyfesolver/experimental_csr_assembly.py +238 -0
  392. anyfesolver/external_references.py +1253 -0
  393. anyfesolver/fe_core.py +832 -0
  394. anyfesolver/floating_pressure_regions.py +119 -0
  395. anyfesolver/floating_response.py +486 -0
  396. anyfesolver/floating_transient.py +1281 -0
  397. anyfesolver/fracture.py +621 -0
  398. anyfesolver/ge_beam3_curved_reference.py +725 -0
  399. anyfesolver/ge_beam3_element.py +885 -0
  400. anyfesolver/ge_beam3_mixed_element.py +1216 -0
  401. anyfesolver/ge_beam3_mixed_state.py +814 -0
  402. anyfesolver/ge_beam3_native.py +129 -0
  403. anyfesolver/ge_beam3_native_connected_dynamics.py +24 -0
  404. anyfesolver/ge_beam3_native_dynamics.py +70 -0
  405. anyfesolver/ge_beam3_state.py +672 -0
  406. anyfesolver/general_contact/__init__.py +151 -0
  407. anyfesolver/general_contact/_enriched_multitarget_empty.py +202 -0
  408. anyfesolver/general_contact/_enriched_multitarget_trial.py +183 -0
  409. anyfesolver/general_contact/_results_archive_common.py +65 -0
  410. anyfesolver/general_contact/algebraic_path.py +206 -0
  411. anyfesolver/general_contact/arc_contact.py +237 -0
  412. anyfesolver/general_contact/arc_results_archive.py +158 -0
  413. anyfesolver/general_contact/augmentation.py +157 -0
  414. anyfesolver/general_contact/automatic_domain.py +621 -0
  415. anyfesolver/general_contact/beam_chain_consistent.py +357 -0
  416. anyfesolver/general_contact/beam_chain_end_geometry.py +237 -0
  417. anyfesolver/general_contact/beam_chain_ends.py +220 -0
  418. anyfesolver/general_contact/beam_chain_pair.py +416 -0
  419. anyfesolver/general_contact/beam_curve_end_geometry.py +254 -0
  420. anyfesolver/general_contact/beam_curve_ends.py +237 -0
  421. anyfesolver/general_contact/beam_curve_pair.py +794 -0
  422. anyfesolver/general_contact/beam_curve_pair_static.py +303 -0
  423. anyfesolver/general_contact/beam_end_radial_geometry.py +221 -0
  424. anyfesolver/general_contact/beam_end_topology.py +15 -0
  425. anyfesolver/general_contact/beam_hemisphere_coupled_tool.py +61 -0
  426. anyfesolver/general_contact/beam_hemisphere_cylinder.py +134 -0
  427. anyfesolver/general_contact/beam_hemisphere_cylinder_motion.py +89 -0
  428. anyfesolver/general_contact/beam_hemisphere_cylinder_work.py +216 -0
  429. anyfesolver/general_contact/beam_hemisphere_plane.py +175 -0
  430. anyfesolver/general_contact/beam_hemisphere_s3_support.py +152 -0
  431. anyfesolver/general_contact/beam_hemisphere_sphere.py +135 -0
  432. anyfesolver/general_contact/beam_hemisphere_sphere_work.py +114 -0
  433. anyfesolver/general_contact/beam_hemisphere_support.py +211 -0
  434. anyfesolver/general_contact/beam_pair.py +523 -0
  435. anyfesolver/general_contact/beam_pair_end_geometry.py +269 -0
  436. anyfesolver/general_contact/beam_pair_ends.py +222 -0
  437. anyfesolver/general_contact/beam_plane.py +425 -0
  438. anyfesolver/general_contact/beam_radial.py +500 -0
  439. anyfesolver/general_contact/beam_radial_ends.py +223 -0
  440. anyfesolver/general_contact/beam_s3_directional_rates.py +196 -0
  441. anyfesolver/general_contact/beam_s3_rotational_transient.py +126 -0
  442. anyfesolver/general_contact/beam_s3_transient.py +139 -0
  443. anyfesolver/general_contact/beam_shell.py +648 -0
  444. anyfesolver/general_contact/beam_shell_patch.py +395 -0
  445. anyfesolver/general_contact/beam_temporal_bounds.py +230 -0
  446. anyfesolver/general_contact/capability.py +101 -0
  447. anyfesolver/general_contact/capped_cylinder.py +618 -0
  448. anyfesolver/general_contact/contact_search.py +95 -0
  449. anyfesolver/general_contact/core.py +1769 -0
  450. anyfesolver/general_contact/curved_s3_q4_work.py +238 -0
  451. anyfesolver/general_contact/curved_shell_skin.py +520 -0
  452. anyfesolver/general_contact/d1_interior_profile.py +427 -0
  453. anyfesolver/general_contact/deformable_beam_s3_caps.py +143 -0
  454. anyfesolver/general_contact/deformable_beam_s3_line.py +211 -0
  455. anyfesolver/general_contact/deformable_beam_s3_static.py +152 -0
  456. anyfesolver/general_contact/descriptor_rates.py +61 -0
  457. anyfesolver/general_contact/enriched_cold_predictor.py +161 -0
  458. anyfesolver/general_contact/enriched_moment_batch.py +337 -0
  459. anyfesolver/general_contact/enriched_multitarget.py +308 -0
  460. anyfesolver/general_contact/enriched_multitarget_gap.py +156 -0
  461. anyfesolver/general_contact/enriched_multitarget_moments.py +194 -0
  462. anyfesolver/general_contact/enriched_multitarget_topology.py +171 -0
  463. anyfesolver/general_contact/enriched_nonlinear.py +440 -0
  464. anyfesolver/general_contact/enriched_overlap.py +299 -0
  465. anyfesolver/general_contact/enriched_path.py +253 -0
  466. anyfesolver/general_contact/enriched_small_cut.py +310 -0
  467. anyfesolver/general_contact/enriched_static.py +481 -0
  468. anyfesolver/general_contact/enriched_union.py +320 -0
  469. anyfesolver/general_contact/equilibrated_pressure_pivot.py +140 -0
  470. anyfesolver/general_contact/event_subdivision.py +273 -0
  471. anyfesolver/general_contact/finite_mixed_state.py +133 -0
  472. anyfesolver/general_contact/finite_rigid_patch.py +196 -0
  473. anyfesolver/general_contact/finite_rigid_support.py +129 -0
  474. anyfesolver/general_contact/finite_rigid_sweep.py +53 -0
  475. anyfesolver/general_contact/finite_rotation_predictor.py +171 -0
  476. anyfesolver/general_contact/finite_rotation_skin.py +212 -0
  477. anyfesolver/general_contact/finite_rotation_state.py +106 -0
  478. anyfesolver/general_contact/finite_rotation_sweep.py +161 -0
  479. anyfesolver/general_contact/finite_v2d_state.py +104 -0
  480. anyfesolver/general_contact/fixed_projection_graph.py +205 -0
  481. anyfesolver/general_contact/fixed_projection_s3_events.py +235 -0
  482. anyfesolver/general_contact/free_rigid.py +134 -0
  483. anyfesolver/general_contact/friction_point.py +378 -0
  484. anyfesolver/general_contact/gap_extrema.py +119 -0
  485. anyfesolver/general_contact/guided_pair_transient_geometry.py +138 -0
  486. anyfesolver/general_contact/initial_contact_seed.py +368 -0
  487. anyfesolver/general_contact/linearized_pivot.py +595 -0
  488. anyfesolver/general_contact/material_work_diagnostics.py +159 -0
  489. anyfesolver/general_contact/moment_batch_ad.py +129 -0
  490. anyfesolver/general_contact/moment_batch_points.py +75 -0
  491. anyfesolver/general_contact/moving.py +1031 -0
  492. anyfesolver/general_contact/multiple_beam_rigid.py +248 -0
  493. anyfesolver/general_contact/multiple_beam_s3_caps.py +199 -0
  494. anyfesolver/general_contact/multiple_beam_s3_transient.py +223 -0
  495. anyfesolver/general_contact/multiple_projected_pairs.py +196 -0
  496. anyfesolver/general_contact/multiple_shell_planes.py +226 -0
  497. anyfesolver/general_contact/native_activation_static.py +143 -0
  498. anyfesolver/general_contact/native_checkpoint_results.py +213 -0
  499. anyfesolver/general_contact/native_curve_union.py +268 -0
  500. anyfesolver/general_contact/native_curved_geometry.py +374 -0
  501. anyfesolver/general_contact/native_curved_pair_partition.py +590 -0
  502. anyfesolver/general_contact/native_curved_plane_work.py +864 -0
  503. anyfesolver/general_contact/native_curved_s3_work.py +472 -0
  504. anyfesolver/general_contact/native_event_polynomial.py +164 -0
  505. anyfesolver/general_contact/native_fibre_context.py +173 -0
  506. anyfesolver/general_contact/native_fibre_results.py +74 -0
  507. anyfesolver/general_contact/native_initial_guess.py +122 -0
  508. anyfesolver/general_contact/native_material_activation.py +108 -0
  509. anyfesolver/general_contact/native_material_plane.py +111 -0
  510. anyfesolver/general_contact/native_material_s3.py +209 -0
  511. anyfesolver/general_contact/native_multi_s3_static.py +722 -0
  512. anyfesolver/general_contact/native_normal_angles.py +233 -0
  513. anyfesolver/general_contact/native_pair_error_budget.py +49 -0
  514. anyfesolver/general_contact/native_replay_arithmetic.py +103 -0
  515. anyfesolver/general_contact/native_replay_diagnostics.py +90 -0
  516. anyfesolver/general_contact/native_retained_body_junction.py +99 -0
  517. anyfesolver/general_contact/native_retained_body_pair.py +220 -0
  518. anyfesolver/general_contact/native_retained_body_projection.py +160 -0
  519. anyfesolver/general_contact/native_retained_body_static.py +62 -0
  520. anyfesolver/general_contact/native_retained_cell_pair.py +185 -0
  521. anyfesolver/general_contact/native_retained_curve_cell.py +102 -0
  522. anyfesolver/general_contact/native_retained_line_plane.py +210 -0
  523. anyfesolver/general_contact/native_retained_line_s3.py +440 -0
  524. anyfesolver/general_contact/native_retained_line_s3_work.py +91 -0
  525. anyfesolver/general_contact/native_retained_pair_static.py +845 -0
  526. anyfesolver/general_contact/native_retained_s3_static.py +554 -0
  527. anyfesolver/general_contact/native_retained_static.py +478 -0
  528. anyfesolver/general_contact/native_retained_station.py +222 -0
  529. anyfesolver/general_contact/native_retained_whole_pair.py +2120 -0
  530. anyfesolver/general_contact/native_s3_swept.py +149 -0
  531. anyfesolver/general_contact/native_shell_static_driver.py +144 -0
  532. anyfesolver/general_contact/native_surface_activation.py +391 -0
  533. anyfesolver/general_contact/native_surface_bounds.py +198 -0
  534. anyfesolver/general_contact/native_surface_contributor.py +121 -0
  535. anyfesolver/general_contact/native_surface_crossing.py +81 -0
  536. anyfesolver/general_contact/native_surface_event_sequence.py +320 -0
  537. anyfesolver/general_contact/native_surface_extrema.py +72 -0
  538. anyfesolver/general_contact/native_surface_friction_integral.py +1724 -0
  539. anyfesolver/general_contact/native_surface_front.py +742 -0
  540. anyfesolver/general_contact/native_surface_front_boundary.py +160 -0
  541. anyfesolver/general_contact/native_surface_front_precision.py +78 -0
  542. anyfesolver/general_contact/native_surface_front_work.py +118 -0
  543. anyfesolver/general_contact/native_surface_history.py +334 -0
  544. anyfesolver/general_contact/native_surface_normal.py +324 -0
  545. anyfesolver/general_contact/native_surface_patch.py +213 -0
  546. anyfesolver/general_contact/native_surface_path.py +348 -0
  547. anyfesolver/general_contact/native_surface_quadrature.py +212 -0
  548. anyfesolver/general_contact/native_surface_s3_friction.py +340 -0
  549. anyfesolver/general_contact/native_surface_support.py +776 -0
  550. anyfesolver/general_contact/native_surface_transaction.py +198 -0
  551. anyfesolver/general_contact/native_transient_multi_shell.py +108 -0
  552. anyfesolver/general_contact/native_transient_pair.py +61 -0
  553. anyfesolver/general_contact/native_transient_shell.py +44 -0
  554. anyfesolver/general_contact/normal_s3_skin_path.py +163 -0
  555. anyfesolver/general_contact/overlap.py +443 -0
  556. anyfesolver/general_contact/pair.py +466 -0
  557. anyfesolver/general_contact/patch_broadphase.py +111 -0
  558. anyfesolver/general_contact/patch_mortar.py +593 -0
  559. anyfesolver/general_contact/patch_sliding.py +644 -0
  560. anyfesolver/general_contact/plane_newmark_events.py +278 -0
  561. anyfesolver/general_contact/pointwise_patch.py +288 -0
  562. anyfesolver/general_contact/polynomial_roots.py +312 -0
  563. anyfesolver/general_contact/pressure_basis.py +241 -0
  564. anyfesolver/general_contact/pressure_diagnostics.py +155 -0
  565. anyfesolver/general_contact/pressure_overlay.py +182 -0
  566. anyfesolver/general_contact/pressure_space.py +51 -0
  567. anyfesolver/general_contact/q4_material_checkpoint.py +276 -0
  568. anyfesolver/general_contact/q4_overlap_local_bound.py +1111 -0
  569. anyfesolver/general_contact/q4_q4_overlap_derivatives.py +234 -0
  570. anyfesolver/general_contact/q4_q4_swept_bound.py +58 -0
  571. anyfesolver/general_contact/q4_s3_overlap_derivatives.py +1159 -0
  572. anyfesolver/general_contact/q4_s3_tiny_wedge.py +180 -0
  573. anyfesolver/general_contact/q4_skin_work.py +87 -0
  574. anyfesolver/general_contact/q4_source_mortar_energy.py +181 -0
  575. anyfesolver/general_contact/q4_source_overlap.py +401 -0
  576. anyfesolver/general_contact/q4_target_overlap.py +181 -0
  577. anyfesolver/general_contact/request_identity.py +192 -0
  578. anyfesolver/general_contact/rigid_translation.py +199 -0
  579. anyfesolver/general_contact/runtime.py +27 -0
  580. anyfesolver/general_contact/s3_friction_chart_interval.py +104 -0
  581. anyfesolver/general_contact/s3_friction_coverage.py +165 -0
  582. anyfesolver/general_contact/s3_friction_dyadic_interval.py +39 -0
  583. anyfesolver/general_contact/s3_friction_history_path.py +111 -0
  584. anyfesolver/general_contact/s3_friction_mesh_coverage.py +145 -0
  585. anyfesolver/general_contact/s3_friction_mesh_gap.py +74 -0
  586. anyfesolver/general_contact/s3_friction_mesh_monolithic.py +150 -0
  587. anyfesolver/general_contact/s3_friction_monolithic.py +121 -0
  588. anyfesolver/general_contact/s3_friction_moving_coverage.py +114 -0
  589. anyfesolver/general_contact/s3_friction_pair.py +237 -0
  590. anyfesolver/general_contact/s3_friction_point.py +129 -0
  591. anyfesolver/general_contact/s3_friction_prepared_path.py +254 -0
  592. anyfesolver/general_contact/s3_friction_replay.py +1094 -0
  593. anyfesolver/general_contact/s3_friction_rim_path.py +69 -0
  594. anyfesolver/general_contact/s3_friction_rim_transaction.py +23 -0
  595. anyfesolver/general_contact/s3_friction_static.py +267 -0
  596. anyfesolver/general_contact/s3_friction_swept_gap.py +112 -0
  597. anyfesolver/general_contact/s3_friction_touch.py +94 -0
  598. anyfesolver/general_contact/s3_friction_weak_pressure.py +66 -0
  599. anyfesolver/general_contact/s3_overlap_derivatives.py +220 -0
  600. anyfesolver/general_contact/s3_overlap_hermite_gap.py +180 -0
  601. anyfesolver/general_contact/s3_pair_static.py +343 -0
  602. anyfesolver/general_contact/s3_patch_augmented.py +2056 -0
  603. anyfesolver/general_contact/s3_patch_mortar_energy.py +545 -0
  604. anyfesolver/general_contact/s3_patch_static.py +1725 -0
  605. anyfesolver/general_contact/s3_pressure_hermite_bounds.py +395 -0
  606. anyfesolver/general_contact/s3_pressure_polygon_bounds.py +73 -0
  607. anyfesolver/general_contact/s3_q4_gap_resolution.py +191 -0
  608. anyfesolver/general_contact/s3_q4_overlap_derivatives.py +252 -0
  609. anyfesolver/general_contact/s3_q4_swept.py +56 -0
  610. anyfesolver/general_contact/s3_skin_work.py +101 -0
  611. anyfesolver/general_contact/s3_sliding_friction.py +640 -0
  612. anyfesolver/general_contact/s3_stable_plane_gap.py +43 -0
  613. anyfesolver/general_contact/seed_path_vertex_interval.py +323 -0
  614. anyfesolver/general_contact/semismooth.py +133 -0
  615. anyfesolver/general_contact/semismooth_block.py +147 -0
  616. anyfesolver/general_contact/semismooth_path.py +871 -0
  617. anyfesolver/general_contact/shell_pair_hermite_sweep.py +336 -0
  618. anyfesolver/general_contact/shell_sphere_temporal_bounds.py +305 -0
  619. anyfesolver/general_contact/skin_geometry.py +106 -0
  620. anyfesolver/general_contact/sliding.py +349 -0
  621. anyfesolver/general_contact/sphere.py +691 -0
  622. anyfesolver/general_contact/sphere_temporal_bounds.py +241 -0
  623. anyfesolver/general_contact/static_path.py +2608 -0
  624. anyfesolver/general_contact/static_results_archive.py +140 -0
  625. anyfesolver/general_contact/structural_state_bridge.py +196 -0
  626. anyfesolver/general_contact/supported_schur.py +594 -0
  627. anyfesolver/general_contact/swept_patch_broadphase.py +160 -0
  628. anyfesolver/general_contact/transient.py +2921 -0
  629. anyfesolver/general_contact/transient_results_archive.py +491 -0
  630. anyfesolver/general_contact/triangle_mortar_energy.py +280 -0
  631. anyfesolver/general_contact/triangle_pair_energy.py +211 -0
  632. anyfesolver/general_contact/triangulated_rigid.py +94 -0
  633. anyfesolver/general_contact/triangulated_rigid_static.py +399 -0
  634. anyfesolver/general_contact/warped_q4_plane.py +185 -0
  635. anyfesolver/general_contact/warped_q4_skin.py +302 -0
  636. anyfesolver/general_contact/warped_q4_static.py +331 -0
  637. anyfesolver/impact_performance.py +273 -0
  638. anyfesolver/impact_reduced_assembly.py +294 -0
  639. anyfesolver/imperfections.py +397 -0
  640. anyfesolver/inertia_relief.py +676 -0
  641. anyfesolver/initial_field_state.py +54 -0
  642. anyfesolver/jit_compiler.py +135 -0
  643. anyfesolver/kernel_warmup.py +228 -0
  644. anyfesolver/linalg.py +1002 -0
  645. anyfesolver/marine_contributions.py +634 -0
  646. anyfesolver/marine_coupled_equilibrium.py +292 -0
  647. anyfesolver/marine_equilibrium.py +405 -0
  648. anyfesolver/marine_hydro_coordinates.py +346 -0
  649. anyfesolver/marine_linear.py +549 -0
  650. anyfesolver/marine_link.py +306 -0
  651. anyfesolver/marine_mechanical.py +923 -0
  652. anyfesolver/marine_mooring.py +533 -0
  653. anyfesolver/marine_morison.py +331 -0
  654. anyfesolver/marine_potential_flow.py +403 -0
  655. anyfesolver/marine_rigid.py +397 -0
  656. anyfesolver/marine_seabed.py +122 -0
  657. anyfesolver/mass_properties.py +352 -0
  658. anyfesolver/material_curves.py +52 -0
  659. anyfesolver/materials.py +43 -0
  660. anyfesolver/matrix_assembly.py +7330 -0
  661. anyfesolver/mesh_gen.py +904 -0
  662. anyfesolver/mesh_load_bc_verification.py +612 -0
  663. anyfesolver/modal.py +2494 -0
  664. anyfesolver/nonlinear.py +341 -0
  665. anyfesolver/nonlinear_analysis_diagnostics.py +466 -0
  666. anyfesolver/nonlinear_element_evaluation.py +126 -0
  667. anyfesolver/nonlinear_performance.py +2094 -0
  668. anyfesolver/nonlinear_performance_batch_b.py +1173 -0
  669. anyfesolver/nonlinear_performance_batch_c.py +850 -0
  670. anyfesolver/nonlinear_performance_bootstrap.py +164 -0
  671. anyfesolver/nonlinear_reduced_assembly.py +806 -0
  672. anyfesolver/nonlinear_restart.py +1708 -0
  673. anyfesolver/nonlinear_state.py +2800 -0
  674. anyfesolver/nonlinear_static.py +9407 -0
  675. anyfesolver/outcomes.py +694 -0
  676. anyfesolver/plasticity.py +2087 -0
  677. anyfesolver/plasticity_qualification.py +758 -0
  678. anyfesolver/prepared_static.py +1129 -0
  679. anyfesolver/prepared_static_envelopes.py +389 -0
  680. anyfesolver/prepared_static_loads.py +1180 -0
  681. anyfesolver/prepared_static_measures.py +18 -0
  682. anyfesolver/prepared_static_numeric.py +247 -0
  683. anyfesolver/prepared_static_q4.py +297 -0
  684. anyfesolver/prepared_static_recovery.py +2068 -0
  685. anyfesolver/prepared_static_response.py +1013 -0
  686. anyfesolver/prepared_static_shared.py +226 -0
  687. anyfesolver/prepared_static_snapshot.py +323 -0
  688. anyfesolver/prepared_static_vectorized.py +866 -0
  689. anyfesolver/pressure_regions.py +287 -0
  690. anyfesolver/production_readiness.py +343 -0
  691. anyfesolver/quality_control.py +1487 -0
  692. anyfesolver/quantities.py +1289 -0
  693. anyfesolver/recovery.py +4217 -0
  694. anyfesolver/recovery_batches.py +1985 -0
  695. anyfesolver/recovery_policy.py +205 -0
  696. anyfesolver/recovery_s4.py +289 -0
  697. anyfesolver/recovery_shell_frames.py +102 -0
  698. anyfesolver/reference_cases.py +366 -0
  699. anyfesolver/result_capsule.py +2175 -0
  700. anyfesolver/results.py +752 -0
  701. anyfesolver/runtime.py +9819 -0
  702. anyfesolver/s3_reference_batch.py +1338 -0
  703. anyfesolver/s3_v2c_fast_assembly.py +544 -0
  704. anyfesolver/s3_v2d_fast_assembly.py +447 -0
  705. anyfesolver/s4_validity.py +354 -0
  706. anyfesolver/sections.py +67 -0
  707. anyfesolver/sesam_fem/__init__.py +55 -0
  708. anyfesolver/sesam_fem/__main__.py +80 -0
  709. anyfesolver/sesam_fem/diagnostics.py +5 -0
  710. anyfesolver/sesam_fem/document.py +39 -0
  711. anyfesolver/sesam_fem/exporter.py +9 -0
  712. anyfesolver/sesam_fem/importer.py +228 -0
  713. anyfesolver/sesam_fem/records.py +21 -0
  714. anyfesolver/sesam_fem/schema.py +35 -0
  715. anyfesolver/sesam_fem/sif_importer.py +9 -0
  716. anyfesolver/sesam_fem/validation.py +5 -0
  717. anyfesolver/sestra_deep_diagnostics.py +173 -0
  718. anyfesolver/sestra_mixed_verification.py +146 -0
  719. anyfesolver/sestra_structure_benchmarks.py +270 -0
  720. anyfesolver/sestra_three_case.py +215 -0
  721. anyfesolver/sestra_verification.py +523 -0
  722. anyfesolver/shell_benchmarks.py +367 -0
  723. anyfesolver/shell_formulations/director_field.py +799 -0
  724. anyfesolver/shell_formulations/geometry_provenance.py +921 -0
  725. anyfesolver/shell_formulations/mitc4_plus_d_quality.py +318 -0
  726. anyfesolver/shell_formulations/mitc4_plus_d_reference.py +837 -0
  727. anyfesolver/shell_formulations/mitc4_plus_d_scalar.py +209 -0
  728. anyfesolver/shell_formulations/protocol.py +222 -0
  729. anyfesolver/shell_formulations/q4_common.py +271 -0
  730. anyfesolver/shell_formulations/s4_restricted_policy.py +78 -0
  731. anyfesolver/shell_sections.py +394 -0
  732. anyfesolver/solid_submodel.py +930 -0
  733. anyfesolver/static_batch.py +662 -0
  734. anyfesolver/static_envelopes.py +250 -0
  735. anyfesolver/stiffened_shell.py +388 -0
  736. anyfesolver/submodel_transfer.py +1306 -0
  737. anyfesolver/test_cases.py +610 -0
  738. anyfesolver/threading_policy.py +431 -0
  739. anyfesolver/validation.py +719 -0
  740. anyfesolver/vectorized_beam.py +139 -0
  741. anyfesolver/vectorized_generalized_shell.py +448 -0
  742. anyfesolver/vectorized_hill48.py +956 -0
  743. anyfesolver/vectorized_nonlinear.py +360 -0
  744. anyfesolver/vectorized_stiffness.py +694 -0
  745. anyfesolver-0.5.0a1.dist-info/METADATA +374 -0
  746. anyfesolver-0.5.0a1.dist-info/RECORD +751 -0
  747. anyfesolver-0.5.0a1.dist-info/WHEEL +5 -0
  748. anyfesolver-0.5.0a1.dist-info/licenses/COPYRIGHT +1 -0
  749. anyfesolver-0.5.0a1.dist-info/licenses/LICENSE +373 -0
  750. anyfesolver-0.5.0a1.dist-info/licenses/THIRD_PARTY_NOTICES.md +32 -0
  751. anyfesolver-0.5.0a1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,391 @@
1
+ """Single transverse first touch on the declared native/S3 material path.
2
+
3
+ Local development: the instantaneous force map holds the event fixed, while
4
+ algorithmic derivatives include its sensitivity. No event is physically committed.
5
+ """
6
+ from dataclasses import dataclass, replace
7
+ from math import fsum
8
+ from functools import lru_cache
9
+
10
+ import numpy as np
11
+ from scipy.optimize import brentq
12
+ from anyfesolver._ge_beam3_p5_seeded.core import sha
13
+
14
+ from anyfesolver._ge_beam3_mixed_ad import Jet2, so3_exp, so3_log, matmul, matvec, constant_matrix, dot, rotation_exponential
15
+ from .native_retained_station import _readonly
16
+ from .native_surface_path import material_path_pose, certify_material_ownership, affine_gap_polynomial
17
+ from .native_surface_s3_friction import _unit, _cross
18
+ from .friction_point import FrictionPointState, trial_coulomb_point, objective_relative_tangent_increment
19
+
20
+
21
+ @dataclass(frozen=True)
22
+ class NativeS3ActivationResult:
23
+ residual: np.ndarray
24
+ tangent: np.ndarray
25
+ trial: object
26
+ normal_gap_m: float
27
+ normal_pressure_Pa: float
28
+ normal_storage_j: float
29
+ event_fraction: float
30
+ event_gradient_local: np.ndarray
31
+ path_sha256: str
32
+ ownership_intervals: int
33
+ normal_residual: np.ndarray
34
+ normal_tangent: np.ndarray
35
+ profile: str = 'NATIVE_S3_TRANSVERSE_FIRST_TOUCH_POINT_DEV_V1'
36
+
37
+ def spatial_tangent(self):
38
+ # Mixed virtual/algorithmic rotations already give spatial covectors.
39
+ return self.tangent
40
+
41
+ def normal_spatial_tangent(self):
42
+ return self.normal_tangent
43
+
44
+
45
+ @dataclass(frozen=True)
46
+ class NativeS3ClosedSequenceResult(NativeS3ActivationResult):
47
+ event_fractions: tuple = ()
48
+ history_evaluations: int = 0
49
+ profile: str = 'NATIVE_S3_CLOSED_EVENT_SEQUENCE_POINT_DEV_V1'
50
+
51
+
52
+ def _frame(corners):
53
+ a=[corners[1][i]-corners[0][i] for i in range(3)]
54
+ b=[corners[2][i]-corners[0][i] for i in range(3)]
55
+ first=_unit(a); normal=_unit(_cross(a,b)); second=_cross(normal,first)
56
+ return [[first[i],second[i],normal[i]] for i in range(3)]
57
+
58
+
59
+ def _point(corners, weights):
60
+ return [sum(weights[a]*corners[a][i] for a in range(3)) for i in range(3)]
61
+
62
+
63
+ def _freeze_jets(values):
64
+ for value in values:
65
+ value.gradient.setflags(write=False);value.hessian.setflags(write=False)
66
+ return tuple(values)
67
+
68
+
69
+ @lru_cache(maxsize=32)
70
+ def _event_rotation_chart(rotation_entries,size):
71
+ """Pure endpoint rotation derivatives; no geometry/history is cached."""
72
+ q=[Jet2.constant(0.,0) if size==0 else Jet2.variable(0.,3+i,size) for i in range(3)]
73
+ rotation=matmul(so3_exp(q),constant_matrix(np.asarray(rotation_entries).reshape(3,3),size))
74
+ return _freeze_jets(so3_log(rotation))
75
+
76
+
77
+ @lru_cache(maxsize=1)
78
+ def _endpoint_virtual_rotation():
79
+ q=[Jet2.variable(0.,3+i,30) for i in range(3)]
80
+ v=[Jet2.variable(0.,18+i,30) for i in range(3)]
81
+ return tuple(_freeze_jets(row) for row in matmul(so3_exp(v),so3_exp(q)))
82
+
83
+
84
+ @lru_cache(maxsize=32)
85
+ def _endpoint_frame_jets(corner_bytes):
86
+ """Immutable endpoint geometry jets, shared across material coordinates."""
87
+ corners=np.frombuffer(corner_bytes,dtype=np.float64).reshape(3,3)
88
+ y=[[Jet2.constant(corners[a,i],30)+Jet2.variable(0.,6+3*a+i,30)
89
+ +Jet2.variable(0.,21+3*a+i,30) for i in range(3)] for a in range(3)]
90
+ return tuple(_freeze_jets(row) for row in _frame(y))
91
+
92
+
93
+ def evaluate_first_touch(pair, start, history, translations, angular, shell_increment,
94
+ *, maximum_intervals=256):
95
+ return _evaluate_transverse_event(pair,start,history,translations,angular,shell_increment,
96
+ maximum_intervals=maximum_intervals,opening=False)
97
+
98
+
99
+ def evaluate_release(pair,start,history,translations,angular,shell_increment,*,maximum_intervals=256):
100
+ return _evaluate_transverse_event(pair,start,history,translations,angular,shell_increment,
101
+ maximum_intervals=maximum_intervals,opening=True)
102
+
103
+
104
+ def _evaluate_transverse_event(pair, start, history, translations, angular, shell_increment,
105
+ *, maximum_intervals, opening):
106
+ """Actual-gap first-touch traction and complete spatial endpoint tangent.
107
+
108
+ A global second-derivative bound proves strict gap decrease, hence unique
109
+ first-root ownership. Unresolved/nonmonotone paths fail rather than dropping
110
+ crossings. This initial branch requires an open physical history.
111
+ """
112
+ if sha(pair._definition()) != pair.definition_sha256:
113
+ raise ValueError('native/S3 material-point definition changed')
114
+ if opening and (type(history) is not FrictionPointState or history.partner_key!=pair.partner_key):
115
+ raise ValueError('release candidate requires matching active physical history')
116
+ if not opening and (type(history) is not FrictionPointState or history.partner_key is not None):
117
+ raise ValueError('first-touch candidate requires released physical history')
118
+ end=material_path_pose(start,translations,angular,shell_increment,1.)
119
+ ownership=certify_material_ownership(pair,start,translations,angular,shell_increment,
120
+ maximum_intervals=maximum_intervals)
121
+ if not ownership.certified:
122
+ raise ValueError('first-touch physical ownership unresolved: '+ownership.reason)
123
+ source,target=pair.source,pair.target
124
+ old=source.surface_variations(start.positions,start.position_low,start.cell_rotations)
125
+ new=source.surface_variations(end.positions,end.position_low,end.cell_rotations)
126
+ y0=target.adapter.current_positions(start.shell_displacement)
127
+ y1=target.adapter.current_positions(end.shell_displacement)
128
+ base0=old.station.surface_position-old.surface_arm
129
+ base1=new.station.surface_position-new.surface_arm
130
+ omega=np.asarray(angular)[source.cell]
131
+ a,b=y0[1]-y0[0],y0[2]-y0[0]
132
+ da=(y1[1]-y1[0])-a; db=(y1[2]-y1[0])-b
133
+ c0=np.cross(a,b); c2=np.cross(a+da,b+db)
134
+ c1=.5*(np.cross(a,b+db)+np.cross(a+da,b))
135
+ normal0=c0/np.linalg.norm(c0)
136
+ lower=min(float(normal0@c) for c in (c0,c1,c2))
137
+ if lower<=0:raise ValueError('first-touch target area bound unresolved')
138
+ cp0=np.cross(da,b)+np.cross(a,db)
139
+ cp1=np.cross(da,b+db)+np.cross(a+da,db)
140
+ m1=max(np.linalg.norm(cp0),np.linalg.norm(cp1)); m2=2*np.linalg.norm(np.cross(da,db))
141
+ n1=m1/lower; n2=m2/lower+3*m1*m1/(lower*lower)
142
+ velocity=base1-base0-(y1[0]-y0[0])
143
+ arm=np.linalg.norm(old.surface_arm); angle=np.linalg.norm(omega)
144
+ radius=max(np.linalg.norm(base0-y0[0]),np.linalg.norm(base1-y1[0]))+arm
145
+ speed=np.linalg.norm(velocity)+angle*arm
146
+ second_bound=n2*radius+2*n1*speed+angle*angle*arm
147
+ normal_derivative=(cp0-normal0*(normal0@cp0))/np.linalg.norm(c0)
148
+ derivative0=float(normal_derivative@(old.station.surface_position-y0[0])
149
+ +normal0@(velocity+np.cross(omega,old.surface_arm)))
150
+ padding=512*np.finfo(float).eps*max(1.,radius,speed,second_bound)
151
+ if ((not opening and derivative0+second_bound>=-padding) or
152
+ (opening and derivative0-second_bound<=padding)):
153
+ raise ValueError('first-touch transverse monotone path unresolved')
154
+
155
+ def gap(alpha):
156
+ pose=material_path_pose(start,translations,angular,shell_increment,alpha)
157
+ x=source.evaluate(pose.positions,pose.position_low,pose.cell_rotations).surface_position
158
+ t=target.physical_pose(pose.shell_displacement)
159
+ return float((x-np.asarray(t.position))@np.asarray(t.material_frame)[:,2])
160
+
161
+ g0,g1=gap(0.),gap(1.)
162
+ prepared_translations=np.asarray(translations,dtype=float)
163
+ weights=(1.-source.t,source.t)
164
+ base_terms=tuple(tuple((weights[j]*float(start.positions[source.cell+j,i]),
165
+ weights[j]*float(start.position_low[source.cell+j,i])) for j in range(2))
166
+ for i in range(3))
167
+ base_velocity=np.array([fsum(weights[j]*float(prepared_translations[source.cell+j,i]) for j in range(2))
168
+ for i in range(3)])
169
+ def root_gap(alpha):
170
+ # Prepared scalar geometry for root iterations only. Endpoint and final
171
+ # root checks still use the authoritative adapters above/below. Native
172
+ # base motion is affine; the material arm follows the declared Exp path.
173
+ if alpha==0.:return g0
174
+ if alpha==1.:return g1
175
+ base=np.array([fsum((*base_terms[i][0],*base_terms[i][1],alpha*base_velocity[i])) for i in range(3)])
176
+ x=base+rotation_exponential(alpha*omega)@old.surface_arm
177
+ y=y0+alpha*(y1-y0)
178
+ normal=np.cross(y[1]-y[0],y[2]-y[0]);normal/=np.linalg.norm(normal)
179
+ point=np.asarray(target.barycentric)@y
180
+ return float((x-point)@normal)
181
+ exact_release_endpoint=False
182
+ if opening and g1==0.:
183
+ polynomial=affine_gap_polynomial(pair,start,np.asarray(translations),angular,shell_increment)
184
+ exact_release_endpoint=polynomial is not None and sum(polynomial)==0
185
+ if ((not opening and (not g0>padding or not g1<-padding)) or
186
+ (opening and (not g0<-padding or not (g1>padding or exact_release_endpoint)))):
187
+ raise ValueError('first-touch needs resolved open and closed endpoints')
188
+ alpha=brentq(root_gap,0.,1.,xtol=4*np.finfo(float).eps,rtol=4*np.finfo(float).eps,maxiter=64)
189
+ if abs(gap(alpha))>padding:
190
+ raise ValueError('first-touch root residual unresolved')
191
+ if opening:
192
+ return _release_history(pair,start,end,history,translations,angular,shell_increment,
193
+ alpha,g1,ownership)
194
+
195
+ return _closing_event_endpoint(pair,start,end,history,alpha,g1,padding,ownership)
196
+
197
+
198
+ def _certified_endpoint_primal(g,padding,certified_gap):
199
+ """Validate a private certified endpoint gap; correct only the Jet2 primal.
200
+
201
+ The certified exact gap is admitted only when finite, strictly closed, and
202
+ in agreement with the endpoint law's own binary64 evaluation within the
203
+ existing work-map mismatch padding. Inside the coordinate padding that
204
+ evaluation cannot resolve the contact sign; the certified magnitude then
205
+ replaces only the primal, preserving the declared chart's gradient/Hessian.
206
+ Exact touches, out-of-profile open gaps, nonfinite values, and
207
+ above-padding contradictions refuse.
208
+ """
209
+ if not np.isfinite(certified_gap):
210
+ raise ValueError('certified endpoint gap must be finite')
211
+ if certified_gap==0.:
212
+ raise ValueError('certified endpoint gap exact touch unresolved')
213
+ if certified_gap>0.:
214
+ raise ValueError('certified endpoint gap contradicts closed endpoint profile')
215
+ if abs(g.value-certified_gap)>padding:
216
+ raise ValueError('certified endpoint gap contradicts endpoint work geometry')
217
+ if abs(g.value)>padding:
218
+ # Agreement with a strictly closed certified gap beyond the padding
219
+ # means the binary64 evaluation resolved a clearly closed endpoint.
220
+ return g
221
+ return Jet2(certified_gap,g.gradient,g.hessian)
222
+
223
+
224
+ def _closing_event_endpoint(pair,start,end,history,alpha,g1,padding,ownership,*,certified_gap=None):
225
+ """Closing-root force map differentiated from the original physical path.
226
+
227
+ Caller certifies the root and event schedule. Earlier released windows may
228
+ contribute cumulative history, but must leave zero elastic traction.
229
+ The optional certified_gap is the exact signed endpoint gap from the
230
+ precise coefficient schedule (native_event_polynomial), admitted only for
231
+ endpoints whose binary64 evaluation lies inside the coordinate padding;
232
+ it corrects only the primal above, leaving the declared derivative chart
233
+ and both-body work maps untouched.
234
+ """
235
+ if type(history) is not FrictionPointState or history.partner_key is not None:
236
+ raise ValueError('closing event requires released physical history')
237
+ source,target=pair.source,pair.target
238
+ old=source.surface_variations(start.positions,start.position_low,start.cell_rotations)
239
+ new=source.surface_variations(end.positions,end.position_low,end.cell_rotations)
240
+ y0=target.adapter.current_positions(start.shell_displacement)
241
+ y1=target.adapter.current_positions(end.shell_displacement)
242
+ base0=old.station.surface_position-old.surface_arm
243
+ base1=new.station.surface_position-new.surface_arm
244
+
245
+ def event_geometry(q, fraction, size):
246
+ # q is an endpoint spatial perturbation. The algorithmic path is the
247
+ # principal declared spatial chart from the fixed physical origin.
248
+ relative_rotation=end.cell_rotations[source.cell]@start.cell_rotations[source.cell].T
249
+ logarithm=_event_rotation_chart(tuple(relative_rotation.ravel()),size)
250
+ rotated=matvec(so3_exp([fraction*v for v in logarithm]),
251
+ [Jet2.constant(v,size) for v in old.surface_arm])
252
+ x=[base0[i]+fraction*(base1[i]+q[i]-base0[i])+rotated[i] for i in range(3)]
253
+ y=[[y0[a,i]+fraction*(y1[a,i]+q[6+3*a+i]-y0[a,i]) for i in range(3)] for a in range(3)]
254
+ frame=_frame(y); point=_point(y,target.barycentric)
255
+ relative=[x[i]-point[i] for i in range(3)]
256
+ return frame,relative
257
+
258
+ # Implicit first-root gradient. No alpha Hessian is needed for the mixed
259
+ # virtual/algorithmic blocks below (alpha has no virtual dependence).
260
+ q=[Jet2.variable(0.,i,16) for i in range(15)]
261
+ f,r=event_geometry(q,Jet2.variable(alpha,15,16),16)
262
+ G=dot([row[2] for row in f],r)
263
+ if abs(G.value)>padding:raise ValueError('first-touch differentiated root mismatch')
264
+ if G.gradient[15]>=-padding:raise ValueError('first-touch derivative lost transversality')
265
+ alpha_gradient=-G.gradient[:15]/G.gradient[15]
266
+ state_only=getattr(pair,'_history_state_only',False)
267
+ size=0 if state_only else 30
268
+ gradient=np.zeros(size)
269
+ if not state_only:gradient[:15]=alpha_gradient
270
+ event_alpha=Jet2(alpha,gradient,np.zeros((size,size)))
271
+ q=[Jet2.constant(0.,size) if state_only else Jet2.variable(0.,i,size) for i in range(15)]
272
+ v=[Jet2.constant(0.,size) if state_only else Jet2.variable(0.,15+i,size) for i in range(15)]
273
+ event_frame,event_relative=event_geometry(q,event_alpha,size)
274
+ event_components=[sum(event_frame[j][i]*event_relative[j] for j in range(3)) for i in range(3)]
275
+ rotated=matvec(constant_matrix(np.eye(3),0) if state_only else _endpoint_virtual_rotation(),
276
+ [Jet2.constant(x,size) for x in new.surface_arm])
277
+ x=[base1[i]+q[i]+v[i]+rotated[i] for i in range(3)]
278
+ y=[[y1[a,i]+q[6+3*a+i]+v[6+3*a+i] for i in range(3)] for a in range(3)]
279
+ frame=(_frame(y) if state_only else _endpoint_frame_jets(np.asarray(y1,dtype=np.float64).tobytes()))
280
+ normal=[row[2] for row in frame];point=_point(y,target.barycentric)
281
+ relative=[x[i]-point[i] for i in range(3)]
282
+ transported=matvec(frame,event_components)
283
+ slip=[relative[i]-transported[i] for i in range(3)]
284
+ normal_slip=dot(normal,slip)
285
+ elastic=[slip[i]-normal[i]*normal_slip for i in range(3)]
286
+ g=dot(normal,relative)
287
+ if abs(g.value-g1)>padding:raise ValueError('first-touch endpoint work geometry mismatch')
288
+ if certified_gap is not None:
289
+ g=_certified_endpoint_primal(g,padding,certified_gap)
290
+ pressure=-pair.normal_stiffness_Pa_per_m*g.value
291
+ trial=trial_coulomb_point(history,material_frame=np.array([[j.value for j in row] for row in frame]),
292
+ relative_increment=np.array([j.value for j in elastic]),normal_pressure=pressure,
293
+ friction_coefficient=pair.friction_coefficient,tangential_stiffness=pair.tangential_stiffness_Pa_per_m,
294
+ partner_key=pair.partner_key)
295
+ energy=.5*pair.normal_stiffness_Pa_per_m*g*g
296
+ if state_only:
297
+ count=42+target.adapter.work_map.shape[1]
298
+ zero=_readonly(np.zeros(count));matrix=_readonly(np.zeros((count,count)))
299
+ return NativeS3ActivationResult(zero,matrix,trial,g.value,pressure,
300
+ pair.reference_weight_m2*energy.value,float(alpha),_readonly(alpha_gradient),
301
+ ownership.path_sha256,ownership.intervals,zero,matrix)
302
+ residual=energy.gradient[15:].copy(); tangent=energy.hessian[15:,:15].copy()
303
+ W=np.array([j.gradient[15:] for j in elastic]); D=np.array([j.gradient[:15] for j in elastic])
304
+ H=np.array([j.hessian[15:,:15] for j in elastic]); traction=np.asarray(trial.traction)
305
+ if trial.branch=='stick':
306
+ dt=-pair.tangential_stiffness_Pa_per_m*D
307
+ else:
308
+ e=np.array([j.value for j in elastic]);norm=np.linalg.norm(e);direction=e/norm
309
+ dp=-pair.normal_stiffness_Pa_per_m*g.gradient[:15]
310
+ dt=(-pair.friction_coefficient*pressure/norm*(np.eye(3)-np.outer(direction,direction))@D
311
+ -pair.friction_coefficient*np.outer(direction,dp))
312
+ residual-=W.T@traction
313
+ tangent-=np.einsum('i,ijk->jk',traction,H)+W.T@dt
314
+ count=42+target.adapter.work_map.shape[1]; mapping=np.zeros((15,count))
315
+ for node,weight in ((source.cell,1-source.t),(source.cell+1,source.t)):
316
+ mapping[:3,6*node:6*node+3]=weight*np.eye(3)
317
+ mapping[3:6,18+3*source.cell:21+3*source.cell]=np.eye(3)
318
+ mapping[6:,42:]=target.adapter.work_map.toarray()
319
+ residual=pair.reference_weight_m2*(mapping.T@residual)
320
+ tangent=pair.reference_weight_m2*(mapping.T@tangent@mapping)
321
+ if not np.all(np.isfinite(residual)) or not np.all(np.isfinite(tangent)):
322
+ raise ValueError('nonfinite first-touch material contribution')
323
+ return NativeS3ActivationResult(_readonly(residual),_readonly(tangent),trial,g.value,pressure,
324
+ pair.reference_weight_m2*energy.value,float(alpha),_readonly(alpha_gradient),ownership.path_sha256,
325
+ ownership.intervals,_readonly(pair.reference_weight_m2*(mapping.T@energy.gradient[15:])),
326
+ _readonly(pair.reference_weight_m2*(mapping.T@energy.hessian[15:,:15]@mapping)))
327
+
328
+
329
+ @dataclass(frozen=True)
330
+ class NativeS3ReleaseResult:
331
+ residual: np.ndarray
332
+ tangent: np.ndarray
333
+ trial: object
334
+ normal_gap_m: float
335
+ normal_pressure_Pa: float
336
+ normal_storage_j: float
337
+ event_fraction: float
338
+ path_sha256: str
339
+ ownership_intervals: int
340
+ history_evaluations: int
341
+ profile: str='NATIVE_S3_TRANSVERSE_RELEASE_POINT_DEV_V1'
342
+
343
+ def spatial_tangent(self):
344
+ return self.tangent
345
+
346
+ @property
347
+ def normal_residual(self):
348
+ return self.residual
349
+
350
+ def normal_spatial_tangent(self):
351
+ return self.tangent
352
+
353
+
354
+ def _release_history(pair,start,end,history,translations,angular,shell_increment,alpha,gap,ownership):
355
+ """Disposable path return maps before opening; endpoint force/tangent zero.
356
+
357
+ Fixed substeps are a bound definition, not an accuracy certificate. Preserve
358
+ dissipation and separately report the final vanishing storage release.
359
+ """
360
+ previous=start; state=history; released=0.; plastic_material=np.zeros(3); dissipations=[]
361
+ old_source=pair.source.evaluate(previous.positions,previous.position_low,previous.cell_rotations)
362
+ old_target=pair.target.physical_pose(previous.shell_displacement)
363
+ for fraction in np.linspace(0.,alpha,pair.event_history_substeps+1)[1:]:
364
+ current=material_path_pose(start,translations,angular,shell_increment,float(fraction))
365
+ source=pair.source.evaluate(current.positions,current.position_low,current.cell_rotations)
366
+ target=pair.target.physical_pose(current.shell_displacement)
367
+ increment=objective_relative_tangent_increment(source_committed=old_source.surface_position,
368
+ target_committed=old_target.position,source_candidate=source.surface_position,
369
+ target_candidate=target.position,target_frame_committed=old_target.material_frame,
370
+ target_frame_candidate=target.material_frame)
371
+ normal=np.asarray(target.material_frame)[:,2]
372
+ pressure=max(0.,-pair.normal_stiffness_Pa_per_m*float((source.surface_position-np.asarray(target.position))@normal))
373
+ # Root residual is already bounded. The event is the zero-pressure stage.
374
+ if fraction==alpha:pressure=0.
375
+ trial=trial_coulomb_point(state,material_frame=target.material_frame,relative_increment=increment,
376
+ normal_pressure=pressure,friction_coefficient=pair.friction_coefficient,
377
+ tangential_stiffness=pair.tangential_stiffness_Pa_per_m,partner_key=pair.partner_key)
378
+ plastic_material+=np.asarray(target.material_frame).T@np.asarray(trial.plastic_slip_increment)
379
+ dissipations.append(trial.dissipated_increment_density)
380
+ state=trial.candidate_state; released+=trial.released_storage_density; previous=current
381
+ old_source=source; old_target=target
382
+ target=pair.target.physical_pose(end.shell_displacement)
383
+ trial=trial_coulomb_point(state,material_frame=target.material_frame,relative_increment=(0.,0.,0.),
384
+ normal_pressure=0.,friction_coefficient=pair.friction_coefficient,
385
+ tangential_stiffness=pair.tangential_stiffness_Pa_per_m,partner_key=None)
386
+ trial=replace(trial,dissipated_increment_density=fsum(dissipations),
387
+ released_storage_density=released,
388
+ plastic_slip_increment=tuple(np.asarray(target.material_frame)@plastic_material))
389
+ count=42+pair.target.adapter.work_map.shape[1]
390
+ return NativeS3ReleaseResult(_readonly(np.zeros(count)),_readonly(np.zeros((count,count))),trial,
391
+ gap,0.,0.,alpha,ownership.path_sha256,ownership.intervals,pair.event_history_substeps+1)
@@ -0,0 +1,198 @@
1
+ """Conservative current boxes for native round material patches.
2
+
3
+ The bound contains the whole declared arc and both half-cell traces, independently
4
+ of quadrature. A circumscribed full round section is used for search only: this
5
+ does not replace the material surface, certify orientation, prove gap or sweep.
6
+ """
7
+ from dataclasses import dataclass
8
+ from fractions import Fraction
9
+ from math import cos, pi, sqrt
10
+
11
+ import numpy as np
12
+
13
+ from anyfesolver._ge_beam3_deterministic_reduction import deterministic_norm
14
+ from anyfesolver._ge_beam3_p5.arrays import _array, _frames
15
+ from .native_retained_station import _readonly
16
+ from .native_surface_quadrature import NativeRoundSurfaceRule
17
+
18
+
19
+ def _restrict_q2(lanes, left, right):
20
+ """Quadratic blossom at exact rational material parameters."""
21
+ l,r=left,right
22
+ return tuple(((1-l)**2*a+2*l*(1-l)*b+l*l*c,
23
+ (1-l)*(1-r)*a+(l*(1-r)+r*(1-l))*b+l*r*c,
24
+ (1-r)**2*a+2*r*(1-r)*b+r*r*c) for a,b,c in lanes)
25
+
26
+
27
+ def _rotation_gain(frame):
28
+ """Upper spectral norm from the Gram residual, including its arithmetic."""
29
+ eps = np.finfo(float).eps
30
+ residual = float(deterministic_norm(frame.T@frame-np.eye(3)))
31
+ residual += 128*eps*(1+deterministic_norm(frame)**2)
32
+ gain = sqrt(1+residual)*(1+128*eps)
33
+ if not np.isfinite(gain):
34
+ raise ValueError('native material frame bound overflow')
35
+ return gain
36
+
37
+
38
+ def _reference_radial_gain(reference):
39
+ """Include admitted nodal nonorthogonality in shortest transport.
40
+
41
+ For Q=I+K+K²/(1+c), on the cross plane ||Q||²=1+
42
+ s²*(||a||²||b||²-1)/(1+c)² for unclipped c. The conservative
43
+ factor4 also covers clipping at c=1. The source rejects denominators
44
+ below 1+cos(0.9*pi). Roll uses the normalized reference tangent.
45
+ """
46
+ eps=np.finfo(float).eps
47
+ margin=1+cos(.9*pi)
48
+ gains=[]
49
+ for frame in reference.nodal_triads:
50
+ e=float(np.linalg.norm(frame.T@frame-np.eye(3)))
51
+ e+=128*eps*(1+float(np.linalg.norm(frame))**2)
52
+ transport=sqrt(1+4*(1+e+128*eps)*(e+128*eps)/margin**2)
53
+ gains.append(_rotation_gain(frame)*transport*(1+1024*eps/margin**2))
54
+ gain=max(gains)
55
+ if not np.isfinite(gain):
56
+ raise ValueError('native material reference frame bound overflow')
57
+ return gain
58
+
59
+
60
+ @dataclass(frozen=True)
61
+ class NativeRoundPatchBounds:
62
+ lower: np.ndarray
63
+ upper: np.ndarray
64
+ cells: tuple[int, ...]
65
+ roundoff_padding_m: float
66
+ profile: str = 'NATIVE_Q2_RETAINED_CURRENT_BERNSTEIN_ROUND_ENVELOPE_DEV_V1'
67
+
68
+ def as_search_box(self):
69
+ return _readonly(np.r_[self.lower, self.upper])
70
+
71
+
72
+ def native_round_patch_bounds(rule, positions, position_low, cell_rotations):
73
+ """Reference-owned Q2 lift + current chord + circumscribed section.
74
+
75
+ For each cell, x_c(t)=(1-t)p_L+t p_R+Uc*b*t*(t-1)/2.
76
+ Its Bernstein control is (p_L,(p_L+p_R)/2-Uc*b/4,p_R).
77
+ Restriction is exact rational arithmetic on the supplied binary coordinates;
78
+ b=X0-2X1+X2 comes from that same centered reference. Bounds use the hull,
79
+ not quadrature or endpoints alone. The material radial part has norm at most
80
+ r*||Uc|| times the reference-frame gain, including admitted nodal Gram
81
+ residuals amplified by shortest transport; roll arithmetic is also bounded.
82
+
83
+ Padding covers bounded floating evaluation of the admitted frame transport
84
+ (half-cell turn<0.9*pi), lift and position. Overflow rejects. Not an exact
85
+ collision certificate or dynamic path enclosure.
86
+ """
87
+ if type(rule) is not NativeRoundSurfaceRule:
88
+ raise TypeError('exact native round surface rule required')
89
+ high = _array(positions, (3, 3), 'native bounds nodal positions')
90
+ low = _array(position_low, (3, 3), 'native bounds nodal low parts')
91
+ rotations = _frames(cell_rotations, 2, 'native bounds cell rotations')
92
+ # Bind the same definitions, normalized coordinate pairs and owned geometry.
93
+ # Search bounds never infer validity from finite sample containment.
94
+ rule.evaluate(high, low, rotations)
95
+ reference = rule.samples[0].station.reference
96
+ X = [[Fraction(float(v)) for v in row] for row in reference.coordinates]
97
+ b = [X[0][j]-2*X[1][j]+X[2][j] for j in range(3)]
98
+ p = [[Fraction(float(h))+Fraction(float(l)) for h,l in zip(hr,lr)]
99
+ for hr,lr in zip(high,low)]
100
+ radius = float(rule.definition['radius'])
101
+ xi_lo, xi_hi = rule.definition['xi_range']
102
+ controls = []
103
+ cells = []
104
+ # Frobenius residual bounds the spectral norm without an SVD rounding claim.
105
+ eps = np.finfo(float).eps
106
+ radial_gain = _reference_radial_gain(reference)
107
+ scale = max(1., radius, float(np.max(np.abs(high))),
108
+ float(np.max(np.abs(low))), float(np.max(np.abs(reference.coordinates))))
109
+ padding = 4096*eps*scale
110
+ for cell, left, right in ((0,max(xi_lo,-1.),min(xi_hi,0.)),
111
+ (1,max(xi_lo,0.),min(xi_hi,1.))):
112
+ if right <= left:
113
+ continue
114
+ cells.append(cell)
115
+ U = [[Fraction(float(v)) for v in row] for row in rotations[cell]]
116
+ turn = [sum(U[i][j]*b[j] for j in range(3)) for i in range(3)]
117
+ lanes = [(p[cell][i],(p[cell][i]+p[cell+1][i])/2-turn[i]/4,
118
+ p[cell+1][i]) for i in range(3)]
119
+ l=Fraction(float(left))+(1 if cell==0 else 0)
120
+ r=Fraction(float(right))+(1 if cell==0 else 0)
121
+ restricted = _restrict_q2(lanes, l, r)
122
+ gain = _rotation_gain(rotations[cell])
123
+ extent = Fraction(radius*radial_gain*gain)+Fraction(padding)
124
+ controls.append(([min(row)-extent for row in restricted],
125
+ [max(row)+extent for row in restricted]))
126
+ try:
127
+ lower = np.array([np.nextafter(float(min(c[0][i] for c in controls)), -np.inf)
128
+ for i in range(3)])
129
+ upper = np.array([np.nextafter(float(max(c[1][i] for c in controls)), np.inf)
130
+ for i in range(3)])
131
+ except (OverflowError, ValueError) as exc:
132
+ raise ValueError('native material search bound overflow') from exc
133
+ if not np.all(np.isfinite(np.r_[lower,upper])):
134
+ raise ValueError('native material search bound overflow')
135
+ return NativeRoundPatchBounds(_readonly(lower),_readonly(upper),tuple(cells),padding)
136
+
137
+
138
+ def native_round_patch_swept_bounds(rule, positions, position_low, cell_rotations,
139
+ translations, angular):
140
+ """Whole patch on the existing affine/Exp path, for search only.
141
+
142
+ Translation is affine in alpha; half-cell lift and radial section rotate.
143
+ A circumsphere of their summed reference radii encloses every spatial
144
+ exponential rotation, not just endpoints. Angular increments obey the
145
+ same <0.9*pi limit as material_path_pose. No collision-time, orientation,
146
+ normal-side or physical-gap certificate is supplied.
147
+ """
148
+ current = native_round_patch_bounds(rule,positions,position_low,cell_rotations)
149
+ move = _array(translations,(3,3),'native bounds translations')
150
+ spin = _array(angular,(2,3),'native bounds angular increments')
151
+ if np.max(np.linalg.norm(spin,axis=1)) >= .9*pi:
152
+ raise ValueError('native material path requires subdivision: angular increment')
153
+ high = np.asarray(positions); low = np.asarray(position_low)
154
+ reference = rule.samples[0].station.reference
155
+ X = [[Fraction(float(v)) for v in row] for row in reference.coordinates]
156
+ b = [X[0][j]-2*X[1][j]+X[2][j] for j in range(3)]
157
+ p = [[Fraction(float(h))+Fraction(float(l)) for h,l in zip(hr,lr)]
158
+ for hr,lr in zip(high,low)]
159
+ delta = [[Fraction(float(v)) for v in row] for row in move]
160
+ from .capped_cylinder import _sqrt_bound
161
+ bnorm = _sqrt_bound(sum(v*v for v in b),upper=True)
162
+ eps = np.finfo(float).eps
163
+ radial = Fraction(float(rule.definition['radius'])*_reference_radial_gain(reference))
164
+ # Same current rotation residual; Exp path evaluation adds floating padding.
165
+ gain = max(_rotation_gain(f) for f in np.asarray(cell_rotations))*(1+128*eps)
166
+ end_scale = max(1.,float(np.max(np.abs(move))),float(np.max(np.abs(high))),
167
+ float(np.max(np.abs(low))),float(np.max(np.abs(reference.coordinates))))
168
+ padding = max(current.roundoff_padding_m,8192*eps*end_scale)
169
+ xi_lo,xi_hi=rule.definition['xi_range']
170
+ hulls=[]
171
+ for cell,left,right in ((0,max(xi_lo,-1.),min(xi_hi,0.)),
172
+ (1,max(xi_lo,0.),min(xi_hi,1.))):
173
+ if right<=left:continue
174
+ l = Fraction(float(left))+(1 if cell==0 else 0)
175
+ r = Fraction(float(right))+(1 if cell==0 else 0)
176
+ extrema = [l*(1-l),r*(1-r)]
177
+ if l<=Fraction(1,2)<=r:extrema.append(Fraction(1,4))
178
+ lift = max(extrema)*bnorm/2
179
+ extent = Fraction(gain)*(lift+radial)+Fraction(padding)
180
+ limits=[[],[]]
181
+ for i in range(3):
182
+ vals = [(1-t)*(p[cell][i]+a*delta[cell][i])+
183
+ t*(p[cell+1][i]+a*delta[cell+1][i])
184
+ for a in (0,1) for t in (l,r)]
185
+ limits[0].append(min(vals)-extent)
186
+ limits[1].append(max(vals)+extent)
187
+ hulls.append(limits)
188
+ try:
189
+ lower=np.array([np.nextafter(float(min(h[0][i] for h in hulls)),-np.inf)
190
+ for i in range(3)])
191
+ upper=np.array([np.nextafter(float(max(h[1][i] for h in hulls)),np.inf)
192
+ for i in range(3)])
193
+ except (OverflowError,ValueError) as exc:
194
+ raise ValueError('native material swept bound overflow') from exc
195
+ if not np.all(np.isfinite(np.r_[lower,upper])):
196
+ raise ValueError('native material swept bound overflow')
197
+ return NativeRoundPatchBounds(_readonly(lower),_readonly(upper),current.cells,padding,
198
+ 'NATIVE_Q2_RETAINED_AFFINE_EXP_SPHERE_SWEEP_DEV_V1')